From 8615ed9db9c41996e597a24725a603cc22e8b4f7 Mon Sep 17 00:00:00 2001 From: AJ Martinez Date: Wed, 1 May 2024 19:10:47 -0700 Subject: [PATCH 1/3] Fastfall refinements --- src/k_kart.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index 0914ac943..78820ddc9 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -11775,6 +11775,16 @@ static void K_KartSpindash(player_t *player) K_KartSpindashDust(player->mo); } + // 2.2 - Driftbrake slideoff fastfall prevention + if (!G_CompatLevel(0x000A)) + { + if (player->drift && onGround && player->cmd.buttons & BT_BRAKE) + { + player->pflags |= PF_NOFASTFALL; + return; + } + } + if (K_PlayerEBrake(player) == false) { player->spindash = 0; @@ -11942,6 +11952,23 @@ boolean K_FastFallBounce(player_t *player) player->fastfall = 0; + // 2.2 - More lenient fastfall + if (!G_CompatLevel(0x000A)) + { + if (player->curshield != KSHIELD_BUBBLE) + { + // Nudge the player in their facing angle, and provide a little starting momentum if they need it. + // The bounce is already a strong tradeoff, so this allows it to be used for saves and get you back into flow. + angle_t momangle = K_MomentumAngle(player->mo); + fixed_t minspeed = K_GetKartSpeed(player, false, false)/2; + fixed_t returnspeed = max(FixedHypot(player->mo->momx, player->mo->momy), minspeed); + + // Initial momentum set uses real speed to avoid some weird twitchy behavior at low XY speed + P_InstaThrust(player->mo, momangle, FixedHypot(player->mo->momx, player->mo->momy)/2); + P_Thrust(player->mo, player->mo->angle, returnspeed/2); + } + } + player->mo->momz = bounce * P_MobjFlip(player->mo); return true; From c05a9db159d16333cc70098e58cf1a1cd72ac845 Mon Sep 17 00:00:00 2001 From: AJ Martinez Date: Thu, 2 May 2024 00:43:07 -0700 Subject: [PATCH 2/3] WIP --- src/k_kart.c | 18 +++++++++++++++++- src/p_user.c | 2 ++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index 78820ddc9..fa5b2d089 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -11814,6 +11814,18 @@ static void K_KartSpindash(player_t *player) player->spindash = 0; P_ResetPitchRoll(player->mo); + // 2.2 - alternate fastfall + if (!G_CompatLevel(0x000A)) + { + if (K_PressingEBrake(player) && player->curshield != KSHIELD_BUBBLE && player->trickpanel == TRICKSTATE_NONE) + { + mobj_t *fuckingthing = P_SpawnGhostMobj(player->mo); + fuckingthing->extravalue1 = 69; + fuckingthing->renderflags &= ~RF_TRANSMASK; + fuckingthing->tics = 3; + } + } + return; } else if (player->fastfall != 0) @@ -11955,7 +11967,7 @@ boolean K_FastFallBounce(player_t *player) // 2.2 - More lenient fastfall if (!G_CompatLevel(0x000A)) { - if (player->curshield != KSHIELD_BUBBLE) + if (player->curshield != KSHIELD_BUBBLE && K_PressingEBrake(player)) { // Nudge the player in their facing angle, and provide a little starting momentum if they need it. // The bounce is already a strong tradeoff, so this allows it to be used for saves and get you back into flow. @@ -11963,6 +11975,10 @@ boolean K_FastFallBounce(player_t *player) fixed_t minspeed = K_GetKartSpeed(player, false, false)/2; fixed_t returnspeed = max(FixedHypot(player->mo->momx, player->mo->momy), minspeed); + S_StartSound(player->mo, sfx_gshac); + S_StartSound(player->mo, sfx_gshdc); + K_AddHitLag(player->mo, 4, false); + // Initial momentum set uses real speed to avoid some weird twitchy behavior at low XY speed P_InstaThrust(player->mo, momangle, FixedHypot(player->mo->momx, player->mo->momy)/2); P_Thrust(player->mo, player->mo->angle, returnspeed/2); diff --git a/src/p_user.c b/src/p_user.c index fc0c0bd23..6d5609337 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1089,6 +1089,8 @@ mobj_t *P_SpawnGhostMobj(mobj_t *mobj) ghost->sprite2 = mobj->sprite2; ghost->frame = mobj->frame; ghost->tics = -1; + // Trying to control transparency on ghost mobjs? Turn around. + // Look for the MT_GHOST thinker in p_mobj.c. ghost->renderflags = (mobj->renderflags & ~RF_TRANSMASK)|RF_TRANS50; ghost->fuse = ghost->info->damage; ghost->skin = mobj->skin; From 1db5972791410e1db74d4eedfae4086a2f4374c2 Mon Sep 17 00:00:00 2001 From: AJ Martinez Date: Thu, 2 May 2024 16:40:12 -0700 Subject: [PATCH 3/3] Revert "WIP" This reverts commit c05a9db159d16333cc70098e58cf1a1cd72ac845. --- src/k_kart.c | 18 +----------------- src/p_user.c | 2 -- 2 files changed, 1 insertion(+), 19 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 8af1933f0..cfb21dda1 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -11883,18 +11883,6 @@ static void K_KartSpindash(player_t *player) player->spindash = 0; P_ResetPitchRoll(player->mo); - // 2.2 - alternate fastfall - if (!G_CompatLevel(0x000A)) - { - if (K_PressingEBrake(player) && player->curshield != KSHIELD_BUBBLE && player->trickpanel == TRICKSTATE_NONE) - { - mobj_t *fuckingthing = P_SpawnGhostMobj(player->mo); - fuckingthing->extravalue1 = 69; - fuckingthing->renderflags &= ~RF_TRANSMASK; - fuckingthing->tics = 3; - } - } - return; } else if (player->fastfall != 0) @@ -12073,7 +12061,7 @@ boolean K_FastFallBounce(player_t *player) // 2.2 - More lenient fastfall if (!G_CompatLevel(0x000A)) { - if (player->curshield != KSHIELD_BUBBLE && K_PressingEBrake(player)) + if (player->curshield != KSHIELD_BUBBLE) { // Nudge the player in their facing angle, and provide a little starting momentum if they need it. // The bounce is already a strong tradeoff, so this allows it to be used for saves and get you back into flow. @@ -12081,10 +12069,6 @@ boolean K_FastFallBounce(player_t *player) fixed_t minspeed = K_GetKartSpeed(player, false, false)/2; fixed_t returnspeed = max(FixedHypot(player->mo->momx, player->mo->momy), minspeed); - S_StartSound(player->mo, sfx_gshac); - S_StartSound(player->mo, sfx_gshdc); - K_AddHitLag(player->mo, 4, false); - // Initial momentum set uses real speed to avoid some weird twitchy behavior at low XY speed P_InstaThrust(player->mo, momangle, FixedHypot(player->mo->momx, player->mo->momy)/2); P_Thrust(player->mo, player->mo->angle, returnspeed/2); diff --git a/src/p_user.c b/src/p_user.c index 6d5609337..fc0c0bd23 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1089,8 +1089,6 @@ mobj_t *P_SpawnGhostMobj(mobj_t *mobj) ghost->sprite2 = mobj->sprite2; ghost->frame = mobj->frame; ghost->tics = -1; - // Trying to control transparency on ghost mobjs? Turn around. - // Look for the MT_GHOST thinker in p_mobj.c. ghost->renderflags = (mobj->renderflags & ~RF_TRANSMASK)|RF_TRANS50; ghost->fuse = ghost->info->damage; ghost->skin = mobj->skin;