All games

OpenRCT2

Untested nobody has played it on Walnut yet

An open source re-implementation of RollerCoaster Tycoon 2: build a theme park, its rides and coasters, and keep the guests happy.

Genre
strategy management simulation
Players
single player
Input
made for keyboard and mouse
View
2D
Needs
your own game data
Origin
remake or clone
Keywords
theme park tycoon

How it's built, patched and set up for its played test. The numbers are under Test runs.

OpenRCT2 0.5.6 with Walnut’s big-endian port (upstream builds only for little-endian CPUs), on its software renderer: its OpenGL renderer needs OpenGL 3.3. The engine is free; RollerCoaster Tycoon 2’s data is not, so Walnut doesn’t offer it: Walnut Games makes a package of it from your own copy (the Overview’s Installation, and the Guides). Nobody has played it on Walnut yet. In the first benchmark (Electric Fields at 960x540, scaled 2x) it drew 21 to 24 frames a second, with the console’s memory nearly all in use.

Status

Published, Untested: OpenRCT2 0.5.6 ported to big-endian ppc64, packaged, installed on the PS3 and baselined, not played yet. Under qemu-ppc64 the build matches amd64 bit for bit on every check (gtest 275/275, 35 parks after 10000 ticks, 210 screenshots, 169 track designs: the port). Software renderer only (the GL engine needs GL 3.3 core). It needs RollerCoaster Tycoon 2’s data from the player’s own copy: game-data-packager’s roller-coaster-tycoon2-data (build.toml [data_setup], in /usr/share/games/roller-coaster-tycoon2, a path upstream searches: a fresh home finds it there, gdp-step1 on the PS3), which the licensed suite now builds too, or our older licensed rct2-data (from the CD, /usr/share/games/rct2, the path our patch 0005 adds). On the PS3 it runs at 21-24 fps in Electric Fields (10 fps in Six Flags Magic Mountain) with the console’s RAM nearly gone.

  • Package (0.5.6+ds-1+ps3.N, packages/openrct2, TYPE=upstream): debs openrct2 (any), openrct2-data, openrct2-music (all). Patches 0001-0004 and 0006 are the big-endian port, 0005 the RCT2 search path (the game finds RCT2 in /usr/share/games/rct2, no config needed) and a -Werror option, 0007 the console defaults: a fresh config starts fullscreen at the desktop’s resolution (fullscreen_mode 2), with window scale desktop height / 540 from 1080 lines up (2 at 1080p: a 960x540 canvas scaled up), and without the changelog (only after an upgrade); existing configs keep their settings. Build rules: Release, scripting, OpenGL, Discord, HTTP and the version checker off, OPENRCT2_WERROR=OFF, DOWNLOAD_*=OFF with the asset zips unpacked into data/ first; g2.dat and friends are built by the ppc64 openrct2-cli itself during the build (identical to little-endian); tests not run in the build (they need RCT2 data). About 45 min a build under qemu. Sizes: openrct2 5.7 MB (installed 31 MB), openrct2-data 23 MB (37 MB), openrct2-music 43 MB.
  • The headless CLI needs game_path in its config (upstream searches for RCT2 only when not headless): openrct2-cli set-rct2 /usr/share/games/rct2 once; the GUI finds it by itself. With the base game’s data alone the log says Unable to open ObjData/BATTRRAM.POB: OpenRCT2’s bundled objects include Time Twister’s (rct2tt.ride.battrram, the battering ram), whose images point at ObjData/BATTRRAM.DAT; FindLegacyObject tries .DAT, then .POB, and names the last one it tried. No release has a .POB; the .DAT is in the expansions package (below), and with it installed the warning goes.
  • Data: the licensed suite’s roller-coaster-tycoon2-data is game-data-packager’s own package, made from the owner’s RollerCoaster Tycoon 2 CD image (make licensed-data PKG=roller-coaster-tycoon2-data INPUT=<image>: the ISO unpacked with 7z, gdp 89 with unshield in the games builder, about a minute; a 443 MB deb, 550 MB installed with the ride music; X-Walnut-Edition: full, X-Walnut-Release: cd), the same name and files the console’s import makes. Until 2026-10-27 it was our own rct2-data (rct2-data.sh, now retired: /usr/share/games/rct2, about 115 MB without the ride music): its published 1.0-2 stays, the benchmark recipe still points at its path, and the console counts either as the game’s data. Nothing from the disc is run; the packages go to the licensed suite only, the data is never committed.
  • Sources the console’s import takes (gdp 89 with our patch 0009, checked on the PS3 2026-10-27): the 2002 CD (in the drive or as an ISO: base only, release cd), the GOG Triple Thrill Pack installer setup_rollercoaster_tycoon_2_triple_thrill_pack_2.01.043_(17987).exe, a Steam or GOG install folder, and both builds of GOG’s setup_rollercoaster_tycoon2_2.0.0.6.exe. That name covers two installers: the 519354792-byte one gdp knew and a 2012 build of 519393624 bytes (goggame.dll, GameuxInstallHelper.dll), which gdp 89 refused as unknown-version. Patch 0009 adds the second build as setup_rollercoaster_tycoon2_2.0.0.6.exe?gog_2012. Both are the Triple Thrill Pack, with all 2454 files of the two packages identical to the TTP installer’s. A Steam-rip folder of the TTP (a repacked GOG install) has 17 Wacky Worlds files that match no release: four scenarios (South America - Rio Carnival.SC6 630097 bytes instead of 630453, Oasis, African Diamond Mine, Great Wall of China) and 13 ObjData objects (HIPPO01/02, 1X2LION, LINCOLNS, STEX54-64, …). Both GOG installers carry the files gdp knows, so the rip’s versions get no alternative. From that copy the base game imports; the expansions package can’t be made (gdp: “could not find ObjData/HIPPO01.DAT”).
  • Expansions: roller-coaster-tycoon2-wacky-worlds-time-twister-data (gdp’s expansion_for the base package, 1416 files, installed into the same /usr/share/games/roller-coaster-tycoon2) is optional in [data_setup] (edition expansion): a plain import asks gdp for both, the expansions only where the source has them. With it, OpenRCT2 indexes 57 scenarios instead of 26, shows Wacky Worlds and Time Twister tabs, loads Time Twister’s Sherwood Forest, and logs no BATTRRAM warning.
  • Screenshots of a windowed OpenRCT2 come out blue and purple: the game draws right (webcam), but SDL’s GL window has a GLX visual with byte-swapped masks (red 0xff00, green 0xff0000, blue 0xff000000) and xwd decodes the window through them. Fullscreen captures are right. Not the data, not the build: 2026-10-27.

On the PS3 (batch ssdroot8)

First runs (batch 2026-10-19-ssdroot8-openrct2): kernel .472, SSD root, Mesa ps3.545~dev, openrct2 ps3.574, the recipe (benchmark/recipe.sh: Electric Fields at 960x540 x2, 300 s per run, STALLS=1 MEM=1), 2 runs of each variant, rotated, none interfered; the right picture in all 16 photos.

Variant Steady fps (HUD) 1% low Frames over 100 ms CPU Lowest MemAvailable Peak RSS
base (sound, threads, 960x540 x2) 23.5 (23, 24) 11.0 11 and 16 (13 s) 399 s 7.5 and 12.3 MiB 129-135 MB
lean (no sound, 1 thread, 1 arena) 22 (23, 21) 10.9 16 and 13 (12 s) 328 s 14.5 and 15.4 MiB 130-137 MB
big (Six Flags Magic Mountain) 10 (10, 10) 3.4 287 and 280 (52 s) 357 s 9.1 and 9.3 MiB 135 MB
sdlsw (SDL software renderer, no GL) no number no number no number 289 s 14.5 and 15.7 MiB 133-138 MB
  • The HUD fps is the rate of the GL swap; the game’s simulation is capped at 40 ticks a second and runs below that. sdlsw has no Mesa in the process, so no HUD and no other fps source: 28% less CPU than base is its only number; it needs a frame counter of its own.
  • lean buys 70 s of CPU and about 5 MiB of the lowest MemAvailable, not fps. big is CPU-bound: the simulation of 2,700 guests makes every frame longer than 100 ms.
  • The 7.5-9.2 s longest frame is the park’s load under swap, not gameplay: in all six GL runs it begins 19-26 s after the start, made of vswap (1.8-3.2 s), reclaim (1.4-2.3 s) and CPU (2,300-3,600 major faults, 5,000-9,300 swap-ins); a second 1.3-4.0 s frame follows. After that base and lean have a few 100-450 ms frames and no more.
  • Memory: the process keeps 100-138 MB in swap (the 70 MB entity table, kMaxEntities 65535, is 58 MB resident at the start and 25 MB swapped at the end), VRAM peak 25.7 MiB, GART 19 MiB. MemAvailable falls to 7.5-16 MiB in every variant: the console is at its floor with nothing else running. The entity table at 16384 (about -43 MB) is the first thing to try for the load stall, after the oracle is re-run.
  • ALSA underruns: 289-317 (base), 410-416 (big), 238-299 in lean and sdlsw although lean has its sound off (why is not known). Not judged by ear.

Investigations

Research

What the surveys and plans said about it, newest first; each line names its source, the section and the date.

  • 2026-10-19, game-reeval.md, “Ranked table”: no hard no: the GL renderer needs GL 3.3 core (no GL2 path), but the software renderer through SDL works; contrib, architecture-is-little-endian; the BE port can reuse the closed AmigaOS PR #27114 (~1,700 endian lines in 33 files, applies to 0.5.6 with 2 conflicts) plus TD6/TD4 import, RLE zoom, ImageImporter, Ogg/FLAC fixes: 7-11 person-days; data: our rct2-data deb; measured GUI no-GL 282-300 MB RSS, headless 154 MB, trimmed estimate 210-230 MB. Effort L. Verdict: worth a build, staged (RAM decides).

Build

Packagesopenrct2
Suitenot in the game suite yet
Game datathe player supplies it (see the game's page); plays with roller-coaster-tycoon2-data, rct2-data
Licensed dataroller-coaster-tycoon2-data, rct2-data (built from the player's own copy, never public)

Our source packages

Played test

What a played session sets up (rating/test.toml); the medal comes from these sessions only.

Processopenrct2
Set aside~/.config/OpenRCT2, ~/.config/OpenRCT2-ps3bench (the game starts on fresh defaults)

Investigations