56 lines
1.9 KiB
Bash
Executable File
56 lines
1.9 KiB
Bash
Executable File
#!/bin/sh
|
|
# Mods für "Ein Königreich für ein Lama" ein- und ausschalten.
|
|
#
|
|
# lama-mod an Mods aus ~/.wine-lama/mods/*/ aktivieren
|
|
# lama-mod aus Originalzustand (L: = unveränderte CD-Daten)
|
|
# lama-mod status
|
|
#
|
|
# Eine Mod ist ein Ordner, dessen Dateien so liegen wie auf der CD unter
|
|
# Setup/Eng/Cd (z. B. wads/T1L9M001.wad, T191.COR, movies/191INTRO.DAT).
|
|
# Aktiviert wird über ein Overlay aus Symlinks: Originaldateien bleiben
|
|
# unangetastet, Mod-Dateien kommen dazu bzw. ersetzen gleichnamige.
|
|
set -e
|
|
export WINEPREFIX="${WINEPREFIX:-$HOME/.wine-lama}"
|
|
MODS="$WINEPREFIX/mods"
|
|
OVL="$WINEPREFIX/cd-overlay"
|
|
|
|
if [ -d /opt/ein-koenigreich-fuer-ein-lama/cd ]; then
|
|
BASE=/opt/ein-koenigreich-fuer-ein-lama/cd
|
|
else
|
|
BASE="$WINEPREFIX/iso-dk/Setup/Eng/Cd"
|
|
fi
|
|
|
|
case "${1:-status}" in
|
|
an|on)
|
|
rm -rf "$OVL"
|
|
mkdir -p "$OVL"
|
|
(cd "$BASE" && find . -type d) | while IFS= read -r d; do mkdir -p "$OVL/$d"; done
|
|
(cd "$BASE" && find . -type f) | while IFS= read -r f; do ln -s "$BASE/$f" "$OVL/$f"; done
|
|
for m in "$MODS"/*/; do
|
|
[ -d "$m" ] || continue
|
|
echo "Mod: $(basename "$m")"
|
|
(cd "$m" && find . -path ./src -prune -o \( -type f -o -type l \) -print) | while IFS= read -r f; do
|
|
# vorhandene Datei gleichen Namens (Groß-/Kleinschreibung egal) ersetzen
|
|
dir=$(dirname "$f"); name=$(basename "$f")
|
|
mkdir -p "$OVL/$dir"
|
|
find "$OVL/$dir" -maxdepth 1 -iname "$name" -exec rm -f {} +
|
|
ln -s "$m/$f" "$OVL/$f"
|
|
echo " + $f"
|
|
done
|
|
done
|
|
ln -sfn "$OVL" "$WINEPREFIX/dosdevices/l:"
|
|
echo "Mods aktiv (L: -> $OVL)"
|
|
;;
|
|
aus|off)
|
|
ln -sfn "$BASE" "$WINEPREFIX/dosdevices/l:"
|
|
rm -rf "$OVL"
|
|
echo "Originalzustand (L: -> $BASE)"
|
|
;;
|
|
status)
|
|
echo "L: -> $(readlink "$WINEPREFIX/dosdevices/l:")"
|
|
ls -1 "$MODS" 2>/dev/null | sed 's/^/installierte Mod: /'
|
|
;;
|
|
*)
|
|
sed -n '2,12p' "$0"; exit 1 ;;
|
|
esac
|