mirror of
https://github.com/DrBeef/Raze.git
synced 2025-02-01 05:20:43 +00:00
- sp cleanup in sector.cpp
This commit is contained in:
parent
79a9278ff3
commit
7419c2e65b
6 changed files with 65 additions and 122 deletions
|
@ -85,7 +85,7 @@ bool RotatorSwitch(short match, short setting)
|
||||||
if (sp->lotag == TAG_SPRITE_SWITCH_VATOR && sp->hitag == match)
|
if (sp->lotag == TAG_SPRITE_SWITCH_VATOR && sp->hitag == match)
|
||||||
{
|
{
|
||||||
found = true;
|
found = true;
|
||||||
AnimateSwitch(sp, setting);
|
AnimateSwitch(actor, setting);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -669,13 +669,10 @@ sectortype* FindNextSectorByTag(sectortype* sect, int tag)
|
||||||
short DoSpawnActorTrigger(short match)
|
short DoSpawnActorTrigger(short match)
|
||||||
{
|
{
|
||||||
short spawn_count = 0;
|
short spawn_count = 0;
|
||||||
SPRITEp sp;
|
|
||||||
|
|
||||||
SWStatIterator it(STAT_SPAWN_TRIGGER);
|
SWStatIterator it(STAT_SPAWN_TRIGGER);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
sp = &actor->s();
|
|
||||||
|
|
||||||
if (actor->spr.hitag == match)
|
if (actor->spr.hitag == match)
|
||||||
{
|
{
|
||||||
if (ActorSpawn(actor))
|
if (ActorSpawn(actor))
|
||||||
|
@ -697,25 +694,22 @@ int OperateSector(sectortype* sect, short player_is_operating)
|
||||||
// Don't let actors operate locked or secret doors
|
// Don't let actors operate locked or secret doors
|
||||||
if (!player_is_operating)
|
if (!player_is_operating)
|
||||||
{
|
{
|
||||||
SPRITEp sp;
|
|
||||||
|
|
||||||
if (sect->hasU() && sect->stag == SECT_LOCK_DOOR)
|
if (sect->hasU() && sect->stag == SECT_LOCK_DOOR)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
SWSectIterator it(sect);
|
SWSectIterator it(sect);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
sp = &actor->s();
|
|
||||||
auto fsect = actor->spr.sector();
|
auto fsect = actor->spr.sector();
|
||||||
|
|
||||||
if (fsect->hasU() && fsect->stag == SECT_LOCK_DOOR)
|
if (fsect->hasU() && fsect->stag == SECT_LOCK_DOOR)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (actor->spr.statnum == STAT_VATOR && SP_TAG1(actor) == SECT_VATOR && TEST_BOOL7(sp))
|
if (actor->spr.statnum == STAT_VATOR && SP_TAG1(actor) == SECT_VATOR && TEST_BOOL7(actor))
|
||||||
return false;
|
return false;
|
||||||
if (actor->spr.statnum == STAT_ROTATOR && SP_TAG1(actor) == SECT_ROTATOR && TEST_BOOL7(sp))
|
if (actor->spr.statnum == STAT_ROTATOR && SP_TAG1(actor) == SECT_ROTATOR && TEST_BOOL7(actor))
|
||||||
return false;
|
return false;
|
||||||
if (actor->spr.statnum == STAT_SLIDOR && SP_TAG1(actor) == SECT_SLIDOR && TEST_BOOL7(sp))
|
if (actor->spr.statnum == STAT_SLIDOR && SP_TAG1(actor) == SECT_SLIDOR && TEST_BOOL7(actor))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -763,12 +757,12 @@ enum
|
||||||
SWITCH_SKULL = 553,
|
SWITCH_SKULL = 553,
|
||||||
};
|
};
|
||||||
|
|
||||||
short AnimateSwitch(SPRITEp sp, short tgt_value)
|
short AnimateSwitch(DSWActor* actor, int tgt_value)
|
||||||
{
|
{
|
||||||
// if the value is not ON or OFF
|
// if the value is not ON or OFF
|
||||||
// then it is a straight toggle
|
// then it is a straight toggle
|
||||||
|
|
||||||
switch (sp->picnum)
|
switch (actor->spr.picnum)
|
||||||
{
|
{
|
||||||
// set to true/ON
|
// set to true/ON
|
||||||
case SWITCH_SKULL:
|
case SWITCH_SKULL:
|
||||||
|
@ -791,13 +785,13 @@ short AnimateSwitch(SPRITEp sp, short tgt_value)
|
||||||
if (tgt_value == 999)
|
if (tgt_value == 999)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
sp->picnum += 1;
|
actor->spr.picnum += 1;
|
||||||
|
|
||||||
// if the tgt_value should be true
|
// if the tgt_value should be true
|
||||||
// flip it again - recursive but only once
|
// flip it again - recursive but only once
|
||||||
if (tgt_value == false)
|
if (tgt_value == false)
|
||||||
{
|
{
|
||||||
AnimateSwitch(sp, tgt_value);
|
AnimateSwitch(actor, tgt_value);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -824,11 +818,11 @@ short AnimateSwitch(SPRITEp sp, short tgt_value)
|
||||||
if (tgt_value == 999)
|
if (tgt_value == 999)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
sp->picnum -= 1;
|
actor->spr.picnum -= 1;
|
||||||
|
|
||||||
if (tgt_value == int(true))
|
if (tgt_value == int(true))
|
||||||
{
|
{
|
||||||
AnimateSwitch(sp, tgt_value);
|
AnimateSwitch(actor, tgt_value);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -840,7 +834,6 @@ short AnimateSwitch(SPRITEp sp, short tgt_value)
|
||||||
|
|
||||||
void SectorExp(DSWActor* actor, sectortype* sectp, short orig_ang, int zh)
|
void SectorExp(DSWActor* actor, sectortype* sectp, short orig_ang, int zh)
|
||||||
{
|
{
|
||||||
SPRITEp sp = &actor->s();
|
|
||||||
USERp u = actor->u();
|
USERp u = actor->u();
|
||||||
SPRITEp exp;
|
SPRITEp exp;
|
||||||
USERp eu;
|
USERp eu;
|
||||||
|
@ -888,31 +881,29 @@ void DoExplodeSector(short match)
|
||||||
SWStatIterator it(STAT_EXPLODING_CEIL_FLOOR);
|
SWStatIterator it(STAT_EXPLODING_CEIL_FLOOR);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
auto esp = &actor->s();
|
if (match != actor->spr.lotag)
|
||||||
|
|
||||||
if (match != esp->lotag)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!actor->hasU())
|
if (!actor->hasU())
|
||||||
/*u = */SpawnUser(actor, 0, nullptr);
|
/*u = */SpawnUser(actor, 0, nullptr);
|
||||||
|
|
||||||
sectp = esp->sector();
|
sectp = actor->spr.sector();
|
||||||
|
|
||||||
sectp->ceilingz -= Z(SP_TAG4(esp));
|
sectp->ceilingz -= Z(SP_TAG4(actor));
|
||||||
|
|
||||||
if (SP_TAG5(esp))
|
if (SP_TAG5(actor))
|
||||||
{
|
{
|
||||||
sectp->setfloorslope(SP_TAG5(esp));
|
sectp->setfloorslope(SP_TAG5(actor));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SP_TAG6(esp))
|
if (SP_TAG6(actor))
|
||||||
{
|
{
|
||||||
sectp->setceilingslope(SP_TAG6(esp));
|
sectp->setceilingslope(SP_TAG6(actor));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (zh = sectp->ceilingz; zh < sectp->floorz; zh += Z(60))
|
for (zh = sectp->ceilingz; zh < sectp->floorz; zh += Z(60))
|
||||||
{
|
{
|
||||||
SectorExp(actor, esp->sector(), orig_ang, zh + Z(RANDOM_P2(64)) - Z(32));
|
SectorExp(actor, actor->spr.sector(), orig_ang, zh + Z(RANDOM_P2(64)) - Z(32));
|
||||||
}
|
}
|
||||||
|
|
||||||
// don't need it any more
|
// don't need it any more
|
||||||
|
@ -943,7 +934,6 @@ int DoSpawnSpot(DSWActor* actor)
|
||||||
// spawns shrap when killing an object
|
// spawns shrap when killing an object
|
||||||
void DoSpawnSpotsForKill(short match)
|
void DoSpawnSpotsForKill(short match)
|
||||||
{
|
{
|
||||||
SPRITEp sp;
|
|
||||||
USERp u;
|
USERp u;
|
||||||
|
|
||||||
if (match < 0)
|
if (match < 0)
|
||||||
|
@ -952,15 +942,13 @@ void DoSpawnSpotsForKill(short match)
|
||||||
SWStatIterator it(STAT_SPAWN_SPOT);
|
SWStatIterator it(STAT_SPAWN_SPOT);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
sp = &actor->s();
|
|
||||||
|
|
||||||
// change the stat num and set the delay correctly to call SpawnShrap
|
// change the stat num and set the delay correctly to call SpawnShrap
|
||||||
if (actor->spr.hitag == SPAWN_SPOT && actor->spr.lotag == match)
|
if (actor->spr.hitag == SPAWN_SPOT && actor->spr.lotag == match)
|
||||||
{
|
{
|
||||||
u = actor->u();
|
u = actor->u();
|
||||||
change_actor_stat(actor, STAT_NO_STATE);
|
change_actor_stat(actor, STAT_NO_STATE);
|
||||||
u->ActorActionFunc = DoSpawnSpot;
|
u->ActorActionFunc = DoSpawnSpot;
|
||||||
u->WaitTics = SP_TAG5(sp) * 15;
|
u->WaitTics = SP_TAG5(actor) * 15;
|
||||||
SetActorZ(actor, &actor->spr.pos);
|
SetActorZ(actor, &actor->spr.pos);
|
||||||
// setting for Killed
|
// setting for Killed
|
||||||
u->LastDamage = 1;
|
u->LastDamage = 1;
|
||||||
|
@ -971,7 +959,6 @@ void DoSpawnSpotsForKill(short match)
|
||||||
// spawns shrap when damaging an object
|
// spawns shrap when damaging an object
|
||||||
void DoSpawnSpotsForDamage(short match)
|
void DoSpawnSpotsForDamage(short match)
|
||||||
{
|
{
|
||||||
SPRITEp sp;
|
|
||||||
USERp u;
|
USERp u;
|
||||||
|
|
||||||
if (match < 0)
|
if (match < 0)
|
||||||
|
@ -980,16 +967,13 @@ void DoSpawnSpotsForDamage(short match)
|
||||||
SWStatIterator it(STAT_SPAWN_SPOT);
|
SWStatIterator it(STAT_SPAWN_SPOT);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
sp = &actor->s();
|
|
||||||
|
|
||||||
// change the stat num and set the delay correctly to call SpawnShrap
|
// change the stat num and set the delay correctly to call SpawnShrap
|
||||||
|
|
||||||
if (actor->spr.hitag == SPAWN_SPOT && actor->spr.lotag == match)
|
if (actor->spr.hitag == SPAWN_SPOT && actor->spr.lotag == match)
|
||||||
{
|
{
|
||||||
u = actor->u();
|
u = actor->u();
|
||||||
change_actor_stat(actor, STAT_NO_STATE);
|
change_actor_stat(actor, STAT_NO_STATE);
|
||||||
u->ActorActionFunc = DoSpawnSpot;
|
u->ActorActionFunc = DoSpawnSpot;
|
||||||
u->WaitTics = SP_TAG7(sp) * 15;
|
u->WaitTics = SP_TAG7(actor) * 15;
|
||||||
// setting for Damaged
|
// setting for Damaged
|
||||||
u->LastDamage = 0;
|
u->LastDamage = 0;
|
||||||
}
|
}
|
||||||
|
@ -998,7 +982,6 @@ void DoSpawnSpotsForDamage(short match)
|
||||||
|
|
||||||
void DoSoundSpotMatch(short match, short sound_num, short sound_type)
|
void DoSoundSpotMatch(short match, short sound_num, short sound_type)
|
||||||
{
|
{
|
||||||
SPRITEp sp;
|
|
||||||
int flags;
|
int flags;
|
||||||
short snd2play;
|
short snd2play;
|
||||||
|
|
||||||
|
@ -1011,34 +994,32 @@ void DoSoundSpotMatch(short match, short sound_num, short sound_type)
|
||||||
SWStatIterator it(STAT_SOUND_SPOT);
|
SWStatIterator it(STAT_SOUND_SPOT);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
sp = &actor->s();
|
if (SP_TAG2(actor) == match && !TEST_BOOL6(actor))
|
||||||
|
|
||||||
if (SP_TAG2(actor) == match && !TEST_BOOL6(sp))
|
|
||||||
{
|
{
|
||||||
short snd[3];
|
short snd[3];
|
||||||
|
|
||||||
snd[0] = SP_TAG13(sp); // tag4 is copied to tag13
|
snd[0] = SP_TAG13(actor); // tag4 is copied to tag13
|
||||||
snd[1] = SP_TAG5(sp);
|
snd[1] = SP_TAG5(actor);
|
||||||
snd[2] = SP_TAG6(sp);
|
snd[2] = SP_TAG6(actor);
|
||||||
|
|
||||||
snd2play = 0;
|
snd2play = 0;
|
||||||
flags = 0;
|
flags = 0;
|
||||||
|
|
||||||
if (TEST_BOOL2(sp))
|
if (TEST_BOOL2(actor))
|
||||||
flags = v3df_follow|v3df_nolookup|v3df_init;
|
flags = v3df_follow|v3df_nolookup|v3df_init;
|
||||||
|
|
||||||
// play once and only once
|
// play once and only once
|
||||||
if (TEST_BOOL1(sp))
|
if (TEST_BOOL1(actor))
|
||||||
SET_BOOL6(sp);
|
SET_BOOL6(actor);
|
||||||
|
|
||||||
// don't pan
|
// don't pan
|
||||||
if (TEST_BOOL4(sp))
|
if (TEST_BOOL4(actor))
|
||||||
flags |= v3df_dontpan;
|
flags |= v3df_dontpan;
|
||||||
// add doppler
|
// add doppler
|
||||||
if (TEST_BOOL5(sp))
|
if (TEST_BOOL5(actor))
|
||||||
flags |= v3df_doppler;
|
flags |= v3df_doppler;
|
||||||
// random
|
// random
|
||||||
if (TEST_BOOL3(sp))
|
if (TEST_BOOL3(actor))
|
||||||
{
|
{
|
||||||
if (snd[0] && snd[1])
|
if (snd[0] && snd[1])
|
||||||
{
|
{
|
||||||
|
@ -1057,7 +1038,7 @@ void DoSoundSpotMatch(short match, short sound_num, short sound_type)
|
||||||
if (snd2play <= 0)
|
if (snd2play <= 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (TEST_BOOL7(sp))
|
if (TEST_BOOL7(actor))
|
||||||
{
|
{
|
||||||
PLAYERp pp = GlobPlayerP;
|
PLAYERp pp = GlobPlayerP;
|
||||||
|
|
||||||
|
@ -1081,10 +1062,8 @@ void DoSoundSpotStopSound(short match)
|
||||||
SWStatIterator it(STAT_SOUND_SPOT);
|
SWStatIterator it(STAT_SOUND_SPOT);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
auto sp = &actor->s();
|
|
||||||
|
|
||||||
// found match and is a follow type
|
// found match and is a follow type
|
||||||
if (SP_TAG2(actor) == match && TEST_BOOL2(sp))
|
if (SP_TAG2(actor) == match && TEST_BOOL2(actor))
|
||||||
{
|
{
|
||||||
DeleteNoSoundOwner(actor);
|
DeleteNoSoundOwner(actor);
|
||||||
}
|
}
|
||||||
|
@ -1093,16 +1072,12 @@ void DoSoundSpotStopSound(short match)
|
||||||
|
|
||||||
void DoStopSoundSpotMatch(short match)
|
void DoStopSoundSpotMatch(short match)
|
||||||
{
|
{
|
||||||
SPRITEp sp;
|
|
||||||
|
|
||||||
SWStatIterator it(STAT_STOP_SOUND_SPOT);
|
SWStatIterator it(STAT_STOP_SOUND_SPOT);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
sp = &actor->s();
|
|
||||||
|
|
||||||
if (SP_TAG2(actor) == match)
|
if (SP_TAG2(actor) == match)
|
||||||
{
|
{
|
||||||
DoSoundSpotStopSound(SP_TAG5(sp));
|
DoSoundSpotStopSound(SP_TAG5(actor));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1146,8 +1121,6 @@ bool SearchExplodeSectorMatch(short match)
|
||||||
SWStatIterator it(STAT_SPRITE_HIT_MATCH);
|
SWStatIterator it(STAT_SPRITE_HIT_MATCH);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
auto sp = &actor->s();
|
|
||||||
|
|
||||||
if (actor->spr.hitag == match)
|
if (actor->spr.hitag == match)
|
||||||
{
|
{
|
||||||
KillMatchingCrackSprites(match);
|
KillMatchingCrackSprites(match);
|
||||||
|
@ -1161,16 +1134,12 @@ bool SearchExplodeSectorMatch(short match)
|
||||||
|
|
||||||
void KillMatchingCrackSprites(short match)
|
void KillMatchingCrackSprites(short match)
|
||||||
{
|
{
|
||||||
SPRITEp sp;
|
|
||||||
|
|
||||||
SWStatIterator it(STAT_SPRITE_HIT_MATCH);
|
SWStatIterator it(STAT_SPRITE_HIT_MATCH);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
sp = &actor->s();
|
|
||||||
|
|
||||||
if (actor->spr.hitag == match)
|
if (actor->spr.hitag == match)
|
||||||
{
|
{
|
||||||
if (TEST(SP_TAG8(sp), BIT(2)))
|
if (TEST(SP_TAG8(actor), BIT(2)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
KillActor(actor);
|
KillActor(actor);
|
||||||
|
@ -1182,15 +1151,12 @@ void WeaponExplodeSectorInRange(DSWActor* wActor)
|
||||||
{
|
{
|
||||||
SPRITEp wp = &wActor->s();
|
SPRITEp wp = &wActor->s();
|
||||||
USERp wu = wActor->u();
|
USERp wu = wActor->u();
|
||||||
SPRITEp sp;
|
|
||||||
int dist;
|
int dist;
|
||||||
int radius;
|
int radius;
|
||||||
|
|
||||||
SWStatIterator it(STAT_SPRITE_HIT_MATCH);
|
SWStatIterator it(STAT_SPRITE_HIT_MATCH);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
sp = &actor->s();
|
|
||||||
|
|
||||||
// test to see if explosion is close to crack sprite
|
// test to see if explosion is close to crack sprite
|
||||||
dist = FindDistance3D(wp->pos.X - actor->spr.pos.X, wp->pos.Y - actor->spr.pos.Y, wp->pos.Z - actor->spr.pos.Z);
|
dist = FindDistance3D(wp->pos.X - actor->spr.pos.X, wp->pos.Y - actor->spr.pos.Y, wp->pos.Z - actor->spr.pos.Z);
|
||||||
|
|
||||||
|
@ -1214,8 +1180,6 @@ void WeaponExplodeSectorInRange(DSWActor* wActor)
|
||||||
|
|
||||||
void ShootableSwitch(DSWActor* actor)
|
void ShootableSwitch(DSWActor* actor)
|
||||||
{
|
{
|
||||||
SPRITEp sp = &actor->s();
|
|
||||||
|
|
||||||
switch (actor->spr.picnum)
|
switch (actor->spr.picnum)
|
||||||
{
|
{
|
||||||
case SWITCH_SHOOTABLE_1:
|
case SWITCH_SHOOTABLE_1:
|
||||||
|
@ -1258,7 +1222,6 @@ void DoDeleteSpriteMatch(short match)
|
||||||
SWStatIterator it(STAT_DELETE_SPRITE);
|
SWStatIterator it(STAT_DELETE_SPRITE);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
auto sp = &actor->s();
|
|
||||||
if (actor->spr.lotag == match)
|
if (actor->spr.lotag == match)
|
||||||
{
|
{
|
||||||
found = actor;
|
found = actor;
|
||||||
|
@ -1276,14 +1239,13 @@ void DoDeleteSpriteMatch(short match)
|
||||||
it.Reset(StatList[stat]);
|
it.Reset(StatList[stat]);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
auto sp = &actor->s();
|
|
||||||
if (del_x == actor->spr.pos.X && del_y == actor->spr.pos.Y)
|
if (del_x == actor->spr.pos.X && del_y == actor->spr.pos.Y)
|
||||||
{
|
{
|
||||||
// special case lighting delete of Fade On/off after fades
|
// special case lighting delete of Fade On/off after fades
|
||||||
if (StatList[stat] == STAT_LIGHTING)
|
if (StatList[stat] == STAT_LIGHTING)
|
||||||
{
|
{
|
||||||
// set shade to darkest and then kill it
|
// set shade to darkest and then kill it
|
||||||
actor->spr.shade = int8_t(SP_TAG6(sp));
|
actor->spr.shade = int8_t(SP_TAG6(actor));
|
||||||
actor->spr.pal = 0;
|
actor->spr.pal = 0;
|
||||||
SectorLightShade(actor, actor->spr.shade);
|
SectorLightShade(actor, actor->spr.shade);
|
||||||
DiffuseLighting(actor);
|
DiffuseLighting(actor);
|
||||||
|
@ -1305,45 +1267,44 @@ void DoChangorMatch(short match)
|
||||||
SWStatIterator it(STAT_CHANGOR);
|
SWStatIterator it(STAT_CHANGOR);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
auto sp = &actor->s();
|
|
||||||
auto sectp = actor->spr.sector();
|
auto sectp = actor->spr.sector();
|
||||||
|
|
||||||
if (SP_TAG2(actor) != match)
|
if (SP_TAG2(actor) != match)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (TEST_BOOL1(sp))
|
if (TEST_BOOL1(actor))
|
||||||
{
|
{
|
||||||
sectp->ceilingpicnum = SP_TAG4(sp);
|
sectp->ceilingpicnum = SP_TAG4(actor);
|
||||||
sectp->ceilingz += Z(SP_TAG5(sp));
|
sectp->ceilingz += Z(SP_TAG5(actor));
|
||||||
sectp->ceilingheinum += SP_TAG6(sp);
|
sectp->ceilingheinum += SP_TAG6(actor);
|
||||||
|
|
||||||
if (sectp->ceilingheinum)
|
if (sectp->ceilingheinum)
|
||||||
SET(sectp->ceilingstat, CSTAT_SECTOR_SLOPE);
|
SET(sectp->ceilingstat, CSTAT_SECTOR_SLOPE);
|
||||||
else
|
else
|
||||||
RESET(sectp->ceilingstat, CSTAT_SECTOR_SLOPE);
|
RESET(sectp->ceilingstat, CSTAT_SECTOR_SLOPE);
|
||||||
|
|
||||||
sectp->ceilingshade += SP_TAG7(sp);
|
sectp->ceilingshade += SP_TAG7(actor);
|
||||||
sectp->ceilingpal += SP_TAG8(sp);
|
sectp->ceilingpal += SP_TAG8(actor);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sectp->floorpicnum = SP_TAG4(sp);
|
sectp->floorpicnum = SP_TAG4(actor);
|
||||||
sectp->floorz += Z(SP_TAG5(sp));
|
sectp->floorz += Z(SP_TAG5(actor));
|
||||||
sectp->floorheinum += SP_TAG6(sp);
|
sectp->floorheinum += SP_TAG6(actor);
|
||||||
|
|
||||||
if (sectp->floorheinum)
|
if (sectp->floorheinum)
|
||||||
SET(sectp->floorstat, CSTAT_SECTOR_SLOPE);
|
SET(sectp->floorstat, CSTAT_SECTOR_SLOPE);
|
||||||
else
|
else
|
||||||
RESET(sectp->floorstat, CSTAT_SECTOR_SLOPE);
|
RESET(sectp->floorstat, CSTAT_SECTOR_SLOPE);
|
||||||
|
|
||||||
sectp->floorshade += SP_TAG7(sp);
|
sectp->floorshade += SP_TAG7(actor);
|
||||||
sectp->floorpal += SP_TAG8(sp);
|
sectp->floorpal += SP_TAG8(actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
sectp->visibility += SP_TAG9(sp);
|
sectp->visibility += SP_TAG9(actor);
|
||||||
|
|
||||||
// if not set then go ahead and kill it
|
// if not set then go ahead and kill it
|
||||||
if (TEST_BOOL2(sp) == 0)
|
if (TEST_BOOL2(actor) == 0)
|
||||||
{
|
{
|
||||||
KillActor(actor);
|
KillActor(actor);
|
||||||
}
|
}
|
||||||
|
@ -1407,15 +1368,13 @@ bool ComboSwitchTest(short combo_type, short match)
|
||||||
SWStatIterator it(STAT_DEFAULT);
|
SWStatIterator it(STAT_DEFAULT);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
auto sp = &actor->s();
|
|
||||||
|
|
||||||
if (actor->spr.lotag == combo_type && actor->spr.hitag == match)
|
if (actor->spr.lotag == combo_type && actor->spr.hitag == match)
|
||||||
{
|
{
|
||||||
// dont toggle - get the current state
|
// dont toggle - get the current state
|
||||||
state = AnimateSwitch(sp, 999);
|
state = AnimateSwitch(actor, 999);
|
||||||
|
|
||||||
// if any one is not set correctly then switch is not set
|
// if any one is not set correctly then switch is not set
|
||||||
if (state != SP_TAG3(sp))
|
if (state != SP_TAG3(actor))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1428,7 +1387,6 @@ bool ComboSwitchTest(short combo_type, short match)
|
||||||
// NOTE: switches are always wall sprites
|
// NOTE: switches are always wall sprites
|
||||||
int OperateSprite(DSWActor* actor, short player_is_operating)
|
int OperateSprite(DSWActor* actor, short player_is_operating)
|
||||||
{
|
{
|
||||||
SPRITEp sp = &actor->s();
|
|
||||||
USERp u = actor->u();
|
USERp u = actor->u();
|
||||||
PLAYERp pp = nullptr;
|
PLAYERp pp = nullptr;
|
||||||
short state;
|
short state;
|
||||||
|
@ -1448,7 +1406,7 @@ int OperateSprite(DSWActor* actor, short player_is_operating)
|
||||||
{
|
{
|
||||||
pp = GlobPlayerP;
|
pp = GlobPlayerP;
|
||||||
|
|
||||||
if (!FAFcansee(pp->pos.X, pp->pos.Y, pp->pos.Z, pp->cursector, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - DIV2(GetSpriteSizeZ(sp)), actor->spr.sector()))
|
if (!FAFcansee(pp->pos.X, pp->pos.Y, pp->pos.Z, pp->cursector, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - (ActorSizeZ(actor) >> 1), actor->spr.sector()))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1599,7 +1557,7 @@ int OperateSprite(DSWActor* actor, short player_is_operating)
|
||||||
case TAG_COMBO_SWITCH_EVERYTHING:
|
case TAG_COMBO_SWITCH_EVERYTHING:
|
||||||
|
|
||||||
// change the switch state
|
// change the switch state
|
||||||
AnimateSwitch(sp, -1);
|
AnimateSwitch(actor, -1);
|
||||||
PlaySound(DIGI_REGULARSWITCH, actor, v3df_none);
|
PlaySound(DIGI_REGULARSWITCH, actor, v3df_none);
|
||||||
|
|
||||||
if (ComboSwitchTest(TAG_COMBO_SWITCH_EVERYTHING, actor->spr.hitag))
|
if (ComboSwitchTest(TAG_COMBO_SWITCH_EVERYTHING, actor->spr.hitag))
|
||||||
|
@ -1612,7 +1570,7 @@ int OperateSprite(DSWActor* actor, short player_is_operating)
|
||||||
case TAG_COMBO_SWITCH_EVERYTHING_ONCE:
|
case TAG_COMBO_SWITCH_EVERYTHING_ONCE:
|
||||||
|
|
||||||
// change the switch state
|
// change the switch state
|
||||||
AnimateSwitch(sp, -1);
|
AnimateSwitch(actor, -1);
|
||||||
PlaySound(DIGI_REGULARSWITCH, actor, v3df_none);
|
PlaySound(DIGI_REGULARSWITCH, actor, v3df_none);
|
||||||
|
|
||||||
if (ComboSwitchTest(TAG_COMBO_SWITCH_EVERYTHING, actor->spr.hitag))
|
if (ComboSwitchTest(TAG_COMBO_SWITCH_EVERYTHING, actor->spr.hitag))
|
||||||
|
@ -1625,12 +1583,12 @@ int OperateSprite(DSWActor* actor, short player_is_operating)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case TAG_SWITCH_EVERYTHING:
|
case TAG_SWITCH_EVERYTHING:
|
||||||
state = AnimateSwitch(sp, -1);
|
state = AnimateSwitch(actor, -1);
|
||||||
DoMatchEverything(pp, actor->spr.hitag, state);
|
DoMatchEverything(pp, actor->spr.hitag, state);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case TAG_SWITCH_EVERYTHING_ONCE:
|
case TAG_SWITCH_EVERYTHING_ONCE:
|
||||||
state = AnimateSwitch(sp, -1);
|
state = AnimateSwitch(actor, -1);
|
||||||
DoMatchEverything(pp, actor->spr.hitag, state);
|
DoMatchEverything(pp, actor->spr.hitag, state);
|
||||||
actor->spr.lotag = 0;
|
actor->spr.lotag = 0;
|
||||||
actor->spr.hitag = 0;
|
actor->spr.hitag = 0;
|
||||||
|
@ -1638,7 +1596,7 @@ int OperateSprite(DSWActor* actor, short player_is_operating)
|
||||||
|
|
||||||
case TAG_LIGHT_SWITCH:
|
case TAG_LIGHT_SWITCH:
|
||||||
|
|
||||||
state = AnimateSwitch(sp, -1);
|
state = AnimateSwitch(actor, -1);
|
||||||
DoLightingMatch(actor->spr.hitag, state);
|
DoLightingMatch(actor->spr.hitag, state);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -1663,7 +1621,7 @@ int OperateSprite(DSWActor* actor, short player_is_operating)
|
||||||
|
|
||||||
case TAG_LEVEL_EXIT_SWITCH:
|
case TAG_LEVEL_EXIT_SWITCH:
|
||||||
{
|
{
|
||||||
AnimateSwitch(sp, -1);
|
AnimateSwitch(actor, -1);
|
||||||
|
|
||||||
PlaySound(DIGI_BIGSWITCH, actor, v3df_none);
|
PlaySound(DIGI_BIGSWITCH, actor, v3df_none);
|
||||||
|
|
||||||
|
@ -1692,12 +1650,12 @@ int OperateSprite(DSWActor* actor, short player_is_operating)
|
||||||
}
|
}
|
||||||
|
|
||||||
case TAG_SO_SCALE_SWITCH:
|
case TAG_SO_SCALE_SWITCH:
|
||||||
AnimateSwitch(sp, -1);
|
AnimateSwitch(actor, -1);
|
||||||
DoSectorObjectSetScale(actor->spr.hitag);
|
DoSectorObjectSetScale(actor->spr.hitag);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case TAG_SO_SCALE_ONCE_SWITCH:
|
case TAG_SO_SCALE_ONCE_SWITCH:
|
||||||
AnimateSwitch(sp, -1);
|
AnimateSwitch(actor, -1);
|
||||||
DoSectorObjectSetScale(actor->spr.hitag);
|
DoSectorObjectSetScale(actor->spr.hitag);
|
||||||
actor->spr.lotag = 0;
|
actor->spr.lotag = 0;
|
||||||
actor->spr.hitag = 0;
|
actor->spr.hitag = 0;
|
||||||
|
@ -1705,7 +1663,7 @@ int OperateSprite(DSWActor* actor, short player_is_operating)
|
||||||
|
|
||||||
case TAG_SO_EVENT_SWITCH:
|
case TAG_SO_EVENT_SWITCH:
|
||||||
{
|
{
|
||||||
state = AnimateSwitch(sp, -1);
|
state = AnimateSwitch(actor, -1);
|
||||||
|
|
||||||
DoMatchEverything(nullptr, actor->spr.hitag, state);
|
DoMatchEverything(nullptr, actor->spr.hitag, state);
|
||||||
|
|
||||||
|
@ -1726,7 +1684,7 @@ int OperateSprite(DSWActor* actor, short player_is_operating)
|
||||||
ASSERT(so_num <= 20);
|
ASSERT(so_num <= 20);
|
||||||
ASSERT(SectorObject[so_num].num_sectors != -1);
|
ASSERT(SectorObject[so_num].num_sectors != -1);
|
||||||
|
|
||||||
AnimateSwitch(sp, -1);
|
AnimateSwitch(actor, -1);
|
||||||
|
|
||||||
sop = &SectorObject[so_num];
|
sop = &SectorObject[so_num];
|
||||||
|
|
||||||
|
@ -1745,13 +1703,11 @@ int OperateSprite(DSWActor* actor, short player_is_operating)
|
||||||
|
|
||||||
int DoTrapReset(short match)
|
int DoTrapReset(short match)
|
||||||
{
|
{
|
||||||
SPRITEp sp;
|
|
||||||
USERp u;
|
USERp u;
|
||||||
|
|
||||||
SWStatIterator it(STAT_TRAP);
|
SWStatIterator it(STAT_TRAP);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
sp = &actor->s();
|
|
||||||
u = actor->u();
|
u = actor->u();
|
||||||
|
|
||||||
if (actor->spr.lotag != match)
|
if (actor->spr.lotag != match)
|
||||||
|
@ -1774,7 +1730,6 @@ int DoTrapReset(short match)
|
||||||
|
|
||||||
int DoTrapMatch(short match)
|
int DoTrapMatch(short match)
|
||||||
{
|
{
|
||||||
SPRITEp sp;
|
|
||||||
USERp u;
|
USERp u;
|
||||||
|
|
||||||
// may need to be reset to fire immediately
|
// may need to be reset to fire immediately
|
||||||
|
@ -1782,7 +1737,6 @@ int DoTrapMatch(short match)
|
||||||
SWStatIterator it(STAT_TRAP);
|
SWStatIterator it(STAT_TRAP);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
sp = &actor->s();
|
|
||||||
u = actor->u();
|
u = actor->u();
|
||||||
|
|
||||||
if (actor->spr.lotag != match)
|
if (actor->spr.lotag != match)
|
||||||
|
@ -1905,7 +1859,6 @@ void OperateTripTrigger(PLAYERp pp)
|
||||||
{
|
{
|
||||||
int dist;
|
int dist;
|
||||||
int i;
|
int i;
|
||||||
SPRITEp sp;
|
|
||||||
USERp u;
|
USERp u;
|
||||||
|
|
||||||
dist = sectp->hitag;
|
dist = sectp->hitag;
|
||||||
|
@ -1913,7 +1866,6 @@ void OperateTripTrigger(PLAYERp pp)
|
||||||
SWStatIterator it(STAT_ENEMY);
|
SWStatIterator it(STAT_ENEMY);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
sp = &actor->s();
|
|
||||||
u = actor->u();
|
u = actor->u();
|
||||||
|
|
||||||
if (TEST(u->Flags, SPR_WAIT_FOR_TRIGGER))
|
if (TEST(u->Flags, SPR_WAIT_FOR_TRIGGER))
|
||||||
|
@ -2023,7 +1975,6 @@ bool NearThings(PLAYERp pp)
|
||||||
if (near.actor() != nullptr)
|
if (near.actor() != nullptr)
|
||||||
{
|
{
|
||||||
auto actor = near.actor();
|
auto actor = near.actor();
|
||||||
SPRITEp sp = &actor->s();
|
|
||||||
|
|
||||||
// Go through list of cases
|
// Go through list of cases
|
||||||
if (actor->spr.hitag == PLAYER_SOUNDEVENT_TAG)
|
if (actor->spr.hitag == PLAYER_SOUNDEVENT_TAG)
|
||||||
|
@ -2159,7 +2110,6 @@ void NearTagList(NEAR_TAG_INFOp ntip, PLAYERp pp, int z, int dist, int type, int
|
||||||
else if (near.actor() != nullptr)
|
else if (near.actor() != nullptr)
|
||||||
{
|
{
|
||||||
auto actor = near.actor();
|
auto actor = near.actor();
|
||||||
auto sp = &actor->s();
|
|
||||||
// save off values
|
// save off values
|
||||||
save_lotag = actor->spr.lotag;
|
save_lotag = actor->spr.lotag;
|
||||||
save_hitag = actor->spr.hitag;
|
save_hitag = actor->spr.hitag;
|
||||||
|
@ -2215,8 +2165,6 @@ int DoPlayerGrabStar(PLAYERp pp)
|
||||||
auto actor = StarQueue[i];
|
auto actor = StarQueue[i];
|
||||||
if (actor != nullptr)
|
if (actor != nullptr)
|
||||||
{
|
{
|
||||||
auto sp = &actor->s();
|
|
||||||
|
|
||||||
if (FindDistance3D(actor->spr.pos.X - pp->pos.X, actor->spr.pos.Y - pp->pos.Y, actor->spr.pos.Z - pp->pos.Z + Z(12)) < 500)
|
if (FindDistance3D(actor->spr.pos.X - pp->pos.X, actor->spr.pos.Y - pp->pos.Y, actor->spr.pos.Z - pp->pos.Z + Z(12)) < 500)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
|
@ -2680,15 +2628,12 @@ void DoPanning(void)
|
||||||
{
|
{
|
||||||
int nx, ny;
|
int nx, ny;
|
||||||
int i;
|
int i;
|
||||||
SPRITEp sp;
|
|
||||||
SECTORp sectp;
|
SECTORp sectp;
|
||||||
WALLp wallp;
|
WALLp wallp;
|
||||||
|
|
||||||
|
|
||||||
SWStatIterator it(STAT_FLOOR_PAN);
|
SWStatIterator it(STAT_FLOOR_PAN);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
sp = &actor->s();
|
|
||||||
sectp = actor->spr.sector();
|
sectp = actor->spr.sector();
|
||||||
|
|
||||||
nx = MulScale(actor->spr.xvel, bcos(actor->spr.ang), 20);
|
nx = MulScale(actor->spr.xvel, bcos(actor->spr.ang), 20);
|
||||||
|
@ -2701,7 +2646,6 @@ void DoPanning(void)
|
||||||
it.Reset(STAT_CEILING_PAN);
|
it.Reset(STAT_CEILING_PAN);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
sp = &actor->s();
|
|
||||||
sectp = actor->spr.sector();
|
sectp = actor->spr.sector();
|
||||||
|
|
||||||
nx = MulScale(actor->spr.xvel, bcos(actor->spr.ang), 20);
|
nx = MulScale(actor->spr.xvel, bcos(actor->spr.ang), 20);
|
||||||
|
@ -2714,7 +2658,6 @@ void DoPanning(void)
|
||||||
it.Reset(STAT_WALL_PAN);
|
it.Reset(STAT_WALL_PAN);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
sp = &actor->s();
|
|
||||||
wallp = actor->tempwall;
|
wallp = actor->tempwall;
|
||||||
|
|
||||||
nx = MulScale(actor->spr.xvel, bcos(actor->spr.ang), 20);
|
nx = MulScale(actor->spr.xvel, bcos(actor->spr.ang), 20);
|
||||||
|
|
|
@ -71,7 +71,7 @@ void DoMatchEverything(PLAYERp pp, short match, short state);
|
||||||
bool ComboSwitchTest(short combo_type,short match);
|
bool ComboSwitchTest(short combo_type,short match);
|
||||||
void DoSoundSpotStopSound(short match);
|
void DoSoundSpotStopSound(short match);
|
||||||
void DoSector(void);
|
void DoSector(void);
|
||||||
short AnimateSwitch(SPRITEp sp,short tgt_value);
|
short AnimateSwitch(DSWActor* actor, int tgt_value);
|
||||||
void ShootableSwitch(DSWActor*);
|
void ShootableSwitch(DSWActor*);
|
||||||
bool TestKillSectorObject(SECTOR_OBJECTp sop);
|
bool TestKillSectorObject(SECTOR_OBJECTp sop);
|
||||||
void WeaponExplodeSectorInRange(DSWActor*);
|
void WeaponExplodeSectorInRange(DSWActor*);
|
||||||
|
|
|
@ -81,7 +81,7 @@ bool SlidorSwitch(short match, short setting)
|
||||||
if (sp->lotag == TAG_SPRITE_SWITCH_VATOR && sp->hitag == match)
|
if (sp->lotag == TAG_SPRITE_SWITCH_VATOR && sp->hitag == match)
|
||||||
{
|
{
|
||||||
found = true;
|
found = true;
|
||||||
AnimateSwitch(sp, setting);
|
AnimateSwitch(actor, setting);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,7 @@ bool SpikeSwitch(short match, short setting)
|
||||||
if (actor->spr.lotag == TAG_SPRITE_SWITCH_VATOR && actor->spr.hitag == match)
|
if (actor->spr.lotag == TAG_SPRITE_SWITCH_VATOR && actor->spr.hitag == match)
|
||||||
{
|
{
|
||||||
found = true;
|
found = true;
|
||||||
AnimateSwitch(sp, setting);
|
AnimateSwitch(actor, setting);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,7 @@ bool VatorSwitch(short match, short setting)
|
||||||
if (sp->lotag == TAG_SPRITE_SWITCH_VATOR && sp->hitag == match)
|
if (sp->lotag == TAG_SPRITE_SWITCH_VATOR && sp->hitag == match)
|
||||||
{
|
{
|
||||||
found = true;
|
found = true;
|
||||||
AnimateSwitch(sp, setting);
|
AnimateSwitch(actor, setting);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue