From d46641593d554a3081da7270617c5add3c48ee93 Mon Sep 17 00:00:00 2001 From: Marisa the Magician Date: Thu, 18 Jan 2024 13:17:52 +0100 Subject: [PATCH] Finer handling of slippery floors (reduce steering/speedup based on friction). + Don't play first person footsteps unless there's actual movement input. --- language.version | 4 ++-- zscript/player/swwm_player_move.zsc | 16 +++++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/language.version b/language.version index 0453b18d9..479d79ccb 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1094 \cu(Thu 18 Jan 01:49:44 CET 2024)\c-"; -SWWM_SHORTVER="\cw1.3pre r1094 \cu(2024-01-18 01:49:44)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1095 \cu(Thu 18 Jan 13:17:52 CET 2024)\c-"; +SWWM_SHORTVER="\cw1.3pre r1095 \cu(2024-01-18 13:17:52)\c-"; diff --git a/zscript/player/swwm_player_move.zsc b/zscript/player/swwm_player_move.zsc index 0fd30c09f..8a3c2b98d 100644 --- a/zscript/player/swwm_player_move.zsc +++ b/zscript/player/swwm_player_move.zsc @@ -102,7 +102,8 @@ extend Class Demolitionist if ( player.morphtics ) bob = (0.,0.); else if ( player.bob && !multiplayer && !(player.cheats&CF_CHASECAM) - && player.onground && !bNoGravity && (player.crouchdir != -1) ) + && player.onground && !bNoGravity && (player.crouchdir != -1) + && (player.cmd.forwardmove|player.cmd.sidemove) ) { // bob-based footsteps in first person int m = int(2.*M_PI+oldbobtime); @@ -264,10 +265,10 @@ extend Class Demolitionist } else angle += player.cmd.yaw*(360./65536.); player.onground = (pos.z<=floorz)||bOnMobj||bMBFBouncer||(player.cheats&CF_NOCLIP2); + let [friction, movefactor] = GetFriction(); if ( player.cmd.forwardmove|player.cmd.sidemove ) { double bobfactor; - let [friction, movefactor] = GetFriction(); bobfactor = (friction 1) || (maxspd <= 0.) ) vel.xy += accel; else { + // factors for slippery floors (make steering harder) + double fact1 = SWWMUtility.MapRange(.90625,.97265625,2.,1.,friction); + fact1 = clamp(fact1,1.,2.); + double fact2 = SWWMUtility.MapRange(.90625,.97265625,1.,4.,friction); + fact2 = clamp(fact2,1.,4.); if ( CanCrouch() && (player.crouchfactor != 1) ) maxspd *= player.crouchfactor; double spd = vel.xy.length(); // quicker speedup - spdup = clamp(maxspd/max(.01,spd),1.,2.); + spdup = clamp(maxspd/max(.01,spd),1.,fact1); vel.xy += accel*spdup; // additional steering + quicker slow down spd = vel.xy.length(); if ( spd > maxspd ) spd -= (spd-maxspd)*.1; - vel.xy = (vel.xy+accel).unit()*spd; + vel.xy = (vel.xy*fact2+accel).unit()*spd; } player.vel += RotateVector(nmove,angle)*bobfactor*16.*spdup; } @@ -359,7 +365,7 @@ extend Class Demolitionist // quickly decelerate if we're not holding movement keys // the default friction is mapped to a 70% reduction, // while slippery floors (above 95%) will have no reduction at all - double fact = SWWMUtility.MapRange(.90625,.97265625,.7,1.,floorsector.GetFriction(0)); + double fact = SWWMUtility.MapRange(.90625,.97265625,.7,1.,friction); fact = clamp(fact,.6,1.); // ensure this doesn't go too far out of range (especially, prevent endless acceleration) vel *= fact; player.vel *= fact;