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.
52 lines
1.7 KiB
Bash
Executable File
52 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Runs the mdlp-image to build the mod(s) defined under modding/mods/ (see
|
|
# README.md) into modding/dist/mods/, entirely offline - every Go module
|
|
# dependency mdlp needs was already fetched into the image by
|
|
# ./mdlp-image.sh.
|
|
#
|
|
# Mounts the whole repository, not just modding/, because mdlp also needs the
|
|
# game's own data directory (res/assets/ss_ee/data) as read-only reference
|
|
# data (see the root README.md section 3 for how that gets populated).
|
|
#
|
|
# Usage: MODS="name1 name2" ./mdlp-run-image.sh [command...]
|
|
# With no arguments, runs the image's baked-in process-mods.sh (its default
|
|
# CMD), building every mod under mods/ (or only those named in MODS, if
|
|
# set). Pass a command (e.g. `bash`) to get a shell in the build
|
|
# environment instead, useful for debugging a failed build.
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "${BASH_SOURCE[0]}")"
|
|
MODDING_ROOT="$(pwd)"
|
|
REPO_ROOT="$(cd .. && pwd)"
|
|
|
|
fail() { echo "PREFLIGHT FAIL: $*" >&2; exit 1; }
|
|
|
|
command -v docker >/dev/null 2>&1 \
|
|
|| fail "docker not found in PATH"
|
|
|
|
IMAGE="${MDLP_REGISTRY_IMAGE:-questshock/mdlp}"
|
|
if [ -f "$MODDING_ROOT/../registry.env" ]; then
|
|
# shellcheck disable=SC1091
|
|
source "$MODDING_ROOT/../registry.env"
|
|
IMAGE="${MDLP_REGISTRY_IMAGE:-$IMAGE}"
|
|
fi
|
|
|
|
IMAGE_TAG="$(<"$MODDING_ROOT/mdlp-image/VERSION")"
|
|
[ -n "$IMAGE_TAG" ] || fail "mdlp-image/VERSION is empty"
|
|
IMAGE="$IMAGE:$IMAGE_TAG"
|
|
|
|
docker image inspect "$IMAGE" >/dev/null 2>&1 \
|
|
|| fail "$IMAGE not found locally - run ./mdlp-image.sh first"
|
|
|
|
TTY_FLAGS="-i"
|
|
[ -t 1 ] && TTY_FLAGS="-it"
|
|
|
|
# shellcheck disable=SC2086
|
|
docker run --rm $TTY_FLAGS \
|
|
-v "$REPO_ROOT:/workspace" \
|
|
-e HOST_UID="$(id -u)" \
|
|
-e HOST_GID="$(id -g)" \
|
|
-e MODS="${MODS:-}" \
|
|
"$IMAGE" \
|
|
"$@"
|