Movement
English • Español • Português (Brasil) • Українська • Русский • 简体中文 • Deutsch • Italiano • Français • Català • Türkçe • 한국어 |
Movement is one of the core aspects of Teeworlds and DDrace.
Basics
Gravity
Every tick the acceleration of 0.5 is added to the y velocity (downwards) due to gravity.
Jumping
Ground jumping sets a tee's y velocity to -13.2, scaled by a value.
Air jumping (double-jump) sets a tee's y velocity to -12.0, scaled by a value.
Jumping will set the y velocity, cancelling out any previous upwards or downwards velocity. This is very useful in scenarios where you need to halt large vertical impulses.
Horizontal Movement:
- Pressing nothing:
- Ground: Every tick
velocity.x = velocity.x * 0.5
- Air: Every tick
velocity.x = velocity.x * 0.95
- Ground: Every tick
- Pressing key in opposite direction:
- Ground: Every tick the horizontal velocity decreases by 2 until 10 in the opposite direction is reached
- Air: Every tick the horizontal velocity decreases by 1.5 until 5 in the opposite direction is reached
- Horizontal speed up by pressing a or d:
- Ground: Every tick the horizontal velocity increases by 2 until 10 is reached
- Air: Every tick the horizontal velocity increases by 1.5 until 5 is reached\
Friction is ignored when holding down a key. So, at high velocities, pressing nothing will slow a tee down faster than moving in the opposite direction, as the friction will have an exponential slowdown compared to the a/d
linear slowdown.
Max Speed
Max speed: 6000 Sub-tiles/Tick (+speedup in one tick, e.g. gravity, jetpack, explosion).
src/game/gamecore.cpp
(before calculating new position from velocity):
if(length(m_Vel) > 6000)
m_Vel = normalize(m_Vel) * 6000;
This is the bottleneck in vertical movement. In horizontal movement a “ramp”-Value is multiplied to the horizontal speed. Causing the tee to slow down and stop when getting too fast. This is most commonly observed in speed ups.
The speed is rounded down to a precision of 1/256 every tick. This is causing the tee to stop moving horizontal when having too much speed.
Todo: * convert sub-tiles/tick into tiles/sec * find max vel und real max vel (from where would a constant function fit) * find speed, where the tee stops moving * write about ramp speed, and add diagram