initial commit: llamamod 0.2.0 – reverse-engineered level formats (wad, map, trak, text, stpc), python tools and notes, java mod manager (iso install, mod pipeline with exe patching, save editor, wine/windows launcher) with mods (test world, debug wireframe, mirror, randomizer, fog, cheats, intro skip, practice, free camera, boot to level, level projects) and the 3d level editor (geometry, objects, cross-world import, environment, textures, play-test, manual)
This commit is contained in:
commit
b36a366240
826 files changed
+105304
No files matched your search
@@ -0,0 +1,35 @@
|
||||
Ein Königreich für ein Lama unter Wine
|
||||
======================================
|
||||
|
||||
Start: Menüeintrag "Ein Königreich für ein Lama" oder im Terminal `lama`.
|
||||
|
||||
Installierte Dateien
|
||||
/opt/ein-koenigreich-fuer-ein-lama/cd Inhalt der CD (Setup/Eng/Cd), wird zu Laufwerk L:
|
||||
/opt/ein-koenigreich-fuer-ein-lama/hd Programmdateien (groove.exe, Audio-DLLs, Sprache)
|
||||
/usr/share/ein-koenigreich-fuer-ein-lama/soundtrack Soundtrack als MP3
|
||||
|
||||
Pro Benutzer (beim ersten Start angelegt)
|
||||
~/.wine-lama Wine-Prefix (32 Bit)
|
||||
~/.wine-lama/drive_c/Program Files/Disney Interactive/Ein Koenigreich fuer ein Lama
|
||||
Programmordner, enthält die Spielstände (*.ksv)
|
||||
|
||||
Was der Starter bei jedem Start einrichtet
|
||||
- Laufwerk L: als CD-ROM -> /opt/.../cd (das Spiel prüft dort auf 111.cor)
|
||||
- HKLM\Software\Disney Interactive\Emperors New Groove\1.0: CDPath, ScreenW, ScreenH
|
||||
- Wine-virtueller-Desktop "Lama" in Spielauflösung, damit das Spiel die
|
||||
echte Bildschirmauflösung nicht umstellt (es kennt keinen Fenstermodus)
|
||||
- Arbeitsverzeichnis = Programmordner (das Spiel speichert dort; aus einem
|
||||
schreibgeschützten Verzeichnis gestartet stürzt es ab)
|
||||
|
||||
Fenstergröße
|
||||
Standard: Breite des Hauptmonitors, Höhe = Arbeitsbereich minus Titelleiste.
|
||||
Anpassen in ~/.config/ein-koenigreich-fuer-ein-lama.conf, z. B.:
|
||||
WIDTH=1920
|
||||
HEIGHT=1080
|
||||
TITLEBAR=28
|
||||
|
||||
Bekannte Eigenheiten
|
||||
- "ege bitte die CD ..." – das fehlende "L" ist ein Fehler im Originalspiel.
|
||||
- DEFANIM.WAD wird gesucht, fehlt aber auch auf der Original-CD; harmlos.
|
||||
- Zwischensequenzen sind MPEG-1 (.dat); dafür braucht Wine die 32-Bit-
|
||||
GStreamer-Plugins (gstreamer1.0-plugins-ugly:i386, gstreamer1.0-libav:i386).
|
||||
@@ -0,0 +1,19 @@
|
||||
Package: ein-koenigreich-fuer-ein-lama
|
||||
Version: @VERSION@
|
||||
Section: games
|
||||
Priority: optional
|
||||
Architecture: all
|
||||
Depends: wine (>= 6.0), wine32:i386, x11-xserver-utils, x11-utils
|
||||
Recommends: gstreamer1.0-plugins-ugly:i386, gstreamer1.0-libav:i386
|
||||
Installed-Size: @SIZE@
|
||||
Maintainer: Elias Müller <elias@elias-mueller.com>
|
||||
Description: Ein Königreich für ein Lama (Disney/Argonaut, PC 2000) für Wine
|
||||
Deutsche PC-Version von Disneys "Ein Königreich für ein Lama"
|
||||
(The Emperor's New Groove), entwickelt von Argonaut Games.
|
||||
.
|
||||
Enthält die vollständigen Spieldaten der CD, einen Starter, der ein
|
||||
eigenes 32-Bit-Wine-Prefix einrichtet (CD als Laufwerk L:, Registry,
|
||||
virtueller Desktop passend zur Bildschirmgröße), einen Menüeintrag
|
||||
sowie den Soundtrack als MP3.
|
||||
.
|
||||
Nur für den privaten Gebrauch mit eigener Original-CD.
|
||||
@@ -0,0 +1,8 @@
|
||||
Ein Königreich für ein Lama / The Emperor's New Groove (PC)
|
||||
Copyright (C) 2000 Disney Interactive; entwickelt von Argonaut Games PLC.
|
||||
|
||||
Proprietäre Software. Dieses Paket enthält die Daten der Original-CD und ist
|
||||
ausschließlich für den privaten Gebrauch durch Besitzer der Original-CD
|
||||
bestimmt. Weitergabe nicht gestattet.
|
||||
|
||||
Startskript und Paketierung: Elias Müller, 2026.
|
||||
+99
@@ -0,0 +1,99 @@
|
||||
#!/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" "$@"
|
||||
@@ -0,0 +1,10 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=Ein Königreich für ein Lama
|
||||
GenericName=Jump'n'Run
|
||||
Comment=Disneys Ein Königreich für ein Lama (2000) unter Wine
|
||||
Exec=/usr/games/ein-koenigreich-fuer-ein-lama
|
||||
Icon=ein-koenigreich-fuer-ein-lama
|
||||
Terminal=false
|
||||
Categories=Game;ActionGame;
|
||||
StartupWMClass=explorer.exe
|
||||
Executable
+97
@@ -0,0 +1,97 @@
|
||||
#!/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
|
||||
# lama-mod debug an Debug-Ansicht (Kollision/unsichtbare Objekte) zuschalten
|
||||
# lama-mod debug aus Debug-Ansicht abschalten (andere Mods bleiben, wie sie sind)
|
||||
#
|
||||
# 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.
|
||||
# Mods mit einer Datei ".aus" im Ordner werden übersprungen (so schaltet
|
||||
# "lama-mod debug an|aus" die Mod "debug" unabhängig von den anderen).
|
||||
# Reihenfolge: alphabetisch, spätere Mods gewinnen (testlevel > debug).
|
||||
set -e
|
||||
export WINEPREFIX="${WINEPREFIX:-$HOME/.wine-lama}"
|
||||
MODS="$WINEPREFIX/mods"
|
||||
OVL="$WINEPREFIX/cd-overlay"
|
||||
DBG="$MODS/debug"
|
||||
|
||||
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
|
||||
|
||||
overlay_an() {
|
||||
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
|
||||
if [ -e "$m/.aus" ]; then
|
||||
echo "Mod: $(basename "$m") (abgeschaltet)"
|
||||
continue
|
||||
fi
|
||||
echo "Mod: $(basename "$m")"
|
||||
(cd "$m" && find . -path ./src -prune -o -name .aus -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"
|
||||
[ -n "$LEISE" ] || echo " + $f"
|
||||
done
|
||||
done
|
||||
ln -sfn "$OVL" "$WINEPREFIX/dosdevices/l:"
|
||||
echo "Mods aktiv (L: -> $OVL)"
|
||||
}
|
||||
|
||||
case "${1:-status}" in
|
||||
an|on)
|
||||
overlay_an
|
||||
;;
|
||||
aus|off)
|
||||
ln -sfn "$BASE" "$WINEPREFIX/dosdevices/l:"
|
||||
rm -rf "$OVL"
|
||||
echo "Originalzustand (L: -> $BASE)"
|
||||
;;
|
||||
debug)
|
||||
if [ ! -d "$DBG/wads" ]; then
|
||||
echo "Debug-Mod fehlt ($DBG/wads)." >&2; exit 1
|
||||
fi
|
||||
case "${2:-status}" in
|
||||
an|on)
|
||||
rm -f "$DBG/.aus"
|
||||
LEISE=1 overlay_an
|
||||
echo "Debug-Ansicht AN ($(ls "$DBG/wads" | wc -l) Level). Wirkt beim nächsten Laden eines Levels."
|
||||
;;
|
||||
aus|off)
|
||||
touch "$DBG/.aus"
|
||||
if [ "$(readlink "$WINEPREFIX/dosdevices/l:")" = "$OVL" ]; then
|
||||
LEISE=1 overlay_an
|
||||
fi
|
||||
echo "Debug-Ansicht AUS."
|
||||
;;
|
||||
status)
|
||||
if [ -e "$DBG/.aus" ]; then echo "Debug-Ansicht: aus"; else echo "Debug-Ansicht: an (wenn Mods aktiv)"; fi
|
||||
;;
|
||||
*)
|
||||
sed -n '2,9p' "$0"; exit 1 ;;
|
||||
esac
|
||||
;;
|
||||
status)
|
||||
echo "L: -> $(readlink "$WINEPREFIX/dosdevices/l:")"
|
||||
for m in "$MODS"/*/; do
|
||||
[ -d "$m" ] || continue
|
||||
if [ -e "$m/.aus" ]; then s=" (abgeschaltet)"; else s=""; fi
|
||||
echo "installierte Mod: $(basename "$m")$s"
|
||||
done
|
||||
;;
|
||||
*)
|
||||
sed -n '2,9p' "$0"; exit 1 ;;
|
||||
esac
|
||||
Reference in new issue
Block a user