diff --git a/source/core/thingdef_data.cpp b/source/core/thingdef_data.cpp index 41c77eb33..7d26e952a 100644 --- a/source/core/thingdef_data.cpp +++ b/source/core/thingdef_data.cpp @@ -107,7 +107,7 @@ static FFlagDef DukeActorFlagDefs[] = DEFINE_FLAG(SFLAG, BOSS, DDukeActor, flags1), DEFINE_FLAG(SFLAG, BADGUYSTAYPUT, DDukeActor, flags1), DEFINE_FLAG(SFLAG, GREENSLIMEFOOD, DDukeActor, flags1), - //DEFINE_FLAG(SFLAG, NODAMAGEPUSH, DDukeActor, flags1), + DEFINE_FLAG(SFLAG, SKILLFILTER, DDukeActor, flags1), DEFINE_FLAG(SFLAG, NOWATERDIP, DDukeActor, flags1), DEFINE_FLAG(SFLAG, INTERNAL_BADGUY, DDukeActor, flags1), DEFINE_FLAG(SFLAG, KILLCOUNT, DDukeActor, flags1), diff --git a/source/games/duke/src/constants.h b/source/games/duke/src/constants.h index 7ce7fb71f..5772a79cc 100644 --- a/source/games/duke/src/constants.h +++ b/source/games/duke/src/constants.h @@ -327,7 +327,7 @@ enum sflags_t SFLAG_BOSS = 0x00000010, SFLAG_BADGUYSTAYPUT = 0x00000020, SFLAG_GREENSLIMEFOOD = 0x00000040, - //SFLAG_NODAMAGEPUSH = 0x00000080, + SFLAG_SKILLFILTER = 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, diff --git a/source/games/duke/src/spawn.cpp b/source/games/duke/src/spawn.cpp index 3b2439560..4fa8622bd 100644 --- a/source/games/duke/src/spawn.cpp +++ b/source/games/duke/src/spawn.cpp @@ -314,7 +314,7 @@ bool commonEnemySetup(DDukeActor* self, DDukeActor* owner) } } - if ((self->spr.lotag > ud.player_skill) || ud.monsters_off == 1) + if (ud.monsters_off == 1) { self->spr.scale.Zero(); ChangeActorStat(self, STAT_MISC); @@ -842,6 +842,16 @@ DDukeActor* spawninit(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>* ac } else if (!act->isPlayer()) { + if (act->flags1 & (SFLAG_INTERNAL_BADGUY | SFLAG_SKILLFILTER)) + { + if (act->spr.lotag > ud.player_skill) + { + act->spr.scale.Zero(); + ChangeActorStat(act, STAT_MISC); + return nullptr; + } + } + if (!badguy(act) || commonEnemySetup(act, actj)) CallInitialize(act); } diff --git a/wadsrc/static/zscript/games/duke/actors/greenslime.zs b/wadsrc/static/zscript/games/duke/actors/greenslime.zs index d678abef4..7bb9db330 100644 --- a/wadsrc/static/zscript/games/duke/actors/greenslime.zs +++ b/wadsrc/static/zscript/games/duke/actors/greenslime.zs @@ -422,7 +422,7 @@ class DukeEgg : DukeActor default { pic "EGG"; - +INTERNAL_BADGUY; + +BADGUY; } override void Initialize() @@ -434,6 +434,7 @@ class DukeEgg : DukeActor } else { + self.scale = (0.625, 0.625); self.clipdist = 6; self.cstat = CSTAT_SPRITE_BLOCK_ALL | randomXFlip(); self.ChangeStat(STAT_ZOMBIEACTOR);