diff --git a/source/games/exhumed/src/grenade.cpp b/source/games/exhumed/src/grenade.cpp index 71e08b5d1..6f0a76faf 100644 --- a/source/games/exhumed/src/grenade.cpp +++ b/source/games/exhumed/src/grenade.cpp @@ -49,10 +49,10 @@ void BounceGrenade(DExhumedActor* pActor, short nAngle) void ThrowGrenade(short nPlayer, int, int, int ecx, int push1) { - if (PlayerList[nPlayer].nPlayerGrenade == nullptr) + if (PlayerList[nPlayer].pPlayerGrenade == nullptr) return; - auto pActor = PlayerList[nPlayer].nPlayerGrenade; + auto pActor = PlayerList[nPlayer].pPlayerGrenade; short nPlayerSprite = PlayerList[nPlayer].nSprite; auto pGrenadeSprite = &pActor->s(); auto pPlayerSprite = &PlayerList[nPlayer].Actor()->s(); @@ -95,7 +95,7 @@ void ThrowGrenade(short nPlayer, int, int, int ecx, int push1) pActor->x = bcos(nAngle, -4) * pActor->nTurn; pActor->y = bsin(nAngle, -4) * pActor->nTurn; - PlayerList[nPlayer].nPlayerGrenade = nullptr; + PlayerList[nPlayer].pPlayerGrenade = nullptr; return; } @@ -140,7 +140,7 @@ void BuildGrenade(int nPlayer) pActor->nPhase = runlist_AddRunRec(pSprite->lotag - 1, pActor, 0x0F0000); pActor->nRun = runlist_AddRunRec(NewRun, pActor, 0x0F0000); - PlayerList[nPlayer].nPlayerGrenade = pActor; + PlayerList[nPlayer].pPlayerGrenade = pActor; } void ExplodeGrenade(DExhumedActor* pActor) diff --git a/source/games/exhumed/src/gun.cpp b/source/games/exhumed/src/gun.cpp index ace3ac92c..117134248 100644 --- a/source/games/exhumed/src/gun.cpp +++ b/source/games/exhumed/src/gun.cpp @@ -117,13 +117,13 @@ void ResetPlayerWeapons(short nPlayer) PlayerList[nPlayer].field_3A = 0; PlayerList[nPlayer].field_3FOUR = 0; - PlayerList[nPlayer].nPlayerGrenade = nullptr; + PlayerList[nPlayer].pPlayerGrenade = nullptr; PlayerList[nPlayer].nPlayerWeapons = 0x1; // turn on bit 1 only } void InitWeapons() { - for (auto& p : PlayerList) p.nPlayerGrenade = nullptr; + for (auto& p : PlayerList) p.pPlayerGrenade = nullptr; } void SetNewWeapon(short nPlayer, short nWeapon) diff --git a/source/games/exhumed/src/items.cpp b/source/games/exhumed/src/items.cpp index 29696bf44..fc915ab49 100644 --- a/source/games/exhumed/src/items.cpp +++ b/source/games/exhumed/src/items.cpp @@ -184,7 +184,7 @@ static bool UseEye(short nPlayer) pSprite->cstat |= 0x8000; - if (PlayerList[nPlayer].nPlayerFloorSprite >= 0) { + if (PlayerList[nPlayer].pPlayerFloorSprite != nullptr) { pSprite->cstat |= 0x8000; } diff --git a/source/games/exhumed/src/player.cpp b/source/games/exhumed/src/player.cpp index fab39fb26..1a2e28627 100644 --- a/source/games/exhumed/src/player.cpp +++ b/source/games/exhumed/src/player.cpp @@ -220,7 +220,7 @@ void RestartPlayer(short nPlayer) auto nSpr = &sprite[nSprite]; int nDopSprite = PlayerList[nPlayer].nDoppleSprite; - int floorspr; + DExhumedActor* floorsprt; if (nSprite > -1) { @@ -231,9 +231,9 @@ void RestartPlayer(short nPlayer) plr->nSprite = -1; - int nFloorSprite = PlayerList[nPlayer].nPlayerFloorSprite; - if (nFloorSprite > -1) { - mydeletesprite(nFloorSprite); + auto pFloorSprite = PlayerList[nPlayer].pPlayerFloorSprite; + if (pFloorSprite != nullptr) { + DeleteActor(pFloorSprite); } if (nDopSprite > -1) @@ -249,10 +249,8 @@ void RestartPlayer(short nPlayer) nSprite = actor->GetSpriteIndex(); nSpr = &actor->s(); - mychangespritesect(nSprite, PlayerList[nPlayer].sPlayerSave.nSector); - changespritestat(nSprite, 100); - - assert(nSprite >= 0 && nSprite < kMaxSprites); + ChangeActorSect(actor, PlayerList[nPlayer].sPlayerSave.nSector); + ChangeActorStat(actor, 100); int nDSprite = insertsprite(nSpr->sectnum, 100); PlayerList[nPlayer].nDoppleSprite = nDSprite; @@ -276,9 +274,8 @@ void RestartPlayer(short nPlayer) plr->angle.ang = buildang(nstspr->ang&kAngleMask); nSpr->ang = plr->angle.ang.asbuild(); - floorspr = insertsprite(nSpr->sectnum, 0); - assert(floorspr >= 0 && floorspr < kMaxSprites); - auto fspr = &sprite[floorspr]; + floorsprt = insertActor(nSpr->sectnum, 0); + auto fspr = &floorsprt->s(); fspr->x = nSpr->x; fspr->y = nSpr->y; @@ -296,13 +293,13 @@ void RestartPlayer(short nPlayer) plr->angle.ang = buildang(PlayerList[nPlayer].sPlayerSave.nAngle&kAngleMask); nSpr->ang = plr->angle.ang.asbuild(); - floorspr = -1; + floorsprt = nullptr; } plr->angle.backup(); plr->horizon.backup(); - PlayerList[nPlayer].nPlayerFloorSprite = floorspr; + PlayerList[nPlayer].pPlayerFloorSprite = floorsprt; nSpr->cstat = 0x101; nSpr->shade = -12; @@ -391,7 +388,7 @@ void RestartPlayer(short nPlayer) plr->nMagic = 0; } - PlayerList[nPlayer].nPlayerGrenade = nullptr; + PlayerList[nPlayer].pPlayerGrenade = nullptr; PlayerList[nPlayer].oeyelevel = PlayerList[nPlayer].eyelevel = -14080; dVertPan[nPlayer] = 0; @@ -455,7 +452,7 @@ void StartDeathSeq(int nPlayer, int nVal) runlist_SignalRun(nLotag - 1, nPlayer | 0x70000); } - if (PlayerList[nPlayer].nPlayerGrenade) + if (PlayerList[nPlayer].pPlayerGrenade) { ThrowGrenade(nPlayer, 0, 0, 0, -10000); } @@ -823,10 +820,10 @@ void AIPlayer::Tick(RunListEvent* ev) if (PlayerList[nPlayer].nInvisible == 0) { pPlayerSprite->cstat &= 0x7FFF; // set visible - short nFloorSprite = PlayerList[nPlayer].nPlayerFloorSprite; + auto pFloorSprite = PlayerList[nPlayer].pPlayerFloorSprite; - if (nFloorSprite > -1) { - sprite[nFloorSprite].cstat &= 0x7FFF; // set visible + if (pFloorSprite != nullptr) { + pFloorSprite->s().cstat &= 0x7FFF; // set visible } } else if (PlayerList[nPlayer].nInvisible == 150 && nPlayer == nLocalPlayer) @@ -1294,19 +1291,20 @@ sectdone: } // loc_1B1EB - if (nTotalPlayers > 1) + auto pFloorActor = PlayerList[nPlayer].pPlayerFloorSprite; + if (nTotalPlayers > 1 && pFloorActor) { - int nFloorSprite = PlayerList[nPlayer].nPlayerFloorSprite; + auto pFloorSprite = &pFloorActor->s(); - sprite[nFloorSprite].x = pPlayerSprite->x; - sprite[nFloorSprite].y = pPlayerSprite->y; + pFloorSprite->x = pPlayerSprite->x; + pFloorSprite->y = pPlayerSprite->y; - if (sprite[nFloorSprite].sectnum != pPlayerSprite->sectnum) + if (pFloorSprite->sectnum != pPlayerSprite->sectnum) { - mychangespritesect(nFloorSprite, pPlayerSprite->sectnum); + ChangeActorSect(pFloorActor, pPlayerSprite->sectnum); } - sprite[nFloorSprite].z = sector[pPlayerSprite->sectnum].floorz; + pFloorSprite->z = sector[pPlayerSprite->sectnum].floorz; } int var_30 = 0; @@ -2691,11 +2689,11 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, Player& w, Player* ("taunttimer", w.nTauntTimer) ("weapons", w.nPlayerWeapons) ("viewsect", w.nPlayerViewSect) - ("floorspr", w.nPlayerFloorSprite) + ("floorspr", w.pPlayerFloorSprite) ("save", w.sPlayerSave) ("totalvel", w.totalvel) ("eyelevel", w.eyelevel) - ("grenade", w.nPlayerGrenade) + ("grenade", w.pPlayerGrenade) .EndObject(); } diff --git a/source/games/exhumed/src/player.h b/source/games/exhumed/src/player.h index 86e3d8747..e75269bff 100644 --- a/source/games/exhumed/src/player.h +++ b/source/games/exhumed/src/player.h @@ -109,12 +109,12 @@ struct Player short nTauntTimer; uint16_t nPlayerWeapons; // each set bit represents a weapon the player has short nPlayerViewSect; - short nPlayerFloorSprite; PlayerSave sPlayerSave; int ototalvel; int totalvel; int16_t eyelevel, oeyelevel; - DExhumedActor* nPlayerGrenade; + DExhumedActor* pPlayerGrenade; + DExhumedActor* pPlayerFloorSprite; }; diff --git a/source/games/exhumed/src/ra.cpp b/source/games/exhumed/src/ra.cpp index be2665865..d79745be6 100644 --- a/source/games/exhumed/src/ra.cpp +++ b/source/games/exhumed/src/ra.cpp @@ -75,9 +75,10 @@ void FreeRa(short nPlayer) void BuildRa(short nPlayer) { - short nPlayerSprite = PlayerList[nPlayer].nSprite; + auto pPlayerActor = PlayerList[nPlayer].Actor(); + auto pPlayerSprite = &pPlayerActor->s(); - auto pActor = insertActor(sprite[nPlayerSprite].sectnum, 203); + auto pActor = insertActor(pPlayerSprite->sectnum, 203); auto pSprite = &pActor->s(); pSprite->cstat = 0x8000; @@ -91,9 +92,7 @@ void BuildRa(short nPlayer) pSprite->pal = 1; pSprite->xrepeat = 64; pSprite->yrepeat = 64; - pSprite->x = sprite[nPlayerSprite].x; - pSprite->y = sprite[nPlayerSprite].y; - pSprite->z = sprite[nPlayerSprite].z; + pSprite->pos = pPlayerSprite->pos; // GrabTimeSlot(3); diff --git a/source/games/exhumed/src/switch.cpp b/source/games/exhumed/src/switch.cpp index 0a3f8ecaa..ed36d3aea 100644 --- a/source/games/exhumed/src/switch.cpp +++ b/source/games/exhumed/src/switch.cpp @@ -465,8 +465,8 @@ void AISWPressSector::Use(RunListEvent* ev) { if (SwitchData[nSwitch].nKeyMask) { - short nSprite = PlayerList[nPlayer].nSprite; - PlayFXAtXYZ(StaticSound[nSwitchSound], sprite[nSprite].x, sprite[nSprite].y, 0, sprite[nSprite].sectnum, CHANF_LISTENERZ); + auto pSprite = &PlayerList[nPlayer].Actor()->s(); + PlayFXAtXYZ(StaticSound[nSwitchSound], pSprite->x, pSprite->y, 0, pSprite->sectnum, CHANF_LISTENERZ); StatusMessage(300, "YOU NEED THE KEY FOR THIS DOOR"); }