diff --git a/source/core/thingdef_data.cpp b/source/core/thingdef_data.cpp index d7651b9673..e180a2f155 100644 --- a/source/core/thingdef_data.cpp +++ b/source/core/thingdef_data.cpp @@ -188,6 +188,8 @@ static FFlagDef DukeActorFlagDefs[] = DEFINE_FLAG(SFLAG3, RANDOMANGLEONWATER, DDukeActor, flags3), DEFINE_FLAG(SFLAG3, NORANDOMANGLEWHENBLOCKED, DDukeActor, flags3), DEFINE_FLAG(SFLAG3, QUICKALTERANG, DDukeActor, flags3), + DEFINE_FLAG(SFLAG3, SPAWNWEAPONDEBRIS, DDukeActor, flags3), + DEFINE_FLAG(SFLAG3, NOJIBS, DDukeActor, flags3), }; diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index 7d27d465bc..ffbc7c2618 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -3605,7 +3605,7 @@ void alterang(int ang, DDukeActor* actor, int playernum) // //--------------------------------------------------------------------------- -void fall_common(DDukeActor *actor, int playernum, int DRONE, int(*fallspecial)(DDukeActor*, int)) +void fall_common(DDukeActor *actor, int playernum, int(*fallspecial)(DDukeActor*, int)) { actor->spr.xoffset = 0; actor->spr.yoffset = 0; @@ -3646,7 +3646,7 @@ void fall_common(DDukeActor *actor, int playernum, int DRONE, int(*fallspecial)( if (actor->vel.Z > (3084/256.) && actor->spr.extra <= 1) { - if (actor->spr.pal != 1 && actor->spr.picnum != DRONE) + if (actor->spr.pal != 1 && !(actor->flags3 & SFLAG3_NOJIBS)) { if (actor->isPlayer() && actor->spr.extra > 0) goto SKIPJIBS; @@ -3846,7 +3846,7 @@ void actorsizeto(DDukeActor* actor, double x, double y) void spawndebris(DDukeActor* g_ac, int dnum, int count) { if (dnum < 0 || dnum >= ScrapMax) return; // this code only works with scrap and nothing else. - bool weap = fi.spawnweapondebris(g_ac->spr.picnum); + bool weap = (g_ac->flags3 & SFLAG3_SPAWNWEAPONDEBRIS); if (g_ac->insector()) for (int j = count; j >= 0; j--) diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index 2191e1fd03..6d974ac026 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -1067,12 +1067,7 @@ void move_d(DDukeActor *actor, int playernum, int xvel) void fall_d(DDukeActor *actor, int g_p) { - fall_common(actor, g_p, DTILE_DRONE, nullptr); -} - -bool spawnweapondebris_d(int picnum) -{ - return picnum == DTILE_BLIMP; + fall_common(actor, g_p, nullptr); } //--------------------------------------------------------------------------- diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp index 9720006ce5..294311a8ce 100644 --- a/source/games/duke/src/actors_r.cpp +++ b/source/games/duke/src/actors_r.cpp @@ -1381,7 +1381,7 @@ static int fallspecial(DDukeActor *actor, int playernum) void fall_r(DDukeActor* ac, int g_p) { - fall_common(ac, g_p, RTILE_DRONE, fallspecial); + fall_common(ac, g_p, fallspecial); } //--------------------------------------------------------------------------- @@ -1504,11 +1504,6 @@ void mamaspawn(DDukeActor *actor) } } -bool spawnweapondebris_r(int picnum) -{ - return true; -} - //--------------------------------------------------------------------------- // // diff --git a/source/games/duke/src/constants.h b/source/games/duke/src/constants.h index e998a544f5..2a59f635c3 100644 --- a/source/games/duke/src/constants.h +++ b/source/games/duke/src/constants.h @@ -421,6 +421,8 @@ enum sflags3_t SFLAG3_RANDOMANGLEONWATER = 0x00080000, SFLAG3_NORANDOMANGLEWHENBLOCKED = 0x00100000, SFLAG3_QUICKALTERANG = 0x00200000, + SFLAG3_SPAWNWEAPONDEBRIS = 0x00400000, + SFLAG3_NOJIBS = 0x00800000, }; diff --git a/source/games/duke/src/dispatch.cpp b/source/games/duke/src/dispatch.cpp index 5b1f2ba551..cb51d1dd4d 100644 --- a/source/games/duke/src/dispatch.cpp +++ b/source/games/duke/src/dispatch.cpp @@ -50,8 +50,6 @@ int ifhitbyweapon_r(DDukeActor* sn); int ifhitbyweapon_d(DDukeActor* sn); void fall_d(DDukeActor* i, int g_p); void fall_r(DDukeActor* i, int g_p); -bool spawnweapondebris_d(int picnum); -bool spawnweapondebris_r(int picnum); void move_d(DDukeActor* i, int g_p, int g_x); void move_r(DDukeActor* i, int g_p, int g_x); void incur_damage_d(player_struct* p); @@ -93,7 +91,6 @@ void SetDispatcher() addweapon_d, ifhitbyweapon_d, fall_d, - spawnweapondebris_d, move_d, incur_damage_d, @@ -120,7 +117,6 @@ void SetDispatcher() addweapon_r, ifhitbyweapon_r, fall_r, - spawnweapondebris_r, move_r, incur_damage_r, diff --git a/source/games/duke/src/duke3d.h b/source/games/duke/src/duke3d.h index 74575e8078..6232b6e3b2 100644 --- a/source/games/duke/src/duke3d.h +++ b/source/games/duke/src/duke3d.h @@ -84,7 +84,6 @@ struct Dispatcher void (*addweapon)(player_struct *p, int weapon, bool wswitch); int (*ifhitbyweapon)(DDukeActor* sectnum); void (*fall)(DDukeActor* actor, int g_p); - bool (*spawnweapondebris)(int picnum); void (*move)(DDukeActor* i, int g_p, int g_x); // player diff --git a/source/games/duke/src/funct.h b/source/games/duke/src/funct.h index 196eec509f..950ccb2a03 100644 --- a/source/games/duke/src/funct.h +++ b/source/games/duke/src/funct.h @@ -85,7 +85,7 @@ void handle_se130(DDukeActor* i, int countmax); int dodge(DDukeActor*); void alterang(int ang, DDukeActor* actor, int g_p); -void fall_common(DDukeActor* actor, int g_p, int DRONE, int(*fallspecial)(DDukeActor*, int)); +void fall_common(DDukeActor* actor, int g_p, int(*fallspecial)(DDukeActor*, int)); void checkavailweapon(player_struct* p); void addammo(int weapon, player_struct* p, int amount); diff --git a/wadsrc/static/zscript/games/duke/actors/mech.zs b/wadsrc/static/zscript/games/duke/actors/mech.zs index aca3f30e30..f5f27ee744 100644 --- a/wadsrc/static/zscript/games/duke/actors/mech.zs +++ b/wadsrc/static/zscript/games/duke/actors/mech.zs @@ -8,6 +8,7 @@ class DukeDrone : DukeActor +NOWATERDIP; +FLOATING; +QUICKALTERANG; + +NOJIBS; falladjustz 0; } diff --git a/wadsrc/static/zscript/games/duke/actors/redneckenemies.zs b/wadsrc/static/zscript/games/duke/actors/redneckenemies.zs index 557efc02e0..15c198d1df 100644 --- a/wadsrc/static/zscript/games/duke/actors/redneckenemies.zs +++ b/wadsrc/static/zscript/games/duke/actors/redneckenemies.zs @@ -441,6 +441,7 @@ class RedneckMosquito : DukeActor +NOWATERDIP; +FLOATING; +QUICKALTERANG; + +NOJIBS; falladjustz 0; } override void Initialize()