- nDoppleSprite

This commit is contained in:
Christoph Oelckers 2021-10-21 19:54:39 +02:00
parent eae1d589ec
commit be19dbb2ce
4 changed files with 25 additions and 29 deletions

View file

@ -218,7 +218,7 @@ void RestartPlayer(short nPlayer)
auto plr = &PlayerList[nPlayer];
int nSprite = plr->nSprite;
auto nSpr = &sprite[nSprite];
int nDopSprite = PlayerList[nPlayer].nDoppleSprite;
auto pDopSprite = PlayerList[nPlayer].pDoppleSprite;
DExhumedActor* floorsprt;
@ -236,12 +236,12 @@ void RestartPlayer(short nPlayer)
DeleteActor(pFloorSprite);
}
if (nDopSprite > -1)
if (pDopSprite)
{
auto sp = &sprite[nDopSprite];
auto sp = &pDopSprite->s();
runlist_DoSubRunRec(sp->owner);
runlist_FreeRun(sp->lotag - 1);
mydeletesprite(nDopSprite);
DeleteActor(pDopSprite);
}
}
@ -252,10 +252,8 @@ void RestartPlayer(short nPlayer)
ChangeActorSect(actor, PlayerList[nPlayer].sPlayerSave.nSector);
ChangeActorStat(actor, 100);
int nDSprite = insertsprite(nSpr->sectnum, 100);
PlayerList[nPlayer].nDoppleSprite = nDSprite;
assert(nDSprite >= 0 && nDSprite < kMaxSprites);
auto pDActor = insertActor(nSpr->sectnum, 100);
PlayerList[nPlayer].pDoppleSprite = pDActor;
if (nTotalPlayers > 1)
{
@ -322,7 +320,7 @@ void RestartPlayer(short nPlayer)
nSpr->extra = -1;
nSpr->lotag = runlist_HeadRun() + 1;
auto nDSpr = &sprite[nDSprite];
auto nDSpr = &pDActor->s();
nDSpr->x = nSpr->x;
nDSpr->y = nSpr->y;
nDSpr->z = nSpr->z;
@ -649,7 +647,7 @@ void AIPlayer::Damage(RunListEvent* ev)
short nAction = PlayerList[nPlayer].nAction;
short nPlayerSprite = PlayerList[nPlayer].nSprite;
auto pPlayerSprite = &sprite[nPlayerSprite];
short nDopple = PlayerList[nPlayer].nDoppleSprite;
auto pDopple = PlayerList[nPlayer].pDoppleSprite;
if (!nDamage) {
return;
@ -700,7 +698,7 @@ void AIPlayer::Damage(RunListEvent* ev)
PlayerList[nPlayer].nPlayerSwear--;
if (PlayerList[nPlayer].nPlayerSwear <= 0)
{
D3PlayFX(StaticSound[kSound52], nDopple);
D3PlayFX(StaticSound[kSound52], pDopple);
PlayerList[nPlayer].nPlayerSwear = RandomSize(3) + 4;
}
}
@ -761,7 +759,7 @@ void AIPlayer::Tick(RunListEvent* ev)
int nPlayerSprite = PlayerList[nPlayer].nSprite;
auto pPlayerSprite = &pPlayerActor->s();
short nDopple = PlayerList[nPlayer].nDoppleSprite;
auto pDopple = PlayerList[nPlayer].pDoppleSprite;
short nAction = PlayerList[nPlayer].nAction;
short nActionB = PlayerList[nPlayer].nAction;
@ -784,7 +782,7 @@ void AIPlayer::Tick(RunListEvent* ev)
int var_EC = PlayerList[nPlayer].field_2;
pPlayerSprite->picnum = seq_GetSeqPicnum(PlayerList[nPlayer].nSeq, PlayerSeq[nHeightTemplate[nAction]].a, var_EC);
sprite[nDopple].picnum = pPlayerSprite->picnum;
pDopple->s().picnum = pPlayerSprite->picnum;
if (PlayerList[nPlayer].nTorch > 0)
{
@ -2500,7 +2498,7 @@ sectdone:
RestartPlayer(nPlayer);
nPlayerSprite = PlayerList[nPlayer].nSprite;
nDopple = PlayerList[nPlayer].nDoppleSprite;
pDopple = PlayerList[nPlayer].pDoppleSprite;
}
else
{
@ -2613,19 +2611,17 @@ sectdone:
}
// loc_1C4E1
sprite[nDopple].x = pPlayerSprite->x;
sprite[nDopple].y = pPlayerSprite->y;
sprite[nDopple].z = pPlayerSprite->z;
pDopple->s().pos = pPlayerSprite->pos;
if (SectAbove[pPlayerSprite->sectnum] > -1)
{
sprite[nDopple].ang = pPlayerSprite->ang;
mychangespritesect(nDopple, SectAbove[pPlayerSprite->sectnum]);
sprite[nDopple].cstat = 0x101;
pDopple->s().ang = pPlayerSprite->ang;
ChangeActorSect(pDopple, SectAbove[pPlayerSprite->sectnum]);
pDopple->s().cstat = 0x101;
}
else
{
sprite[nDopple].cstat = 0x8000;
pDopple->s().cstat = 0x8000;
}
MoveWeapons(nPlayer);
@ -2682,7 +2678,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, Player& w, Player*
("pistolclip", w.nPistolClip)
("xdamage", w.nXDamage)
("ydamage", w.nYDamage)
("dopplesprite", w.nDoppleSprite)
("dopplesprite", w.pDoppleSprite)
("oldweapon", w.nPlayerOldWeapon)
("clip", w.nPlayerClip)
("pushsound", w.nPlayerPushSound)

View file

@ -102,7 +102,6 @@ struct Player
short nPistolClip;
int nXDamage;
int nYDamage;
short nDoppleSprite;
short nPlayerOldWeapon;
short nPlayerClip;
short nPlayerPushSound;
@ -115,6 +114,7 @@ struct Player
int16_t eyelevel, oeyelevel;
DExhumedActor* pPlayerGrenade;
DExhumedActor* pPlayerFloorSprite;
DExhumedActor* pDoppleSprite;
};

