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:
MineTec committed 2026-11-07 08:15:40 +01:00
commit b36a366240
826 files changed
+105304

No files matched your search

+35
View File
@@ -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).
+19
View File
@@ -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.
+8
View File
@@ -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
View File
@@ -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
+97
View File
@@ -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