ab2b778f44
build / build (push) Successful in 3m36s
Extends the MDL system beyond text overrides: bitmaps/<label>.json names a model/scale and resource list, and mdlp extracts each resource's frames, runs them through an ONNX Runtime CPU upscaler baked into mdlp-image, re-quantizes to the game's palette, and writes the result back - same build-time pipeline as message overrides. Adds animgallery, a standalone viewer that renders any data directory's animated resources as an HTML/GIF gallery with a checkbox-driven MDL JSON generator, and -only-changed to preview just what a mod overrides against the base game. Fixes a real data race in hacked's ChangeNotifier.hashAll() (found via go build -race causing non-deterministic resource counts), via a new numbered patch rather than editing the vendored source. Adds engine-patches/, a general-fixes counterpart to android/engine-patches/ now staged and applied to the desktop builds too (previously unpatched): a real GL_UNPACK_ROW_LENGTH stride bug, an audio error-logging improvement, and two critter-rendering fixes - mod art was losing to the base game's own re-opened resource files, and critters rendered at the wrong size/position once that was fixed, both from how the billboard renderer derives on-screen size and placement straight from bitmap pixel dimensions. Updates README.md and AGENTS.md to document engine-patches/.
92 lines
3.7 KiB
Makefile
92 lines
3.7 KiB
Makefile
# Builds the modding subproject - see README.md.
|
|
#
|
|
# Targets:
|
|
# all (default) - `hacked` and `mods`.
|
|
# build-image - builds the hacked-build-image Docker image
|
|
# (./hacked-build-image.sh). Only needed once, or after
|
|
# hacked-build-image/ or hacked/go.mod|go.sum changes.
|
|
# hacked - compiles hacked/ for Linux and Windows via that image,
|
|
# offline. Output lands in dist/.
|
|
# mdlp-image - builds the mdlp-image Docker image (./mdlp-image.sh).
|
|
# Only needed once, or after mdlp-image/ or
|
|
# mdlp/go.mod|go.sum changes.
|
|
# mods - builds every mod under mods/ via that image, offline.
|
|
# Set MODS="name1 name2" to build only those. Output
|
|
# lands in dist/mods/.
|
|
# animgallery_base - browses res/assets/ss_ee/data alone: every animated
|
|
# resource as a looping GIF in build/gallery-base/.
|
|
# animgallery_mods - same, but with every built mod under dist/mods/
|
|
# layered on top (later wins), in build/gallery-mods/ -
|
|
# shows what a mod actually changes without launching
|
|
# the game. Run `make mods` first.
|
|
# animgallery_dist - every built mod under dist/mods/ layered on top of
|
|
# the base game, like animgallery_mods, but restricted
|
|
# to only the resources a mod actually overrides, in
|
|
# build/gallery-dist/ - a focused "what did my mods
|
|
# change" view, in the base game's own colors (unlike
|
|
# a mod's own output alone, which has no palette
|
|
# resource and would render in grayscale).
|
|
# Run `make mods` first.
|
|
# (animgallery_base/_mods/_dist all write into this
|
|
# subproject's own build/, not the repo root's.)
|
|
# clean - removes dist/.
|
|
.PHONY: all build-image hacked mdlp-image mods animgallery_base animgallery_mods animgallery_dist clean
|
|
|
|
export MODS
|
|
|
|
all: hacked mods
|
|
|
|
build-image:
|
|
./hacked-build-image.sh
|
|
|
|
# If we're already running inside the hacked-build-image
|
|
# (HACKED_BUILD_IMAGE, set by its Dockerfile), compile directly instead of
|
|
# trying to docker-run it again - e.g. a CI job already using this image as
|
|
# its container. Otherwise, run it via Docker as usual.
|
|
hacked:
|
|
@if [ -n "$$HACKED_BUILD_IMAGE" ]; then \
|
|
bash hacked-build-image/build-hacked.sh; \
|
|
else \
|
|
./hacked-build-run-image.sh; \
|
|
fi
|
|
|
|
mdlp-image:
|
|
./mdlp-image.sh
|
|
|
|
# Same already-in-the-image shortcut as `hacked` above, for MDLP_IMAGE.
|
|
mods:
|
|
@if [ -n "$$MDLP_IMAGE" ]; then \
|
|
bash mdlp-image/process-mods.sh; \
|
|
else \
|
|
./mdlp-run-image.sh; \
|
|
fi
|
|
|
|
animgallery_base:
|
|
./gen_animgallery.sh -data res/assets/ss_ee/data -out modding/build/gallery-base
|
|
|
|
# Layers every built mod's mod/ folder on top of the base assets, later
|
|
# wins - same discovery pattern as res/run-mods.sh.
|
|
animgallery_mods:
|
|
@ARGS="-data res/assets/ss_ee/data"; \
|
|
for d in dist/mods/*/mod; do \
|
|
[ -d "$$d" ] && ARGS="$$ARGS -data modding/$$d"; \
|
|
done; \
|
|
./gen_animgallery.sh $$ARGS -out modding/build/gallery-mods
|
|
|
|
# Same layering as animgallery_mods, but -only-changed restricts the output
|
|
# to resources a mod layer actually overrides.
|
|
animgallery_dist:
|
|
@ARGS="-data res/assets/ss_ee/data"; \
|
|
FOUND=""; \
|
|
for d in dist/mods/*/mod; do \
|
|
[ -d "$$d" ] && ARGS="$$ARGS -data modding/$$d" && FOUND=1; \
|
|
done; \
|
|
if [ -z "$$FOUND" ]; then \
|
|
echo "PREFLIGHT FAIL: no built mods found under dist/mods/ - run 'make mods' first" >&2; \
|
|
exit 1; \
|
|
fi; \
|
|
./gen_animgallery.sh $$ARGS -only-changed -out modding/build/gallery-dist
|
|
|
|
clean:
|
|
rm -rf dist
|