Published4 min read

Trains, Signals, and Self-Inflicted Pain: Building Conway’s Game of Life in OpenTTD

From childhood hours on Transport Tycoon Deluxe to watching ChuggersLR wire up 4,000 trains and half a million pieces of track into a working computer—why OpenTTD remains the ultimate visual sandbox for fundamental compute concepts.

I grew up playing Chris Sawyer’s Transport Tycoon Deluxe as a kid, and—like a lot of people who eventually ended up working in systems and infrastructure—I never really stopped playing its open-source successor, OpenTTD, as an adult.

Looking back, TTD was probably my first real introduction to systems engineering before I even knew what the term meant. As a kid, you think you are just playing with trains, coal mines, and steel mills. By the time you are an adult trying to optimize a four-lane mainline in OpenTTD, you realize you are actually doing packet switching, throughput management, queuing theory, and deadlock prevention—except your packets are 12-tile-long freight trains and a bad routing decision leaves fifty locomotives gridlocked around a single junction.

Most of us are happy when our Cloverleaf junction doesn’t jam up under load. And then there are people like ChuggersLR, who look at a 1990s transport simulation game and decide to build a working computer inside it.

Building Conway's Game of Life in OpenTTD — ChuggersLR

Explaining Fundamental Compute Visually

What makes this video so good isn’t just the absurdity of the premise—it is how clearly and visually it breaks down fundamental computer architecture.

When you learn digital logic in a classroom or a textbook, binary states, logic gates, clock cycles, and memory latches are abstract symbols on a page. In OpenTTD, every single one of those concepts becomes physical and immediate:

  • Binary State (1 and 0): A track segment with a train sitting on it trips its block signal to red (1). An empty track segment leaves the signal green (0).
  • Logic Gates (NOT, OR, AND): By wiring track loops together with block signals and path signals, a train waiting at a junction can be held back or released depending on whether an adjacent track block is occupied. Suddenly, a train depot and three signals aren’t just rail infrastructure—they are an inverter or an AND gate.
  • The Clock Saga & Synchronization: Anyone who has ever debugged race conditions or timing skew in distributed systems will immediately feel at home during the video’s “Clock Saga.” When your CPU is made of literal trains that take finite time to accelerate, turn corners, and clear signal blocks, keeping the entire machine in lockstep requires a master clock pulse that waits for the slowest path to settle before triggering the next generation.
  • Neighbor Counting & State Transitions: John Conway’s Game of Life has simple rules—a live cell survives with 2 or 3 neighbors, a dead cell is born with exactly 3, and everything else dies—but implementing that in hardware means every single cell in the grid has to poll all eight of its neighbors, tally the count, compare the result, and flip its display state for the next tick.

Watching those primitives come together on screen—seeing signals flip from red to green as trains route through neighbor-counting loops—is one of the most intuitive visual explanations of how low-level compute actually works from the ground up.


The Comedy of Self-Inflicted Engineering Pain

Beyond the technical breakdown, the creator’s dry humor and the sheer, escalating weight of his own self-inflicted pain make it impossible to look away.

Every engineer knows that specific feeling of starting an ambitious side project on a whiteboard, convincing yourself “how hard could it really be?”, and then slowly realizing what you have actually signed up for once you hit the implementation phase.

Watching ChuggersLR wrestle with what he calls “player resistance”—fighting the game’s UI constraints, hunting down single-tile signaling mistakes across sprawling track blueprints, and scaling the grid up to roughly 4,000 trains and 500,000 pieces of rail—turns a computer science showcase into a genuine suspense movie. By the halfway mark, you aren’t just watching a tutorial anymore; you are actively rooting for him to get the thing across the finish line without losing his mind or watching the entire rail network deadlock.

Pulling off a working cellular automaton at that scale inside OpenTTD demands an unbelievable amount of patience, discipline, and stubbornness. Huge respect to ChuggersLR for enduring the pain, explaining the mechanics with great humor, and turning a beloved childhood train game into a living, breathing Turing-complete machine.

Ed Stuurman

About the author

Ed Stuurman

Infrastructure and reliability engineer based in Japan. Passionate about resilient systems, bare-metal hardware, cloud automation with Terraform, and all things homelab.

Contact

Thoughts or questions on this article?

Found a bug, tested a similar setup, or want to discuss the details? Drop a message below.

Emails are delivered directly to ed@stuurman.com.