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
|
tic_t dropdash; // Drop Dash charge timer
|
||||||
boolean truedeath; // Your soul has left your body
|
boolean truedeath; // Your soul has left your body
|
||||||
boolean manual; // Respawn coords were manually set, please respawn exactly there
|
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;
|
boolean init;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1324,7 +1324,6 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
||||||
// C
|
// C
|
||||||
if (G_PlayerInputDown(forplayer, gc_spindash, 0))
|
if (G_PlayerInputDown(forplayer, gc_spindash, 0))
|
||||||
{
|
{
|
||||||
forward = 0;
|
|
||||||
cmd->buttons |= BT_SPINDASHMASK;
|
cmd->buttons |= BT_SPINDASHMASK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1343,7 +1342,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
||||||
// respawn
|
// respawn
|
||||||
if (G_PlayerInputDown(forplayer, gc_respawn, 0))
|
if (G_PlayerInputDown(forplayer, gc_respawn, 0))
|
||||||
{
|
{
|
||||||
cmd->buttons |= BT_RESPAWN;
|
cmd->buttons |= (BT_RESPAWN | BT_EBRAKEMASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
// mp general function button
|
// 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;
|
return MAXPLMOVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player->spinouttimer || K_PlayerEBrake(player))
|
if (player->spinouttimer != 0
|
||||||
|
|| K_PressingEBrake(player) == true
|
||||||
|
|| K_PlayerEBrake(player) == true)
|
||||||
{
|
{
|
||||||
return 0;
|
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
|
/** \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
|
\param player player object passed from P_PlayerThink
|
||||||
|
|
@ -8076,7 +8083,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
||||||
K_SpawnGardenTopSpeedLines(player);
|
K_SpawnGardenTopSpeedLines(player);
|
||||||
}
|
}
|
||||||
// Only allow drifting while NOT trying to do an spindash input.
|
// 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;
|
player->pflags |= PF_DRIFTINPUT;
|
||||||
}
|
}
|
||||||
|
|
@ -8952,7 +8959,7 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
|
||||||
currentSpeed = FixedHypot(player->mo->momx, player->mo->momy);
|
currentSpeed = FixedHypot(player->mo->momx, player->mo->momy);
|
||||||
|
|
||||||
if ((currentSpeed <= 0) // Not moving
|
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->respawn.state == RESPAWNST_NONE) // Not respawning
|
||||||
&& (player->curshield != KSHIELD_TOP) // Not riding a Top
|
&& (player->curshield != KSHIELD_TOP) // Not riding a Top
|
||||||
&& (P_IsObjectOnGround(player->mo) == true)) // On the ground
|
&& (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)
|
boolean K_PlayerEBrake(player_t *player)
|
||||||
{
|
{
|
||||||
if (player->respawn.state != RESPAWNST_NONE
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -9748,7 +9760,7 @@ boolean K_PlayerEBrake(player_t *player)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((K_GetKartButtons(player) & BT_EBRAKEMASK) == BT_EBRAKEMASK
|
if (K_PressingEBrake(player) == true
|
||||||
&& player->drift == 0
|
&& player->drift == 0
|
||||||
&& P_PlayerInPain(player) == false
|
&& P_PlayerInPain(player) == false
|
||||||
&& player->justbumped == 0
|
&& player->justbumped == 0
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,7 @@ void K_SpawnBumpEffect(mobj_t *mo);
|
||||||
void K_KartMoveAnimation(player_t *player);
|
void K_KartMoveAnimation(player_t *player);
|
||||||
void K_KartPlayerHUDUpdate(player_t *player);
|
void K_KartPlayerHUDUpdate(player_t *player);
|
||||||
void K_KartResetPlayerColor(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_KartPlayerThink(player_t *player, ticcmd_t *cmd);
|
||||||
void K_KartPlayerAfterThink(player_t *player);
|
void K_KartPlayerAfterThink(player_t *player);
|
||||||
fixed_t K_MomentumThreshold(const mobj_t *mo);
|
fixed_t K_MomentumThreshold(const mobj_t *mo);
|
||||||
|
|
|
||||||
|
|
@ -175,9 +175,25 @@ void K_DoIngameRespawn(player_t *player)
|
||||||
}
|
}
|
||||||
else if (player->respawn.wp != NULL)
|
else if (player->respawn.wp != NULL)
|
||||||
{
|
{
|
||||||
const UINT32 dist = RESPAWN_DIST + (player->airtime * 48);
|
if (player->respawn.fromRingShooter == true)
|
||||||
player->respawn.distanceleft = (dist * mapobjectscale) / FRACUNIT;
|
{
|
||||||
K_RespawnAtWaypoint(player, player->respawn.wp);
|
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
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -465,7 +481,9 @@ static void K_MovePlayerToRespawnPoint(player_t *player)
|
||||||
player->mo->momz = step.z;
|
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!
|
// Manual drop!
|
||||||
player->respawn.state = RESPAWNST_DROP;
|
player->respawn.state = RESPAWNST_DROP;
|
||||||
|
|
@ -822,6 +840,7 @@ void K_RespawnChecker(player_t *player)
|
||||||
K_MovePlayerToRespawnPoint(player);
|
K_MovePlayerToRespawnPoint(player);
|
||||||
return;
|
return;
|
||||||
case RESPAWNST_DROP:
|
case RESPAWNST_DROP:
|
||||||
|
player->respawn.fromRingShooter = false;
|
||||||
player->mo->momx = player->mo->momy = 0;
|
player->mo->momx = player->mo->momy = 0;
|
||||||
player->flashing = 3;
|
player->flashing = 3;
|
||||||
if (player->respawn.timer > 0)
|
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->airtime += rs_base_karted(base);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
player->respawn.fromRingShooter = true;
|
||||||
K_DoIngameRespawn(player);
|
K_DoIngameRespawn(player);
|
||||||
|
|
||||||
// Now other players can run into it!
|
// Now other players can run into it!
|
||||||
|
|
@ -676,6 +678,11 @@ void Obj_RingShooterInput(player_t *player)
|
||||||
{
|
{
|
||||||
player->mo->momx = player->mo->momy = 0;
|
player->mo->momx = player->mo->momy = 0;
|
||||||
P_SetPlayerAngle(player, base->angle);
|
P_SetPlayerAngle(player, base->angle);
|
||||||
|
P_MoveOrigin(
|
||||||
|
player->mo,
|
||||||
|
base->x, base->y,
|
||||||
|
base->z // TODO: reverse gravity
|
||||||
|
);
|
||||||
|
|
||||||
if (base->fuse < RS_FUSE_BLINK)
|
if (base->fuse < RS_FUSE_BLINK)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue