- two more flags to get sprite indices out of movecrack.

# Conflicts:
#	source/games/duke/src/constants.h
This commit is contained in:
Christoph Oelckers 2022-01-19 19:15:23 +01:00
parent d3f2d50088
commit fba8f54bb3
8 changed files with 28 additions and 22 deletions

View file

@ -955,7 +955,7 @@ void detonate(DDukeActor *actor, int explosion)
//
//---------------------------------------------------------------------------
void movemasterswitch(DDukeActor *actor, int spectype1, int spectype2)
void movemasterswitch(DDukeActor *actor)
{
if (actor->spr.yvel == 1)
{
@ -985,7 +985,7 @@ void movemasterswitch(DDukeActor *actor, int spectype1, int spectype2)
}
else if (effector->spr.statnum == STAT_STANDABLE)
{
if (effector->spr.picnum == spectype1 || effector->spr.picnum == spectype2) // SEENINE and OOZFILTER
if (actorflag(effector, SFLAG2_BRIGHTEXPLODE)) // SEENINE and OOZFILTER
{
effector->spr.shade = -31;
}

View file

@ -725,7 +725,7 @@ void movefallers_d(void)
j = fi.ifhitbyweapon(act);
if (j >= 0)
{
if (j == FIREEXT || j == RPG || j == RADIUSEXPLOSION || j == SEENINE || j == OOZFILTER)
if (gs.actorinfo[j].flags2 & SFLAG2_EXPLOSIVE)
{
if (act->spr.extra <= 0)
{
@ -984,12 +984,12 @@ static void movecrack(DDukeActor* actor)
actor->temp_data[0] = actor->spr.cstat;
actor->temp_data[1] = actor->spr.ang;
int j = fi.ifhitbyweapon(actor);
if (j == FIREEXT || j == RPG || j == RADIUSEXPLOSION || j == SEENINE || j == OOZFILTER)
if (gs.actorinfo[j].flags2 & SFLAG2_EXPLOSIVE)
{
DukeStatIterator it(STAT_STANDABLE);
while (auto a1 = it.Next())
{
if (actor->spr.hitag == a1->spr.hitag && (a1->spr.picnum == OOZFILTER || a1->spr.picnum == SEENINE))
if (actor->spr.hitag == a1->spr.hitag && actorflag(a1, SFLAG2_BRIGHTEXPLODE))
if (a1->spr.shade != -32)
a1->spr.shade = -32;
}
@ -1030,7 +1030,7 @@ static void movefireext(DDukeActor* actor)
DukeStatIterator it(STAT_STANDABLE);
while (auto a1 = it.Next())
{
if (actor->spr.hitag == a1->spr.hitag && (a1->spr.picnum == OOZFILTER || a1->spr.picnum == SEENINE))
if (actor->spr.hitag == a1->spr.hitag && actorflag(a1, SFLAG2_BRIGHTEXPLODE))
if (a1->spr.shade != -32)
a1->spr.shade = -32;
}
@ -1233,7 +1233,7 @@ void movestandables_d(void)
else if (picnum == MASTERSWITCH)
{
movemasterswitch(act, SEENINE, OOZFILTER);
movemasterswitch(act);
}
else if (picnum == VIEWSCREEN || picnum == VIEWSCREEN2)

View file

@ -650,7 +650,7 @@ void movefallers_r(void)
int j = fi.ifhitbyweapon(act);
if (j >= 0)
{
if (j == RPG || (isRRRA() && j == RPG2) || j == RADIUSEXPLOSION || j == SEENINE || j == OOZFILTER)
if (gs.actorinfo[j].flags2 & SFLAG2_EXPLOSIVE)
{
if (act->spr.extra <= 0)
{
@ -740,12 +740,12 @@ static void movecrack(DDukeActor* actor)
actor->temp_data[0] = actor->spr.cstat;
actor->temp_data[1] = actor->spr.ang;
int j = fi.ifhitbyweapon(actor);
if (j == RPG || (isRRRA() && j == RPG2) || j == RADIUSEXPLOSION || j == SEENINE || j == OOZFILTER)
if (gs.actorinfo[j].flags2 & SFLAG2_EXPLOSIVE)
{
DukeStatIterator it(STAT_STANDABLE);
while (auto a1 = it.Next())
{
if (actor->spr.hitag == a1->spr.hitag && (a1->spr.picnum == OOZFILTER || a1->spr.picnum == SEENINE))
if (actor->spr.hitag == a1->spr.hitag && actorflag(a1, SFLAG2_BRIGHTEXPLODE))
if (a1->spr.shade != -32)
a1->spr.shade = -32;
}
@ -869,7 +869,7 @@ void movestandables_r(void)
else if (picnum == MASTERSWITCH)
{
movemasterswitch(act, SEENINE, OOZFILTER);
movemasterswitch(act);
}
else if (picnum == TRASH)

View file

@ -337,6 +337,8 @@ enum sflags2_t
SFLAG2_NOROTATEWITHSECTOR = 0x00000002,
SFLAG2_SHOWWALLSPRITEONMAP = 0x00000004,
SFLAG2_NOFLOORPAL = 0x00000008,
SFLAG2_EXPLOSIVE = 0x00000010,
SFLAG2_BRIGHTEXPLODE = 0x00000020,
};
using EDukeFlags2 = TFlags<sflags2_t, uint32_t>;

View file

@ -214,6 +214,8 @@ void initactorflags_d()
setflag(SFLAG2_NOROTATEWITHSECTOR, { LASERLINE });
setflag(SFLAG2_SHOWWALLSPRITEONMAP, { LASERLINE });
setflag(SFLAG2_NOFLOORPAL, { TRIPBOMB, LASERLINE });
setflag(SFLAG2_EXPLOSIVE, { FIREEXT, RPG, RADIUSEXPLOSION, SEENINE, OOZFILTER });
setflag(SFLAG2_BRIGHTEXPLODE, { SEENINE, OOZFILTER });
if (isWorldTour())
{

View file

@ -107,7 +107,7 @@ void initactorflags_r()
TOUGHGAL });
for (auto &fa : gs.actorinfo)
for (auto& fa : gs.actorinfo)
{
fa.falladjustz = 24 << 8;
}
@ -120,7 +120,7 @@ void initactorflags_r()
gs.actorinfo[DRONE].falladjustz = 0;
setflag(SFLAG_INTERNAL_BADGUY|SFLAG_KILLCOUNT, {
setflag(SFLAG_INTERNAL_BADGUY | SFLAG_KILLCOUNT, {
BOULDER,
BOULDER1,
EGG,
@ -145,9 +145,9 @@ void initactorflags_r()
COOT,
COOTSTAYPUT,
SHARK,
VIXEN});
VIXEN });
if (isRRRA()) setflag(SFLAG_INTERNAL_BADGUY|SFLAG_KILLCOUNT, {
if (isRRRA()) setflag(SFLAG_INTERNAL_BADGUY | SFLAG_KILLCOUNT, {
SBSWIPE,
BIKERB,
BIKERBV2,
@ -163,14 +163,14 @@ void initactorflags_r()
CHEERBOAT,
RABBIT,
MAMA,
UFO1_RRRA});
else setflag(SFLAG_INTERNAL_BADGUY|SFLAG_KILLCOUNT, {
UFO1_RRRA });
else setflag(SFLAG_INTERNAL_BADGUY | SFLAG_KILLCOUNT, {
SBMOVE,
UFO1_RR,
UFO2,
UFO3,
UFO4,
UFO5});
UFO5 });
// Why does the pig count as kill? Let's undo that.
gs.actorinfo[PIG].flags &= ~SFLAG_KILLCOUNT;
@ -178,7 +178,7 @@ void initactorflags_r()
gs.actorinfo[DRONE].flags |= SFLAG_NOWATERDIP;
gs.actorinfo[VIXEN].flags |= SFLAG_NOCANSEECHECK;
if (isRRRA())
if (isRRRA())
{
setflag(SFLAG_KILLCOUNT, { ROCK, ROCK2 }); //???
setflag(SFLAG_NODAMAGEPUSH, { HULK, MAMA, BILLYPLAY, COOTPLAY, MAMACLOUD });
@ -225,7 +225,7 @@ void initactorflags_r()
FIREVASE,
NUKEBARREL,
NUKEBARRELDENTED,
NUKEBARRELLEAKED
NUKEBARRELLEAKED
});
setflag(SFLAG_NOINTERPOLATE, { CRANEPOLE });
@ -240,6 +240,9 @@ void initactorflags_r()
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_NOFALLER, { CRACK1, CRACK2, CRACK3, CRACK4 });
setflag(SFLAG2_EXPLOSIVE, {RPG, RADIUSEXPLOSION, SEENINE, OOZFILTER });
if (isRRRA()) setflag(SFLAG2_EXPLOSIVE, { RPG2 });
setflag(SFLAG2_BRIGHTEXPLODE, { SEENINE, OOZFILTER });
// 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)

View file

@ -35,7 +35,7 @@ void movecrane(DDukeActor* i, int crane);
void movefountain(DDukeActor* i, int fountain);
void moveflammable(DDukeActor* i, int pool);
void detonate(DDukeActor* i, int explosion);
void movemasterswitch(DDukeActor* i, int spectype1, int spectype2);
void movemasterswitch(DDukeActor* i);
void movetrash(DDukeActor* i);
void movewaterdrip(DDukeActor* i, int drip);
void movedoorshock(DDukeActor* i);

View file

@ -533,7 +533,6 @@ x(SHOTGUNSHELL, 1704)
x(RPGMUZZLEFLASH, 1714)
x(CATLITE, 1721)
x(HANDHOLDINGLASER, 1732)
x(LASERLINE, 1736)
x(HANDHOLDINGACCESS, 1737)
x(HANDREMOTE, 1739)
x(TIP, 1745)