From 84fd5d58d7a444a9a0d85d5e896bd75b8faa3187 Mon Sep 17 00:00:00 2001 From: James R Date: Tue, 9 Jan 2024 22:38:33 -0800 Subject: [PATCH 1/2] Add battleufotest debug cheat, respawn Battle UFO instantly --- src/cvars.cpp | 1 + src/objects/battle-ufo.cpp | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/cvars.cpp b/src/cvars.cpp index 65b1f1291..6886662f4 100644 --- a/src/cvars.cpp +++ b/src/cvars.cpp @@ -791,6 +791,7 @@ consvar_t cv_votetime = UnsavedNetVar("votetime", "20").min_max(10, 3600); consvar_t cv_barriertime = OnlineCheat("barriertime", "30").values(CV_Natural).description("How long it takes for the Barrier to shrink in Battle Overtime"); consvar_t cv_battlespawn = OnlineCheat("battlespawn", "0").values(CV_Unsigned).description("Spawn every player at the same spawnpoint in Battle (0 = random spawns)"); consvar_t cv_battletest = OnlineCheat("battletest", "Off").on_off().description("Free Play goes to Battle instead of Prisons"); +consvar_t cv_battleufotest = OnlineCheat("battleufotest", "Off").on_off().description("Respawn Battle UFOs instantly after being destroyed"); #ifdef DEVELOP consvar_t cv_botcontrol = OnlineCheat("botcontrol", "On").on_off().description("Toggle bot AI movement"); diff --git a/src/objects/battle-ufo.cpp b/src/objects/battle-ufo.cpp index 3dc932550..a99617bab 100644 --- a/src/objects/battle-ufo.cpp +++ b/src/objects/battle-ufo.cpp @@ -6,6 +6,7 @@ #include "../mobj.hpp" #include "../mobj_list.hpp" +#include "../command.h" #include "../doomdef.h" #include "../m_random.h" #include "../p_local.h" @@ -17,6 +18,8 @@ using srb2::math::Fixed; using srb2::Mobj; using srb2::MobjList; +extern consvar_t cv_battleufotest; + extern mobj_t* svg_battleUfoSpawners; #define BATTLEUFO_LEG_ZOFFS (3*FRACUNIT) // Spawn height offset from the body @@ -169,7 +172,7 @@ void Obj_BattleUFODeath(mobj_t *mobj, mobj_t *inflictor) if (ufo->spawner()) { g_battleufo.previousId = ufo->spawner()->id(); - g_battleufo.due = leveltime + BATTLE_UFO_TIME; + g_battleufo.due = leveltime + (cv_battleufotest.value ? 1 : BATTLE_UFO_TIME); } } From 20353f2a849b2bdd21e6321dfeeccf517d99c75f Mon Sep 17 00:00:00 2001 From: James R Date: Tue, 9 Jan 2024 22:38:53 -0800 Subject: [PATCH 2/2] Battle UFO: fix tractor descending past FOFs --- src/info.c | 2 +- src/objects/battle-ufo.cpp | 5 ----- src/p_map.c | 5 +++++ src/p_mobj.c | 13 ++++++++----- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/info.c b/src/info.c index b23860213..bf2329272 100644 --- a/src/info.c +++ b/src/info.c @@ -31041,7 +31041,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 0, // mass 0, // damage sfx_None, // activesound - MF_NOGRAVITY|MF_NOCLIP|MF_DONTENCOREMAP, // flags + MF_SCENERY|MF_NOGRAVITY|MF_NOCLIP|MF_DONTENCOREMAP, // flags S_NULL // raisestate }, diff --git a/src/objects/battle-ufo.cpp b/src/objects/battle-ufo.cpp index a99617bab..5c3f34148 100644 --- a/src/objects/battle-ufo.cpp +++ b/src/objects/battle-ufo.cpp @@ -247,9 +247,4 @@ INT32 Obj_RandomBattleUFOSpawnerID(void) void Obj_BattleUFOBeamThink(mobj_t *beam) { P_SetObjectMomZ(beam, beam->info->speed, true); - - if (P_IsObjectOnGround(beam)) - { - P_RemoveMobj(beam); - } } diff --git a/src/p_map.c b/src/p_map.c index ca91cfbe2..fa8fa8b0d 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -785,6 +785,11 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing) return BMIT_CONTINUE; // overhead } + if (tm.thing->z + tm.thing->height < thing->floorz) + { + return BMIT_CONTINUE; // underneath + } + if (!tm.thing->player || !tm.thing->player->fastfall) { fixed_t tractorHeight = 211*mapobjectscale; diff --git a/src/p_mobj.c b/src/p_mobj.c index 689970281..0fc6d7552 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -3167,6 +3167,14 @@ boolean P_SceneryZMovement(mobj_t *mo) return false; } break; + case MT_BATTLEUFO_BEAM: + Obj_BattleUFOBeamThink(mo); + if (mo->momz <= 0 && mo->z + mo->momz <= mo->floorz) + { + P_RemoveMobj(mo); + return false; + } + break; default: break; } @@ -9013,11 +9021,6 @@ static boolean P_MobjRegularThink(mobj_t *mobj) Obj_BattleUFOLegThink(mobj); break; } - case MT_BATTLEUFO_BEAM: - { - Obj_BattleUFOBeamThink(mobj); - break; - } case MT_ROCKETSNEAKER: if (!mobj->target || !mobj->target->health) {