From b801a73db94b6100d76c259682a47a1e2d7f6550 Mon Sep 17 00:00:00 2001 From: Mitchell Richters Date: Sat, 4 Apr 2020 18:47:55 +1100 Subject: [PATCH] Exhumed: Fix look up/down in line with input amendments. --- source/exhumed/src/exhumed.cpp | 6 +-- source/exhumed/src/player.cpp | 77 ++++++++++++---------------------- source/exhumed/src/player.h | 4 +- source/exhumed/src/view.cpp | 3 -- source/exhumed/src/view.h | 1 - 5 files changed, 31 insertions(+), 60 deletions(-) diff --git a/source/exhumed/src/exhumed.cpp b/source/exhumed/src/exhumed.cpp index 5ce21f91b..a8a0b5ef2 100644 --- a/source/exhumed/src/exhumed.cpp +++ b/source/exhumed/src/exhumed.cpp @@ -2227,7 +2227,7 @@ GAMELOOP: lLocalCodes = 0; nPlayerDAng = 0; - sPlayerInput[nLocalPlayer].horizon = nVertPan[nLocalPlayer]; + sPlayerInput[nLocalPlayer].horizon = PlayerList[nLocalPlayer].q16horiz; } // loc_11F72: @@ -2334,7 +2334,7 @@ GAMELOOP: lLocalCodes = 0; nPlayerDAng = 0; - sPlayerInput[nLocalPlayer].horizon = nVertPan[nLocalPlayer]; + sPlayerInput[nLocalPlayer].horizon = PlayerList[nLocalPlayer].q16horiz; while (levelnew < 0 && totalclock >= tclocks + 4) { @@ -2882,7 +2882,7 @@ int DoSpiritHead() { static short word_964E6 = 0; - nVertPan[0] += (nDestVertPan[0] - nVertPan[0]) / 4; + PlayerList[0].q16horiz = fix16_sadd(PlayerList[0].q16horiz, fix16_sdiv(fix16_ssub(nDestVertPan[0], PlayerList[0].q16horiz), fix16_from_int(4))); tileInvalidate(kTileRamsesWorkTile, -1, -1); diff --git a/source/exhumed/src/player.cpp b/source/exhumed/src/player.cpp index f4b2d6ede..4ff4e31c9 100644 --- a/source/exhumed/src/player.cpp +++ b/source/exhumed/src/player.cpp @@ -276,66 +276,44 @@ void PlayerInterruptKeys() localInput.yVel = clamp(localInput.yVel + input.yVel, -12, 12); localInput.xVel = clamp(localInput.xVel + input.xVel, -12, 12); - localInput.nAngle = fix16_sadd(localInput.nAngle, input.nAngle); + localInput.nAngle = fix16_sadd(localInput.nAngle, input.nAngle); PlayerList[nLocalPlayer].q16angle = fix16_sadd(PlayerList[nLocalPlayer].q16angle, input.nAngle) & 0x7FFFFFF; - PlayerList[nLocalPlayer].q16horiz = fix16_clamp(fix16_sadd(PlayerList[nLocalPlayer].q16horiz, input.horizon), fix16_from_int(0), fix16_from_int(184)); // A horiz diff of 128 equal 45 degrees, // so we convert horiz to 1024 angle units - float horizAngle = atan2f(nVertPan[nLocalPlayer] - fix16_from_int(92), fix16_from_int(128)) * (512.f / fPI) + scaleAdjustmentToInterval(fix16_to_float(input.horizon)); - horizAngle = clamp(horizAngle, -255.f, 255.f); - nVertPan[nLocalPlayer] = fix16_clamp(fix16_from_int(92) + Blrintf(fix16_from_int(128) * tanf(horizAngle * (fPI / 512.f))), fix16_from_int(0), fix16_from_int(184)); + float const horizAngle = clamp(atan2f(PlayerList[nLocalPlayer].q16horiz - fix16_from_int(92), fix16_from_int(128)) * (512.f / fPI) + fix16_to_float(input.horizon), -255.f, 255.f); + PlayerList[nLocalPlayer].q16horiz = fix16_from_int(92) + Blrintf(fix16_from_int(128) * tanf(horizAngle * (fPI / 512.f))); - // TODO - tidy / consolidate repeating blocks of code here? - if (buttonMap.ButtonDown(gamefunc_Look_Up)) + // Look/aim up/down functions. + if (buttonMap.ButtonDown(gamefunc_Look_Up) || buttonMap.ButtonDown(gamefunc_Aim_Up)) { bLockPan = kFalse; - if (nVertPan[nLocalPlayer] < fix16_from_int(180)) { - nVertPan[nLocalPlayer] = fix16_sadd(nVertPan[nLocalPlayer], fix16_from_float(scaleAdjustmentToInterval(4))); + if (PlayerList[nLocalPlayer].q16horiz < fix16_from_int(180)) { + PlayerList[nLocalPlayer].q16horiz = fix16_sadd(PlayerList[nLocalPlayer].q16horiz, fix16_from_float(scaleAdjustmentToInterval(4))); } bPlayerPan = kTrue; - nDestVertPan[nLocalPlayer] = nVertPan[nLocalPlayer]; + nDestVertPan[nLocalPlayer] = PlayerList[nLocalPlayer].q16horiz; } - else if (buttonMap.ButtonDown(gamefunc_Look_Down)) + else if (buttonMap.ButtonDown(gamefunc_Look_Down) || buttonMap.ButtonDown(gamefunc_Aim_Down)) { bLockPan = kFalse; - if (nVertPan[nLocalPlayer] > fix16_from_int(4)) { - nVertPan[nLocalPlayer] = fix16_ssub(nVertPan[nLocalPlayer], fix16_from_float(scaleAdjustmentToInterval(4))); + if (PlayerList[nLocalPlayer].q16horiz > fix16_from_int(4)) { + PlayerList[nLocalPlayer].q16horiz = fix16_ssub(PlayerList[nLocalPlayer].q16horiz, fix16_from_float(scaleAdjustmentToInterval(4))); } bPlayerPan = kTrue; - nDestVertPan[nLocalPlayer] = nVertPan[nLocalPlayer]; + nDestVertPan[nLocalPlayer] = PlayerList[nLocalPlayer].q16horiz; } else if (buttonMap.ButtonDown(gamefunc_Look_Straight)) { bLockPan = kFalse; bPlayerPan = kFalse; - nVertPan[nLocalPlayer] = fix16_from_int(92); + PlayerList[nLocalPlayer].q16horiz = fix16_from_int(92); nDestVertPan[nLocalPlayer] = fix16_from_int(92); } - else if (buttonMap.ButtonDown(gamefunc_Aim_Up)) - { - bLockPan = kTrue; - if (nVertPan[nLocalPlayer] < fix16_from_int(180)) { - nVertPan[nLocalPlayer] = fix16_sadd(nVertPan[nLocalPlayer], fix16_from_float(scaleAdjustmentToInterval(4))); - } - - bPlayerPan = kTrue; - nDestVertPan[nLocalPlayer] = nVertPan[nLocalPlayer]; - } - else if (buttonMap.ButtonDown(gamefunc_Aim_Down)) - { - bLockPan = kTrue; - if (nVertPan[nLocalPlayer] > fix16_from_int(4)) { - nVertPan[nLocalPlayer] = fix16_ssub(nVertPan[nLocalPlayer], fix16_from_float(scaleAdjustmentToInterval(4))); - } - - bPlayerPan = kTrue; - nDestVertPan[nLocalPlayer] = nVertPan[nLocalPlayer]; - } // loc_1C048: if (totalvel[nLocalPlayer] > 20) { @@ -346,7 +324,7 @@ void PlayerInterruptKeys() bLockPan = kTrue; // loc_1C05E - fix16_t ecx = fix16_ssub(nDestVertPan[nLocalPlayer], PlayerList[nLocalPlayer].q16horiz); + fix16_t ecx = nDestVertPan[nLocalPlayer] - PlayerList[nLocalPlayer].q16horiz; if (g_MyAimMode) { @@ -379,9 +357,10 @@ void PlayerInterruptKeys() } } - nVertPan[nLocalPlayer] = fix16_sadd(nVertPan[nLocalPlayer], ecx); - PlayerList[nLocalPlayer].q16horiz = fix16_clamp(nVertPan[nLocalPlayer], fix16_from_int(0), fix16_from_int(184)); + PlayerList[nLocalPlayer].q16horiz = fix16_sadd(PlayerList[nLocalPlayer].q16horiz, ecx); } + + PlayerList[nLocalPlayer].q16horiz = fix16_clamp(PlayerList[nLocalPlayer].q16horiz, fix16_from_int(0), fix16_from_int(184)); } void RestoreSavePoint(int nPlayer, int *x, int *y, int *z, short *nSector, short *nAngle) @@ -583,7 +562,6 @@ void RestartPlayer(short nPlayer) } PlayerList[nPlayer].opos = sprite[nSprite].pos; - PlayerList[nPlayer].q16oangle = PlayerList[nPlayer].q16angle; nPlayerFloorSprite[nPlayer] = floorspr; @@ -683,7 +661,7 @@ void RestartPlayer(short nPlayer) nYDamage[nPlayer] = 0; nXDamage[nPlayer] = 0; - PlayerList[nPlayer].q16ohoriz = PlayerList[nPlayer].q16horiz = nVertPan[nPlayer] = F16(92); + PlayerList[nPlayer].q16horiz = F16(92); nDestVertPan[nPlayer] = F16(92); nBreathTimer[nPlayer] = 90; @@ -785,7 +763,7 @@ void StartDeathSeq(int nPlayer, int nVal) StopFiringWeapon(nPlayer); - PlayerList[nPlayer].q16ohoriz = PlayerList[nPlayer].q16horiz = nVertPan[nPlayer] = F16(92); + PlayerList[nPlayer].q16horiz = F16(92); oeyelevel[nPlayer] = eyelevel[nPlayer] = -14080; nPlayerInvisible[nPlayer] = 0; dVertPan[nPlayer] = 15; @@ -962,8 +940,6 @@ void FuncPlayer(int a, int nDamage, int nRun) short nSprite2; PlayerList[nPlayer].opos = sprite[nPlayerSprite].pos; - PlayerList[nPlayer].q16oangle = PlayerList[nPlayer].q16angle; - PlayerList[nPlayer].q16ohoriz = PlayerList[nPlayer].q16horiz; oeyelevel[nPlayer] = eyelevel[nPlayer]; switch (nMessage) @@ -1273,10 +1249,9 @@ void FuncPlayer(int a, int nDamage, int nRun) if (nTotalPlayers <= 1) { PlayerList[nPlayer].q16angle = fix16_from_int(GetAngleToSprite(nPlayerSprite, nSpiritSprite) & kAngleMask); - PlayerList[nPlayer].q16oangle = PlayerList[nPlayer].q16angle; sprite[nPlayerSprite].ang = fix16_to_int(PlayerList[nPlayer].q16angle); - PlayerList[nPlayer].q16ohoriz = PlayerList[nPlayer].q16horiz = nVertPan[nPlayer] = F16(92); + PlayerList[nPlayer].q16horiz = F16(92); lPlayerXVel = 0; lPlayerYVel = 0; @@ -3068,19 +3043,19 @@ loc_1BD2E: } else { - if (nVertPan[nPlayer] < F16(92)) + if (PlayerList[nPlayer].q16horiz < fix16_from_int(92)) { - nVertPan[nPlayer] = F16(91); + PlayerList[nPlayer].q16horiz = fix16_from_int(91); eyelevel[nPlayer] -= (dVertPan[nPlayer] << 8); } else { - nVertPan[nPlayer] += fix16_from_int(dVertPan[nPlayer]); - if (nVertPan[nPlayer] >= F16(200)) + PlayerList[nPlayer].q16horiz = fix16_sadd(PlayerList[nPlayer].q16horiz, fix16_from_int(dVertPan[nPlayer])); + if (PlayerList[nPlayer].q16horiz >= fix16_from_int(200)) { - nVertPan[nPlayer] = F16(199); + PlayerList[nPlayer].q16horiz = fix16_from_int(199); } - else if (nVertPan[nPlayer] <= F16(92)) + else if (PlayerList[nPlayer].q16horiz <= fix16_from_int(92)) { if (!(SectFlag[sprite[nPlayerSprite].sectnum] & kSectUnderwater)) { diff --git a/source/exhumed/src/player.h b/source/exhumed/src/player.h index 1ac79976a..4f333fcb3 100644 --- a/source/exhumed/src/player.h +++ b/source/exhumed/src/player.h @@ -72,8 +72,8 @@ struct Player short field_3C; short nRun; - fix16_t q16angle, q16oangle; - fix16_t q16horiz, q16ohoriz; + fix16_t q16angle; + fix16_t q16horiz; vec3_t opos; }; diff --git a/source/exhumed/src/view.cpp b/source/exhumed/src/view.cpp index c9663f077..267a3e5e9 100644 --- a/source/exhumed/src/view.cpp +++ b/source/exhumed/src/view.cpp @@ -47,7 +47,6 @@ int zbob; fix16_t nDestVertPan[kMaxPlayers] = { 0 }; short dVertPan[kMaxPlayers]; -fix16_t nVertPan[kMaxPlayers]; int nCamerax; int nCameray; int nCameraz; @@ -414,7 +413,6 @@ void DrawView(int smoothRatio, bool sceneonly) viewz = playerZ + nQuake[nLocalPlayer]; int floorZ = sector[sprite[nPlayerSprite].sectnum].floorz; - // pan = nVertPan[nLocalPlayer]; pan = PlayerList[nLocalPlayer].q16horiz; if (viewz > floorZ) @@ -648,7 +646,6 @@ static SavegameHelper sgh("view", SV(nEnemyPal), SA(nDestVertPan), SA(dVertPan), - SA(nVertPan), SA(nQuake), SV(g_interpolationCnt), SA(oldipos), diff --git a/source/exhumed/src/view.h b/source/exhumed/src/view.h index e49fcfd2a..8428a70cb 100644 --- a/source/exhumed/src/view.h +++ b/source/exhumed/src/view.h @@ -49,7 +49,6 @@ void viewRestoreInterpolations(void); extern fix16_t nDestVertPan[]; extern short dVertPan[]; -extern fix16_t nVertPan[]; extern short nQuake[]; extern int nCamerax; extern int nCameray;