These scripts fix Theme Park World's in-park level music, which on modern Windows either never plays, or stops permanently after the first tick of a level. See TPW-LevelMusic-Investigation.md for the full technical writeup of the three underlying bugs (v1/v2/v3).
- Python 3.
- A supported 32-bit
TP.exefrom Theme Park World / Sim Theme Park. - Your own installed copy of the game.
This project does not include or distribute TP.exe, TP.icd, or any game assets.
The patcher is safe to run on:
- a completely unpatched
TP.exe - a
TP.exealready partially patched by the older v1/v2 scripts - an already fully patched
TP.exe
If the patch is already applied, the script will detect that and do nothing.
The patcher modifies your existing TP.exe and creates a timestamped backup before writing anything.
From this repository folder:
py .\Patch-TPW-LevelMusic-Combined.py "C:\Program Files (x86)\Bullfrog\Theme Park World\TP.exe"If the game is installed under Program Files, run PowerShell as Administrator.
Preview without changing anything:
py .\Patch-TPW-LevelMusic-Combined.py --dry-run "C:\Program Files (x86)\Bullfrog\Theme Park World\TP.exe"If you are running the Windows version of the game through Wine or a Wine-style wrapper, patch the TP.exe inside that prefix/bottle.
Example default Wine path:
python3 ./Patch-TPW-LevelMusic-Combined.py "$HOME/.wine/drive_c/Program Files (x86)/Bullfrog/Theme Park World/TP.exe"Preview without changing anything:
python3 ./Patch-TPW-LevelMusic-Combined.py --dry-run "$HOME/.wine/drive_c/Program Files (x86)/Bullfrog/Theme Park World/TP.exe"For custom Wine prefixes, CrossOver bottles, Whisky bottles, Porting Kit installs, or other wrappers, replace the path with the actual location of your TP.exe.
Compatible alternate-resolution executables can also be patched if their music-code signatures match.
TP_AltRes.EXE from the TPW-TPI-Fixes project has been tested successfully with the combined level-music patch.
TPW Patcher does not include or distribute TP_AltRes.EXE; users must obtain it from the original project.
The combined patcher applies all three level-music fixes in one pass.
It will:
- detect whether your
TP.exeis supported - apply the fixes only if needed
- create a timestamped backup next to
TP.exe - verify every changed byte after writing
- print the exact rollback command for your backup
Use the exact backup filename printed by the script for your run.
From the game folder:
Copy-Item "TP.exe.levelmusic-combined-bak-20260614-024502" "TP.exe" -ForceFrom the game folder:
cp -f "TP.exe.levelmusic-combined-bak-20260614-024502" "TP.exe"Example Wine path:
cd "$HOME/.wine/drive_c/Program Files (x86)/Bullfrog/Theme Park World"
cp -f "TP.exe.levelmusic-combined-bak-20260614-024502" "TP.exe"Wrapper paths vary. Find the folder containing TP.exe, then restore the backup over it.
- Start a fresh save, enter a level for the first time - level music should start immediately, with no need to leave and re-enter.
- Exit and re-enter the same level - music should still play.
- Switch to a different level - music should also play there on first entry.
- Menu/lobby music should be unaffected.
Earlier development used separate v1, v2, and v3 patchers plus compatibility/testing helpers.
This public release only requires:
Patch-TPW-LevelMusic-Combined.py
The combined patcher is self-contained and supersedes the older per-stage scripts for normal use.
- "Permission denied" - run PowerShell as Administrator (needed when
TP.exeis underProgram Files). - "Refusing to patch an unrecognized EXE layout/version" /
"...fingerprint" - the script doesn't recognize this build of
TP.exe(wrong version, already modified by something else, or corrupted). RunTest-TPW-PatchCompat.pyagainst it for details. Do not force the patch. - "already fully applied... No changes made." - your
TP.exealready has all three fixes; nothing to do.
Investigation, testing, validation, and release packaging by TheAussie, with AI-assisted patch implementation and documentation.