- Exhumed: pActor->s() in wasp.cpp

This commit is contained in:
Christoph Oelckers 2021-12-23 17:08:59 +01:00
parent eda75a38d2
commit 046ff607dc

View file

@ -34,57 +34,54 @@ static actionSeq WaspSeq[] = {
{29, 1}
};
void SetWaspVel(spritetype* pSprite)
void SetWaspVel(DExhumedActor* pActor)
{
pSprite->xvel = bcos(pSprite->ang);
pSprite->yvel = bsin(pSprite->ang);
pActor->spr.xvel = bcos(pActor->spr.ang);
pActor->spr.yvel = bsin(pActor->spr.ang);
}
DExhumedActor* BuildWasp(DExhumedActor* pActor, int x, int y, int z, sectortype* pSector, int nAngle, bool bEggWasp)
{
spritetype* pSprite;
if (pActor == nullptr)
{
pActor = insertActor(pSector, 107);
pSprite = &pActor->s();
pSprite->pos.X = x;
pSprite->pos.Y = y;
pSprite->pos.Z = z;
pActor->spr.pos.X = x;
pActor->spr.pos.Y = y;
pActor->spr.pos.Z = z;
}
else
{
pSprite = &pActor->s();
nAngle = pSprite->ang;
nAngle = pActor->spr.ang;
ChangeActorStat(pActor, 107);
}
pSprite->shade = -12;
pSprite->cstat = CSTAT_SPRITE_BLOCK_ALL;
pSprite->pal = pSprite->sector()->ceilingpal;
pSprite->clipdist = 70;
pActor->spr.shade = -12;
pActor->spr.cstat = CSTAT_SPRITE_BLOCK_ALL;
pActor->spr.pal = pActor->spr.sector()->ceilingpal;
pActor->spr.clipdist = 70;
if (bEggWasp)
{
pSprite->xrepeat = 20;
pSprite->yrepeat = 20;
pActor->spr.xrepeat = 20;
pActor->spr.yrepeat = 20;
}
else
{
pSprite->xrepeat = 50;
pSprite->yrepeat = 50;
pActor->spr.xrepeat = 50;
pActor->spr.yrepeat = 50;
}
pSprite->xoffset = 0;
pSprite->yoffset = 0;
pSprite->picnum = 1;
pSprite->ang = nAngle;
pSprite->xvel = 0;
pSprite->yvel = 0;
pSprite->zvel = 0;
pSprite->hitag = 0;
pSprite->lotag = runlist_HeadRun() + 1;
pSprite->extra = -1;
pActor->spr.xoffset = 0;
pActor->spr.yoffset = 0;
pActor->spr.picnum = 1;
pActor->spr.ang = nAngle;
pActor->spr.xvel = 0;
pActor->spr.yvel = 0;
pActor->spr.zvel = 0;
pActor->spr.hitag = 0;
pActor->spr.lotag = runlist_HeadRun() + 1;
pActor->spr.extra = -1;
// GrabTimeSlot(3);
@ -109,7 +106,7 @@ DExhumedActor* BuildWasp(DExhumedActor* pActor, int x, int y, int z, sectortype*
pActor->nVel = 0;
pActor->nAngle2 = RandomSize(7) + 127;
pSprite->owner = runlist_AddRunRec(pSprite->lotag - 1, pActor, 0x1E0000);
pActor->spr.owner = runlist_AddRunRec(pActor->spr.lotag - 1, pActor, 0x1E0000);
pActor->nRun = runlist_AddRunRec(NewRun, pActor, 0x1E0000);
@ -131,9 +128,8 @@ void AIWasp::RadialDamage(RunListEvent* ev)
{
auto pActor = ev->pObjActor;
if (!pActor) return;
auto pSprite = &pActor->s();
if (!(pSprite->cstat & CSTAT_SPRITE_BLOCK_ALL))
if (!(pActor->spr.cstat & CSTAT_SPRITE_BLOCK_ALL))
return;
ev->nDamage = runlist_CheckRadialDamage(pActor);
@ -144,7 +140,6 @@ void AIWasp::Damage(RunListEvent* ev)
{
auto pActor = ev->pObjActor;
if (!pActor) return;
auto pSprite = &pActor->s();
if (!ev->nDamage) {
return;
@ -163,12 +158,12 @@ void AIWasp::Damage(RunListEvent* ev)
}
pActor->nAction = 1;
pSprite->ang += RandomSize(9) + 768;
pSprite->ang &= kAngleMask;
pActor->spr.ang += RandomSize(9) + 768;
pActor->spr.ang &= kAngleMask;
pActor->nVel = 3000;
pSprite->zvel = (-20) - RandomSize(6);
pActor->spr.zvel = (-20) - RandomSize(6);
}
else
{
@ -176,12 +171,12 @@ void AIWasp::Damage(RunListEvent* ev)
pActor->nAction = 4;
pActor->nFrame = 0;
pSprite->cstat = 0;
pSprite->ang = (pSprite->ang + 1024) & kAngleMask;
pActor->spr.cstat = 0;
pActor->spr.ang = (pActor->spr.ang + 1024) & kAngleMask;
SetWaspVel(pSprite);
SetWaspVel(pActor);
pSprite->zvel = 512;
pActor->spr.zvel = 512;
nCreaturesKilled++;
}
@ -193,7 +188,6 @@ void AIWasp::Tick(RunListEvent* ev)
{
auto pActor = ev->pObjActor;
if (!pActor) return;
auto pSprite = &pActor->s();
int nAction = pActor->nAction;
DExhumedActor* pTarget = nullptr;
@ -202,7 +196,7 @@ void AIWasp::Tick(RunListEvent* ev)
int nSeq = SeqOffsets[kSeqWasp] + WaspSeq[nAction].a;
pSprite->picnum = seq_GetSeqPicnum2(nSeq, pActor->nFrame);
pActor->spr.picnum = seq_GetSeqPicnum2(nSeq, pActor->nFrame);
seq_MoveSequence(pActor, nSeq, pActor->nFrame);
@ -234,7 +228,7 @@ void AIWasp::Tick(RunListEvent* ev)
case 0:
{
pSprite->zvel = bsin(pActor->nAngle, -4);
pActor->spr.zvel = bsin(pActor->nAngle, -4);
pActor->nAngle += pActor->nAngle2;
pActor->nAngle &= kAngleMask;
@ -250,7 +244,7 @@ void AIWasp::Tick(RunListEvent* ev)
}
else
{
pSprite->zvel = 0;
pActor->spr.zvel = 0;
pActor->nAction = 1;
pActor->nFrame = 0;
pActor->nVel = 1500;
@ -294,8 +288,8 @@ void AIWasp::Tick(RunListEvent* ev)
{
if (nChaseVal.actor() == pTarget)
{
pSprite->xvel = 0;
pSprite->yvel = 0;
pActor->spr.xvel = 0;
pActor->spr.yvel = 0;
runlist_DamageEnemy(pTarget, pActor, pActor->nDamage);
pActor->nAction = 2;
pActor->nFrame = 0;
@ -312,9 +306,9 @@ void AIWasp::Tick(RunListEvent* ev)
{
if (bVal)
{
pSprite->ang += RandomSize(9) + 768;
pSprite->ang &= kAngleMask;
pSprite->zvel = (-20) - RandomSize(6);
pActor->spr.ang += RandomSize(9) + 768;
pActor->spr.ang &= kAngleMask;
pActor->spr.zvel = (-20) - RandomSize(6);
pActor->nAction = 1;
pActor->nVel = 3000;
@ -327,9 +321,9 @@ void AIWasp::Tick(RunListEvent* ev)
//if (nMove.type != kHitNone) // The code messed up the return value so this check always was true.
{
pSprite->xvel = 0;
pSprite->yvel = 0;
pSprite->zvel = 1024;
pActor->spr.xvel = 0;
pActor->spr.yvel = 0;
pActor->spr.zvel = 1024;
pActor->nAction = 5;
pActor->nFrame = 0;
}
@ -338,21 +332,21 @@ void AIWasp::Tick(RunListEvent* ev)
}
case 5:
{
auto pSector =pSprite->sector();
auto pSector =pActor->spr.sector();
pSprite->pos.Z += pSprite->zvel;
pActor->spr.pos.Z += pActor->spr.zvel;
if (pSprite->pos.Z >= pSector->floorz)
if (pActor->spr.pos.Z >= pSector->floorz)
{
if (pSector->pBelow != nullptr)
{
BuildSplash(pActor, pSector);
pSprite->cstat |= CSTAT_SPRITE_INVISIBLE;
pActor->spr.cstat |= CSTAT_SPRITE_INVISIBLE;
}
pSprite->xvel = 0;
pSprite->yvel = 0;
pSprite->zvel = 0;
pActor->spr.xvel = 0;
pActor->spr.yvel = 0;
pActor->spr.zvel = 0;
pActor->nAction = 6;
pActor->nFrame = 0;
runlist_SubRunRec(pActor->nRun);