個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A decompilation and native port of Holiday Island (Sunflowers, 1996) to Rust, for Linux, Windows, macOS and WebAssembly.
Play it in your browser: https://doridian.github.io/HolidayIsland/ (the page asks for the CD image, docs/web.md), or download it for Linux, Windows or macOS from the releases (Packages).
Status: playable. The whole game is ported: the start menu, a
random island or any of the 13 scenarios (the six of the expanded
edition's UPGRADE\ too), building, roads, terraforming, the guests,
the settlements and the people on the island, the money menu and the
yearly accounts, the computer opponents, the auctions, sabotage, the
events and disasters, the TV news and films, the overview map, the
info box, the options, the high scores and the end of the game. Games
are saved and loaded in the original's format
(docs/savegame.md), and the sound, the music and
the films (Cinepak and MS ADPCM, decoded in pure Rust,
docs/films.md) play. On top of the original:
HOLIDAY.EXEThe port is a non-matching decompilation like the
Afterlife port: the code
behaves like the original, but doesn't compile to the same bytes. The
stack is winit, wgpu and cpal, with a resizable window and a fullscreen
toggle; see docs/port-architecture.md.
HOLIDAY.EXE is a 16-bit Windows 3.1 program written in Borland
Delphi 1; docs/binaries.md has the details.
This repository contains no game data files or original code, with one exception: the game's texts. Its German and English texts, strings and formats are in lang/, as UTF-8 text, one folder per language, so the port shows either language whatever the game folder's. The rest of the game data (pictures, films, sounds, the data tables) comes from the original CD, which a script can download for you from the Internet Archive.
tools/fetch_archive_org.py orig/
This downloads the German CD (an ISO, 210 MB) from
https://archive.org/details/Holiday_Island_1996_Bomico_DE and checks its
SHA-1. It extracts the CD's files and then the installer archive _FILES.1
(HOLIDAY.EXE, the DLLs and the rest of what the installer would copy) into
orig/ (gitignored), and checks the key files against
docs/binaries.md. --keep-iso FILE keeps the ISO, and --iso FILE
uses one you already have.
If you have your own image of the CD (ISO or BIN/CUE):
tools/extract_cd.py /path/to/HolidayIsland.iso orig/
tools/extract_install.py orig/_FILES.1 orig/
Both print the SHA-256 of every file they write.
The English UK release comes from The Collection Chamber's DOSBox
installer (Install-HOI.exe and Install-HOI.D01):
tools/extract-hoi-installer.py DOWNLOAD_DIR orig-en/
Its HOLIDAY.EXE is a later build than the German CD's, with fixes and
six more scenarios in UPGRADE\. The port follows that build: it
takes its fixes, and plays UPGRADE\'s scenarios when the game's folder
has it, so the German folder plays as before and the English one with
the new scenarios. Every text comes from the port's own language data
(lang/), German or English: the folder's language by
default, or the one --lang=de|en or language= in settings.ini
picks, so either folder plays fully in either language (the expanded
edition's texts in German are the port's translation). The speech is the
folder's (docs/language.md).
docs/versions.md has the differences.
Every push builds the port as one file per platform
(.github/workflows/build.yml); a v* tag publishes them on its release:
holiday-island-linux-x86_64.AppImage, holiday-island-linux-arm64.AppImageholiday-island-windows-x86_64.exe (the C runtime linked in)holiday-island-macos.dmg: Holiday Island.app, for Apple silicon and
Intel (signed ad hoc only: the first start needs a right click, Open)holiday-island-web.zip: the browser build, as on the Pages siteNone of them carries game data. Started without the game's folder (from
its icon) and with no orig in the working directory, the port asks for
the game with the system's file dialog: the CD image (.iso, .bin) or
HOLIDAY.EXE in the game's folder (the German CD's files, the English
release's). If the music has no SoundFont yet (Music), it then
asks for one too, which it copies to its data directory; cancelled, the
music is silent. It keeps the game's path in its data directory
(game-path.txt in ~/.local/share/holiday-island,
%APPDATA%\Holiday Island, ~/Library/Application Support/Holiday Island)
and doesn't ask again while it's there; deleting the file asks again. On
Linux the dialog is the desktop's (xdg-desktop-portal, else zenity).
The icon is the port's own (tools/make-icon.py).
cargo run --release -p holiday -- orig
The argument is the directory with the game's files (HOLIDAY.EXE,
GRAFIK\, DATA\, the films and sounds); its texts are the port's own
(lang/), in German or English (--lang=de|en). It plays the intro, then shows the
background with the start menu on it. Start shows the main screen with
the scenario's island, or a new island made from the menu's settings
for a normal game; "Altes Spiel fortsetzen" loads a saved one. The arrow keys and the
number pad scroll it (Ctrl for bigger steps), so do its scroll bars and
the mouse wheel (Shift for across), Insert and Delete turn it, a right
click moves it. The button bar's tool buttons (or F1 to F12)
pick the tools; a click on the island uses them. The button bar's
first button opens the file menu (saving, loading, a new game);
Escape asks whether to quit.
Fixes of the original's bugs and the port's extensions (a bigger map in a
bigger window without a second title bar, windows that stack like a
desktop's, scroll arrows that repeat, the mouse wheel) are on by default.
In a game, the options' "INFO" button lists them to switch one by one,
or all off for the original; the list saves them in the port's
settings.ini. --original switches everything off for a run (and
"INFO" shows the credits again), --enhance=KEY=on|off one of them, and
--enhancements lists the keys (--help the other options). Details in
docs/original-bugs.md.
Humans take the seats the original gives to computer opponents; two or
more can play the same seat. A signaling server (holiday-server,
cargo run --release -p server) introduces the players, who then talk
directly over WebRTC:
holiday --host=island --signal=ws://server:3536 orig # the host picks the game on the start menu
holiday --join=island --signal=ws://server:3536 orig # each other player
The browser build joins the same games. German and English players can share a game. Details in docs/networking.md.
The game's music is MIDI, and the port renders it with a SoundFont, which
the game doesn't ship. tools/get-soundfont.sh downloads
GeneralUser GS by
S. Christian Collins (GS-compatible, like the Roland Sound Canvas the music
was written on) into the port's data directory, where the game finds it.
--soundfont=FILE.sf2 or HOLIDAY_SOUNDFONT pick another; without one the
music is silent. --sound=hi|lo|off picks the effects' quality and
--no-audio turns all sound off. Details in docs/sound.md.
Needs Ghidra 12 at /opt/ghidra (or GHIDRA_INSTALL_DIR) and Java 21+.
tools/ghidra/setup.sh # import and analyze orig/HOLIDAY.EXE (~15 s)
tools/gh decompile 1000:0011 # the entry point
tools/gh pstrings -x CD # Pascal strings, with referencing functions
docs/decomp-workflow.md covers the approach, the Ghidra tooling, Delphi 1 specifics and the rules. Names and signatures are shared through symbols/.
tools/fetch_archive_org.py: downloads the CD from archive.org and extracts it.tools/extract_cd.py: pure-Python ISO9660 extractor for ISO and BIN/CUE images.tools/extract_install.py: lists or extracts the installer archives (_FILES.1, _SETUP.1).tools/lzhuf.py: the LZHUF decoder those archives use.tools/extract-hoi-installer.py: unpacks the English release from its DOSBox installer.tools/gh, tools/ghidra/: headless Ghidra setup and CLI for the decompilation.tools/get-soundfont.sh: downloads the SoundFont the music plays with.tools/build-web.sh: builds the browser version into web/.The port and the project:
UPGRADE\The game:
Holiday Island is © Sunflowers Interactive Entertainment Software. This project is not affiliated with or endorsed by Sunflowers, Bomico or Ubisoft. It's intended for owners of the original game, for preservation and interoperability.
The code in this repository is licensed under the GNU Affero General Public License v3.0 or later. The game's texts in lang/ are Sunflowers' (but the port's own strings and translations) and aren't covered by this license; the rest of the game data isn't included.