From 71df58925a04429d26df6850e545540f26447ac8 Mon Sep 17 00:00:00 2001 From: Mitchell Richters Date: Tue, 22 Nov 2022 22:27:12 +1100 Subject: [PATCH] - Blood: Migrate to new actor `viewzoffset` property (sort of). * The way this game does it player Z in a distinct variable needs to be maintained as it's impossible to maintain proper Z velocities when trying to do without it. --- source/games/blood/src/blood.cpp | 4 ++++ source/games/blood/src/player.cpp | 2 ++ source/games/blood/src/view.cpp | 3 +-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/source/games/blood/src/blood.cpp b/source/games/blood/src/blood.cpp index 8ed06dcbe8c..76c44f73d33 100644 --- a/source/games/blood/src/blood.cpp +++ b/source/games/blood/src/blood.cpp @@ -457,6 +457,10 @@ void GameInterface::Ticker() } thinktime.Unclock(); + // update console player's viewzoffset at the end of the tic. + pPlayer->actor->oviewzoffset = pPlayer->actor->viewzoffset; + pPlayer->actor->viewzoffset = pPlayer->zView - pPlayer->actor->spr.pos.Z; + gFrameCount++; PlayClock += kTicsPerFrame; if (PlayClock == 8) gameaction = ga_autosave; // let the game run for 1 frame before saving. diff --git a/source/games/blood/src/player.cpp b/source/games/blood/src/player.cpp index 3bb02dd441f..0b6dba0e3c7 100644 --- a/source/games/blood/src/player.cpp +++ b/source/games/blood/src/player.cpp @@ -715,6 +715,7 @@ void playerResetInertia(PLAYER* pPlayer) POSTURE* pPosture = &pPlayer->pPosture[pPlayer->lifeMode][pPlayer->posture]; pPlayer->zView = pPlayer->actor->spr.pos.Z - pPosture->eyeAboveZ; pPlayer->zWeapon = pPlayer->actor->spr.pos.Z - pPosture->weaponAboveZ; + pPlayer->actor->oviewzoffset = pPlayer->actor->viewzoffset = pPlayer->zView - pPlayer->actor->spr.pos.Z; viewBackupView(pPlayer->nPlayer); } @@ -725,6 +726,7 @@ void playerCorrectInertia(PLAYER* pPlayer, const DVector3& oldpos) pPlayer->zWeapon += zAdj; pPlayer->actor->opos.XY() += pPlayer->actor->spr.pos.XY() - oldpos.XY(); pPlayer->ozView += zAdj; + pPlayer->actor->opos.Z += zAdj; } void playerResetPowerUps(PLAYER* pPlayer) diff --git a/source/games/blood/src/view.cpp b/source/games/blood/src/view.cpp index 51600590058..592770719d1 100644 --- a/source/games/blood/src/view.cpp +++ b/source/games/blood/src/view.cpp @@ -492,8 +492,7 @@ static void SetupView(PLAYER* pPlayer, DVector3& cPos, DAngle& cA, DAngle& cH, s else #endif { - cPos.XY() = pPlayer->actor->interpolatedpos(interpfrac).XY(); - cPos.Z = interpolatedvalue(pPlayer->ozView, pPlayer->zView, interpfrac); + cPos = pPlayer->actor->getRenderPos(interpfrac); zDelta = interpolatedvalue(pPlayer->ozWeapon, pPlayer->zWeapon - pPlayer->zView - 12, interpfrac); bobWidth = interpolatedvalue(pPlayer->obobWidth, pPlayer->bobWidth, interpfrac); bobHeight = interpolatedvalue(pPlayer->obobHeight, pPlayer->bobHeight, interpfrac);