Files
llamamod/deb-build/files/ein-koenigreich-fuer-ein-lama
T

100 lines
3.5 KiB
Bash
Executable File

#!/bin/sh
# Startet "Ein Königreich für ein Lama" (Disney/Argonaut, 2000) unter Wine.
#
# Beim ersten Start wird ein eigenes 32-Bit-Wine-Prefix angelegt. Bei jedem
# Start werden Laufwerk L: (Spiel-CD), Registry und Fenstergröße gesetzt.
#
# Einstellungen (optional) in ~/.config/ein-koenigreich-fuer-ein-lama.conf:
# WIDTH=1920 # Fensterbreite (Standard: Breite des Hauptmonitors)
# HEIGHT=1080 # Fensterhöhe (Standard: Arbeitsbereich - Titelleiste)
# TITLEBAR=28 # Höhe der Fenster-Titelleiste in Pixeln
# WINEPREFIX=... # anderes Prefix (Standard: ~/.wine-lama)
set -e
DATA=/opt/ein-koenigreich-fuer-ein-lama
CONF="${XDG_CONFIG_HOME:-$HOME/.config}/ein-koenigreich-fuer-ein-lama.conf"
TITLEBAR=28
WIDTH=
HEIGHT=
[ -f "$CONF" ] && . "$CONF"
export WINEPREFIX="${WINEPREFIX:-$HOME/.wine-lama}"
export WINEARCH=win32
export WINEDEBUG="${WINEDEBUG:--all}"
GAMEDIR="$WINEPREFIX/drive_c/Program Files/Disney Interactive/Ein Koenigreich fuer ein Lama"
WINGAME='C:\Program Files\Disney Interactive\Ein Koenigreich fuer ein Lama'
# --- Prefix anlegen --------------------------------------------------------
if [ ! -f "$WINEPREFIX/system.reg" ]; then
echo "Lege Wine-Prefix in $WINEPREFIX an ..."
wineboot -i >/dev/null 2>&1
wineserver -w
fi
# --- Programmdateien (Festplatten-Teil der Installation) -------------------
# Programmdateien werden verlinkt; Spielstände (*.ksv) werden kopiert, da das
# Spiel sie im Programmverzeichnis überschreibt.
mkdir -p "$GAMEDIR/music"
for f in "$DATA"/hd/* "$DATA"/hd/music/*; do
[ -f "$f" ] || continue
rel="${f#"$DATA"/hd/}"
case "$f" in
*.ksv) [ -e "$GAMEDIR/$rel" ] || { cp "$f" "$GAMEDIR/$rel"; chmod u+w "$GAMEDIR/$rel"; } ;;
*) ln -sfn "$f" "$GAMEDIR/$rel" ;;
esac
done
# --- Spiel-CD als Laufwerk L: ----------------------------------------------
# Mit aktiven Mods (lama-mod an) zeigt L: auf das Overlay.
if [ -d "$WINEPREFIX/cd-overlay" ]; then
ln -sfn "$WINEPREFIX/cd-overlay" "$WINEPREFIX/dosdevices/l:"
else
ln -sfn "$DATA/cd" "$WINEPREFIX/dosdevices/l:"
fi
# --- Fenstergröße bestimmen ------------------------------------------------
if [ -z "$WIDTH" ] || [ -z "$HEIGHT" ]; then
geo=$(xrandr --current 2>/dev/null | awk '
/ connected/ { for (i = 1; i <= NF; i++) if ($i ~ /^[0-9]+x[0-9]+\+/) {
if ($0 ~ / primary /) { print $i; found = 1; exit }
if (!first) first = $i } }
END { if (!found && first) print first }')
mw=${geo%%x*}
mh=${geo#*x}; mh=${mh%%+*}
wa=$(xprop -root _NET_WORKAREA 2>/dev/null | sed -n 's/.*= *//p' | cut -d, -f4 | tr -d ' ')
case "$mw$mh" in ''|*[!0-9]*) mw=1024; mh=768 ;; esac
h=$mh
case "$wa" in ''|*[!0-9]*) ;; *) [ "$wa" -lt "$h" ] && h=$wa ;; esac
h=$((h - TITLEBAR))
: "${WIDTH:=$mw}"
: "${HEIGHT:=$h}"
fi
# --- Registry --------------------------------------------------------------
REG=$(mktemp --suffix=.reg)
trap 'rm -f "$REG"' EXIT
cat > "$REG" <<EOF
REGEDIT4
[HKEY_LOCAL_MACHINE\\Software\\Wine\\Drives]
"l:"="cdrom"
[HKEY_LOCAL_MACHINE\\Software\\Disney Interactive\\Emperors New Groove\\1.0]
"CDPath"="L:\\\\"
"ScreenW"=dword:$(printf %08x "$WIDTH")
"ScreenH"=dword:$(printf %08x "$HEIGHT")
[HKEY_CURRENT_USER\\Software\\Wine\\Explorer]
"Desktop"="Lama"
[HKEY_CURRENT_USER\\Software\\Wine\\Explorer\\Desktops]
"Lama"="${WIDTH}x${HEIGHT}"
EOF
wine regedit "$REG" >/dev/null 2>&1
# --- Start -----------------------------------------------------------------
# Das Spiel legt Spielstände im aktuellen Verzeichnis an.
cd "$GAMEDIR"
wine "$WINGAME\\groove.exe" "$@"