An open-source re-implementation of Sim Theme Park / Theme Park World.
Theme Park World (1999) is hard to run on a modern machine. OpenTPW re-implements the game's engine on top of your own copy of the original: it reads the game's real data files - models, textures, sounds, fonts and saves - and draws them with Vulkan.
You need a legal copy of the original game. OpenTPW ships no game content. It is an engine, not a download.
Not yet. It is a work in progress, and it is worth knowing what to expect before you try it:
- The lobby works. The four islands, the front end, the advisor, weather, the options screen and your saved players.
- Only Lost Kingdom is partly working, and only from the park the game ships already built. Enter it and the park runs: guests arrive, queue, ride and buy things; you can buy, sell and move rides, hire staff and lay paths.
- A fresh, empty park does not work, on any of the four islands.
- There is no way to finish or keep a park. No finances, no litter, and nothing saves a park back.
docs/STATUS.md has the full, current list of what works and what does not.
OpenTPW has only been tested with the American release, Sim Theme Park. Theme Park World, the release sold elsewhere, uses the same engine and data and should work, but nobody has tried it yet. If you do, please report how it goes.
- Install the .NET 10 SDK.
- Copy your game disc to a folder you can write to. How you copy it matters - see Getting the game's files.
- Build and run:
dotnet build source/OpenTPW.sln
dotnet source/OpenTPW/bin/Debug/net10.0/OpenTPW.dll --game "/path/to/Sim Theme Park"That is the whole setup. The libraries OpenTPW needs travel with the build.
The one thing you may need to install is a Vulkan driver. On Windows and macOS your graphics driver already provides it. On Linux, install your distribution's Vulkan loader (libvulkan1, vulkan-loader or vulkan-icd-loader, depending on the distribution) and Mesa or your GPU vendor's driver.
Copy the disc keeping its long file names. This is the most common way to end up with a copy that cannot work. A CD carries two sets of file names, and the plain one is uppercase and cut short - CHALLE~0.SAM where the game asks for Challenges.sam. Mount the disc and copy from the mount, or use a tool that keeps the long (Joliet) names. OpenTPW notices a short-name copy and tells you.
Telling OpenTPW where the game is. Either put the build in the game's folder, next to where TP.exe was, or point at the folder:
OpenTPW --game "/path/to/Sim Theme Park"
OPENTPW_GAME_PATH="/path/to/Sim Theme Park" OpenTPWQuote the path if it has spaces in it. If OpenTPW cannot find the game, it stops and lists every folder it looked in.
Exactly where it looks
A folder counts as the game when it contains a data folder with the game's levels inside it. Capitalisation never matters.
It tries, in order: --game on the command line, OPENTPW_GAME_PATH, the GamePath setting if you have changed it, the folder the build sits in, the working directory, and the default Windows install location. It does not search parent folders.
Saves go to save/ beside the game's data, where the original keeps them, so the options and players saved by one are seen by the other.
| Key | Does |
|---|---|
Escape |
Game menu - or, in a park, first let go of what you are holding, or leave the ground view |
Ctrl+H |
Show or hide the help bar |
F2 |
Hide the interface |
X |
Freeze the lobby camera |
[ ] |
Move between islands |
C |
In a park: walk on the ground and look around, and back again |
← → |
Turn the park camera |
| Mouse wheel | Zoom the park camera |
| Platform | Builds | Runs |
|---|---|---|
| Linux x64 | ✅ | ✅ Developed and tested here |
| Linux arm64 | ✅ | ❔ Never run |
| Windows x64, arm64 | ✅ | ❔ Not run recently |
| macOS Intel, Apple Silicon | ✅ | ❔ Never run |
Vulkan is the only graphics backend on every platform; macOS reaches it through MoltenVK, which ships with the build. Only Linux x64 is tested - bug reports from anything else are very welcome.
Linux on Wayland
The SDL that ships with OpenTPW has no Wayland backend, so a Wayland session runs it through XWayland. That works, but scales and handles input a little differently, and without XWayland installed it will not start. If your distribution's SDL2 is better, use it:
OPENTPW_SYSTEM_SDL=1 dotnet source/OpenTPW/bin/Debug/net10.0/OpenTPW.dll --game "/path/to/Sim Theme Park""Theme Park World was not found." Point OpenTPW at the game with --game <folder> or OPENTPW_GAME_PATH, or put the build in the game's folder.
"its names have been cut short." The disc was copied without its long file names. Copy it again - see Getting the game's files.
It stops before a window appears, saying it could not load a native library. This is almost always the Vulkan loader or the graphics driver. Install your distribution's Vulkan loader and your GPU's driver.
On Wayland the window scales oddly, or SDL says "No available video device". Install XWayland, or see Linux on Wayland.
No sound. Not fatal - OpenTPW warns and carries on.
dotnet build source/OpenTPW.sln
dotnet test source/OpenTPW.slnMost tests read the real game files and skip when the game is not found; set OPENTPW_GAME_PATH to run them all. OPENTPW_DEBUG_CONSOLE=1 reads commands from standard input, for driving a run.
docs/STATUS.md- what works and what does not.docs/QUEUE.md- the work queue.docs/exe/- what the original executable does, decoded.- OpenTPW.FileFormats - the game's file formats, documented.
File format support
❌ Not implemented
| Format | Status |
|---|---|
| Archives (.WAD, .SDT) | ✅ |
| Textures (.WCT) | ✅ |
| Settings (.SAM) | ✅ |
| Sounds (.SDT, .MP2) | ✅ |
| Strings (.BFMU, .BFST) | |
| Fonts (.BF4) | ✅ |
| Lip sync (.LIP) | ✅ |
| Particles (.PLB, .ESP, .TPC) | ✅ |
| Machine and player saves (Config.tcf, gms.dat) | ✅ |
| Map data (.MAP) | ✅ |
| Texture tables (.TCT) | ✅ |
| Models (.MD2) | |
| Sound categories (cat_*.map) | |
| Park signs (.SGN) | |
| Park saves (.TPWS) | |
| Ride scripts (.RSE) | |
| Materials (.MTR) | ❌ |
| Video (.TQI) | ❌ |
Contributions are very welcome:
- Fork the original project.
- Create a branch named
YourName/FeatureName. - Open a pull request when you are ready.
MIT - see LICENSE.md.
