Allow overriding g_TickRateDiv at runtime

This commit is contained in:
Matthew Coppola committed 2024-12-06 17:20:24 -05:00
1 parent 0b8a333e2b
commit 687b966c5e
3 files changed
+71 -1

No files matched your search

+2
View File
@@ -36,6 +36,7 @@ u32 g_VmNumPageReplaces = 0;
u8 g_VmShowStats = 0;
s32 g_TickRateDiv = 1;
s32 g_TickRateDivOverride = 0;
s32 g_TickExtraSleep = true;
s32 g_SkipIntro = false;
@@ -165,6 +166,7 @@ PD_CONSTRUCTOR static void gameConfigInit(void)
configRegisterInt("Game.MenuMouseControl", &g_MenuMouseControl, 0, 1);
configRegisterFloat("Game.ScreenShakeIntensity", &g_ViShakeIntensityMult, 0.f, 10.f);
configRegisterInt("Game.TickRateDivisor", &g_TickRateDiv, 0, 10);
configRegisterInt("Game.TickRateDivisorOverride", &g_TickRateDivOverride, 0, 1);
configRegisterInt("Game.ExtraSleep", &g_TickExtraSleep, 0, 1);
configRegisterInt("Game.SkipIntro", &g_SkipIntro, 0, 1);
configRegisterInt("Game.DisableMpDeathMusic", &g_MusicDisableMpDeath, 0, 1);
+68 -1
View File
@@ -775,7 +775,7 @@ static MenuItemHandlerResult menuhandlerFramerateLimit(s32 operation, struct men
data->slider.value = videoGetFramerateLimit();
break;
case MENUOP_SET:
if (g_TickRateDiv < 2) {
if (!g_TickRateDivOverride) {
g_TickRateDiv = (data->slider.value == 0 || data->slider.value > 60) ? 0 : 1;
}
videoSetFramerateLimit(data->slider.value);
@@ -960,6 +960,49 @@ static MenuItemHandlerResult menuhandlerGeMuzzleFlashes(s32 operation, struct me
return 0;
}
static MenuItemHandlerResult menuhandlerTickrateDivisorOverride(s32 operation, struct menuitem *item, union handlerdata *data)
{
s32 framerateLimit;
switch (operation) {
case MENUOP_GET:
return g_TickRateDivOverride;
case MENUOP_SET:
g_TickRateDivOverride = data->checkbox.value;
if (!g_TickRateDivOverride) {
framerateLimit = videoGetFramerateLimit();
g_TickRateDiv = (framerateLimit == 0 || framerateLimit > 60) ? 0 : 1;
}
}
return 0;
}
static MenuItemHandlerResult menuhandlerTickrateDivisor(s32 operation, struct menuitem *item, union handlerdata *data)
{
s32 framerateLimit;
switch (operation) {
case MENUOP_CHECKHIDDEN:
if (!g_TickRateDivOverride) {
return true;
}
break;
case MENUOP_GETSLIDER:
data->slider.value = g_TickRateDiv;
break;
case MENUOP_SET:
if (g_TickRateDivOverride) {
g_TickRateDiv = data->slider.value;
} else {
framerateLimit = videoGetFramerateLimit();
g_TickRateDiv = (framerateLimit == 0 || framerateLimit > 60) ? 0 : 1;
}
}
return 0;
}
static MenuItemHandlerResult menuhandlerCenterHUD(s32 operation, struct menuitem *item, union handlerdata *data)
{
static const char *opts[] = {
@@ -1169,6 +1212,30 @@ struct menuitem g_ExtendedVideoMenuItems[] = {
0,
NULL,
},
{
MENUITEMTYPE_CHECKBOX,
0,
MENUITEMFLAG_LITERAL_TEXT,
(uintptr_t)"Override Tickrate Divisor",
0,
menuhandlerTickrateDivisorOverride,
},
{
MENUITEMTYPE_SLIDER,
0,
MENUITEMFLAG_LITERAL_TEXT | MENUITEMFLAG_SLIDER_WIDE,
(uintptr_t)"Tickrate Divisor",
10,
menuhandlerTickrateDivisor,
},
{
MENUITEMTYPE_SEPARATOR,
0,
0,
0,
0,
NULL,
},
{
MENUITEMTYPE_SELECTABLE,
0,
+1
View File
@@ -550,6 +550,7 @@ extern s32 g_BlurFb;
extern s32 g_BlurFbCapTimer;
extern bool g_BlurFbDirty;
extern s32 g_TickRateDiv;
extern s32 g_TickRateDivOverride;
extern s32 g_TickExtraSleep;
extern s32 g_MusicDisableMpDeath;
extern s32 g_BgunGeMuzzleFlashes;