diff --git a/src/d_netcmd.c b/src/d_netcmd.c index b16c4fe28..c42a34040 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -582,6 +582,8 @@ consvar_t cv_kartairthrust_power2 = CVAR_INIT ("kartairthrust_power2", "0.35", C consvar_t cv_kartairthrust_power3 = CVAR_INIT ("kartairthrust_power3", "0.5", CV_NETVAR|CV_FLOAT|CV_CHEAT|CV_GUARD, CV_Unsigned, NULL); consvar_t cv_kartairthrust_power4 = CVAR_INIT ("kartairthrust_power4", "0.75", CV_NETVAR|CV_FLOAT|CV_CHEAT|CV_GUARD, CV_Unsigned, NULL); +consvar_t cv_kartwaterskiplock = CVAR_INIT ("kartwaterskiplock", "No", CV_NETVAR|CV_CALL|CV_NOINIT|CV_GUARD, CV_YesNo, KartWaterSkipLock_OnChange); + consvar_t cv_kartitemlitter = CVAR_INIT ("kartitemlitter", "On", CV_NETVAR|CV_CALL|CV_NOINIT, CV_OnOff, KartItemLitter_OnChange); consvar_t cv_kartitempush = CVAR_INIT ("kartitempush", "Off", CV_NETVAR|CV_CALL|CV_NOINIT, CV_OnOff, KartItemPush_OnChange); @@ -8241,6 +8243,39 @@ static void KartAirThrust_OnChange(void) } } +static void KartWaterSkipLock_OnChange(void) +{ + if (K_CanChangeRules(false) == false) + { + return; + } + + if (!K_WaterskipBricksActive() && cv_kartwaterskiplock.value) + { + if (leveltime < starttime) + { + waterskipbricks = true; + CONS_Printf(M_GetText("Waterskip Lock has been turned \"On\".\n")); + } + else + { + CONS_Printf(M_GetText("Waterskip Lock will be turned \"On\" Next Round.\n")); + } + } + else if (K_WaterskipBricksActive() && !cv_kartwaterskiplock.value) + { + if (leveltime < starttime) + { + waterskipbricks = false; + CONS_Printf(M_GetText("Waterskip Lock has been turned \"Off\".\n")); + } + else + { + CONS_Printf(M_GetText("Waterskip Lock will be turned \"Off\" next round.\n")); + } + } +} + static void KartItemLitter_OnChange(void) { if (K_CanChangeRules(false) == false) diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 45de60434..b58785c47 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -208,6 +208,8 @@ extern consvar_t cv_kartairthrust_power2; extern consvar_t cv_kartairthrust_power3; extern consvar_t cv_kartairthrust_power4; +extern consvar_t cv_kartwaterskiplock; + extern consvar_t cv_kartitemlitter, cv_kartitempush; extern consvar_t cv_kartantibump; diff --git a/src/k_kart.c b/src/k_kart.c index 878a660c8..27f2d89da 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -11225,6 +11225,17 @@ boolean K_AirThrustActive(void) return false; } +boolean K_WaterskipBricksActive(void) +{ + if (waterskipbricks) + { + // Water Skip Lock is enabled! + return true; + } + + return false; +} + boolean K_ItemLitterActive(void) { if (itemlittering) @@ -11407,4 +11418,16 @@ void K_QuiteSaltyHop(player_t *player) } } +boolean K_CheckWaterskipLockout(player_t *player) +{ + if (K_WaterskipBricksActive()) + { + return (player->cmd.buttons & BT_ACCELERATE) == BT_ACCELERATE; + } + else + { + return true; + } +} + //} diff --git a/src/k_kart.h b/src/k_kart.h index bf7e18aa5..00d9f853a 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -359,6 +359,7 @@ boolean K_SlopeBoostActive(void); boolean K_DraftingActive(void); boolean K_AirDropActive(void); boolean K_AirThrustActive(void); +boolean K_WaterskipBricksActive(void); boolean K_ItemLitterActive(void); boolean K_ItemListActive(void); boolean K_ItemPushingActive(void); @@ -383,6 +384,7 @@ typedef enum void K_AwardScaledPlayerRings(player_t *player, SINT8 mode); void K_QuiteSaltyHop(player_t *player); +boolean K_CheckWaterskipLockout(player_t *player); typedef enum { diff --git a/src/p_mobj.c b/src/p_mobj.c index 4b4561354..12abec39b 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -3443,7 +3443,8 @@ void P_MobjCheckWater(mobj_t *mobj) P_SetScale(splish, mobj->scale); // skipping stone! - if (p && p->waterskip < 2 + if (p && K_CheckWaterskipLockout(p) + && p->waterskip < 2 && ((p->speed/3 > abs(mobj->momz)) // Going more forward than horizontal, so you can skip across the water. || (p->speed > K_GetKartSpeed(p,false,true)/3 && p->waterskip)) // Already skipped once, so you can skip once more! && ((!(mobj->eflags & MFE_VERTICALFLIP) && thingtop - mobj->momz > mobj->watertop) diff --git a/src/p_mobj.h b/src/p_mobj.h index 4501df66b..4f828cf25 100644 --- a/src/p_mobj.h +++ b/src/p_mobj.h @@ -619,6 +619,7 @@ extern boolean slopeboostactive; extern boolean draftingactive; extern boolean airdropactive; extern boolean airthrustactive; +extern boolean waterskipbricks; extern boolean itemlittering; extern boolean itempushing; extern UINT8 bumpsparkactive; diff --git a/src/p_setup.c b/src/p_setup.c index 8d1aff65b..ea274f13b 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -162,6 +162,7 @@ boolean slopeboostactive; boolean draftingactive; boolean airdropactive; boolean airthrustactive; +boolean waterskipbricks; boolean itemlittering; boolean itempushing; UINT8 bumpsparkactive; @@ -8177,6 +8178,7 @@ static void P_InitLevelSettings(boolean reloadinggamestate) draftingactive = false; airdropactive = false; airthrustactive = false; + waterskipbricks = false; itemlittering = false; itempushing = false; itemlistactive = false; @@ -8210,6 +8212,9 @@ static void P_InitLevelSettings(boolean reloadinggamestate) if (cv_kartairthrust.value) airthrustactive = true; + if (cv_kartwaterskiplock.value) + waterskipbricks = true; + if (cv_kartitemlitter.value) itemlittering = true;