From c3748ff91a8bae06a044ae91e98c5487275d556e Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 15 Jan 2024 18:11:06 -0800 Subject: [PATCH 1/3] Fix minimap crash if Super Flicky owner spectates --- src/k_hud.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/k_hud.cpp b/src/k_hud.cpp index 4283d8b96..3f1670e88 100644 --- a/src/k_hud.cpp +++ b/src/k_hud.cpp @@ -4460,9 +4460,9 @@ static void K_drawKartMinimap(void) break; case MT_SUPER_FLICKY: workingPic = kp_superflickyminimap; - if (Obj_SuperFlickyOwner(mobj)->color) + if (mobj_t* owner = Obj_SuperFlickyOwner(mobj); owner && owner->color) { - colormap = R_GetTranslationColormap(TC_RAINBOW, static_cast(Obj_SuperFlickyOwner(mobj)->color), GTC_CACHE); + colormap = R_GetTranslationColormap(TC_RAINBOW, static_cast(owner->color), GTC_CACHE); } break; default: From bea26879eabf5edc7e1a54161cbca43fb6c1db87 Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 15 Jan 2024 18:24:17 -0800 Subject: [PATCH 2/3] battleufotest: HUD tracking for Battle UFO spawners, show ID number --- src/k_hud_track.cpp | 18 +++++++++++++++++- src/k_objects.h | 1 + src/objects/battle-ufo.cpp | 5 +++++ src/p_mobj.c | 1 + 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/k_hud_track.cpp b/src/k_hud_track.cpp index bf1221edb..c33d31b89 100644 --- a/src/k_hud_track.cpp +++ b/src/k_hud_track.cpp @@ -4,6 +4,7 @@ #include #include "core/static_vec.hpp" +#include "v_draw.hpp" #include "k_battle.h" #include "k_hud.h" @@ -26,7 +27,7 @@ using namespace srb2; -extern "C" consvar_t cv_debughudtracker; +extern "C" consvar_t cv_debughudtracker, cv_battleufotest; namespace { @@ -190,6 +191,9 @@ private: }}, }; + case MT_BATTLEUFO_SPAWNER: + return {}; + default: return { { // Near @@ -291,6 +295,9 @@ bool is_object_tracking_target(const mobj_t* mobj) return !(mobj->renderflags & (RF_TRANSMASK | RF_DONTDRAW)) && // the spraycan wasn't collected yet P_CheckSight(stplyr->mo, const_cast(mobj)); + case MT_BATTLEUFO_SPAWNER: + return cv_battleufotest.value; + default: return false; } @@ -512,6 +519,15 @@ void K_DrawTargetTracking(const TargetTracking& target) colormap ); }; + + if (target.mobj->type == MT_BATTLEUFO_SPAWNER) // debug + { + using srb2::Draw; + Draw(FixedToFloat(result.x), FixedToFloat(result.y)) + .font(Draw::Font::kThin) + .align(Draw::Align::kCenter) + .text("BUFO ID: {}", Obj_BattleUFOSpawnerID(target.mobj)); + } } } diff --git a/src/k_objects.h b/src/k_objects.h index 48ec573ae..45385b9a6 100644 --- a/src/k_objects.h +++ b/src/k_objects.h @@ -188,6 +188,7 @@ void Obj_UnlinkBattleUFOSpawner(mobj_t *spawner); void Obj_SpawnBattleUFOFromSpawner(void); INT32 Obj_RandomBattleUFOSpawnerID(void); void Obj_BattleUFOBeamThink(mobj_t *beam); +INT32 Obj_BattleUFOSpawnerID(const mobj_t *spawner); /* Power-Up Aura */ void Obj_SpawnPowerUpAura(player_t* player); diff --git a/src/objects/battle-ufo.cpp b/src/objects/battle-ufo.cpp index 2057e5f8d..8b65c7d99 100644 --- a/src/objects/battle-ufo.cpp +++ b/src/objects/battle-ufo.cpp @@ -251,3 +251,8 @@ void Obj_BattleUFOBeamThink(mobj_t *beam) { P_SetObjectMomZ(beam, beam->info->speed, true); } + +INT32 Obj_BattleUFOSpawnerID(const mobj_t *spawner) +{ + return static_cast(spawner)->id(); +} diff --git a/src/p_mobj.c b/src/p_mobj.c index b4634563c..6622bbf79 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -5428,6 +5428,7 @@ static boolean P_IsTrackerType(INT32 type) case MT_OVERTIME_CENTER: case MT_MONITOR: case MT_EMERALD: + case MT_BATTLEUFO_SPAWNER: // debug case MT_BATTLEUFO: case MT_SUPER_FLICKY: case MT_SPRAYCAN: From 9d28967206f08a1c5a08d3f8d22acbda124c4e2e Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 15 Jan 2024 19:41:47 -0800 Subject: [PATCH 3/3] Battle UFO: fix spawn ordering logic If the mapthings went in reverse order, so mapthing #1 had a higher ID than mapthing #2, the spawn ordering logic would get stuck because it wanted mapthing #1 to have a lower ID than mapthing #2. The root of the bug is that the previously used spawners ID was not totally ignored. Now it is. --- src/objects/battle-ufo.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/objects/battle-ufo.cpp b/src/objects/battle-ufo.cpp index 8b65c7d99..5abb0cf91 100644 --- a/src/objects/battle-ufo.cpp +++ b/src/objects/battle-ufo.cpp @@ -82,7 +82,7 @@ public: auto min = [&](auto cmp) { return std::min_element(list_.begin(), list_.end(), cmp); }; return *(it != list_.end() - ? min([order](T a, T b) { return order < a->id() && a->id() < b->id(); }) + ? min([order](T a, T b) { return order < a->id() && (b->id() <= order || a->id() < b->id()); }) : min([](T a, T b) { return a->id() < b->id(); })); }