Repository navigation
Releases
0.0.9 Beach Life: a save-loading fix and byte-matching progress
Changes
- Add one more retail bug fix: a damaged or foreign saved game that names an unknown entity type is now rejected with an error message instead of crashing the game.
- Advance byte matching from 25.8 % to 29.1 %, across world scripts, cleaning and tile projection, screens, math tables and lookups, entity, staff and guest lifetimes and reactions, sound, vehicles, script state parsing and terrain burning.
- Let the matching checks identify static functions by their link-map address and recognise identical linked copies of a function.
The CMake release version is 0.0.9. Packages include the experimental decompiled game and require the player's own prepared retail data; they are not a claim of complete gameplay parity.
Validation
The promotion PR runs the required platform builds, package smoke tests and Native build gate. Merge only after all required checks pass; merging publishes v0.0.9.
0.0.8 Beach Life: more retail fixes and byte-matching progress
Changes
- Add six more retail bug fixes: bound representative building selection and feedback, honor feedback-row flags, bound font ellipsis truncation, and handle missing building footprints and demolition status.
- Advance byte matching across world entities, scripts, buildings, terrain, audio, GUI and rendering. Use genuine STLport containers and allocators in the matching build while preserving the native game implementation.
- Retry macOS notarization-ticket stapling and validation after transient failures.
The CMake release version is 0.0.8. Packages include the experimental decompiled game and require the player's own prepared retail data; they are not a claim of complete gameplay parity.
Validation
The promotion PR runs the required platform builds, package smoke tests and Native build gate. Merge only after all required checks pass; merging publishes v0.0.8.
0.0.7 Beach Life: 41 bugs from the original game fixed
What's new
- Bugs from the original game are fixed. 0.0.7 fixes 41 bugs found while decompiling the retail game. The fixes are always on and leave everything else as the original plays. Among them:
- Crashes: adding a beach event earlier than one already scheduled, selecting a staff category with nobody in it, cleaning up some island scripts, and the half-size night lighting.
- Finances: the daily finance history overwrote the older days with one value; it now keeps every day.
- Guests: guests now react to broken buildings, rate live events by the right feature, wake up at the right time after a night that crosses midnight, and no longer skip a building because of leftover data.
- Staff: waiters keep the next table that is waiting for service, and representatives clear the right opinions after good feedback. Staff thoughts no longer repeat the same message, and staff names containing
%keep it. - Saves: performers keep their height when a saved game is loaded.
- Objects: ferries check their departure position when leaving instead of their arrival position, two-layer objects rotate both layers, and nearby searches no longer count guests on the opposite shore.
- Damaged files: truncated or damaged saves, damaged music files and broken interface, configuration or language files are refused instead of being read past their end.
- Saves stay compatible. No fix changes the save format: older saves load as before, and the fixes apply from then on. Data an older version already lost, such as finance history, cannot be recovered.
- Fewer memory errors. Six places that freed memory the wrong way, an invalid entity conversion and five reads of uninitialized values are corrected.
Decompilation progress
- The whole game is still decompiled and runs with no traps. 14.6% of its code now compiles to byte-identical machine code with the original compiler, up from 5.5% in 0.0.6. That is 1,235 game functions, up from 858, plus 78 functions of the STLport library the game was built with.
- The README shows both figures as badges.
For developers
patches/beachlife-decomp-fixes/holds one patch per retail bug. They are applied to the game builds after the faithful decompiled source and before the optional tweaks, and never to byte matching, so the matching source stays exactly the original code. See docs/BUILDING.md.- Byte matching can compile selected sources against a pinned STLport 4.5.3 (
--stlport).--timeoutorBEACHLIFE_MATCHING_TIMEOUTsets the per-command time limit.
No original game files are included. SHA256SUMS covers every package; see docs/INSTALL.md to get started.
0.0.6 Beach Life: updates in place on macOS
What's new
- Macs update in place. Update now installs the new version and restarts the launcher on macOS too, as it already does on Windows and Linux, instead of only opening the download page. Earlier Mac launchers could not find their own package, so they only offered a download.
- One manual download on a Mac. The launcher you are running performs the update, so a Mac still on 0.0.5 or older needs 0.0.6 downloaded by hand once. From then on it updates itself.
- A clear hint when macOS blocks the update. If macOS still marks the unpacked folder as downloaded, it runs the app from a temporary read-only copy that cannot update itself. The launcher now says so: run
xattr -dr com.apple.quarantinefollowed by the Beach Life folder in Terminal once, then open Beach Life again.
No original game files are included. SHA256SUMS covers every package; see docs/INSTALL.md to get started.
0.0.5 Beach Life: a crash log and the overlay in game
What's new
- A game log that records crashes. Each game session writes
game.login alogsfolder beside the game: the folder holdingbeachlife.exe,beachlife.apporbeachlife, so the log travels with the game. It records the game's own messages and, if the game stops unexpectedly, what stopped it (for example an invalid memory access, or a part of the game that is not decompiled yet) with the call stack. The previous session stays asgame-previous.log. Send this file along when you report a problem. - The launcher tells you about a crash. At its next start it mentions that the game stopped unexpectedly, and Advanced → Game log → Open folder opens the logs. If the game's folder cannot be written, for example a Mac app started straight from Downloads, the logs go beside the launcher settings instead. They stay on your computer and are never sent anywhere.
- The performance overlay shows during play. With Display → On screen switched on, FPS, GPU and CPU now appear over the game itself; before, they only appeared in the image preview.
No original game files are included. SHA256SUMS covers every package; see docs/INSTALL.md to get started.
0.0.4 Beach Life: gameplay options and complete-game checks
What's new
- Gameplay options, on their own Gameplay page. Skip intro starts directly at the main menu, without the startup movie, logo and title screen, and Mouse wheel zoom zooms the camera like Page Up and Page Down (while placing a building the wheel still rotates it). Both are off by default, so the game plays as the original until you turn them on. In 0.0.3 these switches were shown but had no effect; 0.0.4 is the first release whose game includes them.
- Only complete games are released. A test or release package is now refused if the game still contains any trap, unresolved symbol or missing host service. Each package records these zero counts in its manifest, and the build gate requires the game and its options on all five platforms.
- License notices for the game's audio and movie decoders. Packages now include the dr_libs and PL_MPEG notices. They were missing from 0.0.3, which already contained that code.
- The launcher describes the game.
--helpsays that Play runs the decompiled game, and the game window is titled "Beach Life" instead of "Beach Life - boot build". - The launcher works on Retina Macs and other high-density screens. Its interface used to fill only a quarter of the window, cut off on the left. The game window already handled these screens.
- Windows: the launcher comes back to the front after an update. It used to restart behind other windows, so it looked as if it had closed. This takes effect from the next update after 0.0.4, because the old launcher performs the restart.
For developers
cmake --preset releasenow builds the game with its gameplay options, the same build CI packages. Thelauncherpreset builds the launcher and subsystems without the game.- Debug builds keep generating loud traps for functions not decompiled yet; Release configurations and test/release channels fail instead.
No original game files are included. SHA256SUMS covers every package; see docs/INSTALL.md to get started.
0.0.3 Beach Life: the decompiled game in every package
The first release since 0.0.1. It also contains the 0.0.2 work, which was never released on its own.
What's new
- The decompiled game ships in every package. The Linux, Steam Deck, Windows x64 and macOS (Apple silicon and Intel) packages now contain the launcher and the experimental decompiled game, and Play runs it with the files from your own copy of Beach Life. It is not complete gameplay yet: if the game reaches code that is not decompiled yet, it stops with an error that names the missing function.
- Windows and macOS game builds (from 0.0.2). The game builds with the pinned LLVM-MinGW toolchain for Windows and natively for macOS arm64 and x86_64, keeping the original game's behaviour.
- 24 more functions match the original compiler byte for byte, mostly in the screen and terrain code.
- Scripted input for headless boot checks.
BEACHLIFE_BOOT_KEYSpresses keys, scripted clicks can choose the mouse button, and clicks now land on the exact game pixel.
Build and release changes
- CI builds each platform once, so a PR runs 9 checks instead of 14. The separate game build matrix and the Windows boot CTest job are gone.
- Merging a promotion PR publishes the release directly as the latest release, titled and described by the PR. There is no draft step.
- A timing check in the movie playback test no longer fails on busy macOS runners.
No original game files are included. SHA256SUMS covers every package; see docs/INSTALL.md to get started.
0.0.1 Beach Life Initial Setup
v0.0.1 feat(matching): match core state, screens, audio and route costs