mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-15 17:01:51 +00:00
- turned the exclude lists for initspriteforspawn into a flag.
This commit is contained in:
parent
e4cfc374be
commit
a776e5c56e
7 changed files with 32 additions and 29 deletions
|
@ -325,6 +325,7 @@ enum sflags_t
|
||||||
SFLAG_NOTELEPORT = 0x10000000,
|
SFLAG_NOTELEPORT = 0x10000000,
|
||||||
SFLAG_SE24_REMOVE = 0x20000000,
|
SFLAG_SE24_REMOVE = 0x20000000,
|
||||||
SFLAG_BLOCK_TRIPBOMB = 0x40000000,
|
SFLAG_BLOCK_TRIPBOMB = 0x40000000,
|
||||||
|
SFLAG_NOFALLER = 0x80000000,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -210,6 +210,7 @@ void initactorflags_d()
|
||||||
setflag(SFLAG_SE24_NOCARRY, { TRIPBOMB, LASERLINE, BOLT1, BOLT1 + 1,BOLT1 + 2, BOLT1 + 3, SIDEBOLT1, SIDEBOLT1 + 1, SIDEBOLT1 + 2, SIDEBOLT1 + 3, CRANE, CRANE1, CRANE2, BARBROKE });
|
setflag(SFLAG_SE24_NOCARRY, { TRIPBOMB, LASERLINE, BOLT1, BOLT1 + 1,BOLT1 + 2, BOLT1 + 3, SIDEBOLT1, SIDEBOLT1 + 1, SIDEBOLT1 + 2, SIDEBOLT1 + 3, CRANE, CRANE1, CRANE2, BARBROKE });
|
||||||
setflag(SFLAG_SE24_REMOVE, { BLOODPOOL, PUKE, FOOTPRINTS, FOOTPRINTS2, FOOTPRINTS3, FOOTPRINTS4, BULLETHOLE, BLOODSPLAT1, BLOODSPLAT2, BLOODSPLAT3, BLOODSPLAT4 });
|
setflag(SFLAG_SE24_REMOVE, { BLOODPOOL, PUKE, FOOTPRINTS, FOOTPRINTS2, FOOTPRINTS3, FOOTPRINTS4, BULLETHOLE, BLOODSPLAT1, BLOODSPLAT2, BLOODSPLAT3, BLOODSPLAT4 });
|
||||||
setflag(SFLAG_BLOCK_TRIPBOMB, { TRIPBOMB }); // making this a flag adds the option to let other things block placing trip bombs as well.
|
setflag(SFLAG_BLOCK_TRIPBOMB, { TRIPBOMB }); // making this a flag adds the option to let other things block placing trip bombs as well.
|
||||||
|
setflag(SFLAG_NOFALLER, { CRACK1, CRACK2, CRACK3, CRACK4, SPEAKER, LETTER, DUCK, TARGET, TRIPBOMB, VIEWSCREEN, VIEWSCREEN2 });
|
||||||
|
|
||||||
if (isWorldTour())
|
if (isWorldTour())
|
||||||
{
|
{
|
||||||
|
|
|
@ -239,6 +239,7 @@ void initactorflags_r()
|
||||||
setflag(SFLAG_NOTELEPORT, { TRANSPORTERSTAR, TRANSPORTERBEAM, BULLETHOLE, WATERSPLASH2, BURNING, FIRE, MUD });
|
setflag(SFLAG_NOTELEPORT, { TRANSPORTERSTAR, TRANSPORTERBEAM, BULLETHOLE, WATERSPLASH2, BURNING, FIRE, MUD });
|
||||||
setflag(SFLAG_SE24_NOCARRY, { BULLETHOLE, BOLT1, BOLT1 + 1,BOLT1 + 2, BOLT1 + 3, CRANE, CRANE1, CRANE2, BARBROKE });
|
setflag(SFLAG_SE24_NOCARRY, { BULLETHOLE, BOLT1, BOLT1 + 1,BOLT1 + 2, BOLT1 + 3, CRANE, CRANE1, CRANE2, BARBROKE });
|
||||||
setflag(SFLAG_SE24_REMOVE, { BLOODPOOL, PUKE, FOOTPRINTS, FOOTPRINTS2, FOOTPRINTS3 });
|
setflag(SFLAG_SE24_REMOVE, { BLOODPOOL, PUKE, FOOTPRINTS, FOOTPRINTS2, FOOTPRINTS3 });
|
||||||
|
setflag(SFLAG_NOFALLER, { CRACK1, CRACK2, CRACK3, CRACK4 });
|
||||||
|
|
||||||
// Animals were not supposed to have this, but due to a coding bug the logic was unconditional for everything in the game.
|
// Animals were not supposed to have this, but due to a coding bug the logic was unconditional for everything in the game.
|
||||||
for (auto& ainf : gs.actorinfo)
|
for (auto& ainf : gs.actorinfo)
|
||||||
|
|
|
@ -187,7 +187,7 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
|
||||||
|
|
||||||
void addspritetodelete(int spnum=0);
|
void addspritetodelete(int spnum=0);
|
||||||
void checkavailinven(struct player_struct* p);
|
void checkavailinven(struct player_struct* p);
|
||||||
bool initspriteforspawn(DDukeActor* spn, const std::initializer_list<int> &excludes);
|
bool initspriteforspawn(DDukeActor* spn);
|
||||||
void spawninitdefault(DDukeActor* actj, DDukeActor* act);
|
void spawninitdefault(DDukeActor* actj, DDukeActor* act);
|
||||||
void spawntransporter(DDukeActor* actj, DDukeActor* acti, bool beam);
|
void spawntransporter(DDukeActor* actj, DDukeActor* acti, bool beam);
|
||||||
int spawnbloodpoolpart1(DDukeActor* acti);
|
int spawnbloodpoolpart1(DDukeActor* acti);
|
||||||
|
|
|
@ -266,7 +266,7 @@ void cacheit_d(void)
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
void spriteinit_d(DDukeActor* actor, TArray<DDukeActor*>& actors)
|
void spriteinit_d(DDukeActor* actor, TArray<DDukeActor*>& actors)
|
||||||
{
|
{
|
||||||
bool res = initspriteforspawn(actor, { CRACK1, CRACK2, CRACK3, CRACK4, SPEAKER, LETTER, DUCK, TARGET, TRIPBOMB, VIEWSCREEN, VIEWSCREEN2 });
|
bool res = initspriteforspawn(actor);
|
||||||
if (res) spawninit_d(nullptr, actor, &actors);
|
if (res) spawninit_d(nullptr, actor, &actors);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -404,7 +404,7 @@ void cacheit_r(void)
|
||||||
|
|
||||||
void spriteinit_r(DDukeActor* actor, TArray<DDukeActor*>& actors)
|
void spriteinit_r(DDukeActor* actor, TArray<DDukeActor*>& actors)
|
||||||
{
|
{
|
||||||
bool res = initspriteforspawn(actor, { CRACK1, CRACK2, CRACK3, CRACK4 });
|
bool res = initspriteforspawn(actor);
|
||||||
if (res) spawninit_r(nullptr, actor, &actors);
|
if (res) spawninit_r(nullptr, actor, &actors);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -135,7 +135,7 @@ DDukeActor* EGS(sectortype* whatsectp, int s_x, int s_y, int s_z, int s_pn, int8
|
||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
bool initspriteforspawn(DDukeActor* act, const std::initializer_list<int> &excludes)
|
bool initspriteforspawn(DDukeActor* act)
|
||||||
{
|
{
|
||||||
SetupGameVarsForActor(act);
|
SetupGameVarsForActor(act);
|
||||||
act->attackertype = act->spr.picnum;
|
act->attackertype = act->spr.picnum;
|
||||||
|
@ -160,10 +160,6 @@ bool initspriteforspawn(DDukeActor* act, const std::initializer_list<int> &exclu
|
||||||
act->temp_data[0] = act->temp_data[1] = act->temp_data[2] = act->temp_data[3] = act->temp_data[4] = act->temp_data[5] = 0;
|
act->temp_data[0] = act->temp_data[1] = act->temp_data[2] = act->temp_data[3] = act->temp_data[4] = act->temp_data[5] = 0;
|
||||||
act->temp_actor = nullptr;
|
act->temp_actor = nullptr;
|
||||||
|
|
||||||
if (act->spr.cstat & CSTAT_SPRITE_ALIGNMENT_MASK)
|
|
||||||
if (!isIn(act->spr.picnum, excludes) && (act->spr.cstat & CSTAT_SPRITE_ALIGNMENT_MASK))
|
|
||||||
{
|
|
||||||
if (act->spr.shade == 127) return false;
|
|
||||||
if (wallswitchcheck(act) && (act->spr.cstat & CSTAT_SPRITE_ALIGNMENT_WALL))
|
if (wallswitchcheck(act) && (act->spr.cstat & CSTAT_SPRITE_ALIGNMENT_WALL))
|
||||||
{
|
{
|
||||||
if (act->spr.picnum != TILE_ACCESSSWITCH && act->spr.picnum != TILE_ACCESSSWITCH2 && act->spr.pal)
|
if (act->spr.picnum != TILE_ACCESSSWITCH && act->spr.picnum != TILE_ACCESSSWITCH2 && act->spr.pal)
|
||||||
|
@ -182,9 +178,13 @@ bool initspriteforspawn(DDukeActor* act, const std::initializer_list<int> &exclu
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!actorflag(act, SFLAG_NOFALLER) && (act->spr.cstat & CSTAT_SPRITE_ALIGNMENT_MASK))
|
||||||
|
{
|
||||||
|
if (act->spr.shade == 127) return false;
|
||||||
|
|
||||||
if (act->spr.hitag)
|
if (act->spr.hitag)
|
||||||
{
|
{
|
||||||
ChangeActorStat(act, 12);
|
ChangeActorStat(act, STAT_FALLER);
|
||||||
act->spr.cstat |= CSTAT_SPRITE_BLOCK_ALL;
|
act->spr.cstat |= CSTAT_SPRITE_BLOCK_ALL;
|
||||||
act->spr.extra = gs.impact_damage;
|
act->spr.extra = gs.impact_damage;
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in a new issue