Nerdy creations with numbers, words, sounds, and pixels

Experimental, Games

ICE 404

ICE 404 - text adventure game by Anton Hoyer

The idea for this simple text adventure game was conceived when I was on a business trip to the Stuttgart fairgrounds, as usual, relying on the services of Deutsche Bahn (DB). Truth be told, there has not been a single trip with DB that I can remember when everything went according to plan. It would almost be comical if it were not so stressful. My colleague joked that DB probably generates their excuses randomly, and I thought, “Wouldn’t that be a fun little game?”

Immediately, I came up with a list of over 90 faults to draw from. Some of these are technical, like switch failures and train repairs, while others are related to human factors, such as a drunk conductor or incompetence, and some even involve natural forces like floods, storms, or wildfires.

Apart from intra-city transport, trains in Germany can be roughly categorized as RB, RE, IRE, IC, EC, ICE, sorted from regional to inter-city express, followed by a number with 1 to 4 digits.

Basic interface of the game ICE 404
Basic interface of the game ICE 404

But what good would trains be if they did not connect fun places to travel to? As I wanted to create something humorous rather than a realistic simulation, I decided to generate my own cities (toponyms). The resulting Python script was the first component I implemented for the game, but eventually became its own program. After my PHP skills (or at least my GPT prompting skills) were advanced enough, I posted the program as the German Toponym Generator, which you can use yourself to generate typically German sounding places.

I struggle with picking favorites when the system theoretically allows for more than 10 billion permutations, but here are 10 representative examples:

  • Hurenschoß
  • Klötenhüttenstadt
  • Duckenburg (Universität)
  • Motzkiez an der Bille
  • Rheinisch-Zickenstein (Theater)
  • St. Wurmzell
  • Alt-Scheidenwehe
  • Haxenford am Saubach
  • Stunkweiler
  • Urte

So, I had trains as well as places. All that was left to do was connect them and gamify the whole thing. I decided to give the player a main goal, for example, visiting the wedding of your sister (or your arch-enemy’s funeral, for that matter, randomly chosen from a long list, dynamically combining a person and occasion). You get a starting distance, starting station, destination, and a time ultimatum.

Now all you need to do is hop on a train and hope that it takes you closer to your destination. Actually, you are luckier than that because you can look up all the stations of every line that stops at your current station. Each station is marked with a green minus, a yellow circle, or a red plus, indicating whether it is closer to, equally close to, or further away from your destination than your current station. In other words, “green” lines are more attractive than “red” lines because they go in the right direction.

Exemplary RB line with stations and connecting trains
Exemplary RB line with stations and connecting trains

We also already know that ICE trains cover more distance between stations than RB trains, making them more attractive. However, they are also harder to board because the number of concurrent lines per station is fixed, and ICEs only stop at large stations. Otherwise, trains come and go. If you miss one and want to catch the next, you can wait for up to two hours.

The train lines and their directions are generated whenever you enter a new station. They run in polar coordinates, marked by a random angle and a random step width, which are then converted to cartesian coordinates X and Y. This fractal train grid would not make sense if plotted on a 2D map, but as there is no backtracking, you are hardly going to notice. I also cheated for the destination: as soon as the first station closer than 10 km to your destination is generated, it is overwritten with the name of your destination (something you are not going to notice, either).

Getting on green trains and off at only the large stations until you arrive would already be a game, but a rather dull one. Thus, I took my list of possible things that could go wrong and implemented it. The rule for things to go wrong is straightforward: at your starting point, there is a 0 % chance of experiencing a fault, and at your destination, it is 100 %, interpolating linearly in between. However, the consequences for each fault are not equally bad (because otherwise you would never arrive), ranging from a mere delay to the cancellation of your train, various detours, all the way to your death. But no worries, each consequence becomes twice as unlikely as the previous, leaving a chance of 1 in 512 to meet an unexpected demise. Much more common and frustrating is waiting for your ideal train only to find out it was canceled.

Example of a train fault: delay caused by soccer hooligans
Example of a train fault: delay caused by soccer hooligans

In our midst, I can also share a gameplay secret: trains with numbers such as 404, 101, 707, etc. always lead towards your destination. And here’s another secret: you will never encounter a fault when traveling to a station with a “Gedenkstein” suffix (memory stone).

To further keep you on edge, I introduced the Outland, or EC and ICE trains crossing the border to neighboring countries. For you, this means instant game over, but Outland stations are hard to miss due to their very different names, composed entirely of short English words (e.g., Noritatapbeakydite, Pedumiciermosurskeingrits, or Duxestenthunpegaxels).

Examples of Outland stations on an ICE line
Examples of Outland stations on an ICE line

Do you still think that German is a difficult language? Because by now you should have noticed that the entire game is in German. While the interface consists of only a few elements, most of which would be easy to translate, I believe it would not do the game justice if the stations were translated as well. Somehow, the German toponyms perfectly capture how bureaucratic, yet endearingly traditional Germany is.

I hope you do not think I am mocking the DB. As a matter of fact, I have nothing but respect for them because operating several thousand trains and stations every day is not an easy job. However, I hope that ICE 404 will one day run as a mobile app and sweeten your travels when your train trip goes off the rails, figuratively speaking. I might need to collaborate with a UI artist for that, but the task seems doable.

⚠️ I am planning to upload the current Python version for Windows on itch.io, eventually. Please be patient.

Ultimately, there is nothing left to say except, “Sank yu for trrravelink wis ICE 404.”

← Return to “Text Aventure”

← Return to “Games”

1 Comment

  1. Max

    Klötenhüttenstadt 😂😂

Leave a Reply