diff --git a/language.version b/language.version index 48ce001f9..8fe1e5e92 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r763 \cu(Thu 9 Mar 20:43:10 CET 2023)\c-"; -SWWM_SHORTVER="\cw1.3pre r763 \cu(2023-03-09 20:43:10)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r764 \cu(Fri 10 Mar 19:40:43 CET 2023)\c-"; +SWWM_SHORTVER="\cw1.3pre r764 \cu(2023-03-10 19:40:43)\c-"; diff --git a/zscript/player/swwm_player_move.zsc b/zscript/player/swwm_player_move.zsc index 2bd3e9b0c..3f4b9f071 100644 --- a/zscript/player/swwm_player_move.zsc +++ b/zscript/player/swwm_player_move.zsc @@ -273,17 +273,39 @@ extend Class Demolitionist nmove *= movefactor; if ( bNOGRAVITY && !player.GetClassicFlight() ) { - double zpush = nmove.x*sin(pitch); - vel.z -= zpush; - vel.xy += RotateVector(nmove,angle)*cos(pitch); + Vector3 accel; + 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; player.vel += RotateVector(nmove,angle)*bobfactor*cos(pitch)*16.; } - else + else if ( player.onground ) { - vel.xy += RotateVector(nmove,angle); - if ( player.onground ) player.vel += RotateVector(nmove,angle)*bobfactor*16.; - else player.vel *= .75; + Vector2 accel = RotateVector(nmove,angle); + if ( waterlevel > 1 ) vel.xy += accel; // slippery if waist-high or deeper + else + { + double maxspd = 16.*TweakSpeed(); + if ( CanCrouch() && (player.crouchfactor != 1) ) maxspd *= player.crouchfactor; + double spd = vel.xy.length(); + // quicker speedup + vel.xy += accel*clamp(maxspd/max(.01,spd),1.,2.); + // additional steering + quicker slow down + spd = vel.xy.length(); + if ( spd > maxspd ) spd -= (spd-maxspd)*.1; + vel.xy = (vel.xy+accel).unit()*spd; + player.vel += RotateVector(nmove,angle)*bobfactor*16.; + } } + else player.vel *= .75; // override air control because we REALLY need the extra mobility if ( !player.onground && !bNOGRAVITY ) { diff --git a/zscript/player/swwm_player_tick.zsc b/zscript/player/swwm_player_tick.zsc index d15deb8bf..3069ab0ad 100644 --- a/zscript/player/swwm_player_tick.zsc +++ b/zscript/player/swwm_player_tick.zsc @@ -305,9 +305,10 @@ extend Class Demolitionist CheckUnderwaterAmb(); SenseItems(); CheckItemMagnet(); - if ( vel.length() > mystats.topspeed ) mystats.topspeed = vel.length(); - if ( vel.length() > ((3600*GameTicRate)/32000.) ) - SWWMUtility.AchievementProgress("sanic",int((vel.length()*3600*GameTicRate)/32000.),player); + double spd = vel.length(); + if ( spd > mystats.topspeed ) mystats.topspeed = spd; + if ( spd > ((3600*GameTicRate)/32000.) ) + SWWMUtility.AchievementProgress("sanic",int((spd*3600*GameTicRate)/32000.),player); if ( player.onground && !bNoGravity && !lastground ) { // bump down weapon