forked from Ports/perfect_dark
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:
1 parent
8a348ab1b5
commit
72e9e2af95
5 files changed
+14
-2
No files matched your search
@@ -35,6 +35,8 @@ u32 g_VmNumPageMisses = 0;
|
|||||||
u32 g_VmNumPageReplaces = 0;
|
u32 g_VmNumPageReplaces = 0;
|
||||||
u8 g_VmShowStats = 0;
|
u8 g_VmShowStats = 0;
|
||||||
|
|
||||||
|
s32 g_TickRateDiv = 1;
|
||||||
|
|
||||||
extern s32 g_StageNum;
|
extern s32 g_StageNum;
|
||||||
|
|
||||||
s32 bootGetMemSize(void)
|
s32 bootGetMemSize(void)
|
||||||
@@ -135,6 +137,7 @@ PD_CONSTRUCTOR static void gameConfigInit(void)
|
|||||||
configRegisterInt("Game.MemorySize", &g_OsMemSizeMb, 4, 2048);
|
configRegisterInt("Game.MemorySize", &g_OsMemSizeMb, 4, 2048);
|
||||||
configRegisterInt("Game.CenterHUD", &g_HudCenter, 0, 1);
|
configRegisterInt("Game.CenterHUD", &g_HudCenter, 0, 1);
|
||||||
configRegisterFloat("Game.ScreenShakeIntensity", &g_ViShakeIntensityMult, 0.f, 10.f);
|
configRegisterFloat("Game.ScreenShakeIntensity", &g_ViShakeIntensityMult, 0.f, 10.f);
|
||||||
|
configRegisterInt("Game.TickRateDivisor", &g_TickRateDiv, 0, 10);
|
||||||
for (s32 j = 0; j < MAX_PLAYERS; ++j) {
|
for (s32 j = 0; j < MAX_PLAYERS; ++j) {
|
||||||
const s32 i = j + 1;
|
const s32 i = j + 1;
|
||||||
configRegisterFloat(strFmt("Game.Player%d.FovY", i), &g_PlayerExtCfg[j].fovy, 5.f, 175.f);
|
configRegisterFloat(strFmt("Game.Player%d.FovY", i), &g_PlayerExtCfg[j].fovy, 5.f, 175.f);
|
||||||
|
|||||||
+1
-1
@@ -494,7 +494,7 @@ void mainLoop(void)
|
|||||||
|
|
||||||
while (g_MainChangeToStageNum < 0) {
|
while (g_MainChangeToStageNum < 0) {
|
||||||
const s32 cycles = osGetCount() - g_Vars.thisframestartt;
|
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);
|
schedStartFrame(&g_Sched);
|
||||||
mainTick();
|
mainTick();
|
||||||
schedEndFrame(&g_Sched);
|
schedEndFrame(&g_Sched);
|
||||||
|
|||||||
+5
-1
@@ -41,12 +41,16 @@ void frametimeCalculate(void)
|
|||||||
|
|
||||||
diffframe60 = (g_Vars.lostframetime60t + diffframet + CYCLES_PER_FRAME / 2) / CYCLES_PER_FRAME;
|
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);
|
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.lostframetime60t = g_Vars.lostframetime60t + diffframet - diffframe60 * CYCLES_PER_FRAME;
|
||||||
g_Vars.lostframetime240t = g_Vars.lostframetime240t + diffframet - diffframe240 * (CYCLES_PER_FRAME / 4);
|
g_Vars.lostframetime240t = g_Vars.lostframetime240t + diffframet - diffframe240 * (CYCLES_PER_FRAME / 4);
|
||||||
|
|
||||||
|
#ifdef PLATFORM_N64
|
||||||
g_Vars.mininc60 = 1;
|
g_Vars.mininc60 = 1;
|
||||||
|
#else
|
||||||
|
g_Vars.mininc60 = g_TickRateDiv;
|
||||||
|
#endif
|
||||||
|
|
||||||
frametimeApply(diffframe60, diffframe240, count);
|
frametimeApply(diffframe60, diffframe240, count);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -545,6 +545,7 @@ extern u32 g_HudAlignModeR;
|
|||||||
extern s32 g_PrevFrameFb;
|
extern s32 g_PrevFrameFb;
|
||||||
extern s32 g_BlurFb;
|
extern s32 g_BlurFb;
|
||||||
extern s32 g_BlurFbCapTimer;
|
extern s32 g_BlurFbCapTimer;
|
||||||
|
extern s32 g_TickRateDiv;
|
||||||
|
|
||||||
#define PLAYER_EXTCFG() g_PlayerExtCfg[g_Vars.currentplayerstats->mpindex & 3]
|
#define PLAYER_EXTCFG() g_PlayerExtCfg[g_Vars.currentplayerstats->mpindex & 3]
|
||||||
#define PLAYER_DEFAULT_FOV (PLAYER_EXTCFG().fovy)
|
#define PLAYER_DEFAULT_FOV (PLAYER_EXTCFG().fovy)
|
||||||
|
|||||||
@@ -28,7 +28,11 @@ void varsInit(void)
|
|||||||
g_Vars.lostframetime60t = 0;
|
g_Vars.lostframetime60t = 0;
|
||||||
g_Vars.lostframetime240t = 0;
|
g_Vars.lostframetime240t = 0;
|
||||||
g_Vars.lvupdate240rem = 2;
|
g_Vars.lvupdate240rem = 2;
|
||||||
|
#ifdef PLATFORM_N64
|
||||||
g_Vars.mininc60 = 1;
|
g_Vars.mininc60 = 1;
|
||||||
|
#else
|
||||||
|
g_Vars.mininc60 = g_TickRateDiv;
|
||||||
|
#endif
|
||||||
g_Vars.roomportalrecursionlimit = 254;
|
g_Vars.roomportalrecursionlimit = 254;
|
||||||
g_Vars.diffframe240f = 4;
|
g_Vars.diffframe240f = 4;
|
||||||
g_Vars.diffframe240freal = 4;
|
g_Vars.diffframe240freal = 4;
|
||||||
|
|||||||
Reference in new issue
Block a user