feat: ROM-hack dedup, conflict resolution, and vault library_path resync
Catalog cleanup pass across gb/gbc/gba/nds/3ds: - Standardize nonstandard hack filenames to `Pokemon - <Name> [Hack].<ext>`; remove verified byte-identical duplicates (conform-rom-names.sh). - Resolve 9 version-conflicts via side-by-side emulator comparison (resolve-version-conflicts.sh): promote newer builds, keep genuine distinct hacks, fix a mislabeled Dark Rising slot (was the Digimon crossover "Worlds Collide"), and rebuild Mega Power 5.77 + HeartGold Generations v2.0 fresh from their patches. - Resync 286 vault notes' `library_path` to the real on-disk [Hack] files and fix 15 stale platform fields (resync-vault-library-paths.py). - Regenerate MOC tables + wiki/catalog.json (396 notes). Also includes pending Playnite PC-hack setup/repair scripts. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
ae56d101b7
commit
809600a04d
@@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env bash
|
||||
# Conform nonstandard ROM-hack filenames to the `Pokemon - <Name> [Hack].<ext>`
|
||||
# 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 <platform> <file> — 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 <platform> <src> <dst> — 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)."
|
||||
Reference in New Issue
Block a user