View file

@ -1715,8 +1715,7 @@ void runlist_DamageEnemy(int nSprite, int nSprite2, short nDamage)
ebx = 0x6000;
}
int nDopSprite = PlayerList[nPlayer].nDoppleSprite;
D3PlayFX(StaticSound[kSoundTauntStart + (RandomSize(3) % 5)], nDopSprite, ebx);
D3PlayFX(StaticSound[kSoundTauntStart + (RandomSize(3) % 5)], PlayerList[nPlayer].pDoppleSprite, ebx);
}
PlayerList[nPlayer].nTauntTimer = RandomSize(3) + 3;

View file

@ -214,7 +214,8 @@ void DrawView(double smoothRatio, bool sceneonly)
int nPlayerSprite = PlayerList[nLocalPlayer].nSprite;
auto pPlayerSprite = &sprite[nPlayerSprite];
int nPlayerOldCstat = pPlayerSprite->cstat;
int nDoppleOldCstat = sprite[PlayerList[nLocalPlayer].nDoppleSprite].cstat;
auto pDop = &PlayerList[nLocalPlayer].pDoppleSprite->s();
int nDoppleOldCstat = pDop->cstat;
if (nSnakeCam >= 0 && !sceneonly)
{
@ -268,12 +269,12 @@ void DrawView(double smoothRatio, bool sceneonly)
if (!bCamera)
{
pPlayerSprite->cstat |= CSTAT_SPRITE_INVISIBLE;
sprite[PlayerList[nLocalPlayer].nDoppleSprite].cstat |= CSTAT_SPRITE_INVISIBLE;
pDop->cstat |= CSTAT_SPRITE_INVISIBLE;
}
else
{
pPlayerSprite->cstat |= CSTAT_SPRITE_TRANSLUCENT;
sprite[PlayerList[nLocalPlayer].nDoppleSprite].cstat |= CSTAT_SPRITE_INVISIBLE;
pDop->cstat |= CSTAT_SPRITE_INVISIBLE;
}
pan = q16horiz(clamp(pan.asq16(), gi->playerHorizMin(), gi->playerHorizMax()));
}
@ -454,7 +455,7 @@ void DrawView(double smoothRatio, bool sceneonly)
}
pPlayerSprite->cstat = nPlayerOldCstat;
sprite[PlayerList[nLocalPlayer].nDoppleSprite].cstat = nDoppleOldCstat;
pDop->cstat = nDoppleOldCstat;
RestoreInterpolations();
flash = 0;