- playerFloorSprite

This commit is contained in:
Christoph Oelckers 2021-10-21 19:44:53 +02:00
parent 1e10cef556
commit eae1d589ec
7 changed files with 40 additions and 43 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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;
}

View file

@ -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();
}

View file

@ -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;
};

View file

@ -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);

View file

@ -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");
}