Skip to content

Commit

Permalink
- cleanup of Duke's actor flags.
Browse files Browse the repository at this point in the history
  • Loading branch information
coelckers committed Jan 10, 2022
1 parent e892de2 commit da5a928
Show file tree
Hide file tree
Showing 7 changed files with 225 additions and 206 deletions.
18 changes: 9 additions & 9 deletions source/games/duke/src/actors.cpp
Expand Up @@ -2892,7 +2892,9 @@ void handle_se14(DDukeActor* actor, bool checkstat, int RPG, int JIBS6)
DukeSectIterator it(actor->sector());
while (auto a2 = it.Next())
{
if (a2->spr.statnum != 10 && a2->sector()->lotag != 2 && a2->spr.picnum != SECTOREFFECTOR && a2->spr.picnum != LOCATORS)
if (a2->spr.statnum != STAT_PLAYER && a2->sector()->lotag != 2 &&
(a2->spr.picnum != SECTOREFFECTOR || a2->spr.lotag == SE_49_POINT_LIGHT || a2->spr.lotag == SE_50_SPOT_LIGHT) &&
a2->spr.picnum != LOCATORS)
{
rotatepoint(actor->spr.pos.vec2, a2->spr.pos.vec2, q, &a2->spr.pos.vec2);

Expand Down Expand Up @@ -4035,7 +4037,7 @@ DDukeActor* ifhitsectors(sectortype* sect)
DukeStatIterator it(STAT_MISC);
while (auto a1 = it.Next())
{
if (actorflag(a1, SFLAG2_TRIGGER_IFHITSECTOR) && sect == a1->sector())
if (actorflag(a1, SFLAG_TRIGGER_IFHITSECTOR) && sect == a1->sector())
return a1;
}
return nullptr;
Expand Down Expand Up @@ -4836,16 +4838,14 @@ void getglobalz(DDukeActor* actor)
{
if( actor->spr.statnum != STAT_PROJECTILE)
{
actor->aflags |= SFLAG_NOFLOORSHADOW;
//actor->dispicnum = -4; // No shadows on actors
actor->dispicnum = -4; // No shadows on actors
actor->spr.xvel = -256;
ssp(actor, CLIPMASK0);
}
}
else if(lz.actor()->isPlayer() && badguy(actor) )
{
actor->aflags |= SFLAG_NOFLOORSHADOW;
//actor->dispicnum = -4; // No shadows on actors
actor->dispicnum = -4; // No shadows on actors
actor->spr.xvel = -256;
ssp(actor, CLIPMASK0);
}
Expand Down Expand Up @@ -5276,7 +5276,7 @@ void movefta(void)

// SFLAG_MOVEFTA_CHECKSEE is set for all actors in Duke.
if (act->spr.pal == 33 || actorflag(act, SFLAG_MOVEFTA_CHECKSEE) ||
(actorflag(act, SFLAG2_MOVEFTA_CHECKSEEWITHPAL8) && act->spr.pal == 8) ||
(actorflag(act, SFLAG_MOVEFTA_CHECKSEEWITHPAL8) && act->spr.pal == 8) ||
(bcos(act->spr.ang) * (px - sx) + bsin(act->spr.ang) * (py - sy) >= 0))
{
int r1 = krand();
Expand All @@ -5294,7 +5294,7 @@ void movefta(void)

if (canseeme)
{
if (actorflag(act, SFLAG2_MOVEFTA_MAKESTANDABLE))
if (actorflag(act, SFLAG_MOVEFTA_MAKESTANDABLE))
{
if (act->sector()->ceilingstat & CSTAT_SECTOR_SKY)
act->spr.shade = act->sector()->ceilingshade;
Expand All @@ -5320,7 +5320,7 @@ void movefta(void)
else act->spr.shade = act->sector()->floorshade;

// wakeup is an RR feature, this flag will later allow it to use in Duke, too.
if (actorflag(act, SFLAG2_MOVEFTA_WAKEUPCHECK))
if (actorflag(act, SFLAG_MOVEFTA_WAKEUPCHECK))
{
if (wakeup(act, p))
{
Expand Down
2 changes: 1 addition & 1 deletion source/games/duke/src/animatesprites_r.cpp
Expand Up @@ -719,7 +719,7 @@ void animatesprites_r(tspritetype* tsprite, int& spritesortcnt, int x, int y, in
if (!isRRRA() && h->spr.picnum == SBMOVE)
t->shade = -127;

if (h->spr.statnum == 13 || badguy(h) || (h->spr.picnum == APLAYER && h->GetOwner()))
if (h->spr.statnum == STAT_DUMMYPLAYER || badguy(h) || (h->spr.picnum == APLAYER && h->GetOwner()))
if ((h->spr.cstat & CSTAT_SPRITE_ALIGNMENT_MASK) == 0 && t->statnum != 99)
if (h->spr.picnum != EXPLOSION2 && h->spr.picnum != DOMELITE && h->spr.picnum != TORNADO && h->spr.picnum != EXPLOSION3 && (h->spr.picnum != SBMOVE || isRRRA()))
{
Expand Down
51 changes: 26 additions & 25 deletions source/games/duke/src/constants.h
Expand Up @@ -291,39 +291,39 @@ enum amoveflags_t
antifaceplayerslow = 32768
};

enum aflags_t
{
AFLAG_USEACTIVATOR = 0x00000001,
};

enum sflags_t
{
SFLAG_SHADOW = 0x00000001,
SFLAG_NVG = 0x00000002,
SFLAG_INVENTORY = 0x00000004,
SFLAG_ADULT = 0x00000008,
SFLAG_SHRINKAUTOAIM = 0x00000010,
SFLAG_BADGUY = 0x00000020,
SFLAG_NOPAL = 0x00000040,
SFLAG_FORCEAUTOAIM = 0x00000080,
SFLAG_BOSS = 0x00000100,
SFLAG_USEACTIVATOR = 0x00000200,
SFLAG_NOFLOORSHADOW = 0x00001000, // for temp. internal use, per-tile flag not checked
SFLAG_BADGUYSTAYPUT = 0x00008000,
SFLAG_GREENSLIMEFOOD = 0x00800000,
SFLAG_NODAMAGEPUSH = 0x00100000,
SFLAG_NOWATERDIP = 0x00200000,
SFLAG_INTERNAL_BADGUY = 0x08000000, // a separate flag is needed for the internal ones because SFLAG_BADGUY has additional semantics.
SFLAG_KILLCOUNT = 0x10000000,
SFLAG_NOCANSEECHECK = 0x20000000,
SFLAG_HITRADIUSCHECK = 0x40000000,
SFLAG_MOVEFTA_CHECKSEE = 0x80000000,
SFLAG_INVENTORY = 0x00000001,
SFLAG_SHRINKAUTOAIM = 0x00000002,
SFLAG_BADGUY = 0x00000004,
SFLAG_FORCEAUTOAIM = 0x00000008,
SFLAG_BOSS = 0x00000010,
SFLAG_BADGUYSTAYPUT = 0x00000020,
SFLAG_GREENSLIMEFOOD = 0x00800040,
SFLAG_NODAMAGEPUSH = 0x00000080,
SFLAG_NOWATERDIP = 0x00000100,
SFLAG_INTERNAL_BADGUY = 0x00000200, // a separate flag is needed for the internal ones because SFLAG_BADGUY has additional semantics.
SFLAG_KILLCOUNT = 0x00000400,
SFLAG_NOCANSEECHECK = 0x00000800,
SFLAG_HITRADIUSCHECK = 0x00001000,
SFLAG_MOVEFTA_CHECKSEE = 0x00002000,
SFLAG_MOVEFTA_MAKESTANDABLE = 0x00004000,
SFLAG_TRIGGER_IFHITSECTOR = 0x00008000,
SFLAG_MOVEFTA_WAKEUPCHECK = 0x00010000,
SFLAG_MOVEFTA_CHECKSEEWITHPAL8 = 0x00020000, // let's hope this can be done better later. For now this was what blocked merging the Duke and RR variants of movefta

};

using EDukeFlags1 = TFlags<sflags_t, uint32_t>;
DEFINE_TFLAGS_OPERATORS(EDukeFlags1)

enum sflags2_t
{
SFLAG2_MOVEFTA_MAKESTANDABLE = 0x00000001,
SFLAG2_TRIGGER_IFHITSECTOR = 0x00000002,
SFLAG2_MOVEFTA_WAKEUPCHECK = 0x00000004,
SFLAG2_MOVEFTA_CHECKSEEWITHPAL8 = 0x00000008, // let's hope this can be done better later. For now this was what blocked merging the Duke and RR variants of movefta

};

Expand All @@ -332,7 +332,8 @@ DEFINE_TFLAGS_OPERATORS(EDukeFlags2)

enum
{
TFLAG_WALLSWITCH = 1
TFLAG_WALLSWITCH = 1,
TFLAG_ADULT = 2,
};

enum
Expand Down
185 changes: 93 additions & 92 deletions source/games/duke/src/flags_d.cpp
Expand Up @@ -40,118 +40,49 @@ BEGIN_DUKE_NS

void initactorflags_d()
{
gs.actorinfo[COMMANDER].gutsoffset = -(24 << 8);

for (auto &fa : gs.actorinfo)
{
fa.falladjustz = 24 << 8;
}
gs.actorinfo[OCTABRAIN].falladjustz = gs.actorinfo[COMMANDER].falladjustz = gs.actorinfo[DRONE].falladjustz = 0;

setflag(SFLAG_INTERNAL_BADGUY, {
SHARK,
RECON,
DRONE,
LIZTROOPONTOILET,
LIZTROOPJUSTSIT,
LIZTROOPSTAYPUT,
LIZTROOPSHOOT,
LIZTROOPJETPACK,
LIZTROOPDUCKING,
LIZTROOPRUNNING,
LIZTROOP,
OCTABRAIN,
COMMANDER,
COMMANDERSTAYPUT,
PIGCOP,
EGG,
PIGCOPSTAYPUT,
PIGCOPDIVE,
LIZMAN,
LIZMANSPITTING,
LIZMANFEEDING,
LIZMANJUMP,
ORGANTIC,
BOSS1,
BOSS2,
BOSS3,
BOSS4,
GREENSLIME,
GREENSLIME+1,
GREENSLIME+2,
GREENSLIME+3,
GREENSLIME+4,
GREENSLIME+5,
GREENSLIME+6,
GREENSLIME+7,
RAT,
ROTATEGUN });

// Some flags taken from RedNukem's init code. This is a good start as any to reduce the insane dependency on tile numbers for making decisions in the play code. A lot more will be added here later.
setflag(SFLAG_NODAMAGEPUSH, { TANK, BOSS1, BOSS2, BOSS3, BOSS4, RECON, ROTATEGUN });
setflag(SFLAG_BOSS, { BOSS1, BOSS2, BOSS3, BOSS4, BOSS4STAYPUT, BOSS1STAYPUT });
if (isWorldTour()) setflag(SFLAG_BOSS, { BOSS2STAYPUT, BOSS3STAYPUT, BOSS5, BOSS5STAYPUT });
setflag(SFLAG_NOWATERDIP, { OCTABRAIN, COMMANDER, DRONE });
setflag(SFLAG_GREENSLIMEFOOD, { LIZTROOP, LIZMAN, PIGCOP, NEWBEAST });

if (isWorldTour())
{
setflag(SFLAG_INTERNAL_BADGUY, { FIREFLY });
setflag(SFLAG_INTERNAL_BADGUY|SFLAG_NODAMAGEPUSH|SFLAG_BOSS, { BOSS5 });
}

settileflag(TFLAG_WALLSWITCH, {
HANDPRINTSWITCH,
HANDPRINTSWITCH+1,
HANDPRINTSWITCH + 1,
ALIENSWITCH,
ALIENSWITCH+1,
ALIENSWITCH + 1,
MULTISWITCH,
MULTISWITCH+1,
MULTISWITCH+2,
MULTISWITCH+3,
MULTISWITCH + 1,
MULTISWITCH + 2,
MULTISWITCH + 3,
ACCESSSWITCH,
ACCESSSWITCH2,
PULLSWITCH,
PULLSWITCH+1,
PULLSWITCH + 1,
HANDSWITCH,
HANDSWITCH+1,
HANDSWITCH + 1,
SLOTDOOR,
SLOTDOOR+1,
SLOTDOOR + 1,
LIGHTSWITCH,
LIGHTSWITCH+1,
LIGHTSWITCH + 1,
SPACELIGHTSWITCH,
SPACELIGHTSWITCH+1,
SPACELIGHTSWITCH + 1,
SPACEDOORSWITCH,
SPACEDOORSWITCH+1,
SPACEDOORSWITCH + 1,
FRANKENSTINESWITCH,
FRANKENSTINESWITCH+1,
FRANKENSTINESWITCH + 1,
LIGHTSWITCH2,
LIGHTSWITCH2+1,
LIGHTSWITCH2 + 1,
POWERSWITCH1,
POWERSWITCH1+1,
POWERSWITCH1 + 1,
LOCKSWITCH1,
LOCKSWITCH1+1,
LOCKSWITCH1 + 1,
POWERSWITCH2,
POWERSWITCH2+1,
POWERSWITCH2 + 1,
DIPSWITCH,
DIPSWITCH+1,
DIPSWITCH + 1,
DIPSWITCH2,
DIPSWITCH2+1,
DIPSWITCH2 + 1,
TECHSWITCH,
TECHSWITCH+1,
TECHSWITCH + 1,
DIPSWITCH3,
DIPSWITCH3+1});
DIPSWITCH3 + 1 });

setflag(SFLAG_INVENTORY, {
FIRSTAID,
STEROIDS,
HEATSENSOR,
BOOTS,
JETPACK,
HOLODUKE,
AIRTANK });

setflag(SFLAG_ADULT, {
settileflag(TFLAG_ADULT, {
FEM1,
FEM2,
FEM3,
Expand Down Expand Up @@ -213,6 +144,76 @@ void initactorflags_d()
4498,
4957 });


gs.actorinfo[COMMANDER].gutsoffset = -(24 << 8);

for (auto &fa : gs.actorinfo)
{
fa.falladjustz = 24 << 8;
}
gs.actorinfo[OCTABRAIN].falladjustz = gs.actorinfo[COMMANDER].falladjustz = gs.actorinfo[DRONE].falladjustz = 0;

setflag(SFLAG_INTERNAL_BADGUY, {
SHARK,
RECON,
DRONE,
LIZTROOPONTOILET,
LIZTROOPJUSTSIT,
LIZTROOPSTAYPUT,
LIZTROOPSHOOT,
LIZTROOPJETPACK,
LIZTROOPDUCKING,
LIZTROOPRUNNING,
LIZTROOP,
OCTABRAIN,
COMMANDER,
COMMANDERSTAYPUT,
PIGCOP,
EGG,
PIGCOPSTAYPUT,
PIGCOPDIVE,
LIZMAN,
LIZMANSPITTING,
LIZMANFEEDING,
LIZMANJUMP,
ORGANTIC,
BOSS1,
BOSS2,
BOSS3,
BOSS4,
GREENSLIME,
GREENSLIME+1,
GREENSLIME+2,
GREENSLIME+3,
GREENSLIME+4,
GREENSLIME+5,
GREENSLIME+6,
GREENSLIME+7,
RAT,
ROTATEGUN });

// Some flags taken from RedNukem's init code. This is a good start as any to reduce the insane dependency on tile numbers for making decisions in the play code. A lot more will be added here later.
setflag(SFLAG_NODAMAGEPUSH, { TANK, BOSS1, BOSS2, BOSS3, BOSS4, RECON, ROTATEGUN });
setflag(SFLAG_BOSS, { BOSS1, BOSS2, BOSS3, BOSS4, BOSS4STAYPUT, BOSS1STAYPUT });
if (isWorldTour()) setflag(SFLAG_BOSS, { BOSS2STAYPUT, BOSS3STAYPUT, BOSS5, BOSS5STAYPUT });
setflag(SFLAG_NOWATERDIP, { OCTABRAIN, COMMANDER, DRONE });
setflag(SFLAG_GREENSLIMEFOOD, { LIZTROOP, LIZMAN, PIGCOP, NEWBEAST });

if (isWorldTour())
{
setflag(SFLAG_INTERNAL_BADGUY, { FIREFLY });
setflag(SFLAG_INTERNAL_BADGUY|SFLAG_NODAMAGEPUSH|SFLAG_BOSS, { BOSS5 });
}

setflag(SFLAG_INVENTORY, {
FIRSTAID,
STEROIDS,
HEATSENSOR,
BOOTS,
JETPACK,
HOLODUKE,
AIRTANK });

setflag(SFLAG_SHRINKAUTOAIM, {
GREENSLIME,
GREENSLIME + 1,
Expand Down Expand Up @@ -243,9 +244,9 @@ void initactorflags_d()
STRIPEBALL
});

setflag(SFLAG2_TRIGGER_IFHITSECTOR, { EXPLOSION2 });
setflag(SFLAG_TRIGGER_IFHITSECTOR, { EXPLOSION2 });

setflag(SFLAG2_MOVEFTA_MAKESTANDABLE, {
setflag(SFLAG_MOVEFTA_MAKESTANDABLE, {
RUBBERCAN,
EXPLODINGBARREL,
WOODENHORSE,
Expand Down

0 comments on commit da5a928

Please sign in to comment.