From 0189936070a8203a1ed1a8dd310cd6bce6c50b28 Mon Sep 17 00:00:00 2001 From: Mitchell Richters Date: Sat, 25 Mar 2023 20:32:11 +1100 Subject: [PATCH] - Exhumed: Use player pointer in `MoveWeapons()`. --- source/games/exhumed/src/gun.cpp | 192 ++++++++++++++++--------------- 1 file changed, 97 insertions(+), 95 deletions(-) diff --git a/source/games/exhumed/src/gun.cpp b/source/games/exhumed/src/gun.cpp index d4525d505..1d5fe6283 100644 --- a/source/games/exhumed/src/gun.cpp +++ b/source/games/exhumed/src/gun.cpp @@ -342,9 +342,11 @@ void CheckClip(int nPlayer) void MoveWeapons(int nPlayer) { + const auto pPlayer = &PlayerList[nPlayer]; + static int dword_96E22 = 0; - int nSectFlag = PlayerList[nPlayer].pPlayerViewSect->Flag; + int nSectFlag = pPlayer->pPlayerViewSect->Flag; if ((nSectFlag & kSectUnderwater) && (totalmoves & 1)) { return; @@ -355,69 +357,69 @@ void MoveWeapons(int nPlayer) if (nPilotLightFrame >= nPilotLightCount) nPilotLightFrame = 0; - if (!PlayerList[nPlayer].bIsFiring || (nSectFlag & kSectUnderwater)) - PlayerList[nPlayer].nTemperature = 0; + if (!pPlayer->bIsFiring || (nSectFlag & kSectUnderwater)) + pPlayer->nTemperature = 0; - auto pPlayerActor = PlayerList[nPlayer].pActor; - int nWeapon = PlayerList[nPlayer].nCurrentWeapon; + auto pPlayerActor = pPlayer->pActor; + int nWeapon = pPlayer->nCurrentWeapon; if (nWeapon < -1) { - if (PlayerList[nPlayer].nNextWeapon != -1) + if (pPlayer->nNextWeapon != -1) { - PlayerList[nPlayer].nCurrentWeapon = PlayerList[nPlayer].nNextWeapon; - PlayerList[nPlayer].nState = 0; - PlayerList[nPlayer].nSeqSize2 = 0; - PlayerList[nPlayer].nNextWeapon = -1; + pPlayer->nCurrentWeapon = pPlayer->nNextWeapon; + pPlayer->nState = 0; + pPlayer->nSeqSize2 = 0; + pPlayer->nNextWeapon = -1; } return; } // loc_26ACC - int eax = PlayerList[nPlayer].nState; + int eax = pPlayer->nState; int nSeq = WeaponInfo[nWeapon].nSeq; int var_3C = WeaponInfo[nWeapon].b[eax] + SeqOffsets[nSeq]; - int var_1C = (PlayerList[nPlayer].nDouble > 0) + 1; + int var_1C = (pPlayer->nDouble > 0) + 1; frames = var_1C - 1; for (frames = var_1C; frames > 0; frames--) { - seq_MoveSequence(pPlayerActor, var_3C, PlayerList[nPlayer].nSeqSize2); + seq_MoveSequence(pPlayerActor, var_3C, pPlayer->nSeqSize2); - PlayerList[nPlayer].nSeqSize2++; + pPlayer->nSeqSize2++; dword_96E22++; if (dword_96E22 >= 15) { dword_96E22 = 0; } - if (PlayerList[nPlayer].nSeqSize2 >= SeqSize[var_3C]) + if (pPlayer->nSeqSize2 >= SeqSize[var_3C]) { - if (PlayerList[nPlayer].nNextWeapon == -1) + if (pPlayer->nNextWeapon == -1) { - switch (PlayerList[nPlayer].nState) + switch (pPlayer->nState) { default: break; case 0: { - PlayerList[nPlayer].nState = 1; + pPlayer->nState = 1; SetWeaponStatus(nPlayer); break; } case 1: { - if (PlayerList[nPlayer].bIsFiring) + if (pPlayer->bIsFiring) { if (!WeaponCanFire(nPlayer)) { if (!dword_96E22) { - D3PlayFX(StaticSound[4], PlayerList[nPlayer].pActor); + D3PlayFX(StaticSound[4], pPlayer->pActor); } } else @@ -432,7 +434,7 @@ void MoveWeapons(int nPlayer) Ra[nPlayer].nState = 1; } - PlayerList[nPlayer].nState = 2; + pPlayer->nState = 2; if (nWeapon == 0) break; @@ -456,33 +458,33 @@ void MoveWeapons(int nPlayer) case 7: case 8: { - if (nWeapon == kWeaponPistol && PlayerList[nPlayer].nPistolClip <= 0) + if (nWeapon == kWeaponPistol && pPlayer->nPistolClip <= 0) { - PlayerList[nPlayer].nState = 3; - PlayerList[nPlayer].nSeqSize2 = 0; + pPlayer->nState = 3; + pPlayer->nSeqSize2 = 0; - PlayerList[nPlayer].nPistolClip = min(6, PlayerList[nPlayer].nAmmo[kWeaponPistol]); + pPlayer->nPistolClip = min(6, pPlayer->nAmmo[kWeaponPistol]); break; } else if (nWeapon == kWeaponGrenade) { - if (!PlayerList[nPlayer].bIsFiring) + if (!pPlayer->bIsFiring) { - PlayerList[nPlayer].nState = 3; + pPlayer->nState = 3; break; } else { - PlayerList[nPlayer].nSeqSize2 = SeqSize[var_3C] - 1; + pPlayer->nSeqSize2 = SeqSize[var_3C] - 1; continue; } } else if (nWeapon == kWeaponMummified) { - PlayerList[nPlayer].nState = 0; - PlayerList[nPlayer].nCurrentWeapon = PlayerList[nPlayer].nLastWeapon; + pPlayer->nState = 0; + pPlayer->nCurrentWeapon = pPlayer->nLastWeapon; - nWeapon = PlayerList[nPlayer].nCurrentWeapon; + nWeapon = pPlayer->nCurrentWeapon; SetPlayerMummified(nPlayer, false); break; @@ -490,27 +492,27 @@ void MoveWeapons(int nPlayer) else { // loc_26D88: - if (PlayerList[nPlayer].bIsFiring && WeaponCanFire(nPlayer)) + if (pPlayer->bIsFiring && WeaponCanFire(nPlayer)) { if (nWeapon != kWeaponM60 && nWeapon != kWeaponPistol) { - PlayerList[nPlayer].nState = 3; + pPlayer->nState = 3; } } else { if (WeaponInfo[nWeapon].b[4] == -1) { - PlayerList[nPlayer].nState = 1; + pPlayer->nState = 1; } else { if (nWeapon == kWeaponFlamer && (nSectFlag & kSectUnderwater)) { - PlayerList[nPlayer].nState = 1; + pPlayer->nState = 1; } else { - PlayerList[nPlayer].nState = 4; + pPlayer->nState = 4; } } } @@ -526,19 +528,19 @@ void MoveWeapons(int nPlayer) { if (nWeapon == kWeaponMummified) { - PlayerList[nPlayer].nCurrentWeapon = PlayerList[nPlayer].nLastWeapon; + pPlayer->nCurrentWeapon = pPlayer->nLastWeapon; - nWeapon = PlayerList[nPlayer].nCurrentWeapon; + nWeapon = pPlayer->nCurrentWeapon; - PlayerList[nPlayer].nState = 0; + pPlayer->nState = 0; break; } else if (nWeapon == kWeaponRing) { - if (!WeaponInfo[nWeapon].d || PlayerList[nPlayer].nAmmo[WeaponInfo[nWeapon].nAmmoType]) + if (!WeaponInfo[nWeapon].d || pPlayer->nAmmo[WeaponInfo[nWeapon].nAmmoType]) { - if (!PlayerList[nPlayer].bIsFiring) { - PlayerList[nPlayer].nState = 1; + if (!pPlayer->bIsFiring) { + pPlayer->nState = 1; } else { break; @@ -555,45 +557,45 @@ void MoveWeapons(int nPlayer) else if (nWeapon == kWeaponM60) { CheckClip(nPlayer); - PlayerList[nPlayer].nState = 1; + pPlayer->nState = 1; break; } else if (nWeapon == kWeaponGrenade) { - if (!WeaponInfo[nWeapon].d || PlayerList[nPlayer].nAmmo[WeaponInfo[nWeapon].nAmmoType]) + if (!WeaponInfo[nWeapon].d || pPlayer->nAmmo[WeaponInfo[nWeapon].nAmmoType]) { - PlayerList[nPlayer].nState = 0; + pPlayer->nState = 0; break; } else { SelectNewWeapon(nPlayer); - PlayerList[nPlayer].nState = 5; + pPlayer->nState = 5; - PlayerList[nPlayer].nSeqSize2 = SeqSize[WeaponInfo[kWeaponGrenade].b[0] + SeqOffsets[nSeq]] - 1; // CHECKME + pPlayer->nSeqSize2 = SeqSize[WeaponInfo[kWeaponGrenade].b[0] + SeqOffsets[nSeq]] - 1; // CHECKME goto loc_flag; // FIXME } } else { - if (PlayerList[nPlayer].bIsFiring && WeaponCanFire(nPlayer)) { - PlayerList[nPlayer].nState = 2; + if (pPlayer->bIsFiring && WeaponCanFire(nPlayer)) { + pPlayer->nState = 2; break; } if (WeaponInfo[nWeapon].b[4] == -1) { - PlayerList[nPlayer].nState = 1; + pPlayer->nState = 1; break; } if (nWeapon == kWeaponFlamer && (nSectFlag & kSectUnderwater)) { - PlayerList[nPlayer].nState = 1; + pPlayer->nState = 1; } else { - PlayerList[nPlayer].nState = 4; + pPlayer->nState = 4; } } break; @@ -601,18 +603,18 @@ void MoveWeapons(int nPlayer) case 4: { - PlayerList[nPlayer].nState = 1; + pPlayer->nState = 1; break; } case 5: { - PlayerList[nPlayer].nCurrentWeapon = PlayerList[nPlayer].nNextWeapon; + pPlayer->nCurrentWeapon = pPlayer->nNextWeapon; - nWeapon = PlayerList[nPlayer].nCurrentWeapon; + nWeapon = pPlayer->nCurrentWeapon; - PlayerList[nPlayer].nState = 0; - PlayerList[nPlayer].nNextWeapon = -1; + pPlayer->nState = 0; + pPlayer->nNextWeapon = -1; SetWeaponStatus(nPlayer); break; @@ -620,34 +622,34 @@ void MoveWeapons(int nPlayer) } // loc_26FC5 - var_3C = SeqOffsets[WeaponInfo[nWeapon].nSeq] + WeaponInfo[nWeapon].b[PlayerList[nPlayer].nState]; - PlayerList[nPlayer].nSeqSize2 = 0; + var_3C = SeqOffsets[WeaponInfo[nWeapon].nSeq] + WeaponInfo[nWeapon].b[pPlayer->nState]; + pPlayer->nSeqSize2 = 0; } else { - if (PlayerList[nPlayer].nState == 5) + if (pPlayer->nState == 5) { - PlayerList[nPlayer].nCurrentWeapon = PlayerList[nPlayer].nNextWeapon; + pPlayer->nCurrentWeapon = pPlayer->nNextWeapon; - nWeapon = PlayerList[nPlayer].nCurrentWeapon; + nWeapon = pPlayer->nCurrentWeapon; - PlayerList[nPlayer].nNextWeapon = -1; - PlayerList[nPlayer].nState = 0; + pPlayer->nNextWeapon = -1; + pPlayer->nState = 0; } else { - PlayerList[nPlayer].nState = 5; + pPlayer->nState = 5; } - PlayerList[nPlayer].nSeqSize2 = 0; + pPlayer->nSeqSize2 = 0; continue; } - } // end of if (PlayerList[nPlayer].field_34 >= SeqSize[var_3C]) + } // end of if (pPlayer->field_34 >= SeqSize[var_3C]) loc_flag: // loc_27001 - int nFrameFlag = seq_GetFrameFlag(var_3C, PlayerList[nPlayer].nSeqSize2); + int nFrameFlag = seq_GetFrameFlag(var_3C, pPlayer->nSeqSize2); if (((!(nSectFlag & kSectUnderwater)) || nWeapon == kWeaponRing) && (nFrameFlag & 4)) { @@ -660,7 +662,7 @@ loc_flag: if (nFrameFlag & 0x80) { - int nAction = PlayerList[nPlayer].nAction; + int nAction = pPlayer->nAction; int var_38 = 1; @@ -674,13 +676,13 @@ loc_flag: if (nWeapon == kWeaponFlamer && (!(nSectFlag & kSectUnderwater))) { - PlayerList[nPlayer].nTemperature++; + pPlayer->nTemperature++; - if (PlayerList[nPlayer].nTemperature > 50) + if (pPlayer->nTemperature > 50) { - PlayerList[nPlayer].nTemperature = 0; - PlayerList[nPlayer].nState = 4; - PlayerList[nPlayer].nSeqSize2 = 0; + pPlayer->nTemperature = 0; + pPlayer->nState = 4; + pPlayer->nSeqSize2 = 0; } } @@ -712,13 +714,13 @@ loc_flag: // loc_27266: case kWeaponSword: { - nHeight += PlayerList[nLocalPlayer].pActor->spr.Angles.Pitch.Tan() * 32.; + nHeight += pPlayerActor->spr.Angles.Pitch.Tan() * 32.; thePos.Z += nHeight; int var_28; - if (PlayerList[nPlayer].nState == 2) { + if (pPlayer->nState == 2) { var_28 = 6; } else { @@ -731,7 +733,7 @@ loc_flag: { int nDamage = BulletInfo[kWeaponSword].nDamage; - if (PlayerList[nPlayer].nDouble) { + if (pPlayer->nDouble) { nDamage *= 2; } @@ -779,8 +781,8 @@ loc_flag: } // loc_27399: - PlayerList[nPlayer].nState = var_28; - PlayerList[nPlayer].nSeqSize2 = 0; + pPlayer->nState = var_28; + pPlayer->nSeqSize2 = 0; break; } case kWeaponFlamer: @@ -788,8 +790,8 @@ loc_flag: if (nSectFlag & kSectUnderwater) { DoBubbles(nPlayer); - PlayerList[nPlayer].nState = 1; - PlayerList[nPlayer].nSeqSize2 = 0; + pPlayer->nState = 1; + pPlayer->nSeqSize2 = 0; StopActorSound(pPlayerActor); break; } @@ -810,20 +812,20 @@ loc_flag: case kWeaponM60: { if (nWeapon == kWeaponM60) { // hack(?) to do fallthrough from kWeapon3 into kWeaponPistol without doing the nQuake[] change - PlayerList[nPlayer].nQuake = 0.5; + pPlayer->nQuake = 0.5; } // fall through [[fallthrough]]; } case kWeaponPistol: { - double h = PlayerList[nLocalPlayer].pActor->spr.Angles.Pitch.Tan() * 2.; + double h = pPlayerActor->spr.Angles.Pitch.Tan() * 2.; nHeight += h; DExhumedActor* target = nullptr; - if (PlayerList[nPlayer].pTarget != nullptr && Autoaim(nPlayer)) + if (pPlayer->pTarget != nullptr && Autoaim(nPlayer)) { - DExhumedActor* t = PlayerList[nPlayer].pTarget; + DExhumedActor* t = pPlayer->pTarget; // only autoaim if target is in front of the player. assert(t->sector()); DAngle angletotarget = (t->spr.pos - pPlayerActor->spr.pos).Angle(); @@ -841,15 +843,15 @@ loc_flag: case kWeaponGrenade: { - ThrowGrenade(nPlayer, nHeight - 10, PlayerList[nLocalPlayer].pActor->spr.Angles.Pitch.Tan()); + ThrowGrenade(nPlayer, nHeight - 10, pPlayerActor->spr.Angles.Pitch.Tan()); break; } case kWeaponStaff: { BuildSnake(nPlayer, nHeight); - PlayerList[nPlayer].nQuake = 2.; + pPlayer->nQuake = 2.; - PlayerList[nPlayer].nThrust -= pPlayerActor->spr.Angles.Yaw.ToVector() * 2; + pPlayer->nThrust -= pPlayerActor->spr.Angles.Yaw.ToVector() * 2; break; } case kWeaponRing: @@ -858,7 +860,7 @@ loc_flag: case kWeaponMummified: { int nDamage = BulletInfo[kWeaponMummified].nDamage; - if (PlayerList[nPlayer].nDouble) { + if (pPlayer->nDouble) { nDamage *= 2; } @@ -877,19 +879,19 @@ loc_flag: } if (nWeapon == kWeaponM60) { - PlayerList[nPlayer].nPlayerClip--; + pPlayer->nPlayerClip--; } else if (nWeapon == kWeaponPistol) { - PlayerList[nPlayer].nPistolClip--; + pPlayer->nPistolClip--; } } - if (!WeaponInfo[nWeapon].d || PlayerList[nPlayer].nAmmo[WeaponInfo[nWeapon].nAmmoType]) + if (!WeaponInfo[nWeapon].d || pPlayer->nAmmo[WeaponInfo[nWeapon].nAmmoType]) { - if (nWeapon == kWeaponM60 && PlayerList[nPlayer].nPlayerClip <= 0) + if (nWeapon == kWeaponM60 && pPlayer->nPlayerClip <= 0) { - PlayerList[nPlayer].nState = 3; - PlayerList[nPlayer].nSeqSize2 = 0; + pPlayer->nState = 3; + pPlayer->nSeqSize2 = 0; // goto loc_27609: } }