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_capsuleminimap[3];
static patch_t *kp_battleufominimap;
static patch_t *kp_superflickyminimap;
static patch_t *kp_ringsticker[2];
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_near[8];
patch_t *kp_superflickytarget[4];
patch_t *kp_button_a[2][2];
patch_t *kp_button_b[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_battleufominimap, "MINIBUFO");
HU_UpdatePatch(&kp_superflickyminimap, "FLKMAPA");
// Rings & Lives
HU_UpdatePatch(&kp_ringsticker[0], "RNGBACKA");
@ -760,6 +764,13 @@ void K_LoadKartHUDGraphics(void)
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[1], 'N');
K_LoadButtonGraphics(kp_button_b[0], 'B');
@ -4076,6 +4087,13 @@ static void K_drawKartMinimap(void)
case MT_BATTLEUFO:
workingPic = kp_battleufominimap;
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:
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_near[8];
extern patch_t *kp_superflickytarget[4];
extern patch_t *kp_button_a[2][2];
extern patch_t *kp_button_b[2][2];
extern patch_t *kp_button_c[2][2];

View file

@ -42,6 +42,8 @@ struct TargetTracking
case MT_PLAYER:
return player_emeralds_color();
case MT_SUPER_FLICKY:
return static_cast<skincolornum_t>(Obj_SuperFlickyOwner(mobj)->color);
default:
return SKINCOLOR_NONE;
}
@ -269,7 +271,7 @@ void K_DrawTargetTracking(const TargetTracking& target)
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.
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);
draw(kp_capsuletarget_near[timer % 8]);
@ -382,6 +389,9 @@ bool is_object_tracking_target(const mobj_t* mobj)
case MT_MONITOR:
return is_player_tracking_target() && Obj_MonitorGetEmerald(mobj) != 0;
case MT_SUPER_FLICKY:
return Obj_IsSuperFlickyTargettingYou(mobj, stplyr->mo);
default:
return false;
}

View file

@ -161,7 +161,9 @@ void Obj_WhipSuperFlicky(mobj_t *flicky);
void Obj_BlockSuperFlicky(mobj_t *flicky);
void Obj_SuperFlickyPlayerCollide(mobj_t *flicky, mobj_t *player);
void Obj_SuperFlickyLanding(mobj_t *flicky);
mobj_t *Obj_SuperFlickyOwner(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 */
void Obj_BattleUFOLegThink(mobj_t *leg);

View file

@ -277,7 +277,7 @@ struct Flicky : mobj_t
void animate()
{
P_InstaScale(this, source()->scale * (chasing() ? 2 : 1));
destscale = source()->scale * (chasing() ? 3 : 1);
if (color >= kSuperStart && color <= kSuperEnd)
{
@ -761,9 +761,23 @@ tic_t Obj_SuperFlickySwarmTime(mobj_t* mobj)
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)
{
const Flicky* x = static_cast<const Flicky*>(mobj);
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_EMERALD:
case MT_BATTLEUFO:
case MT_SUPER_FLICKY:
return true;
default: