- Blood: replaced several uses of gameclock with gFrameClock

Mainly those which do not use its full precision.
Choke needs interpolation support, though.
This commit is contained in:
Christoph Oelckers 2020-09-01 20:08:37 +02:00
parent b19681b50c
commit 4b45ee150f
9 changed files with 28 additions and 35 deletions

View file

@ -60,6 +60,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "gamestate.h" #include "gamestate.h"
#include "screenjob.h" #include "screenjob.h"
#include "mapinfo.h" #include "mapinfo.h"
#include "choke.h"
BEGIN_BLD_NS BEGIN_BLD_NS
@ -242,7 +243,6 @@ void StartLevel(MapRecord *level)
gGameOptions.uGameFlags &= ~3; gGameOptions.uGameFlags &= ~3;
PreloadCache(); PreloadCache();
InitMirrors(); InitMirrors();
gFrameClock = 0;
trInit(); trInit();
if (!bVanilla && !gMe->packSlots[1].isActive) // if diving suit is not active, turn off reverb sound effect if (!bVanilla && !gMe->packSlots[1].isActive) // if diving suit is not active, turn off reverb sound effect
sfxSetReverb(0); sfxSetReverb(0);
@ -257,6 +257,8 @@ void StartLevel(MapRecord *level)
lastTic = -1; lastTic = -1;
paused = 0; paused = 0;
levelTryPlayMusic(); levelTryPlayMusic();
gFrameClock = 0;
gChoke.reset();
} }
@ -419,7 +421,7 @@ void GameInterface::app_init()
sndInit(); sndInit();
registerosdcommands(); registerosdcommands();
gChoke.sub_83ff0(518, sub_84230); gChoke.init(518, sub_84230);
UpdateDacs(0, true); UpdateDacs(0, true);
enginecompatibility_mode = ENGINECOMPATIBILITY_19960925;//bVanilla; enginecompatibility_mode = ENGINECOMPATIBILITY_19960925;//bVanilla;
@ -513,7 +515,7 @@ static void commonTicker()
auto completion = [=](bool = false) auto completion = [=](bool = false)
{ {
StartLevel(sng); StartLevel(sng);
gFrameClock = gameclock;
gamestate = GS_LEVEL; gamestate = GS_LEVEL;
}; };

View file

@ -35,7 +35,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
BEGIN_BLD_NS BEGIN_BLD_NS
void CChoke::sub_83ff0(int a1, void(*a2)(PLAYER*)) void CChoke::init(int a1, void(*a2)(PLAYER*))
{ {
at0 = NULL; at0 = NULL;
at1c = a2; at1c = a2;
@ -47,21 +47,21 @@ void CChoke::sub_83ff0(int a1, void(*a2)(PLAYER*))
at8->nSprite = -1; at8->nSprite = -1;
at8->x = at14; at8->x = at14;
at8->y = at18; at8->y = at18;
at8->Preload(); //at8->Preload();
sub_84218(); atc = at8->at10;
at10 = 0;
} }
} }
void CChoke::sub_84110(int x, int y) void CChoke::animateChoke(int x, int y, int smoothratio)
{ {
if (!at8) if (!at8)
return; return;
int v4 = gFrameClock; int myclock = gFrameClock + mulscale16(4, smoothratio);
gFrameClock = gameclock;
at8->x = x; at8->x = x;
at8->y = y; at8->y = y;
int vd = gameclock-at10; int vd = myclock-at10;
at10 = gameclock; at10 = myclock;
atc -= vd; atc -= vd;
if (atc <= 0 || atc > at8->at10) if (atc <= 0 || atc > at8->at10)
atc = at8->at10; atc = at8->at10;
@ -70,14 +70,8 @@ void CChoke::sub_84110(int x, int y)
// This originally overlaid the HUD but that simply doesn't work right with the HUD being a genuine overlay. // This originally overlaid the HUD but that simply doesn't work right with the HUD being a genuine overlay.
// It also never adjusted for a reduced 3D view // It also never adjusted for a reduced 3D view
at8->Draw(vdi, 10, 0, 0, true); at8->Draw(vdi, 10, 0, 0, true);
gFrameClock = v4;
} }
void CChoke::sub_84218()
{
atc = at8->at10;
at10 = gameclock;
}
void sub_84230(PLAYER *pPlayer) void sub_84230(PLAYER *pPlayer)
{ {

View file

@ -41,9 +41,9 @@ public:
at14 = 0; at14 = 0;
at18 = 0; at18 = 0;
}; };
void sub_83ff0(int a1, void(*a2)(PLAYER*)); void init(int a1, void(*a2)(PLAYER*));
void sub_84110(int x, int y); void animateChoke(int x, int y, int smoothratio);
void sub_84218(); void reset() { at10 = 0; }
char *at0; char *at0;
QAV *at8; QAV *at8;
int atc; int atc;

