Merge branch 'fix-bufo-spawn' into 'master'

Fix Battle UFO spawn not cycling; fix Super Flicky minimap crash

Closes #938

See merge request KartKrew/Kart!1844
This commit is contained in:
Oni 2024-01-17 05:31:19 +00:00
commit 9d0b29b73d
5 changed files with 27 additions and 4 deletions

View file

@ -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<skincolornum_t>(Obj_SuperFlickyOwner(mobj)->color), GTC_CACHE);
colormap = R_GetTranslationColormap(TC_RAINBOW, static_cast<skincolornum_t>(owner->color), GTC_CACHE);
}
break;
default:

View file

@ -4,6 +4,7 @@
#include <vector>
#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_t*>(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));
}
}
}

View file

@ -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);

View file

@ -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<const Spawner*>(spawner)->id();
}

View file

@ -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: