DEV Community

dev game
dev game

Posted on

Why RollerCoaster Tycoon Bet on x86 Assembly: The One-Man Machine Code Behind a 4-Million-Copy Empire

Short answer

In March 1999, Scottish solo developer Chris Sawyer shipped RollerCoaster Tycoon — a construction and management sim about building parks, designing custom coasters, hiring staff, and beating scenario objectives — after writing 99% of it himself in x86 assembly for Microsoft Macro Assembler, with only about 1% in C. The first game was developed, designed and programmed by Sawyer and published by Hasbro Interactive under MicroProse for Windows, and he wrote nearly all of it in x86 assembly, with art by Simon Foster and music by Allister Brimble. It sold more than four million copies by July 2002.

The sequel doubled down: RollerCoaster Tycoon 2 was developed by Chris Sawyer, who designed and programmed the game entirely by himself in x86 assembly. That game was released for Windows on October 15, 2002 and published by Infogrames.

Why does that matter in 2026? Because almost nobody writes a commercial game in assembly anymore. x86 assembly is a low-level family tied directly to CPU instructions, used today mostly where performance and hardware control are critical — kernels, drivers, embedded systems. Sawyer used it for vomiting guests, balloon prices, and corkscrews. That mismatch is the whole lesson.

This article is for indie devs and sim fans asking: what did assembly actually buy, what did it cost, and what should you steal without copying the masochism?

Who and what this covers

How a one-man assembly project happened

Sawyer was not a beginner betting big. He was a veteran betting narrow.

He started on Memotech MTX in 1984-85 writing in Z80 machine code, later on Amstrad CPC, shipping 11 Memotech games, then spent 1988-1993 converting Amiga games to MS-DOS, including Frontier: Elite II where he added texture mapping. He graduated in Computer Science and Microprocessor Systems from the University of Strathclyde, and as a kid wrote in BASIC on a ZX81 and machine code on a Camputers Lynx he bought because he could not afford a BBC Micro.

In other words, when peers were learning C++, he had a decade of registers in his fingers.

After Transport Tycoon (1994, MicroProse) became a classic and Transport Tycoon Deluxe followed a year later, Sawyer planned a transport sequel and built an isometric engine as a personal project, inspired by Sid Meier's Railroad Tycoon. While working on that engine he pivoted to coasters. He had hated coasters, then used Transport Tycoon money to travel Europe and the US, rode at least 700 of them, and decided a coaster sim was an excuse to keep doing research. The prototype was called White Knuckle for most of development before taking the Tycoon name to follow tradition.

The game was developed in a small village near Dunblane over two years. Initial playtesting was family and friends, then Hasbro helped with broader bug testing. For that, Sawyer made around $30 million in royalties.

RollerCoaster Tycoon 2 reused the trick. Some parts were based on efforts to develop a new version of Transport Tycoon that Sawyer had been working on since 1996. Both expansions for each game — Added Attractions / Corkscrew Follies (Nov 1999) and Loopy Landscapes (Sep 2000) for RCT1, plus Wacky Worlds and Time Twister for RCT2 — were handled by Frontier Developments without Sawyer's direct involvement.

What assembly actually bought

1. It ran on computers that had no business running a 1,000-guest sim

RCT simulates thousands of individual guests with hunger, thirst, nausea, money, preferred ride intensity, and pathfinding, plus ride wear, weather, and money — on 1999 Pentiums with 32-64 MB RAM.

Assembly let Sawyer pack guests into tiny structs, use integer math instead of floats, and hand-tune the hot loops. There was no Unity physics, no garbage collector pauses, no generic entity-component overhead. If a peep took 4 bytes too many, he saw it.

That is why the game still feels snappy on a toaster. It was not optimized later. It was un-bloated at birth.

2. One brain, zero integration tax

A 1999 C++ team would have spent months on build breaks, header hell, and engine licensing. Sawyer had no engine, no middleware, no standups. He owned every bug because he wrote every opcode.

That ownership is why RCT1 + RCT2 shipped two years apart with high compatibility — RCT2 retained the isometric perspective of its predecessor, allowing high compatibility with parks made in the previous game — while modern sequels break saves every patch.

3. A frozen, readable machine that fans could later resurrect

Here is the irony: the least portable choice became the most preservable.

Because RCT2 was pure x86 with no dead middleware, fans could disassemble it deterministically. OpenRCT2 states directly: RollerCoaster Tycoon 2 was originally written by Chris Sawyer in x86 assembly, the engine was based on Transport Tycoon, and OpenRCT2 re-implements it in C++ with modern platforms, improved interface, improved guest and staff AI, more tools, increased limits and multiplayer. OpenRCT2 is an open-source re-implementation that still requires original RCT2 assets from Steam or GOG.

If RCT had been built on a 1999 licensed 3D engine, that engine would be lost, licensed, or broken. Assembly + software-rendered sprites + original assets meant: buy the $10 files once, run natively on Windows, macOS and Linux forever. The OpenRCT2 project site now ships that modern launcher and manual.

What it cost

Assembly is not free. It is just priced in time and loneliness.

In short: assembly gave him total control and total responsibility. It scaled to $30 million, but it could not scale to a team.

My take: three contrarian lessons (opinion, not fact)

Most retrospectives say Sawyer used assembly for speed. I think that misses the point. Here is my distinct read after comparing this to 18 other niche-engine stories:

