From 2ff93b78d015c2582bd3ea786acd9b0d758e27f5 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 9 Jun 2021 23:14:50 +0200 Subject: [PATCH] prevent SSinput from constantly reporting null movements (#59558) (#6208) Just prevents SSinput from constantly calling Move() every tick for every user even when no actual movement is requested. Only done rudimentary testing - straightforward and we've been using this for months on CM13 but without diagonal movement. I asked the original SSinput author back then which said that it was likely an oversight. I believe moving the diagonal movement direction buffer reset to keyLoop instead of Move() also makes sense as it is actually relevant to SSinput and not client actions as a whole (eg. if you call built-in movement verbs) Co-authored-by: fira --- code/modules/keybindings/bindings_atom.dm | 5 +++++ code/modules/mob/mob_movement.dm | 3 --- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/code/modules/keybindings/bindings_atom.dm b/code/modules/keybindings/bindings_atom.dm index f9f95ebeca1..8c500730e2e 100644 --- a/code/modules/keybindings/bindings_atom.dm +++ b/code/modules/keybindings/bindings_atom.dm @@ -7,8 +7,13 @@ movement_dir = movement_dir | user.movement_keys[_key] if(user.next_move_dir_add) movement_dir |= user.next_move_dir_add + user.next_move_dir_add = 0 if(user.next_move_dir_sub) movement_dir &= ~user.next_move_dir_sub + user.next_move_dir_sub = 0 + if(!movement_dir) + return + // Sanity checks in case you hold left and right and up to make sure you only go up if((movement_dir & NORTH) && (movement_dir & SOUTH)) movement_dir &= ~(NORTH|SOUTH) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 3a10d5fcae1..44cbb93aed3 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -69,9 +69,6 @@ /client/Move(new_loc, direct) if(world.time < move_delay) //do not move anything ahead of this check please return FALSE - else - next_move_dir_add = 0 - next_move_dir_sub = 0 var/old_move_delay = move_delay move_delay = world.time + world.tick_lag //this is here because Move() can now be called mutiple times per tick if(!mob || !mob.loc)