389abd7de7
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.
40 lines
1.4 KiB
Bash
40 lines
1.4 KiB
Bash
#!/usr/bin/env bash
|
|
# Builds modding/src/mdlp/ (the first-party Mod Definition Language
|
|
# Processor, see ../README.md) and runs it against modding/mods/ to produce
|
|
# modding/dist/mods/, entirely offline - mdlp's own Go module dependencies
|
|
# were already fetched into the image at image-build time (see Dockerfile).
|
|
#
|
|
# Baked into the image at /usr/local/bin/process-mods.sh (see Dockerfile's
|
|
# CMD) - run via ../mdlp-run-image.sh, which bind-mounts the whole
|
|
# repository (not just modding/) at /workspace, since mdlp also needs the
|
|
# game's own data directory outside modding/.
|
|
#
|
|
# Set MODS="name1 name2" (before calling ../mdlp-run-image.sh) to build only
|
|
# those mods; unset or empty builds every subdirectory under mods/.
|
|
set -euo pipefail
|
|
|
|
MODDING_ROOT="$(pwd)"
|
|
REPO_ROOT="$(cd .. && pwd)"
|
|
|
|
DATA_DIR="${MDLP_DATA_DIR:-$REPO_ROOT/res/assets/ss_ee/data}"
|
|
OUT_DIR="$MODDING_ROOT/dist/mods"
|
|
|
|
[ -d "$DATA_DIR" ] \
|
|
|| { echo "Game data not found at $DATA_DIR - see the root README.md section 3." >&2; exit 1; }
|
|
|
|
echo "== Building mdlp =="
|
|
BIN_DIR="$(mktemp -d)"
|
|
trap 'rm -rf "$BIN_DIR"' EXIT
|
|
(cd "$MODDING_ROOT/src/mdlp" && go build -trimpath -o "$BIN_DIR/mdlp" .)
|
|
|
|
MDLP_ARGS=(-data "$DATA_DIR" -mods "$MODDING_ROOT/mods" -out "$OUT_DIR")
|
|
if [ -n "${MODS:-}" ]; then
|
|
MDLP_ARGS+=(-only "$MODS")
|
|
fi
|
|
|
|
echo "== Processing mods =="
|
|
"$BIN_DIR/mdlp" "${MDLP_ARGS[@]}"
|
|
|
|
echo "== Done =="
|
|
echo "Output: $OUT_DIR"
|