- use DCoreActor::insector instead of spritetype::insector.

This commit is contained in:
Christoph Oelckers 2021-12-30 16:24:51 +01:00
parent eb00fe52db
commit af6ca40e3d
19 changed files with 51 additions and 59 deletions

View file

@ -49,7 +49,7 @@ public:
bool insector() const
{
return spr.insector();
return spr.sectp != nullptr;
}
};

View file

@ -529,7 +529,6 @@ struct spritetypebase
sectortype* sector() const;
int sectno() const;
bool insector() const;
void setsector(sectortype*);
void setsector(int);
};
@ -649,13 +648,6 @@ inline void spritetypebase::setsector(int sec)
sectp = validSectorIndex(sec)? &::sector[sec] : nullptr;
}
inline bool spritetypebase::insector() const
{
return sectp != nullptr;
}
inline sectortype* walltype::nextSector() const
{
return !validSectorIndex(nextsector)? nullptr : &::sector[nextsector];

View file

@ -5881,7 +5881,7 @@ static void actCheckExplosion()
{
if (gPhysSpritesList[i] == nullptr) continue;
DBloodActor* physactor = gPhysSpritesList[i];
if (!physactor->spr.insector() || (physactor->spr.flags & kHitagFree) != 0) continue;
if (!physactor->insector() || (physactor->spr.flags & kHitagFree) != 0) continue;
if (!CheckSector(sectorMap, physactor) || !CheckProximity(physactor, x, y, z, pSector, radius)) continue;
else debrisConcuss(Owner, i, x, y, z, pExplodeInfo->dmgType);
@ -5895,7 +5895,7 @@ static void actCheckExplosion()
if (gImpactSpritesList[i] == nullptr) continue;
DBloodActor* impactactor = gImpactSpritesList[i];
if (!impactactor->hasX() || !impactactor->spr.insector() || (impactactor->spr.flags & kHitagFree) != 0) continue;
if (!impactactor->hasX() || !impactactor->insector() || (impactactor->spr.flags & kHitagFree) != 0) continue;
if (!CheckSector(sectorMap, impactactor) || !CheckProximity(impactactor, x, y, z, pSector, radius))
continue;

View file

@ -268,7 +268,7 @@ void CFX::fxProcess(void)
void fxSpawnBlood(DBloodActor* actor, int)
{
if (!actor->spr.insector())
if (!actor->insector())
return;
auto pSector = actor->spr.sector();
if (!FindSector(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, &pSector))
@ -294,7 +294,7 @@ void fxSpawnBlood(DBloodActor* actor, int)
void fxSpawnPodStuff(DBloodActor* actor, int)
{
if (!actor->spr.insector())
if (!actor->insector())
return;
auto pSector = actor->spr.sector();
if (!FindSector(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, &pSector))

View file

@ -424,7 +424,7 @@ void GibSprite(DBloodActor* actor, GIBTYPE nGibType, CGibPosition* pPos, CGibVel
assert(actor != NULL);
assert(nGibType >= 0 && nGibType < kGibMax);
if (!actor->spr.insector())
if (!actor->insector())
return;
GIBLIST* pGib = &gibList[nGibType];
for (int i = 0; i < pGib->Kills; i++)

View file

@ -713,7 +713,7 @@ void nnExtInitModernStuff(TArray<DBloodActor*>& actors)
actor->xspr.Proximity = false;
// very quick fix for floor sprites with Touch trigger flag if their Z is equals sector floorz / ceilgz
if (actor->spr.insector() && actor->xspr.Touch && (actor->spr.cstat & CSTAT_SPRITE_ALIGNMENT_FLOOR)) {
if (actor->insector() && actor->xspr.Touch && (actor->spr.cstat & CSTAT_SPRITE_ALIGNMENT_FLOOR)) {
if (actor->spr.pos.Z == actor->spr.sector()->floorz) actor->spr.pos.Z--;
else if (actor->spr.pos.Z == actor->spr.sector()->ceilingz) actor->spr.pos.Z++;
}
@ -1127,7 +1127,7 @@ void nnExtProcessSuperSprites()
}
}
else if (windactor->spr.insector())
else if (windactor->insector())
{
sectortype* pSect = windactor->spr.sector();
XSECTOR* pXSector = (pSect->hasX()) ? &pSect->xs() : nullptr;
@ -3094,7 +3094,7 @@ void useEffectGen(DBloodActor* sourceactor, DBloodActor* actor)
break;
case 3:
case 4:
if (!actor->spr.insector()) pos = top;
if (!actor->insector()) pos = top;
else pos = (sourceactor->xspr.data4 == 3) ? actor->spr.sector()->floorz : actor->spr.sector()->ceilingz;
break;
default:
@ -3498,7 +3498,7 @@ void useSeqSpawnerGen(DBloodActor* sourceactor, int objType, sectortype* pSector
case OBJ_SPRITE:
{
if (sourceactor->xspr.data2 <= 0) seqKill(iactor);
else if (iactor->spr.insector())
else if (iactor->insector())
{
if (sourceactor->xspr.data3 > 0)
{
@ -3522,7 +3522,7 @@ void useSeqSpawnerGen(DBloodActor* sourceactor, int objType, sectortype* pSector
break;
case 5:
case 6:
if (!iactor->spr.insector()) spawned->spr.pos.Z = top;
if (!iactor->insector()) spawned->spr.pos.Z = top;
else spawned->spr.pos.Z = (sourceactor->xspr.data3 == 5) ? spawned->sector()->floorz : spawned->sector()->ceilingz;
break;
}
@ -4323,7 +4323,7 @@ bool condCheckSprite(DBloodActor* aCond, int cmpOp, bool PUSH)
else if (PUSH) condPush(aCond, objActor->GetOwner());
return true;
case 20: // stays in a sector?
if (!objActor->spr.insector()) return false;
if (!objActor->insector()) return false;
else if (PUSH) condPush(aCond, objActor->spr.sector());
return true;
case 25:
@ -5454,7 +5454,7 @@ bool modernTypeOperateSprite(DBloodActor* actor, EVENT& event)
[[fallthrough]];
case kCmdRepeat:
if (actor->xspr.txID > 0) modernTypeSendCommand(actor, actor->xspr.txID, (COMMAND_ID)actor->xspr.command);
else if (actor->xspr.data1 == 0 && actor->spr.insector()) useSpriteDamager(actor, OBJ_SECTOR, actor->spr.sector(), nullptr);
else if (actor->xspr.data1 == 0 && actor->insector()) useSpriteDamager(actor, OBJ_SECTOR, actor->spr.sector(), nullptr);
else if (actor->xspr.data1 >= 666 && actor->xspr.data1 < 669) useSpriteDamager(actor, -1, nullptr, nullptr);
else
{
@ -6462,7 +6462,7 @@ void useSlopeChanger(DBloodActor* sourceactor, int objType, sectortype* pSect, D
case 1:
case 2:
case 3:
if (!objActor->spr.insector()) break;
if (!objActor->insector()) break;
switch (sourceactor->xspr.data4)
{
case 1: sprite2sectorSlope(objActor, objActor->spr.sector(), 0, flag2); break;
@ -8080,7 +8080,7 @@ DBloodActor* aiPatrolSearchTargets(DBloodActor* actor)
if (pPlayer->actor != emitterActor && emitterActor->GetOwner() != actor)
{
if (!emitterActor->spr.insector()) return false;
if (!emitterActor->insector()) return false;
searchsect = emitterActor->spr.sector();
}
}
@ -8860,7 +8860,7 @@ void callbackGenDudeUpdate(DBloodActor* actor, sectortype*) // 24
void clampSprite(DBloodActor* actor, int which)
{
int zTop, zBot;
if (actor->spr.insector())
if (actor->insector())
{
GetActorExtents(actor, &zTop, &zBot);
if (which & 0x01)

View file

@ -1523,7 +1523,7 @@ void OperateTeleport(sectortype* pSector)
assert(destactor != nullptr);
assert(destactor->spr.statnum == kStatMarker);
assert(destactor->spr.type == kMarkerWarpDest);
assert(destactor->spr.insector());
assert(destactor->insector());
BloodSectIterator it(pSector);
while (auto actor = it.Next())
{

View file

@ -217,7 +217,7 @@ int CheckLink(DBloodActor* actor)
{
aLower = aUpper->GetOwner();
assert(aLower);
assert(aLower->spr.insector());
assert(aLower->insector());
ChangeActorSect(actor, aLower->spr.sector());
actor->spr.pos.X += aLower->spr.pos.X - aUpper->spr.pos.X;
actor->spr.pos.Y += aLower->spr.pos.Y - aUpper->spr.pos.Y;
@ -242,7 +242,7 @@ int CheckLink(DBloodActor* actor)
{
aUpper = aLower->GetOwner();
assert(aUpper);
assert(aUpper->spr.insector());
assert(aUpper->insector());
ChangeActorSect(actor, aUpper->spr.sector());
actor->spr.pos.X += aUpper->spr.pos.X - aLower->spr.pos.X;
actor->spr.pos.Y += aUpper->spr.pos.Y - aLower->spr.pos.Y;
@ -280,7 +280,7 @@ int CheckLink(int* x, int* y, int* z, sectortype** pSector)
{
aLower = aUpper->GetOwner();
assert(aLower);
assert(aLower->spr.insector());
assert(aLower->insector());
*pSector = aLower->spr.sector();
*x += aLower->spr.pos.X - aUpper->spr.pos.X;
*y += aLower->spr.pos.Y - aUpper->spr.pos.Y;

View file

@ -516,7 +516,7 @@ void moveplayers(void)
}
}
if (act->spr.insector())
if (act->insector())
{
if (act->spr.sector()->ceilingstat & CSTAT_SECTOR_SKY)
act->spr.shade += (act->spr.sector()->ceilingshade - act->spr.shade) >> 1;
@ -2139,7 +2139,7 @@ bool money(DDukeActor* actor, int BLOODPOOL)
if ((krand() & 3) == 0)
SetActor(actor, actor->spr.pos);
if (!actor->spr.insector())
if (!actor->insector())
{
deletesprite(actor);
return false;
@ -2200,7 +2200,7 @@ bool jibs(DDukeActor *actor, int JIBS6, bool timeout, bool callsetsprite, bool f
if (callsetsprite) SetActor(actor, actor->spr.pos);
// this was after the slope calls, but we should avoid calling that for invalid sectors.
if (!actor->spr.insector())
if (!actor->insector())
{
deletesprite(actor);
return false;
@ -2263,7 +2263,7 @@ bool jibs(DDukeActor *actor, int JIBS6, bool timeout, bool callsetsprite, bool f
}
if (actor->temp_data[2] == 0)
{
if (!actor->spr.insector())
if (!actor->insector())
{
deletesprite(actor);
return false;
@ -2392,7 +2392,7 @@ void shell(DDukeActor* actor, bool morecheck)
ssp(actor, CLIPMASK0);
if (!actor->spr.insector() || morecheck)
if (!actor->insector() || morecheck)
{
deletesprite(actor);
return;
@ -2445,7 +2445,7 @@ void glasspieces(DDukeActor* actor)
makeitfall(actor);
if (actor->spr.zvel > 4096) actor->spr.zvel = 4096;
if (!actor->spr.insector())
if (!actor->insector())
{
deletesprite(actor);
return;

View file

@ -1676,7 +1676,7 @@ static void weaponcommon_d(DDukeActor* proj)
if (FindDistance2D(proj->spr.pos.vec2 - proj->temp_actor->spr.pos.vec2) < 256)
coll.setSprite(proj->temp_actor);
if (!proj->spr.insector())
if (!proj->insector())
{
deletesprite(proj);
return;
@ -2633,7 +2633,7 @@ static void flamethrowerflame(DDukeActor *actor)
movesprite_ex(actor, MulScale(xvel, bcos(actor->spr.ang), 14),
MulScale(xvel, bsin(actor->spr.ang), 14), actor->spr.zvel, CLIPMASK1, coll);
if (!actor->spr.insector())
if (!actor->insector())
{
deletesprite(actor);
return;
@ -3138,7 +3138,7 @@ void moveexplosions_d(void) // STATNUM 5
DukeStatIterator it(STAT_MISC);
while (auto act = it.Next())
{
if (!act->spr.insector() || act->spr.xrepeat == 0)
if (!act->insector() || act->spr.xrepeat == 0)
{
deletesprite(act);
continue;

View file

@ -1381,7 +1381,7 @@ static void weaponcommon_r(DDukeActor *proj)
if (FindDistance2D(proj->spr.pos.vec2 - proj->temp_actor->spr.pos.vec2) < 256)
coll.setSprite(proj->temp_actor);
if (!proj->spr.insector()) // || (isRR() && proj->spr.sector()->filler == 800))
if (!proj->insector()) // || (isRR() && proj->spr.sector()->filler == 800))
{
deletesprite(proj);
return;
@ -2807,7 +2807,7 @@ void moveactors_r(void)
{
bool deleteafterexecute = false; // taking a cue here from RedNukem to not run scripts on deleted sprites.
if( act->spr.xrepeat == 0 || !act->spr.insector())
if( act->spr.xrepeat == 0 || !act->insector())
{
deletesprite(act);
continue;
@ -3075,7 +3075,7 @@ void moveexplosions_r(void) // STATNUM 5
t = &act->temp_data[0];
auto sectp = act->spr.sector();
if (!act->spr.insector() || act->spr.xrepeat == 0)
if (!act->insector() || act->spr.xrepeat == 0)
{
deletesprite(act);
continue;

View file

@ -131,8 +131,8 @@ void animatesprites_d(tspritetype* tsprite, int& spritesortcnt, int x, int y, in
continue;
}
if (t->insector())
t->shade = clamp<int>(t->sector()->ceilingstat & CSTAT_SECTOR_SKY ? t->sector()->ceilingshade : t->sector()->floorshade, -127, 127);
if (t->sectp != nullptr)
t->shade = clamp<int>(t->sectp->ceilingstat & CSTAT_SECTOR_SKY ? t->sector()->ceilingshade : t->sectp->floorshade, -127, 127);
}

View file

@ -116,8 +116,8 @@ void animatesprites_r(tspritetype* tsprite, int& spritesortcnt, int x, int y, in
}
}
if (t->insector())
t->shade = clamp<int>(t->sector()->ceilingstat & CSTAT_SECTOR_SKY ? h->spr.shade : t->sector()->floorshade, -127, 127);
if (t->sectp != nullptr)
t->shade = clamp<int>(t->sectp->ceilingstat & CSTAT_SECTOR_SKY ? h->spr.shade : t->sectp->floorshade, -127, 127);
}

View file

@ -2889,7 +2889,7 @@ void processinput_d(int snum)
p->angle.applyinput(sb_avel, &actions);
}
if (p->spritebridge == 0 && pact->spr.insector())
if (p->spritebridge == 0 && pact->insector())
{
j = pact->spr.sector()->floorpicnum;

View file

@ -3620,7 +3620,7 @@ void processinput_r(int snum)
p->angle.applyinput(sb_avel, &actions);
}
if (p->spritebridge == 0 && pact->spr.insector())
if (p->spritebridge == 0 && pact->insector())
{
int j = pact->spr.sector()->floorpicnum;
k = 0;

View file

@ -556,7 +556,7 @@ int DoSkelTeleport(DSWActor* actor)
SetActorZ(actor, &actor->spr.pos);
if (actor->spr.insector())
if (actor->insector())
break;
}

View file

@ -3513,7 +3513,7 @@ int ActorCoughItem(DSWActor* actor)
switch (actor->user.ID)
{
case SAILORGIRL_R0:
ASSERT(actor->spr.insector());
ASSERT(actor->insector());
actorNew = insertActor(actor->spr.sector(), STAT_SPAWN_ITEMS);
actorNew->spr.cstat = 0;
actorNew->spr.extra = 0;
@ -3554,7 +3554,7 @@ int ActorCoughItem(DSWActor* actor)
if (RANDOM_P2(1024) < 700)
return 0;
ASSERT(actor->spr.insector());
ASSERT(actor->insector());
actorNew = insertActor(actor->spr.sector(), STAT_SPAWN_ITEMS);
actorNew->spr.cstat = 0;
actorNew->spr.extra = 0;
@ -3582,7 +3582,7 @@ int ActorCoughItem(DSWActor* actor)
if (RANDOM_P2(1024) < 700)
return 0;
ASSERT(actor->spr.insector());
ASSERT(actor->insector());
actorNew = insertActor(actor->spr.sector(), STAT_SPAWN_ITEMS);
actorNew->spr.cstat = 0;
actorNew->spr.extra = 0;
@ -3613,7 +3613,7 @@ int ActorCoughItem(DSWActor* actor)
if (RANDOM_P2(1024) > 200)
return 0;
ASSERT(actor->spr.insector());
ASSERT(actor->insector());
actorNew = insertActor(actor->spr.sector(), STAT_SPAWN_ITEMS);
actorNew->spr.cstat = 0;
actorNew->spr.extra = 0;
@ -3675,7 +3675,7 @@ int ActorCoughItem(DSWActor* actor)
if (RANDOM_P2(1024) < 512)
return 0;
ASSERT(actor->spr.insector());
ASSERT(actor->insector());
actorNew = insertActor(actor->spr.sector(), STAT_SPAWN_ITEMS);
actorNew->spr.cstat = 0;
actorNew->spr.extra = 0;
@ -3733,7 +3733,7 @@ int ActorCoughItem(DSWActor* actor)
case PACHINKO3:
case PACHINKO4:
ASSERT(actor->spr.insector());
ASSERT(actor->insector());
actorNew = insertActor(actor->spr.sector(), STAT_SPAWN_ITEMS);
actorNew->spr.cstat = 0;
actorNew->spr.extra = 0;
@ -4643,7 +4643,7 @@ int move_actor(DSWActor* actor, int xchange, int ychange, int zchange)
actor->user.coll = move_sprite(actor, xchange, ychange, zchange,
actor->user.ceiling_dist, actor->user.floor_dist, cliptype, ACTORMOVETICS);
ASSERT(actor->spr.insector());
ASSERT(actor->insector());
// try and determine whether you moved > lo_step in the z direction
if (!(actor->user.Flags & (SPR_NO_SCAREDZ | SPR_JUMPING | SPR_CLIMBING | SPR_FALLING | SPR_DEAD | SPR_SWIMMING)))

View file

@ -172,7 +172,7 @@ DSWActor* WarpToArea(DSWActor* sp_from, int32_t* x, int32_t* y, int32_t* z, sect
// exp: WARP_CEILING or WARP_CEILING_PLANE
if (actor->spr.hitag == to_tag)
{
if (!actor->spr.insector())
if (!actor->insector())
return nullptr;
// determine new x,y,z position

View file

@ -3160,7 +3160,7 @@ int SpawnShrap(DSWActor* parentActor, DSWActor* secondaryActor, int means, BREAK
return 0;
// Don't spawn shrapnel in invalid sectors gosh dern it!
if (!parentActor->spr.insector())
if (!parentActor->insector())
{
return 0;
}
@ -5178,7 +5178,7 @@ int ActorStdMissile(DSWActor* actor, DSWActor* weapActor)
if (goal != nullptr)
{
// attempt to see if it was killed
ASSERT(goal->spr.insector());
ASSERT(goal->insector());
if (goal->hasU())
goal->user.Flags &= ~(SPR_TARGETED);
}
@ -11202,7 +11202,7 @@ int DoRing(DSWActor* actor)
SetActor(actor, &actor->spr.pos);
ASSERT(actor->spr.insector());
ASSERT(actor->insector());
getzsofslopeptr(actor->spr.sector(), actor->spr.pos.X, actor->spr.pos.Y, &cz, &fz);
@ -11330,7 +11330,7 @@ int DoSerpRing(DSWActor* actor)
SetActor(actor, &actor->spr.pos);
ASSERT(actor->spr.insector());
ASSERT(actor->insector());
getzsofslopeptr(actor->spr.sector(), actor->spr.pos.X, actor->spr.pos.Y, &cz, &fz);