- globally replaced all occurences of '->s().' with '->spr.'

This commit is contained in:
Christoph Oelckers 2021-12-21 23:18:23 +01:00
parent 56e56e9d2f
commit d9d05e90b5
83 changed files with 477 additions and 477 deletions

View file

@ -1529,7 +1529,7 @@ int32_t polymost_mddraw(tspriteptr_t tspr)
allocmodelverts = maxmodelverts; allocmodelverts = maxmodelverts;
} }
mdmodel_t *const vm = models[tile2model[Ptile2tile(tspr->picnum, tspr->ownerActor->s().pal)].modelid]; mdmodel_t *const vm = models[tile2model[Ptile2tile(tspr->picnum, tspr->ownerActor->spr.pal)].modelid];
if (vm->mdnum == 1) if (vm->mdnum == 1)
return polymost_voxdraw((voxmodel_t *)vm,tspr, false); // can't access rotating info anymore return polymost_voxdraw((voxmodel_t *)vm,tspr, false); // can't access rotating info anymore
else if (vm->mdnum == 3) else if (vm->mdnum == 3)

View file

@ -3240,7 +3240,7 @@ void polymost_drawsprite(int32_t snum)
break; break;
} }
actor->s().cstat2 |= CSTAT2_SPRITE_MAPPED; actor->spr.cstat2 |= CSTAT2_SPRITE_MAPPED;
_drawsprite_return: _drawsprite_return:
; ;
@ -3811,7 +3811,7 @@ int32_t polymost_voxdraw(voxmodel_t* m, tspriteptr_t const tspr, bool rotate)
k0 = m->bscale / 64.f; k0 = m->bscale / 64.f;
f = (float)tspr->xrepeat * (256.f / 320.f) * k0; f = (float)tspr->xrepeat * (256.f / 320.f) * k0;
if ((tspr->ownerActor->s().cstat & CSTAT_SPRITE_ALIGNMENT_MASK) == CSTAT_SPRITE_ALIGNMENT_WALL) if ((tspr->ownerActor->spr.cstat & CSTAT_SPRITE_ALIGNMENT_MASK) == CSTAT_SPRITE_ALIGNMENT_WALL)
{ {
f *= 1.25f; f *= 1.25f;
a0.Y -= tspr->xoffset * bcosf(tspr->ownerActor->sx().angoff, -20); a0.Y -= tspr->xoffset * bcosf(tspr->ownerActor->sx().angoff, -20);
@ -3827,7 +3827,7 @@ int32_t polymost_voxdraw(voxmodel_t* m, tspriteptr_t const tspr, bool rotate)
m0.Z *= f; a0.Z *= f; m0.Z *= f; a0.Z *= f;
k0 = (float)(tspr->z + tspr->ownerActor->sx().position_offset.z); k0 = (float)(tspr->z + tspr->ownerActor->sx().position_offset.z);
f = ((globalorientation & 8) && (tspr->ownerActor->s().cstat & CSTAT_SPRITE_ALIGNMENT_MASK) != 0) ? -4.f : 4.f; f = ((globalorientation & 8) && (tspr->ownerActor->spr.cstat & CSTAT_SPRITE_ALIGNMENT_MASK) != 0) ? -4.f : 4.f;
k0 -= (tspr->yoffset * tspr->yrepeat) * f * m->bscale; k0 -= (tspr->yoffset * tspr->yrepeat) * f * m->bscale;
zoff = m->siz.z * .5f; zoff = m->siz.z * .5f;
if (!(tspr->cstat & CSTAT_SPRITE_YCENTER)) if (!(tspr->cstat & CSTAT_SPRITE_YCENTER))

View file

@ -97,7 +97,7 @@ static void AddStatTail(DCoreActor* actor, int statnum)
else statList[statnum].firstEntry = actor; else statList[statnum].firstEntry = actor;
statList[statnum].lastEntry = actor; statList[statnum].lastEntry = actor;
assert(ValidateStatList(statnum)); assert(ValidateStatList(statnum));
actor->s().statnum = statnum; actor->spr.statnum = statnum;
actor->link_stat = statnum; actor->link_stat = statnum;
GC::WriteBarrier(actor); GC::WriteBarrier(actor);
GC::WriteBarrier(tail); GC::WriteBarrier(tail);
@ -121,7 +121,7 @@ static void AddStatHead(DCoreActor* actor, int statnum)
else statList[statnum].lastEntry = actor; else statList[statnum].lastEntry = actor;
assert(ValidateStatList(statnum)); assert(ValidateStatList(statnum));
statList[statnum].firstEntry = actor; statList[statnum].firstEntry = actor;
actor->s().statnum = statnum; actor->spr.statnum = statnum;
actor->link_stat = statnum; actor->link_stat = statnum;
GC::WriteBarrier(actor); GC::WriteBarrier(actor);
GC::WriteBarrier(head); GC::WriteBarrier(head);
@ -154,7 +154,7 @@ static void RemoveActorStat(DCoreActor* actor)
assert(ValidateStatList(actor->link_stat)); assert(ValidateStatList(actor->link_stat));
actor->nextStat = actor->prevStat = nullptr; actor->nextStat = actor->prevStat = nullptr;
actor->s().statnum = MAXSTATUS; actor->spr.statnum = MAXSTATUS;
actor->link_stat = MAXSTATUS; actor->link_stat = MAXSTATUS;
GC::WriteBarrier(prev); GC::WriteBarrier(prev);
GC::WriteBarrier(next); GC::WriteBarrier(next);
@ -184,7 +184,7 @@ int ChangeActorStat(DCoreActor* actor, int statnum, bool tail)
{ {
int oldstat = actor->link_stat; int oldstat = actor->link_stat;
assert(statnum >= 0 && statnum < MAXSTATUS); assert(statnum >= 0 && statnum < MAXSTATUS);
assert(actor->s().statnum >= 0 && actor->s().statnum < MAXSTATUS); assert(actor->spr.statnum >= 0 && actor->spr.statnum < MAXSTATUS);
RemoveActorStat(actor); RemoveActorStat(actor);
InsertActorStat(actor, statnum, tail); InsertActorStat(actor, statnum, tail);
return 0; return 0;
@ -236,7 +236,7 @@ static void AddSectTail(DCoreActor *actor, sectortype* sect)
else sect->firstEntry = actor; else sect->firstEntry = actor;
sect->lastEntry = actor; sect->lastEntry = actor;
assert(ValidateSectList(sect)); assert(ValidateSectList(sect));
actor->s().setsector(sect); actor->spr.setsector(sect);
actor->link_sector = sect; actor->link_sector = sect;
GC::WriteBarrier(actor); GC::WriteBarrier(actor);
GC::WriteBarrier(tail); GC::WriteBarrier(tail);
@ -260,7 +260,7 @@ static void AddSectHead(DCoreActor *actor, sectortype* sect)
else sect->lastEntry = actor; else sect->lastEntry = actor;
sect->firstEntry = actor; sect->firstEntry = actor;
assert(ValidateSectList(sect)); assert(ValidateSectList(sect));
actor->s().setsector(sect); actor->spr.setsector(sect);
actor->link_sector = sect; actor->link_sector = sect;
GC::WriteBarrier(actor); GC::WriteBarrier(actor);
GC::WriteBarrier(head); GC::WriteBarrier(head);
@ -297,7 +297,7 @@ static void RemoveActorSect(DCoreActor* actor)
assert(ValidateSectList(actor->link_sector, actor)); assert(ValidateSectList(actor->link_sector, actor));
actor->nextSect = actor->prevSect = nullptr; actor->nextSect = actor->prevSect = nullptr;
actor->s().setsector(nullptr); actor->spr.setsector(nullptr);
actor->link_sector = nullptr; actor->link_sector = nullptr;
GC::WriteBarrier(prev); GC::WriteBarrier(prev);
GC::WriteBarrier(next); GC::WriteBarrier(next);
@ -316,7 +316,7 @@ static void InsertActorSect(DCoreActor* actor, sectortype* sector, bool tail)
if (!sector) if (!sector)
{ {
actor->link_sector = nullptr; actor->link_sector = nullptr;
actor->s().setsector(nullptr); actor->spr.setsector(nullptr);
return; return;
} }
if (isSafe() || tail) AddSectTail(actor, sector); if (isSafe() || tail) AddSectTail(actor, sector);
@ -356,7 +356,7 @@ DCoreActor* InsertActor(PClass* type, sectortype* sector, int stat, bool tail)
InsertActorSect(actor, sector, tail); InsertActorSect(actor, sector, tail);
Numsprites++; Numsprites++;
actor->s().time = leveltimer++; actor->spr.time = leveltimer++;
return actor; return actor;
} }
@ -448,7 +448,7 @@ void InitSpriteLists()
void SetActor(DCoreActor* actor, const vec3_t* newpos) void SetActor(DCoreActor* actor, const vec3_t* newpos)
{ {
auto tempsector = actor->sector(); auto tempsector = actor->sector();
actor->s().setpos(*newpos); actor->spr.setpos(*newpos);
updatesector(newpos->x, newpos->y, &tempsector); updatesector(newpos->x, newpos->y, &tempsector);
if (tempsector && tempsector != actor->sector()) if (tempsector && tempsector != actor->sector())
@ -458,7 +458,7 @@ void SetActor(DCoreActor* actor, const vec3_t* newpos)
void SetActorZ(DCoreActor* actor, const vec3_t* newpos) void SetActorZ(DCoreActor* actor, const vec3_t* newpos)
{ {
auto tempsector = actor->sector(); auto tempsector = actor->sector();
actor->s().setpos(*newpos); actor->spr.setpos(*newpos);
updatesectorz(newpos->x, newpos->y, newpos->z, &tempsector); updatesectorz(newpos->x, newpos->y, newpos->z, &tempsector);
if (tempsector && tempsector != actor->sector()) if (tempsector && tempsector != actor->sector())

View file

@ -281,7 +281,7 @@ void HWDrawInfo::DispatchSprites()
if (actor == nullptr || tspr->xrepeat == 0 || tspr->yrepeat == 0 || tilenum >= MAXTILES) if (actor == nullptr || tspr->xrepeat == 0 || tspr->yrepeat == 0 || tilenum >= MAXTILES)
continue; continue;
actor->s().cstat2 |= CSTAT2_SPRITE_MAPPED; actor->spr.cstat2 |= CSTAT2_SPRITE_MAPPED;
tileUpdatePicnum(&tilenum, (actor->GetIndex() & 16383) + 32768, 0); tileUpdatePicnum(&tilenum, (actor->GetIndex() & 16383) + 32768, 0);
tspr->picnum = tilenum; tspr->picnum = tilenum;

View file

@ -477,7 +477,7 @@ bool HWSprite::ProcessVoxel(HWDrawInfo* di, voxmodel_t* vox, tspritetype* spr, s
float basescale = voxel->bscale / 64.f; float basescale = voxel->bscale / 64.f;
float sprxscale = (float)spr->xrepeat * (256.f / 320.f) * basescale; float sprxscale = (float)spr->xrepeat * (256.f / 320.f) * basescale;
if ((spr->ownerActor->s().cstat & CSTAT_SPRITE_ALIGNMENT_MASK) == CSTAT_SPRITE_ALIGNMENT_WALL) if ((spr->ownerActor->spr.cstat & CSTAT_SPRITE_ALIGNMENT_MASK) == CSTAT_SPRITE_ALIGNMENT_WALL)
{ {
sprxscale *= 1.25f; sprxscale *= 1.25f;
translatevec.Y -= spr->xoffset * bcosf(sprext->angoff, -20); translatevec.Y -= spr->xoffset * bcosf(sprext->angoff, -20);
@ -505,7 +505,7 @@ bool HWSprite::ProcessVoxel(HWDrawInfo* di, voxmodel_t* vox, tspritetype* spr, s
translatevec.Z *= sprzscale; translatevec.Z *= sprzscale;
float zpos = (float)(spr->z + sprext->position_offset.z); float zpos = (float)(spr->z + sprext->position_offset.z);
float zscale = ((spr->cstat & CSTAT_SPRITE_YFLIP) && (spr->ownerActor->s().cstat & CSTAT_SPRITE_ALIGNMENT_MASK) != 0) ? -4.f : 4.f; float zscale = ((spr->cstat & CSTAT_SPRITE_YFLIP) && (spr->ownerActor->spr.cstat & CSTAT_SPRITE_ALIGNMENT_MASK) != 0) ? -4.f : 4.f;
zpos -= (spr->yoffset * spr->yrepeat) * zscale * voxel->bscale; zpos -= (spr->yoffset * spr->yrepeat) * zscale * voxel->bscale;
x = (spr->x + sprext->position_offset.x) * (1 / 16.f); x = (spr->x + sprext->position_offset.x) * (1 / 16.f);

View file

@ -2527,9 +2527,9 @@ void actInit(TArray<DBloodActor*>& actors)
BloodStatIterator it(kStatItem); BloodStatIterator it(kStatItem);
while (auto act = it.Next()) while (auto act = it.Next())
{ {
if (act->s().type == kItemWeaponVoodooDoll) if (act->spr.type == kItemWeaponVoodooDoll)
{ {
act->s().type = kItemAmmoVoodooDoll; act->spr.type = kItemAmmoVoodooDoll;
break; break;
} }
} }
@ -2767,7 +2767,7 @@ static DBloodActor* actSpawnFloor(DBloodActor* actor)
updatesector(x, y, &pSector); updatesector(x, y, &pSector);
int zFloor = getflorzofslopeptr(pSector, x, y); int zFloor = getflorzofslopeptr(pSector, x, y);
auto spawned = actSpawnSprite(pSector, x, y, zFloor, 3, 0); auto spawned = actSpawnSprite(pSector, x, y, zFloor, 3, 0);
if (spawned) spawned->s().cstat &= ~CSTAT_SPRITE_BLOCK_ALL; if (spawned) spawned->spr.cstat &= ~CSTAT_SPRITE_BLOCK_ALL;
return spawned; return spawned;
} }
@ -2895,8 +2895,8 @@ DBloodActor* actDropObject(DBloodActor* actor, int nType)
{ {
int top, bottom; int top, bottom;
GetActorExtents(act2, &top, &bottom); GetActorExtents(act2, &top, &bottom);
if (bottom >= act2->s().z) if (bottom >= act2->spr.z)
act2->s().z -= bottom - act2->s().z; act2->spr.z -= bottom - act2->spr.z;
} }
return act2; return act2;
@ -3143,7 +3143,7 @@ static void checkDropObjects(DBloodActor* actor)
if (pXSprite->key > 0) actDropObject(actor, kItemKeyBase + pXSprite->key - 1); if (pXSprite->key > 0) actDropObject(actor, kItemKeyBase + pXSprite->key - 1);
if (pXSprite->dropMsg > 0) actDropObject(actor, pXSprite->dropMsg); if (pXSprite->dropMsg > 0) actDropObject(actor, pXSprite->dropMsg);
switch (actor->s().type) switch (actor->spr.type)
{ {
case kDudeCultistTommy: case kDudeCultistTommy:
{ {
@ -3256,7 +3256,7 @@ static void spawnGibs(DBloodActor* actor, int type, int velz)
{ {
int top, bottom; int top, bottom;
GetActorExtents(actor, &top, &bottom); GetActorExtents(actor, &top, &bottom);
CGibPosition gibPos(actor->s().x, actor->s().y, top); CGibPosition gibPos(actor->spr.x, actor->spr.y, top);
CGibVelocity gibVel(actor->xvel >> 1, actor->yvel >> 1, velz); CGibVelocity gibVel(actor->xvel >> 1, actor->yvel >> 1, velz);
GibSprite(actor, GIBTYPE_27, &gibPos, &gibVel); GibSprite(actor, GIBTYPE_27, &gibPos, &gibVel);
} }
@ -3724,7 +3724,7 @@ static int actDamageThing(DBloodActor* source, DBloodActor* actor, int damage, D
pXSprite->stateTimer = pXSprite->data4 = pXSprite->isTriggered = 0; pXSprite->stateTimer = pXSprite->data4 = pXSprite->isTriggered = 0;
#ifdef NOONE_EXTENSIONS #ifdef NOONE_EXTENSIONS
if (Owner && Owner->s().type == kDudeModernCustom) if (Owner && Owner->spr.type == kDudeModernCustom)
Owner->SetSpecialOwner(); // indicates if custom dude had life leech. Owner->SetSpecialOwner(); // indicates if custom dude had life leech.
#endif #endif
break; break;
@ -3813,7 +3813,7 @@ int actDamageSprite(DBloodActor* source, DBloodActor* actor, DAMAGE_TYPE damageT
if (source == nullptr) source = actor; if (source == nullptr) source = actor;
PLAYER* pSourcePlayer = nullptr; PLAYER* pSourcePlayer = nullptr;
if (source->IsPlayerActor()) pSourcePlayer = &gPlayer[source->s().type - kDudePlayer1]; if (source->IsPlayerActor()) pSourcePlayer = &gPlayer[source->spr.type - kDudePlayer1];
if (!gGameOptions.bFriendlyFire && IsTargetTeammate(pSourcePlayer, pSprite)) return 0; if (!gGameOptions.bFriendlyFire && IsTargetTeammate(pSourcePlayer, pSprite)) return 0;
switch (pSprite->statnum) switch (pSprite->statnum)
@ -3907,7 +3907,7 @@ static void actImpactMissile(DBloodActor* missileActor, int hitCode)
if (gGameOptions.weaponsV10x && !VanillaMode() && pDudeInfo != nullptr) if (gGameOptions.weaponsV10x && !VanillaMode() && pDudeInfo != nullptr)
{ {
if (missileOwner->IsDudeActor() && missileOwner->hasX() && missileOwner->x().health != 0) if (missileOwner->IsDudeActor() && missileOwner->hasX() && missileOwner->x().health != 0)
actHealDude(missileOwner, nDamage >> 2, getDudeInfo(missileOwner->s().type)->startHealth); actHealDude(missileOwner, nDamage >> 2, getDudeInfo(missileOwner->spr.type)->startHealth);
} }
} }
@ -3933,7 +3933,7 @@ static void actImpactMissile(DBloodActor* missileActor, int hitCode)
if (pWallHit) if (pWallHit)
{ {
auto pFX = gFX.fxSpawnActor(FX_52, pMissile->sector(), pMissile->x, pMissile->y, pMissile->z, 0); auto pFX = gFX.fxSpawnActor(FX_52, pMissile->sector(), pMissile->x, pMissile->y, pMissile->z, 0);
if (pFX) pFX->s().ang = (GetWallAngle(pWallHit) + 512) & 2047; if (pFX) pFX->spr.ang = (GetWallAngle(pWallHit) + 512) & 2047;
} }
break; break;
} }
@ -4105,7 +4105,7 @@ static void actImpactMissile(DBloodActor* missileActor, int hitCode)
{ {
int nDamage = (10 + Random(10)) << 4; int nDamage = (10 + Random(10)) << 4;
actDamageSprite(missileOwner, actorHit, kDamageSpirit, nDamage); actDamageSprite(missileOwner, actorHit, kDamageSpirit, nDamage);
int nType = missileOwner->s().type - kDudeBase; int nType = missileOwner->spr.type - kDudeBase;
if (missileOwner->x().health > 0) if (missileOwner->x().health > 0)
actHealDude(missileOwner, 10, getDudeInfo(nType + kDudeBase)->startHealth); actHealDude(missileOwner, 10, getDudeInfo(nType + kDudeBase)->startHealth);
} }
@ -4153,10 +4153,10 @@ static void actImpactMissile(DBloodActor* missileActor, int hitCode)
static void actKickObject(DBloodActor* kicker, DBloodActor* kicked) static void actKickObject(DBloodActor* kicker, DBloodActor* kicked)
{ {
int nSpeed = ClipLow(approxDist(kicker->xvel, kicker->yvel) * 2, 0xaaaaa); int nSpeed = ClipLow(approxDist(kicker->xvel, kicker->yvel) * 2, 0xaaaaa);
kicked->xvel = MulScale(nSpeed, Cos(kicker->s().ang + Random2(85)), 30); kicked->xvel = MulScale(nSpeed, Cos(kicker->spr.ang + Random2(85)), 30);
kicked->yvel = MulScale(nSpeed, Sin(kicker->s().ang + Random2(85)), 30); kicked->yvel = MulScale(nSpeed, Sin(kicker->spr.ang + Random2(85)), 30);
kicked->zvel = MulScale(nSpeed, -0x2000, 14); kicked->zvel = MulScale(nSpeed, -0x2000, 14);
kicked->s().flags = 7; kicked->spr.flags = 7;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@ -4952,8 +4952,8 @@ void MoveDude(DBloodActor* actor)
} }
DCoreActor* pUpperLink = pSector->upperLink; DCoreActor* pUpperLink = pSector->upperLink;
DCoreActor* pLowerLink = pSector->lowerLink; DCoreActor* pLowerLink = pSector->lowerLink;
if (pUpperLink && (pUpperLink->s().type == kMarkerUpWater || pUpperLink->s().type == kMarkerUpGoo)) bDepth = 1; if (pUpperLink && (pUpperLink->spr.type == kMarkerUpWater || pUpperLink->spr.type == kMarkerUpGoo)) bDepth = 1;
if (pLowerLink && (pLowerLink->s().type == kMarkerLowWater || pLowerLink->s().type == kMarkerLowGoo)) bDepth = 1; if (pLowerLink && (pLowerLink->spr.type == kMarkerLowWater || pLowerLink->spr.type == kMarkerLowGoo)) bDepth = 1;
if (pPlayer) wd += 16; if (pPlayer) wd += 16;
if (actor->zvel) pSprite->z += actor->zvel >> 8; if (actor->zvel) pSprite->z += actor->zvel >> 8;
@ -5265,10 +5265,10 @@ void MoveDude(DBloodActor* actor)
if (floorColl.type == kHitSprite) if (floorColl.type == kHitSprite)
{ {
auto hitAct = floorColl.actor(); auto hitAct = floorColl.actor();
if ((hitAct->s().cstat & CSTAT_SPRITE_ALIGNMENT_MASK) == CSTAT_SPRITE_ALIGNMENT_FACING) if ((hitAct->spr.cstat & CSTAT_SPRITE_ALIGNMENT_MASK) == CSTAT_SPRITE_ALIGNMENT_FACING)
{ {
actor->xvel += MulScale(4, pSprite->x - hitAct->s().x, 2); actor->xvel += MulScale(4, pSprite->x - hitAct->spr.x, 2);
actor->yvel += MulScale(4, pSprite->y - hitAct->s().y, 2); actor->yvel += MulScale(4, pSprite->y - hitAct->spr.y, 2);
return; return;
} }
} }
@ -6008,7 +6008,7 @@ static void actCheckExplosion()
if (gImpactSpritesList[i] == nullptr) continue; if (gImpactSpritesList[i] == nullptr) continue;
DBloodActor* impactactor = gImpactSpritesList[i]; DBloodActor* impactactor = gImpactSpritesList[i];
if (!impactactor->hasX() || !impactactor->s().insector() || (impactactor->s().flags & kHitagFree) != 0) continue; if (!impactactor->hasX() || !impactactor->spr.insector() || (impactactor->spr.flags & kHitagFree) != 0) continue;
if (!CheckSector(sectorMap, &impactactor->s()) || !CheckProximity(impactactor, x, y, z, pSector, radius)) if (!CheckSector(sectorMap, &impactactor->s()) || !CheckProximity(impactactor, x, y, z, pSector, radius))
continue; continue;
@ -6899,8 +6899,8 @@ void actFireVector(DBloodActor* shooter, int a2, int a3, int a4, int a5, int a6,
auto pFX = gFX.fxSpawnActor(pVectorData->surfHit[nSurf].fx1, pSector, x, y, z, 0); auto pFX = gFX.fxSpawnActor(pVectorData->surfHit[nSurf].fx1, pSector, x, y, z, 0);
if (pFX) if (pFX)
{ {
pFX->s().ang = (GetWallAngle(pWall) + 512) & 2047; pFX->spr.ang = (GetWallAngle(pWall) + 512) & 2047;
pFX->s().cstat |= CSTAT_SPRITE_ALIGNMENT_WALL; pFX->spr.cstat |= CSTAT_SPRITE_ALIGNMENT_WALL;
} }
} }
} }
@ -7004,8 +7004,8 @@ void actFireVector(DBloodActor* shooter, int a2, int a3, int a4, int a5, int a6,
if (pFX) if (pFX)
{ {
pFX->zvel = 0x2222; pFX->zvel = 0x2222;
pFX->s().ang = (GetWallAngle(pWall) + 512) & 2047; pFX->spr.ang = (GetWallAngle(pWall) + 512) & 2047;
pFX->s().cstat |= CSTAT_SPRITE_ALIGNMENT_WALL; pFX->spr.cstat |= CSTAT_SPRITE_ALIGNMENT_WALL;
} }
} }
} }
@ -7222,11 +7222,11 @@ void actPostProcess(void)
{ {
for (auto& p : gPost) for (auto& p : gPost)
{ {
p.sprite->s().flags &= ~32; p.sprite->spr.flags &= ~32;
int nStatus = p.status; int nStatus = p.status;
if (nStatus == kStatFree) if (nStatus == kStatFree)
{ {
if (p.sprite->s().statnum != kStatFree) if (p.sprite->spr.statnum != kStatFree)
{ {
evKillActor(p.sprite); evKillActor(p.sprite);
if (p.sprite->hasX()) seqKill(p.sprite); if (p.sprite->hasX()) seqKill(p.sprite);
@ -7276,7 +7276,7 @@ void MakeSplash(DBloodActor* actor)
void actBurnSprite(DBloodActor* pSource, DBloodActor* pTarget, int nTime) void actBurnSprite(DBloodActor* pSource, DBloodActor* pTarget, int nTime)
{ {
auto pXSprite = &pTarget->x(); auto pXSprite = &pTarget->x();
pXSprite->burnTime = ClipHigh(pXSprite->burnTime + nTime, pTarget->s().statnum == kStatDude ? 2400 : 1200); pXSprite->burnTime = ClipHigh(pXSprite->burnTime + nTime, pTarget->spr.statnum == kStatDude ? 2400 : 1200);
pTarget->SetBurnSource(pSource); pTarget->SetBurnSource(pSource);
} }

View file

@ -112,7 +112,7 @@ static bool isImmune(DBloodActor* actor, int dmgType, int minScale)
if (dmgType >= kDmgFall && dmgType < kDmgMax && actor->hasX() && actor->x().locked != 1) if (dmgType >= kDmgFall && dmgType < kDmgMax && actor->hasX() && actor->x().locked != 1)
{ {
int type = actor->s().type; int type = actor->spr.type;
if (type >= kThingBase && type < kThingMax) if (type >= kThingBase && type < kThingMax)
return (thingInfo[type - kThingBase].dmgControl[dmgType] <= minScale); return (thingInfo[type - kThingBase].dmgControl[dmgType] <= minScale);
else if (actor->IsDudeActor()) else if (actor->IsDudeActor())
@ -171,12 +171,12 @@ bool CanMove(DBloodActor* actor, DBloodActor* target, int nAngle, int nRange)
auto Lower = pSector->lowerLink; auto Lower = pSector->lowerLink;
if (Upper != nullptr) if (Upper != nullptr)
{ {
if (Upper->s().type == kMarkerUpWater || Upper->s().type == kMarkerUpGoo) if (Upper->spr.type == kMarkerUpWater || Upper->spr.type == kMarkerUpGoo)
Water = Depth = 1; Water = Depth = 1;
} }
if (Lower != nullptr) if (Lower != nullptr)
{ {
if (Lower->s().type == kMarkerLowWater || Lower->s().type == kMarkerLowGoo) if (Lower->spr.type == kMarkerLowWater || Lower->spr.type == kMarkerLowGoo)
Depth = 1; Depth = 1;
} }
switch (pSprite->type) { switch (pSprite->type) {
@ -1734,7 +1734,7 @@ void aiInitSprite(DBloodActor* actor)
if (gModernMap) if (gModernMap)
{ {
// must keep it in case of loading save // must keep it in case of loading save
if (pXSprite->dudeFlag4 && actor->GetTarget() && actor->GetTarget()->s().type == kMarkerPath) if (pXSprite->dudeFlag4 && actor->GetTarget() && actor->GetTarget()->spr.type == kMarkerPath)
{ {
stateTimer = pXSprite->stateTimer; stateTimer = pXSprite->stateTimer;
pTargetMarker = actor->GetTarget(); pTargetMarker = actor->GetTarget();
@ -1968,7 +1968,7 @@ void aiInitSprite(DBloodActor* actor)
// make dude follow the markers // make dude follow the markers
bool uwater = spriteIsUnderwater(actor); bool uwater = spriteIsUnderwater(actor);
if (actor->GetTarget() == nullptr || actor->GetTarget()->s().type != kMarkerPath) if (actor->GetTarget() == nullptr || actor->GetTarget()->spr.type != kMarkerPath)
{ {
actor->SetTarget(nullptr); actor->SetTarget(nullptr);
aiPatrolSetMarker(actor); aiPatrolSetMarker(actor);

View file

@ -269,7 +269,7 @@ static void beastThinkChase(DBloodActor* actor)
aiNewState(actor, &beastStomp); aiNewState(actor, &beastStomp);
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type) if (pSprite->type != gHitInfo.actor()->spr.type)
{ {
if (!pXSector || !pXSector->Underwater) if (!pXSector || !pXSector->Underwater)
aiNewState(actor, &beastStomp); aiNewState(actor, &beastStomp);
@ -301,7 +301,7 @@ static void beastThinkChase(DBloodActor* actor)
aiNewState(actor, &beastSlash); aiNewState(actor, &beastSlash);
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type) if (pSprite->type != gHitInfo.actor()->spr.type)
{ {
if (pXSector && pXSector->Underwater) if (pXSector && pXSector->Underwater)
aiNewState(actor, &beastSwimSlash); aiNewState(actor, &beastSwimSlash);

View file

@ -176,7 +176,7 @@ static void calebThinkChase(DBloodActor* actor)
aiNewState(actor, &tinycalebAttack); aiNewState(actor, &tinycalebAttack);
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type) if (pSprite->type != gHitInfo.actor()->spr.type)
{ {
if (pXSector && pXSector->Underwater) if (pXSector && pXSector->Underwater)
aiNewState(actor, &tinycalebSwimAttack); aiNewState(actor, &tinycalebSwimAttack);

View file

@ -424,7 +424,7 @@ static void cerberusThinkChase(DBloodActor* actor)
aiNewState(actor, &cerberusBite); aiNewState(actor, &cerberusBite);
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudeHellHound) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudeHellHound)
aiNewState(actor, &cerberusBite); aiNewState(actor, &cerberusBite);
break; break;
case 0: case 0:
@ -441,7 +441,7 @@ static void cerberusThinkChase(DBloodActor* actor)
aiNewState(actor, &cerberus2Bite); aiNewState(actor, &cerberus2Bite);
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudeHellHound) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudeHellHound)
aiNewState(actor, &cerberus2Bite); aiNewState(actor, &cerberus2Bite);
break; break;
case 0: case 0:

View file

@ -182,7 +182,7 @@ static bool TargetNearExplosion(spritetype* pSprite)
BloodSectIterator it(pSprite->sector()); BloodSectIterator it(pSprite->sector());
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
if (actor->s().type == kThingArmedTNTStick || actor->s().statnum == kStatExplosion) if (actor->spr.type == kThingArmedTNTStick || actor->spr.statnum == kStatExplosion)
return true; return true;
} }
return false; return false;
@ -307,7 +307,7 @@ static void cultThinkChase(DBloodActor* actor)
case 4: case 4:
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo)
aiNewState(actor, &cultistTThrow); aiNewState(actor, &cultistTThrow);
break; break;
default: default:
@ -329,7 +329,7 @@ static void cultThinkChase(DBloodActor* actor)
aiNewState(actor, &cultistTSwimFire); aiNewState(actor, &cultistTSwimFire);
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudeCultistShotgun) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudeCultistShotgun)
{ {
if (!dudeIsPlayingSeq(actor, 14) && pXSprite->medium == kMediumNormal) if (!dudeIsPlayingSeq(actor, 14) && pXSprite->medium == kMediumNormal)
aiNewState(actor, &cultistTFire); aiNewState(actor, &cultistTFire);
@ -375,7 +375,7 @@ static void cultThinkChase(DBloodActor* actor)
case 4: case 4:
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo)
aiNewState(actor, &cultistSThrow); aiNewState(actor, &cultistSThrow);
break; break;
default: default:
@ -397,7 +397,7 @@ static void cultThinkChase(DBloodActor* actor)
aiNewState(actor, &cultistSSwimFire); aiNewState(actor, &cultistSSwimFire);
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudeCultistTommy) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudeCultistTommy)
{ {
if (!dudeIsPlayingSeq(actor, 14) && pXSprite->medium == kMediumNormal) if (!dudeIsPlayingSeq(actor, 14) && pXSprite->medium == kMediumNormal)
aiNewState(actor, &cultistSFire); aiNewState(actor, &cultistSFire);
@ -443,7 +443,7 @@ static void cultThinkChase(DBloodActor* actor)
case 4: case 4:
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo)
aiNewState(actor, &cultistTsThrow); aiNewState(actor, &cultistTsThrow);
break; break;
default: default:
@ -465,7 +465,7 @@ static void cultThinkChase(DBloodActor* actor)
aiNewState(actor, &cultistTsSwimFire); aiNewState(actor, &cultistTsSwimFire);
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudeCultistTommy) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudeCultistTommy)
{ {
if (!dudeIsPlayingSeq(actor, 14) && pXSprite->medium == kMediumNormal) if (!dudeIsPlayingSeq(actor, 14) && pXSprite->medium == kMediumNormal)
aiNewState(actor, &cultistTsFire); aiNewState(actor, &cultistTsFire);
@ -509,7 +509,7 @@ static void cultThinkChase(DBloodActor* actor)
case 4: case 4:
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo)
aiNewState(actor, &cultistDThrow); aiNewState(actor, &cultistDThrow);
break; break;
default: default:
@ -530,7 +530,7 @@ static void cultThinkChase(DBloodActor* actor)
case 4: case 4:
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo)
aiNewState(actor, &cultist139A78); aiNewState(actor, &cultist139A78);
break; break;
default: default:
@ -555,7 +555,7 @@ static void cultThinkChase(DBloodActor* actor)
case 4: case 4:
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo)
aiNewState(actor, &cultistSThrow); aiNewState(actor, &cultistSThrow);
break; break;
default: default:
@ -577,7 +577,7 @@ static void cultThinkChase(DBloodActor* actor)
aiNewState(actor, &cultistSSwimFire); aiNewState(actor, &cultistSSwimFire);
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudeCultistTommy) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudeCultistTommy)
{ {
if (!dudeIsPlayingSeq(actor, 14) && pXSprite->medium == kMediumNormal) if (!dudeIsPlayingSeq(actor, 14) && pXSprite->medium == kMediumNormal)
aiNewState(actor, &cultistSFire); aiNewState(actor, &cultistSFire);

View file

@ -404,7 +404,7 @@ static void gargThinkChase(DBloodActor* actor)
case 4: case 4:
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudeGargoyleStone) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudeGargoyleStone)
{ {
sfxPlay3DSound(actor, 1408, 0, 0); sfxPlay3DSound(actor, 1408, 0, 0);
aiNewState(actor, &gargoyleFThrow); aiNewState(actor, &gargoyleFThrow);
@ -429,7 +429,7 @@ static void gargThinkChase(DBloodActor* actor)
case 4: case 4:
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudeGargoyleStone) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudeGargoyleStone)
{ {
sfxPlay3DSound(actor, 1406, 0, 0); sfxPlay3DSound(actor, 1406, 0, 0);
aiNewState(actor, &gargoyleFSlash); aiNewState(actor, &gargoyleFSlash);
@ -463,7 +463,7 @@ static void gargThinkChase(DBloodActor* actor)
case 4: case 4:
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudeGargoyleFlesh) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudeGargoyleFlesh)
{ {
sfxPlay3DSound(actor, 1457, 0, 0); sfxPlay3DSound(actor, 1457, 0, 0);
aiNewState(actor, &gargoyleSBlast); aiNewState(actor, &gargoyleSBlast);
@ -487,7 +487,7 @@ static void gargThinkChase(DBloodActor* actor)
case 4: case 4:
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudeGargoyleFlesh) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudeGargoyleFlesh)
aiNewState(actor, &gargoyleFSlash); aiNewState(actor, &gargoyleFSlash);
break; break;
default: default:

View file

@ -381,7 +381,7 @@ static void ghostThinkChase(DBloodActor* actor)
case 4: case 4:
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudePhantasm) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudePhantasm)
aiNewState(actor, &ghostBlast); aiNewState(actor, &ghostBlast);
break; break;
default: default:
@ -401,7 +401,7 @@ static void ghostThinkChase(DBloodActor* actor)
case 4: case 4:
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type && gHitInfo.actor()->s().type != kDudePhantasm) if (pSprite->type != gHitInfo.actor()->spr.type && gHitInfo.actor()->spr.type != kDudePhantasm)
aiNewState(actor, &ghostSlash); aiNewState(actor, &ghostSlash);
break; break;
default: default:

View file

@ -165,7 +165,7 @@ static void gillThinkChase(DBloodActor* actor)
aiNewState(actor, &gillBeastBite); aiNewState(actor, &gillBeastBite);
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type) if (pSprite->type != gHitInfo.actor()->spr.type)
{ {
if (pXSector && pXSector->Underwater) if (pXSector && pXSector->Underwater)
aiNewState(actor, &gillBeastSwimBite); aiNewState(actor, &gillBeastSwimBite);

View file

@ -1494,7 +1494,7 @@ DBloodActor* getNextIncarnation(DBloodActor* actor)
{ {
if (!rxBucket[i].isActor()) continue; if (!rxBucket[i].isActor()) continue;
auto rxactor = rxBucket[i].actor(); auto rxactor = rxBucket[i].actor();
if (actor != rxactor && rxactor->s().statnum == kStatInactive) return rxactor; if (actor != rxactor && rxactor->spr.statnum == kStatInactive) return rxactor;
} }
return nullptr; return nullptr;
} }
@ -1623,7 +1623,7 @@ static void scaleDamage(DBloodActor* actor)
} }
// take in account yrepeat of sprite // take in account yrepeat of sprite
int yrepeat = actor->s().yrepeat; int yrepeat = actor->spr.yrepeat;
if (yrepeat < 64) if (yrepeat < 64)
{ {
for (int i = 0; i < kDmgMax; i++) curScale[i] += (64 - yrepeat); for (int i = 0; i < kDmgMax; i++) curScale[i] += (64 - yrepeat);
@ -1634,7 +1634,7 @@ static void scaleDamage(DBloodActor* actor)
} }
// take surface type into account // take surface type into account
int surfType = tileGetSurfType(actor->s().picnum); int surfType = tileGetSurfType(actor->spr.picnum);
switch (surfType) switch (surfType)
{ {
case 1: // stone case 1: // stone
@ -2518,7 +2518,7 @@ bool genDudePrepare(DBloodActor* actor, int propId)
BloodStatIterator it(kStatThing); BloodStatIterator it(kStatThing);
while (auto actor2 = it.Next()) while (auto actor2 = it.Next())
{ {
if (actor2->GetOwner() == actor && actor2->s().type == kModernThingEnemyLifeLeech) { if (actor2->GetOwner() == actor && actor2->spr.type == kModernThingEnemyLifeLeech) {
pExtra->pLifeLeech = actor2; pExtra->pLifeLeech = actor2;
break; break;
} }

View file

@ -152,7 +152,7 @@ static void zombfThinkChase(DBloodActor* actor)
aiNewState(actor, &zombieFThrow); aiNewState(actor, &zombieFThrow);
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type) if (pSprite->type != gHitInfo.actor()->spr.type)
aiNewState(actor, &zombieFThrow); aiNewState(actor, &zombieFThrow);
else else
aiNewState(actor, &zombieFDodge); aiNewState(actor, &zombieFDodge);
@ -171,7 +171,7 @@ static void zombfThinkChase(DBloodActor* actor)
aiNewState(actor, &zombieFPuke); aiNewState(actor, &zombieFPuke);
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type) if (pSprite->type != gHitInfo.actor()->spr.type)
aiNewState(actor, &zombieFPuke); aiNewState(actor, &zombieFPuke);
else else
aiNewState(actor, &zombieFDodge); aiNewState(actor, &zombieFDodge);
@ -190,7 +190,7 @@ static void zombfThinkChase(DBloodActor* actor)
aiNewState(actor, &zombieFHack); aiNewState(actor, &zombieFHack);
break; break;
case 3: case 3:
if (pSprite->type != gHitInfo.actor()->s().type) if (pSprite->type != gHitInfo.actor()->spr.type)
aiNewState(actor, &zombieFHack); aiNewState(actor, &zombieFHack);
else else
aiNewState(actor, &zombieFDodge); aiNewState(actor, &zombieFDodge);

View file

@ -521,7 +521,7 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in
tspritetype *pTSprite = &tsprite[nTSprite]; tspritetype *pTSprite = &tsprite[nTSprite];
auto owneractor = static_cast<DBloodActor*>(pTSprite->ownerActor); auto owneractor = static_cast<DBloodActor*>(pTSprite->ownerActor);
XSPRITE *pTXSprite = NULL; XSPRITE *pTXSprite = NULL;
if (owneractor->s().detail > gDetail) if (owneractor->spr.detail > gDetail)
{ {
pTSprite->xrepeat = 0; pTSprite->xrepeat = 0;
continue; continue;
@ -694,7 +694,7 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in
} }
nShade += tileShade[pTSprite->picnum]; nShade += tileShade[pTSprite->picnum];
pTSprite->shade = ClipRange(nShade, -128, 127); pTSprite->shade = ClipRange(nShade, -128, 127);
if ((pTSprite->flags&kHitagRespawn) && pTSprite->ownerActor->s().owner == 3) // Where does this 3 come from? Nothing sets it. if ((pTSprite->flags&kHitagRespawn) && pTSprite->ownerActor->spr.owner == 3) // Where does this 3 come from? Nothing sets it.
{ {
assert(pTXSprite != NULL); assert(pTXSprite != NULL);
pTSprite->xrepeat = 48; pTSprite->xrepeat = 48;

View file

@ -158,13 +158,13 @@ void PropagateMarkerReferences(void)
BloodStatIterator it(kStatMarker); BloodStatIterator it(kStatMarker);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
switch (actor->s().type) switch (actor->spr.type)
{ {
case kMarkerOff: case kMarkerOff:
case kMarkerAxis: case kMarkerAxis:
case kMarkerWarpDest: case kMarkerWarpDest:
{ {
int nOwner = actor->s().owner; int nOwner = actor->spr.owner;
if (validSectorIndex(nOwner)) if (validSectorIndex(nOwner))
{ {
if (sector[nOwner].hasX()) if (sector[nOwner].hasX())
@ -177,7 +177,7 @@ void PropagateMarkerReferences(void)
break; break;
case kMarkerOn: case kMarkerOn:
{ {
int nOwner = actor->s().owner; int nOwner = actor->spr.owner;
if (validSectorIndex(nOwner)) if (validSectorIndex(nOwner))
{ {
if (sector[nOwner].hasX()) if (sector[nOwner].hasX())

View file

@ -164,7 +164,7 @@ void fxBloodSpurt(DBloodActor* actor, sectortype*) // 6
auto pFX = gFX.fxSpawnActor(FX_27, pSprite->sector(), pSprite->x, pSprite->y, pSprite->z, 0); auto pFX = gFX.fxSpawnActor(FX_27, pSprite->sector(), pSprite->x, pSprite->y, pSprite->z, 0);
if (pFX) if (pFX)
{ {
pFX->s().ang = 0; pFX->spr.ang = 0;
pFX->xvel = actor->xvel>>8; pFX->xvel = actor->xvel>>8;
pFX->yvel = actor->yvel>>8; pFX->yvel = actor->yvel>>8;
pFX->zvel = actor->zvel>>8; pFX->zvel = actor->zvel>>8;
@ -362,7 +362,7 @@ void CounterCheck(DBloodActor*, sectortype* pSector) // 12
BloodSectIterator it(pSector); BloodSectIterator it(pSector);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
if (actor->s().type == nType) nCount++; if (actor->spr.type == nType) nCount++;
} }
if (nCount < nReq) { if (nCount < nReq) {
@ -408,7 +408,7 @@ void fxBloodBits(DBloodActor* actor, sectortype*) // 14
{ {
auto pFX = gFX.fxSpawnActor(FX_36, pSprite->sector(), x, y, floorZ-64, 0); auto pFX = gFX.fxSpawnActor(FX_36, pSprite->sector(), x, y, floorZ-64, 0);
if (pFX) if (pFX)
pFX->s().ang = nAngle; pFX->spr.ang = nAngle;
} }
gFX.remove(actor); gFX.remove(actor);
} }
@ -532,7 +532,7 @@ void fxPodBloodSpray(DBloodActor* actor, sectortype*) // 18
pFX = gFX.fxSpawnActor(FX_54, pSprite->sector(), pSprite->x, pSprite->y, pSprite->z, 0); pFX = gFX.fxSpawnActor(FX_54, pSprite->sector(), pSprite->x, pSprite->y, pSprite->z, 0);
if (pFX) if (pFX)
{ {
pFX->s().ang = 0; pFX->spr.ang = 0;
pFX->xvel = actor->xvel >> 8; pFX->xvel = actor->xvel >> 8;
pFX->yvel = actor->yvel >> 8; pFX->yvel = actor->yvel >> 8;
pFX->zvel = actor->zvel >> 8; pFX->zvel = actor->zvel >> 8;
@ -567,13 +567,13 @@ void fxPodBloodSplat(DBloodActor* actor, sectortype*) // 19
if (Chance(0x500) || pSprite->type == kThingPodGreenBall) if (Chance(0x500) || pSprite->type == kThingPodGreenBall)
pFX = gFX.fxSpawnActor(FX_55, pSprite->sector(), x, y, floorZ-64, 0); pFX = gFX.fxSpawnActor(FX_55, pSprite->sector(), x, y, floorZ-64, 0);
if (pFX) if (pFX)
pFX->s().ang = nAngle; pFX->spr.ang = nAngle;
} }
else else
{ {
pFX = gFX.fxSpawnActor(FX_32, pSprite->sector(), x, y, floorZ-64, 0); pFX = gFX.fxSpawnActor(FX_32, pSprite->sector(), x, y, floorZ-64, 0);
if (pFX) if (pFX)
pFX->s().ang = nAngle; pFX->spr.ang = nAngle;
} }
gFX.remove(actor); gFX.remove(actor);
} }

View file

@ -493,7 +493,7 @@ void evSend(EventObject& eob, int rxId, COMMAND_ID command)
{ {
auto actor = eo.actor(); auto actor = eo.actor();
if (actor && actor->hasX() && !(actor->s().flags & 32)) if (actor && actor->hasX() && !(actor->spr.flags & 32))
{ {
if (actor->x().rxID > 0) if (actor->x().rxID > 0)
trMessageSprite(actor, event); trMessageSprite(actor, event);
@ -638,7 +638,7 @@ void evProcess(unsigned int time)
if (event.target.isActor()) if (event.target.isActor())
{ {
// Don't call events on destroyed actors. Seems to happen occasionally. // Don't call events on destroyed actors. Seems to happen occasionally.
if (!event.target.actor() || event.target.actor()->s().statnum == kStatFree) continue; if (!event.target.actor() || event.target.actor()->spr.statnum == kStatFree) continue;
} }
if (event.cmd == kCmdCallback) if (event.cmd == kCmdCallback)

View file

@ -155,7 +155,7 @@ DBloodActor* CFX::fxSpawnActor(FX_ID nFx, sectortype* pSector, int x, int y, int
{ {
BloodStatIterator it(kStatFX); BloodStatIterator it(kStatFX);
auto iactor = it.Next(); auto iactor = it.Next();
while (iactor && (iactor->s().flags & 32)) while (iactor && (iactor->spr.flags & 32))
iactor = it.Next(); iactor = it.Next();
if (!iactor) if (!iactor)
return nullptr; return nullptr;
@ -266,7 +266,7 @@ void fxSpawnBlood(DBloodActor *actor, int )
auto bloodactor = gFX.fxSpawnActor(FX_27, pSprite->sector(), pSprite->x, pSprite->y, pSprite->z, 0); auto bloodactor = gFX.fxSpawnActor(FX_27, pSprite->sector(), pSprite->x, pSprite->y, pSprite->z, 0);
if (bloodactor) if (bloodactor)
{ {
bloodactor->s().ang = 1024; bloodactor->spr.ang = 1024;
bloodactor->xvel = Random2(0x6aaaa); bloodactor->xvel = Random2(0x6aaaa);
bloodactor->yvel = Random2(0x6aaaa); bloodactor->yvel = Random2(0x6aaaa);
bloodactor->zvel = -(int)Random(0x10aaaa)-100; bloodactor->zvel = -(int)Random(0x10aaaa)-100;
@ -291,7 +291,7 @@ void fxSpawnPodStuff(DBloodActor* actor, int )
spawnactor = gFX.fxSpawnActor(FX_54, pSprite->sector(), pSprite->x, pSprite->y, pSprite->z, 0); spawnactor = gFX.fxSpawnActor(FX_54, pSprite->sector(), pSprite->x, pSprite->y, pSprite->z, 0);
if (spawnactor) if (spawnactor)
{ {
spawnactor->s().ang = 1024; spawnactor->spr.ang = 1024;
spawnactor->xvel = Random2(0x6aaaa); spawnactor->xvel = Random2(0x6aaaa);
spawnactor->yvel = Random2(0x6aaaa); spawnactor->yvel = Random2(0x6aaaa);
spawnactor->zvel = -(int)Random(0x10aaaa)-100; spawnactor->zvel = -(int)Random(0x10aaaa)-100;
@ -310,7 +310,7 @@ void fxSpawnEjectingBrass(DBloodActor* actor, int z, int a3, int a4)
if (pBrass) if (pBrass)
{ {
if (!VanillaMode()) if (!VanillaMode())
pBrass->s().ang = Random(2047); pBrass->spr.ang = Random(2047);
int nDist = (a4 << 18) / 120 + Random2(((a4 / 4) << 18) / 120); int nDist = (a4 << 18) / 120 + Random2(((a4 / 4) << 18) / 120);
int nAngle = pSprite->ang + Random2(56) + 512; int nAngle = pSprite->ang + Random2(56) + 512;
pBrass->xvel = MulScale(nDist, Cos(nAngle), 30); pBrass->xvel = MulScale(nDist, Cos(nAngle), 30);
@ -330,7 +330,7 @@ void fxSpawnEjectingShell(DBloodActor* actor, int z, int a3, int a4)
if (pShell) if (pShell)
{ {
if (!VanillaMode()) if (!VanillaMode())
pShell->s().ang = Random(2047); pShell->spr.ang = Random(2047);
int nDist = (a4 << 18) / 120 + Random2(((a4 / 4) << 18) / 120); int nDist = (a4 << 18) / 120 + Random2(((a4 / 4) << 18) / 120);
int nAngle = pSprite->ang + Random2(56) + 512; int nAngle = pSprite->ang + Random2(56) + 512;
pShell->xvel = MulScale(nDist, Cos(nAngle), 30); pShell->xvel = MulScale(nDist, Cos(nAngle), 30);

View file

@ -527,11 +527,11 @@ int VectorScan(DBloodActor *actor, int nOffset, int nZOffset, int dx, int dy, in
if (!actor) return 2; if (!actor) return 2;
auto link = actor->GetOwner(); auto link = actor->GetOwner();
gHitInfo.clearObj(); gHitInfo.clearObj();
x1 = gHitInfo.hitpos.x + link->s().x - actor->s().x; x1 = gHitInfo.hitpos.x + link->spr.x - actor->spr.x;
y1 = gHitInfo.hitpos.y + link->s().y - actor->s().y; y1 = gHitInfo.hitpos.y + link->spr.y - actor->spr.y;
z1 = gHitInfo.hitpos.z + link->s().z - actor->s().z; z1 = gHitInfo.hitpos.z + link->spr.z - actor->spr.z;
pos = { x1, y1, z1 }; pos = { x1, y1, z1 };
hitscan(pos, link->s().sector(), { dx, dy, dz << 4 }, gHitInfo, CLIPMASK1); hitscan(pos, link->spr.sector(), { dx, dy, dz << 4 }, gHitInfo, CLIPMASK1);
continue; continue;
} }
@ -541,11 +541,11 @@ int VectorScan(DBloodActor *actor, int nOffset, int nZOffset, int dx, int dy, in
if (!actor) return 1; if (!actor) return 1;
auto link = actor->GetOwner(); auto link = actor->GetOwner();
gHitInfo.clearObj(); gHitInfo.clearObj();
x1 = gHitInfo.hitpos.x + link->s().x - actor->s().x; x1 = gHitInfo.hitpos.x + link->spr.x - actor->spr.x;
y1 = gHitInfo.hitpos.y + link->s().y - actor->s().y; y1 = gHitInfo.hitpos.y + link->spr.y - actor->spr.y;
z1 = gHitInfo.hitpos.z + link->s().z - actor->s().z; z1 = gHitInfo.hitpos.z + link->spr.z - actor->spr.z;
pos = { x1, y1, z1 }; pos = { x1, y1, z1 };
hitscan(pos, link->s().sector(), { dx, dy, dz << 4 }, gHitInfo, CLIPMASK1); hitscan(pos, link->spr.sector(), { dx, dy, dz << 4 }, gHitInfo, CLIPMASK1);
continue; continue;
} }
} }
@ -578,9 +578,9 @@ void GetZRange(DBloodActor *actor, int *ceilZ, Collision *ceilColl, int *floorZ,
if (actor) if (actor)
{ {
auto link = actor->GetOwner(); auto link = actor->GetOwner();
vec3_t lpos = pSprite->pos + link->s().pos - actor->s().pos; vec3_t lpos = pSprite->pos + link->spr.pos - actor->spr.pos;
getzrange(lpos, link->s().sector(), &nTemp1, scratch, (int32_t*)floorZ, *floorColl, nDist, nMask); getzrange(lpos, link->spr.sector(), &nTemp1, scratch, (int32_t*)floorZ, *floorColl, nDist, nMask);
*floorZ -= link->s().z - actor->s().z; *floorZ -= link->spr.z - actor->spr.z;
} }
} }
if (ceilColl->type == kHitSector) if (ceilColl->type == kHitSector)
@ -592,9 +592,9 @@ void GetZRange(DBloodActor *actor, int *ceilZ, Collision *ceilColl, int *floorZ,
if (actor) if (actor)
{ {
auto link = actor->GetOwner(); auto link = actor->GetOwner();
vec3_t lpos = pSprite->pos + link->s().pos - actor->s().pos; vec3_t lpos = pSprite->pos + link->spr.pos - actor->spr.pos;
getzrange(lpos, link->s().sector(), (int32_t*)ceilZ, *ceilColl, &nTemp1, scratch, nDist, nMask); getzrange(lpos, link->spr.sector(), (int32_t*)ceilZ, *ceilColl, &nTemp1, scratch, nDist, nMask);
*ceilZ -= link->s().z - actor->s().z; *ceilZ -= link->spr.z - actor->spr.z;
} }
} }
pSprite->cstat = bakCstat; pSprite->cstat = bakCstat;
@ -620,9 +620,9 @@ void GetZRangeAtXYZ(int x, int y, int z, sectortype* pSector, int *ceilZ, Collis
if (actor) if (actor)
{ {
auto link = actor->GetOwner(); auto link = actor->GetOwner();
vec3_t newpos = lpos + link->s().pos - actor->s().pos; vec3_t newpos = lpos + link->spr.pos - actor->spr.pos;
getzrange(newpos, link->s().sector(), &nTemp1, scratch, (int32_t*)floorZ, *floorColl, nDist, nMask); getzrange(newpos, link->spr.sector(), &nTemp1, scratch, (int32_t*)floorZ, *floorColl, nDist, nMask);
*floorZ -= link->s().z - actor->s().z; *floorZ -= link->spr.z - actor->spr.z;
} }
} }
if (ceilColl->type == kHitSector) if (ceilColl->type == kHitSector)
@ -634,9 +634,9 @@ void GetZRangeAtXYZ(int x, int y, int z, sectortype* pSector, int *ceilZ, Collis
if (actor) if (actor)
{ {
auto link = actor->GetOwner(); auto link = actor->GetOwner();
vec3_t newpos = lpos + link->s().pos - actor->s().pos; vec3_t newpos = lpos + link->spr.pos - actor->spr.pos;
getzrange(newpos, link->s().sector(), (int32_t*)ceilZ, *ceilColl, &nTemp1, scratch, nDist, nMask); getzrange(newpos, link->spr.sector(), (int32_t*)ceilZ, *ceilColl, &nTemp1, scratch, nDist, nMask);
*ceilZ -= link->s().z - actor->s().z; *ceilZ -= link->spr.z - actor->spr.z;
} }
} }
} }

View file

@ -292,7 +292,7 @@ void GibFX(DBloodActor* actor, GIBFX *pGFX, CGibPosition *pPos, CGibVelocity *pV
if (pFX) if (pFX)
{ {
if (pGFX->at1 < 0) if (pGFX->at1 < 0)
pFX->s().pal = pSprite->pal; pFX->spr.pal = pSprite->pal;
if (pVel) if (pVel)
{ {
pFX->xvel = pVel->vx+Random2(pGFX->atd); pFX->xvel = pVel->vx+Random2(pGFX->atd);
@ -409,7 +409,7 @@ void GibSprite(DBloodActor* actor, GIBTYPE nGibType, CGibPosition *pPos, CGibVel
assert(actor != NULL); assert(actor != NULL);
assert(nGibType >= 0 && nGibType < kGibMax); assert(nGibType >= 0 && nGibType < kGibMax);
if (!actor->s().insector()) if (!actor->spr.insector())
return; return;
GIBLIST *pGib = &gibList[nGibType]; GIBLIST *pGib = &gibList[nGibType];
for (int i = 0; i < pGib->Kills; i++) for (int i = 0; i < pGib->Kills; i++)
@ -440,7 +440,7 @@ void GibFX(walltype* pWall, GIBFX * pGFX, int a3, int a4, int a5, int a6, CGibVe
if (pGib) if (pGib)
{ {
if (pGFX->at1 < 0) if (pGFX->at1 < 0)
pGib->s().pal = pWall->pal; pGib->spr.pal = pWall->pal;
if (!pVel) if (!pVel)
{ {
pGib->xvel = Random2((pGFX->atd<<18)/120); pGib->xvel = Random2((pGFX->atd<<18)/120);

View file

@ -120,14 +120,14 @@ void InitMirrors(void)
if (link2 == nullptr) if (link2 == nullptr)
continue; continue;
auto sectj = link2->s().sector(); auto sectj = link2->spr.sector();
int j = sectnum(sectj); int j = sectnum(sectj);
if (sectj->ceilingpicnum != 504) if (sectj->ceilingpicnum != 504)
I_Error("Lower link sector %d doesn't have mirror picnum\n", j); I_Error("Lower link sector %d doesn't have mirror picnum\n", j);
mirror[mirrorcnt].type = 2; mirror[mirrorcnt].type = 2;
mirror[mirrorcnt].dx = link2->s().x - link->s().x; mirror[mirrorcnt].dx = link2->spr.x - link->spr.x;
mirror[mirrorcnt].dy = link2->s().y - link->s().y; mirror[mirrorcnt].dy = link2->spr.y - link->spr.y;
mirror[mirrorcnt].dz = link2->s().z - link->s().z; mirror[mirrorcnt].dz = link2->spr.z - link->spr.z;
mirror[mirrorcnt].wallnum = i; mirror[mirrorcnt].wallnum = i;
mirror[mirrorcnt].link = j; mirror[mirrorcnt].link = j;
secti->floorpicnum = 4080 + mirrorcnt; secti->floorpicnum = 4080 + mirrorcnt;
@ -135,9 +135,9 @@ void InitMirrors(void)
secti->portalnum = portalAdd(PORTAL_SECTOR_FLOOR, j, mirror[mirrorcnt].dx, mirror[mirrorcnt].dy, mirror[mirrorcnt].dz); secti->portalnum = portalAdd(PORTAL_SECTOR_FLOOR, j, mirror[mirrorcnt].dx, mirror[mirrorcnt].dy, mirror[mirrorcnt].dz);
mirrorcnt++; mirrorcnt++;
mirror[mirrorcnt].type = 1; mirror[mirrorcnt].type = 1;
mirror[mirrorcnt].dx = link->s().x - link2->s().x; mirror[mirrorcnt].dx = link->spr.x - link2->spr.x;
mirror[mirrorcnt].dy = link->s().y - link2->s().y; mirror[mirrorcnt].dy = link->spr.y - link2->spr.y;
mirror[mirrorcnt].dz = link->s().z - link2->s().z; mirror[mirrorcnt].dz = link->spr.z - link2->spr.z;
mirror[mirrorcnt].wallnum = j; mirror[mirrorcnt].wallnum = j;
mirror[mirrorcnt].link = i; mirror[mirrorcnt].link = i;
sectj->ceilingpicnum = 4080 + mirrorcnt; sectj->ceilingpicnum = 4080 + mirrorcnt;

View file

@ -1229,10 +1229,10 @@ void nnExtProcessSuperSprites()
pXSightSpr->isTriggered) continue; // don't process locked or triggered sprites pXSightSpr->isTriggered) continue; // don't process locked or triggered sprites
// sprite is drawn for one of players // sprite is drawn for one of players
if ((pXSightSpr->unused3 & kTriggerSpriteScreen) && (pSight->s().cstat2 & CSTAT2_SPRITE_MAPPED)) if ((pXSightSpr->unused3 & kTriggerSpriteScreen) && (pSight->spr.cstat2 & CSTAT2_SPRITE_MAPPED))
{ {
trTriggerSprite(pSight, kCmdSpriteSight); trTriggerSprite(pSight, kCmdSpriteSight);
pSight->s().cstat2 &= ~CSTAT2_SPRITE_MAPPED; pSight->spr.cstat2 &= ~CSTAT2_SPRITE_MAPPED;
continue; continue;
} }
@ -1821,7 +1821,7 @@ void debrisMove(int listIndex)
if ((pFX = gFX.fxSpawnActor(FX_10, pSprite->sector(), pSprite->x, pSprite->y, floorZ, 0)) == NULL) break; if ((pFX = gFX.fxSpawnActor(FX_10, pSprite->sector(), pSprite->x, pSprite->y, floorZ, 0)) == NULL) break;
for (i = 0; i < 7; i++) for (i = 0; i < 7; i++)
{ {
if ((pFX2 = gFX.fxSpawnActor(FX_14, pFX->s().sector(), pFX->s().x, pFX->s().y, pFX->s().z, 0)) == NULL) continue; if ((pFX2 = gFX.fxSpawnActor(FX_14, pFX->spr.sector(), pFX->spr.x, pFX->spr.y, pFX->spr.z, 0)) == NULL) continue;
pFX2->xvel = Random2(0x6aaaa); pFX2->xvel = Random2(0x6aaaa);
pFX2->yvel = Random2(0x6aaaa); pFX2->yvel = Random2(0x6aaaa);
pFX2->zvel = -(int)Random(0xd5555); pFX2->zvel = -(int)Random(0xd5555);
@ -1870,10 +1870,10 @@ void debrisMove(int listIndex)
else if (floorColl.type == kHitSprite) else if (floorColl.type == kHitSprite)
{ {
if ((floorColl.actor()->s().cstat & CSTAT_SPRITE_ALIGNMENT_MASK) == 0) if ((floorColl.actor()->spr.cstat & CSTAT_SPRITE_ALIGNMENT_MASK) == 0)
{ {
actor->xvel += MulScale(4, pSprite->x - floorColl.actor()->s().x, 2); actor->xvel += MulScale(4, pSprite->x - floorColl.actor()->spr.x, 2);
actor->yvel += MulScale(4, pSprite->y - floorColl.actor()->s().y, 2); actor->yvel += MulScale(4, pSprite->y - floorColl.actor()->spr.y, 2);
return; return;
} }
} }
@ -1902,7 +1902,7 @@ bool ceilIsTooLow(DBloodActor* actor)
{ {
if (actor != nullptr) if (actor != nullptr)
{ {
sectortype* pSector = actor->s().sector(); sectortype* pSector = actor->spr.sector();
int a = pSector->ceilingz - pSector->floorz; int a = pSector->ceilingz - pSector->floorz;
int top, bottom; int top, bottom;
GetActorExtents(actor, &top, &bottom); GetActorExtents(actor, &top, &bottom);
@ -1920,7 +1920,7 @@ bool ceilIsTooLow(DBloodActor* actor)
void aiSetGenIdleState(DBloodActor* actor) void aiSetGenIdleState(DBloodActor* actor)
{ {
switch (actor->s().type) switch (actor->spr.type)
{ {
case kDudeModernCustom: case kDudeModernCustom:
case kDudeModernCustomBurning: case kDudeModernCustomBurning:
@ -2418,7 +2418,7 @@ void trPlayerCtrlUsePackItem(int data2, int data3, int data4, PLAYER* pPlayer, i
void trPlayerCtrlUsePowerup(DBloodActor* sourceactor, PLAYER* pPlayer, int evCmd) void trPlayerCtrlUsePowerup(DBloodActor* sourceactor, PLAYER* pPlayer, int evCmd)
{ {
bool relative = (sourceactor->s().flags & kModernTypeFlag1); bool relative = (sourceactor->spr.flags & kModernTypeFlag1);
int nPower = (kMinAllowedPowerup + sourceactor->x().data2) - 1; int nPower = (kMinAllowedPowerup + sourceactor->x().data2) - 1;
int nTime = ClipRange(abs(sourceactor->x().data3) * 100, -gPowerUpInfo[nPower].maxTime, gPowerUpInfo[nPower].maxTime); int nTime = ClipRange(abs(sourceactor->x().data3) * 100, -gPowerUpInfo[nPower].maxTime, gPowerUpInfo[nPower].maxTime);
@ -2480,7 +2480,7 @@ void useObjResizer(DBloodActor* sourceactor, int targType, sectortype* targSect,
bool fit = false; bool fit = false;
auto pTarget = &targetactor->s(); auto pTarget = &targetactor->s();
// resize by seq scaling // resize by seq scaling
if (sourceactor->s().flags & kModernTypeFlag1) if (sourceactor->spr.flags & kModernTypeFlag1)
{ {
if (valueIsBetween(pXSource->data1, -255, 32767)) if (valueIsBetween(pXSource->data1, -255, 32767))
{ {
@ -3353,7 +3353,7 @@ void useSpriteDamager(DBloodActor* sourceactor, int objType, sectortype* targSec
BloodStatIterator it(kStatDude); BloodStatIterator it(kStatDude);
while (auto iactor = it.Next()) while (auto iactor = it.Next())
{ {
if (iactor->s().statnum != kStatDude) continue; if (iactor->spr.statnum != kStatDude) continue;
switch (pXSource->data1) switch (pXSource->data1)
{ {
case 667: case 667:
@ -3772,7 +3772,7 @@ bool condCheckMixed(DBloodActor* aCond, const EVENT& event, int cmpOp, bool PUSH
case 20: // type in a range? case 20: // type in a range?
if (eob.isWall()) return condCmp(eob.wall()->type, arg1, arg2, cmpOp); if (eob.isWall()) return condCmp(eob.wall()->type, arg1, arg2, cmpOp);
if (eob.isSector()) return condCmp(eob.sector()->type, arg1, arg2, cmpOp); if (eob.isSector()) return condCmp(eob.sector()->type, arg1, arg2, cmpOp);
if (eob.isActor()) return eob.actor() && condCmp(eob.actor()->s().type, arg1, arg2, cmpOp); if (eob.isActor()) return eob.actor() && condCmp(eob.actor()->spr.type, arg1, arg2, cmpOp);
break; break;
case 24: case 24:
case 25: case 26: case 27: case 25: case 26: case 27:
@ -4020,7 +4020,7 @@ bool condCheckSector(DBloodActor* aCond, int cmpOp, bool PUSH)
BloodSectIterator it(pSect); BloodSectIterator it(pSect);
while (auto iactor = it.Next()) while (auto iactor = it.Next())
{ {
if (!condCmp(iactor->s().type, arg1, arg2, cmpOp)) continue; if (!condCmp(iactor->spr.type, arg1, arg2, cmpOp)) continue;
else if (PUSH) condPush(aCond, iactor); else if (PUSH) condPush(aCond, iactor);
return true; return true;
} }
@ -4252,7 +4252,7 @@ bool condCheckDude(DBloodActor* aCond, int cmpOp, bool PUSH)
default: break; default: break;
case 0: // dude have any targets? case 0: // dude have any targets?
if (!targ) return false; if (!targ) return false;
else if (!targ->IsDudeActor() && targ->s().type != kMarkerPath) return false; else if (!targ->IsDudeActor() && targ->spr.type != kMarkerPath) return false;
else if (PUSH) condPush(aCond, targ); else if (PUSH) condPush(aCond, targ);
return true; return true;
case 1: return aiFightDudeIsAffected(objActor); // dude affected by ai fight? case 1: return aiFightDudeIsAffected(objActor); // dude affected by ai fight?
@ -4298,7 +4298,7 @@ bool condCheckDude(DBloodActor* aCond, int cmpOp, bool PUSH)
case 9: return (pXSpr->unused1 & kDudeFlagStealth); case 9: return (pXSpr->unused1 & kDudeFlagStealth);
case 10: // check if the marker is busy with another dude case 10: // check if the marker is busy with another dude
case 11: // check if the marker is reached case 11: // check if the marker is reached
if (!pXSpr->dudeFlag4 || !targ || targ->s().type != kMarkerPath) return false; if (!pXSpr->dudeFlag4 || !targ || targ->spr.type != kMarkerPath) return false;
switch (cond) { switch (cond) {
case 10: case 10:
{ {
@ -4314,7 +4314,7 @@ bool condCheckDude(DBloodActor* aCond, int cmpOp, bool PUSH)
} }
return true; return true;
case 12: // compare spot progress value in % case 12: // compare spot progress value in %
if (!pXSpr->dudeFlag4 || !targ || targ->s().type != kMarkerPath) var = 0; if (!pXSpr->dudeFlag4 || !targ || targ->spr.type != kMarkerPath) var = 0;
else if (!(pXSpr->unused1 & kDudeFlagStealth) || pXSpr->data3 < 0 || pXSpr->data3 > kMaxPatrolSpotValue) var = 0; else if (!(pXSpr->unused1 & kDudeFlagStealth) || pXSpr->data3 < 0 || pXSpr->data3 > kMaxPatrolSpotValue) var = 0;
else var = (kPercFull * pXSpr->data3) / kMaxPatrolSpotValue; else var = (kPercFull * pXSpr->data3) / kMaxPatrolSpotValue;
return condCmp(var, arg1, arg2, cmpOp); return condCmp(var, arg1, arg2, cmpOp);
@ -4556,7 +4556,7 @@ bool condCheckSprite(DBloodActor* aCond, int cmpOp, bool PUSH)
BloodSpriteIterator it; BloodSpriteIterator it;
while (auto iactor = it.Next()) while (auto iactor = it.Next())
{ {
if (iactor->s().flags & kHitagRespawn) continue; if (iactor->spr.flags & kHitagRespawn) continue;
auto& hit = iactor->hit; auto& hit = iactor->hit;
switch (arg3) switch (arg3)
{ {
@ -4591,7 +4591,7 @@ bool condCheckSprite(DBloodActor* aCond, int cmpOp, bool PUSH)
BloodStatIterator it(kStatFlare); BloodStatIterator it(kStatFlare);
while (auto flareactor = it.Next()) while (auto flareactor = it.Next())
{ {
if (!flareactor->hasX() || (flareactor->s().flags & kHitagFree)) if (!flareactor->hasX() || (flareactor->spr.flags & kHitagFree))
continue; continue;
if (flareactor->GetTarget() != objActor) continue; if (flareactor->GetTarget() != objActor) continue;
@ -5034,7 +5034,7 @@ void aiFightFreeTargets(DBloodActor* actor)
{ {
if (!targetactor->IsDudeActor() || !targetactor->hasX()) continue; if (!targetactor->IsDudeActor() || !targetactor->hasX()) continue;
else if (targetactor->GetTarget() == actor) else if (targetactor->GetTarget() == actor)
aiSetTarget(targetactor, targetactor->s().x, targetactor->s().y, targetactor->s().z); aiSetTarget(targetactor, targetactor->spr.x, targetactor->spr.y, targetactor->spr.z);
} }
} }
@ -5159,13 +5159,13 @@ void aiFightAlarmDudesInSight(DBloodActor* actor, int max)
bool aiFightUnitCanFly(DBloodActor* dude) bool aiFightUnitCanFly(DBloodActor* dude)
{ {
return (dude->IsDudeActor() && gDudeInfoExtra[dude->s().type - kDudeBase].flying); return (dude->IsDudeActor() && gDudeInfoExtra[dude->spr.type - kDudeBase].flying);
} }
bool aiFightIsMeleeUnit(DBloodActor* dude) bool aiFightIsMeleeUnit(DBloodActor* dude)
{ {
if (dude->s().type == kDudeModernCustom) return (dude->hasX() && dudeIsMelee(dude)); if (dude->spr.type == kDudeModernCustom) return (dude->hasX() && dudeIsMelee(dude));
else return (dude->IsDudeActor() && gDudeInfoExtra[dude->s().type - kDudeBase].melee); else return (dude->IsDudeActor() && gDudeInfoExtra[dude->spr.type - kDudeBase].melee);
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@ -5176,8 +5176,8 @@ bool aiFightIsMeleeUnit(DBloodActor* dude)
int aiFightGetTargetDist(DBloodActor* actor, DUDEINFO* pDudeInfo, DBloodActor* target) int aiFightGetTargetDist(DBloodActor* actor, DUDEINFO* pDudeInfo, DBloodActor* target)
{ {
int dx = target->s().x - actor->s().x; int dx = target->spr.x - actor->spr.x;
int dy = target->s().y - actor->s().y; int dy = target->spr.y - actor->spr.y;
int dist = approxDist(dx, dy); int dist = approxDist(dx, dy);
if (dist <= pDudeInfo->meleeDist) return 0; if (dist <= pDudeInfo->meleeDist) return 0;
@ -5204,8 +5204,8 @@ int aiFightGetTargetDist(DBloodActor* actor, DUDEINFO* pDudeInfo, DBloodActor* t
int aiFightGetFineTargetDist(DBloodActor* actor, DBloodActor* target) int aiFightGetFineTargetDist(DBloodActor* actor, DBloodActor* target)
{ {
int dx = target->s().x - actor->s().x; int dx = target->spr.x - actor->spr.x;
int dy = target->s().y - actor->s().y; int dy = target->spr.y - actor->spr.y;
int dist = approxDist(dx, dy); int dist = approxDist(dx, dy);
return dist; return dist;
@ -5222,7 +5222,7 @@ void sectorKillSounds(sectortype* pSector)
BloodSectIterator it(pSector); BloodSectIterator it(pSector);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
if (actor->s().type != kSoundSector) continue; if (actor->spr.type != kSoundSector) continue;
sfxKill3DSound(actor); sfxKill3DSound(actor);
} }
} }
@ -5409,13 +5409,13 @@ bool modernTypeOperateSector(sectortype* pSector, const EVENT& event)
void useCustomDudeSpawn(DBloodActor* pSource, DBloodActor* pSprite) void useCustomDudeSpawn(DBloodActor* pSource, DBloodActor* pSprite)
{ {
genDudeSpawn(pSource, pSprite, pSprite->s().clipdist << 1); genDudeSpawn(pSource, pSprite, pSprite->spr.clipdist << 1);
} }
void useDudeSpawn(DBloodActor* pSource, DBloodActor* pSprite) void useDudeSpawn(DBloodActor* pSource, DBloodActor* pSprite)
{ {
if (randomSpawnDude(pSource, pSprite, pSprite->s().clipdist << 1, 0) == nullptr) if (randomSpawnDude(pSource, pSprite, pSprite->spr.clipdist << 1, 0) == nullptr)
nnExtSpawnDude(pSource, pSprite, pSource->x().data1, pSprite->s().clipdist << 1, 0); nnExtSpawnDude(pSource, pSprite, pSource->x().data1, pSprite->spr.clipdist << 1, 0);
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@ -6140,7 +6140,7 @@ int useCondition(DBloodActor* sourceactor, EVENT& event)
if (event.isActor() && pActor == nullptr) return -1; if (event.isActor() && pActor == nullptr) return -1;
if (event.isActor() && pActor != sourceactor) if (event.isActor() && pActor != sourceactor)
srcIsCondition = (pActor->s().type == kModernCondition || pActor->s().type == kModernConditionFalse); srcIsCondition = (pActor->spr.type == kModernCondition || pActor->spr.type == kModernConditionFalse);
// if it's a tracking condition, it must ignore all the commands sent from objects // if it's a tracking condition, it must ignore all the commands sent from objects
if (pXSource->busyTime > 0 && event.funcID != kCallbackMax) return -1; if (pXSource->busyTime > 0 && event.funcID != kCallbackMax) return -1;
@ -6894,7 +6894,7 @@ void useTargetChanger(DBloodActor* sourceactor, DBloodActor* actor)
// Make prev target not aim in dude // Make prev target not aim in dude
if (targetactor) if (targetactor)
{ {
aiSetTarget(targetactor, targetactor->s().x, targetactor->s().y, targetactor->s().z); aiSetTarget(targetactor, targetactor->spr.x, targetactor->spr.y, targetactor->spr.z);
if (!isActive(newtargactor)) if (!isActive(newtargactor))
aiActivateDude(newtargactor); aiActivateDude(newtargactor);
} }
@ -7028,13 +7028,13 @@ void usePictureChanger(DBloodActor* sourceactor, int objType, sectortype* targSe
break; break;
case OBJ_SPRITE: case OBJ_SPRITE:
if (valueIsBetween(pXSource->data1, -1, 32767)) if (valueIsBetween(pXSource->data1, -1, 32767))
objActor->s().picnum = pXSource->data1; objActor->spr.picnum = pXSource->data1;
if (pXSource->data2 >= 0) objActor->s().shade = (pXSource->data2 > 127) ? 127 : pXSource->data2; if (pXSource->data2 >= 0) objActor->spr.shade = (pXSource->data2 > 127) ? 127 : pXSource->data2;
else if (pXSource->data2 < -1) objActor->s().shade = (pXSource->data2 < -127) ? -127 : pXSource->data2; else if (pXSource->data2 < -1) objActor->spr.shade = (pXSource->data2 < -127) ? -127 : pXSource->data2;
if (valueIsBetween(pXSource->data3, -1, 32767)) if (valueIsBetween(pXSource->data3, -1, 32767))
objActor->s().pal = uint8_t(pXSource->data3); objActor->spr.pal = uint8_t(pXSource->data3);
break; break;
case OBJ_WALL: case OBJ_WALL:
if (valueIsBetween(pXSource->data1, -1, 32767)) if (valueIsBetween(pXSource->data1, -1, 32767))
@ -7262,7 +7262,7 @@ PLAYER* getPlayerById(int id)
bool IsBurningDude(DBloodActor* actor) bool IsBurningDude(DBloodActor* actor)
{ {
if (actor == NULL) return false; if (actor == NULL) return false;
switch (actor->s().type) switch (actor->spr.type)
{ {
case kDudeBurningInnocent: case kDudeBurningInnocent:
case kDudeBurningCultist: case kDudeBurningCultist:
@ -7279,7 +7279,7 @@ bool IsBurningDude(DBloodActor* actor)
bool IsKillableDude(DBloodActor* actor) bool IsKillableDude(DBloodActor* actor)
{ {
switch (actor->s().type) switch (actor->spr.type)
{ {
case kDudeGargoyleStatueFlesh: case kDudeGargoyleStatueFlesh:
case kDudeGargoyleStatueStone: case kDudeGargoyleStatueStone:
@ -7292,14 +7292,14 @@ bool IsKillableDude(DBloodActor* actor)
bool isGrown(DBloodActor* actor) bool isGrown(DBloodActor* actor)
{ {
if (powerupCheck(&gPlayer[actor->s().type - kDudePlayer1], kPwUpGrowShroom) > 0) return true; if (powerupCheck(&gPlayer[actor->spr.type - kDudePlayer1], kPwUpGrowShroom) > 0) return true;
else if (actor->hasX() && actor->x().scale >= 512) return true; else if (actor->hasX() && actor->x().scale >= 512) return true;
else return false; else return false;
} }
bool isShrinked(DBloodActor* actor) bool isShrinked(DBloodActor* actor)
{ {
if (powerupCheck(&gPlayer[actor->s().type - kDudePlayer1], kPwUpShrinkShroom) > 0) return true; if (powerupCheck(&gPlayer[actor->spr.type - kDudePlayer1], kPwUpShrinkShroom) > 0) return true;
else if (actor->hasX() && actor->x().scale > 0 && actor->x().scale <= 128) return true; else if (actor->hasX() && actor->x().scale > 0 && actor->x().scale <= 128) return true;
else return false; else return false;
} }
@ -7342,7 +7342,7 @@ int getDataFieldOfObject(EventObject &eob, int dataIndex)
case 1: return actor->x().data1; case 1: return actor->x().data1;
case 2: return actor->x().data2; case 2: return actor->x().data2;
case 3: case 3:
switch (actor->s().type) switch (actor->spr.type)
{ {
case kDudeModernCustom: return actor->x().sysData1; case kDudeModernCustom: return actor->x().sysData1;
default: return actor->x().data3; default: return actor->x().data3;
@ -7374,7 +7374,7 @@ int getDataFieldOfObject(int objType, sectortype* sect, walltype* wal, DBloodAct
case 1: return actor->x().data1; case 1: return actor->x().data1;
case 2: return actor->x().data2; case 2: return actor->x().data2;
case 3: case 3:
switch (actor->s().type) switch (actor->spr.type)
{ {
case kDudeModernCustom: return actor->x().sysData1; case kDudeModernCustom: return actor->x().sysData1;
default: return actor->x().data3; default: return actor->x().data3;
@ -7401,7 +7401,7 @@ bool setDataValueOfObject(int objType, sectortype* sect, walltype* wal, DBloodAc
case OBJ_SPRITE: case OBJ_SPRITE:
{ {
XSPRITE* pXSprite = &objActor->x(); XSPRITE* pXSprite = &objActor->x();
int type = objActor->s().type; int type = objActor->spr.type;
// exceptions // exceptions
if (objActor->IsDudeActor() && pXSprite->health <= 0) return true; if (objActor->IsDudeActor() && pXSprite->health <= 0) return true;
@ -7668,7 +7668,7 @@ DBloodActor* aiPatrolMarkerBusy(DBloodActor* except, DBloodActor* marker)
continue; continue;
auto targ = actor->GetTarget(); auto targ = actor->GetTarget();
if (actor->x().health > 0 && targ != nullptr && targ->s().type == kMarkerPath && targ == marker) if (actor->x().health > 0 && targ != nullptr && targ->spr.type == kMarkerPath && targ == marker)
return actor; return actor;
} }
return nullptr; return nullptr;
@ -7687,7 +7687,7 @@ bool aiPatrolMarkerReached(DBloodActor* actor)
const DUDEINFO_EXTRA* pExtra = &gDudeInfoExtra[pSprite->type - kDudeBase]; const DUDEINFO_EXTRA* pExtra = &gDudeInfoExtra[pSprite->type - kDudeBase];
auto markeractor = actor->GetTarget(); auto markeractor = actor->GetTarget();
if (markeractor && markeractor->s().type == kMarkerPath) if (markeractor && markeractor->spr.type == kMarkerPath)
{ {
spritetype* pMarker = &markeractor->s(); spritetype* pMarker = &markeractor->s();
int okDist = ClipLow(pMarker->clipdist << 1, 4); int okDist = ClipLow(pMarker->clipdist << 1, 4);
@ -7806,7 +7806,7 @@ void aiPatrolSetMarker(DBloodActor* actor)
} }
} }
// set next marker // set next marker
else if (targetactor->s().type == kMarkerPath && targetactor->hasX()) else if (targetactor->spr.type == kMarkerPath && targetactor->hasX())
{ {
// idea: which one of next (allowed) markers are closer to the potential target? // idea: which one of next (allowed) markers are closer to the potential target?
// idea: -3 select random next marker that dude can see in radius of reached marker // idea: -3 select random next marker that dude can see in radius of reached marker
@ -7898,9 +7898,9 @@ void aiPatrolStop(DBloodActor* actor, DBloodActor* targetactor, bool alarm)
auto mytarget = actor->GetTarget(); auto mytarget = actor->GetTarget();
if (mytarget && mytarget->s().type == kMarkerPath) if (mytarget && mytarget->spr.type == kMarkerPath)
{ {
if (targetactor == nullptr) pSprite->ang = mytarget->s().ang & 2047; if (targetactor == nullptr) pSprite->ang = mytarget->spr.ang & 2047;
actor->SetTarget(nullptr); actor->SetTarget(nullptr);
} }
@ -7946,7 +7946,7 @@ void aiPatrolRandGoalAng(DBloodActor* actor)
if (Chance(0x8000)) if (Chance(0x8000))
goal = -goal; goal = -goal;
actor->x().goalAng = (actor->s().ang + goal) & 2047; actor->x().goalAng = (actor->spr.ang + goal) & 2047;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@ -8301,15 +8301,15 @@ DBloodActor* aiPatrolSearchTargets(DBloodActor* actor)
{ {
auto emitterActor = (DBloodActor*)chan->Source; auto emitterActor = (DBloodActor*)chan->Source;
if (emitterActor == nullptr) return false; // not a valid source. if (emitterActor == nullptr) return false; // not a valid source.
sndx = emitterActor->s().x; sndx = emitterActor->spr.x;
sndy = emitterActor->s().y; sndy = emitterActor->spr.y;
// sound attached to the sprite // sound attached to the sprite
if (pPlayer->actor != emitterActor && emitterActor->GetOwner() != actor) if (pPlayer->actor != emitterActor && emitterActor->GetOwner() != actor)
{ {
if (!emitterActor->s().insector()) return false; if (!emitterActor->spr.insector()) return false;
searchsect = emitterActor->s().sector(); searchsect = emitterActor->spr.sector();
} }
} }
else if (chan->SourceType == SOURCE_Unattached) else if (chan->SourceType == SOURCE_Unattached)
@ -8875,7 +8875,7 @@ DBloodActor* evrIsRedirector(DBloodActor* actor)
{ {
if (actor) if (actor)
{ {
switch (actor->s().type) switch (actor->spr.type)
{ {
case kModernRandomTX: case kModernRandomTX:
case kModernSequentialTX: case kModernSequentialTX:
@ -8999,7 +8999,7 @@ void seqSpawnerOffSameTx(DBloodActor* actor)
BloodSpriteIterator it; BloodSpriteIterator it;
while (auto iactor = it.Next()) while (auto iactor = it.Next())
{ {
if (iactor->s().type != kModernSeqSpawner || !iactor->hasX() || iactor == actor) continue; if (iactor->spr.type != kModernSeqSpawner || !iactor->hasX() || iactor == actor) continue;
XSPRITE* pXSprite = &iactor->x(); XSPRITE* pXSprite = &iactor->x();
if (pXSprite->txID == pXSource->txID && pXSprite->state == 1) if (pXSprite->txID == pXSource->txID && pXSprite->state == 1)
{ {
@ -9091,8 +9091,8 @@ void callbackUniMissileBurst(DBloodActor* actor, sectortype*) // 22
void callbackMakeMissileBlocking(DBloodActor* actor, sectortype*) // 23 void callbackMakeMissileBlocking(DBloodActor* actor, sectortype*) // 23
{ {
if (!actor || actor->s().statnum != kStatProjectile) return; if (!actor || actor->spr.statnum != kStatProjectile) return;
actor->s().cstat |= CSTAT_SPRITE_BLOCK; actor->spr.cstat |= CSTAT_SPRITE_BLOCK;
} }
void callbackGenDudeUpdate(DBloodActor* actor, sectortype*) // 24 void callbackGenDudeUpdate(DBloodActor* actor, sectortype*) // 24

View file

@ -671,7 +671,7 @@ void playerStart(int nPlayer, int bNewLevel)
playerResetPosture(pPlayer); playerResetPosture(pPlayer);
seqSpawn(pDudeInfo->seqStartID, actor, -1); seqSpawn(pDudeInfo->seqStartID, actor, -1);
if (pPlayer == gMe) if (pPlayer == gMe)
actor->s().cstat2 |= CSTAT2_SPRITE_MAPPED; actor->spr.cstat2 |= CSTAT2_SPRITE_MAPPED;
int top, bottom; int top, bottom;
GetSpriteExtents(pSprite, &top, &bottom); GetSpriteExtents(pSprite, &top, &bottom);
pSprite->z -= bottom - pSprite->z; pSprite->z -= bottom - pSprite->z;
@ -1377,7 +1377,7 @@ void ProcessInput(PLAYER *pPlayer)
DBloodActor* fragger = pPlayer->fragger; DBloodActor* fragger = pPlayer->fragger;
if (fragger) if (fragger)
{ {
pPlayer->angle.addadjustment(getincanglebam(pPlayer->angle.ang, bvectangbam(fragger->s().x - pSprite->x, fragger->s().y - pSprite->y))); pPlayer->angle.addadjustment(getincanglebam(pPlayer->angle.ang, bvectangbam(fragger->spr.x - pSprite->x, fragger->spr.y - pSprite->y)));
} }
pPlayer->deathTime += 4; pPlayer->deathTime += 4;
if (!bSeqStat) if (!bSeqStat)
@ -1753,7 +1753,7 @@ void playerProcess(PLAYER *pPlayer)
{ {
pPlayer->isUnderwater = 1; pPlayer->isUnderwater = 1;
auto link = pSprite->sector()->lowerLink; auto link = pSprite->sector()->lowerLink;
if (link && (link->s().type == kMarkerLowGoo || link->s().type == kMarkerLowWater)) if (link && (link->spr.type == kMarkerLowGoo || link->spr.type == kMarkerLowWater))
{ {
if (getceilzofslopeptr(pSprite->sector(), pSprite->x, pSprite->y) > pPlayer->zView) if (getceilzofslopeptr(pSprite->sector(), pSprite->x, pSprite->y) > pPlayer->zView)
pPlayer->isUnderwater = 0; pPlayer->isUnderwater = 0;
@ -1859,7 +1859,7 @@ void FragPlayer(PLAYER *pPlayer, DBloodActor* killer)
{ {
if (killer && killer->IsPlayerActor()) if (killer && killer->IsPlayerActor())
{ {
PLAYER *pKiller = &gPlayer[killer->s().type - kDudePlayer1]; PLAYER *pKiller = &gPlayer[killer->spr.type - kDudePlayer1];
playerFrag(pKiller, pPlayer); playerFrag(pKiller, pPlayer);
int nTeam1 = pKiller->teamId&1; int nTeam1 = pKiller->teamId&1;
int nTeam2 = pPlayer->teamId&1; int nTeam2 = pPlayer->teamId&1;

View file

@ -348,7 +348,7 @@ void fakePlayerProcess(PLAYER *pPlayer, InputPacket *pInput)
predict.at72 = 1; predict.at72 = 1;
int nSector = predict.sector; int nSector = predict.sector;
auto nLink = getLowerLink(nSector); auto nLink = getLowerLink(nSector);
if (nLink && (nLink->s().type == kMarkerLowGoo || nLink->s().type == kMarkerLowWater)) if (nLink && (nLink->spr.type == kMarkerLowGoo || nLink->spr.type == kMarkerLowWater))
{ {
if (getceilzofslope(nSector, predict.x, predict.y) > predict.viewz) if (getceilzofslope(nSector, predict.x, predict.y) > predict.viewz)
predict.at72 = 0; predict.at72 = 0;
@ -438,9 +438,9 @@ static void fakeMoveDude(spritetype *pSprite)
} }
auto nUpperLink = getUpperLink(nSector); auto nUpperLink = getUpperLink(nSector);
auto nLowerLink = getLowerLink(nSector); auto nLowerLink = getLowerLink(nSector);
if (nUpperLink >= 0 && (nUpperLink->s().type == kMarkerUpWater || nUpperLink->s().type == kMarkerUpGoo)) if (nUpperLink >= 0 && (nUpperLink->spr.type == kMarkerUpWater || nUpperLink->spr.type == kMarkerUpGoo))
bDepth = 1; bDepth = 1;
if (nLowerLink >= 0 && (nLowerLink->s().type == kMarkerLowWater || nLowerLink->s().type == kMarkerLowGoo)) if (nLowerLink >= 0 && (nLowerLink->spr.type == kMarkerLowWater || nLowerLink->spr.type == kMarkerLowGoo))
bDepth = 1; bDepth = 1;
if (pPlayer) if (pPlayer)
wd += 16; wd += 16;
@ -548,10 +548,10 @@ static void fakeMoveDude(spritetype *pSprite)
if (floorColl.type == kHitSprite) if (floorColl.type == kHitSprite)
{ {
auto hitactor = floorColl.actor; auto hitactor = floorColl.actor;
if ((hitactor->s().cstat & 0x30) == 0) if ((hitactor->spr.cstat & 0x30) == 0)
{ {
predict.xvel += MulScale(4, predict.x - hitactor->s().x, 2); predict.xvel += MulScale(4, predict.x - hitactor->spr.x, 2);
predict.yvel += MulScale(4, predict.y - hitactor->s().y, 2); predict.yvel += MulScale(4, predict.y - hitactor->spr.y, 2);
return; return;
} }
} }

View file

@ -705,7 +705,7 @@ void seqProcess(int nTicks)
if (actor) if (actor)
{ {
evKillActor(actor); evKillActor(actor);
if ((actor->s().hitag & kAttrRespawn) != 0 && (actor->s().inittype >= kDudeBase && actor->s().inittype < kDudeMax)) if ((actor->spr.hitag & kAttrRespawn) != 0 && (actor->spr.inittype >= kDudeBase && actor->spr.inittype < kDudeMax))
evPostActor(actor, gGameOptions.nMonsterRespawnTime, kCallbackRespawn); evPostActor(actor, gGameOptions.nMonsterRespawnTime, kCallbackRespawn);
else DeleteSprite(actor); // safe to not use actPostSprite here else DeleteSprite(actor); // safe to not use actPostSprite here
} }

View file

@ -93,7 +93,7 @@ void BloodSoundEngine::CalcPosVel(int type, const void* source, const float pt[3
// Engine expects velocity in units per second, not units per tic. // Engine expects velocity in units per second, not units per tic.
if (vel) *vel = { actor->xvel * (30 / 65536.f), actor->zvel * (-30 / 65536.f), actor->yvel * (-30 / 65536.f) }; if (vel) *vel = { actor->xvel * (30 / 65536.f), actor->zvel * (-30 / 65536.f), actor->yvel * (-30 / 65536.f) };
*pos = GetSoundPos(&actor->s().pos); *pos = GetSoundPos(&actor->spr.pos);
} }
else if (type == SOURCE_Ambient) else if (type == SOURCE_Ambient)
{ {
@ -174,7 +174,7 @@ void sfxPlay3DSoundCP(DBloodActor* pActor, int soundId, int playchannel, int pla
auto sid = soundEngine->FindSoundByResID(soundId); auto sid = soundEngine->FindSoundByResID(soundId);
if (sid == 0) return; if (sid == 0) return;
auto svec = GetSoundPos(&pActor->s().pos); auto svec = GetSoundPos(&pActor->spr.pos);
float attenuation; float attenuation;
sid = getSfx(sid, attenuation, pitch, volume); sid = getSfx(sid, attenuation, pitch, volume);

View file

@ -86,7 +86,7 @@ int tileGetSurfType(CollisionBase& hit)
case kHitWall: case kHitWall:
return surfType[hit.hitWall->picnum]; return surfType[hit.hitWall->picnum];
case kHitSprite: case kHitSprite:
return surfType[hit.hitActor->s().picnum]; return surfType[hit.hitActor->spr.picnum];
} }
} }

View file

@ -251,7 +251,7 @@ void LifeLeechOperate(DBloodActor* actor, EVENT event)
evPostActor(actor, t2, kCallbackLeechStateTimer); evPostActor(actor, t2, kCallbackLeechStateTimer);
pXSprite->data3 = ClipLow(pXSprite->data3-1, 0); pXSprite->data3 = ClipLow(pXSprite->data3-1, 0);
if (!VanillaMode()) // disable collisions so lifeleech doesn't do that weird bobbing if (!VanillaMode()) // disable collisions so lifeleech doesn't do that weird bobbing
missile->s().cstat &= ~CSTAT_SPRITE_BLOCK_ALL; missile->spr.cstat &= ~CSTAT_SPRITE_BLOCK_ALL;
} }
pSprite->ang = angBak; pSprite->ang = angBak;
} }
@ -2025,7 +2025,7 @@ void trInit(TArray<DBloodActor*>& actors)
BloodSectIterator it(pSector); BloodSectIterator it(pSector);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
actor->basePoint = actor->s().pos; actor->basePoint = actor->spr.pos;
} }
TranslateSector(pSector, 0, pXSector->busy, pSprite1->x, pSprite1->y, pSprite1->x, pSprite1->y, pSprite1->ang, pSprite2->x, pSprite2->y, pSprite2->ang, pSector->type == kSectorSlide); TranslateSector(pSector, 0, pXSector->busy, pSprite1->x, pSprite1->y, pSprite1->x, pSprite1->y, pSprite1->ang, pSprite2->x, pSprite2->y, pSprite2->ang, pSector->type == kSectorSlide);
ZTranslateSector(pSector, pXSector, pXSector->busy, 1); ZTranslateSector(pSector, pXSector, pXSector->busy, 1);
@ -2044,7 +2044,7 @@ void trInit(TArray<DBloodActor*>& actors)
BloodSectIterator it(pSector); BloodSectIterator it(pSector);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
actor->basePoint = actor->s().pos; actor->basePoint = actor->spr.pos;
} }
TranslateSector(pSector, 0, pXSector->busy, pSprite1->x, pSprite1->y, pSprite1->x, pSprite1->y, 0, pSprite1->x, pSprite1->y, pSprite1->ang, pSector->type == kSectorRotate); TranslateSector(pSector, 0, pXSector->busy, pSprite1->x, pSprite1->y, pSprite1->x, pSprite1->y, 0, pSprite1->x, pSprite1->y, pSprite1->ang, pSector->type == kSectorRotate);
ZTranslateSector(pSector, pXSector, pXSector->busy, 1); ZTranslateSector(pSector, pXSector, pXSector->busy, 1);

View file

@ -621,7 +621,7 @@ void viewDrawScreen(bool sceneonly)
BloodStatIterator it(kStatExplosion); BloodStatIterator it(kStatExplosion);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
if (actor->hasX() && gotsector[actor->s().sectno()]) if (actor->hasX() && gotsector[actor->spr.sectno()])
{ {
brightness += actor->x().data3 * 32; brightness += actor->x().data3 * 32;
} }

View file

@ -175,7 +175,7 @@ inline void viewBackupSpriteLoc(DBloodActor* actor)
{ {
if (!actor->interpolated) if (!actor->interpolated)
{ {
actor->s().backuploc(); actor->spr.backuploc();
actor->interpolated = true; actor->interpolated = true;
} }
} }

View file

@ -1713,7 +1713,7 @@ void FireLifeLeech(int nTrigger, PLAYER *pPlayer)
if (missileActor) if (missileActor)
{ {
missileActor->SetTarget(pPlayer->aimTarget); missileActor->SetTarget(pPlayer->aimTarget);
missileActor->s().ang = (nTrigger==2) ? 1024 : 0; missileActor->spr.ang = (nTrigger==2) ? 1024 : 0;
} }
if (checkAmmo2(pPlayer, 8, 1)) if (checkAmmo2(pPlayer, 8, 1))
UseAmmo(pPlayer, 8, 1); UseAmmo(pPlayer, 8, 1);
@ -2462,7 +2462,7 @@ void WeaponProcess(PLAYER *pPlayer) {
{ {
} }
pPlayer->voodooTarget = pPlayer->aimTarget; pPlayer->voodooTarget = pPlayer->aimTarget;
if (pPlayer->voodooTarget == nullptr || pPlayer->voodooTarget->s().statnum != kStatDude) if (pPlayer->voodooTarget == nullptr || pPlayer->voodooTarget->spr.statnum != kStatDude)
i = 4; i = 4;
StartQAV(pPlayer,kQAVVDFIRE1 + i, nClientFireVoodoo); StartQAV(pPlayer,kQAVVDFIRE1 + i, nClientFireVoodoo);
return; return;
@ -2672,7 +2672,7 @@ void teslaHit(DBloodActor *missileactor, int a2)
bool v4 = true; bool v4 = true;
DBloodActor* actor = nullptr; DBloodActor* actor = nullptr;
actHitcodeToData(a2, &gHitInfo, &actor); actHitcodeToData(a2, &gHitInfo, &actor);
if (a2 == 3 && actor && actor->s().statnum == kStatDude) if (a2 == 3 && actor && actor->spr.statnum == kStatDude)
v4 = false; v4 = false;
BloodStatIterator it(kStatDude); BloodStatIterator it(kStatDude);
while (auto hitactor = it.Next()) while (auto hitactor = it.Next())

View file

@ -188,7 +188,7 @@ void AIAnubis::Tick(RunListEvent* ev)
{ {
if (move.actor() == pTarget) if (move.actor() == pTarget)
{ {
int nAng = getangle(pTarget->s().x - sp->x, pTarget->s().y - sp->y); int nAng = getangle(pTarget->spr.x - sp->x, pTarget->spr.y - sp->y);
int nAngDiff = AngleDiff(sp->ang, nAng); int nAngDiff = AngleDiff(sp->ang, nAng);
if (nAngDiff < 64) if (nAngDiff < 64)
@ -222,11 +222,11 @@ void AIAnubis::Tick(RunListEvent* ev)
if (pTarget != nullptr) // NOTE: nTarget can be -1. this check wasn't in original code. TODO: demo compatiblity? if (pTarget != nullptr) // NOTE: nTarget can be -1. this check wasn't in original code. TODO: demo compatiblity?
{ {
if (cansee(sp->x, sp->y, sp->z - GetActorHeight(ap), sp->sector(), if (cansee(sp->x, sp->y, sp->z - GetActorHeight(ap), sp->sector(),
pTarget->s().x, pTarget->s().y, pTarget->s().z - GetActorHeight(pTarget), pTarget->s().sector())) pTarget->spr.x, pTarget->spr.y, pTarget->spr.z - GetActorHeight(pTarget), pTarget->spr.sector()))
{ {
sp->xvel = 0; sp->xvel = 0;
sp->yvel = 0; sp->yvel = 0;
sp->ang = GetMyAngle(pTarget->s().x - sp->x, pTarget->s().y - sp->y); sp->ang = GetMyAngle(pTarget->spr.x - sp->x, pTarget->spr.y - sp->y);
ap->nAction = 3; ap->nAction = 3;
ap->nFrame = 0; ap->nFrame = 0;
@ -336,7 +336,7 @@ void AIAnubis::Tick(RunListEvent* ev)
// loc_2564C: // loc_2564C:
if (nAction && pTarget != nullptr) if (nAction && pTarget != nullptr)
{ {
if (!(pTarget->s().cstat & CSTAT_SPRITE_BLOCK_ALL)) if (!(pTarget->spr.cstat & CSTAT_SPRITE_BLOCK_ALL))
{ {
ap->nAction = 0; ap->nAction = 0;
ap->nFrame = 0; ap->nFrame = 0;

View file

@ -152,6 +152,6 @@ void DoBubbles(int nPlayer)
WheresMyMouth(nPlayer, &pos, &pSector); WheresMyMouth(nPlayer, &pos, &pSector);
auto pActor = BuildBubble(pos, pSector); auto pActor = BuildBubble(pos, pSector);
pActor->s().hitag = nPlayer; pActor->spr.hitag = nPlayer;
} }
END_PS_NS END_PS_NS

View file

@ -175,11 +175,11 @@ void IgniteSprite(DExhumedActor* pActor)
pAnimActor->pTarget = pActor; pAnimActor->pTarget = pActor;
ChangeActorStat(pAnimActor, kStatIgnited); ChangeActorStat(pAnimActor, kStatIgnited);
int yRepeat = (tileHeight(pAnimActor->s().picnum) * 32) / nFlameHeight; int yRepeat = (tileHeight(pAnimActor->spr.picnum) * 32) / nFlameHeight;
if (yRepeat < 1) if (yRepeat < 1)
yRepeat = 1; yRepeat = 1;
pAnimActor->s().yrepeat = (uint8_t)yRepeat; pAnimActor->spr.yrepeat = (uint8_t)yRepeat;
} }
} }
@ -336,7 +336,7 @@ int MoveBullet(int nBullet)
DExhumedActor* pEnemyActor = BulletList[nBullet].pEnemy; DExhumedActor* pEnemyActor = BulletList[nBullet].pEnemy;
if (pEnemyActor) if (pEnemyActor)
{ {
if (!(pEnemyActor->s().cstat & CSTAT_SPRITE_BLOCK_ALL)) if (!(pEnemyActor->spr.cstat & CSTAT_SPRITE_BLOCK_ALL))
BulletList[nBullet].pEnemy = nullptr; BulletList[nBullet].pEnemy = nullptr;
else else
{ {
@ -599,7 +599,7 @@ DExhumedActor* BuildBullet(DExhumedActor* pActor, int nType, int nZOffset, int n
sBullet.nDoubleDamage = nDoubleDamage; sBullet.nDoubleDamage = nDoubleDamage;
sBullet.pActor = insertActor(pSprite->sector(), 200); sBullet.pActor = insertActor(pSprite->sector(), 200);
sBullet.pActor->s().ang = nAngle; sBullet.pActor->spr.ang = nAngle;
int nHeight = GetActorHeight(pTarget); int nHeight = GetActorHeight(pTarget);

View file

@ -269,7 +269,7 @@ void GameMove(void)
ExhumedSpriteIterator it; ExhumedSpriteIterator it;
while (auto ac = it.Next()) while (auto ac = it.Next())
{ {
ac->s().backuploc(); ac->spr.backuploc();
} }
if (currentLevel->gameflags & LEVEL_EX_COUNTDOWN) if (currentLevel->gameflags & LEVEL_EX_COUNTDOWN)

View file

@ -307,7 +307,7 @@ void AIFish::Damage(RunListEvent* ev)
else else
{ {
auto pTarget = ev->pOtherActor; auto pTarget = ev->pOtherActor;
if (pTarget && pTarget->s().statnum < 199) if (pTarget && pTarget->spr.statnum < 199)
{ {
pActor->pTarget = pTarget; pActor->pTarget = pTarget;
} }
@ -361,7 +361,7 @@ void AIFish::Tick(RunListEvent* ev)
pActor->nAction = 2; pActor->nAction = 2;
pActor->nFrame = 0; pActor->nFrame = 0;
int nAngle = GetMyAngle(pTargetActor->s().x - pSprite->x, pTargetActor->s().z - pSprite->z); int nAngle = GetMyAngle(pTargetActor->spr.x - pSprite->x, pTargetActor->spr.z - pSprite->z);
pSprite->zvel = bsin(nAngle, -5); pSprite->zvel = bsin(nAngle, -5);
pActor->nCount = RandomSize(6) + 90; pActor->nCount = RandomSize(6) + 90;
@ -392,7 +392,7 @@ void AIFish::Tick(RunListEvent* ev)
PlotCourseToSprite(pActor, pTargetActor); PlotCourseToSprite(pActor, pTargetActor);
int nHeight = GetActorHeight(pActor) >> 1; int nHeight = GetActorHeight(pActor) >> 1;
int z = abs(pTargetActor->s().z - pSprite->z); int z = abs(pTargetActor->spr.z - pSprite->z);
if (z <= nHeight) if (z <= nHeight)
{ {
@ -405,7 +405,7 @@ void AIFish::Tick(RunListEvent* ev)
pSprite->yvel = 0; pSprite->yvel = 0;
} }
pSprite->zvel = (pTargetActor->s().z - pSprite->z) >> 3; pSprite->zvel = (pTargetActor->spr.z - pSprite->z) >> 3;
} }
break; break;
} }

View file

@ -32,7 +32,7 @@ void DestroyGrenade(DExhumedActor* pActor)
{ {
runlist_DoSubRunRec(pActor->nPhase); runlist_DoSubRunRec(pActor->nPhase);
runlist_SubRunRec(pActor->nRun); runlist_SubRunRec(pActor->nRun);
runlist_DoSubRunRec(pActor->s().lotag - 1); runlist_DoSubRunRec(pActor->spr.lotag - 1);
DeleteActor(pActor); DeleteActor(pActor);
} }
@ -334,7 +334,7 @@ void AIGrenade::Tick(RunListEvent* ev)
} }
else if (nMov.type == kHitSprite) else if (nMov.type == kHitSprite)
{ {
BounceGrenade(pActor, nMov.actor()->s().ang); BounceGrenade(pActor, nMov.actor()->spr.ang);
} }
pActor->nHealth = 0; pActor->nHealth = 0;

View file

@ -245,7 +245,7 @@ Collision CheckCloseRange(int nPlayer, int *x, int *y, int *z, sectortype* *ppSe
{ {
auto pActor = PlayerList[nPlayer].Actor(); auto pActor = PlayerList[nPlayer].Actor();
int ang = pActor->s().ang; int ang = pActor->spr.ang;
int xVect = bcos(ang); int xVect = bcos(ang);
int yVect = bsin(ang); int yVect = bsin(ang);
@ -954,7 +954,7 @@ void DrawWeapons(double smooth)
} }
if (nWeapon < 0) { if (nWeapon < 0) {
nShade = PlayerList[nLocalPlayer].Actor()->s().shade; nShade = PlayerList[nLocalPlayer].Actor()->spr.shade;
} }
double const look_anghalf = PlayerList[nLocalPlayer].angle.look_anghalf(smooth); double const look_anghalf = PlayerList[nLocalPlayer].angle.look_anghalf(smooth);

View file

@ -128,11 +128,11 @@ void BuildItemAnim(DExhumedActor* pActor)
auto pAnimActor = BuildAnim(pActor, 41, nItemAnimInfo[nItem].a, pSprite->x, pSprite->y, pSprite->z, pSprite->sector(), nItemAnimInfo[nItem].repeat, 20); auto pAnimActor = BuildAnim(pActor, 41, nItemAnimInfo[nItem].a, pSprite->x, pSprite->y, pSprite->z, pSprite->sector(), nItemAnimInfo[nItem].repeat, 20);
if (nItem == 44) { if (nItem == 44) {
pAnimActor->s().cstat |= CSTAT_SPRITE_TRANSLUCENT; pAnimActor->spr.cstat |= CSTAT_SPRITE_TRANSLUCENT;
} }
ChangeActorStat(pAnimActor, pSprite->statnum); ChangeActorStat(pAnimActor, pSprite->statnum);
pAnimActor->s().hitag = pSprite->hitag; pAnimActor->spr.hitag = pSprite->hitag;
pSprite->owner = 0; pSprite->owner = 0;
} }
else else
@ -145,7 +145,7 @@ void BuildItemAnim(DExhumedActor* pActor)
void DestroyItemAnim(DExhumedActor* actor) void DestroyItemAnim(DExhumedActor* actor)
{ {
if (actor && actor->s().owner >= 0) if (actor && actor->spr.owner >= 0)
DestroyAnim(actor); DestroyAnim(actor);
} }
@ -352,7 +352,7 @@ void DropMagic(DExhumedActor* pActor)
if (pAnimActor) if (pAnimActor)
{ {
AddFlash(pAnimActor->s().sector(), pAnimActor->s().x, pAnimActor->s().y, pAnimActor->s().z, 128); AddFlash(pAnimActor->spr.sector(), pAnimActor->spr.x, pAnimActor->spr.y, pAnimActor->spr.z, 128);
ChangeActorStat(pAnimActor, 950); ChangeActorStat(pAnimActor, 950);
} }
nMagicCount = RandomSize(2); nMagicCount = RandomSize(2);

View file

@ -99,7 +99,7 @@ void AILavaDudeLimb::Draw(RunListEvent* ev)
{ {
auto pActor = ev->pObjActor; auto pActor = ev->pObjActor;
if (!pActor) return; if (!pActor) return;
seq_PlotSequence(ev->nParam, (SeqOffsets[kSeqLavag] + 30) + pActor->s().picnum, 0, 1); seq_PlotSequence(ev->nParam, (SeqOffsets[kSeqLavag] + 30) + pActor->spr.picnum, 0, 1);
} }
@ -202,7 +202,7 @@ void AILavaDude::Damage(RunListEvent* ev)
if (pTarget) if (pTarget)
{ {
if (pTarget->s().statnum < 199) if (pTarget->spr.statnum < 199)
{ {
pActor->pTarget = pTarget; pActor->pTarget = pTarget;
} }
@ -259,7 +259,7 @@ void AILavaDude::Tick(RunListEvent* ev)
if (pTarget && nAction < 4) if (pTarget && nAction < 4)
{ {
if (!(pTarget->s().cstat & CSTAT_SPRITE_BLOCK_ALL) || pTarget->s().statnum == MAXSTATUS) if (!(pTarget->spr.cstat & CSTAT_SPRITE_BLOCK_ALL) || pTarget->spr.statnum == MAXSTATUS)
{ {
pTarget = nullptr; pTarget = nullptr;
pActor->pTarget = nullptr; pActor->pTarget = nullptr;
@ -327,7 +327,7 @@ void AILavaDude::Tick(RunListEvent* ev)
{ {
if (coll.actor() == pTarget) if (coll.actor() == pTarget)
{ {
int nAng = getangle(pTarget->s().x - pSprite->x, pTarget->s().y - pSprite->y); int nAng = getangle(pTarget->spr.x - pSprite->x, pTarget->spr.y - pSprite->y);
if (AngleDiff(pSprite->ang, nAng) < 64) if (AngleDiff(pSprite->ang, nAng) < 64)
{ {
pActor->nAction = 2; pActor->nAction = 2;

View file

@ -159,7 +159,7 @@ void AILion::Damage(RunListEvent* ev)
if (pTarget) if (pTarget)
{ {
if (pTarget->s().statnum < 199) { if (pTarget->spr.statnum < 199) {
pActor->pTarget = pTarget; pActor->pTarget = pTarget;
} }
@ -318,7 +318,7 @@ void AILion::Tick(RunListEvent* ev)
} }
else else
{ {
int nAng = getangle(pTarget->s().x - pSprite->x, pTarget->s().y - pSprite->y); int nAng = getangle(pTarget->spr.x - pSprite->x, pTarget->spr.y - pSprite->y);
if (AngleDiff(pSprite->ang, nAng) < 64) if (AngleDiff(pSprite->ang, nAng) < 64)
{ {
@ -451,7 +451,7 @@ void AILion::Tick(RunListEvent* ev)
{ {
if (nMov.actor() == pTarget) if (nMov.actor() == pTarget)
{ {
int nAng = getangle(pTarget->s().x - pSprite->x, pTarget->s().y - pSprite->y); int nAng = getangle(pTarget->spr.x - pSprite->x, pTarget->spr.y - pSprite->y);
if (AngleDiff(pSprite->ang, nAng) < 64) if (AngleDiff(pSprite->ang, nAng) < 64)
{ {
pActor->nAction = 3; pActor->nAction = 3;
@ -536,7 +536,7 @@ void AILion::Tick(RunListEvent* ev)
// loc_379AD: ? // loc_379AD: ?
if (nAction != 1 && pTarget != nullptr) if (nAction != 1 && pTarget != nullptr)
{ {
if (!(pTarget->s().cstat & CSTAT_SPRITE_BLOCK_ALL)) if (!(pTarget->spr.cstat & CSTAT_SPRITE_BLOCK_ALL))
{ {
pActor->nAction = 1; pActor->nAction = 1;
pActor->nFrame = 0; pActor->nFrame = 0;

View file

@ -247,7 +247,7 @@ int BelowNear(DExhumedActor* pActor, int x, int y, int walldist)
if (loHit.type == kHitSprite) if (loHit.type == kHitSprite)
{ {
z2 = loHit.actor()->s().z; z2 = loHit.actor()->spr.z;
} }
else else
{ {
@ -480,7 +480,7 @@ Collision movespritez(DExhumedActor* pActor, int z, int height, int, int clipdis
int GetActorHeight(DExhumedActor* actor) int GetActorHeight(DExhumedActor* actor)
{ {
return tileHeight(actor->s().picnum) * actor->s().yrepeat * 4; return tileHeight(actor->spr.picnum) * actor->spr.yrepeat * 4;
} }
DExhumedActor* insertActor(sectortype* s, int st) DExhumedActor* insertActor(sectortype* s, int st)
@ -1122,8 +1122,8 @@ void SetQuake(DExhumedActor* pActor, int nVal)
auto pPlayerActor = PlayerList[i].Actor(); auto pPlayerActor = PlayerList[i].Actor();
uint32_t xDiff = abs((int32_t)((pPlayerActor->s().x - x) >> 8)); uint32_t xDiff = abs((int32_t)((pPlayerActor->spr.x - x) >> 8));
uint32_t yDiff = abs((int32_t)((pPlayerActor->s().y - y) >> 8)); uint32_t yDiff = abs((int32_t)((pPlayerActor->spr.y - y) >> 8));
uint32_t sqrtNum = xDiff * xDiff + yDiff * yDiff; uint32_t sqrtNum = xDiff * xDiff + yDiff * yDiff;
@ -1367,7 +1367,7 @@ DExhumedActor* GrabChunkSprite()
pActor = insertActor(0, 899); pActor = insertActor(0, 899);
nChunkSprite[nCurChunkNum] = pActor; nChunkSprite[nCurChunkNum] = pActor;
} }
else if (pActor->s().statnum) else if (pActor->spr.statnum)
{ {
// TODO MonoOut("too many chunks being used at once!\n"); // TODO MonoOut("too many chunks being used at once!\n");
return nullptr; return nullptr;
@ -1382,7 +1382,7 @@ DExhumedActor* GrabChunkSprite()
if (nChunkTotal < kMaxMoveChunks) if (nChunkTotal < kMaxMoveChunks)
nChunkTotal++; nChunkTotal++;
pActor->s().cstat = CSTAT_SPRITE_YCENTER; pActor->spr.cstat = CSTAT_SPRITE_YCENTER;
return pActor; return pActor;
} }
@ -1480,7 +1480,7 @@ void AICreatureChunk::Tick(RunListEvent* ev)
} }
else if (nVal.type == kHitSprite) else if (nVal.type == kHitSprite)
{ {
nAngle = nVal.actor()->s().ang; nAngle = nVal.actor()->spr.ang;
} }
else if (nVal.type == kHitWall) else if (nVal.type == kHitWall)
{ {
@ -1514,7 +1514,7 @@ DExhumedActor* UpdateEnemy(DExhumedActor** ppEnemy)
{ {
if (*ppEnemy) if (*ppEnemy)
{ {
if (!((*ppEnemy)->s().cstat & CSTAT_SPRITE_BLOCK_ALL)) { if (!((*ppEnemy)->spr.cstat & CSTAT_SPRITE_BLOCK_ALL)) {
*ppEnemy = nullptr; *ppEnemy = nullptr;
} }
} }

View file

@ -158,7 +158,7 @@ void AIMummy::Tick(RunListEvent* ev)
if (pTarget != nullptr && nAction < 4) if (pTarget != nullptr && nAction < 4)
{ {
if ((!pTarget->s().cstat) && nAction) if ((!pTarget->spr.cstat) && nAction)
{ {
pActor->nAction = 0; pActor->nAction = 0;
pActor->nFrame = 0; pActor->nFrame = 0;
@ -217,7 +217,7 @@ void AIMummy::Tick(RunListEvent* ev)
if (RandomBit() && pTarget) if (RandomBit() && pTarget)
{ {
if (cansee(pSprite->x, pSprite->y, pSprite->z - GetActorHeight(pActor), pSprite->sector(), if (cansee(pSprite->x, pSprite->y, pSprite->z - GetActorHeight(pActor), pSprite->sector(),
pTarget->s().x, pTarget->s().y, pTarget->s().z - GetActorHeight(pTarget), pTarget->s().sector())) pTarget->spr.x, pTarget->spr.y, pTarget->spr.z - GetActorHeight(pTarget), pTarget->spr.sector()))
{ {
pActor->nAction = 3; pActor->nAction = 3;
pActor->nFrame = 0; pActor->nFrame = 0;
@ -284,7 +284,7 @@ void AIMummy::Tick(RunListEvent* ev)
{ {
if (nMov.actor() == pTarget) if (nMov.actor() == pTarget)
{ {
int nAngle = getangle(pTarget->s().x - pSprite->x, pTarget->s().y - pSprite->y); int nAngle = getangle(pTarget->spr.x - pSprite->x, pTarget->spr.y - pSprite->y);
if (AngleDiff(pSprite->ang, nAngle) < 64) if (AngleDiff(pSprite->ang, nAngle) < 64)
{ {
pActor->nAction = 2; pActor->nAction = 2;
@ -346,7 +346,7 @@ void AIMummy::Tick(RunListEvent* ev)
if (!RandomSize(3)) if (!RandomSize(3))
{ {
SetBulletEnemy(pBullet->nPhase, pTarget); SetBulletEnemy(pBullet->nPhase, pTarget);
pBullet->s().pal = 5; pBullet->spr.pal = 5;
} }
} }
} }

View file

@ -626,7 +626,7 @@ int CheckSectorSprites(sectortype* pSector, int nVal)
ExhumedSectIterator it(pSector); ExhumedSectIterator it(pSector);
while (auto pActor = it.Next()) while (auto pActor = it.Next())
{ {
if (pActor->s().cstat & CSTAT_SPRITE_BLOCK_ALL) { if (pActor->spr.cstat & CSTAT_SPRITE_BLOCK_ALL) {
return 1; return 1;
} }
} }
@ -869,7 +869,7 @@ void AIElev::Tick(RunListEvent* ev)
// maybe this doesn't go here? // maybe this doesn't go here?
while (pElevSpr) while (pElevSpr)
{ {
pElevSpr->s().z += ebp; pElevSpr->spr.z += ebp;
pElevSpr = pElevSpr->pTarget; pElevSpr = pElevSpr->pTarget;
} }
} }
@ -1327,12 +1327,12 @@ void AITrap::Tick(RunListEvent* ev)
{ {
if (nType == 15) if (nType == 15)
{ {
pBullet->s().ang = (pBullet->s().ang - 512) & kAngleMask; pBullet->spr.ang = (pBullet->spr.ang - 512) & kAngleMask;
D3PlayFX(StaticSound[kSound32], pBullet); D3PlayFX(StaticSound[kSound32], pBullet);
} }
else else
{ {
pBullet->s().clipdist = 50; pBullet->spr.clipdist = 50;
auto pWall = sTrap[nTrap].pWall1; auto pWall = sTrap[nTrap].pWall1;
if (pWall) if (pWall)
@ -1519,7 +1519,7 @@ void DoFinale()
if (!(dword_96788 & 2)) if (!(dword_96788 & 2))
{ {
int nAng = RandomSize(11); int nAng = RandomSize(11);
pFinaleSpr->s().ang = nAng; pFinaleSpr->spr.ang = nAng;
BuildSpark(pFinaleSpr, 1); BuildSpark(pFinaleSpr, 1);
} }
@ -2060,9 +2060,9 @@ void AIObject::RadialDamage(RunListEvent* ev)
if (pActor->nHealth > 0 && pSprite->cstat & CSTAT_SPRITE_BLOCK_ALL if (pActor->nHealth > 0 && pSprite->cstat & CSTAT_SPRITE_BLOCK_ALL
&& (nStat != kStatExplodeTarget && (nStat != kStatExplodeTarget
|| ev->pRadialActor->s().statnum == 201 || ev->pRadialActor->spr.statnum == 201
|| (nRadialBullet != 3 && nRadialBullet > -1) || (nRadialBullet != 3 && nRadialBullet > -1)
|| ev->pRadialActor->s().statnum == kStatExplodeTrigger)) || ev->pRadialActor->spr.statnum == kStatExplodeTrigger))
{ {
int nDamage = runlist_CheckRadialDamage(pActor); int nDamage = runlist_CheckRadialDamage(pActor);
if (nDamage <= 0) { if (nDamage <= 0) {
@ -2571,7 +2571,7 @@ void PostProcess()
{ {
wal.pal = 1; wal.pal = 1;
auto pActor = insertActor(&sect, 407); auto pActor = insertActor(&sect, 407);
pActor->s().cstat = CSTAT_SPRITE_INVISIBLE; pActor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
} }
} }
} }
@ -2592,7 +2592,7 @@ void PostProcess()
{ {
auto pObjectActor = ObjectList[i]; auto pObjectActor = ObjectList[i];
if (pObjectActor->s().statnum == kStatExplodeTarget) if (pObjectActor->spr.statnum == kStatExplodeTarget)
{ {
if (!pObjectActor->nIndex2) { if (!pObjectActor->nIndex2) {
pObjectActor->nIndex2 = -1; pObjectActor->nIndex2 = -1;
@ -2605,7 +2605,7 @@ void PostProcess()
for (unsigned j = 0; j < ObjectList.Size(); j++) for (unsigned j = 0; j < ObjectList.Size(); j++)
{ {
if (i != j && ObjectList[j]->s().statnum == kStatExplodeTarget && edi == ObjectList[j]->nIndex2) if (i != j && ObjectList[j]->spr.statnum == kStatExplodeTarget && edi == ObjectList[j]->nIndex2)
{ {
pObjectActor->nIndex2 = j; pObjectActor->nIndex2 = j;
ObjectList[j]->nIndex2 = i; ObjectList[j]->nIndex2 = i;

View file

@ -612,7 +612,7 @@ static void pickupMessage(int no)
void UpdatePlayerSpriteAngle(Player* pPlayer) void UpdatePlayerSpriteAngle(Player* pPlayer)
{ {
inita = pPlayer->angle.ang.asbuild(); inita = pPlayer->angle.ang.asbuild();
if (pPlayer->Actor()) pPlayer->Actor()->s().ang = inita; if (pPlayer->Actor()) pPlayer->Actor()->spr.ang = inita;
} }
void AIPlayer::Draw(RunListEvent* ev) void AIPlayer::Draw(RunListEvent* ev)
@ -711,7 +711,7 @@ void AIPlayer::Damage(RunListEvent* ev)
else else
{ {
// player has died // player has died
if (pActor2 && pActor2->s().statnum == 100) if (pActor2 && pActor2->spr.statnum == 100)
{ {
int nPlayer2 = GetPlayerFromActor(pActor2); int nPlayer2 = GetPlayerFromActor(pActor2);
@ -781,7 +781,7 @@ void AIPlayer::Tick(RunListEvent* ev)
int var_EC = PlayerList[nPlayer].nSeqSize; int var_EC = PlayerList[nPlayer].nSeqSize;
pPlayerSprite->picnum = seq_GetSeqPicnum(PlayerList[nPlayer].nSeq, PlayerSeq[nHeightTemplate[nAction]].a, var_EC); pPlayerSprite->picnum = seq_GetSeqPicnum(PlayerList[nPlayer].nSeq, PlayerSeq[nHeightTemplate[nAction]].a, var_EC);
pDopple->s().picnum = pPlayerSprite->picnum; pDopple->spr.picnum = pPlayerSprite->picnum;
if (PlayerList[nPlayer].nTorch > 0) if (PlayerList[nPlayer].nTorch > 0)
{ {
@ -820,7 +820,7 @@ void AIPlayer::Tick(RunListEvent* ev)
DExhumedActor* pFloorSprite = PlayerList[nPlayer].pPlayerFloorSprite; DExhumedActor* pFloorSprite = PlayerList[nPlayer].pPlayerFloorSprite;
if (pFloorSprite != nullptr) { if (pFloorSprite != nullptr) {
pFloorSprite->s().cstat &= ~CSTAT_SPRITE_BLOCK; // set visible pFloorSprite->spr.cstat &= ~CSTAT_SPRITE_BLOCK; // set visible
} }
} }
else if (PlayerList[nPlayer].nInvisible == 150 && nPlayer == nLocalPlayer) else if (PlayerList[nPlayer].nInvisible == 150 && nPlayer == nLocalPlayer)
@ -1326,7 +1326,7 @@ sectdone:
feebtag(pPlayerSprite->x, pPlayerSprite->y, pPlayerSprite->z, pPlayerSprite->sector(), &pActorB, var_30, 768); feebtag(pPlayerSprite->x, pPlayerSprite->y, pPlayerSprite->z, pPlayerSprite->sector(), &pActorB, var_30, 768);
// Item pickup code // Item pickup code
if (pActorB != nullptr && pActorB->s().statnum >= 900) if (pActorB != nullptr && pActorB->spr.statnum >= 900)
{ {
auto pSpriteB = &pActorB->s(); auto pSpriteB = &pActorB->s();
int var_8C = 16; int var_8C = 16;
@ -2609,17 +2609,17 @@ sectdone:
} }
// loc_1C4E1 // loc_1C4E1
pDopple->s().pos = pPlayerSprite->pos; pDopple->spr.pos = pPlayerSprite->pos;
if (pPlayerSprite->sector()->pAbove != nullptr) if (pPlayerSprite->sector()->pAbove != nullptr)
{ {
pDopple->s().ang = pPlayerSprite->ang; pDopple->spr.ang = pPlayerSprite->ang;
ChangeActorSect(pDopple, pPlayerSprite->sector()->pAbove); ChangeActorSect(pDopple, pPlayerSprite->sector()->pAbove);
pDopple->s().cstat = CSTAT_SPRITE_BLOCK_ALL; pDopple->spr.cstat = CSTAT_SPRITE_BLOCK_ALL;
} }
else else
{ {
pDopple->s().cstat = CSTAT_SPRITE_INVISIBLE; pDopple->spr.cstat = CSTAT_SPRITE_INVISIBLE;
} }
MoveWeapons(nPlayer); MoveWeapons(nPlayer);
@ -2774,7 +2774,7 @@ DEFINE_ACTION_FUNCTION(_ExhumedPlayer, IsUnderwater)
DEFINE_ACTION_FUNCTION(_ExhumedPlayer, GetAngle) DEFINE_ACTION_FUNCTION(_ExhumedPlayer, GetAngle)
{ {
PARAM_SELF_STRUCT_PROLOGUE(Player); PARAM_SELF_STRUCT_PROLOGUE(Player);
ACTION_RETURN_INT(self->Actor()->s().ang); ACTION_RETURN_INT(self->Actor()->spr.ang);
} }

View file

@ -557,7 +557,7 @@ void AIQueenEgg::Tick(RunListEvent* ev)
pEgg->pActor = enemy; pEgg->pActor = enemy;
pEgg->pTarget = pTarget; pEgg->pTarget = pTarget;
if (pTarget && (pTarget->s().cstat & CSTAT_SPRITE_BLOCK_ALL) == 0) if (pTarget && (pTarget->spr.cstat & CSTAT_SPRITE_BLOCK_ALL) == 0)
{ {
pEgg->pTarget = nullptr; pEgg->pTarget = nullptr;
pEgg->nAction = 0; pEgg->nAction = 0;
@ -599,7 +599,7 @@ void AIQueenEgg::Tick(RunListEvent* ev)
nAngle = GetWallNormal(nMov.hitWall); nAngle = GetWallNormal(nMov.hitWall);
break; break;
case kHitSprite: case kHitSprite:
nAngle = nMov.actor()->s().ang; nAngle = nMov.actor()->spr.ang;
break; break;
} }
@ -629,7 +629,7 @@ void AIQueenEgg::Tick(RunListEvent* ev)
switch (nMov.type) switch (nMov.type)
{ {
case kHitSprite: case kHitSprite:
if (nMov.actor()->s().statnum != 121) if (nMov.actor()->spr.statnum != 121)
{ {
runlist_DamageEnemy(nMov.actor(), pActor, 5); runlist_DamageEnemy(nMov.actor(), pActor, 5);
} }
@ -663,7 +663,7 @@ void AIQueenEgg::Tick(RunListEvent* ev)
if (pEgg->nCounter <= 0) if (pEgg->nCounter <= 0)
{ {
auto pWaspSprite = BuildWasp(nullptr, pSprite->x, pSprite->y, pSprite->z, pSprite->sector(), pSprite->ang, true); auto pWaspSprite = BuildWasp(nullptr, pSprite->x, pSprite->y, pSprite->z, pSprite->sector(), pSprite->ang, true);
pSprite->z = pWaspSprite->s().z; pSprite->z = pWaspSprite->spr.z;
DestroyEgg(nEgg); DestroyEgg(nEgg);
} }
@ -794,7 +794,7 @@ void AIQueenHead::Tick(RunListEvent* ev)
if (pTarget) if (pTarget)
{ {
if (!(pTarget->s().cstat & CSTAT_SPRITE_BLOCK_ALL)) if (!(pTarget->spr.cstat & CSTAT_SPRITE_BLOCK_ALL))
{ {
pTarget = nullptr; pTarget = nullptr;
QueenHead.pTarget = pTarget; QueenHead.pTarget = pTarget;
@ -834,7 +834,7 @@ void AIQueenHead::Tick(RunListEvent* ev)
if (nMov.exbits == 0) if (nMov.exbits == 0)
{ {
if (nMov.type == kHitSprite) nNewAng = nMov.actor()->s().ang; if (nMov.type == kHitSprite) nNewAng = nMov.actor()->spr.ang;
else if (nMov.type == kHitWall) nNewAng = GetWallNormal(nMov.hitWall); else if (nMov.type == kHitWall) nNewAng = GetWallNormal(nMov.hitWall);
} }
else if (nMov.exbits == kHitAux2) else if (nMov.exbits == kHitAux2)
@ -880,7 +880,7 @@ void AIQueenHead::Tick(RunListEvent* ev)
[[fallthrough]]; [[fallthrough]];
case 1: case 1:
if ((pTarget->s().z - 51200) > pSprite->z) if ((pTarget->spr.z - 51200) > pSprite->z)
{ {
QueenHead.nAction = 4; QueenHead.nAction = 4;
QueenHead.nFrame = 0; QueenHead.nFrame = 0;
@ -1348,7 +1348,7 @@ void AIQueen::Tick(RunListEvent* ev)
// loc_35BD2 // loc_35BD2
if (nAction && pTarget != nullptr) if (nAction && pTarget != nullptr)
{ {
if (!(pTarget->s().cstat & CSTAT_SPRITE_BLOCK_ALL)) if (!(pTarget->spr.cstat & CSTAT_SPRITE_BLOCK_ALL))
{ {
QueenList[nQueen].nAction = 0; QueenList[nQueen].nAction = 0;
QueenList[nQueen].nFrame = 0; QueenList[nQueen].nFrame = 0;
@ -1420,16 +1420,16 @@ void AIQueen::Tick(RunListEvent* ev)
{ {
auto pChunkActor = BuildCreatureChunk(pActor, seq_GetSeqPicnum(kSeqQueen, 57, 0)); auto pChunkActor = BuildCreatureChunk(pActor, seq_GetSeqPicnum(kSeqQueen, 57, 0));
pChunkActor->s().picnum = kQueenChunk + (i % 3); pChunkActor->spr.picnum = kQueenChunk + (i % 3);
pChunkActor->s().xrepeat = 100; pChunkActor->spr.xrepeat = 100;
pChunkActor->s().yrepeat = 100; pChunkActor->spr.yrepeat = 100;
} }
auto pChunkActor = BuildCreatureChunk(pActor, seq_GetSeqPicnum(kSeqQueen, 57, 0)); auto pChunkActor = BuildCreatureChunk(pActor, seq_GetSeqPicnum(kSeqQueen, 57, 0));
pChunkActor->s().picnum = kTile3126; pChunkActor->spr.picnum = kTile3126;
pChunkActor->s().yrepeat = 100; pChunkActor->spr.yrepeat = 100;
pChunkActor->s().xrepeat = 100; pChunkActor->spr.xrepeat = 100;
PlayFXAtXYZ( PlayFXAtXYZ(
StaticSound[kSound40], StaticSound[kSound40],

View file

@ -75,9 +75,9 @@ void InitSpiritHead()
ExhumedSpriteIterator it; ExhumedSpriteIterator it;
while (auto act = it.Next()) while (auto act = it.Next())
{ {
if (act->s().statnum) if (act->spr.statnum)
{ {
act->s().cstat |= CSTAT_SPRITE_INVISIBLE; act->spr.cstat |= CSTAT_SPRITE_INVISIBLE;
} }
} }

View file

@ -240,8 +240,8 @@ void AIRat::Tick(RunListEvent* ev)
return; return;
} }
int xVal = abs(pSprite->x - pTarget->s().x); int xVal = abs(pSprite->x - pTarget->spr.x);
int yVal = abs(pSprite->y - pTarget->s().y); int yVal = abs(pSprite->y - pTarget->spr.y);
if (xVal > 50 || yVal > 50) if (xVal > 50 || yVal > 50)
{ {
@ -293,8 +293,8 @@ void AIRat::Tick(RunListEvent* ev)
MoveCreature(pActor); MoveCreature(pActor);
int xVal = abs(pSprite->x - pTarget->s().x); int xVal = abs(pSprite->x - pTarget->spr.x);
int yVal = abs(pSprite->y - pTarget->s().y); int yVal = abs(pSprite->y - pTarget->spr.y);
if (xVal >= 50 || yVal >= 50) if (xVal >= 50 || yVal >= 50)
{ {

View file

@ -120,7 +120,7 @@ void AIRex::Damage(RunListEvent* ev)
if (ev->nDamage) if (ev->nDamage)
{ {
auto pTarget = ev->pOtherActor; auto pTarget = ev->pOtherActor;
if (pTarget && pTarget->s().statnum == 100) if (pTarget && pTarget->spr.statnum == 100)
{ {
pActor->pTarget = pTarget; pActor->pTarget = pTarget;
} }
@ -441,7 +441,7 @@ void AIRex::Tick(RunListEvent* ev)
// break-ed // break-ed
if (nAction > 0) if (nAction > 0)
{ {
if ((pTarget != nullptr) && (!(pTarget->s().cstat & CSTAT_SPRITE_BLOCK_ALL))) if ((pTarget != nullptr) && (!(pTarget->spr.cstat & CSTAT_SPRITE_BLOCK_ALL)))
{ {
pActor->nAction = 0; pActor->nAction = 0;
pActor->nFrame = 0; pActor->nFrame = 0;

View file

@ -159,7 +159,7 @@ void AIRoach::Damage(RunListEvent* ev)
auto pSprite2 = ev->pOtherActor; auto pSprite2 = ev->pOtherActor;
if (pSprite2) if (pSprite2)
{ {
if (pSprite2->s().statnum < 199) { if (pSprite2->spr.statnum < 199) {
pActor->pTarget = pSprite2; pActor->pTarget = pSprite2;
} }
@ -282,7 +282,7 @@ void AIRoach::Tick(RunListEvent* ev)
pSprite->xvel = 0; pSprite->xvel = 0;
pSprite->yvel = 0; pSprite->yvel = 0;
pSprite->ang = GetMyAngle(pTarget->s().x - pSprite->x, pTarget->s().y - pSprite->y); pSprite->ang = GetMyAngle(pTarget->spr.x - pSprite->x, pTarget->spr.y - pSprite->y);
pActor->nFrame = 0; pActor->nFrame = 0;
} }
@ -311,13 +311,13 @@ void AIRoach::Tick(RunListEvent* ev)
pSprite->xvel = 0; pSprite->xvel = 0;
pSprite->yvel = 0; pSprite->yvel = 0;
pSprite->ang = GetMyAngle(pTarget->s().x - pSprite->x, pTarget->s().y - pSprite->y); pSprite->ang = GetMyAngle(pTarget->spr.x - pSprite->x, pTarget->spr.y - pSprite->y);
pActor->nFrame = 0; pActor->nFrame = 0;
} }
} }
if (pTarget && !(pTarget->s().cstat & CSTAT_SPRITE_BLOCK_ALL)) if (pTarget && !(pTarget->spr.cstat & CSTAT_SPRITE_BLOCK_ALL))
{ {
pActor->nAction = 1; pActor->nAction = 1;
pActor->nFrame = 0; pActor->nFrame = 0;

View file

@ -1723,7 +1723,7 @@ void runlist_DamageEnemy(DExhumedActor* pActor, DExhumedActor* pActor2, int nDam
// is there now one less creature? (has one died) // is there now one less creature? (has one died)
if (nPreCreaturesKilled < nCreaturesKilled && pActor2 != nullptr) if (nPreCreaturesKilled < nCreaturesKilled && pActor2 != nullptr)
{ {
if (pActor2->s().statnum != 100) { if (pActor2->spr.statnum != 100) {
return; return;
} }
@ -1734,7 +1734,7 @@ void runlist_DamageEnemy(DExhumedActor* pActor, DExhumedActor* pActor2, int nDam
{ {
// Do a taunt // Do a taunt
auto pPlayerActor = PlayerList[nPlayer].Actor(); auto pPlayerActor = PlayerList[nPlayer].Actor();
auto pSector = pPlayerActor->s().sector(); auto pSector = pPlayerActor->spr.sector();
if (!(pSector->Flag & kSectUnderwater)) if (!(pSector->Flag & kSectUnderwater))
{ {

View file

@ -260,7 +260,7 @@ void AIScorp::Tick(RunListEvent* ev)
{ {
if (pTarget == nMov.actor()) if (pTarget == nMov.actor())
{ {
int nAngle = getangle(pTarget->s().x - pSprite->x, pTarget->s().y - pSprite->y); int nAngle = getangle(pTarget->spr.x - pSprite->x, pTarget->spr.y - pSprite->y);
if (AngleDiff(pSprite->ang, nAngle) < 64) if (AngleDiff(pSprite->ang, nAngle) < 64)
{ {
pActor->nAction = 2; pActor->nAction = 2;
@ -441,11 +441,11 @@ void AIScorp::Effect(RunListEvent* ev, DExhumedActor* pTarget, int mode)
pActor->nCount = 45; pActor->nCount = 45;
if (cansee(pSprite->x, pSprite->y, pSprite->z - GetActorHeight(pActor), pSprite->sector(), if (cansee(pSprite->x, pSprite->y, pSprite->z - GetActorHeight(pActor), pSprite->sector(),
pTarget->s().x, pTarget->s().y, pTarget->s().z - GetActorHeight(pTarget), pTarget->s().sector())) pTarget->spr.x, pTarget->spr.y, pTarget->spr.z - GetActorHeight(pTarget), pTarget->spr.sector()))
{ {
pSprite->xvel = 0; pSprite->xvel = 0;
pSprite->yvel = 0; pSprite->yvel = 0;
pSprite->ang = GetMyAngle(pTarget->s().x - pSprite->x, pTarget->s().y - pSprite->y); pSprite->ang = GetMyAngle(pTarget->spr.x - pSprite->x, pTarget->spr.y - pSprite->y);
pActor->nIndex = RandomSize(2) + RandomSize(3); pActor->nIndex = RandomSize(2) + RandomSize(3);
@ -465,7 +465,7 @@ void AIScorp::Effect(RunListEvent* ev, DExhumedActor* pTarget, int mode)
return; return;
} }
if (!(pTarget->s().cstat & CSTAT_SPRITE_BLOCK_ALL)) if (!(pTarget->spr.cstat & CSTAT_SPRITE_BLOCK_ALL))
{ {
pActor->nAction = 0; pActor->nAction = 0;
pActor->nFrame = 0; pActor->nFrame = 0;

View file

@ -603,7 +603,7 @@ int seq_PlotSequence(int nSprite, int16_t edx, int16_t nFrame, int16_t ecx)
nBase++; nBase++;
} }
if (!(pTSprite->cstat & CSTAT_SPRITE_BLOCK_ALL) || (pOwner->s().statnum == 100 && nNetPlayerCount)) if (!(pTSprite->cstat & CSTAT_SPRITE_BLOCK_ALL) || (pOwner->spr.statnum == 100 && nNetPlayerCount))
{ {
pTSprite->ownerActor = nullptr; pTSprite->ownerActor = nullptr;
} }

View file

@ -271,7 +271,7 @@ void AISet::Tick(RunListEvent* ev)
if (pTarget && nAction < 10) if (pTarget && nAction < 10)
{ {
if (!(pTarget->s().cstat & CSTAT_SPRITE_BLOCK_ALL)) if (!(pTarget->spr.cstat & CSTAT_SPRITE_BLOCK_ALL))
{ {
pActor->pTarget = nullptr; pActor->pTarget = nullptr;
pActor->nAction = 0; pActor->nAction = 0;
@ -446,7 +446,7 @@ void AISet::Tick(RunListEvent* ev)
{ {
if (pTarget == nMov.actor()) if (pTarget == nMov.actor())
{ {
int nAng = getangle(pTarget->s().x - pSprite->x, pTarget->s().y - pSprite->y); int nAng = getangle(pTarget->spr.x - pSprite->x, pTarget->spr.y - pSprite->y);
if (AngleDiff(pSprite->ang, nAng) < 64) if (AngleDiff(pSprite->ang, nAng) < 64)
{ {
pActor->nAction = 4; pActor->nAction = 4;
@ -621,7 +621,7 @@ void AISet::Tick(RunListEvent* ev)
{ {
if (pTarget) if (pTarget)
{ {
if (!(pTarget->s().cstat & CSTAT_SPRITE_BLOCK_ALL)) if (!(pTarget->spr.cstat & CSTAT_SPRITE_BLOCK_ALL))
{ {
pActor->nAction = 0; pActor->nAction = 0;
pActor->nFrame = 0; pActor->nFrame = 0;

View file

@ -174,7 +174,7 @@ void BuildSnake(int nPlayer, int zVal)
{ {
DExhumedActor* pTarget = nullptr; DExhumedActor* pTarget = nullptr;
auto hitactor = hit.actor(); auto hitactor = hit.actor();
if (hitactor && hitactor->s().statnum >= 90 && hitactor->s().statnum <= 199) { if (hitactor && hitactor->spr.statnum >= 90 && hitactor->spr.statnum <= 199) {
pTarget = hitactor; pTarget = hitactor;
} }
else if (sPlayerInput[nPlayer].pTarget != nullptr) else if (sPlayerInput[nPlayer].pTarget != nullptr)
@ -210,9 +210,9 @@ void BuildSnake(int nPlayer, int zVal)
} }
else else
{ {
pSprite->x = sprt->s().x; pSprite->x = sprt->spr.x;
pSprite->y = sprt->s().y; pSprite->y = sprt->spr.y;
pSprite->z = sprt->s().z; pSprite->z = sprt->spr.z;
pSprite->xrepeat = 40 - 3 * i; pSprite->xrepeat = 40 - 3 * i;
pSprite->yrepeat = 40 - 3 * i; pSprite->yrepeat = 40 - 3 * i;
} }
@ -345,7 +345,7 @@ void AISnake::Tick(RunListEvent* ev)
} }
else else
{ {
if (!(pEnemySprite->s().cstat & CSTAT_SPRITE_BLOCK_ALL)) if (!(pEnemySprite->spr.cstat & CSTAT_SPRITE_BLOCK_ALL))
{ {
SnakeList[nSnake].pEnemy = nullptr; SnakeList[nSnake].pEnemy = nullptr;
goto SEARCH_ENEMY; goto SEARCH_ENEMY;

View file

@ -478,7 +478,7 @@ void EXSoundEngine::CalcPosVel(int type, const void* source, const float pt[3],
assert(actor != nullptr); assert(actor != nullptr);
if (actor != nullptr) if (actor != nullptr)
{ {
*pos = GetSoundPos(&actor->s().pos); *pos = GetSoundPos(&actor->spr.pos);
} }
} }
if ((chanflags & CHANF_LISTENERZ) && type != SOURCE_None) if ((chanflags & CHANF_LISTENERZ) && type != SOURCE_None)
@ -567,9 +567,9 @@ void PlayFX2(int nSound, DExhumedActor* pActor, int sectf, EChanFlags chanflags,
{ {
fullvol = (sprflags & 0x2000) != 0; fullvol = (sprflags & 0x2000) != 0;
hiprio = (sprflags & 0x4000) != 0; hiprio = (sprflags & 0x4000) != 0;
soundx = pActor->s().x; soundx = pActor->spr.x;
soundy = pActor->s().y; soundy = pActor->spr.y;
soundz = pActor->s().z; soundz = pActor->spr.z;
} }
int nVolume = 255; int nVolume = 255;
@ -644,7 +644,7 @@ void PlayFX2(int nSound, DExhumedActor* pActor, int sectf, EChanFlags chanflags,
} }
// Nuke: added nSprite >= 0 check // Nuke: added nSprite >= 0 check
if (pActor != PlayerList[nLocalPlayer].Actor() && pActor != nullptr && (pActor->s().cstat & CSTAT_SPRITE_BLOCK_ALL)) if (pActor != PlayerList[nLocalPlayer].Actor() && pActor != nullptr && (pActor->spr.cstat & CSTAT_SPRITE_BLOCK_ALL))
nCreepyTimer = kCreepyCount; nCreepyTimer = kCreepyCount;
} }

View file

@ -129,7 +129,7 @@ void AISpider::Tick(RunListEvent* ev)
DExhumedActor* pTarget = spp->pTarget; DExhumedActor* pTarget = spp->pTarget;
if (pTarget == nullptr || pTarget->s().cstat & CSTAT_SPRITE_BLOCK_ALL) if (pTarget == nullptr || pTarget->spr.cstat & CSTAT_SPRITE_BLOCK_ALL)
{ {
switch (nAction) switch (nAction)
{ {
@ -316,7 +316,7 @@ void AISpider::Tick(RunListEvent* ev)
{ {
if (nMov.actor() == pTarget) if (nMov.actor() == pTarget)
{ {
int nAng = getangle(pTarget->s().x - sp->x, pTarget->s().y - sp->y); int nAng = getangle(pTarget->spr.x - sp->x, pTarget->spr.y - sp->y);
if (AngleDiff(sp->ang, nAng) < 64) if (AngleDiff(sp->ang, nAng) < 64)
{ {
spp->nAction = 2; spp->nAction = 2;
@ -382,7 +382,7 @@ void AISpider::Damage(RunListEvent* ev)
or should code below (action set, b set) happen? or should code below (action set, b set) happen?
Other AI doesn't show consistency in this regard (see Scorpion code) Other AI doesn't show consistency in this regard (see Scorpion code)
*/ */
if (pTarget && pTarget->s().statnum == 100) if (pTarget && pTarget->spr.statnum == 100)
{ {
spp->pTarget = pTarget; spp->pTarget = pTarget;
} }

View file

@ -237,8 +237,8 @@ void DrawView(double smoothRatio, bool sceneonly)
} }
else else
{ {
nEnemyPal = pEnemy->s().pal; nEnemyPal = pEnemy->spr.pal;
pEnemy->s().pal = 5; pEnemy->spr.pal = 5;
} }
} }
else else
@ -444,7 +444,7 @@ void DrawView(double smoothRatio, bool sceneonly)
{ {
RestoreGreenPal(); RestoreGreenPal();
if (nEnemyPal > -1) { if (nEnemyPal > -1) {
pEnemy->s().pal = (uint8_t)nEnemyPal; pEnemy->spr.pal = (uint8_t)nEnemyPal;
} }
DrawMap(smoothRatio); DrawMap(smoothRatio);

View file

@ -217,7 +217,7 @@ void AIWasp::Tick(RunListEvent* ev)
{ {
pTarget = pActor->pTarget; pTarget = pActor->pTarget;
if (pTarget && (!(pTarget->s().cstat & CSTAT_SPRITE_BLOCK_ALL) || (pTarget->s().sector()->Flag & kSectUnderwater))) if (pTarget && (!(pTarget->spr.cstat & CSTAT_SPRITE_BLOCK_ALL) || (pTarget->spr.sector()->Flag & kSectUnderwater)))
{ {
// goto pink // goto pink
pActor->pTarget = nullptr; pActor->pTarget = nullptr;

View file

@ -219,7 +219,7 @@ int DoActorDie(DSWActor* actor, DSWActor* weapActor, int meansofdeath)
} }
u->ActorActionFunc = nullptr; u->ActorActionFunc = nullptr;
// Get angle to player // Get angle to player
sp->ang = NORM_ANGLE(getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y) + 1024); sp->ang = NORM_ANGLE(getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y) + 1024);
break; break;
case UZI_SMOKE+1: // Shotgun case UZI_SMOKE+1: // Shotgun
@ -242,7 +242,7 @@ int DoActorDie(DSWActor* actor, DSWActor* weapActor, int meansofdeath)
DoActorBeginJump(actor); DoActorBeginJump(actor);
u->ActorActionFunc = nullptr; u->ActorActionFunc = nullptr;
// Get angle to player // Get angle to player
sp->ang = NORM_ANGLE(getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y) + 1024); sp->ang = NORM_ANGLE(getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y) + 1024);
break; break;
default: default:
@ -775,7 +775,7 @@ int DoActorStopFall(DSWActor* actor)
// don't stand on face or wall sprites - jump again // don't stand on face or wall sprites - jump again
if (u->lowActor && !TEST(u->lowActor->s().cstat, CSTAT_SPRITE_ALIGNMENT_FLOOR)) if (u->lowActor && !TEST(u->lowActor->spr.cstat, CSTAT_SPRITE_ALIGNMENT_FLOOR))
{ {
//sp->ang = NORM_ANGLE(sp->ang + (RANDOM_P2(64<<8)>>8) - 32); //sp->ang = NORM_ANGLE(sp->ang + (RANDOM_P2(64<<8)>>8) - 32);
sp->ang = NORM_ANGLE(sp->ang + 1024 + (RANDOM_P2(512<<8)>>8)); sp->ang = NORM_ANGLE(sp->ang + 1024 + (RANDOM_P2(512<<8)>>8));

View file

@ -232,7 +232,7 @@ bool CanSeePlayer(DSWActor* actor)
// if actor can still see the player // if actor can still see the player
int look_height = SPRITEp_TOS(sp); int look_height = SPRITEp_TOS(sp);
if (u->targetActor && FAFcansee(sp->x, sp->y, look_height, sp->sector(), u->targetActor->s().x, u->targetActor->s().y, ActorUpper(u->targetActor), u->targetActor->s().sector())) if (u->targetActor && FAFcansee(sp->x, sp->y, look_height, sp->sector(), u->targetActor->spr.x, u->targetActor->spr.y, ActorUpper(u->targetActor), u->targetActor->spr.sector()))
return true; return true;
else else
return false; return false;
@ -343,7 +343,7 @@ int DoActorPickClosePlayer(DSWActor* actor)
continue; continue;
// if co-op don't hurt teammate // if co-op don't hurt teammate
// if (gNet.MultiGameType == MULTI_GAME_COOPERATIVE && !gNet.HurtTeammate && u->spal == pp->Actor()->s().spal) // if (gNet.MultiGameType == MULTI_GAME_COOPERATIVE && !gNet.HurtTeammate && u->spal == pp->Actor()->spr.spal)
// continue; // continue;
} }
@ -373,7 +373,7 @@ int DoActorPickClosePlayer(DSWActor* actor)
continue; continue;
// if co-op don't hurt teammate // if co-op don't hurt teammate
//if (gNet.MultiGameType == MULTI_GAME_COOPERATIVE && !gNet.HurtTeammate && u->spal == pp->Actor()->s().spal) //if (gNet.MultiGameType == MULTI_GAME_COOPERATIVE && !gNet.HurtTeammate && u->spal == pp->Actor()->spr.spal)
// continue; // continue;
} }
@ -438,8 +438,8 @@ DSWActor* GetPlayerSpriteNum(DSWActor* actor)
int CloseRangeDist(DSWActor* actor1, DSWActor* actor2) int CloseRangeDist(DSWActor* actor1, DSWActor* actor2)
{ {
int clip1 = actor1->s().clipdist; int clip1 = actor1->spr.clipdist;
int clip2 = actor2->s().clipdist; int clip2 = actor2->spr.clipdist;
// add clip boxes and a fudge factor // add clip boxes and a fudge factor
const int DIST_CLOSE_RANGE = 400; const int DIST_CLOSE_RANGE = 400;
@ -551,7 +551,7 @@ ANIMATORp DoActorActionDecide(DSWActor* actor)
DoActorOperate(actor); DoActorOperate(actor);
// if far enough away and cannot see the player // if far enough away and cannot see the player
dist = Distance(sp->x, sp->y, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(sp->x, sp->y, u->targetActor->spr.x, u->targetActor->spr.y);
if (dist > 30000 && !ICanSee) if (dist > 30000 && !ICanSee)
{ {
@ -642,7 +642,7 @@ ANIMATORp DoActorActionDecide(DSWActor* actor)
DoActorPickClosePlayer(actor); DoActorPickClosePlayer(actor);
// if close by // if close by
dist = Distance(sp->x, sp->y, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(sp->x, sp->y, u->targetActor->spr.x, u->targetActor->spr.y);
if (dist < 15000 || ICanSee) if (dist < 15000 || ICanSee)
{ {
if ((Facing(actor, u->targetActor) && dist < 10000) || ICanSee) if ((Facing(actor, u->targetActor) && dist < 10000) || ICanSee)
@ -952,7 +952,7 @@ int DoActorMoveCloser(DSWActor* actor)
else else
{ {
// turn to face player // turn to face player
sp->ang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y); sp->ang = getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y);
} }
} }
@ -1200,7 +1200,7 @@ int InitActorAttack(DSWActor* actor)
return 0; return 0;
} }
if (TEST(u->targetActor->s().cstat, CSTAT_SPRITE_TRANSLUCENT)) if (TEST(u->targetActor->spr.cstat, CSTAT_SPRITE_TRANSLUCENT))
{ {
InitActorRunAway(actor); InitActorRunAway(actor);
return 0; return 0;
@ -1235,7 +1235,7 @@ int InitActorAttack(DSWActor* actor)
//NewStateGroup(actor, u->ActorActionSet->Stand); //NewStateGroup(actor, u->ActorActionSet->Stand);
// face player when attacking // face player when attacking
sp->ang = NORM_ANGLE(getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y)); sp->ang = NORM_ANGLE(getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y));
// If it's your own kind, lay off! // If it's your own kind, lay off!
if (u->ID == u->targetActor->u()->ID && !u->targetActor->u()->PlayerP) if (u->ID == u->targetActor->u()->ID && !u->targetActor->u()->PlayerP)
@ -1278,7 +1278,7 @@ int DoActorAttack(DSWActor* actor)
DoActorNoise(ChooseAction(u->Personality->Broadcast),actor); DoActorNoise(ChooseAction(u->Personality->Broadcast),actor);
DISTANCE(sp->x, sp->y, u->targetActor->s().x, u->targetActor->s().y, dist, a, b, c); DISTANCE(sp->x, sp->y, u->targetActor->spr.x, u->targetActor->spr.y, dist, a, b, c);
auto pActor = GetPlayerSpriteNum(actor); auto pActor = GetPlayerSpriteNum(actor);
if ((u->ActorActionSet->CloseAttack[0] && dist < CloseRangeDist(actor, u->targetActor)) || if ((u->ActorActionSet->CloseAttack[0] && dist < CloseRangeDist(actor, u->targetActor)) ||
@ -1394,7 +1394,7 @@ int InitActorDuck(DSWActor* actor)
u->ActorActionFunc = DoActorDuck; u->ActorActionFunc = DoActorDuck;
NewStateGroup(actor, u->ActorActionSet->Duck); NewStateGroup(actor, u->ActorActionSet->Duck);
dist = Distance(sp->x, sp->y, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(sp->x, sp->y, u->targetActor->spr.x, u->targetActor->spr.y);
if (dist > 8000) if (dist > 8000)
{ {
@ -1552,7 +1552,7 @@ int FindNewAngle(DSWActor* actor, int dir, int DistToMove)
DistToMove = (DistToMove >> 2) + (DistToMove >> 3); DistToMove = (DistToMove >> 2) + (DistToMove >> 3);
// Find angle to from the player // Find angle to from the player
oang = NORM_ANGLE(getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y)); oang = NORM_ANGLE(getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y));
// choose a random angle array // choose a random angle array
switch (dir) switch (dir)
@ -1700,7 +1700,7 @@ int InitActorReposition(DSWActor* actor)
u->Dist = 0; u->Dist = 0;
rnum = RANDOM_P2(8<<8)>>8; rnum = RANDOM_P2(8<<8)>>8;
dist = Distance(sp->x, sp->y, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(sp->x, sp->y, u->targetActor->spr.x, u->targetActor->spr.y);
if (dist < PlayerDist[rnum] || TEST(u->Flags, SPR_RUN_AWAY)) if (dist < PlayerDist[rnum] || TEST(u->Flags, SPR_RUN_AWAY))
{ {

View file

@ -586,7 +586,7 @@ int DoCoolieMove(DSWActor* actor)
return 0; return 0;
} }
if (Distance(sp->x, sp->y, u->targetActor->s().x, u->targetActor->s().y) < 1200) if (Distance(sp->x, sp->y, u->targetActor->spr.x, u->targetActor->spr.y) < 1200)
{ {
UpdateSinglePlayKills(actor); UpdateSinglePlayKills(actor);
DoActorDie(actor, actor, 0); DoActorDie(actor, actor, 0);

View file

@ -261,7 +261,7 @@ void CopySectorMatch(int match)
it.Reset(STAT_COPY_DEST); it.Reset(STAT_COPY_DEST);
while (auto dActor = it.Next()) while (auto dActor = it.Next())
{ {
if (match == dActor->s().lotag) if (match == dActor->spr.lotag)
KillActor(dActor); KillActor(dActor);
} }
@ -269,7 +269,7 @@ void CopySectorMatch(int match)
it.Reset(STAT_COPY_SOURCE); it.Reset(STAT_COPY_SOURCE);
while (auto sActor = it.Next()) while (auto sActor = it.Next())
{ {
if (match == sActor->s().lotag) if (match == sActor->spr.lotag)
KillActor(sActor); KillActor(sActor);
} }

View file

@ -301,7 +301,7 @@ void DoShadows(tspritetype* tsprite, int& spritesortcnt, tspriteptr_t tsp, int v
loz = tu->loz; loz = tu->loz;
if (tu->lowActor) if (tu->lowActor)
{ {
if (!TEST(tu->lowActor->s().cstat, CSTAT_SPRITE_ALIGNMENT_WALL | CSTAT_SPRITE_ALIGNMENT_FLOOR)) if (!TEST(tu->lowActor->spr.cstat, CSTAT_SPRITE_ALIGNMENT_WALL | CSTAT_SPRITE_ALIGNMENT_FLOOR))
{ {
loz = DoShadowFindGroundPoint(tsp); loz = DoShadowFindGroundPoint(tsp);
} }
@ -762,7 +762,7 @@ void analyzesprites(tspritetype* tsprite, int& spritesortcnt, int viewx, int vie
{ {
tsp->pal = PALETTE_RED_LIGHTING; tsp->pal = PALETTE_RED_LIGHTING;
// Turn it off, it gets reset by PrintSpriteInfo // Turn it off, it gets reset by PrintSpriteInfo
tActor->s().hitag = 0; tActor->spr.hitag = 0;
} }
} }
@ -1254,7 +1254,7 @@ void PreDraw(void)
SWStatIterator it(STAT_FLOOR_SLOPE_DONT_DRAW); SWStatIterator it(STAT_FLOOR_SLOPE_DONT_DRAW);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
RESET(actor->s().sector()->floorstat, CSTAT_SECTOR_SLOPE); RESET(actor->spr.sector()->floorstat, CSTAT_SECTOR_SLOPE);
} }
} }
@ -1264,7 +1264,7 @@ void PostDraw(void)
SWStatIterator it(STAT_FLOOR_SLOPE_DONT_DRAW); SWStatIterator it(STAT_FLOOR_SLOPE_DONT_DRAW);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
SET(actor->s().sector()->floorstat, CSTAT_SECTOR_SLOPE); SET(actor->spr.sector()->floorstat, CSTAT_SECTOR_SLOPE);
} }
it.Reset(STAT_FAF_COPY); it.Reset(STAT_FAF_COPY);
@ -1280,7 +1280,7 @@ void PreDrawStackedWater(void)
SWStatIterator it(STAT_CEILING_FLOOR_PIC_OVERRIDE); SWStatIterator it(STAT_CEILING_FLOOR_PIC_OVERRIDE);
while (auto itActor = it.Next()) while (auto itActor = it.Next())
{ {
SWSectIterator it2(itActor->s().sector()); SWSectIterator it2(itActor->spr.sector());
while (auto itActor2 = it2.Next()) while (auto itActor2 = it2.Next())
{ {
if (itActor2->hasU()) if (itActor2->hasU())

View file

@ -477,7 +477,7 @@ int DoEelMatchPlayerZ(DSWActor* actor)
// lower bound // lower bound
if (u->lowActor && u->targetActor == u->highActor) // this doesn't look right... if (u->lowActor && u->targetActor == u->highActor) // this doesn't look right...
{ {
DISTANCE(sp->x, sp->y, u->lowActor->s().x, u->lowActor->s().y, dist, a, b, c); DISTANCE(sp->x, sp->y, u->lowActor->spr.x, u->lowActor->spr.y, dist, a, b, c);
if (dist <= 300) if (dist <= 300)
bound = u->sz; bound = u->sz;
else else
@ -494,7 +494,7 @@ int DoEelMatchPlayerZ(DSWActor* actor)
// upper bound // upper bound
if (u->highActor && u->targetActor == u->highActor) if (u->highActor && u->targetActor == u->highActor)
{ {
DISTANCE(sp->x, sp->y, u->highActor->s().x, u->highActor->s().y, dist, a, b, c); DISTANCE(sp->x, sp->y, u->highActor->spr.x, u->highActor->spr.y, dist, a, b, c);
if (dist <= 300) if (dist <= 300)
bound = u->sz; bound = u->sz;
else else

View file

@ -2191,7 +2191,7 @@ struct ANIMstruct
return SectorObject[animindex].zmid; return SectorObject[animindex].zmid;
case ANIM_Spritez: case ANIM_Spritez:
if (animactor == nullptr) return scratch; if (animactor == nullptr) return scratch;
return animactor->s().z; return animactor->spr.z;
case ANIM_Userz: case ANIM_Userz:
if (animactor == nullptr) return scratch; if (animactor == nullptr) return scratch;
return animactor->u()->sz; return animactor->u()->sz;

View file

@ -113,15 +113,15 @@ static int &getvalue(so_interp::interp_data& element, bool write)
return SectorObject[index].zmid; return SectorObject[index].zmid;
case soi_sprx: case soi_sprx:
if (element.actorofang) if (element.actorofang)
return element.actorofang->s().x; return element.actorofang->spr.x;
break; break;
case soi_spry: case soi_spry:
if (element.actorofang) if (element.actorofang)
return element.actorofang->s().y; return element.actorofang->spr.y;
break; break;
case soi_sprz: case soi_sprz:
if (element.actorofang) if (element.actorofang)
return element.actorofang->s().z; return element.actorofang->spr.z;
break; break;
default: default:
break; break;
@ -165,7 +165,7 @@ static void so_setspriteanginterpolation(so_interp *interp, DSWActor* actor)
data->curelement = soi_sprang; data->curelement = soi_sprang;
data->oldipos = data->oldipos =
data->lastipos = data->lastipos =
data->lastoldipos = actor->s().ang; data->lastoldipos = actor->spr.ang;
data->lastangdiff = 0; data->lastangdiff = 0;
data->actorofang = actor; data->actorofang = actor;
} }
@ -211,7 +211,7 @@ void so_addinterpolation(SECTOR_OBJECTp sop)
SWSectIterator it(*sectp); SWSectIterator it(*sectp);
while (auto actor = it.Next()) while (auto actor = it.Next())
if (actor->s().statnum == STAT_VATOR && SP_TAG1(&actor->s()) == SECT_VATOR) if (actor->spr.statnum == STAT_VATOR && SP_TAG1(&actor->s()) == SECT_VATOR)
{ {
interp->hasvator = true; interp->hasvator = true;
break; break;
@ -294,7 +294,7 @@ void so_updateinterpolations(void) // Stick at beginning of domovethings
u->oangdiff = 0; u->oangdiff = 0;
if (!interpolating) if (!interpolating)
data->lastangdiff = 0; data->lastangdiff = 0;
data->oldipos = actorofang->s().ang; data->oldipos = actorofang->spr.ang;
} }
} }
else else
@ -332,7 +332,7 @@ void so_dointerpolations(int32_t smoothratio) // Stick at b
continue; // target went poof. continue; // target went poof.
interp->data[i].bakipos = (interp->data[i].curelement == soi_sprang) ? interp->data[i].bakipos = (interp->data[i].curelement == soi_sprang) ?
actorofang->s().ang : actorofang->spr.ang :
getvalue(interp->data[i], false); getvalue(interp->data[i], false);
} }
if (interp->tic == 0) // Only if the SO has just moved if (interp->tic == 0) // Only if the SO has just moved
@ -391,9 +391,9 @@ void so_dointerpolations(int32_t smoothratio) // Stick at b
DSWActor* actor = data->actorofang; DSWActor* actor = data->actorofang;
if (!actor) continue; if (!actor) continue;
USERp u = actor->u(); USERp u = actor->u();
if (u && (actor->s().statnum != STAT_DEFAULT) && if (u && (actor->spr.statnum != STAT_DEFAULT) &&
((TEST(u->Flags, SPR_SKIP4) && (actor->s().statnum <= STAT_SKIP4_INTERP_END)) || ((TEST(u->Flags, SPR_SKIP4) && (actor->spr.statnum <= STAT_SKIP4_INTERP_END)) ||
(TEST(u->Flags, SPR_SKIP2) && (actor->s().statnum <= STAT_SKIP2_INTERP_END)))) (TEST(u->Flags, SPR_SKIP2) && (actor->spr.statnum <= STAT_SKIP2_INTERP_END))))
continue; continue;
} }
@ -401,7 +401,7 @@ void so_dointerpolations(int32_t smoothratio) // Stick at b
{ {
DSWActor* actor = data->actorofang; DSWActor* actor = data->actorofang;
if (!actor) continue; if (!actor) continue;
actor->s().ang = NORM_ANGLE(data->lastoldipos + MulScale(data->lastangdiff, ratio, 16)); actor->spr.ang = NORM_ANGLE(data->lastoldipos + MulScale(data->lastangdiff, ratio, 16));
} }
else else
{ {
@ -430,7 +430,7 @@ void so_restoreinterpolations(void) // Stick at end of drawscree
if (data->curelement == soi_sprang) if (data->curelement == soi_sprang)
{ {
auto actorofang = interp->data[i].actorofang; auto actorofang = interp->data[i].actorofang;
if (actorofang) actorofang->s().ang = data->bakipos; if (actorofang) actorofang->spr.ang = data->bakipos;
} }
else else
getvalue(*data, true) = data->bakipos; getvalue(*data, true) = data->bakipos;

View file

@ -1983,7 +1983,7 @@ int InitBloodSpray(DSWActor* actor, bool dogib, short velocity)
int BloodSprayFall(DSWActor* actor) int BloodSprayFall(DSWActor* actor)
{ {
actor->s().z += 1500; actor->spr.z += 1500;
return 0; return 0;
} }

View file

@ -155,7 +155,7 @@ int DoToiletGirl(DSWActor* actor)
bool ICanSee = false; bool ICanSee = false;
DoActorPickClosePlayer(actor); DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->s().x,u->targetActor->s().y,ActorMid(u->targetActor),u->targetActor->s().sector()); ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->spr.x,u->targetActor->spr.y,ActorMid(u->targetActor),u->targetActor->spr.sector());
if (u->FlagOwner != 1) if (u->FlagOwner != 1)
{ {
@ -210,7 +210,7 @@ int NullToiletGirl(DSWActor* actor)
bool ICanSee = false; bool ICanSee = false;
DoActorPickClosePlayer(actor); DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->s().x,u->targetActor->s().y,u->targetActor->s().z,u->targetActor->s().sector()); ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->spr.x,u->targetActor->spr.y,u->targetActor->spr.z,u->targetActor->spr.sector());
if (!TEST(u->Flags,SPR_CLIMBING)) if (!TEST(u->Flags,SPR_CLIMBING))
KeepActorOnFloor(actor); KeepActorOnFloor(actor);
@ -390,7 +390,7 @@ int DoWashGirl(DSWActor* actor)
bool ICanSee = false; bool ICanSee = false;
DoActorPickClosePlayer(actor); DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->s().x,u->targetActor->s().y,ActorMid(u->targetActor),u->targetActor->s().sector()); ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->spr.x,u->targetActor->spr.y,ActorMid(u->targetActor),u->targetActor->spr.sector());
if (RandomRange(1000) > 980 && u->ShellNum <= 0) if (RandomRange(1000) > 980 && u->ShellNum <= 0)
{ {
@ -454,7 +454,7 @@ int NullWashGirl(DSWActor* actor)
bool ICanSee = false; bool ICanSee = false;
DoActorPickClosePlayer(actor); DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->s().x,u->targetActor->s().y,u->targetActor->s().z,u->targetActor->s().sector()); ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->spr.x,u->targetActor->spr.y,u->targetActor->spr.z,u->targetActor->spr.sector());
if (!TEST(u->Flags,SPR_CLIMBING)) if (!TEST(u->Flags,SPR_CLIMBING))
KeepActorOnFloor(actor); KeepActorOnFloor(actor);
@ -1253,7 +1253,7 @@ int DoCarGirl(DSWActor* actor)
bool ICanSee = false; bool ICanSee = false;
DoActorPickClosePlayer(actor); DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->s().x,u->targetActor->s().y,ActorMid(u->targetActor),u->targetActor->s().sector()); ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->spr.x,u->targetActor->spr.y,ActorMid(u->targetActor),u->targetActor->spr.sector());
if (u->FlagOwner == 1) if (u->FlagOwner == 1)
{ {
@ -1299,7 +1299,7 @@ int NullCarGirl(DSWActor* actor)
bool ICanSee = false; bool ICanSee = false;
DoActorPickClosePlayer(actor); DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->s().x,u->targetActor->s().y,u->targetActor->s().z,u->targetActor->s().sector()); ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->spr.x,u->targetActor->spr.y,u->targetActor->spr.z,u->targetActor->spr.sector());
if (!TEST(u->Flags,SPR_CLIMBING)) if (!TEST(u->Flags,SPR_CLIMBING))
KeepActorOnFloor(actor); KeepActorOnFloor(actor);
@ -1467,7 +1467,7 @@ int DoMechanicGirl(DSWActor* actor)
bool ICanSee = false; bool ICanSee = false;
DoActorPickClosePlayer(actor); DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->s().x,u->targetActor->s().y,ActorMid(u->targetActor),u->targetActor->s().sector()); ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->spr.x,u->targetActor->spr.y,ActorMid(u->targetActor),u->targetActor->spr.sector());
if (u->FlagOwner == 1) if (u->FlagOwner == 1)
{ {
@ -1513,7 +1513,7 @@ int NullMechanicGirl(DSWActor* actor)
bool ICanSee = false; bool ICanSee = false;
DoActorPickClosePlayer(actor); DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->s().x,u->targetActor->s().y,u->targetActor->s().z,u->targetActor->s().sector()); ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->spr.x,u->targetActor->spr.y,u->targetActor->spr.z,u->targetActor->spr.sector());
if (!TEST(u->Flags,SPR_CLIMBING)) if (!TEST(u->Flags,SPR_CLIMBING))
KeepActorOnFloor(actor); KeepActorOnFloor(actor);
@ -1683,7 +1683,7 @@ int DoSailorGirl(DSWActor* actor)
bool ICanSee = false; bool ICanSee = false;
DoActorPickClosePlayer(actor); DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->s().x,u->targetActor->s().y,ActorMid(u->targetActor),u->targetActor->s().sector()); ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->spr.x,u->targetActor->spr.y,ActorMid(u->targetActor),u->targetActor->spr.sector());
if (u->FlagOwner == 1) if (u->FlagOwner == 1)
{ {
@ -1734,7 +1734,7 @@ int NullSailorGirl(DSWActor* actor)
static short alreadythrew = 0; static short alreadythrew = 0;
DoActorPickClosePlayer(actor); DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->s().x,u->targetActor->s().y,u->targetActor->s().z,u->targetActor->s().sector()); ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->spr.x,u->targetActor->spr.y,u->targetActor->spr.z,u->targetActor->spr.sector());
if (!TEST(u->Flags,SPR_CLIMBING)) if (!TEST(u->Flags,SPR_CLIMBING))
KeepActorOnFloor(actor); KeepActorOnFloor(actor);
@ -1890,7 +1890,7 @@ int DoPruneGirl(DSWActor* actor)
bool ICanSee = false; bool ICanSee = false;
DoActorPickClosePlayer(actor); DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->s().x,u->targetActor->s().y,ActorMid(u->targetActor),u->targetActor->s().sector()); ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->spr.x,u->targetActor->spr.y,ActorMid(u->targetActor),u->targetActor->spr.sector());
if (u->FlagOwner == 1) if (u->FlagOwner == 1)
{ {
@ -1952,7 +1952,7 @@ int NullPruneGirl(DSWActor* actor)
bool ICanSee = false; bool ICanSee = false;
DoActorPickClosePlayer(actor); DoActorPickClosePlayer(actor);
ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->s().x,u->targetActor->s().y,u->targetActor->s().z,u->targetActor->s().sector()); ICanSee = FAFcansee(sp->x,sp->y,SPRITEp_MID(sp),sp->sector(),u->targetActor->spr.x,u->targetActor->spr.y,u->targetActor->spr.z,u->targetActor->spr.sector());
if (!TEST(u->Flags,SPR_CLIMBING)) if (!TEST(u->Flags,SPR_CLIMBING))
KeepActorOnFloor(actor); KeepActorOnFloor(actor);

View file

@ -1514,7 +1514,7 @@ void DoPlayerTurnVehicle(PLAYERp pp, float avel, int z, int floor_dist)
if (MultiClipTurn(pp, NORM_ANGLE(sum.asbuild()), z, floor_dist)) if (MultiClipTurn(pp, NORM_ANGLE(sum.asbuild()), z, floor_dist))
{ {
pp->angle.ang = sum; pp->angle.ang = sum;
pp->Actor()->s().ang = pp->angle.ang.asbuild(); pp->Actor()->spr.ang = pp->angle.ang.asbuild();
} }
} }
} }
@ -1542,7 +1542,7 @@ void DoPlayerTurnVehicleRect(PLAYERp pp, int *x, int *y, int *ox, int *oy)
if (RectClipTurn(pp, NORM_ANGLE(sum.asbuild()), x, y, ox, oy)) if (RectClipTurn(pp, NORM_ANGLE(sum.asbuild()), x, y, ox, oy))
{ {
pp->angle.ang = sum; pp->angle.ang = sum;
pp->Actor()->s().ang = pp->angle.ang.asbuild(); pp->Actor()->spr.ang = pp->angle.ang.asbuild();
} }
} }
} }
@ -1582,7 +1582,7 @@ void DoPlayerTurnTurret(PLAYERp pp, float avel)
} }
pp->angle.ang = new_ang; pp->angle.ang = new_ang;
pp->Actor()->s().ang = pp->angle.ang.asbuild(); pp->Actor()->spr.ang = pp->angle.ang.asbuild();
} }
OperateSectorObject(pp->sop, pp->angle.ang.asbuild(), pp->sop->xmid, pp->sop->ymid); OperateSectorObject(pp->sop, pp->angle.ang.asbuild(), pp->sop->xmid, pp->sop->ymid);
@ -3437,7 +3437,7 @@ int DoPlayerWadeSuperJump(PLAYERp pp)
if (hit.hitSector != nullptr && labs(hit.hitSector->floorz - pp->posz) < Z(50)) if (hit.hitSector != nullptr && labs(hit.hitSector->floorz - pp->posz) < Z(50))
{ {
if (Distance(pp->posx, pp->posy, hit.hitpos.x, hit.hitpos.y) < ((((int)pp->Actor()->s().clipdist)<<2) + 256)) if (Distance(pp->posx, pp->posy, hit.hitpos.x, hit.hitpos.y) < ((((int)pp->Actor()->spr.clipdist)<<2) + 256))
return true; return true;
} }
} }
@ -3758,7 +3758,7 @@ bool PlayerOnLadder(PLAYERp pp)
if (hit.actor() != nullptr) if (hit.actor() != nullptr)
{ {
int cstat = hit.actor()->s().cstat; int cstat = hit.actor()->spr.cstat;
// if the sprite blocking you hit is not a wall sprite there is something between // if the sprite blocking you hit is not a wall sprite there is something between
// you and the ladder // you and the ladder
if (TEST(cstat, CSTAT_SPRITE_BLOCK) && if (TEST(cstat, CSTAT_SPRITE_BLOCK) &&
@ -4335,7 +4335,7 @@ void DoPlayerStopDiveNoWarp(PLAYERp pp)
RESET(pp->Flags, PF_DIVING|PF_DIVING_IN_LAVA); RESET(pp->Flags, PF_DIVING|PF_DIVING_IN_LAVA);
DoPlayerDivePalette(pp); DoPlayerDivePalette(pp);
DoPlayerNightVisionPalette(pp); DoPlayerNightVisionPalette(pp);
RESET(pp->Actor()->s().cstat, CSTAT_SPRITE_YCENTER); RESET(pp->Actor()->spr.cstat, CSTAT_SPRITE_YCENTER);
if (pp == Player + screenpeek) if (pp == Player + screenpeek)
{ {
COVER_SetReverb(0); COVER_SetReverb(0);
@ -4625,7 +4625,7 @@ void DoPlayerCurrent(PLAYERp pp)
xvect = sectu->speed * synctics * bcos(sectu->ang) >> 4; xvect = sectu->speed * synctics * bcos(sectu->ang) >> 4;
yvect = sectu->speed * synctics * bsin(sectu->ang) >> 4; yvect = sectu->speed * synctics * bsin(sectu->ang) >> 4;
push_ret = pushmove(&pp->pos, &pp->cursector, ((int)pp->Actor()->s().clipdist<<2), pp->ceiling_dist, pp->floor_dist, CLIPMASK_PLAYER); push_ret = pushmove(&pp->pos, &pp->cursector, ((int)pp->Actor()->spr.clipdist<<2), pp->ceiling_dist, pp->floor_dist, CLIPMASK_PLAYER);
if (push_ret < 0) if (push_ret < 0)
{ {
if (!TEST(pp->Flags, PF_DEAD)) if (!TEST(pp->Flags, PF_DEAD))
@ -4641,10 +4641,10 @@ void DoPlayerCurrent(PLAYERp pp)
return; return;
} }
Collision coll; Collision coll;
clipmove(pp->pos, &pp->cursector, xvect, yvect, ((int)pp->Actor()->s().clipdist<<2), pp->ceiling_dist, pp->floor_dist, CLIPMASK_PLAYER, coll); clipmove(pp->pos, &pp->cursector, xvect, yvect, ((int)pp->Actor()->spr.clipdist<<2), pp->ceiling_dist, pp->floor_dist, CLIPMASK_PLAYER, coll);
PlayerCheckValidMove(pp); PlayerCheckValidMove(pp);
pushmove(&pp->pos, &pp->cursector, ((int)pp->Actor()->s().clipdist<<2), pp->ceiling_dist, pp->floor_dist, CLIPMASK_PLAYER); pushmove(&pp->pos, &pp->cursector, ((int)pp->Actor()->spr.clipdist<<2), pp->ceiling_dist, pp->floor_dist, CLIPMASK_PLAYER);
if (push_ret < 0) if (push_ret < 0)
{ {
if (!TEST(pp->Flags, PF_DEAD)) if (!TEST(pp->Flags, PF_DEAD))
@ -5003,7 +5003,7 @@ void DoPlayerBeginOperate(PLAYERp pp)
// look for gun before trying to using it // look for gun before trying to using it
for (i = 0; sop->so_actors[i] != nullptr; i++) for (i = 0; sop->so_actors[i] != nullptr; i++)
{ {
if (sop->so_actors[i]->s().statnum == STAT_SO_SHOOT_POINT) if (sop->so_actors[i]->spr.statnum == STAT_SO_SHOOT_POINT)
{ {
SET(sop->flags, SOBJ_HAS_WEAPON); SET(sop->flags, SOBJ_HAS_WEAPON);
break; break;
@ -5088,7 +5088,7 @@ void DoPlayerBeginRemoteOperate(PLAYERp pp, SECTOR_OBJECTp sop)
// look for gun before trying to using it // look for gun before trying to using it
for (i = 0; sop->so_actors[i] != nullptr; i++) for (i = 0; sop->so_actors[i] != nullptr; i++)
{ {
if (sop->so_actors[i]->s().statnum == STAT_SO_SHOOT_POINT) if (sop->so_actors[i]->spr.statnum == STAT_SO_SHOOT_POINT)
{ {
SET(sop->flags, SOBJ_HAS_WEAPON); SET(sop->flags, SOBJ_HAS_WEAPON);
break; break;
@ -6537,7 +6537,7 @@ void MoveSkipSavePos(void)
// back up all sprite angles. // back up all sprite angles.
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
actor->s().backupang(); actor->spr.backupang();
} }
} }
@ -7047,7 +7047,7 @@ void InitMultiPlayerInfo(void)
auto start0 = SpawnActor(MultiStatList[stat], ST1, nullptr, pp->cursector, pp->posx, pp->posy, pp->posz, pp->angle.ang.asbuild(), 0); auto start0 = SpawnActor(MultiStatList[stat], ST1, nullptr, pp->cursector, pp->posx, pp->posy, pp->posz, pp->angle.ang.asbuild(), 0);
start0->clearUser(); start0->clearUser();
start0->s().picnum = ST1; start0->spr.picnum = ST1;
} }
memset(SpawnPositionUsed,0,sizeof(SpawnPositionUsed)); memset(SpawnPositionUsed,0,sizeof(SpawnPositionUsed));

View file

@ -1025,7 +1025,7 @@ int DoRipper2MoveHang(DSWActor* actor)
short w, nw; short w, nw;
// Don't keep clinging and going ever higher! // Don't keep clinging and going ever higher!
if (abs(sp->z - u->targetActor->s().z) > (4000<<4)) if (abs(sp->z - u->targetActor->spr.z) > (4000<<4))
return 0; return 0;
NewStateGroup(actor, u->ActorActionSet->Special[1]); NewStateGroup(actor, u->ActorActionSet->Special[1]);

View file

@ -975,9 +975,9 @@ void CollectPortals()
SWSectIterator it(sec); SWSectIterator it(sec);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
int tx = actor->s().x; int tx = actor->spr.x;
int ty = actor->s().y; int ty = actor->spr.y;
int tz = actor->s().z; int tz = actor->spr.z;
auto tsect = &sector[sec]; auto tsect = &sector[sec];
int match = FindViewSectorInScene(tsect, VIEW_LEVEL1); int match = FindViewSectorInScene(tsect, VIEW_LEVEL1);
@ -989,7 +989,7 @@ void CollectPortals()
// got something! // got something!
fp.othersector = sectnum(tsect); fp.othersector = sectnum(tsect);
fp.offset = { tx, ty, tz }; fp.offset = { tx, ty, tz };
fp.offset -= actor->s().pos; fp.offset -= actor->spr.pos;
goto nextfg; goto nextfg;
} }
} }
@ -1005,9 +1005,9 @@ void CollectPortals()
SWSectIterator it(sec); SWSectIterator it(sec);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
int tx = actor->s().x; int tx = actor->spr.x;
int ty = actor->s().y; int ty = actor->spr.y;
int tz = actor->s().z; int tz = actor->spr.z;
auto tsect = &sector[sec]; auto tsect = &sector[sec];
int match = FindViewSectorInScene(tsect, VIEW_LEVEL2); int match = FindViewSectorInScene(tsect, VIEW_LEVEL2);
@ -1019,7 +1019,7 @@ void CollectPortals()
// got something! // got something!
fp.othersector = sectnum(tsect); fp.othersector = sectnum(tsect);
fp.offset = { tx, ty, tz }; fp.offset = { tx, ty, tz };
fp.offset -= actor->s().pos; fp.offset -= actor->spr.pos;
goto nextcg; goto nextcg;
} }
} }

View file

@ -377,7 +377,7 @@ int DoSkullJump(DSWActor* actor)
int dist,a,b,c; int dist,a,b,c;
DISTANCE(sp->x, sp->y, u->targetActor->s().x, u->targetActor->s().y, dist, a, b, c); DISTANCE(sp->x, sp->y, u->targetActor->spr.x, u->targetActor->spr.y, dist, a, b, c);
if (dist < 1000 && if (dist < 1000 &&
SpriteOverlapZ(actor, u->targetActor, Z(32))) SpriteOverlapZ(actor, u->targetActor, Z(32)))
@ -444,7 +444,7 @@ int DoSkullWait(DSWActor* actor)
SPRITEp sp = &actor->s(); SPRITEp sp = &actor->s();
int a,b,c,dist; int a,b,c,dist;
DISTANCE(sp->x, sp->y, u->targetActor->s().x, u->targetActor->s().y, dist, a, b, c); DISTANCE(sp->x, sp->y, u->targetActor->spr.x, u->targetActor->spr.y, dist, a, b, c);
DoActorPickClosePlayer(actor); DoActorPickClosePlayer(actor);
@ -478,7 +478,7 @@ int DoSkullWait(DSWActor* actor)
if (dist < 8000) if (dist < 8000)
{ {
sp->ang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y); sp->ang = getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y);
sp->xvel = 128 + (RANDOM_P2(256<<8)>>8); sp->xvel = 128 + (RANDOM_P2(256<<8)>>8);
u->jump_speed = -700; u->jump_speed = -700;
NewStateGroup(actor, sg_SkullJump); NewStateGroup(actor, sg_SkullJump);
@ -774,7 +774,7 @@ int DoBettyJump(DSWActor* actor)
{ {
int dist,a,b,c; int dist,a,b,c;
DISTANCE(sp->x, sp->y, u->targetActor->s().x, u->targetActor->s().y, dist, a, b, c); DISTANCE(sp->x, sp->y, u->targetActor->spr.x, u->targetActor->spr.y, dist, a, b, c);
if (dist < 1000 && if (dist < 1000 &&
SpriteOverlapZ(actor, u->targetActor, Z(32))) SpriteOverlapZ(actor, u->targetActor, Z(32)))
@ -839,7 +839,7 @@ int DoBettyWait(DSWActor* actor)
SPRITEp sp = &actor->s(); SPRITEp sp = &actor->s();
int a,b,c,dist; int a,b,c,dist;
DISTANCE(sp->x, sp->y, u->targetActor->s().x, u->targetActor->s().y, dist, a, b, c); DISTANCE(sp->x, sp->y, u->targetActor->spr.x, u->targetActor->spr.y, dist, a, b, c);
DoActorPickClosePlayer(actor); DoActorPickClosePlayer(actor);
@ -873,7 +873,7 @@ int DoBettyWait(DSWActor* actor)
if (dist < 8000) if (dist < 8000)
{ {
sp->ang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y); sp->ang = getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y);
sp->xvel = 128 + (RANDOM_P2(256<<8)>>8); sp->xvel = 128 + (RANDOM_P2(256<<8)>>8);
u->jump_speed = -700; u->jump_speed = -700;
NewStateGroup(actor, sg_BettyJump); NewStateGroup(actor, sg_BettyJump);

View file

@ -223,7 +223,7 @@ bool TestSlidorMatchActive(short match)
void DoSlidorInterp(DSWActor* actor, INTERP_FUNC interp_func) void DoSlidorInterp(DSWActor* actor, INTERP_FUNC interp_func)
{ {
auto sp = actor->s().sector(); auto sp = actor->spr.sector();
// this code is just weird. // this code is just weird.
auto startWall = sp->firstWall(); auto startWall = sp->firstWall();
@ -275,7 +275,7 @@ void DoSlidorInterp(DSWActor* actor, INTERP_FUNC interp_func)
int DoSlidorMoveWalls(DSWActor* actor, int amt) int DoSlidorMoveWalls(DSWActor* actor, int amt)
{ {
auto sp = actor->s().sector(); auto sp = actor->spr.sector();
// this code is just weird. // this code is just weird.
auto startWall = sp->firstWall(); auto startWall = sp->firstWall();

View file

@ -534,7 +534,7 @@ void SWSoundEngine::CalcPosVel(int type, const void* source, const float pt[3],
} }
else if (type == SOURCE_Actor || type == SOURCE_Player) else if (type == SOURCE_Actor || type == SOURCE_Player)
{ {
vpos = type == SOURCE_Actor ? &((DSWActor*)source)->s().pos : &((PLAYERp)source)->pos; vpos = type == SOURCE_Actor ? &((DSWActor*)source)->spr.pos : &((PLAYERp)source)->pos;
FVector3 npos = GetSoundPos(vpos); FVector3 npos = GetSoundPos(vpos);
*pos = npos; *pos = npos;
@ -645,7 +645,7 @@ int _PlaySound(int num, DSWActor* actor, PLAYERp pp, vec3_t* pos, Voc3D_Flags fl
{ {
if (actor && !pos) if (actor && !pos)
{ {
pos = &actor->s().pos; pos = &actor->spr.pos;
actor = nullptr; actor = nullptr;
} }
else if (pp && !pos) else if (pp && !pos)

View file

@ -975,11 +975,11 @@ bool ActorTestSpawn(DSWActor* actor)
if (sp->statnum == STAT_DEFAULT && sp->lotag == TAG_SPAWN_ACTOR) if (sp->statnum == STAT_DEFAULT && sp->lotag == TAG_SPAWN_ACTOR)
{ {
auto actorNew = insertActor(sp->sector(), STAT_DEFAULT); auto actorNew = insertActor(sp->sector(), STAT_DEFAULT);
int t = actorNew->s().time; // must be preserved! int t = actorNew->spr.time; // must be preserved!
actorNew->s() = *sp; actorNew->s() = *sp;
actorNew->s().time = t; actorNew->spr.time = t;
change_actor_stat(actorNew, STAT_SPAWN_TRIGGER); change_actor_stat(actorNew, STAT_SPAWN_TRIGGER);
RESET(actorNew->s().cstat, CSTAT_SPRITE_BLOCK|CSTAT_SPRITE_BLOCK_HITSCAN); RESET(actorNew->spr.cstat, CSTAT_SPRITE_BLOCK|CSTAT_SPRITE_BLOCK_HITSCAN);
return false; return false;
} }
@ -1070,7 +1070,7 @@ int EnemyCheckSkill()
bool ActorSpawn(DSWActor* actor) bool ActorSpawn(DSWActor* actor)
{ {
bool ret = true; bool ret = true;
int picnum = actor->s().picnum; int picnum = actor->spr.picnum;
switch (picnum) switch (picnum)
{ {
case COOLIE_RUN_R0: case COOLIE_RUN_R0:
@ -1507,8 +1507,8 @@ void PreMapCombineFloors(void)
SWSectIterator it(dasect); SWSectIterator it(dasect);
while (auto jActor = it.Next()) while (auto jActor = it.Next())
{ {
jActor->s().x += dx; jActor->spr.x += dx;
jActor->s().y += dy; jActor->spr.y += dy;
} }
for (auto& wal : wallsofsector(dasect)) for (auto& wal : wallsofsector(dasect))
@ -1561,7 +1561,7 @@ void SpriteSetupPost(void)
SWStatIterator it(STAT_FLOOR_PAN); SWStatIterator it(STAT_FLOOR_PAN);
while (auto iActor = it.Next()) while (auto iActor = it.Next())
{ {
SWSectIterator it2(iActor->s().sector()); SWSectIterator it2(iActor->spr.sector());
while (auto jActor = it.Next()) while (auto jActor = it.Next())
{ {
ds = &jActor->s(); ds = &jActor->s();
@ -3557,7 +3557,7 @@ bool ItemSpotClear(DSWActor* actor, short statnum, short id)
SWSectIterator it(sip->sector()); SWSectIterator it(sip->sector());
while (auto itActor = it.Next()) while (auto itActor = it.Next())
{ {
if (itActor->s().statnum == statnum && itActor->u()->ID == id) if (itActor->spr.statnum == statnum && itActor->u()->ID == id)
{ {
found = true; found = true;
break; break;
@ -4377,7 +4377,7 @@ int NewStateGroup(DSWActor* actor, STATEp StateGroup[])
// turn anims off because people keep setting them in the // turn anims off because people keep setting them in the
// art file // art file
RESET(picanm[actor->s().picnum].sf, PICANM_ANIMTYPE_MASK); RESET(picanm[actor->spr.picnum].sf, PICANM_ANIMTYPE_MASK);
return 0; return 0;
} }
@ -4837,7 +4837,7 @@ int move_actor(DSWActor* actor, int xchange, int ychange, int zchange)
int DoStayOnFloor(DSWActor* actor) int DoStayOnFloor(DSWActor* actor)
{ {
actor->s().z = actor->s().sector()->floorz; actor->spr.z = actor->spr.sector()->floorz;
return 0; return 0;
} }
@ -6010,7 +6010,7 @@ KeyMain:
case ICON_FLAG: case ICON_FLAG:
{ {
if (sp->pal == pp->Actor()->s().pal) break; // Can't pick up your own flag! if (sp->pal == pp->Actor()->spr.pal) break; // Can't pick up your own flag!
PlaySound(DIGI_ITEM, actor, v3df_dontpan); PlaySound(DIGI_ITEM, actor, v3df_dontpan);

View file

@ -598,7 +598,7 @@ void TrackSetup(void)
it.Reset(STAT_TRACK + ndx); it.Reset(STAT_TRACK + ndx);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
if (actor->s().lotag == TRACK_START) if (actor->spr.lotag == TRACK_START)
{ {
ASSERT(t->NumPoints == 0); ASSERT(t->NumPoints == 0);
@ -639,7 +639,7 @@ void TrackSetup(void)
it.Reset(STAT_TRACK + ndx); it.Reset(STAT_TRACK + ndx);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
dist = Distance((tp + t->NumPoints - 1)->x, (tp + t->NumPoints - 1)->y, actor->s().x, actor->s().y); dist = Distance((tp + t->NumPoints - 1)->x, (tp + t->NumPoints - 1)->y, actor->spr.x, actor->spr.y);
if (dist < low_dist) if (dist < low_dist)
{ {
@ -683,7 +683,7 @@ DSWActor* FindBoundSprite(int tag)
SWStatIterator it(STAT_ST1); SWStatIterator it(STAT_ST1);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
if (actor->s().hitag == tag) if (actor->spr.hitag == tag)
{ {
return actor; return actor;
} }
@ -1667,8 +1667,8 @@ void MovePoints(SECTOR_OBJECTp sop, short delta_ang, int nx, int ny)
PlayerMove = false; PlayerMove = false;
// move child sprite along also // move child sprite along also
sop->sp_child->s().x = sop->xmid; sop->sp_child->spr.x = sop->xmid;
sop->sp_child->s().y = sop->ymid; sop->sp_child->spr.y = sop->ymid;
// setting floorz if need be // setting floorz if need be
@ -1861,7 +1861,7 @@ PlayerPart:
//pp->posz -= PLAYER_HEIGHT + Z(12); //pp->posz -= PLAYER_HEIGHT + Z(12);
DoPlayerZrange(pp); DoPlayerZrange(pp);
pp->posz = pp->loz - PLAYER_CRAWL_HEIGHT; pp->posz = pp->loz - PLAYER_CRAWL_HEIGHT;
pp->Actor()->s().z = pp->loz; pp->Actor()->spr.z = pp->loz;
} }
else else
{ {
@ -1872,7 +1872,7 @@ PlayerPart:
if (!TEST(pp->Flags, PF_JUMPING | PF_FALLING | PF_FLYING)) if (!TEST(pp->Flags, PF_JUMPING | PF_FALLING | PF_FLYING))
{ {
pp->posz = pp->loz - PLAYER_HEIGHT; pp->posz = pp->loz - PLAYER_HEIGHT;
pp->Actor()->s().z = pp->loz; pp->Actor()->spr.z = pp->loz;
} }
} }
} }
@ -2871,7 +2871,7 @@ void DoAutoTurretObject(SECTOR_OBJECTp sop)
if (shootp->statnum == STAT_SO_SHOOT_POINT) if (shootp->statnum == STAT_SO_SHOOT_POINT)
{ {
if (!FAFcansee(shootp->x, shootp->y, shootp->z-Z(4), shootp->sector(), if (!FAFcansee(shootp->x, shootp->y, shootp->z-Z(4), shootp->sector(),
u->targetActor->s().x, u->targetActor->s().y, ActorUpper(u->targetActor), u->targetActor->s().sector())) u->targetActor->spr.x, u->targetActor->spr.y, ActorUpper(u->targetActor), u->targetActor->spr.sector()))
{ {
return; return;
} }
@ -2907,8 +2907,8 @@ void DoAutoTurretObject(SECTOR_OBJECTp sop)
} }
} }
//sop->ang_tgt = getangle(sop->xmid - u->targetActor->s().x, sop->ymid - u->targetActor->s().y); //sop->ang_tgt = getangle(sop->xmid - u->targetActor->spr.x, sop->ymid - u->targetActor->spr.y);
sop->ang_tgt = getangle(u->targetActor->s().x - sop->xmid, u->targetActor->s().y - sop->ymid); sop->ang_tgt = getangle(u->targetActor->spr.x - sop->xmid, u->targetActor->spr.y - sop->ymid);
// get delta to target angle // get delta to target angle
delta_ang = getincangle(sop->ang, sop->ang_tgt); delta_ang = getincangle(sop->ang, sop->ang_tgt);

View file

@ -103,10 +103,10 @@ void VisViewChange(PLAYERp pp, int *vis)
auto own = GetOwner(actor); auto own = GetOwner(actor);
if (own != nullptr) if (own != nullptr)
{ {
x = own->s().x; x = own->spr.x;
y = own->s().y; y = own->spr.y;
z = own->s().z; z = own->spr.z;
sectp = own->s().sector(); sectp = own->spr.sector();
} }
else else
{ {

View file

@ -89,7 +89,7 @@ DSWActor* WarpPlane(int32_t* x, int32_t* y, int32_t* z, sectortype** sect)
if (sp_ceiling) if (sp_ceiling)
{ {
if (*z <= sp_ceiling->s().z) if (*z <= sp_ceiling->spr.z)
{ {
return WarpToArea(sp_ceiling, x, y, z, sect); return WarpToArea(sp_ceiling, x, y, z, sect);
} }
@ -97,7 +97,7 @@ DSWActor* WarpPlane(int32_t* x, int32_t* y, int32_t* z, sectortype** sect)
if (sp_floor) if (sp_floor)
{ {
if (*z >= sp_floor->s().z) if (*z >= sp_floor->spr.z)
{ {
return WarpToArea(sp_floor, x, y, z, sect); return WarpToArea(sp_floor, x, y, z, sect);
} }

View file

@ -3834,7 +3834,7 @@ int DoVomit(DSWActor* actor)
if (u->coll.type == kHitSprite) if (u->coll.type == kHitSprite)
{ {
if (TEST(u->coll.actor()->s().extra, SPRX_PLAYER_OR_ENEMY)) if (TEST(u->coll.actor()->spr.extra, SPRX_PLAYER_OR_ENEMY))
{ {
DoDamage(u->coll.actor(), actor); DoDamage(u->coll.actor(), actor);
} }
@ -4321,7 +4321,7 @@ bool WeaponMoveHit(DSWActor* actor)
if (u->lowActor) if (u->lowActor)
{ {
if (u->lowActor->s().lotag == TAG_SPRITE_HIT_MATCH) if (u->lowActor->spr.lotag == TAG_SPRITE_HIT_MATCH)
{ {
if (MissileHitMatch(actor, -1, u->lowActor)) if (MissileHitMatch(actor, -1, u->lowActor))
return true; return true;
@ -4343,7 +4343,7 @@ bool WeaponMoveHit(DSWActor* actor)
// hit a floor sprite // hit a floor sprite
if (u->highActor) if (u->highActor)
{ {
if (u->highActor->s().lotag == TAG_SPRITE_HIT_MATCH) if (u->highActor->spr.lotag == TAG_SPRITE_HIT_MATCH)
{ {
if (MissileHitMatch(actor, -1, u->highActor)) if (MissileHitMatch(actor, -1, u->highActor))
return true; return true;
@ -5145,7 +5145,7 @@ int ActorHealth(DSWActor* actor, short amt)
PlaySound(DIGI_NINJACHOKE, actor, v3df_follow); PlaySound(DIGI_NINJACHOKE, actor, v3df_follow);
InitPlasmaFountain(nullptr, actor); InitPlasmaFountain(nullptr, actor);
InitBloodSpray(actor,false,105); InitBloodSpray(actor,false,105);
sp->ang = NORM_ANGLE(getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y) + 1024); sp->ang = NORM_ANGLE(getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y) + 1024);
RESET(sp->cstat, CSTAT_SPRITE_YFLIP); RESET(sp->cstat, CSTAT_SPRITE_YFLIP);
if (sw_ninjahack) if (sw_ninjahack)
NewStateGroup(actor, sg_NinjaHariKari); NewStateGroup(actor, sg_NinjaHariKari);
@ -5285,7 +5285,7 @@ int ActorStdMissile(DSWActor* actor, DSWActor* weapActor)
if (goal != nullptr) if (goal != nullptr)
{ {
// attempt to see if it was killed // attempt to see if it was killed
ASSERT(goal->s().insector()); ASSERT(goal->spr.insector());
if (goal->hasU()) if (goal->hasU())
RESET(goal->u()->Flags, SPR_TARGETED); RESET(goal->u()->Flags, SPR_TARGETED);
} }
@ -7200,7 +7200,7 @@ static void DoHitscanDamage(DSWActor* weaponActor, DSWActor* hitActor)
for (stat = 0; stat < SIZ(StatDamageList); stat++) for (stat = 0; stat < SIZ(StatDamageList); stat++)
{ {
if (hitActor->s().statnum == StatDamageList[stat]) if (hitActor->spr.statnum == StatDamageList[stat])
{ {
DoDamage(hitActor, weaponActor); DoDamage(hitActor, weaponActor);
break; break;
@ -7665,10 +7665,10 @@ int DoStar(DSWActor* actor)
} }
if (u->lowActor) if (u->lowActor)
if (u->lowActor->s().lotag == TAG_SPRITE_HIT_MATCH) if (u->lowActor->spr.lotag == TAG_SPRITE_HIT_MATCH)
break; break;
if (u->highActor) if (u->highActor)
if (u->highActor->s().lotag == TAG_SPRITE_HIT_MATCH) if (u->highActor->spr.lotag == TAG_SPRITE_HIT_MATCH)
break; break;
ScaleSpriteVector(actor, 58000); ScaleSpriteVector(actor, 58000);
@ -9625,7 +9625,7 @@ int DoRocket(DSWActor* actor)
if ((u->FlagOwner -= ACTORMOVETICS)<=0 && u->spal == 20) if ((u->FlagOwner -= ACTORMOVETICS)<=0 && u->spal == 20)
{ {
DISTANCE(sp->x, sp->y, u->targetActor->s().x, u->targetActor->s().y, dist, a, b, c); DISTANCE(sp->x, sp->y, u->targetActor->spr.x, u->targetActor->spr.y, dist, a, b, c);
u->FlagOwner = dist>>6; u->FlagOwner = dist>>6;
// Special warn sound attached to each seeker spawned // Special warn sound attached to each seeker spawned
PlaySound(DIGI_MINEBEEP, actor, v3df_follow); PlaySound(DIGI_MINEBEEP, actor, v3df_follow);
@ -11943,7 +11943,7 @@ int DoSerpRing(DSWActor* actor)
!TEST(tu->PlayerP->Flags, PF_DEAD)) !TEST(tu->PlayerP->Flags, PF_DEAD))
{ {
u->targetActor = ou->targetActor; u->targetActor = ou->targetActor;
DISTANCE(sp->x, sp->y, u->targetActor->s().x, u->targetActor->s().y, dist, a,b,c); DISTANCE(sp->x, sp->y, u->targetActor->spr.x, u->targetActor->spr.y, dist, a,b,c);
// if ((dist ok and random ok) OR very few skulls left) // if ((dist ok and random ok) OR very few skulls left)
if ((dist < 18000 && (RANDOM_P2(2048<<5)>>5) < 16) || ou->Counter < 4) if ((dist < 18000 && (RANDOM_P2(2048<<5)>>5) < 16) || ou->Counter < 4)
@ -11956,7 +11956,7 @@ int DoSerpRing(DSWActor* actor)
{ {
extern STATEp sg_SkullJump[]; extern STATEp sg_SkullJump[];
u->ID = SKULL_R0; u->ID = SKULL_R0;
sp->ang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y); sp->ang = getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y);
sp->xvel = dist>>5; sp->xvel = dist>>5;
sp->xvel += DIV2(sp->xvel); sp->xvel += DIV2(sp->xvel);
sp->xvel += (RANDOM_P2(128<<8)>>8); sp->xvel += (RANDOM_P2(128<<8)>>8);
@ -11987,7 +11987,7 @@ int InitLavaThrow(DSWActor* actor)
short w; short w;
// get angle to player and also face player when attacking // get angle to player and also face player when attacking
sp->ang = nang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y); sp->ang = nang = getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y);
nx = sp->x; nx = sp->x;
ny = sp->y; ny = sp->y;
@ -12026,7 +12026,7 @@ int InitLavaThrow(DSWActor* actor)
MissileSetPos(actorNew, DoLavaBoulder, 1200); MissileSetPos(actorNew, DoLavaBoulder, 1200);
// find the distance to the target (player) // find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(wp->x, wp->y, u->targetActor->spr.x, u->targetActor->spr.y);
if (dist != 0) if (dist != 0)
wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist; wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist;
@ -12336,7 +12336,7 @@ int InitEnemyNapalm(DSWActor* actor)
} }
// find the distance to the target (player) // find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(wp->x, wp->y, u->targetActor->spr.x, u->targetActor->spr.y);
if (dist != 0) if (dist != 0)
wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist; wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist;
@ -12438,7 +12438,7 @@ int InitEnemyMirv(DSWActor* actor)
MissileSetPos(actorNew, DoMirv, 600); MissileSetPos(actorNew, DoMirv, 600);
// find the distance to the target (player) // find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(wp->x, wp->y, u->targetActor->spr.x, u->targetActor->spr.y);
if (dist != 0) if (dist != 0)
wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist; wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist;
@ -12897,7 +12897,7 @@ int InitSumoNapalm(DSWActor* actor)
} }
// find the distance to the target (player) // find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(wp->x, wp->y, u->targetActor->spr.x, u->targetActor->spr.y);
if (dist != 0) if (dist != 0)
wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist; wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist;
@ -14913,7 +14913,7 @@ int InitSerpSpell(DSWActor* actor)
for (i = 0; i < 2; i++) for (i = 0; i < 2; i++)
{ {
sp->ang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y); sp->ang = getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y);
auto actorNew = SpawnActor(STAT_MISSILE, SERP_METEOR, &sg_SerpMeteor[0][0], sp->sector(), auto actorNew = SpawnActor(STAT_MISSILE, SERP_METEOR, &sg_SerpMeteor[0][0], sp->sector(),
sp->x, sp->y, sp->z, sp->ang, 1500); sp->x, sp->y, sp->z, sp->ang, 1500);
@ -14949,7 +14949,7 @@ int InitSerpSpell(DSWActor* actor)
np->ang = NORM_ANGLE(np->ang - lat_ang[i]); np->ang = NORM_ANGLE(np->ang - lat_ang[i]);
// find the distance to the target (player) // find the distance to the target (player)
dist = Distance(np->x, np->y, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(np->x, np->y, u->targetActor->spr.x, u->targetActor->spr.y);
if (dist != 0) if (dist != 0)
np->zvel = (np->xvel * (ActorUpper(u->targetActor) - np->z)) / dist; np->zvel = (np->xvel * (ActorUpper(u->targetActor) - np->z)) / dist;
@ -15025,7 +15025,7 @@ int InitSerpMonstSpell(DSWActor* actor)
for (i = 0; i < 1; i++) for (i = 0; i < 1; i++)
{ {
sp->ang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y); sp->ang = getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y);
auto actorNew = SpawnActor(STAT_MISSILE, SERP_METEOR, &sg_SerpMeteor[0][0], sp->sector(), auto actorNew = SpawnActor(STAT_MISSILE, SERP_METEOR, &sg_SerpMeteor[0][0], sp->sector(),
sp->x, sp->y, sp->z, sp->ang, 500); sp->x, sp->y, sp->z, sp->ang, 500);
@ -15061,7 +15061,7 @@ int InitSerpMonstSpell(DSWActor* actor)
np->ang = NORM_ANGLE(np->ang - lat_ang[i]); np->ang = NORM_ANGLE(np->ang - lat_ang[i]);
// find the distance to the target (player) // find the distance to the target (player)
dist = Distance(np->x, np->y, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(np->x, np->y, u->targetActor->spr.x, u->targetActor->spr.y);
if (dist != 0) if (dist != 0)
np->zvel = (np->xvel * (ActorUpper(u->targetActor) - np->z)) / dist; np->zvel = (np->xvel * (ActorUpper(u->targetActor) - np->z)) / dist;
@ -15100,7 +15100,7 @@ int InitEnemyRocket(DSWActor* actor)
PlaySound(DIGI_NINJARIOTATTACK, actor, v3df_none); PlaySound(DIGI_NINJARIOTATTACK, actor, v3df_none);
// get angle to player and also face player when attacking // get angle to player and also face player when attacking
sp->ang = nang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y); sp->ang = nang = getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y);
nx = sp->x; nx = sp->x;
ny = sp->y; ny = sp->y;
@ -15108,7 +15108,7 @@ int InitEnemyRocket(DSWActor* actor)
// Spawn a shot // Spawn a shot
auto actorNew = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R2, &s_Rocket[0][0], sp->sector(), auto actorNew = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R2, &s_Rocket[0][0], sp->sector(),
nx, ny, nz-Z(8), u->targetActor->s().ang, NINJA_BOLT_VELOCITY); nx, ny, nz-Z(8), u->targetActor->spr.ang, NINJA_BOLT_VELOCITY);
wp = &actorNew->s(); wp = &actorNew->s();
wu = actorNew->u(); wu = actorNew->u();
@ -15146,7 +15146,7 @@ int InitEnemyRocket(DSWActor* actor)
MissileSetPos(actorNew, DoBoltThinMan, 400); MissileSetPos(actorNew, DoBoltThinMan, 400);
// find the distance to the target (player) // find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(wp->x, wp->y, u->targetActor->spr.x, u->targetActor->spr.y);
if (dist != 0) if (dist != 0)
wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist; wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist;
@ -15182,7 +15182,7 @@ int InitEnemyRail(DSWActor* actor)
PlaySound(DIGI_RAILFIRE, actor, v3df_dontpan|v3df_doppler); PlaySound(DIGI_RAILFIRE, actor, v3df_dontpan|v3df_doppler);
// get angle to player and also face player when attacking // get angle to player and also face player when attacking
sp->ang = nang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y); sp->ang = nang = getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y);
// add a bit of randomness // add a bit of randomness
if (RANDOM_P2(1024) < 512) if (RANDOM_P2(1024) < 512)
@ -15235,7 +15235,7 @@ int InitEnemyRail(DSWActor* actor)
} }
// find the distance to the target (player) // find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(wp->x, wp->y, u->targetActor->spr.x, u->targetActor->spr.y);
if (dist != 0) if (dist != 0)
wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist; wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist;
@ -15271,7 +15271,7 @@ int InitZillaRocket(DSWActor* actor)
PlaySound(DIGI_NINJARIOTATTACK, actor, v3df_none); PlaySound(DIGI_NINJARIOTATTACK, actor, v3df_none);
// get angle to player and also face player when attacking // get angle to player and also face player when attacking
sp->ang = nang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y); sp->ang = nang = getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y);
for (i = 0; i < (int)SIZ(mp); i++) for (i = 0; i < (int)SIZ(mp); i++)
{ {
@ -15281,7 +15281,7 @@ int InitZillaRocket(DSWActor* actor)
// Spawn a shot // Spawn a shot
auto actorNew = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R2, &s_Rocket[0][0], sp->sector(), auto actorNew = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R2, &s_Rocket[0][0], sp->sector(),
nx, ny, nz-Z(8), u->targetActor->s().ang, NINJA_BOLT_VELOCITY); nx, ny, nz-Z(8), u->targetActor->spr.ang, NINJA_BOLT_VELOCITY);
wp = &actorNew->s(); wp = &actorNew->s();
wu = actorNew->u(); wu = actorNew->u();
@ -15321,7 +15321,7 @@ int InitZillaRocket(DSWActor* actor)
MissileSetPos(actorNew, DoBoltThinMan, mp[i].dist_out); MissileSetPos(actorNew, DoBoltThinMan, mp[i].dist_out);
// find the distance to the target (player) // find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(wp->x, wp->y, u->targetActor->spr.x, u->targetActor->spr.y);
if (dist != 0) if (dist != 0)
wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist; wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist;
@ -15338,7 +15338,7 @@ int InitEnemyStar(DSWActor* actor)
int nx, ny, nz, dist, nang; int nx, ny, nz, dist, nang;
// get angle to player and also face player when attacking // get angle to player and also face player when attacking
sp->ang = nang = NORM_ANGLE(getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y)); sp->ang = nang = NORM_ANGLE(getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y));
nx = sp->x; nx = sp->x;
ny = sp->y; ny = sp->y;
@ -15346,7 +15346,7 @@ int InitEnemyStar(DSWActor* actor)
// Spawn a shot // Spawn a shot
auto actorNew = SpawnActor(STAT_MISSILE, STAR1, s_Star, sp->sector(), auto actorNew = SpawnActor(STAT_MISSILE, STAR1, s_Star, sp->sector(),
nx, ny, nz, u->targetActor->s().ang, NINJA_STAR_VELOCITY); nx, ny, nz, u->targetActor->spr.ang, NINJA_STAR_VELOCITY);
wp = &actorNew->s(); wp = &actorNew->s();
wu = actorNew->u(); wu = actorNew->u();
@ -15366,7 +15366,7 @@ int InitEnemyStar(DSWActor* actor)
MissileSetPos(actorNew, DoStar, 400); MissileSetPos(actorNew, DoStar, 400);
// find the distance to the target (player) // find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(wp->x, wp->y, u->targetActor->spr.x, u->targetActor->spr.y);
if (dist != 0) if (dist != 0)
wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist; wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist;
@ -15383,7 +15383,7 @@ int InitEnemyCrossbow(DSWActor* actor)
int nx, ny, nz, dist, nang; int nx, ny, nz, dist, nang;
// get angle to player and also face player when attacking // get angle to player and also face player when attacking
sp->ang = nang = NORM_ANGLE(getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y)); sp->ang = nang = NORM_ANGLE(getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y));
nx = sp->x; nx = sp->x;
ny = sp->y; ny = sp->y;
@ -15391,7 +15391,7 @@ int InitEnemyCrossbow(DSWActor* actor)
// Spawn a shot // Spawn a shot
auto actorNew = SpawnActor(STAT_MISSILE, CROSSBOLT, &s_CrossBolt[0][0], sp->sector(), auto actorNew = SpawnActor(STAT_MISSILE, CROSSBOLT, &s_CrossBolt[0][0], sp->sector(),
nx, ny, nz, u->targetActor->s().ang, 800); nx, ny, nz, u->targetActor->spr.ang, 800);
wp = &actorNew->s(); wp = &actorNew->s();
wu = actorNew->u(); wu = actorNew->u();
@ -15416,7 +15416,7 @@ int InitEnemyCrossbow(DSWActor* actor)
MissileSetPos(actorNew, DoStar, 400); MissileSetPos(actorNew, DoStar, 400);
// find the distance to the target (player) // find the distance to the target (player)
dist = Distance(wp->x, wp->y, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(wp->x, wp->y, u->targetActor->spr.x, u->targetActor->spr.y);
if (dist != 0) if (dist != 0)
wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist; wu->zchange = wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - wp->z)) / dist;
@ -15437,7 +15437,7 @@ int InitSkelSpell(DSWActor* actor)
PlaySound(DIGI_SPELEC, actor, v3df_none); PlaySound(DIGI_SPELEC, actor, v3df_none);
// get angle to player and also face player when attacking // get angle to player and also face player when attacking
sp->ang = nang = NORM_ANGLE(getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y)); sp->ang = nang = NORM_ANGLE(getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y));
nx = sp->x; nx = sp->x;
ny = sp->y; ny = sp->y;
@ -15445,7 +15445,7 @@ int InitSkelSpell(DSWActor* actor)
// Spawn a shot // Spawn a shot
auto actorNew = SpawnActor(STAT_MISSILE, ELECTRO_ENEMY, s_Electro, sp->sector(), auto actorNew = SpawnActor(STAT_MISSILE, ELECTRO_ENEMY, s_Electro, sp->sector(),
nx, ny, nz, u->targetActor->s().ang, SKEL_ELECTRO_VELOCITY); nx, ny, nz, u->targetActor->spr.ang, SKEL_ELECTRO_VELOCITY);
wp = &actorNew->s(); wp = &actorNew->s();
wu = actorNew->u(); wu = actorNew->u();
@ -15460,7 +15460,7 @@ int InitSkelSpell(DSWActor* actor)
SET(wp->cstat, CSTAT_SPRITE_YCENTER); SET(wp->cstat, CSTAT_SPRITE_YCENTER);
// find the distance to the target (player) // find the distance to the target (player)
dist = Distance(nx, ny, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(nx, ny, u->targetActor->spr.x, u->targetActor->spr.y);
if (dist != 0) if (dist != 0)
wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - nz)) / dist; wp->zvel = (wp->xvel * (ActorUpper(u->targetActor) - nz)) / dist;
@ -15483,7 +15483,7 @@ int InitCoolgFire(DSWActor* actor)
int nx, ny, nz, dist, nang; int nx, ny, nz, dist, nang;
// get angle to player and also face player when attacking // get angle to player and also face player when attacking
sp->ang = nang = NORM_ANGLE(getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y)); sp->ang = nang = NORM_ANGLE(getangle(u->targetActor->spr.x - sp->x, u->targetActor->spr.y - sp->y));
nx = sp->x; nx = sp->x;
ny = sp->y; ny = sp->y;
@ -15496,7 +15496,7 @@ int InitCoolgFire(DSWActor* actor)
PlaySound(DIGI_CGMAGIC, actor, v3df_follow); PlaySound(DIGI_CGMAGIC, actor, v3df_follow);
auto actorNew = SpawnActor(STAT_MISSILE, COOLG_FIRE, s_CoolgFire, sp->sector(), auto actorNew = SpawnActor(STAT_MISSILE, COOLG_FIRE, s_CoolgFire, sp->sector(),
nx, ny, nz, u->targetActor->s().ang, COOLG_FIRE_VELOCITY); nx, ny, nz, u->targetActor->spr.ang, COOLG_FIRE_VELOCITY);
wp = &actorNew->s(); wp = &actorNew->s();
wu = actorNew->u(); wu = actorNew->u();
@ -15519,7 +15519,7 @@ int InitCoolgFire(DSWActor* actor)
PlaySound(DIGI_MAGIC1, actorNew, v3df_follow|v3df_doppler); PlaySound(DIGI_MAGIC1, actorNew, v3df_follow|v3df_doppler);
// find the distance to the target (player) // find the distance to the target (player)
dist = Distance(nx, ny, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(nx, ny, u->targetActor->spr.x, u->targetActor->spr.y);
if (dist != 0) if (dist != 0)
// (velocity * difference between the target and the throwing star) / // (velocity * difference between the target and the throwing star) /
@ -19102,7 +19102,7 @@ void QueueGeneric(DSWActor* actor, short pic)
ChangeActorSect(GenericQueue[GenericQueueHead], sp->sector()); ChangeActorSect(GenericQueue[GenericQueueHead], sp->sector());
KillActor(actor); KillActor(actor);
actor = GenericQueue[GenericQueueHead]; actor = GenericQueue[GenericQueueHead];
ASSERT(actor->s().statnum != MAXSTATUS); ASSERT(actor->spr.statnum != MAXSTATUS);
} }
sp = &actor->s(); sp = &actor->s();
@ -19604,7 +19604,7 @@ void QueueLoWangs(DSWActor* actor)
// move old sprite to new sprite's place // move old sprite to new sprite's place
SetActorZ(LoWangsQueue[LoWangsQueueHead], &sp->pos); SetActorZ(LoWangsQueue[LoWangsQueueHead], &sp->pos);
NewSprite = LoWangsQueue[LoWangsQueueHead]; NewSprite = LoWangsQueue[LoWangsQueueHead];
ASSERT(NewSprite->s().statnum != MAXSTATUS); ASSERT(NewSprite->spr.statnum != MAXSTATUS);
} }
// Point passed in sprite to ps // Point passed in sprite to ps