mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Ring Shooter: E-Brake + adjust distance
- Y is now additionally another macro for HOLD! - Disable HOLD! drop from respawning when done with Ring Shooter. - Immediate release Ring Shooter now goes back a waypoint, and does not have a minimum distance to go forward anymore.
This commit is contained in:
parent
b123fd98a2
commit
3b7ac38d9f
6 changed files with 50 additions and 11 deletions
|
|
@ -310,6 +310,7 @@ struct respawnvars_t
|
|||
tic_t dropdash; // Drop Dash charge timer
|
||||
boolean truedeath; // Your soul has left your body
|
||||
boolean manual; // Respawn coords were manually set, please respawn exactly there
|
||||
boolean fromRingShooter; // Respawn was from Ring Shooter, don't allow E-Brake drop
|
||||
boolean init;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1324,7 +1324,6 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
|||
// C
|
||||
if (G_PlayerInputDown(forplayer, gc_spindash, 0))
|
||||
{
|
||||
forward = 0;
|
||||
cmd->buttons |= BT_SPINDASHMASK;
|
||||
}
|
||||
|
||||
|
|
@ -1343,7 +1342,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
|||
// respawn
|
||||
if (G_PlayerInputDown(forplayer, gc_respawn, 0))
|
||||
{
|
||||
cmd->buttons |= BT_RESPAWN;
|
||||
cmd->buttons |= (BT_RESPAWN | BT_EBRAKEMASK);
|
||||
}
|
||||
|
||||
// mp general function button
|
||||
|
|
|
|||
22
src/k_kart.c
22
src/k_kart.c
|
|
@ -3420,7 +3420,9 @@ SINT8 K_GetForwardMove(player_t *player)
|
|||
return MAXPLMOVE;
|
||||
}
|
||||
|
||||
if (player->spinouttimer || K_PlayerEBrake(player))
|
||||
if (player->spinouttimer != 0
|
||||
|| K_PressingEBrake(player) == true
|
||||
|| K_PlayerEBrake(player) == true)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -7549,6 +7551,11 @@ static void K_UpdateTripwire(player_t *player)
|
|||
}
|
||||
}
|
||||
|
||||
boolean K_PressingEBrake(player_t *player)
|
||||
{
|
||||
return ((K_GetKartButtons(player) & BT_EBRAKEMASK) == BT_EBRAKEMASK);
|
||||
}
|
||||
|
||||
/** \brief Decreases various kart timers and powers per frame. Called in P_PlayerThink in p_user.c
|
||||
|
||||
\param player player object passed from P_PlayerThink
|
||||
|
|
@ -8076,7 +8083,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
K_SpawnGardenTopSpeedLines(player);
|
||||
}
|
||||
// Only allow drifting while NOT trying to do an spindash input.
|
||||
else if ((K_GetKartButtons(player) & BT_EBRAKEMASK) != BT_EBRAKEMASK)
|
||||
else if (K_PressingEBrake(player) == false)
|
||||
{
|
||||
player->pflags |= PF_DRIFTINPUT;
|
||||
}
|
||||
|
|
@ -8952,7 +8959,7 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
|
|||
currentSpeed = FixedHypot(player->mo->momx, player->mo->momy);
|
||||
|
||||
if ((currentSpeed <= 0) // Not moving
|
||||
&& ((K_GetKartButtons(player) & BT_EBRAKEMASK) != BT_EBRAKEMASK) // Not e-braking
|
||||
&& (K_PressingEBrake(player) == false) // Not e-braking
|
||||
&& (player->respawn.state == RESPAWNST_NONE) // Not respawning
|
||||
&& (player->curshield != KSHIELD_TOP) // Not riding a Top
|
||||
&& (P_IsObjectOnGround(player->mo) == true)) // On the ground
|
||||
|
|
@ -9738,7 +9745,12 @@ static INT32 K_FlameShieldMax(player_t *player)
|
|||
boolean K_PlayerEBrake(player_t *player)
|
||||
{
|
||||
if (player->respawn.state != RESPAWNST_NONE
|
||||
&& player->respawn.init == true)
|
||||
&& (player->respawn.init == true || player->respawn.fromRingShooter == true))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Obj_PlayerRingShooterFreeze(player) == true)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -9748,7 +9760,7 @@ boolean K_PlayerEBrake(player_t *player)
|
|||
return true;
|
||||
}
|
||||
|
||||
if ((K_GetKartButtons(player) & BT_EBRAKEMASK) == BT_EBRAKEMASK
|
||||
if (K_PressingEBrake(player) == true
|
||||
&& player->drift == 0
|
||||
&& P_PlayerInPain(player) == false
|
||||
&& player->justbumped == 0
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@ void K_SpawnBumpEffect(mobj_t *mo);
|
|||
void K_KartMoveAnimation(player_t *player);
|
||||
void K_KartPlayerHUDUpdate(player_t *player);
|
||||
void K_KartResetPlayerColor(player_t *player);
|
||||
boolean K_PressingEBrake(player_t *player);
|
||||
void K_KartPlayerThink(player_t *player, ticcmd_t *cmd);
|
||||
void K_KartPlayerAfterThink(player_t *player);
|
||||
fixed_t K_MomentumThreshold(const mobj_t *mo);
|
||||
|
|
|
|||
|
|
@ -175,9 +175,25 @@ void K_DoIngameRespawn(player_t *player)
|
|||
}
|
||||
else if (player->respawn.wp != NULL)
|
||||
{
|
||||
const UINT32 dist = RESPAWN_DIST + (player->airtime * 48);
|
||||
player->respawn.distanceleft = (dist * mapobjectscale) / FRACUNIT;
|
||||
K_RespawnAtWaypoint(player, player->respawn.wp);
|
||||
if (player->respawn.fromRingShooter == true)
|
||||
{
|
||||
waypoint_t *prevWP = player->respawn.wp;
|
||||
if (prevWP->numprevwaypoints > 0)
|
||||
{
|
||||
prevWP = prevWP->prevwaypoints[0];
|
||||
}
|
||||
|
||||
const UINT32 dist = (player->airtime * 48);
|
||||
player->respawn.distanceleft = (dist * mapobjectscale) / FRACUNIT;
|
||||
|
||||
K_RespawnAtWaypoint(player, prevWP);
|
||||
}
|
||||
else
|
||||
{
|
||||
const UINT32 dist = RESPAWN_DIST + (player->airtime * 48);
|
||||
player->respawn.distanceleft = (dist * mapobjectscale) / FRACUNIT;
|
||||
K_RespawnAtWaypoint(player, player->respawn.wp);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -465,7 +481,9 @@ static void K_MovePlayerToRespawnPoint(player_t *player)
|
|||
player->mo->momz = step.z;
|
||||
}
|
||||
|
||||
if (player->respawn.init == false && K_PlayerEBrake(player) == true)
|
||||
if (player->respawn.init == false
|
||||
&& player->respawn.fromRingShooter == false
|
||||
&& K_PlayerEBrake(player) == true)
|
||||
{
|
||||
// Manual drop!
|
||||
player->respawn.state = RESPAWNST_DROP;
|
||||
|
|
@ -822,6 +840,7 @@ void K_RespawnChecker(player_t *player)
|
|||
K_MovePlayerToRespawnPoint(player);
|
||||
return;
|
||||
case RESPAWNST_DROP:
|
||||
player->respawn.fromRingShooter = false;
|
||||
player->mo->momx = player->mo->momy = 0;
|
||||
player->flashing = 3;
|
||||
if (player->respawn.timer > 0)
|
||||
|
|
|
|||
|
|
@ -428,6 +428,8 @@ void Obj_PlayerUsedRingShooter(mobj_t *base, player_t *player)
|
|||
{
|
||||
player->airtime += rs_base_karted(base);
|
||||
}
|
||||
|
||||
player->respawn.fromRingShooter = true;
|
||||
K_DoIngameRespawn(player);
|
||||
|
||||
// Now other players can run into it!
|
||||
|
|
@ -676,6 +678,11 @@ void Obj_RingShooterInput(player_t *player)
|
|||
{
|
||||
player->mo->momx = player->mo->momy = 0;
|
||||
P_SetPlayerAngle(player, base->angle);
|
||||
P_MoveOrigin(
|
||||
player->mo,
|
||||
base->x, base->y,
|
||||
base->z // TODO: reverse gravity
|
||||
);
|
||||
|
||||
if (base->fuse < RS_FUSE_BLINK)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue