May 16, 2019

My Departure from SuperTuxKart

The original TuxKart
After 13 years of working on SuperTuxKart I have decided to step away from the project, and make space for a new team of leaders. As this is my last post, and I assume that we have many new readers who might not be aware of the history of SuperTuxKart, I'll use this opportunity to give a brief summary of what happened to SuperTuxKart in these 13 years, that resulted in the 1.0 version that you are playing now.
I discovered TuxKart in 2006 after installing the latest SUSE distribution. Never having played Mario Kart, I was quite fascinated by the game. By sheer coincidence I then heard of SuperTuxKart, a project trying to improve TuxKart.

An early SuperTuxKart screenshot
Being intrigued by the promised improvement in graphics, I tried to look for the community developing SuperTuxKart, only to learn that the project had been basically dead and the game in an unplayable state for over one year. I decided to see if I could fix this. Soon some other contributors joined and a 0.2 version was released in September 2006, making the graphical improvements of SuperTuxKart available in a playable form for the first time.

SuperTuxKart 0.4
With the 0.4 release in 2008 the physics were newly implemented: the open source physics engine bullet was integrated, and the physics were tweaked to give it a fun-racer feeling. Did you know that previously a kart would just stop if it hit any other kart? The initial port took around 9 months, though of course other work was done for the 0.4 release as well during that time. But tweaking the physics was a long ongoing process, in between we suffered from karts sometimes hovering, sticking to a wall, or being shot rocket-like into the air. Anyone thinking of 'just using a physics engine' - do not underestimate the tweaking effort necessary to make a game behave the way you want it to behave :)

SuperTuxKart 0.7
The 0.6 release in 2009 saw the introduction of OpenAL, allowing for positional audio effects, and the introduction of the skidding and nitro speed boosts. It also included the 3-strike battle mode. In 2010 SuperTuxKart 0.7 was released: we finished the migration of the rendering from PLIB to irrlicht. This allowed us to animate karts, and started a series of graphical improvements that is still ongoing. We also implemented a new GUI engine, and allowed short-cuts in tracks.

Beginning of 2013 we were in the race to become the Sourceforge Project of the month, and we unleashed the ultimate weapon: cuteness showing off our new wiimote support:

In 2013 and 2014 SuperTuxKart participated in the Google Summer of Code, a program where Google pays students to work full time on open source projects for three months. Of course we had very many students interested (each year we got over 70 applications, which made it very difficult to select a small number of students that we could accept) - how cool it is to work implementing a game and getting paid for it :) The SuperTuxKart team mentored all in all 8 students during that time, who contributed important code to improve the graphics, game play, and to add online features. We somewhat underestimated the effort it would take to merge the code developed by students back into our main trunk, in some cases it took over one year before the code was finally merged into our development trunk. While this was a somewhat stressful period, it was also extremely rewarding – not only in terms of new benefits for SuperTuxKart, but also seeing the development of the students: In at least one case that I know of a student got a job in the gaming industry because of his work with SuperTuxKart, and only recently I received an email from a previous contributor stating: "I basically owe my career to SuperTuxKart".

SuperTuxKart 0.9
2015 saw the 0.9 release, in which a completely new, shader-based renderer was introduced. It also opened the door for many many woes with graphic driver bugs. We actually had to add a configuration file that would activate features depending on graphics hardware and driver version used.

End of 2017 I started to implement the networking mode. If anyone is interested in details, I would strongly recommend Glenn Fiedler's excellent article collection. This is probably some of the most complex code I have added to SuperTuxKart, since we are not just sending the input from clients to the server, which would lead to a lagging and unplayable experience. Read Glen's article about networked physics and look for client-side prediction if you want to learn why SuperTuxKart plays rather smooth even with a ping over 100ms. And you will also appreciate why your computer has to work much harder in a networked game. It was an extremely frustrating time - often what would work just fine in my local environment, would fail horrendously when trying it in a wide-area network. The first big milestone was reached around March 2018 when we were able to play a first race reasonably well without too much shaking and teleporting of karts. It still took a long time to iron out all the bugs, and make the whole experience smoother. On the 20th of April 2019 we finally released version 1.0, the first release of SuperTuxKart that allows online races.

Another highlight of the history of SuperTuxKart was seeing the code being used in other projects: Microsoft used it to develop and showcase their 'Future of the Living Room' concept IllumiRoom, and Daimler used it as a demo of an entertainment unit in one of their cars. Research was also done with SuperTuxKart ("Comparison of Supervised Learning and SMILe for Imitation Learning in SuperTuxKart", "Real Time Drunkenness Analysis Through Games Using Artificial Neural Networks"), and it was used by schools and Universities to teach programming, internationalisation and other subjects. Various special versions for people with certain impairments were created, e.g.: Gaze and accessibility in gaming. I consider those outcomes a shining example of the benefits of open source code development.

To the supporters of SuperTuxKart throughout the years: I feel I owe you a big “Thank You”, and an explanation of my exit. To be completely honest, the main reason for my departure was not that my goal of online races was reached. It is a matter or principle and professionalism. From my point of view a big change has gone through the development team, when new members were added and older members left. Let’s just say that the newer team members preferred to pursue a faster-paced development style with fewer reviews, less documentation, less oversight and a reduced need for consensus, and that our differences in approach could not be reconciled.

We would also like to announce that Auria, who has been the co-project leader for around 10 years, has decided to step down from a management position in STK, but she will stay around and help out where required. Arthur, our pun master and social media manager, has also decided to quit the project. The team (excluding Auria and myself) has decided with 3 to 2 votes (and one abstention) that Benau and Alayan will be the new leaders of SuperTuxKart.

My profound gratitude to all the SuperTuxKart supporters who have witnessed and supported the game in the last 13 years! Let’s welcome the new age of SuperTuxKart and look forward to it achieving even greater goals.

 Hiker, out

April 20, 2019

SuperTuxKart 1.0 Release

Yes, if you have followed our development a bit, that might be a bit of a surprise. But we have been asked why we don't call this release 1.0, and the majority of us developers discussed this and decided that indeed this release is a major milestone that deserves the big 1.0 number.

SuperTuxKart 1.0 official trailer

Should you not have followed our development: this 1.0 release adds support for networking races to SuperTuxKart. You can play with your friends online, and it doesn't have to be split screen anymore - your gaming partners can be in a different city, country, or even continent - you can still meet for a race or two. Cross-continent may not work the best; you should try to have a reasonable ping - 100ms works fine, and we had some races with 300ms ping, though unavoidable sudden stuttering and karts jumping around is more frequent at higher latencies. Even more important than the ping (unless it's abnormally high) is that there isn't packet loss or packet slowdowns (jitter), so a stable connection is required, especially for the server hosts. The bandwidth use is minimal even for hosting 10 players, so as long as you don't use a metered connection it should be fine for anyone with 150 kilobytes (~1.2 megabit) per second upload speed to spare. If that's still too much, less bandwidth is used with fewer players.

With the new version you can play various game modes online: normal race, time trial, soccer mode, battle mode and the new Capture-The-Flag mode. While you can easily start your own server (just select 'create server' in the GUI), the community also provides a set of servers to be used by everyone. Certain servers provide online ranking (since we have to make sure that the servers are not modified to favor certain players), and you can find the current rankings here. You can use one of the servers provided by the community. We would request that you do not abuse the servers provided by the community - they are meant to be used by everyone. If you want to play only with a certain set of friends, let SuperTuxKart create a server for you, and do not grab a public server and kick everyone else who wants to join.

Ravenbridge Mansion

The networking implementation has been a very big and ambitious task, which took even longer than the port from PLIB (anyone remember that?) to Irrlicht in 2010, which took around 14 months. But it is done: more than 20,000 lines of network related code and 18 months later, we have reached our goal, and online play is a reality. Across the whole game, more than 2500 commits and 300 resolved issues separate the 1.0 release from 0.9.3. And it was a very concerted effort, so a big thanks to all contributors involved, For the people who don't know the team, here a short introduction:

First and foremost Benau, who originally told me he would only like to work on some of the GUI aspects of networking, but who then grew to meet the challenges the network implementation threw at us. Without his work networking support would nowhere close to being ready or as complete as it is.

Alayan, a relatively new main contributor started several months ago, with a keen interest in balancing game play. He is an experienced speed runner for SuperTuxKart, and one of the best players in our online ranking system. While he was also essential in testing online racing, he made significant contributions to balancing SuperTuxKart and overall improving the playing experience.

We are still reaping the benefits from Google's Summer of Code program: leyyin is still with us, and he is helping us with the server side implementation. E.g. anytime you are looking for servers, his code will be involved. Then let's not forget Hilnius, who back in 2013 started to design the protocol implementation on which our networking code is still based. A very successful result for our participation in the GSoC.

Then the older core team, and I'll be a bit briefer here: Deve as always makes sure that all is fine on the Linux front, do many bugfixes and small enhancements, and maintains and improves our Android port. Auria keeps everything else running - pull requests, bug reports, forum posts, ...  Samuncle, though busy with his private life, came through with the wonderful new "Ravenbridge Mansion" track. And Arthur keeping our social media feeds updated. Oh yes, there is also me (hiker) :)

For the record: is the 1.0 release 'perfect'? No, it is not. There are improvements to be done, features to be added, and gameplay to be improved. Still, it is probably the most significant step forward in SuperTuxKart's more than 12 years of history. We would like to invite all of you to join some online games by fetching the new 1.0 release from our Download page.

On behalf of the SuperTuxKart team: thank you for your continued support through the years, and enjoy the big 1.0!

April 5, 2019

SuperTuxKart 0.10 Release Candidate 1 released

The next release of SuperTuxKart is almost ready! The first release candidate is now available for testing. Now is the time to help us test the game to find any last-minutes bugs to fix.

Since the beta-1 release, numerous bugs have been fixed. Obviously, as previously, the biggest feature is that networked multiplayer is now ready for general use, so enjoy multiplayer games over LAN or over the net!

A few tracks have also been added or upgraded. The old mansion track has been replaced with the new upgraded Ravenbridge Mansion track.

The Black forest add-on is now also part of the official STK track set! Thanks to Sven Andreas Belting for this great addition.

You can watch a video here :

Download the game here :

March 2, 2019

Bringing balance to the karts

The upcoming release of the next SuperTuxKart version is getting very close!

Several hundred players tested online networking with thousands and thousands of races. While it was already very playable, the beta helped to catch a few nasty bugs which are now fixed for the release, and to get gameplay feedback, as online races have a different balance compared to races with AIs.

But in this blog post, our main focus will be gameplay, with all the changes applying to both single player and multiplayer compared to 0.9.3. The basis of STK's gameplay remains unchanged: drive along the tracks while trying to drift and collect nitro, using items to boost yourself or attack other karts, but the next version includes many evolutionary improvements to enhance fun and balance.

First of the main changes: the kart classes have been rebalanced. People familiar with the previous versions may have noticed that heavyweight karts were useless, as they were equal or inferior to medium karts in everything. Lightweights were superior for abusing unintended shortcuts but otherwise worse.

Now, each kart class has different acceleration, top speed, nitro consumption, maneuverability... values which have been carefully tuned so that each kart class is best in some tracks and race conditions.

For example, the higher top speed of heavy karts is valuable in tracks with gentle curves and in time-trials, while lightweights fare better when maneuverability and acceleration after crashes matter. We have also improved turn radius, making sure all karts within a class behave the same and none is harder to drive.

The second main change has been improvements and fixes to track themselves. A huge amount of unwanted shortcuts and skips (some of them exploiting rescue) has been patched. This ensures that online races won't see players abusing such issues to beat others driving along the intended path, except one which has been left for adventurous players to discover.

Next, the locations of item boxes, nitro cans and bananas on many tracks have been reworked to enhance balance and fun. Too easy to catch big nitro cans (giving a big advantage to the player taking them first) have been moved or changed to small cans, and item boxes too close to the start line or to other item boxes have been moved or removed. On Volcano Island a few bananas have been added to enhance the challenge.

The third main change is a rework of slipstreaming. Slipstreaming is the speed bonus you get from being close behind another kart. In real life, the speed boost from being shielded from wind by another vehicle is small but continuous. In STK, it is cartoony : you are made aware of being in the boost zone by an animated air movement, and only activate the speed boost when you stop following the other kart after having been in the boost zone long enough.

In the upcoming release the air movement gets faster and its colour changes from white to yellow to make it easier to see when a boost has been charged. The slipstream boost has also been improved to provide a healthy max speed and acceleration boost, but more progressively and much less likely to cause the player to crash. The slipstream area where the boost can be collected is wider and longer. It is divided in an inner area and an outer area, if closer to the followed kart, less time is needed to accumulate the bonus. It is also much easier to collect boost in curves, so you can get the boost there too!

Finally, a deep rework of powerup probabilities has been done. While the set of available powerups is the same as 0.9.3, their distribution has been greatly improved in several regards.

Previously :
  • Karts were put in a group depending on their position, and each position in the group yielded the same item probabilities. For example, in a 12 karts races, 2nd and 4th had the same item probabilities.
  • The same set of weights was used from 1 to 20 karts.
  • Follow the Leader mode used the same weights as normal races.
  • Karts behind had a strong tendency of destroying each other with explosive cakes and other attacking powerups.

Now :
  • Each position get unique weights, by averaging weights between reference values. The item probabilities evolve progressively with the position instead of suddenly.
  • Several set of weights are used to account for the different dynamics depending on kart number. For example, the last kart in a 20 kart races is much more likely to get a triple zipper than the last kart in a 5 kart races. Values for number of karts between the reference points are interpolated. This is also used to better control the amount of global items (like parachutes or the swapper).
  • Follow the Leader mode gets customized weights.
  • While karts in the middle still attack each other more than they can attack the first kart, this is less damaging and bubble shields are available.