1. Assembly was a business model, not a performance fetish.

Everyone asks how many cycles he saved. Better question: how many salaries did he avoid? One programmer + one artist + one musician = three revenue splits. No engine royalty, no tool license, no hiring risk. In 1999, when Hasbro/MicroProse distribution was the bottleneck anyway, owning 99% of the code meant owning nearly 100% of the leverage. My label for this: the solo supply chain. If you can build the whole thing, nobody can hold you up. Speed was a bonus; independence was the product.

2. Pain created legibility.

Because assembly punishes abstraction, Sawyer could not afford clever systems. Guests had to be small integers: money, hunger, nausea 0-255. Track had to be tiles: direction, height, steepness, plus pieces like corkscrews, vertical loops, zero-g rolls and on-ride photos. That poverty is why players can reason about the game. You know why the queue is long. You see why the free balloon stall fixes sadness.

Modern tycoon clones in Unity hide behind floating-point physics and behavior trees and become unreadable — lots of simulation, little comprehension. My claim: harder to write made it easier to play. Constraint compiled into clarity.

3. Low-level was long-term portable.

Conventional wisdom says high-level languages are portable, assembly is not. RCT proves the opposite over 25 years. High-level in 1999 meant DirectX 6, bespoke 3D engines, and dead middleware that no longer compiles. Low-level meant bytes that can always be disassembled. OpenRCT2 exists because the original was so dumb and explicit. If you want your indie game to be playable in 2049, write the boring core so simply that strangers can reimplement it. Sawyer accidentally achieved anti-fragility by refusing to be modern.

You do not need to write assembly to use these ideas. Write integer-first sims, own your core loop, and keep the state small enough to explain.

What indie devs should steal (practical checklist)

  1. Reuse your own engine shamelessly. Sawyer's coaster engine grew out of transport-tycoon work started in 1996. Do not chase a new framework per game. Evolve one tile/grid sim you understand.
  2. Simulate peeps, not crowds. Give each agent 4-5 legible needs and let chaos emerge. Players forgive stupid AI if they can see the cause (no bathroom → angry → vandalism).
  3. Ship scenarios, not sandbox. RCT gated Mega Park — closest to sandbox but with only a $50,000 loan and a Have Fun objective — behind completing scenarios. Objectives teach; sandbox retains. Do both in that order.
  4. Budget for determinism. Tile construction, fixed prices, fixed ride stats. If a coaster design can be saved, shared via Ride Exchange, and later imported into RCT3, it is a feature, not a save file.
  5. Plan your exit. Know when your stack cannot do 3D/multiplayer and hand it to others (Frontier for Xbox port and RCT3) or to fans (OpenRCT2). Sawyer's genius included stopping.

Try the ideas in a browser (no install)

You cannot play real RCT in a quick browser tab, but you can train the same muscles:

  • For the cash-register squeeze — checking in guests, cleaning rooms, hiring staff when tasks pile up, reinvesting wisely — My Perfect Hotel compresses the RCT loop into idle-hotel form. Its guide stresses the same lesson Sawyer learned: upgrade service flow first, hire when delays appear, and expand steadily rather than all at once. It is described as a relaxing hotel management and tycoon game where every room, guest and staff decision matters.
  • For the builder brain — laying pieces one by one and thinking in grids and heights — Mine Clone is a fitting trainer. Its community explicitly builds roller coasters, tunnels and castles block by block in Creative or Survival modes, which mirrors RCT's tile-based coaster designer and scenario-editor mindset: plan ahead, start small, then scale to a city.
  • For Mega Park Have Fun mode — no objectives, just open chaos and experimentation — Sandbox City – Cars, Zombies, Ragdolls gives you that open-world playground with driving, ragdoll physics and free roaming. Use it to feel the difference between objective play and pure sandbox play that RCT deliberately unlocked last.

Play each for 15 minutes and ask: where is the money leak, where is the crowd stuck, what one tile change fixes both? That is Sawyer-thinking.

FAQ

Was RollerCoaster Tycoon really 99% assembly?
Yes for RCT1. Sawyer wrote 99% of the code in x86 assembly for Microsoft Macro Assembler, with the remaining 1% in C. RCT2 was then done entirely by himself in assembly.

Why not C or C++ in 1999?
He already thought in Z80 and x86 from a decade of machine-code work, and his engine predated good cheap indie C++ engines. Assembly gave him size and cycle control on low-spec Windows PCs. Today assembly is reserved for kernels and drivers — in 1999 it could still ship a hit.

Do I need to learn assembly to make a tycoon game?
No. Steal the constraints (small integer state, tile grid, scenario progression), not the opcode. OpenRCT2 already translated the assembly into modern C++ — proof the design outlived the language.

What killed the assembly era?
3D, teams, and expectations. RCT3 needed a different structure and a full studio. The solo assembly model could not do ride cameras and 3D parks alone.

Sources and scope

Facts above cover RCT1 (1999) and RCT2 (2002) on Windows as solo Sawyer assembly projects, plus OpenRCT2 as the modern C++ re-implementation. Sales (4M+ by July 2002) and royalty ($30M) figures are historical reports cited on Wikipedia and should be read as period claims, not live guarantees. Engine details verified Oct 17, 2026 via direct primary pages after Bing organic search degraded to unrelated roller-coaster-ride and first-name noise.

Top comments (0)