diff --git a/src/k_hud.cpp b/src/k_hud.cpp index 43bba8190..c502fe72e 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: 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..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(); })); } @@ -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: