diff --git a/src/User.cpp b/src/User.cpp index c36f62eb..c9ab761d 100644 --- a/src/User.cpp +++ b/src/User.cpp @@ -1,4 +1,3 @@ -#include "User.h" #include "common.h" #include "patcher.h" @@ -6,15 +5,15 @@ #include "Hud.h" #include "Replay.h" #include "Timer.h" +#include "Script.h" +#include "User.h" CPlaceName& CUserDisplay::PlaceName = *(CPlaceName*)0x8F29BC; COnscreenTimer& CUserDisplay::OnscnTimer = *(COnscreenTimer*)0x862238; CPager& CUserDisplay::Pager = *(CPager*)0x8F2744; CCurrentVehicle& CUserDisplay::CurrentVehicle = *(CCurrentVehicle*)0x8F5FE8; -char* CTheScripts::ScriptSpace = (char*)0x74B248; - -int COnscreenTimer::Init() { +void COnscreenTimer::Init() { m_bDisabled = false; for(uint32 i = 0; i < NUMONSCREENTIMERENTRIES; i++) { m_sEntries[i].m_nTimerOffset = 0; @@ -29,11 +28,10 @@ int COnscreenTimer::Init() { m_sEntries[i].m_bTimerProcessed = 0; m_sEntries[i].m_bCounterProcessed = 0; } - return 1; } void COnscreenTimer::Process() { - if(CReplay::Mode != 1 && !m_bDisabled) { + if(CReplay::Mode != CReplay::MODE_1 && !m_bDisabled) { for(uint32 i = 0; i < NUMONSCREENTIMERENTRIES; i++) { m_sEntries[i].Process(); } @@ -83,7 +81,7 @@ void COnscreenTimer::AddCounter(uint32 offset, uint16 type, char* text) { m_sEntries[i].m_nCounterOffset = offset; if(text) { - strncpy((char*)m_sEntries[i].m_aCounterText, text, 10); + strncpy(m_sEntries[i].m_aCounterText, text, 10); } else { m_sEntries[i].m_aCounterText[0] = 0; } @@ -102,28 +100,31 @@ void COnscreenTimer::AddClock(uint32 offset, char* text) { m_sEntries[i].m_nTimerOffset = offset; if(text) { - strncpy((char*)m_sEntries[i].m_aTimerText, text, 10u); + strncpy(m_sEntries[i].m_aTimerText, text, 10); } else { m_sEntries[i].m_aTimerText[0] = 0; } } void COnscreenTimerEntry::Process() { - if(m_nTimerOffset) { - uint32* timerPtr = (uint32*)&CTheScripts::ScriptSpace[m_nTimerOffset]; - uint32 oldTime = *timerPtr; - int32 newTime = int32(oldTime - uint32(20.0f * CTimer::GetTimeStep())); - if(newTime < 0) { - *timerPtr = 0; - m_bTimerProcessed = 0; - m_nTimerOffset = 0; - m_aTimerText[0] = 0; - } else { - *timerPtr = (uint32)newTime; - uint32 oldTimeSeconds = oldTime / 1000; - if(oldTimeSeconds <= 11 && newTime / 1000 != oldTimeSeconds) { - DMAudio.PlayFrontEndSound(0x93u, newTime / 1000); - } + if(m_nTimerOffset == 0) { + return; + } + + uint32* timerPtr = (uint32*)&CTheScripts::ScriptSpace[m_nTimerOffset]; + uint32 oldTime = *timerPtr; + int32 newTime = int32(oldTime - uint32(20.0f * CTimer::GetTimeStep())); + if(newTime < 0) { + *timerPtr = 0; + m_bTimerProcessed = 0; + m_nTimerOffset = 0; + m_aTimerText[0] = 0; + } else { + *timerPtr = (uint32)newTime; + uint32 oldTimeSeconds = oldTime / 1000; + if(oldTimeSeconds <= 11 && newTime / 1000 != oldTimeSeconds) { + // TODO: use an enum here + DMAudio.PlayFrontEndSound(0x93, newTime / 1000); } } } @@ -132,16 +133,16 @@ bool COnscreenTimerEntry::ProcessForDisplay() { m_bTimerProcessed = false; m_bCounterProcessed = false; - if(!m_nTimerOffset && !m_nCounterOffset) { + if(m_nTimerOffset == 0 && m_nCounterOffset == 0) { return false; } - if(m_nTimerOffset) { + if(m_nTimerOffset != 0) { m_bTimerProcessed = true; ProcessForDisplayTimer(); } - if(m_nCounterOffset) { + if(m_nCounterOffset != 0) { m_bCounterProcessed = true; ProcessForDisplayCounter(); } @@ -160,16 +161,16 @@ int COnscreenTimerEntry::ProcessForDisplayCounter() { } STARTPATCHES -InjectHook(0x429160, &COnscreenTimerEntry::Process, PATCH_JUMP); -InjectHook(0x429110, &COnscreenTimerEntry::ProcessForDisplay, PATCH_JUMP); -InjectHook(0x429080, &COnscreenTimerEntry::ProcessForDisplayTimer, PATCH_JUMP); -InjectHook(0x4290F0, &COnscreenTimerEntry::ProcessForDisplayCounter, PATCH_JUMP); + InjectHook(0x429160, &COnscreenTimerEntry::Process, PATCH_JUMP); + InjectHook(0x429110, &COnscreenTimerEntry::ProcessForDisplay, PATCH_JUMP); + InjectHook(0x429080, &COnscreenTimerEntry::ProcessForDisplayTimer, PATCH_JUMP); + InjectHook(0x4290F0, &COnscreenTimerEntry::ProcessForDisplayCounter, PATCH_JUMP); -InjectHook(0x429220, &COnscreenTimer::Init, PATCH_JUMP); -InjectHook(0x429320, &COnscreenTimer::Process, PATCH_JUMP); -InjectHook(0x4292E0, &COnscreenTimer::ProcessForDisplay, PATCH_JUMP); -InjectHook(0x429450, &COnscreenTimer::ClearCounter, PATCH_JUMP); -InjectHook(0x429410, &COnscreenTimer::ClearClock, PATCH_JUMP); -InjectHook(0x4293B0, &COnscreenTimer::AddCounter, PATCH_JUMP); -InjectHook(0x429350, &COnscreenTimer::AddClock, PATCH_JUMP); + InjectHook(0x429220, &COnscreenTimer::Init, PATCH_JUMP); + InjectHook(0x429320, &COnscreenTimer::Process, PATCH_JUMP); + InjectHook(0x4292E0, &COnscreenTimer::ProcessForDisplay, PATCH_JUMP); + InjectHook(0x429450, &COnscreenTimer::ClearCounter, PATCH_JUMP); + InjectHook(0x429410, &COnscreenTimer::ClearClock, PATCH_JUMP); + InjectHook(0x4293B0, &COnscreenTimer::AddCounter, PATCH_JUMP); + InjectHook(0x429350, &COnscreenTimer::AddClock, PATCH_JUMP); ENDPATCHES diff --git a/src/User.h b/src/User.h index b2d0b053..8b744c7e 100644 --- a/src/User.h +++ b/src/User.h @@ -1,14 +1,12 @@ #pragma once -#include "common.h" - class COnscreenTimerEntry { public: uint32 m_nTimerOffset; uint32 m_nCounterOffset; - uint8 m_aTimerText[10]; - uint8 m_aCounterText[10]; + char m_aTimerText[10]; + char m_aCounterText[10]; uint16 m_nType; char m_bCounterBuffer[42]; char m_bTimerBuffer[42]; @@ -24,20 +22,14 @@ public: static_assert(sizeof(COnscreenTimerEntry) == 0x74, "COnscreenTimerEntry: error"); -class CTheScripts{ -public: - static char *ScriptSpace;//[163840] -}; - class COnscreenTimer { public: COnscreenTimerEntry m_sEntries[NUMONSCREENTIMERENTRIES]; bool m_bProcessed; bool m_bDisabled; - char field_119[2]; - int Init(); + void Init(); void Process(); void ProcessForDisplay(); diff --git a/src/control/Replay.h b/src/control/Replay.h index eca818d6..85a9e35e 100644 --- a/src/control/Replay.h +++ b/src/control/Replay.h @@ -3,7 +3,11 @@ class CReplay { public: - static void Display(void); + enum { + MODE_1 + }; static uint8 &Mode; + + static void Display(void); }; diff --git a/src/control/Script.cpp b/src/control/Script.cpp new file mode 100644 index 00000000..71fc7bcd --- /dev/null +++ b/src/control/Script.cpp @@ -0,0 +1,6 @@ +#include "common.h" +#include "patcher.h" + +#include "Script.h" + +uint8 *CTheScripts::ScriptSpace = (uint8*)0x74B248; diff --git a/src/control/Script.h b/src/control/Script.h new file mode 100644 index 00000000..6f329e1f --- /dev/null +++ b/src/control/Script.h @@ -0,0 +1,7 @@ +#pragma once + +class CTheScripts +{ +public: + static uint8 *ScriptSpace;//[160*1024] +};