I’m betting your movement code looks something like this? From the 2D platformer template script:
if direction:
velocity.x = direction * SPEED
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
This template has a few weird features to it.
when stopping it frame-dependantly slows to a zero speed, this should be DECELERATION * delta where DECELERATION is about four to eight times SPEED.
when moving it sets the velocity.x to a certain value, rather than accelerating to the desired speed. Any attempt at inserting knockback, dashes, or any horizontal speed impulse requires changing this line to take acceleration. Which behaves similarly to DECELERATION.