port: very experimental uncapped framerate support

set Game.TickRateDivisor in pd.ini to 0

this still has many issues, such as combat boost not working
This commit is contained in:
fgsfds committed 2023-11-14 23:29:44 +01:00
1 parent 8a348ab1b5
commit 72e9e2af95
5 files changed
+14 -2

No files matched your search

+3
View File
@@ -35,6 +35,8 @@ u32 g_VmNumPageMisses = 0;
u32 g_VmNumPageReplaces = 0;
u8 g_VmShowStats = 0;
s32 g_TickRateDiv = 1;
extern s32 g_StageNum;
s32 bootGetMemSize(void)
@@ -135,6 +137,7 @@ PD_CONSTRUCTOR static void gameConfigInit(void)
configRegisterInt("Game.MemorySize", &g_OsMemSizeMb, 4, 2048);
configRegisterInt("Game.CenterHUD", &g_HudCenter, 0, 1);
configRegisterFloat("Game.ScreenShakeIntensity", &g_ViShakeIntensityMult, 0.f, 10.f);
configRegisterInt("Game.TickRateDivisor", &g_TickRateDiv, 0, 10);
for (s32 j = 0; j < MAX_PLAYERS; ++j) {
const s32 i = j + 1;
configRegisterFloat(strFmt("Game.Player%d.FovY", i), &g_PlayerExtCfg[j].fovy, 5.f, 175.f);
+1 -1
View File
@@ -494,7 +494,7 @@ void mainLoop(void)
while (g_MainChangeToStageNum < 0) {
const s32 cycles = osGetCount() - g_Vars.thisframestartt;
if (cycles >= g_Vars.mininc60 * CYCLES_PER_FRAME - CYCLES_PER_FRAME / 2) {
if (!g_Vars.mininc60 || (cycles >= g_Vars.mininc60 * CYCLES_PER_FRAME - CYCLES_PER_FRAME / 2)) {
schedStartFrame(&g_Sched);
mainTick();
schedEndFrame(&g_Sched);
+5 -1
View File
@@ -41,12 +41,16 @@ void frametimeCalculate(void)
diffframe60 = (g_Vars.lostframetime60t + diffframet + CYCLES_PER_FRAME / 2) / CYCLES_PER_FRAME;
diffframe240 = (g_Vars.lostframetime240t + diffframet + CYCLES_PER_FRAME / 2 / 4) / (CYCLES_PER_FRAME / 4);
} while (diffframe60 < g_Vars.mininc60);
} while (g_Vars.mininc60 && diffframe60 < g_Vars.mininc60);
g_Vars.lostframetime60t = g_Vars.lostframetime60t + diffframet - diffframe60 * CYCLES_PER_FRAME;
g_Vars.lostframetime240t = g_Vars.lostframetime240t + diffframet - diffframe240 * (CYCLES_PER_FRAME / 4);
#ifdef PLATFORM_N64
g_Vars.mininc60 = 1;
#else
g_Vars.mininc60 = g_TickRateDiv;
#endif
frametimeApply(diffframe60, diffframe240, count);
}
+1
View File
@@ -545,6 +545,7 @@ extern u32 g_HudAlignModeR;
extern s32 g_PrevFrameFb;
extern s32 g_BlurFb;
extern s32 g_BlurFbCapTimer;
extern s32 g_TickRateDiv;
#define PLAYER_EXTCFG() g_PlayerExtCfg[g_Vars.currentplayerstats->mpindex & 3]
#define PLAYER_DEFAULT_FOV (PLAYER_EXTCFG().fovy)
+4
View File
@@ -28,7 +28,11 @@ void varsInit(void)
g_Vars.lostframetime60t = 0;
g_Vars.lostframetime240t = 0;
g_Vars.lvupdate240rem = 2;
#ifdef PLATFORM_N64
g_Vars.mininc60 = 1;
#else
g_Vars.mininc60 = g_TickRateDiv;
#endif
g_Vars.roomportalrecursionlimit = 254;
g_Vars.diffframe240f = 4;
g_Vars.diffframe240freal = 4;