#!/usr/bin/env bash # Conform nonstandard ROM-hack filenames to the `Pokemon - [Hack].` # standard, and remove verified byte-identical duplicates. Runs on valhalla. # DRY_RUN=1 bash conform-rom-names.sh # preview (default) # DRY_RUN=0 bash conform-rom-names.sh # execute set -u ROOT=/storage1/Emulation/roms DRY_RUN=${DRY_RUN:-1} del(){ # del — delete only if it still exists local f="$ROOT/$1/$2" if [ ! -f "$f" ]; then echo "SKIP del (missing): $1/$2"; return; fi if [ "$DRY_RUN" = 1 ]; then echo "DEL $1/$2"; else rm -- "$f" && echo "DEL $1/$2"; fi } mv1(){ # mv1 — rename only if dst does NOT exist local s="$ROOT/$1/$2" d="$ROOT/$1/$3" if [ ! -f "$s" ]; then echo "SKIP mv (missing src): $1/$2"; return; fi if [ -e "$d" ]; then echo "SKIP mv (dst exists): $1/$3"; return; fi if [ "$DRY_RUN" = 1 ]; then echo "MV $1/$2 -> $3"; else mv -n -- "$s" "$d" && echo "MV $1/$2 -> $3"; fi } echo "=== DELETE: verified byte-identical duplicates of an existing [Hack] file ===" del gba "sors v1.3 .gba" del gba "Pokemon FireRed Rocket Edition.gba" del gba "Pokemon SOTS (v2.1.2).gba" del gba "U_E_Inclement_Emerald_Beta_1.1.3.gba" del gba "flora-sky-main-completed.gba" del gba "Giratina Strikes Back Full.gba" del gba "PK EMR Kaizo v2.0.gba" echo echo "=== RENAME: GBA ===" mv1 gba "CHROME1.5.gba" "Pokemon - Chrome [Hack].gba" mv1 gba "DarkVioletFinal2018V1.gba" "Pokemon - Dark Violet [Hack].gba" mv1 gba "Energized v1.0.21.gba" "Pokemon - Energized [Hack].gba" mv1 gba "Exceeded v11.5.gba" "Pokemon - Exceeded [Hack].gba" mv1 gba "Hisui Red.gba" "Pokemon - Hisui Red [Hack].gba" mv1 gba "Leaf Green Extreme Randomizer.gba" "Pokemon - Leaf Green Extreme Randomizer [Hack].gba" mv1 gba "Moon_Galaxy_Completed.gba" "Pokemon - Moon Galaxy [Hack].gba" mv1 gba "PKMN EMR PARTY RANDOMIZER.GBA" "Pokemon - Emerald Party Randomizer [Hack].gba" mv1 gba "PerfectE v5.4 PSS.gba" "Pokemon - Perfect Emerald [Hack].gba" mv1 gba "Pokemon Fire Red 898 Randomizer v1.2.3.gba" "Pokemon - Fire Red 898 Randomizer [Hack].gba" mv1 gba "Pokemon Fusion Origins Ver 3.8.gba" "Pokemon - Fusion Origins [Hack].gba" mv1 gba "Pokemon Ultimate Fusion.gba" "Pokemon - Ultimate Fusion [Hack].gba" mv1 gba "Pokemon_Infernal_Legend_beta_2.1.GBA" "Pokemon - Infernal Legend [Hack].gba" mv1 gba "Pokemon_Sunset_Orange_a1.0.gba" "Pokemon - Sunset Orange [Hack].gba" mv1 gba "QuetzalSpanishAlpha8v4.gba" "Pokemon - Quetzal (Spanish) [Hack].gba" mv1 gba "autumn orange v1.2 casual mode.gba" "Pokemon - Autumn Orange [Hack].gba" mv1 gba "fr multiverse v1.6.gba" "Pokemon - FireRed Multiverse [Hack].gba" mv1 gba "saffron-d2.gba" "Pokemon - Saffron [Hack].gba" mv1 gba "the-unown-king.gba" "Pokemon - The Unown King [Hack].gba" mv1 gba "wings of chaos alpha v2.5.gba" "Pokemon - Wings of Chaos [Hack].gba" echo echo "=== RENAME: 3DS ===" mv1 3ds "Pokemon Binary Sun v1d3d1 - Patched by Ducumon.3ds" "Pokemon - Binary Sun [Hack].3ds" mv1 3ds "Pokemon Omega Ruby QoL.cxi" "Pokemon - Omega Ruby QoL [Hack].cxi" echo echo "=== RENAME: NDS ===" mv1 nds "Rainbow-Gold-v1.5.nds" "Pokemon - Rainbow Gold [Hack].nds" mv1 nds "goldenshield.nds" "Pokemon - Golden Shield [Hack].nds" mv1 nds "Pokemon Definitive HeartGold.nds" "Pokemon - Definitive HeartGold [Hack].nds" mv1 nds "Pokemon Horror White v1.nds" "Pokemon - Horror White [Hack].nds" mv1 nds "Pokemon Moon Black 2 (v4.2.3).nds" "Pokemon - Moon Black 2 [Hack].nds" mv1 nds "Pokemon Black 2 Redux Complete (v1.4.1).nds" "Pokemon - Black 2 Redux [Hack].nds" echo echo "=== RENAME: phase 2 — web/header-identified hacks ===" # Hyper EMR LA = Hyper Emerald v5.7 "Lost Artifacts" (Destvol et al.) mv1 gba "Hyper EMR LA v5.7 bugfix 2.gba" "Pokemon - Hyper Emerald Lost Artifacts [Hack].gba" # header BPEE/FireRed-base confirmations below mv1 gba "darkfireb2.1.3.gba" "Pokemon - DarkFire [Hack].gba" mv1 gba "MioPidgey.gba" "Pokemon - MioPidgey [Hack].gba" mv1 gba "re universe.gba" "Pokemon - Re Universe [Hack].gba" mv1 gba "TRE Johto Release April 30, 2025.gba" "Pokemon - Team Rocket Edition (DragonsDen) [Hack].gba" # Elysium ships split A/B; this file is the Part B half mv1 gba "Elysium Part B (v2.0).gba" "Pokemon - Elysium (Part B) [Hack].gba" # ScalretFinal: product code CTR-P-ECLA = Alpha Sapphire base; "Scalret" = Scarlet mv1 3ds "ScalretFinal.3ds" "Pokemon - Scarlet [Hack].3ds" echo echo "=== RENAME: phase 3 — user-confirmed IDs ===" mv1 gba "Spirits.gba" "Pokemon - Spirits of the Storm [Hack].gba" mv1 nds "EotS-v1.01.nds" "Pokemon - Mystery Dungeon - Explorers of the Spirit [Hack].nds" mv1 gba "all-in-v1.0.gba" "Pokemon - All In [Hack].gba" echo echo "Done (DRY_RUN=$DRY_RUN)."