From ac0eb92367b26ebf4b019c583f3caafb7371241c Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 5 Sep 2020 22:41:02 +0200 Subject: [PATCH] - fixed timer screwups in Exhumed. The leveltime ticker only runs at 30 fps so all places where it replaces totalclock need to multiply it by 4. --- source/exhumed/src/object.cpp | 10 +++++----- source/exhumed/src/ramses.cpp | 16 ++++++++-------- source/exhumed/src/sound.cpp | 2 +- source/exhumed/src/status.cpp | 6 +++--- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/source/exhumed/src/object.cpp b/source/exhumed/src/object.cpp index dcb987f01..da52fdf36 100644 --- a/source/exhumed/src/object.cpp +++ b/source/exhumed/src/object.cpp @@ -1529,20 +1529,20 @@ void DoFinale() { StopLocalSound(); PlayLocalSound(StaticSound[kSound76], 0); - nextstage = leveltime + 120; + nextstage = leveltime*4 + 120; nFinaleStage++; } } else if (nFinaleStage <= 2) { - if (leveltime >= nextstage) + if (leveltime*4 >= nextstage) { PlayLocalSound(StaticSound[kSound77], 0); nFinaleStage++; - nextstage = leveltime + 360; + nextstage = leveltime*4 + 360; } } - else if (nFinaleStage == 3 && leveltime >= nextstage) + else if (nFinaleStage == 3 && leveltime*4 >= nextstage) { EndLevel = 13; } @@ -1706,7 +1706,7 @@ void ExplodeEnergyBlock(int nSprite) else { nFinaleSpr = nSprite; - lFinaleStart = leveltime; + lFinaleStart = leveltime*4; if (!lFinaleStart) { lFinaleStart = lFinaleStart + 1; diff --git a/source/exhumed/src/ramses.cpp b/source/exhumed/src/ramses.cpp index b7e467e01..a26e0fe92 100644 --- a/source/exhumed/src/ramses.cpp +++ b/source/exhumed/src/ramses.cpp @@ -127,7 +127,7 @@ void InitSpiritHead() sprite[nSpiritSprite].cstat &= 0x7FFF; - nHeadTimeStart = leveltime; + nHeadTimeStart = leveltime*4; memset(Worktile, TRANSPARENT_INDEX, WorktileSize); TileFiles.InvalidateTile(kTileRamsesWorkTile); @@ -152,8 +152,8 @@ void InitSpiritHead() StartSwirlies(); sprintf(filename, "LEV%d.PUP", currentLevel->levelNumber); - lNextStateChange = leveltime; - lHeadStartClock = leveltime; + lNextStateChange = leveltime*4; + lHeadStartClock = leveltime*4; auto headfd = fileSystem.OpenFileReader(filename); if (!headfd.isOpen()) @@ -219,7 +219,7 @@ int DoSpiritHead() if (nHeadStage < 2 || nHeadStage != 5) { - nPixelsToShow = (leveltime - nHeadTimeStart) * 15; + nPixelsToShow = (leveltime*4 - nHeadTimeStart) * 15; if (nPixelsToShow > nPixels) { nPixelsToShow = nPixels; @@ -242,10 +242,10 @@ int DoSpiritHead() if (!nHeadStage) { - if ((leveltime - nHeadTimeStart) > 480) + if ((leveltime*4 - nHeadTimeStart) > 480) { nHeadStage = 1; - nHeadTimeStart = leveltime + 480; + nHeadTimeStart = leveltime*4 + 480; } for (int i = 0; i < nPixelsToShow; i++) @@ -426,7 +426,7 @@ int DoSpiritHead() Worktile[kSpiritX + ecx] = pixelval[i]; } - if ((leveltime - lHeadStartClock) > 600) + if ((leveltime*4 - lHeadStartClock) > 600) { CopyHeadToWorkTile(kTileRamsesGold); } @@ -467,7 +467,7 @@ int DoSpiritHead() } else { - if (lNextStateChange <= leveltime) + if (lNextStateChange <= leveltime*4) { if (nPupData) { diff --git a/source/exhumed/src/sound.cpp b/source/exhumed/src/sound.cpp index 75890ad70..8fe377e09 100644 --- a/source/exhumed/src/sound.cpp +++ b/source/exhumed/src/sound.cpp @@ -450,7 +450,7 @@ void EXSoundEngine::CalcPosVel(int type, const void* source, const float pt[3], else if (type == SOURCE_Swirly) { int which = *(int*)source; - float phase = (leveltime << (4 + which)) * (M_PI / 1024); + float phase = (leveltime << (6 + which)) * (M_PI / 1024); pos->X = fcampos.X + 256 * cos(phase); pos->Z = fcampos.Z + 256 * sin(phase); } diff --git a/source/exhumed/src/status.cpp b/source/exhumed/src/status.cpp index 432c15db0..0d8f7aa54 100644 --- a/source/exhumed/src/status.cpp +++ b/source/exhumed/src/status.cpp @@ -631,7 +631,7 @@ private: int shade; - if (leveltime / kTimerTicks & 1) { + if ((leveltime / 30) & 1) { shade = -100; } else { @@ -649,14 +649,14 @@ private: if (word_9AD54[i] == nScore) { int v9 = dword_9AD64[i]; - if (v9 && v9 <= leveltime) { + if (v9 && v9 <= leveltime*4) { dword_9AD64[i] = 0; } } else { word_9AD54[i] = nScore; - dword_9AD64[i] = leveltime + 30; + dword_9AD64[i] = leveltime*4 + 30; } DrawGraphic(tileGetTexture(nTile), x, 7, DI_ITEM_CENTER, 1, -1, -1, 1, 1);