View file

@ -98,11 +98,13 @@ void FireInit(void)
void FireProcess(void) void FireProcess(void)
{ {
// This assumes a smooth high frame rate. Ugh...
static int lastUpdate; static int lastUpdate;
if (gameclock < lastUpdate || lastUpdate + 2 < gameclock) int clock = I_GetBuildTime()/ 2;
if (clock < lastUpdate || lastUpdate + 2 < clock)
{ {
DoFireFrame(); DoFireFrame();
lastUpdate = gameclock; lastUpdate = clock;
TileFiles.InvalidateTile(2342); TileFiles.InvalidateTile(2342);
} }
} }

View file

@ -509,7 +509,6 @@ bool GameInterface::LoadGame(FSaveGameNode* node)
playerSetRace(&gPlayer[i], gPlayer[i].lifeMode); playerSetRace(&gPlayer[i], gPlayer[i].lifeMode);
viewSetErrorMessage(""); viewSetErrorMessage("");
gFrameCount = 0; gFrameCount = 0;
gameclock = 0;
lastTic = -1; lastTic = -1;
paused = 0; paused = 0;
gamestate = GS_LEVEL; gamestate = GS_LEVEL;
@ -601,7 +600,6 @@ void MyLoadSave::Load(void)
Read(gotsector, sizeof(gotsector)); Read(gotsector, sizeof(gotsector));
Read(&gFrameClock, sizeof(gFrameClock)); Read(&gFrameClock, sizeof(gFrameClock));
Read(&gFrameCount, sizeof(gFrameCount)); Read(&gFrameCount, sizeof(gFrameCount));
Read(&gameclock, sizeof(gameclock));
Read(&gLevelTime, sizeof(gLevelTime)); Read(&gLevelTime, sizeof(gLevelTime));
Read(&paused, sizeof(paused)); Read(&paused, sizeof(paused));
Read(baseWall, sizeof(baseWall[0])*numwalls); Read(baseWall, sizeof(baseWall[0])*numwalls);
@ -691,8 +689,6 @@ void MyLoadSave::Save(void)
Write(gotsector, sizeof(gotsector)); Write(gotsector, sizeof(gotsector));
Write(&gFrameClock, sizeof(gFrameClock)); Write(&gFrameClock, sizeof(gFrameClock));
Write(&gFrameCount, sizeof(gFrameCount)); Write(&gFrameCount, sizeof(gFrameCount));
int nGameClock = gameclock;
Write(&nGameClock, sizeof(nGameClock));
Write(&gLevelTime, sizeof(gLevelTime)); Write(&gLevelTime, sizeof(gLevelTime));
Write(&paused, sizeof(paused)); Write(&paused, sizeof(paused));
Write(baseWall, sizeof(baseWall[0])*numwalls); Write(baseWall, sizeof(baseWall[0])*numwalls);

View file

@ -55,7 +55,6 @@ void netResetToSinglePlayer(void)
void netReset(void) void netReset(void)
{ {
gFrameClock = gameclock = 0;
lastTic = -1; lastTic = -1;
gPredictTail = 0; gPredictTail = 0;
gNetFifoTail = 0; gNetFifoTail = 0;

View file

@ -4804,7 +4804,7 @@ void playerQavSceneDraw(PLAYER* pPlayer, int a2, double a3, double a4, int a5) {
int v4 = (pPlayer->weaponTimer == 0) ? gameclock % pQAV->at10 : pQAV->at10 - pPlayer->weaponTimer; int v4 = (pPlayer->weaponTimer == 0) ? gameclock % pQAV->at10 : pQAV->at10 - pPlayer->weaponTimer;
int flags = 2; int nInv = powerupCheck(pPlayer, kPwUpShadowCloak); int flags = 2; int nInv = powerupCheck(pPlayer, kPwUpShadowCloak);
if (nInv >= 120 * 8 || (nInv != 0 && (gameclock & 32))) { if (nInv >= 120 * 8 || (nInv != 0 && (gFrameClock & 32))) {
a2 = -128; flags |= 1; a2 = -128; flags |= 1;
} }

View file

@ -307,7 +307,7 @@ private:
if (powerups[i].remainingDuration) if (powerups[i].remainingDuration)
{ {
int remainingSeconds = powerups[i].remainingDuration / 100; int remainingSeconds = powerups[i].remainingDuration / 100;
if (remainingSeconds > warningTime || (gameclock & 32)) if (remainingSeconds > warningTime || (gFrameClock & 32))
{ {
DrawStatMaskedSprite(powerups[i].nTile, x, y + powerups[i].yOffset, 0, 0, 256, (int)(65536 * powerups[i].nScaleRatio), DI_SCREEN_LEFT_CENTER); DrawStatMaskedSprite(powerups[i].nTile, x, y + powerups[i].yOffset, 0, 0, 256, (int)(65536 * powerups[i].nScaleRatio), DI_SCREEN_LEFT_CENTER);
} }
@ -477,7 +477,7 @@ private:
{ {
FString gTempStr; FString gTempStr;
int x = 1, y = 1; int x = 1, y = 1;
if (dword_21EFD0[0] == 0 || (gameclock & 8)) if (dword_21EFD0[0] == 0 || (gFrameClock & 8))
{ {
SBar_DrawString(this, &smallf, GStrings("TXT_COLOR_BLUE"), x, y, 0, CR_LIGHTBLUE, 1., -1, -1, 1, 1); SBar_DrawString(this, &smallf, GStrings("TXT_COLOR_BLUE"), x, y, 0, CR_LIGHTBLUE, 1., -1, -1, 1, 1);
dword_21EFD0[0] = dword_21EFD0[0] - arg; dword_21EFD0[0] = dword_21EFD0[0] - arg;
@ -487,7 +487,7 @@ private:
SBar_DrawString(this, &smallf, gTempStr, x, y + 10, 0, CR_LIGHTBLUE, 1., -1, -1, 1, 1); SBar_DrawString(this, &smallf, gTempStr, x, y + 10, 0, CR_LIGHTBLUE, 1., -1, -1, 1, 1);
} }
x = -2; x = -2;
if (dword_21EFD0[1] == 0 || (gameclock & 8)) if (dword_21EFD0[1] == 0 || (gFrameClock & 8))
{ {
SBar_DrawString(this, &smallf, GStrings("TXT_COLOR_RED"), x, y, DI_TEXT_ALIGN_RIGHT, CR_BRICK, 1., -1, -1, 1, 1); SBar_DrawString(this, &smallf, GStrings("TXT_COLOR_RED"), x, y, DI_TEXT_ALIGN_RIGHT, CR_BRICK, 1., -1, -1, 1, 1);
dword_21EFD0[1] = dword_21EFD0[1] - arg; dword_21EFD0[1] = dword_21EFD0[1] - arg;
@ -508,7 +508,7 @@ private:
{ {
dassert(0 == team || 1 == team); // 0: blue, 1: red dassert(0 == team || 1 == team); // 0: blue, 1: red
if (dword_21EFD0[team] == 0 || (gameclock & 8)) if (dword_21EFD0[team] == 0 || (gFrameClock & 8))
{ {
dword_21EFD0[team] = dword_21EFD0[team] - arg; dword_21EFD0[team] = dword_21EFD0[team] - arg;
if (dword_21EFD0[team] < 0) if (dword_21EFD0[team] < 0)
@ -585,7 +585,7 @@ private:
DrawStatMaskedSprite(2200, 160, 200, 0, nPalette, RS_CENTERBOTTOM); DrawStatMaskedSprite(2200, 160, 200, 0, nPalette, RS_CENTERBOTTOM);
DrawPackItemInStatusBar(pPlayer, 265, 186, 260, 172); DrawPackItemInStatusBar(pPlayer, 265, 186, 260, 172);
if (pXSprite->health >= 16 || (gameclock & 16) || pXSprite->health == 0) if (pXSprite->health >= 16 || (gFrameClock & 16) || pXSprite->health == 0)
{ {
DrawStatNumber("%3d", pXSprite->health >> 4, 2190, 86, 183, 0, 0); DrawStatNumber("%3d", pXSprite->health >> 4, 2190, 86, 183, 0, 0);
} }
@ -659,7 +659,7 @@ private:
BeginHUD(320, 200, 1); BeginHUD(320, 200, 1);
DrawStatSprite(2201, 34, 187 - 200, 16, nPalette); DrawStatSprite(2201, 34, 187 - 200, 16, nPalette);
if (pXSprite->health >= 16 || (gameclock & 16) || pXSprite->health == 0) if (pXSprite->health >= 16 || (gFrameClock & 16) || pXSprite->health == 0)
{ {
DrawStatNumber("%3d", pXSprite->health >> 4, 2190, 8, 183 - 200, 0, 0); DrawStatNumber("%3d", pXSprite->health >> 4, 2190, 8, 183 - 200, 0, 0);
} }

View file

@ -994,7 +994,7 @@ void viewDrawScreen(bool sceneonly)
if (IsPlayerSprite(gMe->pSprite) && pPSprite->hand == 1) if (IsPlayerSprite(gMe->pSprite) && pPSprite->hand == 1)
{ {
//static int lastClock; //static int lastClock;
gChoke.sub_84110(160, zn); gChoke.animateChoke(160, zn, (int)gInterpolate);
//if ((gGameClock % 5) == 0 && gGameClock != lastClock) //if ((gGameClock % 5) == 0 && gGameClock != lastClock)
//{ //{
// gChoke.swayV(pPSprite); // gChoke.swayV(pPSprite);