Physics in SuperTuxKart are a careful mix between realistic elements and gameplay elements to smooth the experience and avoid many of the ways the kart could get completely out of control. Kart racers are all about doing crazy jumps and flying around corners without having to worry if the vehicle will suddenly flip and tumble.
I began contributing to the game during 1.0’s development and I remember well the work to fix a physics issue present in 0.9.3 that sometimes led to uncontrollable karts floating on downward slopes.
When STK 1.0 came out, it already had many years of fine-tuning behind it, delivering a satisfying experience in most situations.
In this blog post, I’m going to present many changes that have been done for SuperTuxKart Evolution to further enhance how the kart behaves: a major redesign of collisions between karts, aligning the obtention of collectibles with visible contact, changes to jumps, as well as subtler improvements.
SuperTuxKart Evolution devlog: Bumps and Jumps
Kart-on-kart collisions
Collisions between karts are perhaps one of the gameplay’s least satisfying elements in SuperTuxKart 1.5. It happens more by accident than deliberately, because the player initiating the collision will very often lose a lot of speed. Realistic, but not very fun.
In 1.5, collisions are only sought to pass off a bomb.
The philosophy behind the improvements brought by STK Evolution has been to make accidental collisions less disruptive while also creating more opportunities for deliberate collisions: pushing a rival off the track or into a road hazard is now a legitimate tactic.
To achieve this, we use several tricks:
- An impulse pushing both karts away from each other is generated whenever a kart collides with the side of another kart. It is not instantaneous, rather it applies a pushing force for a short period of time, with a fade-in and a fade-out period.
- We look at several factors to determine the strength of the impulse for each kart: relative speed, relative weight, which kart is pushing the other, and at what angle.
- We prevent the kart from being rotated by the collision or the impulse: collisions cause lateral motion, not imprevisible changes of direction. Steering continues working normally while the impulse is applied.
As a result of all these changes and a lot of careful tuning, the effect of collisions is more predictable and manageable for players.
Accidental collisions are usually harmless, there is more incentive to deliberately try to push a rival off the track, and factors such as kart weight, collision angle and relative speed matter much more than they used to.
All this together transform collisions from an annoyance into a fun part of the game.
Note that all the changes discussed above apply to collisions where the side of a kart is touched. This includes some collisions that may look at first glance to be more from the back, because the kart hitting from behind is substantially on the left or the right.
Collisions with the front of a kart touching the back of another, which are only a small portion of all collisions, are deliberately left unchanged, with the kart behind transferring speed to the kart in front.
To match the gameplay improvements with some eye-candy, we also plan on adding new kart animations that would be triggered when karts hit an obstacle or each other.
These changes also fix an issue present in SuperTuxKart 1.5 and earlier versions that frequent participants of online multiplayer encounter sooner or later : the collision deadlock.
When the kart in front got pushed from the side in the back, it would create a rotational force: the back of the kart would move away from the pushing kart, while the front would move towards it.
![]() |
| The arrows show the rotational forces the pushed kart is subject to without the impulse separating the karts. |
To try to keep going in its intended direction, the kart being pushed would start turning in the opposite direction. It prevents veering off-track, but it means that now both karts are pushing against each other.
At this stage, neither kart is able to steer freely, nor to disengage safely : both karts locked together would usually soon crash. This situation can never arise in SuperTuxKart Evolution.
Touching items on the track
In SuperTuxKart 1.5, hitboxes are used for collisions with karts, walls and other physical objects, but they don’t matter when it comes to collecting nitro bottles, bananas, gums laying on the ground, etc.
![]() |
| In 1.5, the gum is not triggered despite clear contact with the kart. |
![]() |
| In 1.5, if this kart gets any closer to the nitro can, it will collect it, despite a clear gap between the kart and the nitro. |
With SuperTuxKart Evolution, this changes. Whereas the only thing that counted previously was the distance between the kart’s center and the item’s center, kart and item size are made relevant again.
As a consequence:
- There is close alignement between visual touch and item collection. There is no need to internalize the collection distance to pick optimal trajectories.
- A kart having a smaller hitbox is not always an advantage. It helps to avoid dangerous items and for cornering, but more precision and focus is required to pick up beneficial items.
- It offers another way to differentiate between item types. Small nitro bottle are harder to catch than big nitro cans, STK Evolution introduces small gums that are easier to avoid than regular gums, and more possibilities are open.
STK Evolution also fixes a related issue, curious yet frustrating: karts flying slightly above a gum laying on the ground would trigger it and slow down drastically. Now, at least one wheel needs to be touching the ground for the kart to stick to the gum.
![]() |
| In STK 1.5, this kart would have triggered the gum it is jumping above. |
Everyone jumps!
Another improvement made with STK Evolution comes to how easily various karts take off when the road’s slope quickly changes.
In STK 1.5, the lighter the kart, the more difficulty it has to jump. Yes, you read that right, in 1.5 heavy karts jump more easily than light karts.
This counter-intuitive behavior comes from a stabilizing force that’s applied to karts when all their wheels are touching the ground, preventing karts from taking off in unintended places. The first version of that code was created during the STK 0.8 development cycle, and it was enabled starting with STK 0.9.
Because the force applied was the same for all karts, it had a smaller effect on heavier karts.
![]() |
| An infamous spot in Cornfield Crossing where only heavy karts would fly off. |
For SuperTuxKart Evolution, this force now depends on kart weight: the take-off speed is now the same accross all kart classes, with values tuned to make jumps slightly easier than they used to be for medium karts.
This change makes the game behavior more intuitive for players and helps track creators to create and calibrate spots with optional jumps that only happen at high speeds.
Jumps are a track-design element that we want to make more common in STK Evolution!
Driving on the side
A kart balanced on two wheels, at the edge of equilibrium: a rare occurrence, but sometimes seen in some tracks: a road border going up while the road goes down, wheels straddling across the divide, some momentum, and voilĂ .
![]() |
| A kart tilted on its side with only two wheels making contact with the ground. |
Steering and acceleration are applied through the wheels: with some wheels off the ground, they are extremely unresponsive, and the kart is likely to crash before it can recover.
When karts are flying through the air in SuperTuxKart, they are subject to an automatical balancing force that pushes them upright. It has no basis in the real-world, but it means karts can happily do crazy jumps without the player having to fear a rollover.
In SuperTuxKart 1.5, if at least a wheel is touching the ground, this correction is not applied. If it was indiscriminately applied to cases with only one or two wheels touching, it would create new glitches of its own, with wheels floating away from the ground on slopes.
![]() |
| A naive approach to keep the kart upright would produce this result: wheels that are artificially kept levitating on slopes. |
For SuperTuxKart Evolution, elaborate logic detects if the balancing force would help bring the wheels back to the ground or not. As a result, the duration spent on two wheels is reduced by over 70 % and the player has time to take back control before the next curve.
Collision curves
Restitution curves are another area of physics that has seen change for STK Evolution. It’s not something easily noticed when not looking for it, but if you are still reading this far, you probably care about the technical details.
Essentially, when a kart collides with a track element, its speed is used to determine how strong the bounceback force is. It feels nice to have some bounce back, but too much of it can quickly create issues with collisions sending the kart flying far away.
In STK 1.5, the parameters used to avoid huge bounces result in a very curious behavior where the bounce strength peaks around a kart speed of 12 (about half of SuperTux’s max speed without boost) and sharply declines until a speed of 20.
STK Evolution does away with this paradoxical behavior. It also reduces bounce strength at very high speeds.
Falling (almost) like a feather
SuperTuxKart Evolution also brings changes to the behavior of karts flying after a jump.
In STK 1.5, karts would continuously accelerate following the pull of gravity (tracks can mark textures as having gravity, allowing for tracks to have upside down sections). With jumps rarely lasting more than one second, it rarely mattered, but some addon tracks with huge jumps had karts falling so fast that they’d sometimes go through the ground instead of colliding with it.
For STK Evolution, pseudo-friction dependent on vertical speed slows down the rise and fall of jumping karts. Forward movement is unaffected: where would the fun be in jumps that lose you speed?
As a result, karts have a reasonable maximum falling speed and track creators can design crazy jumps without having to worry about physics issues.
![]() |
| This data was recorded in the last jump of Cocoa Temple with a medium kart. |
![]() |
Conclusion
Block by block, these changes are building STK Evolution, making it different and better than the versions that came before. Improvement in gameplay are more often felt than consciously perceived, but they play a key part in making the game the best we can.
If you’d like to support our work, there are many ways to contribute; either directly by improving the code, contributing art, working on the game’s translations ; or by donating to the project to allow us to spend more time working on the game.
We also welcome your thoughts on this blog post in the comments!










My previous blog post hinted at this one for last week... The blog post was ready but the video took more work than expected and we wanted to publish both together.
ReplyDeleteI think the result is worth the small delay. :)