diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index c1dcb9aae..1237cf1bf 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -332,7 +332,7 @@ void hitradius_d(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int h fi.checkhitsprite(act2, actor); } } - else if (act2->spr.extra >= 0 && act2 != actor && (act2->spr.picnum == TRIPBOMB || badguy(act2) || act2->spr.picnum == QUEBALL || act2->spr.picnum == STRIPEBALL || (act2->spr.cstat & CSTAT_SPRITE_BLOCK_ALL) || act2->spr.picnum == DUKELYINGDEAD)) + else if (act2->spr.extra >= 0 && act2 != actor && (actorflag(act2, SFLAG_HITRADIUS_FLAG2) || badguy(act2) || (act2->spr.cstat & CSTAT_SPRITE_BLOCK_ALL))) { if (actor->spr.picnum == SHRINKSPARK && act2->spr.picnum != SHARK && (act2 == Owner || act2->spr.xrepeat < 24)) { diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp index 4f15d49bb..975899497 100644 --- a/source/games/duke/src/actors_r.cpp +++ b/source/games/duke/src/actors_r.cpp @@ -279,7 +279,7 @@ void hitradius_r(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int h fi.checkhitsprite(act2, actor); } } - else if (act2->spr.extra >= 0 && act2 != actor && (badguy(act2) || act2->spr.picnum == QUEBALL || act2->spr.picnum == BOWLINGPIN || act2->spr.picnum == STRIPEBALL || (act2->spr.cstat & CSTAT_SPRITE_BLOCK_ALL) || act2->spr.picnum == DUKELYINGDEAD)) + else if (act2->spr.extra >= 0 && act2 != actor && (actorflag(act2, SFLAG_HITRADIUS_FLAG2) || badguy(act2) || (act2->spr.cstat & CSTAT_SPRITE_BLOCK_ALL))) { if (actor->spr.picnum == MORTER && act2 == Owner) { diff --git a/source/games/duke/src/constants.h b/source/games/duke/src/constants.h index 6c968aae5..acb54a9d9 100644 --- a/source/games/duke/src/constants.h +++ b/source/games/duke/src/constants.h @@ -320,6 +320,7 @@ enum sflags_t SFLAG_INFLAME = 0x00800000, SFLAG_NOFLOORFIRE = 0x01000000, SFLAG_HITRADIUS_FLAG1 = 0x02000000, + SFLAG_HITRADIUS_FLAG2 = 0x04000000, }; diff --git a/source/games/duke/src/flags_d.cpp b/source/games/duke/src/flags_d.cpp index c0bd86f7b..636f1e3d9 100644 --- a/source/games/duke/src/flags_d.cpp +++ b/source/games/duke/src/flags_d.cpp @@ -205,6 +205,7 @@ void initactorflags_d() setflag(SFLAG_INFLAME, { RADIUSEXPLOSION, RPG, FIRELASER, HYDRENT, HEAVYHBOMB }); setflag(SFLAG_NOFLOORFIRE, { TREE1, TREE2 }); setflag(SFLAG_HITRADIUS_FLAG1, { BOX, TREE1, TREE2, TIRE, CONE }); + setflag(SFLAG_HITRADIUS_FLAG2, { TRIPBOMB, QUEBALL, STRIPEBALL, DUKELYINGDEAD }); if (isWorldTour()) { diff --git a/source/games/duke/src/flags_r.cpp b/source/games/duke/src/flags_r.cpp index 6c24c71f8..11026d394 100644 --- a/source/games/duke/src/flags_r.cpp +++ b/source/games/duke/src/flags_r.cpp @@ -235,6 +235,7 @@ void initactorflags_r() if (isRRRA()) setflag(SFLAG_INFLAME, { RPG2 }); setflag(SFLAG_NOFLOORFIRE, { TREE1, TREE2 }); setflag(SFLAG_HITRADIUS_FLAG1, { BOX, TREE1, TREE2, TIRE }); + setflag(SFLAG_HITRADIUS_FLAG2, { QUEBALL, STRIPEBALL, BOWLINGPIN, DUKELYINGDEAD }); // 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)