Cakes and basketballs are now unavailable during the 15 first seconds of a race. Explosion duration, whether from weapons, bombs or track hazards, have also been shortened, in order to make them less punitive.

In the long term, we plan to introduce new powerups in STK to make gameplay more varied and to overcome some shortcomings of the current set, but these changes shipping in the next release are a huge step forward.

To close up this blog post, let's mention several smaller changes, mostly quality-of-life enhancements, some of them already mentioned in earlier blog posts :
  • When doing a quick (yellow) drift after a long (red) drift, the stronger bonus of the red drift is no longer removed. Instead, it last until its normal end, and if the quick drift should end later, it will then take effect.
  • The startup boost requires to press the acceleration button quickly after "set" instead of "go". This change has mostly been done for online multiplayer as it allows the clients to better predict how other karts start.
  • Physics have been improved: karts are much less likely to be catapulted flying across the track after a strong collision against a wall or some other obstacle, and always remain controllable in downward slopes.
  • When nitro is consumed during the minimum nitro consumption time, the kart will always get the boost whether or not the player keeps pressing the nitro key.
  • Burning a tiny amount of remaining nitro (less than the normal minimum use) provides a shorter boost.
  • The AI is being smarter about how it uses nitro and items (which is more of an AI enhancement than a direct gameplay enhancement), and the way the AIs slow down in easier difficulties has been changed to be more forgiving towards players and to avoid all AI karts being very close to each other.

We hope you will enjoy these changes!

January 11, 2019

SuperTuxKart networking - 0.10-beta release

It has been around 2 months since we did our alpha release of the online racing implementation in SuperTuxKart. First of all a big "Thank You" to all the people who went through the effort of downloading and compiling SuperTuxKart themselves. They have provided very valuable testing and feedback for us, and as a result we have reworked some of the code to make it more user-friendly, and removed some bugs. I am also quite proud of our testing team: essentially no significant bugs in the actual online racing was found during the alpha - so a great job by all of our testers and coders! There was a tireless effort especially by Benau, Deve, and Alayan to constantly improve our code!

Also a big thanks to players who have volunteered their hardware to provide more servers for us. Even during the alpha we had typically more servers than actual players. Hopefully this beta release will allow more people to participate in online races.

We are now confident that our code is stable enough for a beta release: 0.10-beta1. This means that we will provide our usual set of binaries and installers for all supported platforms. And hopefully that means that many more people will be able to test this current version. Note that we consider this beta very stable, de-facto very close to a release candidate. But we are waiting for another track to be ready to be included, so we are using this time to give more players the opportunity to test (or re-test) our online racing implementation.

If you haven't read the previous alpha announcement, here a short summary of the new features in SuperTuxKart compared with the latest stable release 0.9.3:
  • You can now race against your friends or people world-wide in online races, either in LAN or WAN games.
  • You can either run a server on your own computer, all handled by SuperTuxKart, fire up a stand-alone server, or connect to servers already running.
  • A Raspberry Pi 3 is powerful enough to act as a game server (though you need a server-only binary). We provide several game servers on VPS and Pis that are constantly up.
  • On special so-called 'ranked servers' a global ranking of online players is maintained. You can see the current ranking here.

One important caveat: the network implementation is actually quite sophisticated (I might do a separate blog post about its implementation), but there are still limits in what we can do about the latency (or ping) between clients and servers. We strongly recommend to find a server with a ping of under 150ms for a smooth playing experience. The ping to the server will be shown when you connect to it. You can of course try servers with higher latency - while it should still work, you might notice more often that karts stutter, drive like drunk (though that might of course also be the skill of the other players) or are 'teleported' around. In addition you need a stable connection, so if you experience significant packet loss or jitter you will see the same strange behavior.

And new in this beta compared with our alpha (besides bug fixes and GUI improvements) is the possibility to now join a server while a race is in progress: you will become a spectator and can follow the race-in-progress. You will be joining the actual racing fun when the next race starts.

We have now pretty much declared a feature freeze to prepare for our release candidate, once we get the new track added. One noticeable difference to one of our release candidates is that we did not update all translations: this usually delays a release by two weeks, and we would like more testing to be done earlier. On the other hand, we hope that there won't be too many changes between the beta and the release candidate, and that we will soon be able to get onto the official release of online SuperTuxKart.

You can download the beta from SourceForge. Feedback as always is welcome, ideally on our forum, which is also the best location for support requests. Bug reports can be submitted to our tracker on Github. Note that bug reports and support requests here as a comment are not ideal, and might easily get missed, so please use the appropriate URL above.

We hope you are all going to enjoy SuperTuxKart with online races!