- engine-debug-tools/: a debug dump hotkey + dump2png to inspect
decoded critter frames independent of the renderer (see root
README.md's "Debugging" section).
- engine-patches/04,05: fix critter sprite scale and an OpenGL
texture cache collision, found using that tooling.
- mdlp: fix encodeFrames RLE-diffing upscaled frames against a
previous-frame reference the real RSD8 decoder never implements
(verified against Night Dive's original Mac source down to the
68K assembly) - was rendering as scattered static in-game.
- Upscale pipeline: better color quantization (dithering, pure-ramp
exclusion) and per-resource model selection.
modding/mods/ holds message edits as plain JSON (type, index, language,
plus only the changed fields - a long body can live in a sibling .txt to
avoid escaping in JSON), so mod authoring is reviewable in git instead of
living only in hacked's GUI. mdlp (modding/src/mdlp/, its own Docker image
mdlp-image/) turns them into the same mod folder/zip hacked's own Save
produces, reusing hacked's ss1/edit, ss1/world and ss1/content/text
packages via a go.mod replace - no GUI/GLFW/GTK needed. `make mods`
builds every mod into dist/mods/<name>/, scoped per-mod so it never
touches hacked's own build output; `make` (no target) now builds both.
Fixes a bug this surfaced: hacked's FileLocation.AbsolutePathFrom
silently writes into the current directory instead of the given output
folder when passed a relative path (the GUI never hits this since its
folder picker is always absolute) - mdlp now resolves its own paths
up front.
res/run-mods.sh/.bat are new companion launchers to run.sh/.bat: they
pass every dist/mods/*/mod folder to the engine as a separate absolute
argument, since ProcessModDirectory() only scans one directory level
deep. Wired into `make dist`/`dist-win` only, not the release archives.
modding/hacked/, its patches, sqweek-dialog/, its patches, and the new
mdlp/ move under modding/src/, separating source from the surrounding
Docker/script scaffolding; all path references updated to match.
NOTICE.txt gains a section for hacked's distributed build, listing hacked
(New BSD), sqweek/dialog (ISC - corrected from a wrong "New BSD" note),
and hacked's other direct Go dependencies.
issues on vboxsf-mounted checkouts
New `make dist-win`/`package-win` targets (folded into `dist`/`package`
alongside the renamed `dist-linux`/`package-linux`) cross-compile
systemshock.exe via MinGW, using prebuilt SDL2/SDL2_mixer/GLEW/
fluidsynth-lite baked into the build-image - no Windows machine or Wine
needed to build it, confirmed working and playable on a real Windows
machine. dist-win/ ships DLLs flat alongside the exe plus a new
res/run.bat launcher, packaged into a .zip the same way dist/ becomes a
.tar.gz.
Also fixes three build-image bugs hit while testing on a VirtualBox
vboxsf-mounted checkout: build-engine.sh/docker-entrypoint.sh losing
their execute bit (chmod +x on restrictive source perms), the container
user missing access to /workspace's supplementary vboxsf group, and
cp -a failing on symlink/hard-link creation (vboxsf doesn't support
either) - now falls back to dereferencing copies when detected. Also
adds Docker/zip/etc. prerequisites to the README for both the desktop
and Quest builds.
- patchelf gl4es's embedded SONAME to libGL.so so AGP's jniLibs packaging
(which drops any file not literally named "*.so") and the dynamic
linker's NEEDED-entry resolution (by embedded SONAME, not filename)
finally agree - fixes the "library \"libGL.so.1\" not found" crash seen
on real Quest hardware.
- QuestShockActivity now checks that res/data and res/sound exist before
starting the native engine, showing an explanatory dialog instead of
crashing on init_popups' unchecked NULL resource load when a fresh
install has no game data copied in yet.
- dist/questshock-<version>-android-arm64.apk is now versioned from the
same git-tag-or-dev-placeholder scheme as the desktop tarball
(build-image/version.sh, shared by both via the Makefile and
build-apk.sh).
- build-image/prepare-android-project.sh (prep logic extracted out of
build-apk.sh) can now stage android/ for a native build directly in
Android Studio (--host-paths), exporting the prebuilt SDL2/SDL2_mixer/
fluidsynth-lite/gl4es libraries and writing host-resolvable paths,
instead of only ever building inside the Docker image.
- Corrected GET_ASSETS.txt/GET_ASSETS_QUEST.txt, which wrongly described
merging res/pc/hd and res/pc/cdrom trees out of the raw installer's
sshock.kpf - an already-installed copy's res/data res/sound can just
be copied directly, with extract_assets.sh only needed from the raw
installer.
dependency (SDL2, SDL2_mixer, fluidsynth-lite, a MIDI soundfont)
prebuilt, so compiling the engine needs no network access - just the
image and the engine source. Add res/assets/extract_assets.sh to pull
the game's data files out of a purchased GOG installer, and a Makefile
that assembles a runnable dist/ from the two.
Also add `make package`, which builds a redistributable tarball that
omits the proprietary game assets (shipping res/GET_ASSETS.txt instead)
plus license information for both the MIT tooling and the GPLv3 engine,
and a Gitea Actions workflow that builds and publishes it to
dl.ladkau.de on every push.