Super Flicky trackables

Super Flickies have HUD tracking, have map tracking, and are 3x big when chasing instead of 2x
This commit is contained in:
VelocitOni 2023-07-30 00:48:59 -04:00
parent 1325bf7afa
commit 3b1edb903c
6 changed files with 51 additions and 4 deletions

View file

@ -85,6 +85,7 @@ static patch_t *kp_catcherminimap;
static patch_t *kp_emeraldminimap[2]; static patch_t *kp_emeraldminimap[2];
static patch_t *kp_capsuleminimap[3]; static patch_t *kp_capsuleminimap[3];
static patch_t *kp_battleufominimap; static patch_t *kp_battleufominimap;
static patch_t *kp_superflickyminimap;
static patch_t *kp_ringsticker[2]; static patch_t *kp_ringsticker[2];
static patch_t *kp_ringstickersplit[4]; static patch_t *kp_ringstickersplit[4];
@ -198,6 +199,8 @@ patch_t *kp_capsuletarget_far[2];
patch_t *kp_capsuletarget_far_text[2]; patch_t *kp_capsuletarget_far_text[2];
patch_t *kp_capsuletarget_near[8]; patch_t *kp_capsuletarget_near[8];
patch_t *kp_superflickytarget[4];
patch_t *kp_button_a[2][2]; patch_t *kp_button_a[2][2];
patch_t *kp_button_b[2][2]; patch_t *kp_button_b[2][2];
patch_t *kp_button_c[2][2]; patch_t *kp_button_c[2][2];
@ -376,6 +379,7 @@ void K_LoadKartHUDGraphics(void)
HU_UpdatePatch(&kp_capsuleminimap[2], "MINICAP3"); HU_UpdatePatch(&kp_capsuleminimap[2], "MINICAP3");
HU_UpdatePatch(&kp_battleufominimap, "MINIBUFO"); HU_UpdatePatch(&kp_battleufominimap, "MINIBUFO");
HU_UpdatePatch(&kp_superflickyminimap, "FLKMAPA");
// Rings & Lives // Rings & Lives
HU_UpdatePatch(&kp_ringsticker[0], "RNGBACKA"); HU_UpdatePatch(&kp_ringsticker[0], "RNGBACKA");
@ -760,6 +764,13 @@ void K_LoadKartHUDGraphics(void)
HU_UpdatePatch(&kp_capsuletarget_near[i], "%s", buffer); HU_UpdatePatch(&kp_capsuletarget_near[i], "%s", buffer);
} }
sprintf(buffer, "HUDFLKAx");
for (i = 0; i < 4; i++)
{
buffer[7] = '0'+i;
HU_UpdatePatch(&kp_superflickytarget[i], "%s", buffer);
}
K_LoadButtonGraphics(kp_button_a[0], 'A'); K_LoadButtonGraphics(kp_button_a[0], 'A');
K_LoadButtonGraphics(kp_button_a[1], 'N'); K_LoadButtonGraphics(kp_button_a[1], 'N');
K_LoadButtonGraphics(kp_button_b[0], 'B'); K_LoadButtonGraphics(kp_button_b[0], 'B');
@ -4076,6 +4087,13 @@ static void K_drawKartMinimap(void)
case MT_BATTLEUFO: case MT_BATTLEUFO:
workingPic = kp_battleufominimap; workingPic = kp_battleufominimap;
break; break;
case MT_SUPER_FLICKY:
workingPic = kp_superflickyminimap;
if (Obj_SuperFlickyOwner(mobj)->color)
{
colormap = R_GetTranslationColormap(TC_RAINBOW, (Obj_SuperFlickyOwner(mobj)->color), GTC_CACHE);
}
break;
default: default:
break; break;
} }

View file

@ -59,6 +59,8 @@ extern patch_t *kp_capsuletarget_far[2];
extern patch_t *kp_capsuletarget_far_text[2]; extern patch_t *kp_capsuletarget_far_text[2];
extern patch_t *kp_capsuletarget_near[8]; extern patch_t *kp_capsuletarget_near[8];
extern patch_t *kp_superflickytarget[4];
extern patch_t *kp_button_a[2][2]; extern patch_t *kp_button_a[2][2];
extern patch_t *kp_button_b[2][2]; extern patch_t *kp_button_b[2][2];
extern patch_t *kp_button_c[2][2]; extern patch_t *kp_button_c[2][2];

View file

@ -42,6 +42,8 @@ struct TargetTracking
case MT_PLAYER: case MT_PLAYER:
return player_emeralds_color(); return player_emeralds_color();
case MT_SUPER_FLICKY:
return static_cast<skincolornum_t>(Obj_SuperFlickyOwner(mobj)->color);
default: default:
return SKINCOLOR_NONE; return SKINCOLOR_NONE;
} }
@ -267,9 +269,9 @@ void K_DrawTargetTracking(const TargetTracking& target)
vector2_t targetPos = {}; vector2_t targetPos = {};
bool visible = P_CheckSight(stplyr->mo, target.mobj); bool visible = P_CheckSight(stplyr->mo, target.mobj);
if (visible == false && (leveltime & 1)) if ((visible == false || target.mobj->type == MT_SUPER_FLICKY) && (leveltime & 1))
{ {
// Flicker when not visible. // Flicker when not visible.
return; return;
@ -290,7 +292,12 @@ void K_DrawTargetTracking(const TargetTracking& target)
); );
}; };
if (useNear == true) if (target.mobj->type == MT_SUPER_FLICKY)
{
timer = (leveltime / 2);
draw(kp_superflickytarget[timer % 4]);
}
else if (useNear == true)
{ {
timer = (leveltime / 2); timer = (leveltime / 2);
draw(kp_capsuletarget_near[timer % 8]); draw(kp_capsuletarget_near[timer % 8]);
@ -382,6 +389,9 @@ bool is_object_tracking_target(const mobj_t* mobj)
case MT_MONITOR: case MT_MONITOR:
return is_player_tracking_target() && Obj_MonitorGetEmerald(mobj) != 0; return is_player_tracking_target() && Obj_MonitorGetEmerald(mobj) != 0;
case MT_SUPER_FLICKY:
return Obj_IsSuperFlickyTargettingYou(mobj, stplyr->mo);
default: default:
return false; return false;
} }

View file

@ -161,7 +161,9 @@ void Obj_WhipSuperFlicky(mobj_t *flicky);
void Obj_BlockSuperFlicky(mobj_t *flicky); void Obj_BlockSuperFlicky(mobj_t *flicky);
void Obj_SuperFlickyPlayerCollide(mobj_t *flicky, mobj_t *player); void Obj_SuperFlickyPlayerCollide(mobj_t *flicky, mobj_t *player);
void Obj_SuperFlickyLanding(mobj_t *flicky); void Obj_SuperFlickyLanding(mobj_t *flicky);
mobj_t *Obj_SuperFlickyOwner(const mobj_t *flicky);
boolean Obj_IsSuperFlickyWhippable(const mobj_t *flicky); boolean Obj_IsSuperFlickyWhippable(const mobj_t *flicky);
boolean Obj_IsSuperFlickyTargettingYou(const mobj_t *flicky, mobj_t *player);
/* Battle/Power-UP UFO */ /* Battle/Power-UP UFO */
void Obj_BattleUFOLegThink(mobj_t *leg); void Obj_BattleUFOLegThink(mobj_t *leg);

View file

@ -277,7 +277,7 @@ struct Flicky : mobj_t
void animate() void animate()
{ {
P_InstaScale(this, source()->scale * (chasing() ? 2 : 1)); destscale = source()->scale * (chasing() ? 3 : 1);
if (color >= kSuperStart && color <= kSuperEnd) if (color >= kSuperStart && color <= kSuperEnd)
{ {
@ -761,9 +761,23 @@ tic_t Obj_SuperFlickySwarmTime(mobj_t* mobj)
return !P_MobjWasRemoved(x) ? x->powerup_remaining() : 0u; return !P_MobjWasRemoved(x) ? x->powerup_remaining() : 0u;
} }
mobj_t *Obj_SuperFlickyOwner(const mobj_t* mobj)
{
const Flicky* x = static_cast<const Flicky*>(mobj);
return x->source();
}
boolean Obj_IsSuperFlickyWhippable(const mobj_t* mobj) boolean Obj_IsSuperFlickyWhippable(const mobj_t* mobj)
{ {
const Flicky* x = static_cast<const Flicky*>(mobj); const Flicky* x = static_cast<const Flicky*>(mobj);
return mobj == x->chasing() && !x->stunned(); return mobj == x->chasing() && !x->stunned();
} }
boolean Obj_IsSuperFlickyTargettingYou(const mobj_t* mobj, mobj_t *player)
{
const Flicky* x = static_cast<const Flicky*>(mobj);
return player == x->chasing();
}

View file

@ -5336,6 +5336,7 @@ static boolean P_IsTrackerType(INT32 type)
case MT_MONITOR: case MT_MONITOR:
case MT_EMERALD: case MT_EMERALD:
case MT_BATTLEUFO: case MT_BATTLEUFO:
case MT_SUPER_FLICKY:
return true; return true;
default: default: