summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
authoreray orçunus <erayorcunus@gmail.com>2020-03-25 15:13:06 +0100
committereray orçunus <erayorcunus@gmail.com>2020-03-26 16:54:03 +0100
commit0fe55eb5432906016cc3526caf3f86d5bf85aff1 (patch)
tree0f4f6bfafc9e3138bf090efb16b18e6fa22c2eab /src/core
parentMerge pull request #353 from Sergeanur/Debug (diff)
downloadre3-0fe55eb5432906016cc3526caf3f86d5bf85aff1.tar
re3-0fe55eb5432906016cc3526caf3f86d5bf85aff1.tar.gz
re3-0fe55eb5432906016cc3526caf3f86d5bf85aff1.tar.bz2
re3-0fe55eb5432906016cc3526caf3f86d5bf85aff1.tar.lz
re3-0fe55eb5432906016cc3526caf3f86d5bf85aff1.tar.xz
re3-0fe55eb5432906016cc3526caf3f86d5bf85aff1.tar.zst
re3-0fe55eb5432906016cc3526caf3f86d5bf85aff1.zip
Diffstat (limited to 'src/core')
-rw-r--r--src/core/ControllerConfig.cpp10
-rw-r--r--src/core/EventList.cpp23
-rw-r--r--src/core/EventList.h2
-rw-r--r--src/core/Frontend.cpp268
-rw-r--r--src/core/Frontend.h12
-rw-r--r--src/core/Timer.h13
-rw-r--r--src/core/config.h7
7 files changed, 205 insertions, 130 deletions
diff --git a/src/core/ControllerConfig.cpp b/src/core/ControllerConfig.cpp
index 92c51182..541257c6 100644
--- a/src/core/ControllerConfig.cpp
+++ b/src/core/ControllerConfig.cpp
@@ -417,6 +417,11 @@ void CControllerConfigManager::UpdateJoyInConfigMenus_ButtonDown(int32 button, i
case 13:
pad->PCTempJoyState.DPadUp = 255;
break;
+#ifdef REGISTER_START_BUTTON
+ case 12:
+ pad->PCTempJoyState.Start = 255;
+ break;
+#endif
case 11:
pad->PCTempJoyState.RightShock = 255;
break;
@@ -839,6 +844,11 @@ void CControllerConfigManager::UpdateJoyInConfigMenus_ButtonUp(int32 button, int
case 13:
pad->PCTempJoyState.DPadUp = 0;
break;
+#ifdef REGISTER_START_BUTTON
+ case 12:
+ pad->PCTempJoyState.Start = 0;
+ break;
+#endif
case 11:
pad->PCTempJoyState.RightShock = 0;
break;
diff --git a/src/core/EventList.cpp b/src/core/EventList.cpp
index caf0cb3f..4364359a 100644
--- a/src/core/EventList.cpp
+++ b/src/core/EventList.cpp
@@ -5,10 +5,13 @@
#include "World.h"
#include "Wanted.h"
#include "EventList.h"
+#include "Messages.h"
+#include "Text.h"
+#include "main.h"
int32 CEventList::ms_nFirstFreeSlotIndex;
-//CEvent gaEvent[NUMEVENTS];
-CEvent *gaEvent = (CEvent*)0x6EF830;
+CEvent gaEvent[NUMEVENTS];
+//CEvent *gaEvent = (CEvent*)0x6EF830;
enum
{
@@ -207,8 +210,20 @@ CEventList::ReportCrimeForEvent(eEventType type, int32 crimeId, bool copsDontCar
default: crime = CRIME_NONE; break;
}
- if(crime == CRIME_NONE)
- return;
+#ifdef VC_PED_PORTS
+ if (crime == CRIME_HIT_PED && ((CPed*)crimeId)->IsPointerValid() &&
+ FindPlayerPed()->m_pWanted->m_nWantedLevel == 0 && ((CPed*)crimeId)->m_ped_flagE2) {
+
+ if(!((CPed*)crimeId)->DyingOrDead()) {
+ sprintf(gString, "$50 Good Citizen Bonus!");
+ AsciiToUnicode(gString, gUString);
+ CMessages::AddBigMessage(gUString, 5000, 0);
+ CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 50;
+ }
+ } else
+#endif
+ if(crime == CRIME_NONE)
+ return;
CVector playerPedCoors = FindPlayerPed()->GetPosition();
CVector playerCoors = FindPlayerCoors();
diff --git a/src/core/EventList.h b/src/core/EventList.h
index 2799fca4..1c03c9d6 100644
--- a/src/core/EventList.h
+++ b/src/core/EventList.h
@@ -63,4 +63,4 @@ public:
static void ReportCrimeForEvent(eEventType type, int32, bool);
};
-extern CEvent *gaEvent; \ No newline at end of file
+extern CEvent gaEvent[NUMEVENTS]; \ No newline at end of file
diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp
index 4c2f3afa..aff8a3ec 100644
--- a/src/core/Frontend.cpp
+++ b/src/core/Frontend.cpp
@@ -181,6 +181,7 @@ ScaleAndCenterX(float x)
#endif
#define isPlainTextScreen(screen) (screen == MENUPAGE_BRIEFS || screen == MENUPAGE_STATS)
+
#ifdef PS2_LIKE_MENU
#define ChangeScreen(screen, option, updateDelay, withReverseAlpha) \
do { \
@@ -235,67 +236,100 @@ ScaleAndCenterX(float x)
m_nHoverOption = HOVEROPTION_NOT_HOVERING; \
} while(0)
-#define ScrollUpListByOne() \
- do { \
- if (m_nSelectedListRow == m_nFirstVisibleRowOnList) { \
- if (m_nFirstVisibleRowOnList > 0) { \
- m_nSelectedListRow--; \
- m_nFirstVisibleRowOnList--; \
- m_nCurListItemY -= LIST_HEIGHT / m_nTotalListRow; \
- } \
- } else { \
- m_nSelectedListRow--; \
- } \
- } while(0)
+// --- Functions not in the game/inlined starts
-#define ScrollDownListByOne() \
- do { \
- if (m_nSelectedListRow == m_nFirstVisibleRowOnList + MAX_VISIBLE_LIST_ROW - 1) { \
- if (m_nFirstVisibleRowOnList < m_nTotalListRow - MAX_VISIBLE_LIST_ROW) { \
- m_nSelectedListRow++; \
- m_nFirstVisibleRowOnList++; \
- m_nCurListItemY += LIST_HEIGHT / m_nTotalListRow; \
- } \
- } else { \
- if (m_nSelectedListRow < m_nTotalListRow - 1) { \
- m_nSelectedListRow++; \
- } \
- } \
- } while(0)
+inline void
+CMenuManager::ScrollUpListByOne()
+{
+ if (m_nSelectedListRow == m_nFirstVisibleRowOnList) {
+ if (m_nFirstVisibleRowOnList > 0) {
+ m_nSelectedListRow--;
+ m_nFirstVisibleRowOnList--;
+ m_nCurListItemY -= LIST_HEIGHT / m_nTotalListRow;
+ }
+ } else {
+ m_nSelectedListRow--;
+ }
+}
-#define PageUpList(playSoundOnSuccess) \
- do { \
- if (m_nTotalListRow > MAX_VISIBLE_LIST_ROW) { \
- if (m_nFirstVisibleRowOnList > 0) { \
- if(playSoundOnSuccess) \
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_DENIED, 0); \
- \
- m_nFirstVisibleRowOnList = max(0, m_nFirstVisibleRowOnList - MAX_VISIBLE_LIST_ROW); \
- m_nSelectedListRow = min(m_nSelectedListRow, m_nFirstVisibleRowOnList + MAX_VISIBLE_LIST_ROW - 1); \
- } else { \
- m_nFirstVisibleRowOnList = 0; \
- m_nSelectedListRow = 0; \
- } \
- m_nCurListItemY = (LIST_HEIGHT / m_nTotalListRow) * m_nFirstVisibleRowOnList; \
- } \
- } while(0)
+inline void
+CMenuManager::ScrollDownListByOne()
+{
+ if (m_nSelectedListRow == m_nFirstVisibleRowOnList + MAX_VISIBLE_LIST_ROW - 1) {
+ if (m_nFirstVisibleRowOnList < m_nTotalListRow - MAX_VISIBLE_LIST_ROW) {
+ m_nSelectedListRow++;
+ m_nFirstVisibleRowOnList++;
+ m_nCurListItemY += LIST_HEIGHT / m_nTotalListRow;
+ }
+ } else {
+ if (m_nSelectedListRow < m_nTotalListRow - 1) {
+ m_nSelectedListRow++;
+ }
+ }
+}
-#define PageDownList(playSoundOnSuccess) \
- do { \
- if (m_nTotalListRow > MAX_VISIBLE_LIST_ROW) { \
- if (m_nFirstVisibleRowOnList < m_nTotalListRow - MAX_VISIBLE_LIST_ROW) { \
- if(playSoundOnSuccess) \
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_DENIED, 0); \
- \
- m_nFirstVisibleRowOnList = min(m_nFirstVisibleRowOnList + MAX_VISIBLE_LIST_ROW, m_nTotalListRow - MAX_VISIBLE_LIST_ROW); \
- m_nSelectedListRow = max(m_nSelectedListRow, m_nFirstVisibleRowOnList); \
- } else { \
- m_nFirstVisibleRowOnList = m_nTotalListRow - MAX_VISIBLE_LIST_ROW; \
- m_nSelectedListRow = m_nTotalListRow - 1; \
- } \
- m_nCurListItemY = (LIST_HEIGHT / m_nTotalListRow) * m_nFirstVisibleRowOnList; \
- } \
- } while(0)
+inline void
+CMenuManager::PageUpList(bool playSoundOnSuccess)
+{
+ if (m_nTotalListRow > MAX_VISIBLE_LIST_ROW) {
+ if (m_nFirstVisibleRowOnList > 0) {
+ if(playSoundOnSuccess)
+ DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_DENIED, 0);
+
+ m_nFirstVisibleRowOnList = max(0, m_nFirstVisibleRowOnList - MAX_VISIBLE_LIST_ROW);
+ m_nSelectedListRow = min(m_nSelectedListRow, m_nFirstVisibleRowOnList + MAX_VISIBLE_LIST_ROW - 1);
+ } else {
+ m_nFirstVisibleRowOnList = 0;
+ m_nSelectedListRow = 0;
+ }
+ m_nCurListItemY = (LIST_HEIGHT / m_nTotalListRow) * m_nFirstVisibleRowOnList;
+ }
+}
+
+inline void
+CMenuManager::PageDownList(bool playSoundOnSuccess)
+{
+ if (m_nTotalListRow > MAX_VISIBLE_LIST_ROW) {
+ if (m_nFirstVisibleRowOnList < m_nTotalListRow - MAX_VISIBLE_LIST_ROW) {
+ if(playSoundOnSuccess)
+ DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_DENIED, 0);
+
+ m_nFirstVisibleRowOnList = min(m_nFirstVisibleRowOnList + MAX_VISIBLE_LIST_ROW, m_nTotalListRow - MAX_VISIBLE_LIST_ROW);
+ m_nSelectedListRow = max(m_nSelectedListRow, m_nFirstVisibleRowOnList);
+ } else {
+ m_nFirstVisibleRowOnList = m_nTotalListRow - MAX_VISIBLE_LIST_ROW;
+ m_nSelectedListRow = m_nTotalListRow - 1;
+ }
+ m_nCurListItemY = (LIST_HEIGHT / m_nTotalListRow) * m_nFirstVisibleRowOnList;
+ }
+}
+
+inline void
+CMenuManager::ThingsToDoBeforeLeavingPage()
+{
+ if ((m_nCurrScreen == MENUPAGE_SKIN_SELECT) && strcmp(m_aSkinName, m_PrefsSkinFile) != 0) {
+ CWorld::Players[0].SetPlayerSkin(m_PrefsSkinFile);
+ } else if (m_nCurrScreen == MENUPAGE_SOUND_SETTINGS) {
+ if (m_nPrefsAudio3DProviderIndex != -1)
+ m_nPrefsAudio3DProviderIndex = DMAudio.GetCurrent3DProviderIndex();
+#ifdef TIDY_UP_PBP
+ DMAudio.StopFrontEndTrack();
+ OutputDebugString("FRONTEND AUDIO TRACK STOPPED");
+#endif
+ } else if (m_nCurrScreen == MENUPAGE_GRAPHICS_SETTINGS) {
+ m_nDisplayVideoMode = m_nPrefsVideoMode;
+ }
+
+ if (m_nCurrScreen == MENUPAGE_SKIN_SELECT) {
+ CPlayerSkin::EndFrontendSkinEdit();
+ }
+
+ if ((m_nCurrScreen == MENUPAGE_SKIN_SELECT) || (m_nCurrScreen == MENUPAGE_KEYBOARD_CONTROLS)) {
+ m_nTotalListRow = 0;
+ }
+}
+
+// ------ Functions not in the game/inlined ends
void
CMenuManager::BuildStatLine(char *text, void *stat, uint8 aFloat, void *stat2)
@@ -1173,7 +1207,6 @@ void CMenuManager::DrawFrontEnd()
bbNames[5] = { "FESZ_QU",MENUPAGE_EXIT };
bbTabCount = 6;
}
- m_nCurrScreen = MENUPAGE_NEW_GAME;
} else {
if (bbTabCount != 8) {
bbNames[0] = { "FEB_STA",MENUPAGE_STATS };
@@ -1186,8 +1219,8 @@ void CMenuManager::DrawFrontEnd()
bbNames[7] = { "FESZ_QU",MENUPAGE_EXIT };
bbTabCount = 8;
}
- m_nCurrScreen = MENUPAGE_STATS;
}
+ m_nCurrScreen = bbNames[0].screenId;
bottomBarActive = true;
curBottomBarOption = 0;
}
@@ -1285,7 +1318,6 @@ void CMenuManager::DrawFrontEndNormal()
eFrontendSprites currentSprite;
switch (m_nCurrScreen) {
case MENUPAGE_STATS:
- case MENUPAGE_NEW_GAME:
case MENUPAGE_START_MENU:
case MENUPAGE_PAUSE_MENU:
case MENUPAGE_EXIT:
@@ -1315,7 +1347,7 @@ void CMenuManager::DrawFrontEndNormal()
currentSprite = FE_ICONCONTROLS;
break;
default:
- /* actually MENUPAGE_NEW_GAME too*/
+ /*case MENUPAGE_NEW_GAME: */
/*case MENUPAGE_BRIEFS: */
currentSprite = FE_ICONBRIEF;
break;
@@ -1324,16 +1356,16 @@ void CMenuManager::DrawFrontEndNormal()
m_aFrontEndSprites[currentSprite].Draw(CRect(MENU_X_LEFT_ALIGNED(50.0f), MENU_Y(50.0f), MENU_X_RIGHT_ALIGNED(50.0f), SCREEN_SCALE_FROM_BOTTOM(95.0f)), CRGBA(255, 255, 255, m_nMenuFadeAlpha > 255 ? 255 : m_nMenuFadeAlpha));
if (m_nMenuFadeAlpha < 255) {
- static int LastFade = 0;
+ static uint32 LastFade = 0;
if (m_nMenuFadeAlpha <= 0 && reverseAlpha) {
reverseAlpha = false;
ChangeScreen(pendingScreen, pendingOption, true, false);
- } else if(CTimer::GetTimeInMillisecondsPauseMode() - LastFade > 10){
+ } else {
if (!reverseAlpha)
- m_nMenuFadeAlpha += 20;
+ m_nMenuFadeAlpha += min((CTimer::GetTimeInMillisecondsPauseMode() - LastFade) / 33.0f, 1.0f) * 20.0f;
else
- m_nMenuFadeAlpha = max(m_nMenuFadeAlpha - 30, 0);
+ m_nMenuFadeAlpha = max(0, m_nMenuFadeAlpha - min((CTimer::GetTimeInMillisecondsPauseMode() - LastFade) / 33.0f, 1.0f) * 30.0f);
LastFade = CTimer::GetTimeInMillisecondsPauseMode();
}
@@ -1537,12 +1569,18 @@ void CMenuManager::DrawFrontEndNormal()
}
if (m_nMenuFadeAlpha < 255) {
- static int LastFade = 0;
+ static uint32 LastFade = 0;
+ // Famous transparent menu bug. 33.0f = 1000.f/30.f (original frame limiter fps)
+#ifdef FIX_BUGS
+ m_nMenuFadeAlpha += min((CTimer::GetTimeInMillisecondsPauseMode() - LastFade) / 33.0f, 1.0f) * 20.0f;
+ LastFade = CTimer::GetTimeInMillisecondsPauseMode();
+#else
if(CTimer::GetTimeInMillisecondsPauseMode() - LastFade > 10){
m_nMenuFadeAlpha += 20;
LastFade = CTimer::GetTimeInMillisecondsPauseMode();
}
+#endif
if (m_nMenuFadeAlpha > 255){
m_aMenuSprites[currentSprite].Draw(CRect(0.0f, 0.0f, SCREEN_WIDTH, SCREEN_HEIGHT), CRGBA(255, 255, 255, 255));
@@ -1950,7 +1988,7 @@ WRAPPER void CMenuManager::Process(void) { EAXJMP(0x485100); }
#else
void CMenuManager::Process(void)
{
- m_bMenuNotProcessed = false;
+ m_bMenuStateChanged = false;
if (!m_bSaveMenuActive && TheCamera.GetScreenFadeStatus() != FADE_0)
return;
@@ -2701,6 +2739,8 @@ CMenuManager::ProcessButtonPresses(void)
if (CPad::GetPad(0)->GetEnterJustDown() || CPad::GetPad(0)->GetCrossJustDown()) {
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_DENIED, 0);
bottomBarActive = false;
+
+ // If there's a menu change with fade ongoing, finish it now
if (reverseAlpha)
m_nMenuFadeAlpha = 0;
return;
@@ -3116,51 +3156,43 @@ CMenuManager::ProcessButtonPresses(void)
if (goBack) {
CMenuManager::ResetHelperText();
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_EXIT, 0);
- if (m_nCurrScreen == MENUPAGE_PAUSE_MENU && !m_bGameNotLoaded && !m_bMenuNotProcessed){
- if (CMenuManager::m_PrefsVsyncDisp != CMenuManager::m_PrefsVsync) {
- CMenuManager::m_PrefsVsync = CMenuManager::m_PrefsVsyncDisp;
- }
- CMenuManager::RequestFrontEndShutDown();
- } else if (m_nCurrScreen == MENUPAGE_CHOOSE_SAVE_SLOT
-#ifdef PS2_SAVE_DIALOG
- || m_nCurrScreen == MENUPAGE_SAVE
-#endif
- ) {
- CMenuManager::RequestFrontEndShutDown();
- } else if (m_nCurrScreen == MENUPAGE_SOUND_SETTINGS) {
- DMAudio.StopFrontEndTrack();
- OutputDebugString("FRONTEND AUDIO TRACK STOPPED");
- }
-
- int oldScreen = !m_bGameNotLoaded ? aScreens[m_nCurrScreen].m_PreviousPage[1] : aScreens[m_nCurrScreen].m_PreviousPage[0];
- int oldOption = !m_bGameNotLoaded ? aScreens[m_nCurrScreen].m_ParentEntry[1] : aScreens[m_nCurrScreen].m_ParentEntry[0];
-
#ifdef PS2_LIKE_MENU
- if (bottomBarActive){
- bottomBarActive = false;
- if (!m_bGameNotLoaded) {
+ if (m_nCurrScreen == MENUPAGE_PAUSE_MENU || bottomBarActive) {
+#else
+ if (m_nCurrScreen == MENUPAGE_PAUSE_MENU) {
+#endif
+ if (!m_bGameNotLoaded && !m_bMenuStateChanged) {
if (CMenuManager::m_PrefsVsyncDisp != CMenuManager::m_PrefsVsync) {
CMenuManager::m_PrefsVsync = CMenuManager::m_PrefsVsyncDisp;
}
CMenuManager::RequestFrontEndShutDown();
}
+
+ // We're already resuming, we don't need further processing.
+#if defined(FIX_BUGS) || defined(PS2_LIKE_MENU)
return;
+#endif
+ }
+#ifdef PS2_LIKE_MENU
+ else if (m_nCurrScreen == MENUPAGE_CHOOSE_SAVE_SLOT || m_nCurrScreen == MENUPAGE_SAVE) {
+#else
+ else if (m_nCurrScreen == MENUPAGE_CHOOSE_SAVE_SLOT) {
+#endif
+ CMenuManager::RequestFrontEndShutDown();
+ }
+ // It's now in ThingsToDoBeforeLeavingPage()
+#ifndef TIDY_UP_PBP
+ else if (m_nCurrScreen == MENUPAGE_SOUND_SETTINGS) {
+ DMAudio.StopFrontEndTrack();
+ OutputDebugString("FRONTEND AUDIO TRACK STOPPED");
}
#endif
+ int oldScreen = !m_bGameNotLoaded ? aScreens[m_nCurrScreen].m_PreviousPage[1] : aScreens[m_nCurrScreen].m_PreviousPage[0];
+ int oldOption = !m_bGameNotLoaded ? aScreens[m_nCurrScreen].m_ParentEntry[1] : aScreens[m_nCurrScreen].m_ParentEntry[0];
+
if (oldScreen != -1) {
- if ((m_nCurrScreen == MENUPAGE_SKIN_SELECT) && strcmp(m_aSkinName, m_PrefsSkinFile) != 0) {
- CWorld::Players[0].SetPlayerSkin(m_PrefsSkinFile);
- }
- if ((m_nCurrScreen == MENUPAGE_SOUND_SETTINGS) && (m_nPrefsAudio3DProviderIndex != -1)) {
- m_nPrefsAudio3DProviderIndex = DMAudio.GetCurrent3DProviderIndex();
- }
- if (m_nCurrScreen == MENUPAGE_GRAPHICS_SETTINGS) {
- m_nDisplayVideoMode = m_nPrefsVideoMode;
- }
- if (m_nCurrScreen == MENUPAGE_SKIN_SELECT) {
- CPlayerSkin::EndFrontendSkinEdit();
- }
+ ThingsToDoBeforeLeavingPage();
#ifdef PS2_LIKE_MENU
if (!bottomBarActive &&
@@ -3168,10 +3200,8 @@ CMenuManager::ProcessButtonPresses(void)
bottomBarActive = true;
} else
#endif
+ {
ChangeScreen(oldScreen, oldOption, true, true);
-
- if ((m_nPrevScreen == MENUPAGE_SKIN_SELECT) || (m_nPrevScreen == MENUPAGE_KEYBOARD_CONTROLS)) {
- m_nTotalListRow = 0;
}
// We will go back for sure at this point, why process other things?!
@@ -3512,11 +3542,16 @@ WRAPPER void CMenuManager::SwitchMenuOnAndOff() { EAXJMP(0x488790); }
#else
void CMenuManager::SwitchMenuOnAndOff()
{
- if (!!(CPad::GetPad(0)->NewState.Start && !CPad::GetPad(0)->OldState.Start)
- || m_bShutDownFrontEndRequested || m_bStartUpFrontEndRequested) {
+ bool menuWasActive = !!m_bMenuActive;
- if (!m_bMenuActive)
- m_bMenuActive = true;
+ // Reminder: You need REGISTER_START_BUTTON defined to make it work.
+ if (CPad::GetPad(0)->GetStartJustDown()
+#ifdef FIX_BUGS
+ && !m_bGameNotLoaded
+#endif
+ || m_bShutDownFrontEndRequested || m_bStartUpFrontEndRequested) {
+
+ m_bMenuActive = !m_bMenuActive;
if (m_bShutDownFrontEndRequested)
m_bMenuActive = false;
@@ -3525,8 +3560,13 @@ void CMenuManager::SwitchMenuOnAndOff()
if (m_bMenuActive) {
CTimer::StartUserPause();
- }
- else {
+ } else {
+#ifdef PS2_LIKE_MENU
+ bottomBarActive = false;
+#endif
+#ifdef FIX_BUGS
+ ThingsToDoBeforeLeavingPage();
+#endif
ShutdownJustMenu();
SaveSettings();
m_bStartUpFrontEndRequested = false;
@@ -3553,7 +3593,7 @@ void CMenuManager::SwitchMenuOnAndOff()
PcSaveHelper.PopulateSlotInfo();
m_nCurrOption = 0;
}
-/* // Unused?
+/* // PS2 leftover?
if (m_nCurrScreen != MENUPAGE_SOUND_SETTINGS && gMusicPlaying)
{
DMAudio.StopFrontEndTrack();
@@ -3561,8 +3601,8 @@ void CMenuManager::SwitchMenuOnAndOff()
gMusicPlaying = 0;
}
*/
- if (!m_bMenuActive)
- m_bMenuNotProcessed = true;
+ if (m_bMenuActive != menuWasActive)
+ m_bMenuStateChanged = true;
m_bStartUpFrontEndRequested = false;
m_bShutDownFrontEndRequested = false;
diff --git a/src/core/Frontend.h b/src/core/Frontend.h
index 6d7327d3..3dbed164 100644
--- a/src/core/Frontend.h
+++ b/src/core/Frontend.h
@@ -403,7 +403,7 @@ public:
int32 m_nHelperTextMsgId;
bool m_bLanguageLoaded;
bool m_bMenuActive;
- bool m_bMenuNotProcessed;
+ bool m_bMenuStateChanged;
bool m_bWaitingForNewKeyBind;
bool m_bStartGameLoading;
bool m_bFirstTime;
@@ -540,8 +540,14 @@ public:
void WaitForUserCD();
void PrintController();
- // New content:
- uint8 GetNumberOfMenuOptions();
+ // New (not in function or inlined in the game)
+ void ThingsToDoBeforeLeavingPage();
+ void ScrollUpListByOne();
+ void ScrollDownListByOne();
+ void PageUpList(bool);
+ void PageDownList(bool);
+
+ // uint8 GetNumberOfMenuOptions();
};
static_assert(sizeof(CMenuManager) == 0x564, "CMenuManager: error");
diff --git a/src/core/Timer.h b/src/core/Timer.h
index 89c4a430..ef525be7 100644
--- a/src/core/Timer.h
+++ b/src/core/Timer.h
@@ -2,7 +2,7 @@
class CTimer
{
-public:
+
static uint32 &m_snTimeInMilliseconds;
static uint32 &m_snTimeInMillisecondsPauseMode;
static uint32 &m_snTimeInMillisecondsNonClipped;
@@ -11,19 +11,20 @@ public:
static float &ms_fTimeScale;
static float &ms_fTimeStep;
static float &ms_fTimeStepNonClipped;
+public:
static bool &m_UserPause;
static bool &m_CodePause;
- static float GetTimeStep(void) { return ms_fTimeStep; }
+ static const float &GetTimeStep(void) { return ms_fTimeStep; }
static void SetTimeStep(float ts) { ms_fTimeStep = ts; }
static float GetTimeStepInSeconds() { return ms_fTimeStep / 50.0f; }
static float GetTimeStepInMilliseconds() { return ms_fTimeStep / 50.0f * 1000.0f; }
- static float GetTimeStepNonClipped(void) { return ms_fTimeStepNonClipped; }
+ static const float &GetTimeStepNonClipped(void) { return ms_fTimeStepNonClipped; }
static float GetTimeStepNonClippedInSeconds(void) { return ms_fTimeStepNonClipped / 50.0f; }
static void SetTimeStepNonClipped(float ts) { ms_fTimeStepNonClipped = ts; }
- static uint32 GetFrameCounter(void) { return m_FrameCounter; }
+ static const uint32 &GetFrameCounter(void) { return m_FrameCounter; }
static void SetFrameCounter(uint32 fc) { m_FrameCounter = fc; }
- static uint32 GetTimeInMilliseconds(void) { return m_snTimeInMilliseconds; }
+ static const uint32 &GetTimeInMilliseconds(void) { return m_snTimeInMilliseconds; }
static void SetTimeInMilliseconds(uint32 t) { m_snTimeInMilliseconds = t; }
static uint32 GetTimeInMillisecondsNonClipped(void) { return m_snTimeInMillisecondsNonClipped; }
static void SetTimeInMillisecondsNonClipped(uint32 t) { m_snTimeInMillisecondsNonClipped = t; }
@@ -31,7 +32,7 @@ public:
static void SetTimeInMillisecondsPauseMode(uint32 t) { m_snTimeInMillisecondsPauseMode = t; }
static uint32 GetPreviousTimeInMilliseconds(void) { return m_snPreviousTimeInMilliseconds; }
static void SetPreviousTimeInMilliseconds(uint32 t) { m_snPreviousTimeInMilliseconds = t; }
- static float GetTimeScale(void) { return ms_fTimeScale; }
+ static const float &GetTimeScale(void) { return ms_fTimeScale; }
static void SetTimeScale(float ts) { ms_fTimeScale = ts; }
static bool GetIsPaused() { return m_UserPause || m_CodePause; }
diff --git a/src/core/config.h b/src/core/config.h
index 9235e744..ff779946 100644
--- a/src/core/config.h
+++ b/src/core/config.h
@@ -101,6 +101,8 @@ enum Config {
NUMPEDGROUPS = 31,
NUMMODELSPERPEDGROUP = 8,
+ NUMROADBLOCKS = 600,
+
NUMVISIBLEENTITIES = 2000,
NUMINVISIBLEENTITIES = 150,
@@ -169,10 +171,11 @@ enum Config {
#endif
#define FIX_BUGS // fixes bugs that we've came across during reversing, TODO: use this more
-#define TOGGLEABLE_BETA_FEATURES // toggleable from debug menu. doesn't have too many things
+#define TOGGLEABLE_BETA_FEATURES // toggleable from debug menu. not too many things
// Pad
#define KANGAROO_CHEAT
+#define REGISTER_START_BUTTON // currently only in menu sadly. resumes the game
// Hud, frontend and radar
#define ASPECT_RATIO_SCALE // Not just makes everything scale with aspect ratio, also adds support for all aspect ratios
@@ -199,5 +202,5 @@ enum Config {
// Peds
#define ANIMATE_PED_COL_MODEL
#define VC_PED_PORTS // various ports from VC's CPed, mostly subtle
-#define NEW_WALK_AROUND_ALGORITHM // to make walking around vehicles/objects less awkward
+// #define NEW_WALK_AROUND_ALGORITHM // to make walking around vehicles/objects less awkward
#define CANCELLABLE_CAR_ENTER