Files
institution/Tools/package.sh
T
flan 2d46fef192 Re-package the aggregate: bundle Ward + ship the policing layer
Fold Ward into the single Institution install as its psychiatric-care
layer. package.sh now builds Ward clean and vendors Ward.dll plus its
defs and textures alongside the other layers, and the settings shim
gains a Ward (psychiatric care) checkbox that writes the shared
InstitutionSettings.ward flag.

Re-assembling also carries in Justice's now-shipping policing defs (the
constable work type and crime thoughts), so the aggregate finally
bundles colony crime and the weighed arrest as well. README updated to
five layers over one Core with policing shipped and Ward folded in;
adds the changelog, the Workshop preview, and the preview generator.
2026-07-15 20:10:56 +00:00

67 lines
3.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# Assemble the shippable, drop-in "Institution" mod into this repo.
#
# The Institution suite's code lives in SEPARATE sibling repos (rimworld-core, -contraband, -justice,
# -gangs, -ward) as independent projects/DLLs -- that is what keeps it modular and splittable. For DISTRIBUTION
# they are vendored into ONE mod folder (this repo) with one About.xml and a settings shim that toggles
# each layer. This script rebuilds the sibling DLLs clean (no self-test) and copies them + Contraband's
# Defs in here, so the repo is a complete installable mod.
#
# To split back into separate mods later: stop running this, and ship each sibling repo as its own mod
# (their About.xml files still exist). Nothing in the code changes.
#
# Usage: Tools/package.sh (assumes siblings at ../rimworld-<name>)
set -euo pipefail
HERE="$(cd "$(dirname "$0")/.." && pwd)"
SIB="$(dirname "$HERE")"
CORE="$SIB/rimworld-core"
CB="$SIB/rimworld-contraband"
JUST="$SIB/rimworld-justice"
GANGS="$SIB/rimworld-gangs"
WARD="$SIB/rimworld-ward"
command -v dotnet >/dev/null || { echo "dotnet not on PATH" >&2; exit 1; }
echo "==> building the engine + feature DLLs (clean, no self-test)"
dotnet build "$CORE/Source/Core/Core.csproj" -c Release -v q --nologo
dotnet build "$JUST/Source/Justice/Justice.csproj" -c Release -v q --nologo
dotnet build "$CB/Source/Contraband/Contraband.csproj" -c Release -v q --nologo
dotnet build "$GANGS/Source/Gangs/Gangs.csproj" -c Release -v q --nologo
dotnet build "$WARD/Source/Ward/Ward.csproj" -c Release -v q --nologo
echo "==> vendoring DLLs into Assemblies/"
mkdir -p "$HERE/Assemblies"
rm -f "$HERE/Assemblies/"*.dll # clear old layout
dotnet build "$HERE/Source/Institution/Institution.csproj" -c Release -v q --nologo # (re-)emit Institution.dll here
cp "$CORE/Assemblies/InstitutionCore.dll" "$HERE/Assemblies/"
cp "$CB/Assemblies/Contraband.dll" "$HERE/Assemblies/"
cp "$JUST/Assemblies/InstitutionJustice.dll" "$HERE/Assemblies/"
cp "$GANGS/Assemblies/InstitutionGangs.dll" "$HERE/Assemblies/"
cp "$WARD/Assemblies/Ward.dll" "$HERE/Assemblies/"
echo "==> vendoring the feature content"
for d in Defs Patches Languages Textures; do
rm -rf "$HERE/$d"
[[ -e "$CB/$d" ]] && cp -r "$CB/$d" "$HERE/$d"
done
# Justice ships defs of its own (crime thoughts, etc.); merge them into the same Defs/ tree.
if [[ -e "$JUST/Defs" ]]; then
mkdir -p "$HERE/Defs"
cp -r "$JUST/Defs/." "$HERE/Defs/"
fi
# Ward ships defs (interaction mode, hediffs, treatment station, room role) and its own textures.
# All its files are *_Ward.xml or under a Ward/ texture subdir, so nothing collides with the others.
if [[ -e "$WARD/Defs" ]]; then
mkdir -p "$HERE/Defs"
cp -r "$WARD/Defs/." "$HERE/Defs/"
fi
if [[ -e "$WARD/Textures" ]]; then
mkdir -p "$HERE/Textures"
cp -r "$WARD/Textures/." "$HERE/Textures/"
fi
echo "==> done. Assemblies:"
ls -1 "$HERE/Assemblies/" | sed 's/^/ /'
echo "The repo is now a complete drop-in Institution mod (Core bundled). Requires only Harmony."