mirror of
https://github.com/DrBeef/Raze.git
synced 2025-02-20 18:52:43 +00:00
- QueueLoWangs
This commit is contained in:
parent
58749b2770
commit
c14fb9e93f
5 changed files with 21 additions and 26 deletions
|
@ -579,7 +579,7 @@ extern FOOT_TYPE FootMode;
|
|||
ANIMATOR QueueFloorBlood; // Weapon.c
|
||||
int QueueFootPrint(short hit_sprite); // Weapon.c
|
||||
int QueueGeneric(short SpriteNum, short pic); // Weapon.c
|
||||
int QueueLoWangs(short SpriteNum); // Weapon.c
|
||||
void QueueLoWangs(DSWActor*); // Weapon.c
|
||||
int SpawnShell(DSWActor* actor, int ShellNum); // JWeapon.c
|
||||
void UnlockKeyLock(short key_num, DSWActor* actor); // JSector.c
|
||||
|
||||
|
|
|
@ -5859,7 +5859,7 @@ void DoPlayerDeathCheckKeys(PLAYERp pp)
|
|||
if (PlayerFloorHit(pp, pp->loz - PLAYER_HEIGHT))
|
||||
{
|
||||
if (pp->DeathType == PLAYER_DEATH_FLIP || pp->DeathType == PLAYER_DEATH_RIPPER)
|
||||
QueueLoWangs(pp->PlayerSprite);
|
||||
QueueLoWangs(pp->Actor());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -4600,8 +4600,7 @@ int NewStateGroup(DSWActor* actor, STATEp StateGroup[])
|
|||
}
|
||||
|
||||
|
||||
bool
|
||||
SpriteOverlap(int16_t spritenum_a, int16_t spritenum_b)
|
||||
bool SpriteOverlap(int16_t spritenum_a, int16_t spritenum_b)
|
||||
{
|
||||
SPRITEp spa = &sprite[spritenum_a], spb = &sprite[spritenum_b];
|
||||
|
||||
|
|
|
@ -84,7 +84,7 @@ short FloorBloodQueue[MAX_FLOORBLOOD_QUEUE];
|
|||
short GenericQueueHead=0;
|
||||
short GenericQueue[MAX_GENERIC_QUEUE];
|
||||
short LoWangsQueueHead=0;
|
||||
short LoWangsQueue[MAX_LOWANGS_QUEUE];
|
||||
DSWActor* LoWangsQueue[MAX_LOWANGS_QUEUE];
|
||||
int SpawnBreakStaticFlames(short);
|
||||
|
||||
bool GlobalSkipZrange = false;
|
||||
|
@ -19970,8 +19970,8 @@ void SpriteQueueDelete(DSWActor* actor)
|
|||
GenericQueue[i] = -1;
|
||||
|
||||
for (i = 0; i < MAX_LOWANGS_QUEUE; i++)
|
||||
if (LoWangsQueue[i] == SpriteNum)
|
||||
LoWangsQueue[i] = -1;
|
||||
if (LoWangsQueue[i] == actor)
|
||||
LoWangsQueue[i] = nullptr;
|
||||
}
|
||||
|
||||
|
||||
|
@ -20002,7 +20002,7 @@ void QueueReset(void)
|
|||
GenericQueue[i] = -1;
|
||||
|
||||
for (i = 0; i < MAX_LOWANGS_QUEUE; i++)
|
||||
LoWangsQueue[i] = -1;
|
||||
LoWangsQueue[i] = nullptr;
|
||||
}
|
||||
|
||||
bool TestDontStick(short SpriteNum, short hit_wall)
|
||||
|
@ -21102,62 +21102,58 @@ DoItemFly(int16_t SpriteNum)
|
|||
}
|
||||
|
||||
// This is the FAST queue, it doesn't call any animator functions or states
|
||||
int QueueLoWangs(short SpriteNum)
|
||||
void QueueLoWangs(DSWActor* actor)
|
||||
{
|
||||
auto actor = &swActors[SpriteNum];
|
||||
SPRITEp sp = &actor->s(),ps;
|
||||
USERp u;
|
||||
short NewSprite;
|
||||
DSWActor* NewSprite;
|
||||
|
||||
|
||||
if (TEST(sector[sp->sectnum].extra, SECTFX_LIQUID_MASK) == SECTFX_LIQUID_WATER)
|
||||
{
|
||||
return -1;
|
||||
return;
|
||||
}
|
||||
|
||||
if (TEST(sector[sp->sectnum].extra, SECTFX_LIQUID_MASK) == SECTFX_LIQUID_LAVA)
|
||||
{
|
||||
return -1;
|
||||
return;
|
||||
}
|
||||
|
||||
if (TestDontStickSector(sp->sectnum))
|
||||
{
|
||||
return -1;
|
||||
return;
|
||||
}
|
||||
|
||||
if (LoWangsQueue[LoWangsQueueHead] == -1)
|
||||
if (LoWangsQueue[LoWangsQueueHead] == nullptr)
|
||||
{
|
||||
LoWangsQueue[LoWangsQueueHead] = NewSprite =
|
||||
SpawnSprite(STAT_GENERIC_QUEUE, sp->picnum, s_DeadLoWang, sp->sectnum,
|
||||
SpawnActor(STAT_GENERIC_QUEUE, sp->picnum, s_DeadLoWang, sp->sectnum,
|
||||
sp->x, sp->y, sp->z, sp->ang, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
// move old sprite to new sprite's place
|
||||
setspritez(LoWangsQueue[LoWangsQueueHead], &sp->pos);
|
||||
SetActorZ(LoWangsQueue[LoWangsQueueHead], &sp->pos);
|
||||
NewSprite = LoWangsQueue[LoWangsQueueHead];
|
||||
ASSERT(sprite[NewSprite].statnum != MAXSTATUS);
|
||||
ASSERT(NewSprite->s().statnum != MAXSTATUS);
|
||||
}
|
||||
|
||||
// Point passed in sprite to ps
|
||||
ps = sp;
|
||||
sp = &sprite[NewSprite];
|
||||
u = User[NewSprite].Data();
|
||||
ASSERT(sp);
|
||||
sp->owner = -1;
|
||||
sp = &NewSprite->s();
|
||||
u = NewSprite->u();
|
||||
ClearOwner(NewSprite);
|
||||
sp->cstat = 0;
|
||||
sp->xrepeat = ps->xrepeat;
|
||||
sp->yrepeat = ps->yrepeat;
|
||||
sp->shade = ps->shade;
|
||||
u->spal = sp->pal = ps->pal;
|
||||
change_actor_stat(&swActors[NewSprite],STAT_DEFAULT); // Breakable
|
||||
change_actor_stat(NewSprite, STAT_DEFAULT); // Breakable
|
||||
SET(sp->cstat, CSTAT_SPRITE_BREAKABLE);
|
||||
SET(sp->extra, SPRX_BREAKABLE);
|
||||
SET(sp->cstat, CSTAT_SPRITE_BLOCK_HITSCAN);
|
||||
|
||||
LoWangsQueueHead = (LoWangsQueueHead+1) & (MAX_LOWANGS_QUEUE-1);
|
||||
|
||||
return SpriteNum;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@ extern short FloorBloodQueue[MAX_FLOORBLOOD_QUEUE];
|
|||
extern short GenericQueueHead;
|
||||
extern short GenericQueue[MAX_GENERIC_QUEUE];
|
||||
extern short LoWangsQueueHead;
|
||||
extern short LoWangsQueue[MAX_LOWANGS_QUEUE];
|
||||
extern DSWActor* LoWangsQueue[MAX_LOWANGS_QUEUE];
|
||||
|
||||
void ChangeState(DSWActor* actor, STATEp statep);
|
||||
void DoPlayerBeginRecoil(PLAYERp pp, short pix_amt);
|
||||
|
|
Loading…
Reference in a new issue