mirror of
https://github.com/skoelle/marcer-gamedvd-launcher.git
synced 2026-09-17 18:50:25 +00:00
190 lines
8.0 KiB
Bash
Executable File
190 lines
8.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# === Demo setup and run script for MarcerGameDvdLauncher ===
|
|
# Creates a structured test directory with main and patch layers,
|
|
# populates them with fake ZIPs, then launches the launcher.
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
DEMO_DIR="$SCRIPT_DIR/.demo"
|
|
ROOT_DIR="$DEMO_DIR/root"
|
|
PATCH_DIR="$DEMO_DIR/patch"
|
|
CONFIG_FILE="$SCRIPT_DIR/launcher.config.json"
|
|
|
|
# --- Step 1: Build ---
|
|
echo "=== Building MarcerGameDvdLauncher ==="
|
|
cd "$SCRIPT_DIR/src/MarcerGameDvdLauncher"
|
|
dotnet build -c Release --verbosity quiet
|
|
echo "[OK] Build successful."
|
|
|
|
# --- Step 2: Create demo directory structure ---
|
|
echo ""
|
|
echo "=== Setting up demo directories ==="
|
|
|
|
# Clean previous demo if it exists
|
|
rm -rf "$DEMO_DIR"
|
|
mkdir -p "$ROOT_DIR" "$PATCH_DIR"
|
|
|
|
# Helper: create a fake ZIP (just an empty file with .zip extension)
|
|
fake_zip() {
|
|
touch "$1"
|
|
}
|
|
|
|
# --- ROOT layer (main DVD content) ---
|
|
echo "Creating root layer..."
|
|
|
|
# === Folder A: TEST-ME — Atari Classics (shared with patch — rich mix + subdirs) ===
|
|
mkdir -p "$ROOT_DIR/A/TEST-ME Atari Classics"
|
|
fake_zip "$ROOT_DIR/A/TEST-ME Atari Classics/Pac-Man.zip"
|
|
fake_zip "$ROOT_DIR/A/TEST-ME Atari Classics/Donkey Kong.zip"
|
|
fake_zip "$ROOT_DIR/A/TEST-ME Atari Classics/Galaga.zip"
|
|
fake_zip "$ROOT_DIR/A/TEST-ME Atari Classics/Space Invaders.zip"
|
|
fake_zip "$ROOT_DIR/A/TEST-ME Atari Classics/Frogger.zip"
|
|
fake_zip "$ROOT_DIR/A/TEST-ME Atari Classics/Bomberman.zip"
|
|
fake_zip "$ROOT_DIR/A/TEST-ME Atari Classics/Tetris.zip"
|
|
|
|
# Subdirs: Original and Manual
|
|
mkdir -p "$ROOT_DIR/A/TEST-ME Atari Classics/Original"
|
|
fake_zip "$ROOT_DIR/A/TEST-ME Atari Classics/Original/Pac-Man (Original).zip"
|
|
fake_zip "$ROOT_DIR/A/TEST-ME Atari Classics/Original/Donkey Kong (Original).zip"
|
|
mkdir -p "$ROOT_DIR/A/TEST-ME Atari Classics/Manual"
|
|
touch "$ROOT_DIR/A/TEST-ME Atari Classics/Manual/Pac-Man.pdf" # PDF — should NOT appear
|
|
touch "$ROOT_DIR/A/TEST-ME Atari Classics/Manual/Donkey Kong.pdf" # PDF — should NOT appear
|
|
|
|
# === Folder B: Platformer (root only) ===
|
|
mkdir -p "$ROOT_DIR/B/Platformer"
|
|
fake_zip "$ROOT_DIR/B/Platformer/Super Mario Bros.zip"
|
|
fake_zip "$ROOT_DIR/B/Platformer/Sonic the Hedgehog.zip"
|
|
fake_zip "$ROOT_DIR/B/Platformer/Mega Man.zip"
|
|
fake_zip "$ROOT_DIR/B/Platformer/Castlevania.zip"
|
|
|
|
# === Folder C: Puzzle (root only) ===
|
|
mkdir -p "$ROOT_DIR/C/Puzzle"
|
|
fake_zip "$ROOT_DIR/C/Puzzle/Columns.zip"
|
|
fake_zip "$ROOT_DIR/C/Puzzle/Puyo Puyo.zip"
|
|
fake_zip "$ROOT_DIR/C/Puzzle/Klax.zip"
|
|
|
|
# === Folder D: Shoot'em'up (shared with patch — rich mix) ===
|
|
mkdir -p "$ROOT_DIR/D/Shoot'em'up"
|
|
fake_zip "$ROOT_DIR/D/Shoot'em'up/R-Type.zip"
|
|
fake_zip "$ROOT_DIR/D/Shoot'em'up/Gradius.zip"
|
|
fake_zip "$ROOT_DIR/D/Shoot'em'up/1942.zip"
|
|
fake_zip "$ROOT_DIR/D/Shoot'em'up/Defender.zip"
|
|
fake_zip "$ROOT_DIR/D/Shoot'em'up/Centipede.zip"
|
|
fake_zip "$ROOT_DIR/D/Shoot'em'up/Galaxian.zip"
|
|
|
|
# === Folder E: Racing (root only) ===
|
|
mkdir -p "$ROOT_DIR/E/Racing"
|
|
fake_zip "$ROOT_DIR/E/Racing/Pole Position.zip"
|
|
fake_zip "$ROOT_DIR/E/Racing/Out Run.zip"
|
|
fake_zip "$ROOT_DIR/E/Racing/Daytona USA.zip"
|
|
|
|
# --- PATCH layer (overlay/additions) ---
|
|
echo "Creating patch layer..."
|
|
|
|
# === Folder A: TEST-ME — Atari Classics — overrides + new games ===
|
|
mkdir -p "$PATCH_DIR/A/TEST-ME Atari Classics"
|
|
fake_zip "$PATCH_DIR/A/TEST-ME Atari Classics/Pac-Man.zip" # [BOTH] override
|
|
fake_zip "$PATCH_DIR/A/TEST-ME Atari Classics/Donkey Kong.zip" # [BOTH] override
|
|
fake_zip "$PATCH_DIR/A/TEST-ME Atari Classics/Pac-Man Championship.zip" # [PTCH] new
|
|
fake_zip "$PATCH_DIR/A/TEST-ME Atari Classics/Donkey Kong Jr.zip" # [PTCH] new
|
|
|
|
# Subdir Original in patch — adds one more
|
|
mkdir -p "$PATCH_DIR/A/TEST-ME Atari Classics/Original"
|
|
fake_zip "$PATCH_DIR/A/TEST-ME Atari Classics/Original/Galaga (Original).zip" # [PTCH] in subdir
|
|
|
|
# === Folder D: Shoot'em'up — overrides + new games ===
|
|
mkdir -p "$PATCH_DIR/D/Shoot'em'up"
|
|
fake_zip "$PATCH_DIR/D/Shoot'em'up/R-Type.zip" # [BOTH] override
|
|
fake_zip "$PATCH_DIR/D/Shoot'em'up/R-Type II.zip" # [PTCH] new
|
|
fake_zip "$PATCH_DIR/D/Shoot'em'up/Salamander.zip" # [PTCH] new
|
|
|
|
# === Folder F: Patch-only folder (not in root) ===
|
|
mkdir -p "$PATCH_DIR/F/Hack & Translation"
|
|
fake_zip "$PATCH_DIR/F/Hack & Translation/Pac-Man MSX.zip"
|
|
fake_zip "$PATCH_DIR/F/Hack & Translation/Donkey Kong Remix.zip"
|
|
fake_zip "$PATCH_DIR/F/Hack & Translation/Galaga Special.zip"
|
|
|
|
echo "[OK] Demo structure created."
|
|
echo ""
|
|
echo " ROOT (DVD) PATCH (Overlay)"
|
|
echo " ────────── ───────────────"
|
|
echo " A/TEST-ME Atari Classics/ A/TEST-ME Atari Classics/"
|
|
echo " ├── Pac-Man.zip [BOTH] ├── Pac-Man.zip"
|
|
echo " ├── Donkey Kong.zip [BOTH] ├── Donkey Kong.zip"
|
|
echo " ├── Galaga.zip [ROOT] ├── Pac-Man Championship.zip [PTCH]"
|
|
echo " ├── Space Invaders.zip [ROOT] ├── Donkey Kong Jr.zip [PTCH]"
|
|
echo " ├── Frogger.zip [ROOT] │"
|
|
echo " ├── Bomberman.zip [ROOT] └── Original/"
|
|
echo " ├── Tetris.zip [ROOT] └── Galaga (Original).zip [PTCH]"
|
|
echo " ├── Original/"
|
|
echo " │ ├── Pac-Man (Original).zip [ROOT]"
|
|
echo " │ └── Donkey Kong (Original).zip [ROOT]"
|
|
echo " └── Manual/ (PDFs — should NOT appear)"
|
|
echo " ├── Pac-Man.pdf"
|
|
echo " └── Donkey Kong.pdf"
|
|
echo " B/Platformer/ (no patch)"
|
|
echo " ├── Super Mario Bros.zip [ROOT]"
|
|
echo " ├── Sonic.zip [ROOT]"
|
|
echo " ├── Mega Man.zip [ROOT]"
|
|
echo " └── Castlevania.zip [ROOT]"
|
|
echo " C/Puzzle/ (no patch)"
|
|
echo " ├── Columns.zip [ROOT]"
|
|
echo " ├── Puyo Puyo.zip [ROOT]"
|
|
echo " └── Klax.zip [ROOT]"
|
|
echo " D/Shoot'em'up/ D/Shoot'em'up/"
|
|
echo " ├── R-Type.zip [BOTH] ├── R-Type.zip"
|
|
echo " ├── Gradius.zip [ROOT] ├── R-Type II.zip [PTCH]"
|
|
echo " ├── 1942.zip [ROOT] └── Salamander.zip [PTCH]"
|
|
echo " ├── Defender.zip [ROOT]"
|
|
echo " ├── Centipede.zip [ROOT]"
|
|
echo " └── Galaxian.zip [ROOT]"
|
|
echo " E/Racing/ (no patch)"
|
|
echo " ├── Pole Position.zip [ROOT]"
|
|
echo " ├── Out Run.zip [ROOT]"
|
|
echo " └── Daytona USA.zip [ROOT]"
|
|
echo " F/Hack & Translation/ [PTCH]"
|
|
echo " ├── Pac-Man MSX.zip"
|
|
echo " ├── DK Remix.zip"
|
|
echo " └── Galaga Special.zip"
|
|
echo ""
|
|
|
|
# --- Step 3: Create launcher.config.json ---
|
|
echo "=== Writing launcher.config.json ==="
|
|
|
|
# Create a fake Hatari executable for demo (Linux: shell script with .exe extension)
|
|
HATARI_FAKE="$DEMO_DIR/hatari.exe"
|
|
cat > "$HATARI_FAKE" <<'HATEXEC'
|
|
#!/bin/bash
|
|
echo "[DEMO] Hatari would launch with: $@"
|
|
HATEXEC
|
|
chmod +x "$HATARI_FAKE"
|
|
|
|
cat > "$CONFIG_FILE" <<EOF
|
|
{
|
|
"RootDirectory": "$ROOT_DIR",
|
|
"PatchDirectory": "$PATCH_DIR",
|
|
"Hatari": {
|
|
"Executable": "$HATARI_FAKE",
|
|
"ConfigFile": "",
|
|
"ArgsTemplate": "{zip}"
|
|
}
|
|
}
|
|
EOF
|
|
echo "[OK] Config written to $CONFIG_FILE"
|
|
|
|
# Copy config to EXE output directory (app looks for it there)
|
|
EXE_DIR="$SCRIPT_DIR/src/MarcerGameDvdLauncher/bin/Release/net10.0"
|
|
cp "$CONFIG_FILE" "$EXE_DIR/launcher.config.json"
|
|
echo "[OK] Config copied to $EXE_DIR"
|
|
|
|
# --- Step 4: Launch the application ---
|
|
echo ""
|
|
echo "=== Launching MarcerGameDvdLauncher ==="
|
|
echo "Controls: Arrow keys, Enter, Backspace, ESC to exit"
|
|
echo ""
|
|
|
|
cd "$SCRIPT_DIR/src/MarcerGameDvdLauncher"
|
|
dotnet run -c Release
|