"fusion" air drop
This commit is contained in:
parent
fc455e9079
commit
d915af3cb5
4 changed files with 62 additions and 53 deletions
|
|
@ -616,6 +616,7 @@ consvar_t cv_kartdrafting_basedistance = CVAR_INIT ("kartdrafting_basedistance",
|
|||
static CV_PossibleValue_t airdrop_cons_t[] = {{AIRDROP_NONE, "Off"},
|
||||
{AIRDROP_LIGHT, "Light"},
|
||||
{AIRDROP_HEAVY, "Heavy"},
|
||||
{AIRDROP_FUSION, "Fusion"},
|
||||
{0, NULL}};
|
||||
consvar_t cv_kartairdrop = CVAR_INIT ("kartairdrop", "Off", CV_NETVAR|CV_CALL|CV_NOINIT|CV_GUARD, airdrop_cons_t, KartAirDrop_OnChange);
|
||||
|
||||
|
|
|
|||
|
|
@ -113,9 +113,12 @@ typedef enum
|
|||
|
||||
typedef enum
|
||||
{
|
||||
PAF_WANTSAIRDROP = 1<<0, // Wants Air drop (input pressed and buffered)
|
||||
PAF_AIRDROP = 1<<1, // Is in Air Drop (activation / deactivation criteria change if light or heavy)
|
||||
PAF_AIRDROPINPUT = 1<<2, // Air drop input held
|
||||
PAF_AIRDROPINPUT = 1<<0, // Air drop input held
|
||||
PAF_WANTSAIRDROP = 1<<1, // Wants Air drop (input pressed and buffered)
|
||||
PAF_AIRDROP_LIGHT = 1<<2, // Is in Light Air Drop
|
||||
PAF_AIRDROP_HEAVY = 1<<3, // Is in Heavy Air Drop
|
||||
|
||||
PAF_AIRDROP_MASK = (PAF_AIRDROP_LIGHT|PAF_AIRDROP_HEAVY), // Is in any Air Drop state
|
||||
} p_airdropflags_t;
|
||||
|
||||
typedef enum
|
||||
|
|
|
|||
104
src/k_kart.c
104
src/k_kart.c
|
|
@ -6978,6 +6978,8 @@ static void K_SpawnFallLines(player_t *player, boolean ringdrop)
|
|||
|
||||
static void K_AirDrop(player_t *player, ticcmd_t *cmd)
|
||||
{
|
||||
const tic_t airbrakedelay = TICRATE/3;
|
||||
|
||||
if (player->airdropbuffer > 0)
|
||||
{
|
||||
player->airdropbuffer--;
|
||||
|
|
@ -6995,7 +6997,7 @@ static void K_AirDrop(player_t *player, ticcmd_t *cmd)
|
|||
else
|
||||
{
|
||||
player->airdropflags &= ~PAF_AIRDROPINPUT;
|
||||
if (airdropactive == AIRDROP_LIGHT)
|
||||
if (airdropactive == AIRDROP_LIGHT || airdropactive == AIRDROP_FUSION)
|
||||
{
|
||||
player->airdropflags &= ~PAF_WANTSAIRDROP;
|
||||
}
|
||||
|
|
@ -7006,7 +7008,7 @@ static void K_AirDrop(player_t *player, ticcmd_t *cmd)
|
|||
player->airdropflags &= ~PAF_WANTSAIRDROP;
|
||||
}
|
||||
|
||||
if (!(player->airdropflags & PAF_AIRDROP))
|
||||
if (!(player->airdropflags & PAF_AIRDROP_HEAVY))
|
||||
{
|
||||
if (player->karthud[khud_heavydropcam] > 0)
|
||||
{
|
||||
|
|
@ -7018,29 +7020,26 @@ static void K_AirDrop(player_t *player, ticcmd_t *cmd)
|
|||
player->karthud[khud_postdropcam]--;
|
||||
}
|
||||
|
||||
if (P_IsObjectOnGround(player->mo))
|
||||
if (K_AirDropActive() && P_IsObjectOnGround(player->mo))
|
||||
{
|
||||
if (K_AirDropActive() && (player->airdropflags & PAF_AIRDROP))
|
||||
if ((player->airdropflags & PAF_AIRDROP_HEAVY))
|
||||
{
|
||||
if (airdropactive == AIRDROP_HEAVY)
|
||||
if (player->rings > 0 && player->airdroptime > TICRATE/4)
|
||||
{
|
||||
if (player->rings > 0 && player->airdroptime > TICRATE/4)
|
||||
{
|
||||
P_PlayerRingBurst(player, min(2, player->rings));
|
||||
}
|
||||
if (player->airdroptime > 1)
|
||||
{
|
||||
player->startboost = TICRATE/2;
|
||||
|
||||
// Take off!
|
||||
S_StartSound(player->mo, sfx_shrpgo);
|
||||
}
|
||||
|
||||
// POOMP!
|
||||
S_StartSound(player->mo, sfx_vclgna);
|
||||
|
||||
player->karthud[khud_postdropcam] = min(2*player->karthud[khud_heavydropcam], TICRATE/4);
|
||||
P_PlayerRingBurst(player, min(2, player->rings));
|
||||
}
|
||||
if (player->airdroptime > 1)
|
||||
{
|
||||
player->startboost = TICRATE/2;
|
||||
|
||||
// Take off!
|
||||
S_StartSound(player->mo, sfx_shrpgo);
|
||||
}
|
||||
|
||||
// POOMP!
|
||||
S_StartSound(player->mo, sfx_vclgna);
|
||||
|
||||
player->karthud[khud_postdropcam] = min(2*player->karthud[khud_heavydropcam], TICRATE/4);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -7051,14 +7050,20 @@ static void K_AirDrop(player_t *player, ticcmd_t *cmd)
|
|||
)
|
||||
{
|
||||
player->airdroptime = 0;
|
||||
player->airdropflags &= ~PAF_AIRDROP;
|
||||
player->airdropflags &= ~PAF_AIRDROP_MASK;
|
||||
return;
|
||||
}
|
||||
|
||||
if (player->airdropflags & PAF_WANTSAIRDROP)
|
||||
{
|
||||
if (airdropactive == AIRDROP_HEAVY && !(player->airdropflags & (PAF_AIRDROP)))
|
||||
if ((airdropactive == AIRDROP_LIGHT) || (airdropactive == AIRDROP_FUSION && (cmd->buttons & BT_ACCELERATE)))
|
||||
{
|
||||
player->airdropflags |= PAF_AIRDROP_LIGHT;
|
||||
}
|
||||
else if (!(player->airdropflags & (PAF_AIRDROP_HEAVY))) // in fusion, fires if brake is held but not accel
|
||||
{
|
||||
player->airdropflags |= PAF_AIRDROP_HEAVY;
|
||||
player->airdroptime = 0;
|
||||
player->airdropbuffer = 0;
|
||||
|
||||
// TODO: heavy air drop should allow keeping current boost stack
|
||||
|
|
@ -7067,43 +7072,42 @@ static void K_AirDrop(player_t *player, ticcmd_t *cmd)
|
|||
|
||||
player->mo->momx = FixedMul(player->mo->momx, 90*FRACUNIT/100);
|
||||
player->mo->momy = FixedMul(player->mo->momy, 90*FRACUNIT/100);
|
||||
player->mo->momz -= 8*P_MobjFlip(player->mo)*mapobjectscale;
|
||||
player->mo->momz -= 12*P_MobjFlip(player->mo)*mapobjectscale;
|
||||
}
|
||||
player->airdropflags |= PAF_AIRDROP;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (airdropactive == AIRDROP_LIGHT)
|
||||
player->airdropflags &= ~PAF_AIRDROP;
|
||||
if (airdropactive == AIRDROP_LIGHT || airdropactive == AIRDROP_FUSION)
|
||||
{
|
||||
player->airdropflags &= ~PAF_AIRDROP_LIGHT;
|
||||
}
|
||||
}
|
||||
|
||||
if (player->airdropflags & PAF_AIRDROP)
|
||||
// heavy air drop always overrides light air drop
|
||||
if (player->airdropflags & PAF_AIRDROP_HEAVY)
|
||||
{
|
||||
tic_t airbrakedelay = TICRATE/3;
|
||||
K_SpawnFallLines(player, false);
|
||||
|
||||
if (airdropactive == AIRDROP_HEAVY)
|
||||
if (player->airdroptime <= airbrakedelay)
|
||||
{
|
||||
if (player->airdroptime <= airbrakedelay)
|
||||
{
|
||||
player->mo->momz -= FixedMul(4*gravity, mapobjectscale)*P_MobjFlip(player->mo);
|
||||
K_SpawnAirdropTrail(player);
|
||||
}
|
||||
else
|
||||
{
|
||||
player->mo->momz -= FixedMul(2*gravity, mapobjectscale)*P_MobjFlip(player->mo);
|
||||
}
|
||||
|
||||
if (player->karthud[khud_heavydropcam] < TICRATE)
|
||||
player->karthud[khud_heavydropcam]++;
|
||||
player->mo->momz -= FixedMul(5*gravity, mapobjectscale)*P_MobjFlip(player->mo);
|
||||
K_SpawnAirdropTrail(player);
|
||||
}
|
||||
else if (airdropactive == AIRDROP_LIGHT)
|
||||
else
|
||||
{
|
||||
if (player->airdroptime >= airbrakedelay)
|
||||
{
|
||||
player->mo->momz -= FixedMul(gravity, mapobjectscale)*P_MobjFlip(player->mo);
|
||||
K_SpawnAirdropTrail(player);
|
||||
}
|
||||
player->mo->momz -= FixedMul(2*gravity, mapobjectscale)*P_MobjFlip(player->mo);
|
||||
}
|
||||
|
||||
player->airdroptime++;
|
||||
if (player->karthud[khud_heavydropcam] < TICRATE)
|
||||
player->karthud[khud_heavydropcam]++;
|
||||
}
|
||||
else if (player->airdropflags & PAF_AIRDROP_LIGHT)
|
||||
{
|
||||
K_SpawnFallLines(player, false);
|
||||
if (player->airdroptime >= airbrakedelay)
|
||||
{
|
||||
player->mo->momz -= FixedMul(gravity, mapobjectscale)*P_MobjFlip(player->mo);
|
||||
K_SpawnAirdropTrail(player);
|
||||
}
|
||||
player->airdroptime++;
|
||||
}
|
||||
|
|
@ -11728,7 +11732,7 @@ boolean K_DraftingActive(void)
|
|||
|
||||
boolean K_AirDropActive(void)
|
||||
{
|
||||
if (airdropactive)
|
||||
if (airdropactive > AIRDROP_NONE)
|
||||
{
|
||||
// Air Drop is enabled!
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -424,6 +424,7 @@ typedef enum
|
|||
AIRDROP_NONE = 0,
|
||||
AIRDROP_LIGHT,
|
||||
AIRDROP_HEAVY,
|
||||
AIRDROP_FUSION,
|
||||
} airdroptype_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
|||
Loading…
Reference in a new issue