mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-01-10 00:34:32 +00:00
Trick Indicator first pass
The author of this commit doesn't know what it's doing
This commit is contained in:
parent
ccbcd203dd
commit
5ffae81b08
12 changed files with 211 additions and 3 deletions
|
|
@ -2551,6 +2551,7 @@ void CL_ClearPlayer(INT32 playernum)
|
|||
PlayerPointerRemove(players[playernum].followmobj);
|
||||
PlayerPointerRemove(players[playernum].stumbleIndicator);
|
||||
PlayerPointerRemove(players[playernum].sliptideZipIndicator);
|
||||
PlayerPointerRemove(players[playernum].trickIndicator);
|
||||
|
||||
#undef PlayerPointerRemove
|
||||
|
||||
|
|
|
|||
|
|
@ -893,6 +893,7 @@ struct player_t
|
|||
|
||||
mobj_t *stumbleIndicator;
|
||||
mobj_t *sliptideZipIndicator;
|
||||
mobj_t *trickIndicator;
|
||||
mobj_t *whip;
|
||||
mobj_t *hand;
|
||||
mobj_t *flickyAttacker;
|
||||
|
|
|
|||
|
|
@ -3892,6 +3892,12 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
|||
|
||||
"S_SMOOTHLANDING",
|
||||
|
||||
"S_TRICKINDICATOR_OVERLAY",
|
||||
"S_TRICKINDICATOR_UNDERLAY",
|
||||
"S_TRICKINDICATOR_OVERLAY_ARROW",
|
||||
"S_TRICKINDICATOR_UNDERLAY_ARROW",
|
||||
"S_TRICKINDICATOR_UNDERLAY_ARROW2",
|
||||
|
||||
// DEZ Ring Shooter
|
||||
"S_TIREGRABBER",
|
||||
"S_RINGSHOOTER_SIDE",
|
||||
|
|
@ -5649,6 +5655,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
|||
"MT_TRIPWIREBOOST",
|
||||
|
||||
"MT_SMOOTHLANDING",
|
||||
"MT_TRICKINDICATOR",
|
||||
|
||||
"MT_TIREGRABBER",
|
||||
"MT_RINGSHOOTER",
|
||||
|
|
|
|||
|
|
@ -2244,6 +2244,7 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
|||
PlayerPointerRemove(players[player].followmobj);
|
||||
PlayerPointerRemove(players[player].stumbleIndicator);
|
||||
PlayerPointerRemove(players[player].sliptideZipIndicator);
|
||||
PlayerPointerRemove(players[player].trickIndicator);
|
||||
|
||||
#undef PlayerPointerRemove
|
||||
|
||||
|
|
|
|||
39
src/info.c
39
src/info.c
|
|
@ -631,6 +631,12 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"TWBT", // Tripwire BLASTER
|
||||
"SMLD", // Smooth landing
|
||||
|
||||
// Trick Indicator
|
||||
"TRK1",
|
||||
"TRK2",
|
||||
"TRK3",
|
||||
"TRK4",
|
||||
|
||||
"TIRG", // Tire grabbers
|
||||
"RSHT", // DEZ Ring Shooter
|
||||
|
||||
|
|
@ -4662,6 +4668,12 @@ state_t states[NUMSTATES] =
|
|||
|
||||
{SPR_SMLD, FF_FULLBRIGHT|FF_ADD|FF_ANIMATE, -1, {NULL}, 7, 2, S_NULL}, // S_SMOOTHLANDING
|
||||
|
||||
{SPR_TRK1, FF_FULLBRIGHT|FF_ANIMATE|FF_PAPERSPRITE|FF_ADD, -1, {NULL}, 3, 3, S_NULL}, // S_TRICKINDICATOR_OVERLAY,
|
||||
{SPR_TRK2, FF_FULLBRIGHT|FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 3, 3, S_NULL}, // S_TRICKINDICATOR_UNDERLAY,
|
||||
{SPR_TRK3, FF_FULLBRIGHT|FF_ANIMATE|FF_PAPERSPRITE|FF_ADD, 13, {NULL}, 12, 1, S_INVISIBLE}, // S_TRICKINDICATOR_OVERLAY_ARROW,
|
||||
{SPR_NULL, 0, 1, {NULL}, 12, 1, S_TRICKINDICATOR_UNDERLAY_ARROW2}, // S_TRICKINDICATOR_UNDERLAY_ARROW,
|
||||
{SPR_TRK4, FF_FULLBRIGHT|FF_ANIMATE|FF_PAPERSPRITE, 13, {NULL}, 12, 1, S_INVISIBLE}, // S_TRICKINDICATOR_UNDERLAY_ARROW2,
|
||||
|
||||
{SPR_TIRG, FF_ANIMATE, -1, {NULL}, 1, 1, S_NULL}, // S_TIREGRABBER
|
||||
{SPR_RSHT, FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_RINGSHOOTER_SIDE
|
||||
{SPR_RSHT, FF_SEMIBRIGHT|FF_PAPERSPRITE|2, -1, {NULL}, 0, 0, S_NULL}, // S_RINGSHOOTER_NIPPLES
|
||||
|
|
@ -25329,6 +25341,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_TRICKINDICATOR
|
||||
-1, // doomednum
|
||||
S_INVISIBLE, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
128*FRACUNIT, // radius
|
||||
128*FRACUNIT, // height
|
||||
-1, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIPTHING|MF_DONTENCOREMAP, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_TIREGRABBER
|
||||
-1, // doomednum
|
||||
S_TIREGRABBER, // spawnstate
|
||||
|
|
|
|||
13
src/info.h
13
src/info.h
|
|
@ -1188,6 +1188,12 @@ typedef enum sprite
|
|||
SPR_TWBT, // Tripwire BLASTER
|
||||
SPR_SMLD, // Smooth landing
|
||||
|
||||
// Trick Indicator
|
||||
SPR_TRK1,
|
||||
SPR_TRK2,
|
||||
SPR_TRK3,
|
||||
SPR_TRK4,
|
||||
|
||||
SPR_TIRG, // Tire grabbers
|
||||
SPR_RSHT, // DEZ Ring Shooter
|
||||
|
||||
|
|
@ -5106,6 +5112,12 @@ typedef enum state
|
|||
|
||||
S_SMOOTHLANDING,
|
||||
|
||||
S_TRICKINDICATOR_OVERLAY,
|
||||
S_TRICKINDICATOR_UNDERLAY,
|
||||
S_TRICKINDICATOR_OVERLAY_ARROW,
|
||||
S_TRICKINDICATOR_UNDERLAY_ARROW,
|
||||
S_TRICKINDICATOR_UNDERLAY_ARROW2,
|
||||
|
||||
// DEZ Ring Shooter
|
||||
S_TIREGRABBER,
|
||||
S_RINGSHOOTER_SIDE,
|
||||
|
|
@ -6902,6 +6914,7 @@ typedef enum mobj_type
|
|||
MT_TRIPWIREBOOST,
|
||||
|
||||
MT_SMOOTHLANDING,
|
||||
MT_TRICKINDICATOR,
|
||||
|
||||
MT_TIREGRABBER,
|
||||
MT_RINGSHOOTER,
|
||||
|
|
|
|||
127
src/k_kart.c
127
src/k_kart.c
|
|
@ -4099,6 +4099,44 @@ void K_InitSliptideZipIndicator(player_t *player)
|
|||
P_SetTarget(&new->target, player->mo);
|
||||
}
|
||||
|
||||
void K_InitTrickIndicator(player_t *player)
|
||||
{
|
||||
mobj_t *new = NULL;
|
||||
|
||||
if (player == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (player->mo == NULL || P_MobjWasRemoved(player->mo) == true)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (P_MobjWasRemoved(player->trickIndicator) == false)
|
||||
{
|
||||
if (P_MobjWasRemoved(player->trickIndicator->tracer) == false)
|
||||
{
|
||||
P_RemoveMobj(player->trickIndicator->tracer);
|
||||
}
|
||||
|
||||
P_RemoveMobj(player->trickIndicator);
|
||||
}
|
||||
|
||||
new = P_SpawnMobjFromMobj(player->mo, 0, 0, 0, MT_TRICKINDICATOR);
|
||||
|
||||
P_SetTarget(&player->trickIndicator, new);
|
||||
P_SetTarget(&new->target, player->mo);
|
||||
|
||||
mobj_t *secondlayer = P_SpawnMobjFromMobj(new, 0, 0, 0, MT_OVERLAY);
|
||||
|
||||
P_SetTarget(&new->tracer, secondlayer);
|
||||
P_SetTarget(&secondlayer->target, new);
|
||||
|
||||
secondlayer->dispoffset = 1;
|
||||
secondlayer->flags |= MF_DONTENCOREMAP;
|
||||
}
|
||||
|
||||
void K_UpdateStumbleIndicator(player_t *player)
|
||||
{
|
||||
const angle_t fudge = ANG15;
|
||||
|
|
@ -4282,6 +4320,49 @@ void K_UpdateSliptideZipIndicator(player_t *player)
|
|||
}
|
||||
}
|
||||
|
||||
void K_UpdateTrickIndicator(player_t *player)
|
||||
{
|
||||
mobj_t *mobj = NULL;
|
||||
|
||||
if (player == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (player->mo == NULL || P_MobjWasRemoved(player->mo) == true)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (player->trickIndicator == NULL
|
||||
|| P_MobjWasRemoved(player->trickIndicator) == true
|
||||
|| player->trickIndicator->tracer == NULL
|
||||
|| P_MobjWasRemoved(player->trickIndicator->tracer) == true)
|
||||
{
|
||||
K_InitTrickIndicator(player);
|
||||
return;
|
||||
}
|
||||
|
||||
mobj = player->trickIndicator;
|
||||
|
||||
const fixed_t onidistance = 200*mapobjectscale;
|
||||
|
||||
P_MoveOrigin(
|
||||
mobj,
|
||||
player->mo->x + P_ReturnThrustX(player->mo, player->mo->angle, onidistance),
|
||||
player->mo->y + P_ReturnThrustY(player->mo, player->mo->angle, onidistance),
|
||||
player->mo->z + (player->mo->height / 2));
|
||||
mobj->angle = player->mo->angle + ANGLE_90;
|
||||
|
||||
if (player->trickpanel == 0)
|
||||
{
|
||||
P_SetScale(mobj, mobj->destscale = player->mo->scale);
|
||||
|
||||
P_SetMobjState(mobj, S_INVISIBLE);
|
||||
P_SetMobjState(mobj->tracer, S_INVISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
static boolean K_LastTumbleBounceCondition(player_t *player)
|
||||
{
|
||||
return (player->tumbleBounces > TUMBLEBOUNCES && player->tumbleHeight < 60);
|
||||
|
|
@ -6256,6 +6337,16 @@ void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed, UINT8 sound)
|
|||
mo->player->trickpanel = 1;
|
||||
mo->player->pflags |= PF_TRICKDELAY;
|
||||
|
||||
if (P_MobjWasRemoved(mo->player->trickIndicator) == false)
|
||||
{
|
||||
mo->player->trickIndicator->rollangle = 0;
|
||||
P_SetMobjState(mo->player->trickIndicator, S_TRICKINDICATOR_UNDERLAY);
|
||||
if (P_MobjWasRemoved(mo->player->trickIndicator->tracer) == false)
|
||||
{
|
||||
P_SetMobjState(mo->player->trickIndicator->tracer, S_TRICKINDICATOR_OVERLAY);
|
||||
}
|
||||
}
|
||||
|
||||
if (mo->player->sneakertimer)
|
||||
{
|
||||
thrust = FixedMul(thrust, 5*FRACUNIT/4);
|
||||
|
|
@ -8700,8 +8791,8 @@ void K_KartPlayerAfterThink(player_t *player)
|
|||
K_KartResetPlayerColor(player);
|
||||
|
||||
K_UpdateStumbleIndicator(player);
|
||||
|
||||
K_UpdateSliptideZipIndicator(player);
|
||||
K_UpdateTrickIndicator(player);
|
||||
|
||||
// Move held objects (Bananas, Orbinaut, etc)
|
||||
K_MoveHeldObjects(player);
|
||||
|
|
@ -11966,6 +12057,11 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
|
||||
K_trickPanelTimingVisual(player, momz);
|
||||
|
||||
if (P_MobjWasRemoved(player->trickIndicator) == false)
|
||||
{
|
||||
player->trickIndicator->destscale = FixedMul(speedmult + FRACUNIT, mapobjectscale);
|
||||
}
|
||||
|
||||
// streaks:
|
||||
if (momz*P_MobjFlip(player->mo) > 0) // only spawn those while you're going upwards relative to your current gravity
|
||||
{
|
||||
|
|
@ -12031,11 +12127,21 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
{
|
||||
P_InstaThrust(player->mo, player->mo->angle + lr, max(basespeed, speed*5/2));
|
||||
player->trickpanel = 2;
|
||||
|
||||
if (P_MobjWasRemoved(player->trickIndicator) == false)
|
||||
{
|
||||
player->trickIndicator->rollangle = ANGLE_270;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
P_InstaThrust(player->mo, player->mo->angle - lr, max(basespeed, speed*5/2));
|
||||
player->trickpanel = 3;
|
||||
|
||||
if (P_MobjWasRemoved(player->trickIndicator) == false)
|
||||
{
|
||||
player->trickIndicator->rollangle = ANGLE_90;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (aimingcompare > TRICKTHRESHOLD) // forward/back trick
|
||||
|
|
@ -12049,6 +12155,11 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
|
||||
P_InstaThrust(player->mo, player->mo->angle, max(basespeed, speed*3));
|
||||
player->trickpanel = 2;
|
||||
|
||||
if (P_MobjWasRemoved(player->trickIndicator) == false)
|
||||
{
|
||||
player->trickIndicator->rollangle = 0;
|
||||
}
|
||||
}
|
||||
else if (cmd->throwdir < 0)
|
||||
{
|
||||
|
|
@ -12068,6 +12179,11 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
|
||||
player->mo->momz += P_MobjFlip(player->mo)*48*mapobjectscale;
|
||||
player->trickpanel = 4;
|
||||
|
||||
if (P_MobjWasRemoved(player->trickIndicator) == false)
|
||||
{
|
||||
player->trickIndicator->rollangle = ANGLE_180;
|
||||
}
|
||||
}
|
||||
}
|
||||
#undef TRICKTHRESHOLD
|
||||
|
|
@ -12084,6 +12200,15 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
{
|
||||
player->karthud[khud_trickcool] = TICRATE;
|
||||
}
|
||||
|
||||
if (P_MobjWasRemoved(player->trickIndicator) == false)
|
||||
{
|
||||
P_SetMobjState(player->trickIndicator, S_TRICKINDICATOR_UNDERLAY_ARROW);
|
||||
if (P_MobjWasRemoved(player->trickIndicator->tracer) == false)
|
||||
{
|
||||
P_SetMobjState(player->trickIndicator->tracer, S_TRICKINDICATOR_OVERLAY_ARROW);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -120,8 +120,10 @@ void K_StumblePlayer(player_t *player);
|
|||
boolean K_CheckStumble(player_t *player, angle_t oldPitch, angle_t oldRoll, boolean fromAir);
|
||||
void K_InitStumbleIndicator(player_t *player);
|
||||
void K_InitSliptideZipIndicator(player_t *player);
|
||||
void K_InitTrickIndicator(player_t *player);
|
||||
void K_UpdateStumbleIndicator(player_t *player);
|
||||
void K_UpdateSliptideZipIndicator(player_t *player);
|
||||
void K_UpdateTrickIndicator(player_t *player);
|
||||
INT32 K_ExplodePlayer(player_t *player, mobj_t *inflictor, mobj_t *source);
|
||||
void K_DebtStingPlayer(player_t *player, mobj_t *source);
|
||||
void K_GiveBumpersToPlayer(player_t *player, player_t *victim, UINT8 amount);
|
||||
|
|
|
|||
|
|
@ -2559,6 +2559,7 @@ static boolean P_KillPlayer(player_t *player, mobj_t *inflictor, mobj_t *source,
|
|||
|
||||
PlayerPointerRemove(player->stumbleIndicator);
|
||||
PlayerPointerRemove(player->sliptideZipIndicator);
|
||||
PlayerPointerRemove(player->trickIndicator);
|
||||
|
||||
#undef PlayerPointerRemove
|
||||
|
||||
|
|
|
|||
|
|
@ -12448,8 +12448,8 @@ void P_SpawnPlayer(INT32 playernum)
|
|||
p->griefValue = 0;
|
||||
|
||||
K_InitStumbleIndicator(p);
|
||||
|
||||
K_InitSliptideZipIndicator(p);
|
||||
K_InitTrickIndicator(p);
|
||||
|
||||
if (gametyperules & GTR_ITEMARROWS)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ savedata_cup_t cupsavedata;
|
|||
#define ARCHIVEBLOCK_RNG 0x7FAAB5BD
|
||||
|
||||
// Note: This cannot be bigger
|
||||
// than an UINT16
|
||||
// than an UINT16 (for now)
|
||||
typedef enum
|
||||
{
|
||||
AWAYVIEW = 0x0001,
|
||||
|
|
@ -81,6 +81,7 @@ typedef enum
|
|||
HAND = 0x0400,
|
||||
FLICKYATTACKER = 0x0800,
|
||||
FLICKYCONTROLLER = 0x1000,
|
||||
TRICKINDICATOR = 0x2000,
|
||||
} player_saveflags;
|
||||
|
||||
static inline void P_ArchivePlayer(savebuffer_t *save)
|
||||
|
|
@ -313,6 +314,9 @@ static void P_NetArchivePlayers(savebuffer_t *save)
|
|||
if (players[i].sliptideZipIndicator)
|
||||
flags |= SLIPTIDEZIP;
|
||||
|
||||
if (players[i].trickIndicator)
|
||||
flags |= TRICKINDICATOR;
|
||||
|
||||
if (players[i].whip)
|
||||
flags |= WHIP;
|
||||
|
||||
|
|
@ -351,6 +355,9 @@ static void P_NetArchivePlayers(savebuffer_t *save)
|
|||
if (flags & SLIPTIDEZIP)
|
||||
WRITEUINT32(save->p, players[i].sliptideZipIndicator->mobjnum);
|
||||
|
||||
if (flags & TRICKINDICATOR)
|
||||
WRITEUINT32(save->p, players[i].trickIndicator->mobjnum);
|
||||
|
||||
if (flags & WHIP)
|
||||
WRITEUINT32(save->p, players[i].whip->mobjnum);
|
||||
|
||||
|
|
@ -864,6 +871,9 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
|
|||
if (flags & SLIPTIDEZIP)
|
||||
players[i].sliptideZipIndicator = (mobj_t *)(size_t)READUINT32(save->p);
|
||||
|
||||
if (flags & TRICKINDICATOR)
|
||||
players[i].trickIndicator = (mobj_t *)(size_t)READUINT32(save->p);
|
||||
|
||||
if (flags & WHIP)
|
||||
players[i].whip = (mobj_t *)(size_t)READUINT32(save->p);
|
||||
|
||||
|
|
@ -5595,6 +5605,13 @@ static void P_RelinkPointers(void)
|
|||
if (!P_SetTarget(&players[i].sliptideZipIndicator, P_FindNewPosition(temp)))
|
||||
CONS_Debug(DBG_GAMELOGIC, "sliptideZipIndicator not found on player %d\n", i);
|
||||
}
|
||||
if (players[i].trickIndicator)
|
||||
{
|
||||
temp = (UINT32)(size_t)players[i].trickIndicator;
|
||||
players[i].trickIndicator = NULL;
|
||||
if (!P_SetTarget(&players[i].trickIndicator, P_FindNewPosition(temp)))
|
||||
CONS_Debug(DBG_GAMELOGIC, "trickIndicator not found on player %d\n", i);
|
||||
}
|
||||
if (players[i].whip)
|
||||
{
|
||||
temp = (UINT32)(size_t)players[i].whip;
|
||||
|
|
|
|||
|
|
@ -3996,6 +3996,7 @@ void P_PlayerThink(player_t *player)
|
|||
PlayerPointerErase(player->followmobj);
|
||||
PlayerPointerErase(player->stumbleIndicator);
|
||||
PlayerPointerErase(player->sliptideZipIndicator);
|
||||
PlayerPointerErase(player->trickIndicator);
|
||||
PlayerPointerErase(player->whip);
|
||||
PlayerPointerErase(player->hand);
|
||||
PlayerPointerErase(player->ringShooter);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue