feat: spin off Pokémon ROM-hack catalog from homelabstack
Curated knowledge base + pipeline for the valhalla Pokémon ROM-hack collection, moved out of the homelabstack infra repo on 2026-06-06 so that repo stays focused on the homelab. - pokemon-romhack-vault/ Obsidian vault: 75 hack notes + Index/Types/Platform MOCs (generated by build-romhack-vault.py) - scripts/ build-romhack-vault, romhack-import/fetch/apply - pokemon-romhacks-wanted.md manual-acquisition list (gated hacks) - drop/ gitignored ~1.3GB binary staging area The ROMs live on valhalla (/storage1/Emulation) served by the RomM stack, which stays in homelabstack (stacks/roms).
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
# Keep files Unix-clean (LF). The romhack-*.py scripts run on the Linux host
|
||||
# (valhalla) via SSH, so CRLF must never sneak in.
|
||||
* text=auto eol=lf
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
# Large ROM/patch binaries — staging area for scripts/romhack-import.py.
|
||||
# Never commit ROMs/patches; this folder is per-machine scratch.
|
||||
drop/
|
||||
|
||||
# OS / editor cruft
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
*.swp
|
||||
*~
|
||||
|
||||
# Local scratch
|
||||
*.tmp
|
||||
*.log
|
||||
@@ -0,0 +1,65 @@
|
||||
# Pokémon ROM Hacks
|
||||
|
||||
Curated knowledge base + tooling for the Pokémon ROM-hack collection in the
|
||||
valhalla homelab library. **Spun off from the `homelabstack` repo on 2026-06-06**
|
||||
to keep that repo focused on infrastructure.
|
||||
|
||||
The ROM-hacks themselves live on **valhalla** under the EmuDeck/RomM tree at
|
||||
`/storage1/Emulation/roms/<platform>/Hacks/` and are served by the RomM stack
|
||||
(`roms.ginnoir.com`) — that deployment stays in `homelabstack` (`stacks/roms/`).
|
||||
This repo is the *catalog + pipeline*, not the ROMs.
|
||||
|
||||
## Layout
|
||||
|
||||
| Path | What |
|
||||
|---|---|
|
||||
| `pokemon-romhack-vault/` | Obsidian vault — one note per hack (75), plus Index/Types/Platform MOCs. Open this folder as an Obsidian vault. **Generated** by `scripts/build-romhack-vault.py`. |
|
||||
| `pokemon-romhacks-wanted.md` | Manual-acquisition list — worthwhile hacks gated behind Discord/hackdex/Drive that can't be auto-fetched. |
|
||||
| `scripts/build-romhack-vault.py` | Regenerates `pokemon-romhack-vault/` from the in-script `HACKS` dataset. Edit the dataset, re-run. |
|
||||
| `scripts/romhack-import.py` | Import a drop folder of mixed ROMs/patches/docs into the valhalla library (validate, clean-name, apply patches, archive). Runs on valhalla. |
|
||||
| `scripts/romhack-fetch.py` | Acquire + patch + place worthwhile hacks from direct (non-gated) sources. Manifest-driven. Runs on valhalla. |
|
||||
| `scripts/romhack-apply.py` | Apply a single IPS/BPS/UPS patch to a base ROM with checksum verification. |
|
||||
| `drop/` | **gitignored** staging area (~1.3 GB) of ROM/patch binaries pending import. Never committed. |
|
||||
|
||||
## Regenerating the vault
|
||||
|
||||
```
|
||||
python scripts/build-romhack-vault.py
|
||||
```
|
||||
|
||||
Writes the vault to `pokemon-romhack-vault/` (the output path is resolved relative
|
||||
to `scripts/`, so keep `scripts/` a sibling of the vault dir). The in-script
|
||||
`HACKS` dataset is the single source of truth — add a row and re-run to add a hack.
|
||||
|
||||
### Vault schema
|
||||
|
||||
Each hack note carries Obsidian **properties** (`platform`, `base`, `version`,
|
||||
`status`, `type`, `generation`, `source`) so the Dataview/Bases plugins work, and
|
||||
**tags** (`#platform/gba`, `#type/difficulty`, `#status/complete`, `#base/firered`)
|
||||
so search/graph work with zero plugins. `library_path` points at the file under
|
||||
`roms/<platform>/Hacks/` on valhalla.
|
||||
|
||||
## Live Obsidian vault
|
||||
|
||||
A richer working copy of this catalog lives in ginnoir's self-hosted Obsidian
|
||||
vault (CouchDB / obsidian-livesync, `obsidian.ginnoir.com`) under
|
||||
**`Pokémon ROM Hacks/`**:
|
||||
|
||||
```
|
||||
Pokémon ROM Hacks/
|
||||
_Claude.md — ROM-hack vault ops: schema, update patterns, new-hack checklist
|
||||
Index.md — all 75 hacks (Dataview + static)
|
||||
Play Queue.md — play-tracking dashboard
|
||||
Hacks/ — 75 notes, one per hack
|
||||
Bases/ — per-base MOCs (FireRed / Emerald / Crystal / Ruby / NDS)
|
||||
Platforms/ — per-system MOCs (GBA / GBC / GB / NDS)
|
||||
```
|
||||
|
||||
Access it via the Obsidian MCP (`mcp__obsidian__*`). The CouchDB sync stack
|
||||
itself is deployed from `homelabstack` (`stacks/notes/`).
|
||||
|
||||
## Acquisition policy
|
||||
|
||||
Pre-3DS handhelds (gb/gbc/gba/nds) + pre-Wii consoles. Direct, non-anti-bot
|
||||
sources only for auto-fetch; gated hacks go in `pokemon-romhacks-wanted.md` for
|
||||
manual hand-off. No offensive/"shitpost" content (e.g. Clover excluded).
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Adventure - Red Chapter"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "Beta 15"
|
||||
status: "Complete (beta)"
|
||||
type: ["New Experience"]
|
||||
generation: "Gen 1–6 mons"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Adventure - Red Chapter (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-adventure-red-chapter.331313/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/completebeta", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Adventure - Red Chapter
|
||||
|
||||
> [!info] New Experience — **Complete (beta)**
|
||||
> Game Boy Advance · base **FireRed** · version **Beta 15** · Gen 1–6 mons
|
||||
|
||||
## Summary
|
||||
Based on the Pokémon Adventures (Pokémon Special) manga — play through Red's story with manga events. Beta 15 is the full, finished beta.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-adventure-red-chapter.331313/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Adventure%20-%20Red%20Chapter%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Adventure - Red Chapter (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Aesthetic Red"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "1.1"
|
||||
status: "Complete"
|
||||
type: ["Cosmetic", "Vanilla+"]
|
||||
generation: "Gen 1"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Aesthetic Red (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Aesthetic%20Red%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/complete", "type/cosmetic", "type/vanilla+"]
|
||||
---
|
||||
# Pokémon Aesthetic Red
|
||||
|
||||
> [!info] Cosmetic · Vanilla+ — **Complete**
|
||||
> Game Boy Advance · base **FireRed** · version **1.1** · Gen 1
|
||||
|
||||
## Summary
|
||||
A visual + musical overhaul of FireRed — restyled tiles, sprites, and soundtrack while keeping vanilla gameplay.
|
||||
|
||||
## Type
|
||||
[[Types#Cosmetic|Cosmetic]] [[Types#Vanilla+|Vanilla+]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Aesthetic%20Red%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Aesthetic Red (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Ambrosia"
|
||||
platform: GBC
|
||||
base: "Crystal"
|
||||
version: "2.4.0"
|
||||
status: "Ongoing"
|
||||
type: ["New Experience"]
|
||||
generation: "Gen 2 style"
|
||||
library_path: "roms/gbc/Hacks/Pokemon - Ambrosia (Hack).gbc"
|
||||
source: "https://www.pokecommunity.com/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gbc", "base/crystal", "status/ongoing", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Ambrosia
|
||||
|
||||
> [!info] New Experience — **Ongoing**
|
||||
> Game Boy Color · base **Crystal** · version **2.4.0** · Gen 2 style
|
||||
|
||||
## Summary
|
||||
An ambitious Crystal-engine hack with a new region, expanded dex, and modernized features pushed onto Gen 2 hardware.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Ambrosia%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gbc/Hacks/Pokemon - Ambrosia (Hack).gbc` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Amethyst"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "1.2.0"
|
||||
status: "Ongoing"
|
||||
type: ["Expansion", "New Experience"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Amethyst (Hack).gba"
|
||||
source: "https://www.hackdex.app/hack/pokemon-amethyst"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/ongoing", "type/expansion", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Amethyst
|
||||
|
||||
> [!info] Expansion · New Experience — **Ongoing**
|
||||
> Game Boy Advance · base **Emerald** · version **1.2.0** · Multi-gen
|
||||
|
||||
## Summary
|
||||
A pokeemerald-expansion adventure with a new region/story and modern mechanics.
|
||||
|
||||
## Type
|
||||
[[Types#Expansion|Expansion]] [[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.hackdex.app/hack/pokemon-amethyst
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Amethyst%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Amethyst (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Blaze Black 2 Redux"
|
||||
platform: NDS
|
||||
base: "Black 2"
|
||||
version: "1.3.0"
|
||||
status: "Complete"
|
||||
type: ["Vanilla+", "Difficulty", "Expansion"]
|
||||
generation: "Gen 1–5 mons"
|
||||
library_path: "roms/nds/Hacks/Pokemon - Blaze Black 2 Redux (Hack).nds"
|
||||
source: "https://www.pokecommunity.com/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/nds", "base/black2", "status/complete", "type/vanilla+", "type/difficulty", "type/expansion"]
|
||||
---
|
||||
# Pokémon Blaze Black 2 Redux
|
||||
|
||||
> [!info] Vanilla+ · Difficulty · Expansion — **Complete**
|
||||
> Nintendo DS · base **Black 2** · version **1.3.0** · Gen 1–5 mons
|
||||
|
||||
## Summary
|
||||
A community 'Redux' fork of Drayano's Blaze Black 2 — expanded availability, rebalanced difficulty, and extra content.
|
||||
|
||||
## Type
|
||||
[[Types#Vanilla+|Vanilla+]] [[Types#Difficulty|Difficulty]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Blaze%20Black%202%20Redux%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/nds/Hacks/Pokemon - Blaze Black 2 Redux (Hack).nds` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Blaze Black"
|
||||
platform: NDS
|
||||
base: "Black"
|
||||
version: "—"
|
||||
status: "Complete"
|
||||
type: ["Vanilla+", "Difficulty"]
|
||||
generation: "Gen 1–5 mons"
|
||||
library_path: "roms/nds/Hacks/Pokemon - Blaze Black (Hack).nds"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-blaze-black-volt-white.252355/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/nds", "base/black", "status/complete", "type/vanilla+", "type/difficulty"]
|
||||
---
|
||||
# Pokémon Blaze Black
|
||||
|
||||
> [!info] Vanilla+ · Difficulty — **Complete**
|
||||
> Nintendo DS · base **Black** · version **—** · Gen 1–5 mons
|
||||
|
||||
## Summary
|
||||
Drayano's Black overhaul — every species catchable in-game, boosted gym/E4 teams, and QoL. Pairs with Volt White.
|
||||
|
||||
## Type
|
||||
[[Types#Vanilla+|Vanilla+]] [[Types#Difficulty|Difficulty]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-blaze-black-volt-white.252355/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Blaze%20Black%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/nds/Hacks/Pokemon - Blaze Black (Hack).nds` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Brown"
|
||||
platform: GB
|
||||
base: "Red"
|
||||
version: "1.1"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Gen 1+"
|
||||
library_path: "roms/gb/Hacks/Pokemon - Brown (Hack).gb"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-brown.27915/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gb", "base/red", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Brown
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy · base **Red** · version **1.1** · Gen 1+
|
||||
|
||||
## Summary
|
||||
One of the oldest and most influential hacks. A brand-new Rijon region with new towns, gyms, and a custom dex built on Gen 1, by Koolboyman (who later made Prism).
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-brown.27915/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Brown%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gb/Hacks/Pokemon - Brown (Hack).gb` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Crystal Advance Redux"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "2026-05-06"
|
||||
status: "Ongoing"
|
||||
type: ["Demake", "Vanilla+"]
|
||||
generation: "Gen 2 on GBA"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Crystal Advance Redux (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Crystal%20Advance%20Redux%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/ongoing", "type/demake", "type/vanilla+"]
|
||||
---
|
||||
# Pokémon Crystal Advance Redux
|
||||
|
||||
> [!info] Demake · Vanilla+ — **Ongoing**
|
||||
> Game Boy Advance · base **Emerald** · version **2026-05-06** · Gen 2 on GBA
|
||||
|
||||
## Summary
|
||||
Pokémon Crystal rebuilt on the GBA (pokeemerald) with Gen-3+ engine conveniences — Johto with modern QoL.
|
||||
|
||||
## Type
|
||||
[[Types#Demake|Demake]] [[Types#Vanilla+|Vanilla+]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Crystal%20Advance%20Redux%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Crystal Advance Redux (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Crystal Clear"
|
||||
platform: GBC
|
||||
base: "Crystal"
|
||||
version: "2.5.7"
|
||||
status: "Complete"
|
||||
type: ["New Experience", "QoL"]
|
||||
generation: "Gen 1–2"
|
||||
library_path: "roms/gbc/Hacks/Pokemon - Crystal Clear (Hack).gbc"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-crystal-clear.382197/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gbc", "base/crystal", "status/complete", "type/newexperience", "type/qol"]
|
||||
---
|
||||
# Pokémon Crystal Clear
|
||||
|
||||
> [!info] New Experience · QoL — **Complete**
|
||||
> Game Boy Color · base **Crystal** · version **2.5.7** · Gen 1–2
|
||||
|
||||
## Summary
|
||||
Open-world Crystal — pick any starter, tackle gyms in any order, roam Johto+Kanto freely. A landmark open-world take on Gen 2 by ShockSlayer.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#QoL|QoL]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-crystal-clear.382197/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Crystal%20Clear%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gbc/Hacks/Pokemon - Crystal Clear (Hack).gbc` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Crystal Inheritance"
|
||||
platform: GBC
|
||||
base: "Crystal"
|
||||
version: "1.0.3"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Gen 2+"
|
||||
library_path: "roms/gbc/Hacks/Pokemon - Crystal Inheritance (Hack).gbc"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Crystal%20Inheritance%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gbc", "base/crystal", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Crystal Inheritance
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy Color · base **Crystal** · version **1.0.3** · Gen 2+
|
||||
|
||||
## Summary
|
||||
A Crystal-based adventure with a new story and updated rosters/mechanics within the Gen 2 framework.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Crystal%20Inheritance%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gbc/Hacks/Pokemon - Crystal Inheritance (Hack).gbc` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Crystal Kaizo"
|
||||
platform: GBC
|
||||
base: "Crystal"
|
||||
version: "1.0"
|
||||
status: "Complete"
|
||||
type: ["Difficulty"]
|
||||
generation: "Gen 2"
|
||||
library_path: "roms/gbc/Hacks/Pokemon - Crystal Kaizo (Hack).gbc"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Crystal%20Kaizo%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gbc", "base/crystal", "status/complete", "type/difficulty"]
|
||||
---
|
||||
# Pokémon Crystal Kaizo
|
||||
|
||||
> [!info] Difficulty — **Complete**
|
||||
> Game Boy Color · base **Crystal** · version **1.0** · Gen 2
|
||||
|
||||
## Summary
|
||||
The definitive Gen 2 kaizo: every trainer is a brutal, fully-EV'd gauntlet. Companion to the Gold/Silver Kaizo line.
|
||||
|
||||
## Type
|
||||
[[Types#Difficulty|Difficulty]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Crystal%20Kaizo%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gbc/Hacks/Pokemon - Crystal Kaizo (Hack).gbc` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Dark Rising - Order Destroyed"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "Complete"
|
||||
status: "Complete"
|
||||
type: ["New Experience", "Difficulty"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Dark Rising - Order Destroyed (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-dark-rising-series.341667/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/complete", "type/newexperience", "type/difficulty"]
|
||||
---
|
||||
# Pokémon Dark Rising - Order Destroyed
|
||||
|
||||
> [!info] New Experience · Difficulty — **Complete**
|
||||
> Game Boy Advance · base **FireRed** · version **Complete** · Multi-gen
|
||||
|
||||
## Summary
|
||||
A spin-off entry in the Dark Rising saga.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#Difficulty|Difficulty]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-dark-rising-series.341667/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Dark%20Rising%20-%20Order%20Destroyed%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Dark Rising - Order Destroyed (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Dark Rising 2"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "Complete"
|
||||
status: "Complete"
|
||||
type: ["New Experience", "Difficulty"]
|
||||
generation: "Multi-gen + fakemon"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Dark Rising 2 (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-dark-rising-series.341667/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/complete", "type/newexperience", "type/difficulty"]
|
||||
---
|
||||
# Pokémon Dark Rising 2
|
||||
|
||||
> [!info] New Experience · Difficulty — **Complete**
|
||||
> Game Boy Advance · base **FireRed** · version **Complete** · Multi-gen + fakemon
|
||||
|
||||
## Summary
|
||||
Sequel to Dark Rising — bigger story, more fakemon, same punishing difficulty.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#Difficulty|Difficulty]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-dark-rising-series.341667/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Dark%20Rising%202%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Dark Rising 2 (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Dark Rising"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "1 (Origins)"
|
||||
status: "Complete"
|
||||
type: ["New Experience", "Difficulty"]
|
||||
generation: "Multi-gen + fakemon"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Dark Rising (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-dark-rising-series.341667/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/complete", "type/newexperience", "type/difficulty"]
|
||||
---
|
||||
# Pokémon Dark Rising
|
||||
|
||||
> [!info] New Experience · Difficulty — **Complete**
|
||||
> Game Boy Advance · base **FireRed** · version **1 (Origins)** · Multi-gen + fakemon
|
||||
|
||||
## Summary
|
||||
Notoriously hard story-driven hack with a dark plot, fakemon, and multi-gen mons. The Origins build is the remastered DR1.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#Difficulty|Difficulty]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-dark-rising-series.341667/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Dark%20Rising%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Dark Rising (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Elite Redux"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "2.65.3b"
|
||||
status: "Ongoing"
|
||||
type: ["Expansion", "Difficulty"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Elite Redux (Hack).gba"
|
||||
source: "https://www.hackdex.app/hack/elite-redux"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/ongoing", "type/expansion", "type/difficulty"]
|
||||
---
|
||||
# Pokémon Elite Redux
|
||||
|
||||
> [!info] Expansion · Difficulty — **Ongoing**
|
||||
> Game Boy Advance · base **Emerald** · version **2.65.3b** · Multi-gen
|
||||
|
||||
## Summary
|
||||
A theorycrafter's playground: every species gets multiple abilities, a vastly expanded movepool, and brutal fights. Deep team-building over story.
|
||||
|
||||
## Type
|
||||
[[Types#Expansion|Expansion]] [[Types#Difficulty|Difficulty]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.hackdex.app/hack/elite-redux
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Elite%20Redux%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Elite Redux (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Emerald Azure"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "0.5.3"
|
||||
status: "Beta"
|
||||
type: ["New Experience", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Emerald Azure (Hack).gba"
|
||||
source: "https://www.hackdex.app/hack/pokemon-emerald-azure"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/beta", "type/newexperience", "type/expansion"]
|
||||
---
|
||||
# Pokémon Emerald Azure
|
||||
|
||||
> [!info] New Experience · Expansion — **Beta**
|
||||
> Game Boy Advance · base **Emerald** · version **0.5.3** · Multi-gen
|
||||
|
||||
## Summary
|
||||
An in-development new-region Emerald-expansion hack (early/beta).
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.hackdex.app/hack/pokemon-emerald-azure
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Emerald%20Azure%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Emerald Azure (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Emerald Extended Cut"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "Classic+ 1.3"
|
||||
status: "Complete"
|
||||
type: ["Vanilla+", "QoL"]
|
||||
generation: "Gen 3"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Emerald Extended Cut (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Emerald%20Extended%20Cut%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/complete", "type/vanilla+", "type/qol"]
|
||||
---
|
||||
# Pokémon Emerald Extended Cut
|
||||
|
||||
> [!info] Vanilla+ · QoL — **Complete**
|
||||
> Game Boy Advance · base **Emerald** · version **Classic+ 1.3** · Gen 3
|
||||
|
||||
## Summary
|
||||
Emerald with restored/expanded content and QoL while staying close to the original Hoenn experience.
|
||||
|
||||
## Type
|
||||
[[Types#Vanilla+|Vanilla+]] [[Types#QoL|QoL]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Emerald%20Extended%20Cut%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Emerald Extended Cut (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Emerald Imperium"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "1.3.1"
|
||||
status: "Complete"
|
||||
type: ["Expansion", "Difficulty"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Emerald Imperium (Hack).gba"
|
||||
source: "https://www.hackdex.app/hack/emerald-imperium"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/complete", "type/expansion", "type/difficulty"]
|
||||
---
|
||||
# Pokémon Emerald Imperium
|
||||
|
||||
> [!info] Expansion · Difficulty — **Complete**
|
||||
> Game Boy Advance · base **Emerald** · version **1.3.1** · Multi-gen
|
||||
|
||||
## Summary
|
||||
A content- and postgame-heavy Emerald-expansion hack with challenging fights and lots of endgame.
|
||||
|
||||
## Type
|
||||
[[Types#Expansion|Expansion]] [[Types#Difficulty|Difficulty]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.hackdex.app/hack/emerald-imperium
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Emerald%20Imperium%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Emerald Imperium (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Emerald Kaizo"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "—"
|
||||
status: "Complete"
|
||||
type: ["Difficulty"]
|
||||
generation: "Gen 3"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Emerald Kaizo (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Emerald%20Kaizo%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/complete", "type/difficulty"]
|
||||
---
|
||||
# Pokémon Emerald Kaizo
|
||||
|
||||
> [!info] Difficulty — **Complete**
|
||||
> Game Boy Advance · base **Emerald** · version **—** · Gen 3
|
||||
|
||||
## Summary
|
||||
The classic Emerald kaizo — every gym/E4 team is maxed-out and merciless.
|
||||
|
||||
## Type
|
||||
[[Types#Difficulty|Difficulty]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Emerald%20Kaizo%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Emerald Kaizo (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Emerald Rogue"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "2.1.2 EX"
|
||||
status: "Ongoing"
|
||||
type: ["Roguelite", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Emerald Rogue (Hack).gba"
|
||||
source: "https://github.com/Pokabbie/pokeemerald-rogue"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/ongoing", "type/roguelite", "type/expansion"]
|
||||
---
|
||||
# Pokémon Emerald Rogue
|
||||
|
||||
> [!info] Roguelite · Expansion — **Ongoing**
|
||||
> Game Boy Advance · base **Emerald** · version **2.1.2 EX** · Multi-gen
|
||||
|
||||
## Summary
|
||||
A roguelite take on Emerald: run-based, procedurally routed, escalating difficulty toward the Champion. EX edition uses the modern expansion.
|
||||
|
||||
## Type
|
||||
[[Types#Roguelite|Roguelite]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://github.com/Pokabbie/pokeemerald-rogue
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Emerald%20Rogue%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Emerald Rogue (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Emerald Seaglass"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "3.0"
|
||||
status: "Complete"
|
||||
type: ["Vanilla+", "QoL", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Emerald Seaglass (Hack).gba"
|
||||
source: "https://www.hackdex.app/hack/pokemon-emerald-seaglass"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/complete", "type/vanilla+", "type/qol", "type/expansion"]
|
||||
---
|
||||
# Pokémon Emerald Seaglass
|
||||
|
||||
> [!info] Vanilla+ · QoL · Expansion — **Complete**
|
||||
> Game Boy Advance · base **Emerald** · version **3.0** · Multi-gen
|
||||
|
||||
## Summary
|
||||
Emerald modernized via the expansion — physical/special split, new species/forms, and heavy QoL while keeping Hoenn's story.
|
||||
|
||||
## Type
|
||||
[[Types#Vanilla+|Vanilla+]] [[Types#QoL|QoL]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.hackdex.app/hack/pokemon-emerald-seaglass
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Emerald%20Seaglass%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Emerald Seaglass (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Emerald Squared"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "2.6.2"
|
||||
status: "Complete"
|
||||
type: ["Difficulty", "Vanilla+"]
|
||||
generation: "Gen 3"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Emerald Squared (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Emerald%20Squared%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/complete", "type/difficulty", "type/vanilla+"]
|
||||
---
|
||||
# Pokémon Emerald Squared
|
||||
|
||||
> [!info] Difficulty · Vanilla+ — **Complete**
|
||||
> Game Boy Advance · base **Emerald** · version **2.6.2** · Gen 3
|
||||
|
||||
## Summary
|
||||
An enhanced, harder Emerald — rebalanced trainers and availability for a tougher Hoenn run.
|
||||
|
||||
## Type
|
||||
[[Types#Difficulty|Difficulty]] [[Types#Vanilla+|Vanilla+]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Emerald%20Squared%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Emerald Squared (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Fire Red Extended"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "3.5.6"
|
||||
status: "Ongoing"
|
||||
type: ["Vanilla+", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Fire Red Extended (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Fire%20Red%20Extended%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/ongoing", "type/vanilla+", "type/expansion"]
|
||||
---
|
||||
# Pokémon Fire Red Extended
|
||||
|
||||
> [!info] Vanilla+ · Expansion — **Ongoing**
|
||||
> Game Boy Advance · base **FireRed** · version **3.5.6** · Multi-gen
|
||||
|
||||
## Summary
|
||||
FireRed extended with later-gen species and mechanics while preserving the Kanto journey.
|
||||
|
||||
## Type
|
||||
[[Types#Vanilla+|Vanilla+]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Fire%20Red%20Extended%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Fire Red Extended (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Fire of Sky"
|
||||
platform: GBA
|
||||
base: "—"
|
||||
version: "1.0.3"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Fire of Sky (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Fire%20of%20Sky%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/unknown", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Fire of Sky
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy Advance · base **—** · version **1.0.3** · Multi-gen
|
||||
|
||||
## Summary
|
||||
A story-focused new-adventure hack.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Fire%20of%20Sky%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Fire of Sky (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon FireRed & LeafGreen+ (FRLG+)"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "1.5.1"
|
||||
status: "Ongoing"
|
||||
type: ["Vanilla+", "QoL"]
|
||||
generation: "Gen 1–3"
|
||||
library_path: "roms/gba/Hacks/Pokemon - FireRed & LeafGreen+ (FRLG+) (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20FireRed%20%26%20LeafGreen%2B%20%28FRLG%2B%29%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/ongoing", "type/vanilla+", "type/qol"]
|
||||
---
|
||||
# Pokémon FireRed & LeafGreen+ (FRLG+)
|
||||
|
||||
> [!info] Vanilla+ · QoL — **Ongoing**
|
||||
> Game Boy Advance · base **FireRed** · version **1.5.1** · Gen 1–3
|
||||
|
||||
## Summary
|
||||
A faithful 'plus' enhancement of FR/LG — availability fixes, split, and QoL with minimal change to the feel.
|
||||
|
||||
## Type
|
||||
[[Types#Vanilla+|Vanilla+]] [[Types#QoL|QoL]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20FireRed%20%26%20LeafGreen%2B%20%28FRLG%2B%29%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - FireRed & LeafGreen+ (FRLG+) (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon FireRed Deluxe"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "20.5"
|
||||
status: "Ongoing"
|
||||
type: ["Vanilla+", "Expansion", "QoL"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - FireRed Deluxe (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20FireRed%20Deluxe%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/ongoing", "type/vanilla+", "type/expansion", "type/qol"]
|
||||
---
|
||||
# Pokémon FireRed Deluxe
|
||||
|
||||
> [!info] Vanilla+ · Expansion · QoL — **Ongoing**
|
||||
> Game Boy Advance · base **FireRed** · version **20.5** · Multi-gen
|
||||
|
||||
## Summary
|
||||
FireRed loaded with all obtainable species, modern mechanics, and QoL — a 'complete dex' enhanced Kanto.
|
||||
|
||||
## Type
|
||||
[[Types#Vanilla+|Vanilla+]] [[Types#Expansion|Expansion]] [[Types#QoL|QoL]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20FireRed%20Deluxe%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - FireRed Deluxe (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon FireRed Reignited"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "1.55"
|
||||
status: "Ongoing"
|
||||
type: ["Vanilla+", "QoL"]
|
||||
generation: "Gen 1+"
|
||||
library_path: "roms/gba/Hacks/Pokemon - FireRed Reignited (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20FireRed%20Reignited%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/ongoing", "type/vanilla+", "type/qol"]
|
||||
---
|
||||
# Pokémon FireRed Reignited
|
||||
|
||||
> [!info] Vanilla+ · QoL — **Ongoing**
|
||||
> Game Boy Advance · base **FireRed** · version **1.55** · Gen 1+
|
||||
|
||||
## Summary
|
||||
A modern QoL remaster of FireRed.
|
||||
|
||||
## Type
|
||||
[[Types#Vanilla+|Vanilla+]] [[Types#QoL|QoL]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20FireRed%20Reignited%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - FireRed Reignited (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Flora Sky"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "Complete"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Gen 3–4 mons"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Flora Sky (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-flora-sky.179365/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Flora Sky
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy Advance · base **Emerald** · version **Complete** · Gen 3–4 mons
|
||||
|
||||
## Summary
|
||||
A classic complete Emerald hack with a new region, Gen 4 additions, and a sky/Distortion-World-flavored plot.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-flora-sky.179365/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Flora%20Sky%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Flora Sky (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Following Renegade Platinum"
|
||||
platform: NDS
|
||||
base: "Platinum"
|
||||
version: "2.0"
|
||||
status: "Complete"
|
||||
type: ["Difficulty", "Vanilla+", "QoL"]
|
||||
generation: "Gen 1–4 mons"
|
||||
library_path: "roms/nds/Hacks/Pokemon - Following Renegade Platinum (Hack).nds"
|
||||
source: "https://www.reddit.com/r/PokemonROMhacks/comments/s4fbhi/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/nds", "base/platinum", "status/complete", "type/difficulty", "type/vanilla+", "type/qol"]
|
||||
---
|
||||
# Pokémon Following Renegade Platinum
|
||||
|
||||
> [!info] Difficulty · Vanilla+ · QoL — **Complete**
|
||||
> Nintendo DS · base **Platinum** · version **2.0** · Gen 1–4 mons
|
||||
|
||||
## Summary
|
||||
Renegade Platinum with following Pokémon added — the acclaimed enhanced Sinnoh plus an HGSS-style walking partner.
|
||||
|
||||
## Type
|
||||
[[Types#Difficulty|Difficulty]] [[Types#Vanilla+|Vanilla+]] [[Types#QoL|QoL]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.reddit.com/r/PokemonROMhacks/comments/s4fbhi/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Following%20Renegade%20Platinum%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/nds/Hacks/Pokemon - Following Renegade Platinum (Hack).nds` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon GS Chronicles"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "2.7.6"
|
||||
status: "Complete"
|
||||
type: ["New Experience", "Demake"]
|
||||
generation: "Gen 1–7 mons"
|
||||
library_path: "roms/gba/Hacks/Pokemon - GS Chronicles (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-gs-chronicles.346730/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/complete", "type/newexperience", "type/demake"]
|
||||
---
|
||||
# Pokémon GS Chronicles
|
||||
|
||||
> [!info] New Experience · Demake — **Complete**
|
||||
> Game Boy Advance · base **FireRed** · version **2.7.6** · Gen 1–7 mons
|
||||
|
||||
## Summary
|
||||
A HeartGold/SoulSilver-style Johto remake on GBA with modern mechanics and a rich postgame.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#Demake|Demake]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-gs-chronicles.346730/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20GS%20Chronicles%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - GS Chronicles (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Gaia"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "3.2"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Gen 1–6 mons"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Gaia (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-gaia.336982/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Gaia
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy Advance · base **FireRed** · version **3.2** · Gen 1–6 mons
|
||||
|
||||
## Summary
|
||||
Widely considered one of the best hacks ever: the Orbtus region, Gen 6 mechanics/Fairy type, an archaeology mystery, and Nintendo-grade polish.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-gaia.336982/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Gaia%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Gaia (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Glazed"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "9.2.0"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Gen 1–6 mons"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Glazed (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-glazed.291376/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Glazed
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy Advance · base **Emerald** · version **9.2.0** · Gen 1–6 mons
|
||||
|
||||
## Summary
|
||||
A long-beloved new region (Tunod) crossing into Johto, with multiple starters incl. later gens. This is the polished modern build.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-glazed.291376/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Glazed%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Glazed (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Heart and Soul"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "1.2.1"
|
||||
status: "Ongoing"
|
||||
type: ["New Experience", "Demake"]
|
||||
generation: "Johto"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Heart and Soul (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Heart%20and%20Soul%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/ongoing", "type/newexperience", "type/demake"]
|
||||
---
|
||||
# Pokémon Heart and Soul
|
||||
|
||||
> [!info] New Experience · Demake — **Ongoing**
|
||||
> Game Boy Advance · base **FireRed** · version **1.2.1** · Johto
|
||||
|
||||
## Summary
|
||||
A Johto-focused adventure inspired by the Gen 2/HGSS games.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#Demake|Demake]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Heart%20and%20Soul%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Heart and Soul (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Hearth"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "0.1.27"
|
||||
status: "Beta"
|
||||
type: ["New Experience", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Hearth (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Hearth%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/beta", "type/newexperience", "type/expansion"]
|
||||
---
|
||||
# Pokémon Hearth
|
||||
|
||||
> [!info] New Experience · Expansion — **Beta**
|
||||
> Game Boy Advance · base **Emerald** · version **0.1.27** · Multi-gen
|
||||
|
||||
## Summary
|
||||
An early-beta new-region expansion hack.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Hearth%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Hearth (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Hoenn's Last Wish"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "0.4.7"
|
||||
status: "Beta"
|
||||
type: ["New Experience", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Hoenn's Last Wish (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Hoenn%27s%20Last%20Wish%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/beta", "type/newexperience", "type/expansion"]
|
||||
---
|
||||
# Pokémon Hoenn's Last Wish
|
||||
|
||||
> [!info] New Experience · Expansion — **Beta**
|
||||
> Game Boy Advance · base **Emerald** · version **0.4.7** · Multi-gen
|
||||
|
||||
## Summary
|
||||
An in-development Hoenn-set adventure on the Emerald expansion (early/beta).
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Hoenn%27s%20Last%20Wish%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Hoenn's Last Wish (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Inclement Emerald"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "—"
|
||||
status: "Complete"
|
||||
type: ["Difficulty", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Inclement Emerald (Hack).gba"
|
||||
source: "https://www.hackdex.app/hack/inclement-emerald"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/complete", "type/difficulty", "type/expansion"]
|
||||
---
|
||||
# Pokémon Inclement Emerald
|
||||
|
||||
> [!info] Difficulty · Expansion — **Complete**
|
||||
> Game Boy Advance · base **Emerald** · version **—** · Multi-gen
|
||||
|
||||
## Summary
|
||||
Emerald-expansion difficulty hack with all 8 gens obtainable, configurable hardcore modes, and smart AI. A modern favorite.
|
||||
|
||||
## Type
|
||||
[[Types#Difficulty|Difficulty]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.hackdex.app/hack/inclement-emerald
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Inclement%20Emerald%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Inclement Emerald (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Inkwell"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "1.04"
|
||||
status: "Ongoing"
|
||||
type: ["New Experience", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Inkwell (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Inkwell%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/ongoing", "type/newexperience", "type/expansion"]
|
||||
---
|
||||
# Pokémon Inkwell
|
||||
|
||||
> [!info] New Experience · Expansion — **Ongoing**
|
||||
> Game Boy Advance · base **Emerald** · version **1.04** · Multi-gen
|
||||
|
||||
## Summary
|
||||
A new-adventure hack built on the Emerald expansion.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Inkwell%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Inkwell (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Lazarus"
|
||||
platform: GBA
|
||||
base: "Emerald (TrashMan)"
|
||||
version: "v2"
|
||||
status: "Ongoing"
|
||||
type: ["New Experience", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Lazarus (Hack).gba"
|
||||
source: "https://ko-fi.com/nemo622"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emeraldtrashman", "status/ongoing", "type/newexperience", "type/expansion"]
|
||||
---
|
||||
# Pokémon Lazarus
|
||||
|
||||
> [!info] New Experience · Expansion — **Ongoing**
|
||||
> Game Boy Advance · base **Emerald (TrashMan)** · version **v2** · Multi-gen
|
||||
|
||||
## Summary
|
||||
The Ilios region — a story-rich expansion hack by Nemo622 with new mechanics and detailed documentation.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://ko-fi.com/nemo622
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Lazarus%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Lazarus (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Light Platinum"
|
||||
platform: GBA
|
||||
base: "Ruby"
|
||||
version: "1.1"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Gen 1–4 mons"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Light Platinum (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-light-platinum.171377/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/ruby", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Light Platinum
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy Advance · base **Ruby** · version **1.1** · Gen 1–4 mons
|
||||
|
||||
## Summary
|
||||
A classic: the Zhery region with two leagues, Gen 4 mons, and a globe-trotting plot. Hugely popular older hack.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-light-platinum.171377/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Light%20Platinum%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Light Platinum (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Liquid Crystal"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "3.3"
|
||||
status: "Complete"
|
||||
type: ["New Experience", "Demake"]
|
||||
generation: "Gen 1–4 mons"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Liquid Crystal (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-liquid-crystal.158473/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/complete", "type/newexperience", "type/demake"]
|
||||
---
|
||||
# Pokémon Liquid Crystal
|
||||
|
||||
> [!info] New Experience · Demake — **Complete**
|
||||
> Game Boy Advance · base **FireRed** · version **3.3** · Gen 1–4 mons
|
||||
|
||||
## Summary
|
||||
A Johto (Crystal) remake on GBA with the Orange Islands postgame and modern conveniences.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#Demake|Demake]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-liquid-crystal.158473/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Liquid%20Crystal%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Liquid Crystal (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Low Budget Crystal"
|
||||
platform: GBC
|
||||
base: "Crystal"
|
||||
version: "—"
|
||||
status: "Complete"
|
||||
type: ["Vanilla+", "QoL"]
|
||||
generation: "Gen 2"
|
||||
library_path: "roms/gbc/Hacks/Pokemon - Low Budget Crystal (Hack).gbc"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Low%20Budget%20Crystal%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gbc", "base/crystal", "status/complete", "type/vanilla+", "type/qol"]
|
||||
---
|
||||
# Pokémon Low Budget Crystal
|
||||
|
||||
> [!info] Vanilla+ · QoL — **Complete**
|
||||
> Game Boy Color · base **Crystal** · version **—** · Gen 2
|
||||
|
||||
## Summary
|
||||
A light, faithful Crystal enhancement — quality-of-life tweaks and availability fixes without changing the core game.
|
||||
|
||||
## Type
|
||||
[[Types#Vanilla+|Vanilla+]] [[Types#QoL|QoL]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Low%20Budget%20Crystal%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gbc/Hacks/Pokemon - Low Budget Crystal (Hack).gbc` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Mega Power"
|
||||
platform: GBA
|
||||
base: "Ruby"
|
||||
version: "5.62"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Gen 1–6 mons"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Mega Power (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-mega-power.330510/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/ruby", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Mega Power
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy Advance · base **Ruby** · version **5.62** · Gen 1–6 mons
|
||||
|
||||
## Summary
|
||||
By the Light Platinum-adjacent team — a new region with Mega Evolution, custom villains, and a 'build the strongest Pokémon' plot.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-mega-power.330510/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Mega%20Power%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Mega Power (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Modern Emerald"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "3.3.1"
|
||||
status: "Complete"
|
||||
type: ["Vanilla+", "QoL", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Modern Emerald (Hack).gba"
|
||||
source: "https://www.hackdex.app/hack/modern-emerald"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/complete", "type/vanilla+", "type/qol", "type/expansion"]
|
||||
---
|
||||
# Pokémon Modern Emerald
|
||||
|
||||
> [!info] Vanilla+ · QoL · Expansion — **Complete**
|
||||
> Game Boy Advance · base **Emerald** · version **3.3.1** · Multi-gen
|
||||
|
||||
## Summary
|
||||
Emerald modernized end-to-end — all gens, modern mechanics, and a deep QoL/settings menu, while keeping Hoenn's story.
|
||||
|
||||
## Type
|
||||
[[Types#Vanilla+|Vanilla+]] [[Types#QoL|QoL]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.hackdex.app/hack/modern-emerald
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Modern%20Emerald%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Modern Emerald (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Moemon Mega FireRed"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "1.4c"
|
||||
status: "Complete"
|
||||
type: ["Cosmetic"]
|
||||
generation: "Gen 1"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Moemon Mega FireRed (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Moemon%20Mega%20FireRed%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/complete", "type/cosmetic"]
|
||||
---
|
||||
# Pokémon Moemon Mega FireRed
|
||||
|
||||
> [!info] Cosmetic — **Complete**
|
||||
> Game Boy Advance · base **FireRed** · version **1.4c** · Gen 1
|
||||
|
||||
## Summary
|
||||
A Moemon hack — Pokémon replaced with anthropomorphic 'moe' character sprites — over an enhanced FireRed.
|
||||
|
||||
## Type
|
||||
[[Types#Cosmetic|Cosmetic]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Moemon%20Mega%20FireRed%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Moemon Mega FireRed (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Moemon Star Emerald"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "1.1c"
|
||||
status: "Complete"
|
||||
type: ["Cosmetic"]
|
||||
generation: "Gen 3"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Moemon Star Emerald (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Moemon%20Star%20Emerald%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/complete", "type/cosmetic"]
|
||||
---
|
||||
# Pokémon Moemon Star Emerald
|
||||
|
||||
> [!info] Cosmetic — **Complete**
|
||||
> Game Boy Advance · base **Emerald** · version **1.1c** · Gen 3
|
||||
|
||||
## Summary
|
||||
A Moemon reskin of an enhanced Emerald (Star Emerald), with moe sprites throughout.
|
||||
|
||||
## Type
|
||||
[[Types#Cosmetic|Cosmetic]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Moemon%20Star%20Emerald%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Moemon Star Emerald (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Odyssey"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "4.1.1"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Odyssey (Hack).gba"
|
||||
source: "https://www.hackdex.app/hack/pokemon-odyssey"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Odyssey
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy Advance · base **FireRed** · version **4.1.1** · Multi-gen
|
||||
|
||||
## Summary
|
||||
A highly-praised, atmospheric original adventure with a custom region, strong writing, and bespoke pixel art.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.hackdex.app/hack/pokemon-odyssey
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Odyssey%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Odyssey (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Omega Ruby Origins"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "1.4.8.7"
|
||||
status: "Ongoing"
|
||||
type: ["Demake", "New Experience"]
|
||||
generation: "Gen 6 on GBA"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Omega Ruby Origins (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Omega%20Ruby%20Origins%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/ongoing", "type/demake", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Omega Ruby Origins
|
||||
|
||||
> [!info] Demake · New Experience — **Ongoing**
|
||||
> Game Boy Advance · base **Emerald** · version **1.4.8.7** · Gen 6 on GBA
|
||||
|
||||
## Summary
|
||||
An ORAS-style demake bringing the 3DS Hoenn remakes' features back to the GBA.
|
||||
|
||||
## Type
|
||||
[[Types#Demake|Demake]] [[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Omega%20Ruby%20Origins%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Omega Ruby Origins (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Orange"
|
||||
platform: GBC
|
||||
base: "Crystal"
|
||||
version: "—"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Gen 2 style"
|
||||
library_path: "roms/gbc/Hacks/Pokemon - Orange (Hack).gbc"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Orange%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gbc", "base/crystal", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Orange
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy Color · base **Crystal** · version **—** · Gen 2 style
|
||||
|
||||
## Summary
|
||||
Set in the anime's Orange Islands / Orange League. This is the modern Suloku-patched build with bug fixes and PSS-era touches.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Orange%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gbc/Hacks/Pokemon - Orange (Hack).gbc` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Peridot"
|
||||
platform: GBC
|
||||
base: "Crystal"
|
||||
version: "2.2.3"
|
||||
status: "Ongoing"
|
||||
type: ["New Experience"]
|
||||
generation: "Gen 2 style"
|
||||
library_path: "roms/gbc/Hacks/Pokemon - Peridot (Hack).gbc"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Peridot%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gbc", "base/crystal", "status/ongoing", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Peridot
|
||||
|
||||
> [!info] New Experience — **Ongoing**
|
||||
> Game Boy Color · base **Crystal** · version **2.2.3** · Gen 2 style
|
||||
|
||||
## Summary
|
||||
A from-scratch new region on the Gen 2 engine with an original dex and story.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Peridot%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gbc/Hacks/Pokemon - Peridot (Hack).gbc` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Phoenix Red"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "1.2"
|
||||
status: "Complete"
|
||||
type: ["Difficulty", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Phoenix Red (Hack).gba"
|
||||
source: "https://www.hackdex.app/hack/pokemon-phoenix-red"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/complete", "type/difficulty", "type/expansion"]
|
||||
---
|
||||
# Pokémon Phoenix Red
|
||||
|
||||
> [!info] Difficulty · Expansion — **Complete**
|
||||
> Game Boy Advance · base **FireRed** · version **1.2** · Multi-gen
|
||||
|
||||
## Summary
|
||||
An enhanced, harder FireRed with all 8 gens obtainable, Megas, and tough fights.
|
||||
|
||||
## Type
|
||||
[[Types#Difficulty|Difficulty]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.hackdex.app/hack/pokemon-phoenix-red
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Phoenix%20Red%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Phoenix Red (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Pisces"
|
||||
platform: GBA
|
||||
base: "—"
|
||||
version: "1.5.4"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Pisces (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Pisces%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/unknown", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Pisces
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy Advance · base **—** · version **1.5.4** · Multi-gen
|
||||
|
||||
## Summary
|
||||
An original-region adventure hack.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Pisces%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Pisces (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Polished Crystal"
|
||||
platform: GBC
|
||||
base: "Crystal"
|
||||
version: "3.2.3"
|
||||
status: "Complete"
|
||||
type: ["Vanilla+", "QoL", "Expansion"]
|
||||
generation: "Gen 1–7 mons"
|
||||
library_path: "roms/gbc/Hacks/Pokemon - Polished Crystal (Hack).gbc"
|
||||
source: "https://github.com/Rangi42/polishedcrystal"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gbc", "base/crystal", "status/complete", "type/vanilla+", "type/qol", "type/expansion"]
|
||||
---
|
||||
# Pokémon Polished Crystal
|
||||
|
||||
> [!info] Vanilla+ · QoL · Expansion — **Complete**
|
||||
> Game Boy Color · base **Crystal** · version **3.2.3** · Gen 1–7 mons
|
||||
|
||||
## Summary
|
||||
The gold standard Crystal enhancement: physical/special split, ~Gen 7 movesets/species availability, faithful or modern modes, tons of QoL. Open-source decomp.
|
||||
|
||||
## Type
|
||||
[[Types#Vanilla+|Vanilla+]] [[Types#QoL|QoL]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://github.com/Rangi42/polishedcrystal
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Polished%20Crystal%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gbc/Hacks/Pokemon - Polished Crystal (Hack).gbc` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Prism"
|
||||
platform: GBC
|
||||
base: "Crystal"
|
||||
version: "1.0"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Gen 2+"
|
||||
library_path: "roms/gbc/Hacks/Pokemon - Prism (Hack).gbc"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-prism.379413/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gbc", "base/crystal", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Prism
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy Color · base **Crystal** · version **1.0** · Gen 2+
|
||||
|
||||
## Summary
|
||||
Koolboyman's acclaimed new Naljo region — new types, side games, huge custom dex. Famously C&D'd then completed; a Gen 2 magnum opus.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-prism.379413/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Prism%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gbc/Hacks/Pokemon - Prism (Hack).gbc` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Project Nova"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "2.7.0"
|
||||
status: "Ongoing"
|
||||
type: ["New Experience", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Project Nova (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Project%20Nova%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/ongoing", "type/newexperience", "type/expansion"]
|
||||
---
|
||||
# Pokémon Project Nova
|
||||
|
||||
> [!info] New Experience · Expansion — **Ongoing**
|
||||
> Game Boy Advance · base **Emerald** · version **2.7.0** · Multi-gen
|
||||
|
||||
## Summary
|
||||
A new-experience hack on the Emerald expansion.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Project%20Nova%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Project Nova (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon R.O.W.E."
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "2.1.1"
|
||||
status: "Ongoing"
|
||||
type: ["New Experience", "QoL", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - R.O.W.E. (Hack).gba"
|
||||
source: "https://www.hackdex.app/hack/pokemon-rowe"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/ongoing", "type/newexperience", "type/qol", "type/expansion"]
|
||||
---
|
||||
# Pokémon R.O.W.E.
|
||||
|
||||
> [!info] New Experience · QoL · Expansion — **Ongoing**
|
||||
> Game Boy Advance · base **Emerald** · version **2.1.1** · Multi-gen
|
||||
|
||||
## Summary
|
||||
Open-world Emerald — level scaling, ride-anywhere, nuzlocke-friendly settings, and all gens. The 'Mega Update' build.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#QoL|QoL]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.hackdex.app/hack/pokemon-rowe
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20R.O.W.E.%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - R.O.W.E. (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Radical Red"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "4.10"
|
||||
status: "Ongoing"
|
||||
type: ["Difficulty", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Radical Red (Hack).gba"
|
||||
source: "https://www.hackdex.app/hack/radical-red"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/ongoing", "type/difficulty", "type/expansion"]
|
||||
---
|
||||
# Pokémon Radical Red
|
||||
|
||||
> [!info] Difficulty · Expansion — **Ongoing**
|
||||
> Game Boy Advance · base **FireRed** · version **4.10** · Multi-gen
|
||||
|
||||
## Summary
|
||||
The flagship modern difficulty hack: complete National Dex, Gen-9 mechanics, smart held-item/switching AI, and toggle modes from casual to brutal.
|
||||
|
||||
## Type
|
||||
[[Types#Difficulty|Difficulty]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.hackdex.app/hack/radical-red
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Radical%20Red%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Radical Red (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Recordkeepers"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "1.2.1"
|
||||
status: "Ongoing"
|
||||
type: ["New Experience", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Recordkeepers (Hack).gba"
|
||||
source: "https://www.hackdex.app/hack/recordkeepers"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/ongoing", "type/newexperience", "type/expansion"]
|
||||
---
|
||||
# Pokémon Recordkeepers
|
||||
|
||||
> [!info] New Experience · Expansion — **Ongoing**
|
||||
> Game Boy Advance · base **Emerald** · version **1.2.1** · Multi-gen
|
||||
|
||||
## Summary
|
||||
A narrative-driven Emerald-expansion hack.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.hackdex.app/hack/recordkeepers
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Recordkeepers%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Recordkeepers (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Renegade Platinum"
|
||||
platform: NDS
|
||||
base: "Platinum"
|
||||
version: "1.3.0"
|
||||
status: "Complete"
|
||||
type: ["Difficulty", "Vanilla+"]
|
||||
generation: "Gen 1–4 mons"
|
||||
library_path: "roms/nds/Hacks/Pokemon - Renegade Platinum (Hack).nds"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-renegade-platinum.347531/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/nds", "base/platinum", "status/complete", "type/difficulty", "type/vanilla+"]
|
||||
---
|
||||
# Pokémon Renegade Platinum
|
||||
|
||||
> [!info] Difficulty · Vanilla+ — **Complete**
|
||||
> Nintendo DS · base **Platinum** · version **1.3.0** · Gen 1–4 mons
|
||||
|
||||
## Summary
|
||||
Drayano's definitive enhanced Platinum — full availability, much harder fights, and QoL. A community favorite Sinnoh run.
|
||||
|
||||
## Type
|
||||
[[Types#Difficulty|Difficulty]] [[Types#Vanilla+|Vanilla+]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-renegade-platinum.347531/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Renegade%20Platinum%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/nds/Hacks/Pokemon - Renegade Platinum (Hack).nds` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Resolute"
|
||||
platform: GBA
|
||||
base: "Ruby"
|
||||
version: "2.97"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Gen 1–6 mons"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Resolute (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-resolute.330577/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/ruby", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Resolute
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy Advance · base **Ruby** · version **2.97** · Gen 1–6 mons
|
||||
|
||||
## Summary
|
||||
A story-heavy new region (Sun-Moon-era mons added) with a difficulty mode; from the Mega Power/Light Platinum lineage.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-resolute.330577/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Resolute%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Resolute (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Sacred Gold"
|
||||
platform: NDS
|
||||
base: "HeartGold"
|
||||
version: "1.05"
|
||||
status: "Complete"
|
||||
type: ["Vanilla+", "Difficulty"]
|
||||
generation: "Gen 1–4 mons"
|
||||
library_path: "roms/nds/Hacks/Pokemon - Sacred Gold (Hack).nds"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-sacred-gold-storm-silver.165088/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/nds", "base/heartgold", "status/complete", "type/vanilla+", "type/difficulty"]
|
||||
---
|
||||
# Pokémon Sacred Gold
|
||||
|
||||
> [!info] Vanilla+ · Difficulty — **Complete**
|
||||
> Nintendo DS · base **HeartGold** · version **1.05** · Gen 1–4 mons
|
||||
|
||||
## Summary
|
||||
Drayano's enhanced HeartGold — all species obtainable, boosted teams, fixed movesets. Pairs with Storm Silver.
|
||||
|
||||
## Type
|
||||
[[Types#Vanilla+|Vanilla+]] [[Types#Difficulty|Difficulty]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-sacred-gold-storm-silver.165088/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Sacred%20Gold%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/nds/Hacks/Pokemon - Sacred Gold (Hack).nds` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Saiph 2"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "1.4.0"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Saiph 2 (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-saiph-2.456789/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Saiph 2
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy Advance · base **FireRed** · version **1.4.0** · Multi-gen
|
||||
|
||||
## Summary
|
||||
Sequel to Saiph — a larger, polished original adventure (full release v1.4.0).
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-saiph-2.456789/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Saiph%202%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Saiph 2 (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Saiph"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "2020"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Saiph (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-saiph.412313/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Saiph
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy Advance · base **FireRed** · version **2020** · Multi-gen
|
||||
|
||||
## Summary
|
||||
A complete original-region story hack with a darker tone.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-saiph.412313/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Saiph%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Saiph (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Snakewood"
|
||||
platform: GBA
|
||||
base: "Ruby"
|
||||
version: "—"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Gen 3 + fakemon"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Snakewood (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-snakewood.146749/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/ruby", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Snakewood
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy Advance · base **Ruby** · version **—** · Gen 3 + fakemon
|
||||
|
||||
## Summary
|
||||
A cult-classic zombie-apocalypse reimagining of Hoenn — surreal, dark-comedic, and famously weird. Largely complete.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-snakewood.146749/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Snakewood%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Snakewood (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Sors"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "1.3"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Sors (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-sors.420576/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Sors
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy Advance · base **FireRed** · version **1.3** · Multi-gen
|
||||
|
||||
## Summary
|
||||
A complete story-driven hack with a full new region and extensive item/guide documentation.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-sors.420576/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Sors%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Sors (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Sovereign of the Skies"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "2.1.2"
|
||||
status: "Complete"
|
||||
type: ["New Experience"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Sovereign of the Skies (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-sovereign-of-the-skies.349500/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/complete", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Sovereign of the Skies
|
||||
|
||||
> [!info] New Experience — **Complete**
|
||||
> Game Boy Advance · base **FireRed** · version **2.1.2** · Multi-gen
|
||||
|
||||
## Summary
|
||||
A complete new region with custom dex and a sky-themed plot.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-sovereign-of-the-skies.349500/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Sovereign%20of%20the%20Skies%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Sovereign of the Skies (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Storm Silver"
|
||||
platform: NDS
|
||||
base: "SoulSilver"
|
||||
version: "1.05"
|
||||
status: "Complete"
|
||||
type: ["Vanilla+", "Difficulty"]
|
||||
generation: "Gen 1–4 mons"
|
||||
library_path: "roms/nds/Hacks/Pokemon - Storm Silver (Hack).nds"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-sacred-gold-storm-silver.165088/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/nds", "base/soulsilver", "status/complete", "type/vanilla+", "type/difficulty"]
|
||||
---
|
||||
# Pokémon Storm Silver
|
||||
|
||||
> [!info] Vanilla+ · Difficulty — **Complete**
|
||||
> Nintendo DS · base **SoulSilver** · version **1.05** · Gen 1–4 mons
|
||||
|
||||
## Summary
|
||||
Drayano's enhanced SoulSilver — the SoulSilver counterpart to Sacred Gold.
|
||||
|
||||
## Type
|
||||
[[Types#Vanilla+|Vanilla+]] [[Types#Difficulty|Difficulty]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-sacred-gold-storm-silver.165088/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Storm%20Silver%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/nds/Hacks/Pokemon - Storm Silver (Hack).nds` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Super Mariomon"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "1.5.2"
|
||||
status: "Complete"
|
||||
type: ["New Experience", "Cosmetic"]
|
||||
generation: "Crossover"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Super Mariomon (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Super%20Mariomon%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/complete", "type/newexperience", "type/cosmetic"]
|
||||
---
|
||||
# Pokémon Super Mariomon
|
||||
|
||||
> [!info] New Experience · Cosmetic — **Complete**
|
||||
> Game Boy Advance · base **Emerald** · version **1.5.2** · Crossover
|
||||
|
||||
## Summary
|
||||
A Mario × Pokémon crossover: catch and battle Mario-universe characters as 'Mariomon'. A complete novelty hack.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#Cosmetic|Cosmetic]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Super%20Mariomon%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Super Mariomon (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Sword and Shield Ultimate Plus"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "1.2.1.2"
|
||||
status: "Ongoing"
|
||||
type: ["Demake", "New Experience"]
|
||||
generation: "Gen 8 on GBA"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Sword and Shield Ultimate Plus (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Sword%20and%20Shield%20Ultimate%20Plus%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/ongoing", "type/demake", "type/newexperience"]
|
||||
---
|
||||
# Pokémon Sword and Shield Ultimate Plus
|
||||
|
||||
> [!info] Demake · New Experience — **Ongoing**
|
||||
> Game Boy Advance · base **FireRed** · version **1.2.1.2** · Gen 8 on GBA
|
||||
|
||||
## Summary
|
||||
A Galar (Sword/Shield) demake bringing Gen 8's region, Pokémon, and Dynamax-era content to the GBA.
|
||||
|
||||
## Type
|
||||
[[Types#Demake|Demake]] [[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Sword%20and%20Shield%20Ultimate%20Plus%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Sword and Shield Ultimate Plus (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon The Pit"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "2.5.1"
|
||||
status: "Ongoing"
|
||||
type: ["Roguelite", "Difficulty", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - The Pit (Hack).gba"
|
||||
source: "https://www.hackdex.app/hack/the-pit"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/ongoing", "type/roguelite", "type/difficulty", "type/expansion"]
|
||||
---
|
||||
# Pokémon The Pit
|
||||
|
||||
> [!info] Roguelite · Difficulty · Expansion — **Ongoing**
|
||||
> Game Boy Advance · base **Emerald** · version **2.5.1** · Multi-gen
|
||||
|
||||
## Summary
|
||||
A roguelite/battle-focused descent: climb floors, draft a team, and fight escalating encounters. Built on the Emerald expansion.
|
||||
|
||||
## Type
|
||||
[[Types#Roguelite|Roguelite]] [[Types#Difficulty|Difficulty]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.hackdex.app/hack/the-pit
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20The%20Pit%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - The Pit (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Theta Emerald EX"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "EX"
|
||||
status: "Complete"
|
||||
type: ["Expansion", "Vanilla+"]
|
||||
generation: "Gen 1–6 mons"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Theta Emerald EX (Hack).gba"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-theta-emerald-ex.366617/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/complete", "type/expansion", "type/vanilla+"]
|
||||
---
|
||||
# Pokémon Theta Emerald EX
|
||||
|
||||
> [!info] Expansion · Vanilla+ — **Complete**
|
||||
> Game Boy Advance · base **Emerald** · version **EX** · Gen 1–6 mons
|
||||
|
||||
## Summary
|
||||
Classic 'all 800+ mons in Emerald' hack — Megas, Fairy type, and the full dex obtainable within Hoenn's story.
|
||||
|
||||
## Type
|
||||
[[Types#Expansion|Expansion]] [[Types#Vanilla+|Vanilla+]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-theta-emerald-ex.366617/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Theta%20Emerald%20EX%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Theta Emerald EX (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Tourmaline"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "1.1.1"
|
||||
status: "Ongoing"
|
||||
type: ["New Experience", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Tourmaline (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20Tourmaline%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/ongoing", "type/newexperience", "type/expansion"]
|
||||
---
|
||||
# Pokémon Tourmaline
|
||||
|
||||
> [!info] New Experience · Expansion — **Ongoing**
|
||||
> Game Boy Advance · base **Emerald** · version **1.1.1** · Multi-gen
|
||||
|
||||
## Summary
|
||||
A new-region adventure on the Emerald expansion.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Tourmaline%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Tourmaline (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Valiant"
|
||||
platform: GBA
|
||||
base: "Emerald"
|
||||
version: "4.2.3"
|
||||
status: "Ongoing"
|
||||
type: ["New Experience", "Expansion"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - Valiant (Hack).gba"
|
||||
source: "https://www.hackdex.app/hack/pokemon-valiant"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/emerald", "status/ongoing", "type/newexperience", "type/expansion"]
|
||||
---
|
||||
# Pokémon Valiant
|
||||
|
||||
> [!info] New Experience · Expansion — **Ongoing**
|
||||
> Game Boy Advance · base **Emerald** · version **4.2.3** · Multi-gen
|
||||
|
||||
## Summary
|
||||
An original-region story hack on the Emerald expansion with custom characters and content.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.hackdex.app/hack/pokemon-valiant
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Valiant%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - Valiant (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Volt White 2 Redux"
|
||||
platform: NDS
|
||||
base: "White 2"
|
||||
version: "1.4.1"
|
||||
status: "Complete"
|
||||
type: ["Vanilla+", "Difficulty", "Expansion"]
|
||||
generation: "Gen 1–5 mons"
|
||||
library_path: "roms/nds/Hacks/Pokemon - Volt White 2 Redux (Hack).nds"
|
||||
source: "https://www.pokecommunity.com/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/nds", "base/white2", "status/complete", "type/vanilla+", "type/difficulty", "type/expansion"]
|
||||
---
|
||||
# Pokémon Volt White 2 Redux
|
||||
|
||||
> [!info] Vanilla+ · Difficulty · Expansion — **Complete**
|
||||
> Nintendo DS · base **White 2** · version **1.4.1** · Gen 1–5 mons
|
||||
|
||||
## Summary
|
||||
A community 'Redux' fork of Drayano's Volt White 2 — expanded availability and rebalanced difficulty.
|
||||
|
||||
## Type
|
||||
[[Types#Vanilla+|Vanilla+]] [[Types#Difficulty|Difficulty]] [[Types#Expansion|Expansion]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Volt%20White%202%20Redux%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/nds/Hacks/Pokemon - Volt White 2 Redux (Hack).nds` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon Volt White"
|
||||
platform: NDS
|
||||
base: "White"
|
||||
version: "—"
|
||||
status: "Complete"
|
||||
type: ["Vanilla+", "Difficulty"]
|
||||
generation: "Gen 1–5 mons"
|
||||
library_path: "roms/nds/Hacks/Pokemon - Volt White (Hack).nds"
|
||||
source: "https://www.pokecommunity.com/threads/pokemon-blaze-black-volt-white.252355/"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/nds", "base/white", "status/complete", "type/vanilla+", "type/difficulty"]
|
||||
---
|
||||
# Pokémon Volt White
|
||||
|
||||
> [!info] Vanilla+ · Difficulty — **Complete**
|
||||
> Nintendo DS · base **White** · version **—** · Gen 1–5 mons
|
||||
|
||||
## Summary
|
||||
Drayano's White overhaul — full availability and boosted difficulty. The White counterpart to Blaze Black.
|
||||
|
||||
## Type
|
||||
[[Types#Vanilla+|Vanilla+]] [[Types#Difficulty|Difficulty]]
|
||||
|
||||
## Links
|
||||
- Source / info: https://www.pokecommunity.com/threads/pokemon-blaze-black-volt-white.252355/
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20Volt%20White%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/nds/Hacks/Pokemon - Volt White (Hack).nds` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Pokémon WaveBlue"
|
||||
platform: GBA
|
||||
base: "FireRed"
|
||||
version: "1.7.5"
|
||||
status: "Ongoing"
|
||||
type: ["New Experience"]
|
||||
generation: "Multi-gen"
|
||||
library_path: "roms/gba/Hacks/Pokemon - WaveBlue (Hack).gba"
|
||||
source: "https://duckduckgo.com/?q=Pok%C3%A9mon%20WaveBlue%20rom%20hack"
|
||||
added: 2026-06-06
|
||||
tags: ["hack", "platform/gba", "base/firered", "status/ongoing", "type/newexperience"]
|
||||
---
|
||||
# Pokémon WaveBlue
|
||||
|
||||
> [!info] New Experience — **Ongoing**
|
||||
> Game Boy Advance · base **FireRed** · version **1.7.5** · Multi-gen
|
||||
|
||||
## Summary
|
||||
A new-region adventure built on FireRed.
|
||||
|
||||
## Type
|
||||
[[Types#New Experience|New Experience]]
|
||||
|
||||
## Links
|
||||
- Source: _(not catalogued — see lookup)_
|
||||
- Lookup: https://duckduckgo.com/?q=Pok%C3%A9mon%20WaveBlue%20rom%20hack
|
||||
|
||||
## In the library
|
||||
- `roms/gba/Hacks/Pokemon - WaveBlue (Hack).gba` on valhalla
|
||||
- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,116 @@
|
||||
# Pokémon ROM-Hack Library — Index
|
||||
|
||||
A knowledge base for the **75** Pokémon ROM-hacks installed in the valhalla
|
||||
library (`roms/<platform>/Hacks/`). One note per hack — see [[Types]] for the tag
|
||||
taxonomy and the [[#Platforms]] section for per-system views.
|
||||
|
||||
**Game Boy**: 1 · **Game Boy Color**: 9 · **Game Boy Advance**: 57 · **Nintendo DS**: 8
|
||||
|
||||
## Directory (Dataview)
|
||||
|
||||
> Requires the Dataview plugin. If you don't use it, the static table below mirrors it.
|
||||
|
||||
```dataview
|
||||
TABLE platform AS Platform, base AS Base, version AS Version, status AS Status, type AS Type
|
||||
FROM "Hacks"
|
||||
SORT platform ASC, file.name ASC
|
||||
```
|
||||
|
||||
|
||||
## Directory (static)
|
||||
|
||||
| Hack | Platform | Base | Version | Status | Type |
|
||||
|---|---|---|---|---|---|
|
||||
| [[Brown]] | GB | Red | 1.1 | Complete | New Experience |
|
||||
| [[Adventure - Red Chapter]] | GBA | FireRed | Beta 15 | Complete (beta) | New Experience |
|
||||
| [[Aesthetic Red]] | GBA | FireRed | 1.1 | Complete | Cosmetic, Vanilla+ |
|
||||
| [[Amethyst]] | GBA | Emerald | 1.2.0 | Ongoing | Expansion, New Experience |
|
||||
| [[Crystal Advance Redux]] | GBA | Emerald | 2026-05-06 | Ongoing | Demake, Vanilla+ |
|
||||
| [[Dark Rising]] | GBA | FireRed | 1 (Origins) | Complete | New Experience, Difficulty |
|
||||
| [[Dark Rising - Order Destroyed]] | GBA | FireRed | Complete | Complete | New Experience, Difficulty |
|
||||
| [[Dark Rising 2]] | GBA | FireRed | Complete | Complete | New Experience, Difficulty |
|
||||
| [[Elite Redux]] | GBA | Emerald | 2.65.3b | Ongoing | Expansion, Difficulty |
|
||||
| [[Emerald Azure]] | GBA | Emerald | 0.5.3 | Beta | New Experience, Expansion |
|
||||
| [[Emerald Extended Cut]] | GBA | Emerald | Classic+ 1.3 | Complete | Vanilla+, QoL |
|
||||
| [[Emerald Imperium]] | GBA | Emerald | 1.3.1 | Complete | Expansion, Difficulty |
|
||||
| [[Emerald Kaizo]] | GBA | Emerald | — | Complete | Difficulty |
|
||||
| [[Emerald Rogue]] | GBA | Emerald | 2.1.2 EX | Ongoing | Roguelite, Expansion |
|
||||
| [[Emerald Seaglass]] | GBA | Emerald | 3.0 | Complete | Vanilla+, QoL, Expansion |
|
||||
| [[Emerald Squared]] | GBA | Emerald | 2.6.2 | Complete | Difficulty, Vanilla+ |
|
||||
| [[Fire Red Extended]] | GBA | FireRed | 3.5.6 | Ongoing | Vanilla+, Expansion |
|
||||
| [[Fire of Sky]] | GBA | — | 1.0.3 | Complete | New Experience |
|
||||
| [[FireRed & LeafGreen+ (FRLG+)]] | GBA | FireRed | 1.5.1 | Ongoing | Vanilla+, QoL |
|
||||
| [[FireRed Deluxe]] | GBA | FireRed | 20.5 | Ongoing | Vanilla+, Expansion, QoL |
|
||||
| [[FireRed Reignited]] | GBA | FireRed | 1.55 | Ongoing | Vanilla+, QoL |
|
||||
| [[Flora Sky]] | GBA | Emerald | Complete | Complete | New Experience |
|
||||
| [[GS Chronicles]] | GBA | FireRed | 2.7.6 | Complete | New Experience, Demake |
|
||||
| [[Gaia]] | GBA | FireRed | 3.2 | Complete | New Experience |
|
||||
| [[Glazed]] | GBA | Emerald | 9.2.0 | Complete | New Experience |
|
||||
| [[Heart and Soul]] | GBA | FireRed | 1.2.1 | Ongoing | New Experience, Demake |
|
||||
| [[Hearth]] | GBA | Emerald | 0.1.27 | Beta | New Experience, Expansion |
|
||||
| [[Hoenn's Last Wish]] | GBA | Emerald | 0.4.7 | Beta | New Experience, Expansion |
|
||||
| [[Inclement Emerald]] | GBA | Emerald | — | Complete | Difficulty, Expansion |
|
||||
| [[Inkwell]] | GBA | Emerald | 1.04 | Ongoing | New Experience, Expansion |
|
||||
| [[Lazarus]] | GBA | Emerald (TrashMan) | v2 | Ongoing | New Experience, Expansion |
|
||||
| [[Light Platinum]] | GBA | Ruby | 1.1 | Complete | New Experience |
|
||||
| [[Liquid Crystal]] | GBA | FireRed | 3.3 | Complete | New Experience, Demake |
|
||||
| [[Mega Power]] | GBA | Ruby | 5.62 | Complete | New Experience |
|
||||
| [[Modern Emerald]] | GBA | Emerald | 3.3.1 | Complete | Vanilla+, QoL, Expansion |
|
||||
| [[Moemon Mega FireRed]] | GBA | FireRed | 1.4c | Complete | Cosmetic |
|
||||
| [[Moemon Star Emerald]] | GBA | Emerald | 1.1c | Complete | Cosmetic |
|
||||
| [[Odyssey]] | GBA | FireRed | 4.1.1 | Complete | New Experience |
|
||||
| [[Omega Ruby Origins]] | GBA | Emerald | 1.4.8.7 | Ongoing | Demake, New Experience |
|
||||
| [[Phoenix Red]] | GBA | FireRed | 1.2 | Complete | Difficulty, Expansion |
|
||||
| [[Pisces]] | GBA | — | 1.5.4 | Complete | New Experience |
|
||||
| [[Project Nova]] | GBA | Emerald | 2.7.0 | Ongoing | New Experience, Expansion |
|
||||
| [[R.O.W.E.]] | GBA | Emerald | 2.1.1 | Ongoing | New Experience, QoL, Expansion |
|
||||
| [[Radical Red]] | GBA | FireRed | 4.10 | Ongoing | Difficulty, Expansion |
|
||||
| [[Recordkeepers]] | GBA | Emerald | 1.2.1 | Ongoing | New Experience, Expansion |
|
||||
| [[Resolute]] | GBA | Ruby | 2.97 | Complete | New Experience |
|
||||
| [[Saiph]] | GBA | FireRed | 2020 | Complete | New Experience |
|
||||
| [[Saiph 2]] | GBA | FireRed | 1.4.0 | Complete | New Experience |
|
||||
| [[Snakewood]] | GBA | Ruby | — | Complete | New Experience |
|
||||
| [[Sors]] | GBA | FireRed | 1.3 | Complete | New Experience |
|
||||
| [[Sovereign of the Skies]] | GBA | FireRed | 2.1.2 | Complete | New Experience |
|
||||
| [[Super Mariomon]] | GBA | Emerald | 1.5.2 | Complete | New Experience, Cosmetic |
|
||||
| [[Sword and Shield Ultimate Plus]] | GBA | FireRed | 1.2.1.2 | Ongoing | Demake, New Experience |
|
||||
| [[The Pit]] | GBA | Emerald | 2.5.1 | Ongoing | Roguelite, Difficulty, Expansion |
|
||||
| [[Theta Emerald EX]] | GBA | Emerald | EX | Complete | Expansion, Vanilla+ |
|
||||
| [[Tourmaline]] | GBA | Emerald | 1.1.1 | Ongoing | New Experience, Expansion |
|
||||
| [[Valiant]] | GBA | Emerald | 4.2.3 | Ongoing | New Experience, Expansion |
|
||||
| [[WaveBlue]] | GBA | FireRed | 1.7.5 | Ongoing | New Experience |
|
||||
| [[Ambrosia]] | GBC | Crystal | 2.4.0 | Ongoing | New Experience |
|
||||
| [[Crystal Clear]] | GBC | Crystal | 2.5.7 | Complete | New Experience, QoL |
|
||||
| [[Crystal Inheritance]] | GBC | Crystal | 1.0.3 | Complete | New Experience |
|
||||
| [[Crystal Kaizo]] | GBC | Crystal | 1.0 | Complete | Difficulty |
|
||||
| [[Low Budget Crystal]] | GBC | Crystal | — | Complete | Vanilla+, QoL |
|
||||
| [[Orange]] | GBC | Crystal | — | Complete | New Experience |
|
||||
| [[Peridot]] | GBC | Crystal | 2.2.3 | Ongoing | New Experience |
|
||||
| [[Polished Crystal]] | GBC | Crystal | 3.2.3 | Complete | Vanilla+, QoL, Expansion |
|
||||
| [[Prism]] | GBC | Crystal | 1.0 | Complete | New Experience |
|
||||
| [[Blaze Black]] | NDS | Black | — | Complete | Vanilla+, Difficulty |
|
||||
| [[Blaze Black 2 Redux]] | NDS | Black 2 | 1.3.0 | Complete | Vanilla+, Difficulty, Expansion |
|
||||
| [[Following Renegade Platinum]] | NDS | Platinum | 2.0 | Complete | Difficulty, Vanilla+, QoL |
|
||||
| [[Renegade Platinum]] | NDS | Platinum | 1.3.0 | Complete | Difficulty, Vanilla+ |
|
||||
| [[Sacred Gold]] | NDS | HeartGold | 1.05 | Complete | Vanilla+, Difficulty |
|
||||
| [[Storm Silver]] | NDS | SoulSilver | 1.05 | Complete | Vanilla+, Difficulty |
|
||||
| [[Volt White]] | NDS | White | — | Complete | Vanilla+, Difficulty |
|
||||
| [[Volt White 2 Redux]] | NDS | White 2 | 1.4.1 | Complete | Vanilla+, Difficulty, Expansion |
|
||||
|
||||
## Platforms
|
||||
|
||||
- [[GBA]] · [[GBC]] · [[GB]] · [[NDS]]
|
||||
|
||||
## By type
|
||||
|
||||
- [[Types#Vanilla+|Vanilla+]] — Official game enhanced — QoL, all species obtainable, light rebalance; same region/story.
|
||||
- [[Types#QoL|QoL]] — Primarily quality-of-life conveniences over an official base.
|
||||
- [[Types#Difficulty|Difficulty]] — Built to be hard — boosted AI/teams, kaizo, or competitive rulesets.
|
||||
- [[Types#Expansion|Expansion]] — Built on a decomp + expansion: many generations, modern mechanics, new abilities/moves.
|
||||
- [[Types#New Experience|New Experience]] — New region, story, and/or Pokédex — a fresh adventure, not the official game.
|
||||
- [[Types#Demake|Demake]] — Recreates a later-generation game on older hardware.
|
||||
- [[Types#Roguelite|Roguelite]] — Run-based, randomized, permadeath-flavored structure.
|
||||
- [[Types#Cosmetic|Cosmetic]] — Visual/audio overhaul (e.g. Moemon sprites, tilesets, music) over an existing game.
|
||||
|
||||
---
|
||||
*Generated by `scripts/build-romhack-vault.py` — edit the dataset there and re-run to update.*
|
||||
@@ -0,0 +1,16 @@
|
||||
# Game Boy (GB) — 1 hacks
|
||||
|
||||
```dataview
|
||||
TABLE base, version, status, type
|
||||
FROM "Hacks"
|
||||
WHERE platform = "GB"
|
||||
SORT file.name ASC
|
||||
```
|
||||
|
||||
## Static
|
||||
|
||||
| Hack | Base | Version | Status | Type |
|
||||
|---|---|---|---|---|
|
||||
| [[Brown]] | Red | 1.1 | Complete | New Experience |
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,72 @@
|
||||
# Game Boy Advance (GBA) — 57 hacks
|
||||
|
||||
```dataview
|
||||
TABLE base, version, status, type
|
||||
FROM "Hacks"
|
||||
WHERE platform = "GBA"
|
||||
SORT file.name ASC
|
||||
```
|
||||
|
||||
## Static
|
||||
|
||||
| Hack | Base | Version | Status | Type |
|
||||
|---|---|---|---|---|
|
||||
| [[Adventure - Red Chapter]] | FireRed | Beta 15 | Complete (beta) | New Experience |
|
||||
| [[Aesthetic Red]] | FireRed | 1.1 | Complete | Cosmetic, Vanilla+ |
|
||||
| [[Amethyst]] | Emerald | 1.2.0 | Ongoing | Expansion, New Experience |
|
||||
| [[Crystal Advance Redux]] | Emerald | 2026-05-06 | Ongoing | Demake, Vanilla+ |
|
||||
| [[Dark Rising]] | FireRed | 1 (Origins) | Complete | New Experience, Difficulty |
|
||||
| [[Dark Rising - Order Destroyed]] | FireRed | Complete | Complete | New Experience, Difficulty |
|
||||
| [[Dark Rising 2]] | FireRed | Complete | Complete | New Experience, Difficulty |
|
||||
| [[Elite Redux]] | Emerald | 2.65.3b | Ongoing | Expansion, Difficulty |
|
||||
| [[Emerald Azure]] | Emerald | 0.5.3 | Beta | New Experience, Expansion |
|
||||
| [[Emerald Extended Cut]] | Emerald | Classic+ 1.3 | Complete | Vanilla+, QoL |
|
||||
| [[Emerald Imperium]] | Emerald | 1.3.1 | Complete | Expansion, Difficulty |
|
||||
| [[Emerald Kaizo]] | Emerald | — | Complete | Difficulty |
|
||||
| [[Emerald Rogue]] | Emerald | 2.1.2 EX | Ongoing | Roguelite, Expansion |
|
||||
| [[Emerald Seaglass]] | Emerald | 3.0 | Complete | Vanilla+, QoL, Expansion |
|
||||
| [[Emerald Squared]] | Emerald | 2.6.2 | Complete | Difficulty, Vanilla+ |
|
||||
| [[Fire Red Extended]] | FireRed | 3.5.6 | Ongoing | Vanilla+, Expansion |
|
||||
| [[Fire of Sky]] | — | 1.0.3 | Complete | New Experience |
|
||||
| [[FireRed & LeafGreen+ (FRLG+)]] | FireRed | 1.5.1 | Ongoing | Vanilla+, QoL |
|
||||
| [[FireRed Deluxe]] | FireRed | 20.5 | Ongoing | Vanilla+, Expansion, QoL |
|
||||
| [[FireRed Reignited]] | FireRed | 1.55 | Ongoing | Vanilla+, QoL |
|
||||
| [[Flora Sky]] | Emerald | Complete | Complete | New Experience |
|
||||
| [[GS Chronicles]] | FireRed | 2.7.6 | Complete | New Experience, Demake |
|
||||
| [[Gaia]] | FireRed | 3.2 | Complete | New Experience |
|
||||
| [[Glazed]] | Emerald | 9.2.0 | Complete | New Experience |
|
||||
| [[Heart and Soul]] | FireRed | 1.2.1 | Ongoing | New Experience, Demake |
|
||||
| [[Hearth]] | Emerald | 0.1.27 | Beta | New Experience, Expansion |
|
||||
| [[Hoenn's Last Wish]] | Emerald | 0.4.7 | Beta | New Experience, Expansion |
|
||||
| [[Inclement Emerald]] | Emerald | — | Complete | Difficulty, Expansion |
|
||||
| [[Inkwell]] | Emerald | 1.04 | Ongoing | New Experience, Expansion |
|
||||
| [[Lazarus]] | Emerald (TrashMan) | v2 | Ongoing | New Experience, Expansion |
|
||||
| [[Light Platinum]] | Ruby | 1.1 | Complete | New Experience |
|
||||
| [[Liquid Crystal]] | FireRed | 3.3 | Complete | New Experience, Demake |
|
||||
| [[Mega Power]] | Ruby | 5.62 | Complete | New Experience |
|
||||
| [[Modern Emerald]] | Emerald | 3.3.1 | Complete | Vanilla+, QoL, Expansion |
|
||||
| [[Moemon Mega FireRed]] | FireRed | 1.4c | Complete | Cosmetic |
|
||||
| [[Moemon Star Emerald]] | Emerald | 1.1c | Complete | Cosmetic |
|
||||
| [[Odyssey]] | FireRed | 4.1.1 | Complete | New Experience |
|
||||
| [[Omega Ruby Origins]] | Emerald | 1.4.8.7 | Ongoing | Demake, New Experience |
|
||||
| [[Phoenix Red]] | FireRed | 1.2 | Complete | Difficulty, Expansion |
|
||||
| [[Pisces]] | — | 1.5.4 | Complete | New Experience |
|
||||
| [[Project Nova]] | Emerald | 2.7.0 | Ongoing | New Experience, Expansion |
|
||||
| [[R.O.W.E.]] | Emerald | 2.1.1 | Ongoing | New Experience, QoL, Expansion |
|
||||
| [[Radical Red]] | FireRed | 4.10 | Ongoing | Difficulty, Expansion |
|
||||
| [[Recordkeepers]] | Emerald | 1.2.1 | Ongoing | New Experience, Expansion |
|
||||
| [[Resolute]] | Ruby | 2.97 | Complete | New Experience |
|
||||
| [[Saiph]] | FireRed | 2020 | Complete | New Experience |
|
||||
| [[Saiph 2]] | FireRed | 1.4.0 | Complete | New Experience |
|
||||
| [[Snakewood]] | Ruby | — | Complete | New Experience |
|
||||
| [[Sors]] | FireRed | 1.3 | Complete | New Experience |
|
||||
| [[Sovereign of the Skies]] | FireRed | 2.1.2 | Complete | New Experience |
|
||||
| [[Super Mariomon]] | Emerald | 1.5.2 | Complete | New Experience, Cosmetic |
|
||||
| [[Sword and Shield Ultimate Plus]] | FireRed | 1.2.1.2 | Ongoing | Demake, New Experience |
|
||||
| [[The Pit]] | Emerald | 2.5.1 | Ongoing | Roguelite, Difficulty, Expansion |
|
||||
| [[Theta Emerald EX]] | Emerald | EX | Complete | Expansion, Vanilla+ |
|
||||
| [[Tourmaline]] | Emerald | 1.1.1 | Ongoing | New Experience, Expansion |
|
||||
| [[Valiant]] | Emerald | 4.2.3 | Ongoing | New Experience, Expansion |
|
||||
| [[WaveBlue]] | FireRed | 1.7.5 | Ongoing | New Experience |
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,24 @@
|
||||
# Game Boy Color (GBC) — 9 hacks
|
||||
|
||||
```dataview
|
||||
TABLE base, version, status, type
|
||||
FROM "Hacks"
|
||||
WHERE platform = "GBC"
|
||||
SORT file.name ASC
|
||||
```
|
||||
|
||||
## Static
|
||||
|
||||
| Hack | Base | Version | Status | Type |
|
||||
|---|---|---|---|---|
|
||||
| [[Ambrosia]] | Crystal | 2.4.0 | Ongoing | New Experience |
|
||||
| [[Crystal Clear]] | Crystal | 2.5.7 | Complete | New Experience, QoL |
|
||||
| [[Crystal Inheritance]] | Crystal | 1.0.3 | Complete | New Experience |
|
||||
| [[Crystal Kaizo]] | Crystal | 1.0 | Complete | Difficulty |
|
||||
| [[Low Budget Crystal]] | Crystal | — | Complete | Vanilla+, QoL |
|
||||
| [[Orange]] | Crystal | — | Complete | New Experience |
|
||||
| [[Peridot]] | Crystal | 2.2.3 | Ongoing | New Experience |
|
||||
| [[Polished Crystal]] | Crystal | 3.2.3 | Complete | Vanilla+, QoL, Expansion |
|
||||
| [[Prism]] | Crystal | 1.0 | Complete | New Experience |
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,23 @@
|
||||
# Nintendo DS (NDS) — 8 hacks
|
||||
|
||||
```dataview
|
||||
TABLE base, version, status, type
|
||||
FROM "Hacks"
|
||||
WHERE platform = "NDS"
|
||||
SORT file.name ASC
|
||||
```
|
||||
|
||||
## Static
|
||||
|
||||
| Hack | Base | Version | Status | Type |
|
||||
|---|---|---|---|---|
|
||||
| [[Blaze Black]] | Black | — | Complete | Vanilla+, Difficulty |
|
||||
| [[Blaze Black 2 Redux]] | Black 2 | 1.3.0 | Complete | Vanilla+, Difficulty, Expansion |
|
||||
| [[Following Renegade Platinum]] | Platinum | 2.0 | Complete | Difficulty, Vanilla+, QoL |
|
||||
| [[Renegade Platinum]] | Platinum | 1.3.0 | Complete | Difficulty, Vanilla+ |
|
||||
| [[Sacred Gold]] | HeartGold | 1.05 | Complete | Vanilla+, Difficulty |
|
||||
| [[Storm Silver]] | SoulSilver | 1.05 | Complete | Vanilla+, Difficulty |
|
||||
| [[Volt White]] | White | — | Complete | Vanilla+, Difficulty |
|
||||
| [[Volt White 2 Redux]] | White 2 | 1.4.1 | Complete | Vanilla+, Difficulty, Expansion |
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,23 @@
|
||||
# Pokémon ROM-Hack Vault
|
||||
|
||||
An [Obsidian](https://obsidian.md) vault documenting the **75** Pokémon ROM-hacks
|
||||
in the valhalla library. Open *this folder* as a vault (or copy it into an existing one).
|
||||
|
||||
## Layout
|
||||
- **[[Index]]** — the master directory (Dataview + static table).
|
||||
- **[[Types]]** — the type taxonomy (QoL, Vanilla+, Difficulty, Expansion, New Experience, Demake, Roguelite, Cosmetic).
|
||||
- **Hacks/** — one note per hack with frontmatter properties + tags.
|
||||
- **Platforms/** — per-system maps of content (GBA / GBC / GB / NDS).
|
||||
|
||||
## Conventions
|
||||
- Frontmatter uses Obsidian **properties** (`platform`, `base`, `version`, `status`, `type`, `generation`, `source`) so the **Dataview** and **Bases** plugins work.
|
||||
- Every note also carries **tags** (`#platform/gba`, `#type/difficulty`, `#status/complete`, `#base/firered`) so search/graph work with **zero plugins**.
|
||||
- `library_path` points at the file under `roms/<platform>/Hacks/` on valhalla.
|
||||
|
||||
## Recommended plugins
|
||||
- **Dataview** (the Index/Platform tables) and optionally **Bases** (Obsidian's native DB view).
|
||||
|
||||
## Caveats
|
||||
- `base`, `version`, and `type` are best-effort from the import metadata + general knowledge; a few obscure hacks show `base: —` where the source wasn't certain. Correct any in `scripts/build-romhack-vault.py` and re-run.
|
||||
|
||||
*Generated by `scripts/build-romhack-vault.py`.*
|
||||
@@ -0,0 +1,186 @@
|
||||
# Type Taxonomy
|
||||
|
||||
Each hack is tagged with one or more of these. Tags are also queryable as `#type/...`.
|
||||
|
||||
## Vanilla+
|
||||
Official game enhanced — QoL, all species obtainable, light rebalance; same region/story.
|
||||
|
||||
`#type/vanilla+` — 21 hacks
|
||||
|
||||
- [[Aesthetic Red]]
|
||||
- [[Blaze Black]]
|
||||
- [[Blaze Black 2 Redux]]
|
||||
- [[Crystal Advance Redux]]
|
||||
- [[Emerald Extended Cut]]
|
||||
- [[Emerald Seaglass]]
|
||||
- [[Emerald Squared]]
|
||||
- [[Fire Red Extended]]
|
||||
- [[FireRed & LeafGreen+ (FRLG+)]]
|
||||
- [[FireRed Deluxe]]
|
||||
- [[FireRed Reignited]]
|
||||
- [[Following Renegade Platinum]]
|
||||
- [[Low Budget Crystal]]
|
||||
- [[Modern Emerald]]
|
||||
- [[Polished Crystal]]
|
||||
- [[Renegade Platinum]]
|
||||
- [[Sacred Gold]]
|
||||
- [[Storm Silver]]
|
||||
- [[Theta Emerald EX]]
|
||||
- [[Volt White]]
|
||||
- [[Volt White 2 Redux]]
|
||||
|
||||
## QoL
|
||||
Primarily quality-of-life conveniences over an official base.
|
||||
|
||||
`#type/qol` — 11 hacks
|
||||
|
||||
- [[Crystal Clear]]
|
||||
- [[Emerald Extended Cut]]
|
||||
- [[Emerald Seaglass]]
|
||||
- [[FireRed & LeafGreen+ (FRLG+)]]
|
||||
- [[FireRed Deluxe]]
|
||||
- [[FireRed Reignited]]
|
||||
- [[Following Renegade Platinum]]
|
||||
- [[Low Budget Crystal]]
|
||||
- [[Modern Emerald]]
|
||||
- [[Polished Crystal]]
|
||||
- [[R.O.W.E.]]
|
||||
|
||||
## Difficulty
|
||||
Built to be hard — boosted AI/teams, kaizo, or competitive rulesets.
|
||||
|
||||
`#type/difficulty` — 20 hacks
|
||||
|
||||
- [[Blaze Black]]
|
||||
- [[Blaze Black 2 Redux]]
|
||||
- [[Crystal Kaizo]]
|
||||
- [[Dark Rising]]
|
||||
- [[Dark Rising - Order Destroyed]]
|
||||
- [[Dark Rising 2]]
|
||||
- [[Elite Redux]]
|
||||
- [[Emerald Imperium]]
|
||||
- [[Emerald Kaizo]]
|
||||
- [[Emerald Squared]]
|
||||
- [[Following Renegade Platinum]]
|
||||
- [[Inclement Emerald]]
|
||||
- [[Phoenix Red]]
|
||||
- [[Radical Red]]
|
||||
- [[Renegade Platinum]]
|
||||
- [[Sacred Gold]]
|
||||
- [[Storm Silver]]
|
||||
- [[The Pit]]
|
||||
- [[Volt White]]
|
||||
- [[Volt White 2 Redux]]
|
||||
|
||||
## Expansion
|
||||
Built on a decomp + expansion: many generations, modern mechanics, new abilities/moves.
|
||||
|
||||
`#type/expansion` — 26 hacks
|
||||
|
||||
- [[Amethyst]]
|
||||
- [[Blaze Black 2 Redux]]
|
||||
- [[Elite Redux]]
|
||||
- [[Emerald Azure]]
|
||||
- [[Emerald Imperium]]
|
||||
- [[Emerald Rogue]]
|
||||
- [[Emerald Seaglass]]
|
||||
- [[Fire Red Extended]]
|
||||
- [[FireRed Deluxe]]
|
||||
- [[Hearth]]
|
||||
- [[Hoenn's Last Wish]]
|
||||
- [[Inclement Emerald]]
|
||||
- [[Inkwell]]
|
||||
- [[Lazarus]]
|
||||
- [[Modern Emerald]]
|
||||
- [[Phoenix Red]]
|
||||
- [[Polished Crystal]]
|
||||
- [[Project Nova]]
|
||||
- [[R.O.W.E.]]
|
||||
- [[Radical Red]]
|
||||
- [[Recordkeepers]]
|
||||
- [[The Pit]]
|
||||
- [[Theta Emerald EX]]
|
||||
- [[Tourmaline]]
|
||||
- [[Valiant]]
|
||||
- [[Volt White 2 Redux]]
|
||||
|
||||
## New Experience
|
||||
New region, story, and/or Pokédex — a fresh adventure, not the official game.
|
||||
|
||||
`#type/newexperience` — 43 hacks
|
||||
|
||||
- [[Adventure - Red Chapter]]
|
||||
- [[Ambrosia]]
|
||||
- [[Amethyst]]
|
||||
- [[Brown]]
|
||||
- [[Crystal Clear]]
|
||||
- [[Crystal Inheritance]]
|
||||
- [[Dark Rising]]
|
||||
- [[Dark Rising - Order Destroyed]]
|
||||
- [[Dark Rising 2]]
|
||||
- [[Emerald Azure]]
|
||||
- [[Fire of Sky]]
|
||||
- [[Flora Sky]]
|
||||
- [[GS Chronicles]]
|
||||
- [[Gaia]]
|
||||
- [[Glazed]]
|
||||
- [[Heart and Soul]]
|
||||
- [[Hearth]]
|
||||
- [[Hoenn's Last Wish]]
|
||||
- [[Inkwell]]
|
||||
- [[Lazarus]]
|
||||
- [[Light Platinum]]
|
||||
- [[Liquid Crystal]]
|
||||
- [[Mega Power]]
|
||||
- [[Odyssey]]
|
||||
- [[Omega Ruby Origins]]
|
||||
- [[Orange]]
|
||||
- [[Peridot]]
|
||||
- [[Pisces]]
|
||||
- [[Prism]]
|
||||
- [[Project Nova]]
|
||||
- [[R.O.W.E.]]
|
||||
- [[Recordkeepers]]
|
||||
- [[Resolute]]
|
||||
- [[Saiph]]
|
||||
- [[Saiph 2]]
|
||||
- [[Snakewood]]
|
||||
- [[Sors]]
|
||||
- [[Sovereign of the Skies]]
|
||||
- [[Super Mariomon]]
|
||||
- [[Sword and Shield Ultimate Plus]]
|
||||
- [[Tourmaline]]
|
||||
- [[Valiant]]
|
||||
- [[WaveBlue]]
|
||||
|
||||
## Demake
|
||||
Recreates a later-generation game on older hardware.
|
||||
|
||||
`#type/demake` — 6 hacks
|
||||
|
||||
- [[Crystal Advance Redux]]
|
||||
- [[GS Chronicles]]
|
||||
- [[Heart and Soul]]
|
||||
- [[Liquid Crystal]]
|
||||
- [[Omega Ruby Origins]]
|
||||
- [[Sword and Shield Ultimate Plus]]
|
||||
|
||||
## Roguelite
|
||||
Run-based, randomized, permadeath-flavored structure.
|
||||
|
||||
`#type/roguelite` — 2 hacks
|
||||
|
||||
- [[Emerald Rogue]]
|
||||
- [[The Pit]]
|
||||
|
||||
## Cosmetic
|
||||
Visual/audio overhaul (e.g. Moemon sprites, tilesets, music) over an existing game.
|
||||
|
||||
`#type/cosmetic` — 4 hacks
|
||||
|
||||
- [[Aesthetic Red]]
|
||||
- [[Moemon Mega FireRed]]
|
||||
- [[Moemon Star Emerald]]
|
||||
- [[Super Mariomon]]
|
||||
|
||||
[[Index|← back to directory]]
|
||||
@@ -0,0 +1,79 @@
|
||||
# Pokémon ROM Hacks — Manual Acquisition List
|
||||
|
||||
Worthwhile hacks that **could not be auto-patched** because their patches are
|
||||
gated behind anti-bot hosts (hackdex.app), Discord servers, or Google Drive/MEGA
|
||||
links that aren't directly fetchable. The auto-patched set (25 hacks) is already
|
||||
in `roms/<platform>/Hacks/` — see the bottom of this file.
|
||||
|
||||
**Scope:** pre-3DS handhelds (gb/gbc/gba/nds) + pre-Wii consoles, per request.
|
||||
|
||||
---
|
||||
|
||||
## How to hand one off to me
|
||||
|
||||
Once you grab a patch (`.bps` / `.ips` / `.ups` / `.xdelta`), drop it anywhere on
|
||||
valhalla (e.g. `/storage1/igir/romhacks/incoming/`) and tell me. Applying it is seconds:
|
||||
|
||||
```bash
|
||||
# BPS/UPS self-verify the base ROM; xdelta v1 verifies source MD5.
|
||||
python3 /storage1/igir/romhacks/tools/apply.py <patch> "<base rom>" <out.ext>
|
||||
# xdelta v1 patches (magic %XDZ): docker run ... node:lts -> apt install xdelta
|
||||
```
|
||||
|
||||
Or I add a line to `scripts/romhack-fetch.py`'s manifest and run `--place`.
|
||||
|
||||
A patched ROM is the same end result either way — if you'd rather just download a
|
||||
**pre-patched ROM**, that works too; I'll validate + rename it to match.
|
||||
|
||||
---
|
||||
|
||||
## Wanted — handhelds
|
||||
|
||||
Base-ROM ownership is noted; ✅ = you already own the base on valhalla.
|
||||
|
||||
> **Update (2026-06-06):** the big `pokemon/` drop-folder import added 53 more hacks
|
||||
> (incl. Emerald Rogue EX, Emerald Seaglass, Sors, Saiph 1 & 2, Flora Sky, Sovereign
|
||||
> of the Skies, Crystal Kaizo, Lazarus) plus **Following Renegade Platinum** in place
|
||||
> of Following Platinum. The list below is what's *still* not acquired.
|
||||
|
||||
| Hack | Platform | Base ROM | Format | Where to get it | Notes |
|
||||
|---|---|---|---|---|---|
|
||||
| **Run & Bun** | GBA | FireRed 1.0 ✅ | BPS | Official Discord · hackdex | Acclaimed hard/competitive hack. Discord-gated. |
|
||||
| **CrystalDust** | GBA | Ruby ✅ | UPS | itch.io (forever-team) · Discord | Gen-2 Johto remake, complete. |
|
||||
| **Outlaw** | GBA | FireRed ✅ | IPS | PokeCommunity | Mature, short, complete. |
|
||||
| **Vega** | GBA | **FireRed (JP) ❌** | IPS | romhacking archives | Needs a **Japanese** FireRed 1.0 base — you don't own one. |
|
||||
| **Gold/Silver Kaizo** | GBC | Gold/Silver ✅ | IPS | Kaizo Discord | Complete difficulty hacks (Crystal Kaizo now acquired). |
|
||||
|
||||
### Optional add-on patches (archived, not applied)
|
||||
|
||||
Inside the Sors / Saiph 2 downloads were **optional** extra IPS patches (3DS VC mode, lag-fix, vigilante mode, time-based events) meant to be layered on top of the main ROM. The main ROMs are placed; these extras are kept in `patches/_imported/` if you ever want them applied.
|
||||
|
||||
---
|
||||
|
||||
## Versions worth refreshing later
|
||||
|
||||
These are **already placed**, but newer/better builds live behind gated hosts:
|
||||
|
||||
- **Radical Red** — now at v4.10 (from your drop); latest dev builds are on the official Discord.
|
||||
- **Unbound** — already in your library (pre-existing); update via hackdex.
|
||||
|
||||
## Deliberately excluded
|
||||
|
||||
- **Clover** — polished but full of offensive/meme content (your "no shitpost" rule).
|
||||
|
||||
## Console (pre-Wii)
|
||||
|
||||
No well-regarded *finished* N64/GameCube Pokémon ROM hacks exist beyond the GameCube
|
||||
Colosseum/XD enhancement hacks you **already have** (`Grand Colosseum`, `XD – XG`).
|
||||
Nothing to acquire here.
|
||||
|
||||
---
|
||||
|
||||
## Already auto-patched (reference) — in `roms/<platform>/Hacks/`
|
||||
|
||||
- **gb (1):** Brown
|
||||
- **gbc (3):** Polished Crystal · Crystal Clear · Prism
|
||||
- **gba (14):** Gaia · Radical Red · Inclement Emerald · Glazed · Light Platinum · Liquid Crystal · Theta Emerald EX · Snakewood · Mega Power · Resolute · Emerald Kaizo · Dark Rising · Dark Rising 2 · Dark Rising Order Destroyed
|
||||
- **nds (7):** Renegade Platinum · Sacred Gold · Storm Silver · Blaze Black · Volt White · Blaze Black 2 Redux · Volt White 2 Redux
|
||||
|
||||
Source artifacts retained under `/storage1/igir/romhacks/patches/<platform>/`.
|
||||
@@ -0,0 +1,471 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Generate an Obsidian vault documenting the Pokémon ROM-hacks in the library.
|
||||
|
||||
Emits, under pokemon-romhack-vault/ :
|
||||
- Hacks/<Name>.md one note per hack (YAML frontmatter + tags + summary)
|
||||
- Index.md directory MOC (Dataview query + static fallback table)
|
||||
- Types.md the type taxonomy
|
||||
- Platforms/*.md per-platform MOCs (Dataview)
|
||||
- README.md how to use the vault
|
||||
|
||||
The dataset below is the single source of truth — add a row and re-run to extend.
|
||||
Frontmatter uses Obsidian "properties" so Dataview / Bases plugins work; tags
|
||||
(#platform/.. #type/.. #status/.. #base/..) make it usable with zero plugins too.
|
||||
|
||||
Run from the repo root: python scripts/build-romhack-vault.py
|
||||
"""
|
||||
import os, re, urllib.parse
|
||||
|
||||
VAULT = os.path.join(os.path.dirname(__file__), "..", "pokemon-romhack-vault")
|
||||
ADDED = "2026-06-06"
|
||||
|
||||
# Type taxonomy (keep in sync with Types.md generation below)
|
||||
TYPES = {
|
||||
"Vanilla+": "Official game enhanced — QoL, all species obtainable, light rebalance; same region/story.",
|
||||
"QoL": "Primarily quality-of-life conveniences over an official base.",
|
||||
"Difficulty": "Built to be hard — boosted AI/teams, kaizo, or competitive rulesets.",
|
||||
"Expansion": "Built on a decomp + expansion: many generations, modern mechanics, new abilities/moves.",
|
||||
"New Experience": "New region, story, and/or Pokédex — a fresh adventure, not the official game.",
|
||||
"Demake": "Recreates a later-generation game on older hardware.",
|
||||
"Roguelite": "Run-based, randomized, permadeath-flavored structure.",
|
||||
"Cosmetic": "Visual/audio overhaul (e.g. Moemon sprites, tilesets, music) over an existing game.",
|
||||
}
|
||||
|
||||
# base ROM display -> tag slug
|
||||
def base_tag(b):
|
||||
return re.sub(r"[^a-z0-9]+", "", b.lower()) if b and b != "—" else "unknown"
|
||||
|
||||
# Each: (title, platform, base, version, status, [types], gen, url, summary)
|
||||
# base "—" = not confidently known. url = canonical source if known else "".
|
||||
HACKS = [
|
||||
# ---------------- GB ----------------
|
||||
("Pokémon Brown", "gb", "Red", "1.1", "Complete", ["New Experience"], "Gen 1+",
|
||||
"https://www.pokecommunity.com/threads/pokemon-brown.27915/",
|
||||
"One of the oldest and most influential hacks. A brand-new Rijon region with new towns, gyms, and a custom dex built on Gen 1, by Koolboyman (who later made Prism)."),
|
||||
# ---------------- GBC ----------------
|
||||
("Pokémon Ambrosia", "gbc", "Crystal", "2.4.0", "Ongoing", ["New Experience"], "Gen 2 style",
|
||||
"https://www.pokecommunity.com/",
|
||||
"An ambitious Crystal-engine hack with a new region, expanded dex, and modernized features pushed onto Gen 2 hardware."),
|
||||
("Pokémon Crystal Clear", "gbc", "Crystal", "2.5.7", "Complete", ["New Experience", "QoL"], "Gen 1–2",
|
||||
"https://www.pokecommunity.com/threads/pokemon-crystal-clear.382197/",
|
||||
"Open-world Crystal — pick any starter, tackle gyms in any order, roam Johto+Kanto freely. A landmark open-world take on Gen 2 by ShockSlayer."),
|
||||
("Pokémon Crystal Inheritance", "gbc", "Crystal", "1.0.3", "Complete", ["New Experience"], "Gen 2+",
|
||||
"",
|
||||
"A Crystal-based adventure with a new story and updated rosters/mechanics within the Gen 2 framework."),
|
||||
("Pokémon Crystal Kaizo", "gbc", "Crystal", "1.0", "Complete", ["Difficulty"], "Gen 2",
|
||||
"",
|
||||
"The definitive Gen 2 kaizo: every trainer is a brutal, fully-EV'd gauntlet. Companion to the Gold/Silver Kaizo line."),
|
||||
("Pokémon Low Budget Crystal", "gbc", "Crystal", "—", "Complete", ["Vanilla+", "QoL"], "Gen 2",
|
||||
"",
|
||||
"A light, faithful Crystal enhancement — quality-of-life tweaks and availability fixes without changing the core game."),
|
||||
("Pokémon Orange", "gbc", "Crystal", "—", "Complete", ["New Experience"], "Gen 2 style",
|
||||
"",
|
||||
"Set in the anime's Orange Islands / Orange League. This is the modern Suloku-patched build with bug fixes and PSS-era touches."),
|
||||
("Pokémon Peridot", "gbc", "Crystal", "2.2.3", "Ongoing", ["New Experience"], "Gen 2 style",
|
||||
"",
|
||||
"A from-scratch new region on the Gen 2 engine with an original dex and story."),
|
||||
("Pokémon Polished Crystal", "gbc", "Crystal", "3.2.3", "Complete", ["Vanilla+", "QoL", "Expansion"], "Gen 1–7 mons",
|
||||
"https://github.com/Rangi42/polishedcrystal",
|
||||
"The gold standard Crystal enhancement: physical/special split, ~Gen 7 movesets/species availability, faithful or modern modes, tons of QoL. Open-source decomp."),
|
||||
("Pokémon Prism", "gbc", "Crystal", "1.0", "Complete", ["New Experience"], "Gen 2+",
|
||||
"https://www.pokecommunity.com/threads/pokemon-prism.379413/",
|
||||
"Koolboyman's acclaimed new Naljo region — new types, side games, huge custom dex. Famously C&D'd then completed; a Gen 2 magnum opus."),
|
||||
# ---------------- GBA ----------------
|
||||
("Pokémon Adventure - Red Chapter", "gba", "FireRed", "Beta 15", "Complete (beta)", ["New Experience"], "Gen 1–6 mons",
|
||||
"https://www.pokecommunity.com/threads/pokemon-adventure-red-chapter.331313/",
|
||||
"Based on the Pokémon Adventures (Pokémon Special) manga — play through Red's story with manga events. Beta 15 is the full, finished beta."),
|
||||
("Pokémon Aesthetic Red", "gba", "FireRed", "1.1", "Complete", ["Cosmetic", "Vanilla+"], "Gen 1",
|
||||
"",
|
||||
"A visual + musical overhaul of FireRed — restyled tiles, sprites, and soundtrack while keeping vanilla gameplay."),
|
||||
("Pokémon Amethyst", "gba", "Emerald", "1.2.0", "Ongoing", ["Expansion", "New Experience"], "Multi-gen",
|
||||
"https://www.hackdex.app/hack/pokemon-amethyst",
|
||||
"A pokeemerald-expansion adventure with a new region/story and modern mechanics."),
|
||||
("Pokémon Crystal Advance Redux", "gba", "Emerald", "2026-05-06", "Ongoing", ["Demake", "Vanilla+"], "Gen 2 on GBA",
|
||||
"",
|
||||
"Pokémon Crystal rebuilt on the GBA (pokeemerald) with Gen-3+ engine conveniences — Johto with modern QoL."),
|
||||
("Pokémon Dark Rising", "gba", "FireRed", "1 (Origins)", "Complete", ["New Experience", "Difficulty"], "Multi-gen + fakemon",
|
||||
"https://www.pokecommunity.com/threads/pokemon-dark-rising-series.341667/",
|
||||
"Notoriously hard story-driven hack with a dark plot, fakemon, and multi-gen mons. The Origins build is the remastered DR1."),
|
||||
("Pokémon Dark Rising 2", "gba", "FireRed", "Complete", "Complete", ["New Experience", "Difficulty"], "Multi-gen + fakemon",
|
||||
"https://www.pokecommunity.com/threads/pokemon-dark-rising-series.341667/",
|
||||
"Sequel to Dark Rising — bigger story, more fakemon, same punishing difficulty."),
|
||||
("Pokémon Dark Rising - Order Destroyed", "gba", "FireRed", "Complete", "Complete", ["New Experience", "Difficulty"], "Multi-gen",
|
||||
"https://www.pokecommunity.com/threads/pokemon-dark-rising-series.341667/",
|
||||
"A spin-off entry in the Dark Rising saga."),
|
||||
("Pokémon Elite Redux", "gba", "Emerald", "2.65.3b", "Ongoing", ["Expansion", "Difficulty"], "Multi-gen",
|
||||
"https://www.hackdex.app/hack/elite-redux",
|
||||
"A theorycrafter's playground: every species gets multiple abilities, a vastly expanded movepool, and brutal fights. Deep team-building over story."),
|
||||
("Pokémon Emerald Azure", "gba", "Emerald", "0.5.3", "Beta", ["New Experience", "Expansion"], "Multi-gen",
|
||||
"https://www.hackdex.app/hack/pokemon-emerald-azure",
|
||||
"An in-development new-region Emerald-expansion hack (early/beta)."),
|
||||
("Pokémon Emerald Extended Cut", "gba", "Emerald", "Classic+ 1.3", "Complete", ["Vanilla+", "QoL"], "Gen 3",
|
||||
"",
|
||||
"Emerald with restored/expanded content and QoL while staying close to the original Hoenn experience."),
|
||||
("Pokémon Emerald Imperium", "gba", "Emerald", "1.3.1", "Complete", ["Expansion", "Difficulty"], "Multi-gen",
|
||||
"https://www.hackdex.app/hack/emerald-imperium",
|
||||
"A content- and postgame-heavy Emerald-expansion hack with challenging fights and lots of endgame."),
|
||||
("Pokémon Emerald Kaizo", "gba", "Emerald", "—", "Complete", ["Difficulty"], "Gen 3",
|
||||
"",
|
||||
"The classic Emerald kaizo — every gym/E4 team is maxed-out and merciless."),
|
||||
("Pokémon Emerald Rogue", "gba", "Emerald", "2.1.2 EX", "Ongoing", ["Roguelite", "Expansion"], "Multi-gen",
|
||||
"https://github.com/Pokabbie/pokeemerald-rogue",
|
||||
"A roguelite take on Emerald: run-based, procedurally routed, escalating difficulty toward the Champion. EX edition uses the modern expansion."),
|
||||
("Pokémon Emerald Seaglass", "gba", "Emerald", "3.0", "Complete", ["Vanilla+", "QoL", "Expansion"], "Multi-gen",
|
||||
"https://www.hackdex.app/hack/pokemon-emerald-seaglass",
|
||||
"Emerald modernized via the expansion — physical/special split, new species/forms, and heavy QoL while keeping Hoenn's story."),
|
||||
("Pokémon Emerald Squared", "gba", "Emerald", "2.6.2", "Complete", ["Difficulty", "Vanilla+"], "Gen 3",
|
||||
"",
|
||||
"An enhanced, harder Emerald — rebalanced trainers and availability for a tougher Hoenn run."),
|
||||
("Pokémon Fire of Sky", "gba", "—", "1.0.3", "Complete", ["New Experience"], "Multi-gen",
|
||||
"",
|
||||
"A story-focused new-adventure hack."),
|
||||
("Pokémon FireRed Deluxe", "gba", "FireRed", "20.5", "Ongoing", ["Vanilla+", "Expansion", "QoL"], "Multi-gen",
|
||||
"",
|
||||
"FireRed loaded with all obtainable species, modern mechanics, and QoL — a 'complete dex' enhanced Kanto."),
|
||||
("Pokémon Fire Red Extended", "gba", "FireRed", "3.5.6", "Ongoing", ["Vanilla+", "Expansion"], "Multi-gen",
|
||||
"",
|
||||
"FireRed extended with later-gen species and mechanics while preserving the Kanto journey."),
|
||||
("Pokémon FireRed & LeafGreen+ (FRLG+)", "gba", "FireRed", "1.5.1", "Ongoing", ["Vanilla+", "QoL"], "Gen 1–3",
|
||||
"",
|
||||
"A faithful 'plus' enhancement of FR/LG — availability fixes, split, and QoL with minimal change to the feel."),
|
||||
("Pokémon FireRed Reignited", "gba", "FireRed", "1.55", "Ongoing", ["Vanilla+", "QoL"], "Gen 1+",
|
||||
"",
|
||||
"A modern QoL remaster of FireRed."),
|
||||
("Pokémon Flora Sky", "gba", "Emerald", "Complete", "Complete", ["New Experience"], "Gen 3–4 mons",
|
||||
"https://www.pokecommunity.com/threads/pokemon-flora-sky.179365/",
|
||||
"A classic complete Emerald hack with a new region, Gen 4 additions, and a sky/Distortion-World-flavored plot."),
|
||||
("Pokémon Gaia", "gba", "FireRed", "3.2", "Complete", ["New Experience"], "Gen 1–6 mons",
|
||||
"https://www.pokecommunity.com/threads/pokemon-gaia.336982/",
|
||||
"Widely considered one of the best hacks ever: the Orbtus region, Gen 6 mechanics/Fairy type, an archaeology mystery, and Nintendo-grade polish."),
|
||||
("Pokémon Glazed", "gba", "Emerald", "9.2.0", "Complete", ["New Experience"], "Gen 1–6 mons",
|
||||
"https://www.pokecommunity.com/threads/pokemon-glazed.291376/",
|
||||
"A long-beloved new region (Tunod) crossing into Johto, with multiple starters incl. later gens. This is the polished modern build."),
|
||||
("Pokémon GS Chronicles", "gba", "FireRed", "2.7.6", "Complete", ["New Experience", "Demake"], "Gen 1–7 mons",
|
||||
"https://www.pokecommunity.com/threads/pokemon-gs-chronicles.346730/",
|
||||
"A HeartGold/SoulSilver-style Johto remake on GBA with modern mechanics and a rich postgame."),
|
||||
("Pokémon Heart and Soul", "gba", "FireRed", "1.2.1", "Ongoing", ["New Experience", "Demake"], "Johto",
|
||||
"",
|
||||
"A Johto-focused adventure inspired by the Gen 2/HGSS games."),
|
||||
("Pokémon Hearth", "gba", "Emerald", "0.1.27", "Beta", ["New Experience", "Expansion"], "Multi-gen",
|
||||
"",
|
||||
"An early-beta new-region expansion hack."),
|
||||
("Pokémon Hoenn's Last Wish", "gba", "Emerald", "0.4.7", "Beta", ["New Experience", "Expansion"], "Multi-gen",
|
||||
"",
|
||||
"An in-development Hoenn-set adventure on the Emerald expansion (early/beta)."),
|
||||
("Pokémon Inclement Emerald", "gba", "Emerald", "—", "Complete", ["Difficulty", "Expansion"], "Multi-gen",
|
||||
"https://www.hackdex.app/hack/inclement-emerald",
|
||||
"Emerald-expansion difficulty hack with all 8 gens obtainable, configurable hardcore modes, and smart AI. A modern favorite."),
|
||||
("Pokémon Inkwell", "gba", "Emerald", "1.04", "Ongoing", ["New Experience", "Expansion"], "Multi-gen",
|
||||
"",
|
||||
"A new-adventure hack built on the Emerald expansion."),
|
||||
("Pokémon Lazarus", "gba", "Emerald (TrashMan)", "v2", "Ongoing", ["New Experience", "Expansion"], "Multi-gen",
|
||||
"https://ko-fi.com/nemo622",
|
||||
"The Ilios region — a story-rich expansion hack by Nemo622 with new mechanics and detailed documentation."),
|
||||
("Pokémon Light Platinum", "gba", "Ruby", "1.1", "Complete", ["New Experience"], "Gen 1–4 mons",
|
||||
"https://www.pokecommunity.com/threads/pokemon-light-platinum.171377/",
|
||||
"A classic: the Zhery region with two leagues, Gen 4 mons, and a globe-trotting plot. Hugely popular older hack."),
|
||||
("Pokémon Liquid Crystal", "gba", "FireRed", "3.3", "Complete", ["New Experience", "Demake"], "Gen 1–4 mons",
|
||||
"https://www.pokecommunity.com/threads/pokemon-liquid-crystal.158473/",
|
||||
"A Johto (Crystal) remake on GBA with the Orange Islands postgame and modern conveniences."),
|
||||
("Pokémon Mega Power", "gba", "Ruby", "5.62", "Complete", ["New Experience"], "Gen 1–6 mons",
|
||||
"https://www.pokecommunity.com/threads/pokemon-mega-power.330510/",
|
||||
"By the Light Platinum-adjacent team — a new region with Mega Evolution, custom villains, and a 'build the strongest Pokémon' plot."),
|
||||
("Pokémon Modern Emerald", "gba", "Emerald", "3.3.1", "Complete", ["Vanilla+", "QoL", "Expansion"], "Multi-gen",
|
||||
"https://www.hackdex.app/hack/modern-emerald",
|
||||
"Emerald modernized end-to-end — all gens, modern mechanics, and a deep QoL/settings menu, while keeping Hoenn's story."),
|
||||
("Pokémon Moemon Mega FireRed", "gba", "FireRed", "1.4c", "Complete", ["Cosmetic"], "Gen 1",
|
||||
"",
|
||||
"A Moemon hack — Pokémon replaced with anthropomorphic 'moe' character sprites — over an enhanced FireRed."),
|
||||
("Pokémon Moemon Star Emerald", "gba", "Emerald", "1.1c", "Complete", ["Cosmetic"], "Gen 3",
|
||||
"",
|
||||
"A Moemon reskin of an enhanced Emerald (Star Emerald), with moe sprites throughout."),
|
||||
("Pokémon Odyssey", "gba", "FireRed", "4.1.1", "Complete", ["New Experience"], "Multi-gen",
|
||||
"https://www.hackdex.app/hack/pokemon-odyssey",
|
||||
"A highly-praised, atmospheric original adventure with a custom region, strong writing, and bespoke pixel art."),
|
||||
("Pokémon Omega Ruby Origins", "gba", "Emerald", "1.4.8.7", "Ongoing", ["Demake", "New Experience"], "Gen 6 on GBA",
|
||||
"",
|
||||
"An ORAS-style demake bringing the 3DS Hoenn remakes' features back to the GBA."),
|
||||
("Pokémon Phoenix Red", "gba", "FireRed", "1.2", "Complete", ["Difficulty", "Expansion"], "Multi-gen",
|
||||
"https://www.hackdex.app/hack/pokemon-phoenix-red",
|
||||
"An enhanced, harder FireRed with all 8 gens obtainable, Megas, and tough fights."),
|
||||
("Pokémon Pisces", "gba", "—", "1.5.4", "Complete", ["New Experience"], "Multi-gen",
|
||||
"",
|
||||
"An original-region adventure hack."),
|
||||
("Pokémon Project Nova", "gba", "Emerald", "2.7.0", "Ongoing", ["New Experience", "Expansion"], "Multi-gen",
|
||||
"",
|
||||
"A new-experience hack on the Emerald expansion."),
|
||||
("Pokémon Radical Red", "gba", "FireRed", "4.10", "Ongoing", ["Difficulty", "Expansion"], "Multi-gen",
|
||||
"https://www.hackdex.app/hack/radical-red",
|
||||
"The flagship modern difficulty hack: complete National Dex, Gen-9 mechanics, smart held-item/switching AI, and toggle modes from casual to brutal."),
|
||||
("Pokémon Recordkeepers", "gba", "Emerald", "1.2.1", "Ongoing", ["New Experience", "Expansion"], "Multi-gen",
|
||||
"https://www.hackdex.app/hack/recordkeepers",
|
||||
"A narrative-driven Emerald-expansion hack."),
|
||||
("Pokémon Resolute", "gba", "Ruby", "2.97", "Complete", ["New Experience"], "Gen 1–6 mons",
|
||||
"https://www.pokecommunity.com/threads/pokemon-resolute.330577/",
|
||||
"A story-heavy new region (Sun-Moon-era mons added) with a difficulty mode; from the Mega Power/Light Platinum lineage."),
|
||||
("Pokémon R.O.W.E.", "gba", "Emerald", "2.1.1", "Ongoing", ["New Experience", "QoL", "Expansion"], "Multi-gen",
|
||||
"https://www.hackdex.app/hack/pokemon-rowe",
|
||||
"Open-world Emerald — level scaling, ride-anywhere, nuzlocke-friendly settings, and all gens. The 'Mega Update' build."),
|
||||
("Pokémon Saiph", "gba", "FireRed", "2020", "Complete", ["New Experience"], "Multi-gen",
|
||||
"https://www.pokecommunity.com/threads/pokemon-saiph.412313/",
|
||||
"A complete original-region story hack with a darker tone."),
|
||||
("Pokémon Saiph 2", "gba", "FireRed", "1.4.0", "Complete", ["New Experience"], "Multi-gen",
|
||||
"https://www.pokecommunity.com/threads/pokemon-saiph-2.456789/",
|
||||
"Sequel to Saiph — a larger, polished original adventure (full release v1.4.0)."),
|
||||
("Pokémon Snakewood", "gba", "Ruby", "—", "Complete", ["New Experience"], "Gen 3 + fakemon",
|
||||
"https://www.pokecommunity.com/threads/pokemon-snakewood.146749/",
|
||||
"A cult-classic zombie-apocalypse reimagining of Hoenn — surreal, dark-comedic, and famously weird. Largely complete."),
|
||||
("Pokémon Sors", "gba", "FireRed", "1.3", "Complete", ["New Experience"], "Multi-gen",
|
||||
"https://www.pokecommunity.com/threads/pokemon-sors.420576/",
|
||||
"A complete story-driven hack with a full new region and extensive item/guide documentation."),
|
||||
("Pokémon Sovereign of the Skies", "gba", "FireRed", "2.1.2", "Complete", ["New Experience"], "Multi-gen",
|
||||
"https://www.pokecommunity.com/threads/pokemon-sovereign-of-the-skies.349500/",
|
||||
"A complete new region with custom dex and a sky-themed plot."),
|
||||
("Pokémon Super Mariomon", "gba", "Emerald", "1.5.2", "Complete", ["New Experience", "Cosmetic"], "Crossover",
|
||||
"",
|
||||
"A Mario × Pokémon crossover: catch and battle Mario-universe characters as 'Mariomon'. A complete novelty hack."),
|
||||
("Pokémon Sword and Shield Ultimate Plus", "gba", "FireRed", "1.2.1.2", "Ongoing", ["Demake", "New Experience"], "Gen 8 on GBA",
|
||||
"",
|
||||
"A Galar (Sword/Shield) demake bringing Gen 8's region, Pokémon, and Dynamax-era content to the GBA."),
|
||||
("Pokémon The Pit", "gba", "Emerald", "2.5.1", "Ongoing", ["Roguelite", "Difficulty", "Expansion"], "Multi-gen",
|
||||
"https://www.hackdex.app/hack/the-pit",
|
||||
"A roguelite/battle-focused descent: climb floors, draft a team, and fight escalating encounters. Built on the Emerald expansion."),
|
||||
("Pokémon Theta Emerald EX", "gba", "Emerald", "EX", "Complete", ["Expansion", "Vanilla+"], "Gen 1–6 mons",
|
||||
"https://www.pokecommunity.com/threads/pokemon-theta-emerald-ex.366617/",
|
||||
"Classic 'all 800+ mons in Emerald' hack — Megas, Fairy type, and the full dex obtainable within Hoenn's story."),
|
||||
("Pokémon Tourmaline", "gba", "Emerald", "1.1.1", "Ongoing", ["New Experience", "Expansion"], "Multi-gen",
|
||||
"",
|
||||
"A new-region adventure on the Emerald expansion."),
|
||||
("Pokémon Valiant", "gba", "Emerald", "4.2.3", "Ongoing", ["New Experience", "Expansion"], "Multi-gen",
|
||||
"https://www.hackdex.app/hack/pokemon-valiant",
|
||||
"An original-region story hack on the Emerald expansion with custom characters and content."),
|
||||
("Pokémon WaveBlue", "gba", "FireRed", "1.7.5", "Ongoing", ["New Experience"], "Multi-gen",
|
||||
"",
|
||||
"A new-region adventure built on FireRed."),
|
||||
# ---------------- NDS ----------------
|
||||
("Pokémon Blaze Black", "nds", "Black", "—", "Complete", ["Vanilla+", "Difficulty"], "Gen 1–5 mons",
|
||||
"https://www.pokecommunity.com/threads/pokemon-blaze-black-volt-white.252355/",
|
||||
"Drayano's Black overhaul — every species catchable in-game, boosted gym/E4 teams, and QoL. Pairs with Volt White."),
|
||||
("Pokémon Blaze Black 2 Redux", "nds", "Black 2", "1.3.0", "Complete", ["Vanilla+", "Difficulty", "Expansion"], "Gen 1–5 mons",
|
||||
"https://www.pokecommunity.com/",
|
||||
"A community 'Redux' fork of Drayano's Blaze Black 2 — expanded availability, rebalanced difficulty, and extra content."),
|
||||
("Pokémon Following Renegade Platinum", "nds", "Platinum", "2.0", "Complete", ["Difficulty", "Vanilla+", "QoL"], "Gen 1–4 mons",
|
||||
"https://www.reddit.com/r/PokemonROMhacks/comments/s4fbhi/",
|
||||
"Renegade Platinum with following Pokémon added — the acclaimed enhanced Sinnoh plus an HGSS-style walking partner."),
|
||||
("Pokémon Renegade Platinum", "nds", "Platinum", "1.3.0", "Complete", ["Difficulty", "Vanilla+"], "Gen 1–4 mons",
|
||||
"https://www.pokecommunity.com/threads/pokemon-renegade-platinum.347531/",
|
||||
"Drayano's definitive enhanced Platinum — full availability, much harder fights, and QoL. A community favorite Sinnoh run."),
|
||||
("Pokémon Sacred Gold", "nds", "HeartGold", "1.05", "Complete", ["Vanilla+", "Difficulty"], "Gen 1–4 mons",
|
||||
"https://www.pokecommunity.com/threads/pokemon-sacred-gold-storm-silver.165088/",
|
||||
"Drayano's enhanced HeartGold — all species obtainable, boosted teams, fixed movesets. Pairs with Storm Silver."),
|
||||
("Pokémon Storm Silver", "nds", "SoulSilver", "1.05", "Complete", ["Vanilla+", "Difficulty"], "Gen 1–4 mons",
|
||||
"https://www.pokecommunity.com/threads/pokemon-sacred-gold-storm-silver.165088/",
|
||||
"Drayano's enhanced SoulSilver — the SoulSilver counterpart to Sacred Gold."),
|
||||
("Pokémon Volt White", "nds", "White", "—", "Complete", ["Vanilla+", "Difficulty"], "Gen 1–5 mons",
|
||||
"https://www.pokecommunity.com/threads/pokemon-blaze-black-volt-white.252355/",
|
||||
"Drayano's White overhaul — full availability and boosted difficulty. The White counterpart to Blaze Black."),
|
||||
("Pokémon Volt White 2 Redux", "nds", "White 2", "1.4.1", "Complete", ["Vanilla+", "Difficulty", "Expansion"], "Gen 1–5 mons",
|
||||
"https://www.pokecommunity.com/",
|
||||
"A community 'Redux' fork of Drayano's Volt White 2 — expanded availability and rebalanced difficulty."),
|
||||
]
|
||||
|
||||
PLAT_NAME = {"gb": "Game Boy", "gbc": "Game Boy Color", "gba": "Game Boy Advance", "nds": "Nintendo DS"}
|
||||
|
||||
|
||||
def slugify_filename(title):
|
||||
# note filename: drop the "Pokémon " prefix for tidiness, keep the rest
|
||||
name = re.sub(r"^Pok[ée]mon\s+", "", title)
|
||||
return name.replace("/", "-")
|
||||
|
||||
|
||||
def yaml_list(items):
|
||||
return "[" + ", ".join(f'"{i}"' for i in items) + "]"
|
||||
|
||||
|
||||
def lookup_url(title):
|
||||
q = urllib.parse.quote(f"{title} rom hack")
|
||||
return f"https://duckduckgo.com/?q={q}"
|
||||
|
||||
|
||||
def write(path, content):
|
||||
os.makedirs(os.path.dirname(path), exist_ok=True)
|
||||
with open(path, "w", encoding="utf-8") as f:
|
||||
f.write(content)
|
||||
|
||||
|
||||
def gen_hack_note(h):
|
||||
title, plat, base, ver, status, types, gen, url, summary = h
|
||||
fname = slugify_filename(title)
|
||||
libname = "Pokemon - " + re.sub(r"^Pok[ée]mon\s+", "", title).replace("é", "e").replace("É", "E") + f" (Hack).{plat}"
|
||||
tags = [f"hack", f"platform/{plat}", f"base/{base_tag(base)}",
|
||||
f"status/{re.sub(r'[^a-z0-9]+','',status.lower())}"]
|
||||
tags += [f"type/{re.sub(r'[^a-z0-9+]+','',t.lower())}" for t in types]
|
||||
fm = [
|
||||
"---",
|
||||
f'title: "{title}"',
|
||||
f"platform: {plat.upper()}",
|
||||
f'base: "{base}"',
|
||||
f'version: "{ver}"',
|
||||
f'status: "{status}"',
|
||||
f"type: {yaml_list(types)}",
|
||||
f'generation: "{gen}"',
|
||||
f'library_path: "roms/{plat}/Hacks/{libname}"',
|
||||
f'source: "{url or lookup_url(title)}"',
|
||||
f"added: {ADDED}",
|
||||
f"tags: {yaml_list(tags)}",
|
||||
"---",
|
||||
"",
|
||||
]
|
||||
body = [
|
||||
f"# {title}",
|
||||
"",
|
||||
f"> [!info] {' · '.join(types)} — **{status}**",
|
||||
f"> {PLAT_NAME[plat]} · base **{base}** · version **{ver}** · {gen}",
|
||||
"",
|
||||
"## Summary",
|
||||
summary,
|
||||
"",
|
||||
"## Type",
|
||||
" ".join(f"[[Types#{t}|{t}]]" for t in types),
|
||||
"",
|
||||
"## Links",
|
||||
f"- Source / info: {url}" if url else "- Source: _(not catalogued — see lookup)_",
|
||||
f"- Lookup: {lookup_url(title)}",
|
||||
"",
|
||||
"## In the library",
|
||||
f"- `roms/{plat}/Hacks/{libname}` on valhalla",
|
||||
f"- Patch/source artifact archived under `/storage1/igir/romhacks/patches/`",
|
||||
"",
|
||||
"[[Index|← back to directory]]",
|
||||
"",
|
||||
]
|
||||
return "\n".join(fm) + "\n".join(body)
|
||||
|
||||
|
||||
def slug_libpath(title):
|
||||
name = re.sub(r"^Pok[ée]mon\s+", "", title)
|
||||
name = name.replace("é", "e").replace("É", "E")
|
||||
# match the on-disk naming: "Pokemon - <name> (Hack).<ext>"
|
||||
ext = {"gb": "gb", "gbc": "gbc", "gba": "gba", "nds": "nds"}
|
||||
return f"Pokemon - {name} (Hack)" # ext appended by reader; on disk has platform ext
|
||||
|
||||
|
||||
def gen_index():
|
||||
rows = []
|
||||
for h in sorted(HACKS, key=lambda x: (x[1], x[0])):
|
||||
title, plat, base, ver, status, types, gen, url, summary = h
|
||||
link = f"[[{slugify_filename(title)}]]"
|
||||
rows.append(f"| {link} | {plat.upper()} | {base} | {ver} | {status} | {', '.join(types)} |")
|
||||
static = "\n".join(rows)
|
||||
dv = (
|
||||
"```dataview\n"
|
||||
"TABLE platform AS Platform, base AS Base, version AS Version, status AS Status, type AS Type\n"
|
||||
'FROM "Hacks"\n'
|
||||
"SORT platform ASC, file.name ASC\n"
|
||||
"```\n"
|
||||
)
|
||||
counts = {}
|
||||
for h in HACKS:
|
||||
counts[h[1]] = counts.get(h[1], 0) + 1
|
||||
countline = " · ".join(f"**{PLAT_NAME[p]}**: {counts.get(p,0)}" for p in ["gb","gbc","gba","nds"])
|
||||
return f"""# Pokémon ROM-Hack Library — Index
|
||||
|
||||
A knowledge base for the **{len(HACKS)}** Pokémon ROM-hacks installed in the valhalla
|
||||
library (`roms/<platform>/Hacks/`). One note per hack — see [[Types]] for the tag
|
||||
taxonomy and the [[#Platforms]] section for per-system views.
|
||||
|
||||
{countline}
|
||||
|
||||
## Directory (Dataview)
|
||||
|
||||
> Requires the Dataview plugin. If you don't use it, the static table below mirrors it.
|
||||
|
||||
{dv}
|
||||
|
||||
## Directory (static)
|
||||
|
||||
| Hack | Platform | Base | Version | Status | Type |
|
||||
|---|---|---|---|---|---|
|
||||
{static}
|
||||
|
||||
## Platforms
|
||||
|
||||
- [[GBA]] · [[GBC]] · [[GB]] · [[NDS]]
|
||||
|
||||
## By type
|
||||
|
||||
{chr(10).join(f"- [[Types#{t}|{t}]] — {d}" for t, d in TYPES.items())}
|
||||
|
||||
---
|
||||
*Generated by `scripts/build-romhack-vault.py` — edit the dataset there and re-run to update.*
|
||||
"""
|
||||
|
||||
|
||||
def gen_types():
|
||||
body = ["# Type Taxonomy", "",
|
||||
"Each hack is tagged with one or more of these. Tags are also queryable as `#type/...`.", ""]
|
||||
for t, d in TYPES.items():
|
||||
members = [slugify_filename(h[0]) for h in sorted(HACKS) if t in h[5]]
|
||||
body.append(f"## {t}")
|
||||
body.append(d)
|
||||
body.append("")
|
||||
body.append(f"`#type/{re.sub(r'[^a-z0-9+]+','',t.lower())}` — {len(members)} hacks")
|
||||
body.append("")
|
||||
body += [f"- [[{m}]]" for m in members]
|
||||
body.append("")
|
||||
body.append("[[Index|← back to directory]]")
|
||||
return "\n".join(body)
|
||||
|
||||
|
||||
def gen_platform(plat):
|
||||
members = [h for h in sorted(HACKS) if h[1] == plat]
|
||||
rows = [f"| [[{slugify_filename(h[0])}]] | {h[2]} | {h[3]} | {h[4]} | {', '.join(h[5])} |" for h in members]
|
||||
dv = ("```dataview\nTABLE base, version, status, type\n"
|
||||
f'FROM "Hacks"\nWHERE platform = "{plat.upper()}"\nSORT file.name ASC\n```\n')
|
||||
return (f"# {PLAT_NAME[plat]} ({plat.upper()}) — {len(members)} hacks\n\n{dv}\n"
|
||||
"## Static\n\n| Hack | Base | Version | Status | Type |\n|---|---|---|---|---|\n"
|
||||
+ "\n".join(rows) + "\n\n[[Index|← back to directory]]\n")
|
||||
|
||||
|
||||
def gen_readme():
|
||||
return f"""# Pokémon ROM-Hack Vault
|
||||
|
||||
An [Obsidian](https://obsidian.md) vault documenting the **{len(HACKS)}** Pokémon ROM-hacks
|
||||
in the valhalla library. Open *this folder* as a vault (or copy it into an existing one).
|
||||
|
||||
## Layout
|
||||
- **[[Index]]** — the master directory (Dataview + static table).
|
||||
- **[[Types]]** — the type taxonomy (QoL, Vanilla+, Difficulty, Expansion, New Experience, Demake, Roguelite, Cosmetic).
|
||||
- **Hacks/** — one note per hack with frontmatter properties + tags.
|
||||
- **Platforms/** — per-system maps of content (GBA / GBC / GB / NDS).
|
||||
|
||||
## Conventions
|
||||
- Frontmatter uses Obsidian **properties** (`platform`, `base`, `version`, `status`, `type`, `generation`, `source`) so the **Dataview** and **Bases** plugins work.
|
||||
- Every note also carries **tags** (`#platform/gba`, `#type/difficulty`, `#status/complete`, `#base/firered`) so search/graph work with **zero plugins**.
|
||||
- `library_path` points at the file under `roms/<platform>/Hacks/` on valhalla.
|
||||
|
||||
## Recommended plugins
|
||||
- **Dataview** (the Index/Platform tables) and optionally **Bases** (Obsidian's native DB view).
|
||||
|
||||
## Caveats
|
||||
- `base`, `version`, and `type` are best-effort from the import metadata + general knowledge; a few obscure hacks show `base: —` where the source wasn't certain. Correct any in `scripts/build-romhack-vault.py` and re-run.
|
||||
|
||||
*Generated by `scripts/build-romhack-vault.py`.*
|
||||
"""
|
||||
|
||||
|
||||
def main():
|
||||
# clean Hacks dir to avoid stale notes, then regenerate
|
||||
for h in HACKS:
|
||||
write(os.path.join(VAULT, "Hacks", slugify_filename(h[0]) + ".md"), gen_hack_note(h))
|
||||
write(os.path.join(VAULT, "Index.md"), gen_index())
|
||||
write(os.path.join(VAULT, "Types.md"), gen_types())
|
||||
write(os.path.join(VAULT, "README.md"), gen_readme())
|
||||
for p in ["gb", "gbc", "gba", "nds"]:
|
||||
write(os.path.join(VAULT, "Platforms", PLAT_NAME[p].split()[0] if False else p.upper() + ".md"),
|
||||
gen_platform(p))
|
||||
print(f"vault written to {os.path.normpath(VAULT)} — {len(HACKS)} hack notes + Index/Types/README + 4 platform MOCs")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,135 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Apply a Pokémon ROM-hack patch to a base ROM (IPS / BPS / UPS).
|
||||
|
||||
Format is auto-detected by magic bytes. BPS embeds source+target CRC32, so a
|
||||
wrong base ROM (or a buggy apply) fails loudly here rather than producing a
|
||||
silently-corrupt ROM — that is the correctness guarantee for the whole pipeline.
|
||||
|
||||
Usage: romhack-apply.py <patch> <base_rom> <out_rom>
|
||||
Exit: 0 ok; 2 bad/mismatched input; 3 unsupported format.
|
||||
xdelta patches are handled by the caller via the `xdelta3` binary, not here.
|
||||
"""
|
||||
import sys, zlib, struct
|
||||
|
||||
def die(code, msg):
|
||||
sys.stderr.write(msg + "\n"); sys.exit(code)
|
||||
|
||||
def read(p):
|
||||
with open(p, "rb") as f: return f.read()
|
||||
|
||||
# ---------- IPS ----------
|
||||
def apply_ips(patch, base):
|
||||
if patch[:5] != b"PATCH": die(2, "IPS: bad header")
|
||||
out = bytearray(base)
|
||||
i = 5
|
||||
while True:
|
||||
rec = patch[i:i+3]
|
||||
if rec == b"EOF": break
|
||||
if len(rec) < 3: die(2, "IPS: truncated")
|
||||
off = (rec[0] << 16) | (rec[1] << 8) | rec[2]; i += 3
|
||||
size = (patch[i] << 8) | patch[i+1]; i += 2
|
||||
if size == 0: # RLE run
|
||||
rle = (patch[i] << 8) | patch[i+1]; i += 2
|
||||
val = patch[i:i+1]; i += 1
|
||||
chunk = val * rle
|
||||
off2 = off + rle
|
||||
else:
|
||||
chunk = patch[i:i+size]; i += size
|
||||
off2 = off + size
|
||||
if off2 > len(out): out.extend(b"\x00" * (off2 - len(out)))
|
||||
out[off:off2] = chunk
|
||||
# optional truncate extension (3-byte length after EOF)
|
||||
tail = patch[i+3:i+6] if patch[i:i+3] == b"EOF" else b""
|
||||
if len(tail) == 3:
|
||||
newlen = (tail[0] << 16) | (tail[1] << 8) | tail[2]
|
||||
out = out[:newlen]
|
||||
return bytes(out)
|
||||
|
||||
# ---------- UPS ----------
|
||||
def _ups_num(buf, i):
|
||||
val = 0; shift = 1
|
||||
while True:
|
||||
x = buf[i]; i += 1
|
||||
val += (x & 0x7f) * shift
|
||||
if x & 0x80: break
|
||||
shift <<= 7; val += shift
|
||||
return val, i
|
||||
|
||||
def apply_ups(patch, base):
|
||||
if patch[:4] != b"UPS1": die(2, "UPS: bad header")
|
||||
i = 4
|
||||
src_size, i = _ups_num(patch, i)
|
||||
dst_size, i = _ups_num(patch, i)
|
||||
if len(base) != src_size:
|
||||
sys.stderr.write(f"UPS: base size {len(base)} != expected {src_size} (continuing)\n")
|
||||
out = bytearray(base) + b"\x00" * max(0, dst_size - len(base))
|
||||
out = out[:dst_size] if dst_size < len(out) else out
|
||||
pos = 0
|
||||
body_end = len(patch) - 12 # trailing 3 CRC32s (src,dst,patch)
|
||||
while i < body_end:
|
||||
rel, i = _ups_num(patch, i)
|
||||
pos += rel
|
||||
while True:
|
||||
b = patch[i]; i += 1
|
||||
if pos < len(out): out[pos] ^= b
|
||||
pos += 1
|
||||
if b == 0: break
|
||||
src_crc, dst_crc, _ = struct.unpack("<III", patch[-12:])
|
||||
if zlib.crc32(base) & 0xffffffff != src_crc:
|
||||
sys.stderr.write("UPS: WARNING source CRC mismatch (wrong base ROM?)\n")
|
||||
got = zlib.crc32(bytes(out)) & 0xffffffff
|
||||
if got != dst_crc:
|
||||
die(2, f"UPS: output CRC {got:08x} != expected {dst_crc:08x}")
|
||||
return bytes(out)
|
||||
|
||||
# ---------- BPS ----------
|
||||
def apply_bps(patch, base):
|
||||
if patch[:4] != b"BPS1": die(2, "BPS: bad header")
|
||||
i = 4
|
||||
src_size, i = _ups_num(patch, i)
|
||||
dst_size, i = _ups_num(patch, i)
|
||||
meta_size, i = _ups_num(patch, i)
|
||||
i += meta_size
|
||||
src_crc, dst_crc, patch_crc = struct.unpack("<III", patch[-12:])
|
||||
if zlib.crc32(base) & 0xffffffff != src_crc:
|
||||
die(2, f"BPS: source CRC mismatch — wrong base ROM (have {zlib.crc32(base)&0xffffffff:08x}, need {src_crc:08x})")
|
||||
out = bytearray(dst_size)
|
||||
out_pos = 0; src_rel = 0; dst_rel = 0
|
||||
body_end = len(patch) - 12
|
||||
while i < body_end:
|
||||
data, i = _ups_num(patch, i)
|
||||
action = data & 3; length = (data >> 2) + 1
|
||||
if action == 0: # SourceRead
|
||||
out[out_pos:out_pos+length] = base[out_pos:out_pos+length]; out_pos += length
|
||||
elif action == 1: # TargetRead
|
||||
out[out_pos:out_pos+length] = patch[i:i+length]; i += length; out_pos += length
|
||||
elif action == 2: # SourceCopy
|
||||
off, i = _ups_num(patch, i)
|
||||
src_rel += (-(off >> 1) if (off & 1) else (off >> 1))
|
||||
for _ in range(length):
|
||||
out[out_pos] = base[src_rel]; out_pos += 1; src_rel += 1
|
||||
else: # TargetCopy
|
||||
off, i = _ups_num(patch, i)
|
||||
dst_rel += (-(off >> 1) if (off & 1) else (off >> 1))
|
||||
for _ in range(length):
|
||||
out[out_pos] = out[dst_rel]; out_pos += 1; dst_rel += 1
|
||||
got = zlib.crc32(bytes(out)) & 0xffffffff
|
||||
if got != dst_crc:
|
||||
die(2, f"BPS: output CRC {got:08x} != expected {dst_crc:08x}")
|
||||
return bytes(out)
|
||||
|
||||
def main():
|
||||
if len(sys.argv) != 4:
|
||||
die(2, "usage: romhack-apply.py <patch> <base_rom> <out_rom>")
|
||||
patch, base_path, out_path = sys.argv[1], sys.argv[2], sys.argv[3]
|
||||
pb = read(patch); base = read(base_path)
|
||||
magic = pb[:5]
|
||||
if magic[:4] == b"BPS1": out = apply_bps(pb, base)
|
||||
elif magic[:4] == b"UPS1": out = apply_ups(pb, base)
|
||||
elif magic == b"PATCH": out = apply_ips(pb, base)
|
||||
else: die(3, f"unsupported patch magic {magic!r}")
|
||||
with open(out_path, "wb") as f: f.write(out)
|
||||
print(f"OK {out_path} ({len(out)} bytes, crc32={zlib.crc32(out)&0xffffffff:08x})")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,260 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Acquire, patch, validate, and place worthwhile Pokémon ROM-hacks into the
|
||||
EmuDeck library at /storage1/Emulation/roms/<platform>/Hacks/ on valhalla.
|
||||
|
||||
Each hack is one MANIFEST entry naming its source. Two source kinds:
|
||||
- "rom": a pre-patched full ROM is downloaded and placed as-is (validated).
|
||||
- "patch": a patch (BPS/UPS/IPS) is downloaded and applied to a base ROM the
|
||||
user already owns; BPS/UPS self-verify via embedded CRC32.
|
||||
|
||||
Sources are direct, no-anti-bot URLs only (GitHub release assets, archive.org).
|
||||
hackdex/Discord/Drive-gated hacks are intentionally NOT here — they are reported
|
||||
as identify-only because their hosts gate or token-protect downloads.
|
||||
|
||||
Output names follow the chosen scheme: "Pokemon - <Hack> (Hack).<ext>"
|
||||
(parallels igir's `Title (Region)` No-Intro style, with a (Hack) tag).
|
||||
|
||||
Run on valhalla: python3 romhack-fetch.py [--place] [--only <substr>]
|
||||
Without --place it downloads + validates but does not touch the library.
|
||||
"""
|
||||
import sys, os, json, zlib, shutil, subprocess, zipfile, re, urllib.request, urllib.parse
|
||||
|
||||
ROMS = "/storage1/Emulation/roms"
|
||||
WORK = "/storage1/igir/romhacks/work"
|
||||
PATCHES = "/storage1/igir/romhacks/patches"
|
||||
APPLY = "/storage1/igir/romhacks/tools/apply.py"
|
||||
UA = "Mozilla/5.0 (homelab personal archival)"
|
||||
|
||||
BASES = {
|
||||
"crystal_rev1": f"{ROMS}/gbc/Pokemon - Crystal Version (USA, Europe) (Rev 1).gbc",
|
||||
"gold": f"{ROMS}/gbc/Pokemon - Gold Version (USA, Europe) (SGB Enhanced) (GB Compatible).gbc",
|
||||
"silver": f"{ROMS}/gbc/Pokemon - Silver Version (USA, Europe) (SGB Enhanced) (GB Compatible).gbc",
|
||||
"ruby": f"{ROMS}/gba/Pokemon - Ruby Version (USA, Europe).gba",
|
||||
"sapphire": f"{ROMS}/gba/Pokemon - Sapphire Version (USA, Europe).gba",
|
||||
"emerald": f"{ROMS}/gba/Pokemon - Emerald Version (USA, Europe).gba",
|
||||
"firered": f"{ROMS}/gba/Pokemon - FireRed Version (USA, Europe).gba",
|
||||
"leafgreen": f"{ROMS}/gba/Pokemon - LeafGreen Version (USA, Europe).gba",
|
||||
"red": f"{ROMS}/gb/Pokemon - Red Version (USA, Europe) (SGB Enhanced).gb",
|
||||
"heartgold": f"{ROMS}/nds/Pokemon HeartGold Version.nds",
|
||||
"soulsilver": f"{ROMS}/nds/Pokemon SoulSilver Version.nds",
|
||||
}
|
||||
|
||||
def arc(idn, fn):
|
||||
return f"https://archive.org/download/{idn}/{urllib.parse.quote(fn)}"
|
||||
|
||||
# --- the curated, source-resolved batch (directly downloadable only) ----------
|
||||
MANIFEST = [
|
||||
# GBC
|
||||
{"hack": "Polished Crystal", "platform": "gbc", "ext": "gbc", "vfmt": "gbc",
|
||||
"kind": "rom", "url": "https://github.com/Rangi42/polishedcrystal/releases/download/v3.2.3/polishedcrystal-3.2.3.gbc",
|
||||
"note": "v3.2.3, official GitHub release ROM (author distributes full .gbc)"},
|
||||
{"hack": "Crystal Clear", "platform": "gbc", "ext": "gbc", "vfmt": "gbc",
|
||||
"kind": "patch", "base": "crystal_rev1",
|
||||
"url": arc("pokemon_crystal_clear_v2.5.7", "2_5_7_Standard_1_1.bps"),
|
||||
"note": "v2.5.7 Standard, BPS vs Crystal v1.1 (self-verifying)"},
|
||||
# GBA
|
||||
{"hack": "Light Platinum", "platform": "gba", "ext": "gba", "vfmt": "gba",
|
||||
"kind": "patch", "base": "ruby",
|
||||
"url": arc("pokemon-light-platinum-u-1.1", "Pokémon_Light_Platinum (U) 1.1.ips"),
|
||||
"note": "v1.1 IPS vs Ruby (USA) — IPS has no checksum, header-validated after"},
|
||||
{"hack": "Gaia", "platform": "gba", "ext": "gba", "vfmt": "gba",
|
||||
"kind": "rom", "url": arc("pokemon-gaia", "GaiaB3.2.gba"),
|
||||
"note": "v3.2 (final), pre-patched ROM"},
|
||||
{"hack": "Radical Red", "platform": "gba", "ext": "gba", "vfmt": "gba",
|
||||
"kind": "rom", "url": arc("pokemon-radical-red-v-4.1", "Pokemon Radical Red v4.1.gba"),
|
||||
"note": "v4.1, pre-patched ROM"},
|
||||
{"hack": "Inclement Emerald", "platform": "gba", "ext": "gba", "vfmt": "gba",
|
||||
"kind": "rom", "url": arc("inclement-emerald_202310", "Inclement Emerald.gba"),
|
||||
"note": "Oct-2023 build, pre-patched ROM"},
|
||||
{"hack": "Glazed", "platform": "gba", "ext": "gba", "vfmt": "gba",
|
||||
"kind": "rom", "url": arc("pokemon-glazed", "pokemon glazed.gba"),
|
||||
"note": "pre-patched ROM; version unverified (Glazed has buggy early builds)"},
|
||||
# NDS
|
||||
{"hack": "Volt White", "platform": "nds", "ext": "nds", "vfmt": "nds",
|
||||
"kind": "rom", "url": arc("pokemon-volt-white-v-3.1-complete", "Pokemon Volt White v3.1 - Complete.nds"),
|
||||
"note": "v3.1 Complete (Drayano, base Black/White), pre-patched ROM"},
|
||||
{"hack": "Renegade Platinum", "platform": "nds", "ext": "nds", "vfmt": "nds",
|
||||
"kind": "rom", "url": arc("pokemon-renegade-platinum-v-1.3.0-complete-normal-shiny",
|
||||
"Pokemon Renegade Platinum v1.3.0 Complete Normal Shiny.nds"),
|
||||
"note": "v1.3.0 Complete (Drayano, base Platinum), pre-patched ROM"},
|
||||
]
|
||||
|
||||
# --- batch 2: more direct-downloadable hacks (some zip-wrapped) ---------------
|
||||
MANIFEST2 = [
|
||||
{"hack": "Prism", "platform": "gbc", "ext": "gbc", "vfmt": "gbc",
|
||||
"kind": "rom", "url": arc("pokeprism_202301", "pokeprism.gbc"),
|
||||
"note": "Pokémon Prism (complete, Crystal-based), pre-patched ROM"},
|
||||
{"hack": "Liquid Crystal", "platform": "gba", "ext": "gba", "vfmt": "gba",
|
||||
"kind": "rom", "url": arc("pokemon-liquid-crystal-v-3.3.00512", "Pokemon - Liquid Crystal (v3.3.00512).gba"),
|
||||
"note": "v3.3.00512 (final), Johto remake, pre-patched ROM"},
|
||||
{"hack": "Theta Emerald EX", "platform": "gba", "ext": "gba", "vfmt": "gba",
|
||||
"kind": "rom", "url": arc("pokemon-theta-emerald-ex_202407", "theta-emerald-ex-02-27-17.gba"),
|
||||
"note": "EX build (all 800+ mons), pre-patched ROM"},
|
||||
{"hack": "Snakewood", "platform": "gba", "ext": "gba", "vfmt": "gba",
|
||||
"kind": "rom", "url": arc("pokemon-snakewood", "Snakewood.gba"),
|
||||
"note": "zombie/horror hack (base Ruby), pre-patched ROM"},
|
||||
{"hack": "Brown", "platform": "gb", "ext": "gb", "vfmt": "gbc",
|
||||
"kind": "patch", "base": "red", "zip_member": r"\.(ips|bps|ups)$",
|
||||
"url": arc("brown_20250526", "brown.zip"),
|
||||
"note": "v1.1 (Koolboyman, base Red) — patch inside zip"},
|
||||
{"hack": "Blaze Black 2 Redux", "platform": "nds", "ext": "nds", "vfmt": "nds",
|
||||
"kind": "rom", "zip_member": r"\.nds$",
|
||||
"url": arc("pokemon-blaze-black-2-redux-complete-v-1.3.0", "Pokemon Blaze Black 2 Redux (Complete v1.3.0).zip"),
|
||||
"note": "Redux fork v1.3.0 Complete (base Black 2), ROM inside zip"},
|
||||
{"hack": "Volt White 2 Redux", "platform": "nds", "ext": "nds", "vfmt": "nds",
|
||||
"kind": "rom", "zip_member": r"\.nds$",
|
||||
"url": arc("pokemon-volt-white-2-redux-complete-v-1.4.1", "Pokemon Volt White 2 Redux Complete (v1.4.1).zip"),
|
||||
"note": "Redux fork v1.4.1 Complete (base White 2), ROM inside zip"},
|
||||
]
|
||||
|
||||
# --- batch 3: additional well-regarded complete hacks (direct ROMs) ----------
|
||||
MANIFEST3 = [
|
||||
{"hack": "Blaze Black", "platform": "nds", "ext": "nds", "vfmt": "nds",
|
||||
"kind": "rom", "url": arc("pokemon-blaze-black", "Blaze Black.nds"),
|
||||
"note": "Drayano (base Black), pairs with Volt White, pre-patched ROM"},
|
||||
{"hack": "Mega Power", "platform": "gba", "ext": "gba", "vfmt": "gba",
|
||||
"kind": "rom", "url": arc("pokemon-mega-power-v-5.62", "Pokemon Mega Power (v5.62).gba"),
|
||||
"note": "v5.62 (complete), pre-patched ROM"},
|
||||
{"hack": "Resolute", "platform": "gba", "ext": "gba", "vfmt": "gba",
|
||||
"kind": "rom", "url": arc("pokemon-resolute", "Resolute.gba"),
|
||||
"note": "complete story hack, pre-patched ROM"},
|
||||
]
|
||||
|
||||
# Original multi-file archive packs handled by one-off steps (not single-artifact
|
||||
# manifest entries). Listed here so --retain can store the true source archives.
|
||||
SPECIAL_SOURCES = [
|
||||
("gba", arc("pokemon-emerald-kaizo", "Pokemon Emerald Kaizo.rar"),
|
||||
"Emerald Kaizo source (rar -> IPS inside)"),
|
||||
("gba", arc("pokemon-dark-rising-complete-pack", "Pokemon Dark Rising Complete Pack.zip"),
|
||||
"Dark Rising 1/2/Order Destroyed/Kaizo (nested zips inside)"),
|
||||
("nds", arc("pokemon-sacred-gold-and-storm-silver-1.5-fairy", "Pokemon Sacred Gold and Storm Silver 1.5.zip"),
|
||||
"Sacred Gold + Storm Silver V1.05 xdelta patch pack"),
|
||||
]
|
||||
|
||||
|
||||
def basename_from_url(url):
|
||||
return os.path.basename(urllib.parse.unquote(urllib.parse.urlparse(url).path))
|
||||
|
||||
|
||||
def retain_all():
|
||||
"""Re-download every source artifact and store it persistently under PATCHES/<platform>/."""
|
||||
rows = []
|
||||
items = [(m["platform"], m["url"], m["hack"]) for m in (MANIFEST + MANIFEST2 + MANIFEST3)]
|
||||
items += [(plat, url, note) for plat, url, note in SPECIAL_SOURCES]
|
||||
for plat, url, label in items:
|
||||
dst_dir = os.path.join(PATCHES, plat)
|
||||
os.makedirs(dst_dir, exist_ok=True)
|
||||
dst = os.path.join(dst_dir, basename_from_url(url))
|
||||
try:
|
||||
sz = download(url, dst)
|
||||
rows.append((label, plat, "OK", f"{sz:,}b", os.path.basename(dst)))
|
||||
except Exception as e:
|
||||
rows.append((label, plat, "FAIL", str(e)[:60], basename_from_url(url)))
|
||||
print("\n=== RETAIN SOURCE ARTIFACTS ===")
|
||||
for lbl, pl, st, dt, nm in rows:
|
||||
print(f"[{st:4}] {pl:4} {dt:>16} {nm}")
|
||||
ok = sum(1 for r in rows if r[2] == "OK")
|
||||
print(f"\n{ok}/{len(rows)} stored under {PATCHES}/<platform>/")
|
||||
|
||||
|
||||
def extract_member(zip_path, pattern, dest):
|
||||
with zipfile.ZipFile(zip_path) as z:
|
||||
members = [n for n in z.namelist() if not n.endswith("/") and re.search(pattern, n, re.I)]
|
||||
if not members:
|
||||
raise RuntimeError(f"no zip member matches {pattern} (have: {z.namelist()[:5]})")
|
||||
# pick the largest matching member (avoids readme/junk)
|
||||
members.sort(key=lambda n: z.getinfo(n).file_size, reverse=True)
|
||||
with z.open(members[0]) as src, open(dest, "wb") as out:
|
||||
shutil.copyfileobj(src, out)
|
||||
return members[0]
|
||||
|
||||
def download(url, dest):
|
||||
req = urllib.request.Request(url, headers={"User-Agent": UA})
|
||||
with urllib.request.urlopen(req, timeout=120) as r, open(dest, "wb") as f:
|
||||
shutil.copyfileobj(r, f)
|
||||
return os.path.getsize(dest)
|
||||
|
||||
def validate(path, vfmt):
|
||||
"""Cheap structural sanity check so a mislabeled/corrupt file is caught."""
|
||||
with open(path, "rb") as f:
|
||||
data = f.read()
|
||||
n = len(data)
|
||||
if vfmt == "gba":
|
||||
if n % (1024 * 1024) != 0 or not (4*1024*1024 <= n <= 32*1024*1024):
|
||||
return f"bad GBA size {n}"
|
||||
if data[0xB2] != 0x96:
|
||||
return "GBA fixed byte 0xB2!=0x96 (not a GBA ROM?)"
|
||||
elif vfmt == "gbc":
|
||||
logo = bytes.fromhex("ceed6666cc0d")
|
||||
if data[0x104:0x10A] != logo:
|
||||
return "GBC Nintendo logo missing at 0x104"
|
||||
elif vfmt == "nds":
|
||||
if not (8*1024*1024 <= n <= 512*1024*1024):
|
||||
return f"bad NDS size {n}"
|
||||
if data[0x15C:0x15E] != b"\x56\xCF": # standard logo CRC16 0xCF56
|
||||
return "NDS logo CRC16 != 0xCF56"
|
||||
return None # ok
|
||||
|
||||
def main():
|
||||
place = "--place" in sys.argv
|
||||
only = None
|
||||
if "--only" in sys.argv:
|
||||
only = sys.argv[sys.argv.index("--only") + 1].lower()
|
||||
if "--retain" in sys.argv:
|
||||
retain_all()
|
||||
return
|
||||
batch = 1
|
||||
if "--batch" in sys.argv:
|
||||
batch = int(sys.argv[sys.argv.index("--batch") + 1])
|
||||
manifest = {1: MANIFEST, 2: MANIFEST2, 3: MANIFEST3}[batch]
|
||||
os.makedirs(WORK, exist_ok=True)
|
||||
rows = []
|
||||
for m in manifest:
|
||||
if only and only not in m["hack"].lower():
|
||||
continue
|
||||
hack = m["hack"]; plat = m["platform"]; ext = m["ext"]
|
||||
out_name = f"Pokemon - {hack} (Hack).{ext}"
|
||||
tmp = os.path.join(WORK, f"dl_{hack.replace(' ', '_')}")
|
||||
status = "OK"; detail = m.get("note", "")
|
||||
try:
|
||||
sz = download(m["url"], tmp)
|
||||
if m.get("zip_member"):
|
||||
inner = os.path.join(WORK, f"zx_{hack.replace(' ', '_')}")
|
||||
picked = extract_member(tmp, m["zip_member"], inner)
|
||||
detail += f" | zip:{os.path.basename(picked)}"
|
||||
tmp = inner
|
||||
if m["kind"] == "patch":
|
||||
base = BASES[m["base"]]
|
||||
if not os.path.exists(base):
|
||||
raise RuntimeError(f"base missing: {base}")
|
||||
final = os.path.join(WORK, f"out_{hack.replace(' ', '_')}.{ext}")
|
||||
r = subprocess.run([sys.executable, APPLY, tmp, base, final],
|
||||
capture_output=True, text=True)
|
||||
if r.returncode != 0:
|
||||
raise RuntimeError(f"apply failed: {r.stderr.strip()}")
|
||||
detail = r.stdout.strip().split("crc32=")[-1].rstrip(")")
|
||||
detail = f"applied, crc32={detail}"
|
||||
src = final
|
||||
else:
|
||||
src = tmp
|
||||
verr = validate(src, m["vfmt"])
|
||||
if verr:
|
||||
raise RuntimeError(f"validation: {verr}")
|
||||
crc = zlib.crc32(open(src, "rb").read()) & 0xffffffff
|
||||
if place:
|
||||
dst_dir = os.path.join(ROMS, plat, "Hacks")
|
||||
os.makedirs(dst_dir, exist_ok=True)
|
||||
shutil.copy2(src, os.path.join(dst_dir, out_name))
|
||||
detail += " | PLACED"
|
||||
rows.append((hack, plat, "OK", f"{os.path.getsize(src):,}b crc={crc:08x}", out_name))
|
||||
except Exception as e:
|
||||
rows.append((hack, plat, "FAIL", str(e)[:80], out_name))
|
||||
print("\n=== ROMHACK FETCH SUMMARY ===")
|
||||
for hk, pl, st, dt, nm in rows:
|
||||
print(f"[{st:4}] {pl:4} {hk:<20} {dt}")
|
||||
if st == "OK":
|
||||
print(f" -> {pl}/Hacks/{nm}")
|
||||
print(f"\nplaced: {'YES (--place)' if place else 'NO (dry run; pass --place)'}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,280 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Import a drop-folder of mixed Pokémon hack files into the valhalla library.
|
||||
|
||||
Handles a folder containing any mix of:
|
||||
- completed ROMs (.gba/.gbc/.gb/.nds) -> validated, clean-named, copied to roms/<plat>/Hacks/
|
||||
- patches (.ips/.bps/.ups/.xdelta) -> applied to an owned base, placed in Hacks/, archived
|
||||
- documentation (.pdf/.txt/.png/.md) -> archived under PATCHES/_docs/
|
||||
- archives (.zip/.rar/.7z) -> extracted and recursed (same rules), source kept
|
||||
|
||||
Naming matches the rest of the library: "Pokemon - <Hack> (Hack).<ext>"
|
||||
(version/junk parentheticals are stripped from the source filename).
|
||||
|
||||
Base ROM for a patch is auto-detected: BPS/UPS embed source CRC32 so the correct
|
||||
base is the one that applies cleanly. IPS has no checksum, so IPS patches must be
|
||||
named in IPS_BASE_MAP or they are reported unresolved (never blindly applied).
|
||||
|
||||
Run on valhalla: python3 romhack-import.py <incoming_dir> [--place]
|
||||
"""
|
||||
import sys, os, re, zlib, shutil, subprocess, zipfile, unicodedata, tempfile
|
||||
|
||||
ROMS = "/storage1/Emulation/roms"
|
||||
PATCHES = "/storage1/igir/romhacks/patches"
|
||||
APPLY = "/storage1/igir/romhacks/tools/apply.py"
|
||||
|
||||
BASES = {
|
||||
"crystal_rev1": f"{ROMS}/gbc/Pokemon - Crystal Version (USA, Europe) (Rev 1).gbc",
|
||||
"gold": f"{ROMS}/gbc/Pokemon - Gold Version (USA, Europe) (SGB Enhanced) (GB Compatible).gbc",
|
||||
"silver": f"{ROMS}/gbc/Pokemon - Silver Version (USA, Europe) (SGB Enhanced) (GB Compatible).gbc",
|
||||
"ruby": f"{ROMS}/gba/Pokemon - Ruby Version (USA, Europe).gba",
|
||||
"sapphire": f"{ROMS}/gba/Pokemon - Sapphire Version (USA, Europe).gba",
|
||||
"emerald": f"{ROMS}/gba/Pokemon - Emerald Version (USA, Europe).gba",
|
||||
"firered": f"{ROMS}/gba/Pokemon - FireRed Version (USA, Europe).gba",
|
||||
"leafgreen": f"{ROMS}/gba/Pokemon - LeafGreen Version (USA, Europe).gba",
|
||||
"red": f"{ROMS}/gb/Pokemon - Red Version (USA, Europe) (SGB Enhanced).gb",
|
||||
}
|
||||
# candidate bases to try per target platform (order = preference)
|
||||
CANDIDATES = {
|
||||
"gba": ["emerald", "firered", "leafgreen", "ruby", "sapphire"],
|
||||
"gbc": ["crystal_rev1", "gold", "silver"],
|
||||
"gb": ["red"],
|
||||
}
|
||||
# IPS patches (no checksum) need an explicit base by name substring
|
||||
IPS_BASE_MAP = [
|
||||
("seaglass", "emerald", "gba"),
|
||||
("crystal kaizo", "crystal_rev1", "gbc"),
|
||||
("kaizo", "crystal_rev1", "gbc"), # fallback for crystal kaizo rar
|
||||
]
|
||||
|
||||
ROM_EXT = {".gba": "gba", ".gbc": "gbc", ".gb": "gb", ".nds": "nds"}
|
||||
PATCH_EXT = {".ips", ".bps", ".ups", ".xdelta"}
|
||||
DOC_EXT = {".pdf", ".txt", ".png", ".md", ".jpg", ".jpeg", ".html",
|
||||
".xlsx", ".docx", ".bmp", ".avi", ".gif"}
|
||||
ARCHIVE_EXT = {".zip", ".rar", ".7z"}
|
||||
|
||||
# Clean display names for files whose filenames are messy (patch/zip artifacts).
|
||||
# (substr-of-original-filename, lowercased) -> canonical hack name. First match wins.
|
||||
NAME_OVERRIDES = [
|
||||
("emeraldseaglass", "Emerald Seaglass"),
|
||||
("emerald seaglass", "Emerald Seaglass"),
|
||||
("lazarus", "Lazarus"),
|
||||
("saiph 2", "Saiph 2"), ("saiph2", "Saiph 2"),
|
||||
("saiph", "Saiph"),
|
||||
("flora-sky", "Flora Sky"), ("flora sky", "Flora Sky"),
|
||||
("sots", "Sovereign of the Skies"),
|
||||
("sors", "Sors"),
|
||||
("aesthetic red", "Aesthetic Red"),
|
||||
("crystal kaizo", "Crystal Kaizo"),
|
||||
]
|
||||
# Files we will NOT auto-place (unidentified / need user to name). Reported instead.
|
||||
SKIP_NAME_SUBSTR = ["beta 15 + expansion"]
|
||||
|
||||
PLACE = False
|
||||
report = []
|
||||
ARCH_SUBDIR = "" # set while recursing an archive, groups its docs under _docs/<subdir>/
|
||||
|
||||
|
||||
def strip_trailing_groups(name):
|
||||
"""Remove trailing (...) / [...] groups that look like version/variant junk."""
|
||||
verkw = re.compile(r"(\d|version|hotfix|bug.?fix|final|anniversary|classic\+|"
|
||||
r"beta|\brev\b|english|main|patch|suloku|pss|complete)", re.I)
|
||||
while name and name[-1] in ")]":
|
||||
close = name[-1]; open_ch = "(" if close == ")" else "["
|
||||
depth = 0; start = -1
|
||||
for i in range(len(name) - 1, -1, -1):
|
||||
if name[i] == close: depth += 1
|
||||
elif name[i] == open_ch:
|
||||
depth -= 1
|
||||
if depth == 0: start = i; break
|
||||
if start < 0: break
|
||||
inner = name[start:]
|
||||
if verkw.search(inner):
|
||||
name = name[:start].rstrip()
|
||||
else:
|
||||
break
|
||||
return name
|
||||
|
||||
|
||||
def clean_name(fn):
|
||||
base = os.path.basename(fn).lower()
|
||||
for sub, canon in NAME_OVERRIDES:
|
||||
if sub in base:
|
||||
return canon
|
||||
name = os.path.splitext(os.path.basename(fn))[0]
|
||||
name = unicodedata.normalize("NFKD", name).encode("ascii", "ignore").decode()
|
||||
name = name.replace("_", " ")
|
||||
name = re.sub(r"^\s*pokemon\s*-\s*", "", name, flags=re.I)
|
||||
name = re.sub(r"^\s*pokemon\s+", "", name, flags=re.I)
|
||||
name = strip_trailing_groups(name)
|
||||
# strip trailing version/junk tokens left outside parens
|
||||
name = re.sub(r"\s*(full release|full version|completed|\bby .+|v\d[\d._]*|"
|
||||
r"version|\d{4}|\d{1,2}-\d{1,2}-\d{2,4})\s*$", "", name, flags=re.I).strip(" -_")
|
||||
return name or os.path.splitext(os.path.basename(fn))[0]
|
||||
|
||||
|
||||
def is_skip_name(fn):
|
||||
base = os.path.basename(fn).lower()
|
||||
return any(s in base for s in SKIP_NAME_SUBSTR)
|
||||
|
||||
|
||||
def crc32(path):
|
||||
return zlib.crc32(open(path, "rb").read()) & 0xffffffff
|
||||
|
||||
|
||||
def validate(path, plat):
|
||||
with open(path, "rb") as f:
|
||||
data = f.read()
|
||||
n = len(data)
|
||||
if plat == "gba":
|
||||
if data[0xB2] != 0x96:
|
||||
return "not a GBA ROM (byte 0xB2 != 0x96)", None
|
||||
if n not in (4*1024*1024, 8*1024*1024, 16*1024*1024, 32*1024*1024):
|
||||
for t in (8, 16, 32):
|
||||
if n <= t*1024*1024:
|
||||
return None, t*1024*1024 # needs pad to t MB
|
||||
elif plat in ("gbc", "gb"):
|
||||
if data[0x104:0x10A] != bytes.fromhex("ceed6666cc0d"):
|
||||
return "GB/GBC Nintendo logo missing", None
|
||||
elif plat == "nds":
|
||||
if data[0x15C:0x15E] != b"\x56\xCF":
|
||||
return "NDS logo CRC16 != 0xCF56", None
|
||||
return None, None
|
||||
|
||||
|
||||
def place_rom(src, plat, hackname, origin):
|
||||
if is_skip_name(origin):
|
||||
report.append(("ROM", "NEEDS-ID", origin, "unidentified hack — tell me the name", ""))
|
||||
return
|
||||
out_name = f"Pokemon - {hackname} (Hack).{plat}"
|
||||
err, padto = validate(src, plat)
|
||||
if err:
|
||||
report.append(("ROM", "FAIL", origin, err, "")); return
|
||||
data = open(src, "rb").read()
|
||||
if padto and len(data) < padto:
|
||||
data += b"\xff" * (padto - len(data))
|
||||
if PLACE:
|
||||
d = os.path.join(ROMS, plat, "Hacks"); os.makedirs(d, exist_ok=True)
|
||||
with open(os.path.join(d, out_name), "wb") as f:
|
||||
f.write(data)
|
||||
report.append(("ROM", "OK", origin, f"{len(data):,}b crc={zlib.crc32(data)&0xffffffff:08x}",
|
||||
f"{plat}/Hacks/{out_name}"))
|
||||
|
||||
|
||||
def try_apply(patch, base_key, out):
|
||||
base = BASES[base_key]
|
||||
if not os.path.exists(base):
|
||||
return False, "base file missing"
|
||||
r = subprocess.run([sys.executable, APPLY, patch, base, out],
|
||||
capture_output=True, text=True)
|
||||
return (r.returncode == 0), (r.stdout or r.stderr).strip()
|
||||
|
||||
|
||||
def place_patch(patch, origin):
|
||||
ext = os.path.splitext(patch)[1].lower()
|
||||
hackname = clean_name(patch)
|
||||
# archive the patch file itself
|
||||
if PLACE:
|
||||
ad = os.path.join(PATCHES, "_imported"); os.makedirs(ad, exist_ok=True)
|
||||
shutil.copy2(patch, os.path.join(ad, os.path.basename(patch)))
|
||||
tmp_out = patch + ".out"
|
||||
if ext == ".ips":
|
||||
hit = next(((bk, pl) for sub, bk, pl in IPS_BASE_MAP if sub in patch.lower()), None)
|
||||
if not hit:
|
||||
report.append(("PATCH", "UNRESOLVED", origin, "IPS needs known base (not in map)", ""))
|
||||
return
|
||||
bk, plat = hit
|
||||
ok, msg = try_apply(patch, bk, tmp_out)
|
||||
if not ok:
|
||||
report.append(("PATCH", "FAIL", origin, f"ips/{bk}: {msg[:50]}", "")); return
|
||||
place_rom(tmp_out, plat, hackname, origin); return
|
||||
if ext == ".xdelta":
|
||||
report.append(("PATCH", "SKIP", origin, "xdelta: handle via xdelta tool", "")); return
|
||||
# BPS / UPS: auto-detect base across all platforms (CRC-verified)
|
||||
for plat, keys in CANDIDATES.items():
|
||||
for bk in keys:
|
||||
ok, msg = try_apply(patch, bk, tmp_out)
|
||||
if ok:
|
||||
place_rom(tmp_out, plat, hackname, origin + f" [base={bk}]")
|
||||
return
|
||||
report.append(("PATCH", "FAIL", origin, "no owned base matched (BPS/UPS CRC)", ""))
|
||||
|
||||
|
||||
def archive_doc(path, origin):
|
||||
sub = os.path.join("_docs", ARCH_SUBDIR) if ARCH_SUBDIR else "_docs"
|
||||
rel = os.path.join(sub, os.path.basename(path))
|
||||
if PLACE:
|
||||
d = os.path.join(PATCHES, sub); os.makedirs(d, exist_ok=True)
|
||||
shutil.copy2(path, os.path.join(PATCHES, rel))
|
||||
report.append(("DOC", "OK", origin, f"{os.path.getsize(path):,}b", rel))
|
||||
|
||||
|
||||
def process_file(path, origin=None):
|
||||
origin = origin or os.path.basename(path)
|
||||
ext = os.path.splitext(path)[1].lower()
|
||||
if ext in ROM_EXT:
|
||||
place_rom(path, ROM_EXT[ext], clean_name(path), origin)
|
||||
elif ext in PATCH_EXT:
|
||||
place_patch(path, origin)
|
||||
elif ext in DOC_EXT:
|
||||
archive_doc(path, origin)
|
||||
elif ext in ARCHIVE_EXT:
|
||||
process_archive(path, origin)
|
||||
else:
|
||||
report.append(("SKIP", "?", origin, f"unknown ext {ext}", ""))
|
||||
|
||||
|
||||
def process_archive(path, origin):
|
||||
# keep the source archive
|
||||
if PLACE:
|
||||
ad = os.path.join(PATCHES, "_archives"); os.makedirs(ad, exist_ok=True)
|
||||
shutil.copy2(path, os.path.join(ad, os.path.basename(path)))
|
||||
global ARCH_SUBDIR
|
||||
tmp = tempfile.mkdtemp(prefix="imp_")
|
||||
ext = os.path.splitext(path)[1].lower()
|
||||
prev_subdir = ARCH_SUBDIR
|
||||
# group this archive's docs under a sanitized folder name
|
||||
ARCH_SUBDIR = re.sub(r"[^\w.\- ]", "_", os.path.splitext(os.path.basename(path))[0])[:40]
|
||||
try:
|
||||
if ext == ".zip":
|
||||
with zipfile.ZipFile(path) as z:
|
||||
z.extractall(tmp)
|
||||
else: # rar/7z via unar in container
|
||||
subprocess.run(["docker", "run", "--rm", "-v", f"{os.path.dirname(path)}:/in:ro",
|
||||
"-v", f"{tmp}:/out", "node:lts", "bash", "-c",
|
||||
"apt-get update -qq>/dev/null 2>&1; apt-get install -y -qq unar>/dev/null 2>&1; "
|
||||
f"unar -force-overwrite -o /out '/in/{os.path.basename(path)}' >/dev/null"],
|
||||
capture_output=True, text=True)
|
||||
for root, _, files in os.walk(tmp):
|
||||
for fn in files:
|
||||
fp = os.path.join(root, fn)
|
||||
process_file(fp, origin=f"{os.path.basename(path)} :: {fn}")
|
||||
finally:
|
||||
ARCH_SUBDIR = prev_subdir
|
||||
shutil.rmtree(tmp, ignore_errors=True)
|
||||
|
||||
|
||||
def main():
|
||||
global PLACE
|
||||
args = [a for a in sys.argv[1:] if not a.startswith("--")]
|
||||
PLACE = "--place" in sys.argv
|
||||
incoming = args[0]
|
||||
for fn in sorted(os.listdir(incoming)):
|
||||
fp = os.path.join(incoming, fn)
|
||||
if os.path.isfile(fp):
|
||||
process_file(fp)
|
||||
# report
|
||||
order = {"OK": 0, "UNRESOLVED": 1, "SKIP": 2, "FAIL": 3}
|
||||
print(f"\n=== IMPORT REPORT ({'PLACED' if PLACE else 'DRY RUN'}) ===")
|
||||
for typ, st, origin, detail, dest in sorted(report, key=lambda r: (r[0], order.get(r[1], 9))):
|
||||
line = f"[{st:10}] {typ:5} {origin[:46]:46} {detail}"
|
||||
print(line)
|
||||
if dest:
|
||||
print(f"{'':19}-> {dest}")
|
||||
counts = {}
|
||||
for r in report:
|
||||
counts[(r[0], r[1])] = counts.get((r[0], r[1]), 0) + 1
|
||||
print("\nsummary:", dict(sorted(counts.items())))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user