aa686d0827
32 Game Boy, 36 GBA, and 41 Amiga titles. Amiga includes the full Lemmings trilogy plus Turrican, Monkey Island, Chaos Engine, Worms, Sensible Soccer, and more. Note: Amiga requires Kickstart firmware (not in No-Intro) to actually run.
408 lines
14 KiB
Bash
Executable File
408 lines
14 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
NO_INTRO_BASE="/mnt/nas_games/[No-Intro] PropeR 1G1R Collection (2024)/ROMs"
|
|
ROMS_DEST="/mnt/nas_games/roms"
|
|
|
|
extracted=0
|
|
skipped=0
|
|
not_found=0
|
|
|
|
extract_game() {
|
|
local platform_zip="$1"
|
|
local inner_prefix="$2"
|
|
local dest_dir="$3"
|
|
local game_name="$4"
|
|
|
|
if [[ -f "$dest_dir/$game_name" ]]; then
|
|
echo " [SKIP] $game_name"
|
|
(( skipped++ )) || true
|
|
return 0
|
|
fi
|
|
|
|
if ! unzip -Z1 "$platform_zip" "${inner_prefix}${game_name}" &>/dev/null; then
|
|
echo " [MISSING] $game_name"
|
|
(( not_found++ )) || true
|
|
return 0
|
|
fi
|
|
|
|
echo " [EXTRACT] $game_name"
|
|
unzip -j -n "$platform_zip" "${inner_prefix}${game_name}" -d "$dest_dir"
|
|
(( extracted++ )) || true
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Atari 2600
|
|
# ---------------------------------------------------------------------------
|
|
ATARI_ZIP="$NO_INTRO_BASE/Atari - 2600.zip"
|
|
ATARI_PREFIX="Atari - 2600/"
|
|
ATARI_DEST="$ROMS_DEST/atari2600"
|
|
|
|
if [[ ! -f "$ATARI_ZIP" ]]; then
|
|
echo "[WARN] Atari 2600 zip not found: $ATARI_ZIP"
|
|
else
|
|
echo "==> Atari 2600 -> $ATARI_DEST"
|
|
mkdir -p "$ATARI_DEST"
|
|
|
|
ATARI_GAMES=(
|
|
"Adventure (USA).zip"
|
|
"Asteroids (Japan, USA) (En).zip"
|
|
"Atlantis (USA).zip"
|
|
"Berzerk (Japan, USA) (En).zip"
|
|
"Boxing (USA).zip"
|
|
"Breakout ~ Breakaway IV (Japan, USA) (En).zip"
|
|
"Centipede (Japan, USA) (En).zip"
|
|
"Chopper Command (USA).zip"
|
|
"Combat ~ Tank-Plus (USA).zip"
|
|
"Demon Attack (USA) (Rev 1).zip"
|
|
"Donkey Kong (USA).zip"
|
|
"Enduro (USA).zip"
|
|
"Frogger (USA).zip"
|
|
"H.E.R.O. (USA).zip"
|
|
"Haunted House (USA).zip"
|
|
"Kaboom! (USA).zip"
|
|
"Missile Command (USA).zip"
|
|
"Moon Patrol (USA).zip"
|
|
"Pac-Man (USA).zip"
|
|
"Phoenix (USA).zip"
|
|
"Pitfall! - Pitfall Harry's Jungle Adventure (USA).zip"
|
|
"Pitfall II - Lost Caverns (USA).zip"
|
|
"River Raid (USA).zip"
|
|
"Space Invaders (USA).zip"
|
|
"Yars' Revenge (USA).zip"
|
|
)
|
|
|
|
for game in "${ATARI_GAMES[@]}"; do
|
|
extract_game "$ATARI_ZIP" "$ATARI_PREFIX" "$ATARI_DEST" "$game"
|
|
done
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# NES
|
|
# ---------------------------------------------------------------------------
|
|
NES_ZIP="$NO_INTRO_BASE/Nintendo - Nintendo Entertainment System (Headerless).zip"
|
|
NES_PREFIX="Nintendo - Nintendo Entertainment System (Headerless)/"
|
|
NES_DEST="$ROMS_DEST/nes"
|
|
|
|
if [[ ! -f "$NES_ZIP" ]]; then
|
|
echo "[WARN] NES zip not found: $NES_ZIP"
|
|
else
|
|
echo "==> NES -> $NES_DEST"
|
|
mkdir -p "$NES_DEST"
|
|
|
|
NES_GAMES=(
|
|
"Balloon Fight (USA).zip"
|
|
"Battletoads (USA).zip"
|
|
"Bionic Commando (USA).zip"
|
|
"Blaster Master (USA).zip"
|
|
"Castlevania (USA) (Rev 1).zip"
|
|
"Chip 'n Dale - Rescue Rangers (USA).zip"
|
|
"Contra (USA).zip"
|
|
"Double Dragon (USA).zip"
|
|
"Double Dragon II - The Revenge (USA) (Rev 1).zip"
|
|
"Dr. Mario (Japan, USA) (En) (Rev 1).zip"
|
|
"Duck Hunt (World).zip"
|
|
"DuckTales (USA).zip"
|
|
"Excitebike (Japan, USA) (En).zip"
|
|
"Final Fantasy (USA).zip"
|
|
"Gradius (USA).zip"
|
|
"Ice Climber (USA, Europe, Korea) (En).zip"
|
|
"Kid Icarus (USA, Europe) (Rev 1).zip"
|
|
"Kirby's Adventure (USA) (Rev 1).zip"
|
|
"Legend of Zelda, The (USA) (Rev 1).zip"
|
|
"Mega Man 2 (USA).zip"
|
|
"Mega Man 3 (USA).zip"
|
|
"Metroid (USA).zip"
|
|
"Mike Tyson's Punch-Out!! (Japan, USA) (En) (Rev 1).zip"
|
|
"Ninja Gaiden (USA).zip"
|
|
"River City Ransom (USA).zip"
|
|
"Super Mario Bros. (World).zip"
|
|
"Super Mario Bros. 3 (USA) (Rev 1).zip"
|
|
"Teenage Mutant Ninja Turtles II - The Arcade Game (USA).zip"
|
|
)
|
|
|
|
for game in "${NES_GAMES[@]}"; do
|
|
extract_game "$NES_ZIP" "$NES_PREFIX" "$NES_DEST" "$game"
|
|
done
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Genesis (Mega Drive)
|
|
# ---------------------------------------------------------------------------
|
|
GENESIS_ZIP="$NO_INTRO_BASE/Sega - Mega Drive - Genesis.zip"
|
|
GENESIS_PREFIX="Sega - Mega Drive - Genesis/"
|
|
GENESIS_DEST="$ROMS_DEST/genesis"
|
|
|
|
if [[ ! -f "$GENESIS_ZIP" ]]; then
|
|
echo "[WARN] Genesis zip not found: $GENESIS_ZIP"
|
|
else
|
|
echo "==> Genesis -> $GENESIS_DEST"
|
|
mkdir -p "$GENESIS_DEST"
|
|
|
|
GENESIS_GAMES=(
|
|
"Aladdin (USA).zip"
|
|
"Altered Beast (Japan, USA) (En) (Rev A).zip"
|
|
"Beyond Oasis (USA).zip"
|
|
"Castle of Illusion Starring Mickey Mouse (USA, Europe).zip"
|
|
"Castlevania - Bloodlines (USA).zip"
|
|
"Comix Zone (USA).zip"
|
|
"Contra - Hard Corps (USA, Korea) (En).zip"
|
|
"Earthworm Jim (USA).zip"
|
|
"Ecco the Dolphin (USA, Europe, Korea) (En).zip"
|
|
"Golden Axe (World) (Rev A).zip"
|
|
"Golden Axe II (World).zip"
|
|
"Gunstar Heroes (USA).zip"
|
|
"Lion King, The (World).zip"
|
|
"Mortal Kombat (World).zip"
|
|
"Mortal Kombat II (World).zip"
|
|
"NBA Jam - Tournament Edition (World).zip"
|
|
"Phantasy Star II (USA, Europe) (Rev A).zip"
|
|
"QuackShot Starring Donald Duck (World) (Rev A).zip"
|
|
"Ristar (USA, Europe).zip"
|
|
"Road Rash II (USA, Europe) (RR206).zip"
|
|
"Rocket Knight Adventures (USA).zip"
|
|
"Shining Force (USA).zip"
|
|
"Sonic The Hedgehog (Japan, Europe, Korea) (En).zip"
|
|
"Sonic The Hedgehog 2 (World) (Rev B).zip"
|
|
"Sonic The Hedgehog 3 (USA).zip"
|
|
"Streets of Rage (World) (Rev A).zip"
|
|
"Streets of Rage 2 (USA).zip"
|
|
"ToeJam & Earl (USA, Europe, Korea) (En).zip"
|
|
"Vectorman (USA, Europe).zip"
|
|
"Virtua Racing (USA).zip"
|
|
)
|
|
|
|
for game in "${GENESIS_GAMES[@]}"; do
|
|
extract_game "$GENESIS_ZIP" "$GENESIS_PREFIX" "$GENESIS_DEST" "$game"
|
|
done
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# SNES
|
|
# ---------------------------------------------------------------------------
|
|
SNES_ZIP="$NO_INTRO_BASE/Nintendo - Super Nintendo Entertainment System.zip"
|
|
SNES_PREFIX="Nintendo - Super Nintendo Entertainment System/"
|
|
SNES_DEST="$ROMS_DEST/snes"
|
|
|
|
if [[ ! -f "$SNES_ZIP" ]]; then
|
|
echo "[WARN] SNES zip not found: $SNES_ZIP"
|
|
else
|
|
echo "==> SNES -> $SNES_DEST"
|
|
mkdir -p "$SNES_DEST"
|
|
|
|
SNES_GAMES=(
|
|
"ActRaiser (USA).zip"
|
|
"Breath of Fire II (USA).zip"
|
|
"Chrono Trigger (USA).zip"
|
|
"Contra III - The Alien Wars (USA).zip"
|
|
"Donkey Kong Country (USA) (Rev 2).zip"
|
|
"Donkey Kong Country 2 - Diddy's Kong Quest (USA) (En,Fr) (Rev 1).zip"
|
|
"EarthBound (USA).zip"
|
|
"F-Zero (USA).zip"
|
|
"Final Fantasy III (USA) (Rev 1).zip"
|
|
"Illusion of Gaia (USA).zip"
|
|
"Kirby Super Star (USA).zip"
|
|
"Legend of Zelda, The - A Link to the Past (USA).zip"
|
|
"Mega Man X (USA) (Rev 1).zip"
|
|
"Mega Man X2 (USA).zip"
|
|
"Pilotwings (USA).zip"
|
|
"Secret of Mana (USA).zip"
|
|
"Soul Blazer (USA).zip"
|
|
"Star Fox (USA) (Rev 2).zip"
|
|
"Street Fighter II Turbo (USA) (Rev 1).zip"
|
|
"Super Bomberman 2 (USA).zip"
|
|
"Super Castlevania IV (USA).zip"
|
|
"Super Mario All-Stars + Super Mario World (USA).zip"
|
|
"Super Mario Kart (USA).zip"
|
|
"Super Mario RPG - Legend of the Seven Stars (USA).zip"
|
|
"Super Mario World 2 - Yoshi's Island (USA) (Rev 1).zip"
|
|
"Super Metroid (Japan, USA) (En,Ja).zip"
|
|
"Super Punch-Out!! (USA).zip"
|
|
)
|
|
|
|
for game in "${SNES_GAMES[@]}"; do
|
|
extract_game "$SNES_ZIP" "$SNES_PREFIX" "$SNES_DEST" "$game"
|
|
done
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Game Boy
|
|
# ---------------------------------------------------------------------------
|
|
GB_ZIP="$NO_INTRO_BASE/Nintendo - Game Boy.zip"
|
|
GB_PREFIX="Nintendo - Game Boy/"
|
|
GB_DEST="$ROMS_DEST/gb"
|
|
|
|
if [[ ! -f "$GB_ZIP" ]]; then
|
|
echo "[WARN] Game Boy zip not found: $GB_ZIP"
|
|
else
|
|
echo "==> Game Boy -> $GB_DEST"
|
|
mkdir -p "$GB_DEST"
|
|
|
|
GB_GAMES=(
|
|
"Alleyway (World).zip"
|
|
"Balloon Kid (USA, Europe).zip"
|
|
"Castlevania - The Adventure (USA).zip"
|
|
"Castlevania II - Belmont's Revenge (USA, Europe).zip"
|
|
"Castlevania Legends (USA, Europe) (SGB Enhanced).zip"
|
|
"Contra - The Alien Wars (USA) (SGB Enhanced).zip"
|
|
"Donkey Kong Land 2 (USA, Europe) (SGB Enhanced).zip"
|
|
"Dr. Mario (World) (Rev 1).zip"
|
|
"Final Fantasy Adventure (USA).zip"
|
|
"Final Fantasy Legend II (USA).zip"
|
|
"Final Fantasy Legend III (USA).zip"
|
|
"Game & Watch Gallery (USA) (Rev 1) (SGB Enhanced).zip"
|
|
"Gargoyle's Quest (USA, Europe).zip"
|
|
"Kid Dracula (USA, Europe).zip"
|
|
"Kirby's Dream Land (USA, Europe).zip"
|
|
"Kirby's Dream Land 2 (USA, Europe) (SGB Enhanced).zip"
|
|
"Kirby's Pinball Land (USA, Europe).zip"
|
|
"Legend of Zelda, The - Link's Awakening (USA, Europe) (Rev 2).zip"
|
|
"Mario's Picross (USA, Europe) (SGB Enhanced).zip"
|
|
"Mega Man II (USA).zip"
|
|
"Mega Man III (USA).zip"
|
|
"Mega Man IV (USA).zip"
|
|
"Mega Man V (USA) (SGB Enhanced).zip"
|
|
"Metroid II - Return of Samus (World).zip"
|
|
"Pokemon - Blue Version (USA, Europe) (SGB Enhanced).zip"
|
|
"Pokemon - Red Version (USA, Europe) (SGB Enhanced).zip"
|
|
"Pokemon - Yellow Version - Special Pikachu Edition (USA, Europe) (CGB+SGB Enhanced).zip"
|
|
"Super Mario Land (World) (Rev 1).zip"
|
|
"Super Mario Land 2 - 6 Golden Coins (USA, Europe) (Rev 2).zip"
|
|
"Tetris (World) (Rev 1).zip"
|
|
"Wario Land - Super Mario Land 3 (World).zip"
|
|
"Wave Race (USA, Europe).zip"
|
|
)
|
|
|
|
for game in "${GB_GAMES[@]}"; do
|
|
extract_game "$GB_ZIP" "$GB_PREFIX" "$GB_DEST" "$game"
|
|
done
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Game Boy Advance
|
|
# ---------------------------------------------------------------------------
|
|
GBA_ZIP="$NO_INTRO_BASE/Nintendo - Game Boy Advance.zip"
|
|
GBA_PREFIX="Nintendo - Game Boy Advance/"
|
|
GBA_DEST="$ROMS_DEST/gba"
|
|
|
|
if [[ ! -f "$GBA_ZIP" ]]; then
|
|
echo "[WARN] GBA zip not found: $GBA_ZIP"
|
|
else
|
|
echo "==> Game Boy Advance -> $GBA_DEST"
|
|
mkdir -p "$GBA_DEST"
|
|
|
|
GBA_GAMES=(
|
|
"Advance Wars (USA) (Rev 1).zip"
|
|
"Advance Wars 2 - Black Hole Rising (USA).zip"
|
|
"Castlevania - Aria of Sorrow (USA).zip"
|
|
"Classic NES Series - Castlevania (USA).zip"
|
|
"Classic NES Series - Dr. Mario (USA, Europe).zip"
|
|
"Classic NES Series - Metroid (USA, Europe).zip"
|
|
"Classic NES Series - The Legend of Zelda (USA, Europe).zip"
|
|
"Dragon Ball Z - Supersonic Warriors (USA).zip"
|
|
"Final Fantasy I & II - Dawn of Souls (USA).zip"
|
|
"Final Fantasy IV Advance (USA).zip"
|
|
"Final Fantasy V Advance (USA).zip"
|
|
"Final Fantasy VI Advance (USA).zip"
|
|
"Fire Emblem (USA, Australia).zip"
|
|
"Fire Emblem - The Sacred Stones (USA, Australia).zip"
|
|
"Golden Sun (USA, Europe).zip"
|
|
"Golden Sun - The Lost Age (USA, Europe).zip"
|
|
"Kirby & The Amazing Mirror (USA).zip"
|
|
"Kirby - Nightmare in Dream Land (USA).zip"
|
|
"Legend of Zelda, The - A Link to the Past & Four Swords (USA).zip"
|
|
"Legend of Zelda, The - The Minish Cap (USA).zip"
|
|
"Mario & Luigi - Superstar Saga (USA).zip"
|
|
"Mario Golf - Advance Tour (USA).zip"
|
|
"Mario vs. Donkey Kong (USA, Australia).zip"
|
|
"Metroid Fusion (USA).zip"
|
|
"Metroid - Zero Mission (USA).zip"
|
|
"Mother 3 (Japan).zip"
|
|
"Pokemon - Ruby Version (USA, Europe) (Rev 2).zip"
|
|
"Pokemon - Sapphire Version (USA, Europe) (Rev 2).zip"
|
|
"Sonic Advance (USA) (En,Ja).zip"
|
|
"Sonic Advance 2 (USA) (En,Ja,Fr,De,Es,It).zip"
|
|
"Sonic Advance 3 (USA) (En,Ja,Fr,De,Es,It).zip"
|
|
"Super Mario Advance (USA, Europe).zip"
|
|
"Super Mario Advance 2 - Super Mario World (USA, Australia).zip"
|
|
"Super Mario Advance 3 - Yoshi's Island (USA).zip"
|
|
"Wario Land 4 (USA, Europe).zip"
|
|
"WarioWare - Twisted! (USA, Australia).zip"
|
|
)
|
|
|
|
for game in "${GBA_GAMES[@]}"; do
|
|
extract_game "$GBA_ZIP" "$GBA_PREFIX" "$GBA_DEST" "$game"
|
|
done
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Amiga
|
|
# NOTE: Amiga emulation requires Kickstart ROM firmware (not included in
|
|
# No-Intro). Place kickstart .rom files in /romm/library/bios/ in the
|
|
# RomM container. Source from Amiga Forever (Cloanto) or real hardware.
|
|
# ---------------------------------------------------------------------------
|
|
AMIGA_ZIP="$NO_INTRO_BASE/Commodore - Amiga.zip"
|
|
AMIGA_PREFIX="Commodore - Amiga/"
|
|
AMIGA_DEST="$ROMS_DEST/amiga"
|
|
|
|
if [[ ! -f "$AMIGA_ZIP" ]]; then
|
|
echo "[WARN] Amiga zip not found: $AMIGA_ZIP"
|
|
else
|
|
echo "==> Amiga -> $AMIGA_DEST"
|
|
mkdir -p "$AMIGA_DEST"
|
|
|
|
AMIGA_GAMES=(
|
|
"Alien Breed (Europe).zip"
|
|
"Alien Breed - Special Edition 92 (Europe).zip"
|
|
"Alien Breed II - The Horror Continues (Europe).zip"
|
|
"All New World of Lemmings (Europe) (AGA).zip"
|
|
"Another World (Europe).zip"
|
|
"Body Blows (Europe) (v2.0).zip"
|
|
"Chaos Engine, The (Europe).zip"
|
|
"Civilization (Europe) (v855e.01) (AGA).zip"
|
|
"Elite (Europe) (v2.0).zip"
|
|
"Frontier - Elite II (Europe) (2.9.1992).zip"
|
|
"Gods (Europe).zip"
|
|
"James Pond - Underwater Agent (Europe).zip"
|
|
"James Pond II - Codename RoboCod (Europe) (Budget - Kixx).zip"
|
|
"Lemmings (USA).zip"
|
|
"Lemmings 2 - The Tribes (USA).zip"
|
|
"Lotus Esprit Turbo Challenge (Europe).zip"
|
|
"Monkey Island 2 - LeChuck's Revenge (Europe).zip"
|
|
"Oh No! More Lemmings (USA) (Addon).zip"
|
|
"Oscar (Europe).zip"
|
|
"Pinball Dreams (Europe).zip"
|
|
"Pinball Illusions (Europe) (AGA).zip"
|
|
"Populous (USA).zip"
|
|
"Populous II - Trials of the Olympian Gods (Europe).zip"
|
|
"Rick Dangerous (Europe) (Amiga + PC) (Budget - Kixx).zip"
|
|
"Rick Dangerous 2 (Europe).zip"
|
|
"Secret of Monkey Island, The (Europe) (v1.2).zip"
|
|
"Sensible Soccer - European Champions (Europe) (En,Fr,De,It) (v1.1).zip"
|
|
"Sensible World of Soccer '96-'97 (Europe).zip"
|
|
"Shadow of the Beast (Europe).zip"
|
|
"Shadow of the Beast II (Europe).zip"
|
|
"Shadow of the Beast III (USA).zip"
|
|
"Speedball (USA) (v1.05).zip"
|
|
"Speedball 2 - Brutal Deluxe (USA).zip"
|
|
"Superfrog (Europe).zip"
|
|
"Syndicate (Europe) (En,Fr,It).zip"
|
|
"Theme Park (Europe) (En,Fr,De,It).zip"
|
|
"Turrican (USA).zip"
|
|
"Turrican II - The Final Fight (Europe).zip"
|
|
"Turrican 3 (Europe).zip"
|
|
"Worms (Europe) (En,Fr,De).zip"
|
|
"Zool 2 (Europe) (AGA).zip"
|
|
)
|
|
|
|
for game in "${AMIGA_GAMES[@]}"; do
|
|
extract_game "$AMIGA_ZIP" "$AMIGA_PREFIX" "$AMIGA_DEST" "$game"
|
|
done
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Summary
|
|
# ---------------------------------------------------------------------------
|
|
echo ""
|
|
echo "Done. extracted=$extracted skipped=$skipped not_found=$not_found"
|