From 8d1886ad153fe976ede94ddda1764cfd23de8e58 Mon Sep 17 00:00:00 2001 From: Marisa the Magician Date: Fri, 10 Mar 2023 00:20:09 +0100 Subject: [PATCH] Fix warp to NaN when crouching with Silver Bullet. --- language.version | 4 ++-- zscript/player/swwm_player_move.zsc | 27 +++++++++++++++++---------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/language.version b/language.version index 2140d5535..575dfb42f 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r779 \cu(Fri 10 Mar 00:00:24 CET 2023)\c-"; -SWWM_SHORTVER="\cw1.3pre r779 \cu(2023-03-10 00:00:24)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r780 \cu(Fri 10 Mar 00:20:09 CET 2023)\c-"; +SWWM_SHORTVER="\cw1.3pre r780 \cu(2023-03-10 00:20:09)\c-"; diff --git a/zscript/player/swwm_player_move.zsc b/zscript/player/swwm_player_move.zsc index 8a7c012bd..2aec66819 100644 --- a/zscript/player/swwm_player_move.zsc +++ b/zscript/player/swwm_player_move.zsc @@ -274,23 +274,30 @@ extend Class Demolitionist accel.xy = RotateVector(nmove,angle)*cos(pitch); accel.z += nmove.x*sin(-pitch); double maxspd = 16.*TweakSpeed(); - if ( CanCrouch() && (player.crouchfactor != 1) ) maxspd *= player.crouchfactor; - double spd = vel.length(); - // quicker speedup - vel += accel*clamp(maxspd/max(.01,spd),1.,2.); - // additional steering + quicker slow down - spd = vel.length(); - if ( spd > maxspd ) spd -= (spd-maxspd)*.1; - vel = (vel+accel).unit()*spd; + // account for special cases where max speed is zero + if ( maxspd <= 0. ) vel += accel; + else + { + if ( CanCrouch() && (player.crouchfactor != 1) ) maxspd *= player.crouchfactor; + double spd = vel.length(); + // quicker speedup + vel += accel*clamp(maxspd/max(.01,spd),1.,2.); + // additional steering + quicker slow down + spd = vel.length(); + if ( spd > maxspd ) spd -= (spd-maxspd)*.1; + vel = (vel+accel).unit()*spd; + } player.vel += RotateVector(nmove,angle)*bobfactor*cos(pitch)*16.; } else if ( player.onground ) { Vector2 accel = RotateVector(nmove,angle); - if ( waterlevel > 1 ) vel.xy += accel; // slippery if waist-high or deeper + double maxspd = 16.*TweakSpeed(); + // account for special cases where max speed is zero + // also, slippery if waist-high or deeper + if ( (waterlevel > 1) || (maxspd <= 0.) ) vel.xy += accel; else { - double maxspd = 16.*TweakSpeed(); if ( CanCrouch() && (player.crouchfactor != 1) ) maxspd *= player.crouchfactor; double spd = vel.xy.length(); // quicker speedup