Name: open-hpl Version: 1.3.24 Release: 1%{?dist} Summary: Open HPL: an aarch64 port of Amnesia: The Dark Descent's HPL2 engine License: GPL-3.0-or-later # Points at the upstream project this is ported from - Frictional Games' # open-source release of the HPL2 engine and Amnesia: The Dark Descent's game # code. This fork/port (renamed "Open HPL") has no public URL of its own yet. URL: https://github.com/FrictionalGames/AmnesiaTheDarkDescent # Local working-tree snapshot (mid-port, not yet an upstream tag) staged as a # plain tarball under ~/.local/rpm/sources/ - not fetched from a URL. Source0: %{name}-%{version}.tar.gz BuildRequires: cmake BuildRequires: gcc-c++ BuildRequires: perl-interpreter BuildRequires: ImageMagick BuildRequires: desktop-file-utils BuildRequires: pkgconfig(sdl2) BuildRequires: pkgconfig(gl) BuildRequires: pkgconfig(glu) BuildRequires: pkgconfig(zlib) BuildRequires: DevIL-devel BuildRequires: glew-devel BuildRequires: assimp-devel BuildRequires: libtheora-devel BuildRequires: libvorbis-devel BuildRequires: libogg-devel BuildRequires: openal-soft-devel BuildRequires: libjpeg-turbo-devel BuildRequires: angelscript-devel BuildRequires: fltk-devel BuildRequires: libX11-devel BuildRequires: libXext-devel BuildRequires: libXft-devel BuildRequires: fontconfig-devel Requires: hicolor-icon-theme # This engine has only ever targeted x86/x86_64 Linux (plus Windows and # PowerPC-era macOS). It's being actively ported to aarch64 in this spec; # keep it arm64-only for now rather than implying unvalidated x86_64 support. ExclusiveArch: aarch64 %description Open HPL is an unofficial aarch64 Linux port of Frictional Games' HPL2 engine and Amnesia: The Dark Descent, source-released under the GPLv3. Not affiliated with or endorsed by Frictional Games. Ports the engine's third-party dependencies to native aarch64 libraries, including a Newton Dynamics 3.14 physics rebuild and an AngelScript 2.38 upgrade. Ships the engine and launcher only - content-creation tools are excluded. Game data is not included; you need a legitimate copy of the game, and the launcher deploys this package's binaries into your existing Steam install to run against it. Also installs EXPERIMENTAL entries for four more Frictional/HPL-lineage titles - Amnesia: A Machine for Pigs, SOMA, Amnesia: Rebirth, and Amnesia: The Bunker - all genuinely native aarch64, no x86_64 emulation. AMFP runs this package's real Dark Descent game logic against AMFP's own data and is partly playable. SOMA/Rebirth/Bunker are early tech-preview scaffolding: each boots the engine against that game's real data and shows one map via a free-fly debug camera, not yet a playable game. See %{_pkgdocdir}/PORTING_NOTES.md for current status of each. %prep %autosetup -p1 -n %{name}-%{version} %build # Newton Dynamics has no Fedora package, so build the vendored copy of its # actively-maintained legacy-C-API line (Newton 3.14) from source first, then # feed the resulting static libs to the engine build below via its existing # FindPrebuiltLibrary() lookup under HPL2/dependencies/lib/linux/lib/. # # %%cmake_build always builds the fixed relative "redhat-linux-build" dir # %%cmake itself defaults to - there's no per-invocation override - so each # subproject is built by cd-ing into it first rather than passing -B/-S. cd HPL2/dependencies/newton-dynamics %cmake \ -DCMAKE_BUILD_TYPE=Release \ -DNEWTON_BUILD_CORE_ONLY=ON \ -DNEWTON_BUILD_SANDBOX_DEMOS=OFF \ -DNEWTON_BUILD_SHARED_LIBS=OFF \ -DNEWTON_WITH_AVX_PLUGIN=OFF \ -DNEWTON_WITH_REFERENCE_GPU_PLUGIN=OFF %cmake_build cd - install -Dpm0644 -t HPL2/dependencies/lib/linux/lib HPL2/dependencies/newton-dynamics/redhat-linux-build/lib/libdgCore.a install -Dpm0644 -t HPL2/dependencies/lib/linux/lib HPL2/dependencies/newton-dynamics/redhat-linux-build/lib/libdgPhysics.a install -Dpm0644 HPL2/dependencies/newton-dynamics/redhat-linux-build/lib/libnewton.a HPL2/dependencies/lib/linux/lib/libNewton.a cd amnesia/src %cmake \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DUSE_GAMEPAD=ON \ -DAMNESIA_WITH_SERIAL=OFF %cmake_build --target Amnesia --target Launcher --target Soma --target Rebirth --target Bunker cd - # Extract a PNG icon from the bundled Windows .ico for desktop integration. # Used as the fallback/placeholder icon for both games below, until each # launcher's first run replaces it with that game's real Steam library icon # (see steam-common.sh's oh_ensure_icon) - so the app menu entry is never # blank, but shows the accurate per-game thumbnail once it's resolvable. magick 'amnesia/src/game/Lux.ico[0]' %{name}.png cat > open-hpl-amnesia.desktop < open-hpl-machine-for-pigs.desktop < open-hpl-soma.desktop < open-hpl-rebirth.desktop < open-hpl-bunker.desktop </ named # by a sha1-looking hash - there's no fixed filename to hardcode, so this # greps for the hash-shaped name and excludes Steam's other known, # non-square art assets in that same directory). install -Dpm0644 /dev/stdin %{buildroot}%{_libexecdir}/%{name}/steam-common.sh <<'EOF' # Sourced by the open-hpl-* launcher wrappers - not meant to be run directly. oh_find_steam_root() { for d in "$HOME/.steam/steam" "$HOME/.local/share/Steam"; do if [ -d "$d/steamapps/common" ]; then printf '%s\n' "$d" return 0 fi done return 1 } # oh_ensure_icon - idempotent, always safe to call. # # Written to hicolor/128x128/apps (not e.g. 32x32, the real source image's # own actual size) to exactly match the placeholder icon this package itself # ships at that same path/size (see %%install below) - freedesktop icon # theme lookup takes the first match it finds by walking base directories in # order ($XDG_DATA_HOME before /usr/share, i.e. this file before the # package's own), so only an *exact* same name+size collision reliably wins # over the placeholder; a real icon written under a different size directory # was frequently losing to it depending on the desktop environment's nearest- # size substitution rules. The scale-up blur from a genuinely 32x32 source is # an accepted tradeoff for actually showing each game's real icon. oh_ensure_icon() { appid="$1" dest_name="$2" icon_dir="$HOME/.local/share/icons/hicolor/128x128/apps" icon_dest="$icon_dir/$dest_name.png" [ -e "$icon_dest" ] && return 0 steam_root="$(oh_find_steam_root)" || return 0 icon_src=$(find "$steam_root/appcache/librarycache/$appid" -maxdepth 1 \ -regextype posix-extended -regex '.*/[0-9a-f]{40}\.jpg' 2>/dev/null | head -n1) [ -n "${icon_src:-}" ] || return 0 mkdir -p "$icon_dir" cp -f "$icon_src" "$icon_dest" } EOF # Deploys this package's own aarch64 binaries into the Steam game directory # (required - the engine's binreloc mechanism resolves resource paths # relative to the binary's own location, not argv/cwd) and runs the # launcher, which is the normal entry point (it lets the player pick # display/quality settings before starting Amnesia.bin.aarch64 itself). install -Dpm0755 /dev/stdin %{buildroot}%{_bindir}/open-hpl-amnesia <<'EOF' #!/bin/sh set -eu PKGDIR=%{_libexecdir}/%{name} . "$PKGDIR/steam-common.sh" APPID=57300 INSTALLDIR="Amnesia The Dark Descent" oh_ensure_icon "$APPID" open-hpl-amnesia steam_root="$(oh_find_steam_root)" || { echo "Open HPL: no Steam install found under ~/.steam/steam or ~/.local/share/Steam." >&2 exit 1 } gamedir="$steam_root/steamapps/common/$INSTALLDIR" if [ ! -d "$gamedir" ]; then echo "Open HPL: '$INSTALLDIR' isn't installed under $steam_root/steamapps/common - install it via Steam first." >&2 exit 1 fi for f in Amnesia.bin.aarch64 Launcher.bin.aarch64; do if [ ! -e "$gamedir/$f" ] || ! cmp -s "$PKGDIR/$f" "$gamedir/$f"; then cp -f "$PKGDIR/$f" "$gamedir/$f" fi done cd "$gamedir" && exec ./Launcher.bin.aarch64 "$@" EOF # EXPERIMENTAL: runs this package's own Amnesia.bin.aarch64 (Dark Descent's real, # working game-logic binary) directly against AMFP's data instead of Dark Descent's - # see the %%description for what this does and doesn't do yet. Deployed under a # distinct filename (not Amnesia.bin.aarch64) so it can't collide with a real Dark # Descent install if both games happen to share a library folder. Goes straight to # the game binary, not through Launcher.bin.aarch64 - AMFP's display/quality settings # flow through the Launcher has not been tested at all. install -Dpm0755 /dev/stdin %{buildroot}%{_bindir}/open-hpl-machine-for-pigs <<'EOF' #!/bin/sh set -eu PKGDIR=%{_libexecdir}/%{name} . "$PKGDIR/steam-common.sh" APPID=239200 INSTALLDIR="Machine for Pigs" oh_ensure_icon "$APPID" open-hpl-machine-for-pigs steam_root="$(oh_find_steam_root)" || { echo "Open HPL: no Steam install found under ~/.steam/steam or ~/.local/share/Steam." >&2 exit 1 } gamedir="$steam_root/steamapps/common/$INSTALLDIR" if [ ! -d "$gamedir" ]; then echo "Open HPL: '$INSTALLDIR' isn't installed under $steam_root/steamapps/common - install it via Steam first." >&2 exit 1 fi if [ ! -e "$gamedir/AmnesiaOnAmfp.bin.aarch64" ] || ! cmp -s "$PKGDIR/Amnesia.bin.aarch64" "$gamedir/AmnesiaOnAmfp.bin.aarch64"; then cp -f "$PKGDIR/Amnesia.bin.aarch64" "$gamedir/AmnesiaOnAmfp.bin.aarch64" fi cd "$gamedir" && exec ./AmnesiaOnAmfp.bin.aarch64 "$@" EOF # EXPERIMENTAL: this package's own from-scratch Phase 0 aarch64 SOMA game # module (soma/src/game) - see the %%description. Genuinely native, not an # emulated copy of SOMA's own real Linux x86_64 build. Same core_*.dae # compat gap as Rebirth/Bunker below (SOMA's own Steam depot ships only # core/models's precompiled .msh cache, not these five .dae source files # HPL2's renderer needs by hardcoded filename) - missing here before was a # straight FatalError crash on launch ("Could not load vertex buffer from # mesh 'core_box.dae'"). install -Dpm0755 /dev/stdin %{buildroot}%{_bindir}/open-hpl-soma <<'EOF' #!/bin/sh set -eu PKGDIR=%{_libexecdir}/%{name} . "$PKGDIR/steam-common.sh" APPID=282140 INSTALLDIR="SOMA" oh_ensure_icon "$APPID" open-hpl-soma steam_root="$(oh_find_steam_root)" || { echo "Open HPL: no Steam install found under ~/.steam/steam or ~/.local/share/Steam." >&2 exit 1 } gamedir="$steam_root/steamapps/common/$INSTALLDIR" if [ ! -d "$gamedir" ]; then echo "Open HPL: '$INSTALLDIR' isn't installed under $steam_root/steamapps/common - install it via Steam first." >&2 exit 1 fi if [ ! -e "$gamedir/OpenHplSoma.bin.aarch64" ] || ! cmp -s "$PKGDIR/Soma.bin.aarch64" "$gamedir/OpenHplSoma.bin.aarch64"; then cp -f "$PKGDIR/Soma.bin.aarch64" "$gamedir/OpenHplSoma.bin.aarch64" fi mkdir -p "$gamedir/core/models" for f in "$PKGDIR"/compat/*.dae; do dest="$gamedir/core/models/$(basename "$f")" [ -e "$dest" ] || cp -f "$f" "$dest" done cd "$gamedir" && exec ./OpenHplSoma.bin.aarch64 "$@" EOF # EXPERIMENTAL: this package's own from-scratch Phase 0 aarch64 Amnesia: # Rebirth game module (rebirth/src/game) - see the %%description, including # why the core_*.dae compat copies below get deployed too (Rebirth's own # Steam depot ships only their precompiled .msh cache, not these five .dae # source files HPL2's renderer needs by hardcoded filename). install -Dpm0755 /dev/stdin %{buildroot}%{_bindir}/open-hpl-rebirth <<'EOF' #!/bin/sh set -eu PKGDIR=%{_libexecdir}/%{name} . "$PKGDIR/steam-common.sh" APPID=999220 INSTALLDIR="Amnesia Rebirth" oh_ensure_icon "$APPID" open-hpl-rebirth steam_root="$(oh_find_steam_root)" || { echo "Open HPL: no Steam install found under ~/.steam/steam or ~/.local/share/Steam." >&2 exit 1 } gamedir="$steam_root/steamapps/common/$INSTALLDIR" if [ ! -d "$gamedir" ]; then echo "Open HPL: '$INSTALLDIR' isn't installed under $steam_root/steamapps/common - install it via Steam first." >&2 exit 1 fi if [ ! -e "$gamedir/OpenHplRebirth.bin.aarch64" ] || ! cmp -s "$PKGDIR/Rebirth.bin.aarch64" "$gamedir/OpenHplRebirth.bin.aarch64"; then cp -f "$PKGDIR/Rebirth.bin.aarch64" "$gamedir/OpenHplRebirth.bin.aarch64" fi mkdir -p "$gamedir/core/models" for f in "$PKGDIR"/compat/*.dae; do dest="$gamedir/core/models/$(basename "$f")" [ -e "$dest" ] || cp -f "$f" "$dest" done cd "$gamedir" && exec ./OpenHplRebirth.bin.aarch64 "$@" EOF # EXPERIMENTAL: this package's own from-scratch Phase 0 aarch64 Amnesia: The # Bunker game module (bunker/src/game) - see open-hpl-rebirth above, same # shape (including the same core_*.dae compat deploy - the Bunker's Steam # depot has the identical gap). install -Dpm0755 /dev/stdin %{buildroot}%{_bindir}/open-hpl-bunker <<'EOF' #!/bin/sh set -eu PKGDIR=%{_libexecdir}/%{name} . "$PKGDIR/steam-common.sh" APPID=1944430 INSTALLDIR="Amnesia The Bunker" oh_ensure_icon "$APPID" open-hpl-bunker steam_root="$(oh_find_steam_root)" || { echo "Open HPL: no Steam install found under ~/.steam/steam or ~/.local/share/Steam." >&2 exit 1 } gamedir="$steam_root/steamapps/common/$INSTALLDIR" if [ ! -d "$gamedir" ]; then echo "Open HPL: '$INSTALLDIR' isn't installed under $steam_root/steamapps/common - install it via Steam first." >&2 exit 1 fi if [ ! -e "$gamedir/OpenHplBunker.bin.aarch64" ] || ! cmp -s "$PKGDIR/Bunker.bin.aarch64" "$gamedir/OpenHplBunker.bin.aarch64"; then cp -f "$PKGDIR/Bunker.bin.aarch64" "$gamedir/OpenHplBunker.bin.aarch64" fi mkdir -p "$gamedir/core/models" for f in "$PKGDIR"/compat/*.dae; do dest="$gamedir/core/models/$(basename "$f")" [ -e "$dest" ] || cp -f "$f" "$dest" done cd "$gamedir" && exec ./OpenHplBunker.bin.aarch64 "$@" EOF install -Dpm0644 open-hpl-amnesia.desktop %{buildroot}%{_datadir}/applications/open-hpl-amnesia.desktop install -Dpm0644 open-hpl-machine-for-pigs.desktop %{buildroot}%{_datadir}/applications/open-hpl-machine-for-pigs.desktop install -Dpm0644 open-hpl-soma.desktop %{buildroot}%{_datadir}/applications/open-hpl-soma.desktop install -Dpm0644 open-hpl-rebirth.desktop %{buildroot}%{_datadir}/applications/open-hpl-rebirth.desktop install -Dpm0644 open-hpl-bunker.desktop %{buildroot}%{_datadir}/applications/open-hpl-bunker.desktop install -Dpm0644 %{name}.png %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/open-hpl-amnesia.png install -Dpm0644 %{name}.png %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/open-hpl-machine-for-pigs.png install -Dpm0644 %{name}.png %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/open-hpl-soma.png install -Dpm0644 %{name}.png %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/open-hpl-rebirth.png install -Dpm0644 %{name}.png %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/open-hpl-bunker.png desktop-file-validate %{buildroot}%{_datadir}/applications/open-hpl-amnesia.desktop desktop-file-validate %{buildroot}%{_datadir}/applications/open-hpl-machine-for-pigs.desktop desktop-file-validate %{buildroot}%{_datadir}/applications/open-hpl-soma.desktop desktop-file-validate %{buildroot}%{_datadir}/applications/open-hpl-rebirth.desktop desktop-file-validate %{buildroot}%{_datadir}/applications/open-hpl-bunker.desktop %files %license LICENSE THIRD_PARTY_LICENSES.md %doc README.md PORTING_NOTES.md %{_bindir}/open-hpl-amnesia %{_bindir}/open-hpl-machine-for-pigs %{_bindir}/open-hpl-soma %{_bindir}/open-hpl-rebirth %{_bindir}/open-hpl-bunker %{_libexecdir}/%{name}/ %{_datadir}/applications/open-hpl-amnesia.desktop %{_datadir}/applications/open-hpl-machine-for-pigs.desktop %{_datadir}/applications/open-hpl-soma.desktop %{_datadir}/applications/open-hpl-rebirth.desktop %{_datadir}/applications/open-hpl-bunker.desktop %{_datadir}/icons/hicolor/128x128/apps/open-hpl-amnesia.png %{_datadir}/icons/hicolor/128x128/apps/open-hpl-machine-for-pigs.png %{_datadir}/icons/hicolor/128x128/apps/open-hpl-soma.png %{_datadir}/icons/hicolor/128x128/apps/open-hpl-rebirth.png %{_datadir}/icons/hicolor/128x128/apps/open-hpl-bunker.png %changelog * Mon Sep 21 2026 Lachlan Marie - 1.3.24-1 - SOMA: fix lighting (G-buffer sampling, per-light falloff/brightness) - SOMA: load normal maps (ATI2/BC5U) - SOMA: load decals, billboards, particles, fog areas, detail meshes, FBX meshes - SOMA: all 29 maps boot; several crash fixes - SOMA: mesh cache under XDG cache dir - Add assimp dependency * Sat Sep 12 2026 Lachlan Marie - 1.3.23-1 - No user-facing changes - internal diagnostics and documentation only, ahead of continued work on SOMA's real apartment map still rendering too dark. * Thu Sep 10 2026 Lachlan Marie - 1.3.22-1 - SOMA: fixed a crash loading the real apartment map right after the intro slideshow. * Wed Sep 09 2026 Lachlan Marie - 1.3.21-1 - SOMA: fixed a real bug that could cause the game to hang on a black screen right after launch instead of showing the boot splash. * Wed Sep 09 2026 Lachlan Marie - 1.3.20-1 - SOMA: fixed a real bug that could rewrite files inside your Steam install directory on launch, which could trigger a "files failed to validate" repair in Steam. * Wed Sep 09 2026 Lachlan Marie - 1.3.19-1 - SOMA: fixed real-time lights being silently culled and never rendered in the apartment map. The room still renders darker than intended - a further fix is in progress. * Wed Sep 09 2026 Lachlan Marie - 1.3.18-1 - SOMA: fixed a crash loading the real apartment map (collision-only meshes like block_box's could read a negative array index). * Wed Sep 09 2026 Lachlan Marie - 1.3.17-2 - SOMA: fixed an instant crash on launch ("Could not load vertex buffer from mesh 'core_box.dae'") by deploying the same compat meshes the Rebirth/Bunker launchers already deploy. * Wed Sep 09 2026 Lachlan Marie - 1.3.17-1 - SOMA: fixed a real bug causing the game to rewrite its own real Steam files on every launch, which could trigger repeated file-validation failures. - Engine binaries can now run against game data anywhere, without needing to be copied into the game's own install folder. * Tue Sep 08 2026 Lachlan Marie - 1.3.16-1 - SOMA: fixed the boot splash order, added the animated loading icon, and made loading genuinely gate skipping. - SOMA: fixed missing sounds (phone ring, car horns, and other ambient sounds) and added audio pause when the window loses focus. - SOMA: the intro slideshow now paces correctly, and Simon's phone call waits for the player to actually answer it. - SOMA: added a player HUD, a real in-game pause menu, and a difficulty select screen for New Game. * Mon Sep 07 2026 Lachlan Marie - 1.3.15-1 - Fixed a bug that could corrupt the real Steam game files during testing; test tooling now refuses to run against a real install. - SOMA: real animated loading icon, fixed menu music/ambience lingering into gameplay, fixed overlapping intro voice-over, real Options toggle switches and gamma-screen instructions, live resolution changes, and a new in-game pause menu (Escape). - SOMA: added the apartment map's phone-call scene. * Sun Sep 06 2026 Lachlan Marie - 1.3.14-1 - SOMA: fixed the remaining HDR-precision bug affecting box lights and fog areas (matches the earlier point-light/transparency fix). * Sun Sep 06 2026 Lachlan Marie - 1.3.13-1 - SOMA: fixed severe map-rendering corruption and invisible New Game intro slides/subtitles. - SOMA: real Options settings now actually work (resolution, anti-aliasing, field of view, subtitles, mouse sensitivity, rebindable keys). - SOMA: fixed the loading-bar's position/size on the boot screen. * Sat Sep 05 2026 Lachlan Marie - 1.3.12-1 - SOMA: real boot/splash sequence with loading bar, floating debris effect, custom cursor, real Options menu widgets and working menu sounds, and a New Game intro slideshow. - Partial fix for a window-resize rendering bug (still open for SOMA specifically; fixed for Amnesia: The Dark Descent). * Sat Sep 05 2026 Lachlan Marie - 1.3.10-1 - SOMA: menu music, a first-boot gamma calibration screen, a real Options menu (volume/gamma/vsync/fullscreen), and a real player controller (gravity, walking, jumping, collision) on gameplay maps. * Fri Sep 04 2026 Lachlan Marie - 1.3.9-1 - Fixed a window-resize bug (e.g. a tiling compositor fullscreening the window) that left rendering pinned to a stale-sized corner with the rest of the screen black. - Fixed the Launcher writing its config/log outside the XDG Base Directory spec. - SOMA: New Game now loads the real declared start map instead of a hardcoded wrong one. * Fri Sep 04 2026 Lachlan Marie - 1.3.8-1 - SOMA: rewrote the main menu to match the real game's own menu logic, read directly out of its shipped AngelScript source and debug-info binary - correct 1280x720-scaled layout, real background/dirt-corner art, an animated glitch title and cathedral ghost-trail effect, and real text-based menu buttons with the real teal highlight bar. * Fri Sep 04 2026 Lachlan Marie - 1.3.7-1 - SOMA: the main menu now uses SOMA's own real background/title art instead of a generic placeholder. * Fri Sep 04 2026 Lachlan Marie - 1.3.6-1 - SOMA: fixed the splash logos (wrong texture format, oversized second logo) and added a real interactive main menu (New Game / Quit). * Fri Sep 04 2026 Lachlan Marie - 1.3.5-1 - SOMA: added OPENHPL_SOMA_MAP env var to load a real map on normal boot. - Trimmed this file and README.md. * Fri Sep 04 2026 Lachlan Marie - 1.3.4-1 - SOMA now renders real lit, textured, correctly-exposed geometry: fixed missing light/skybox/fog shader uniforms, applied SOMA's own per-area exposure data, and fixed an HDR precision bug in glass/translucent materials. See PORTING_NOTES.md for details. - Headless test runs no longer wake the screen, play sound, or run more than one instance at once (dev/CI tooling only, no effect on normal play). * Thu Sep 03 2026 Lachlan Marie - 1.3.3-1 - Added a regression test suite (CTest) covering string/path helpers and SOMA's shader transpiler. - Added a "Show FPS" checkbox to Options > Graphics. - Minor rendering optimization: skip redundant texture-unit rebinds. - Wayland: exclusive fullscreen now degrades correctly; Launcher window now has a proper app-id. - Fixed two headless-automation-server crashes/bugs (dev tooling only). - SOMA/Rebirth/Bunker: extended the shader transpiler, added entity/area loaders for Rebirth, fixed Bunker's spawn point. All three remain tech-preview, pre-alpha. * Wed Sep 02 2026 Lachlan Marie - 1.3.2-1 - Save games, config, logs, map caches, and screenshots now follow the XDG Base Directory spec instead of scattering across ~/.frictionalgames, the Steam game directory, and ~/Desktop. Existing saves are migrated automatically on first run. * Wed Sep 02 2026 Lachlan Marie - 1.3.1-12 - Fixed the in-game UI Scale setting at 2x/3x/4x: several screens (loading screen, HUD, inventory, journal, credits) rendered oversized and spilled off-screen. Also fixed a crash in the headless test server hit while verifying this. * Wed Sep 02 2026 Lachlan Marie - 1.3.1-11 - Fixed desktop-entry icons often showing the generic placeholder instead of each game's real Steam thumbnail. - Added "Open HPL" branding/keywords to all desktop entries. * Wed Sep 02 2026 Lachlan Marie - 1.3.1-10 - Fixed the splash/pre-menu screens not skipping on most keypresses. - Added an opt-in hidden-window mode to the headless automation server. - Added three more EXPERIMENTAL desktop entries (SOMA, Amnesia: Rebirth, Amnesia: The Bunker), each a native aarch64 Phase 0 scaffold: boots the engine against that game's real data and shows one map via a free-fly debug camera, no player/menu/scripts yet. * Tue Sep 01 2026 Lachlan Marie - 1.3.1-9 - Fixed the UI Scale setting (added in 1.3.1-7): most menus and the splash screen were unusable at 2x/3x/4x. * Tue Sep 01 2026 Lachlan Marie - 1.3.1-8 - The Launcher and game windows now run as native Wayland clients instead of through XWayland. * Tue Sep 01 2026 Lachlan Marie - 1.3.1-7 - Fixed the resolution dropdown dropping options shared between two displays. - Added an in-game UI Scale control (Options > Graphics). * Tue Sep 01 2026 Lachlan Marie - 1.3.1-6 - Fixed a real engine bug: teleporting the player mid-fall could tunnel through floor collision at the destination. * Mon Aug 31 2026 Lachlan Marie - 1.3.1-5 - Re-added an experimental "Amnesia: A Machine for Pigs" entry, this time running Dark Descent's real native binary against AMFP's data (no x86_64 emulation). Level data loads and scripts run; some collision/gameplay bugs remain. * Mon Aug 31 2026 Lachlan Marie - 1.3.1-4 - Removed the box64-based Machine for Pigs entry - this project is native-aarch64-only, no emulation fallback. * Mon Aug 31 2026 Lachlan Marie - 1.3.1-3 - Source refresh only; no shipped-binary changes. Picks up early reverse-engineering work on AMFP and SOMA. * Sun Aug 30 2026 Lachlan Marie - 1.3.1-2 - Split the desktop entry into per-game entries; added a soft box64 dependency for the (since-removed) Machine for Pigs entry. - Fixed the Launcher hardcoding the wrong binary name on non-x86 targets. * Sun Aug 30 2026 Lachlan Marie - 1.3.1-1 - Renamed from amnesia-dark-descent to open-hpl. No functional changes.