diff options
| -rw-r--r-- | README.md | 128 | ||||
| -rw-r--r-- | README.pret.md | 29 | ||||
| -rw-r--r-- | SL0P.md | 19 | ||||
| -rw-r--r-- | screenshots/explore.png | bin | 0 -> 4638 bytes | |||
| -rw-r--r-- | screenshots/menu.png | bin | 0 -> 3519 bytes | |||
| -rw-r--r-- | screenshots/saver.png | bin | 0 -> 4070 bytes | |||
| -rw-r--r-- | screenshots/splash.png | bin | 0 -> 3832 bytes | |||
| -rw-r--r-- | screenshots/warp.png | bin | 0 -> 4148 bytes |
8 files changed, 152 insertions, 24 deletions
@@ -1,29 +1,119 @@ -# Pokémon Yellow [![Build Status][ci-badge]][ci] +# POKéMON SL0P EDITION -This is a disassembly of Pokémon Yellow. +<p align="center"> + <img src="screenshots/splash.png" width="360" alt="POKéMON SL0P EDITION boot splash"> +</p> -It builds the following ROMs: +A cheeky romhack of **Pokémon Yellow**, built on the [pret/pokeyellow](https://github.com/pret/pokeyellow) +disassembly. Everything is done in pure GBZ80 assembly and used **entirely +in-game** — no external cheat device, no Game Genie. Press **SELECT** in the +overworld and go wild. -- Pokemon Yellow (UE) [C][!].gbc `sha1: cc7d03262ebfaf2f06772c1a480c7d9d5f4a38e1` -- YELLMONS.GB (debug build) `sha1: d44e96eddfbdad633cbe4e6e64915e9e198974b0` -- Dmgapse0.h08.patch `sha1: f3346a5559d52c296b8feab0cdbbfb0e250ac161` +> Author: *Ash Ketchum* · runs on real hardware / any accurate GBC emulator. -To set up the repository, see [**INSTALL.md**](INSTALL.md). +--- +## ✨ Highlights -## See also +- ⚡ **Fastboot** — got a save? Skip the intro, title, and CONTINUE menu and drop + straight into the overworld. +- 🎬 **Custom boot splash** — a real 2bpp *POKéMON · SL0P · EDITION* graphic. +- 🎛️ **The SL0P MENU** (**SELECT**) — a table-driven cheat menu: instant heal, + money, coins, badges, full dex, a maxed team, movesets, HMs, ×99 items, a + no-wild-encounters toggle, and a fly-warp to any town. +- 🗺️ **EXPLORE** — a free-flying overworld camera that **smooth-scrolls** across + the whole seamless Kanto map, gliding over map connections, and can **warp you + to wherever you're looking**. +- 💤 **SAVER** — a screensaver that puts EXPLORE on autopilot and drifts the + camera across Kanto on its own. -- [**Wiki**][wiki] (includes [tutorials][tutorials]) -- [**Symbols**][symbols] -- [**Tools**][tools] +--- -You can find us on [Discord (pret, #pokered)](https://discord.gg/d5dubZ3). +## 📸 Screenshots -For other pret projects, see [pret.github.io](https://pret.github.io/). +| The SL0P menu | Fly-warp submenu | +|:---:|:---:| +|  |  | -[wiki]: https://github.com/pret/pokeyellow/wiki -[tutorials]: https://github.com/pret/pokeyellow/wiki/Tutorials -[symbols]: https://github.com/pret/pokeyellow/tree/symbols -[tools]: https://github.com/pret/gb-asm-tools -[ci]: https://github.com/pret/pokeyellow/actions -[ci-badge]: https://github.com/pret/pokeyellow/actions/workflows/main.yml/badge.svg +| EXPLORE camera (▲▼◀▶ = where you can go) | SAVER screensaver drifting over Celadon | +|:---:|:---:| +|  |  | + +--- + +## 🎛️ The SL0P MENU + +Press **SELECT** in the overworld. Move the cursor, **A** to pick, **B** to back +out / close. + +| Entry | Effect | +|-------|--------| +| **WARP** | fly-warp to any of 13 destinations (all towns + Route 4/10) | +| **HEAL** | full HP + clear status for the whole party | +| **MONEY** | ¥999,999 | +| **COINS** | 9,999 game-corner coins | +| **BADGES** | all 8 gym badges | +| **DEX** | mark every Pokémon owned + seen | +| **MAXTEAM** | whole party → Lv100, perfect DVs, maxed EVs, 999 stats/HP | +| **TEACH** | give everyone Hyper Beam / Earthquake / Ice Beam / Thunderbolt | +| **HMS** | give all five HMs (Cut/Fly/Surf/Strength/Flash) | +| **ITEMS** | ×99 of balls, Rare Candy, Full Restore, Max Revive, Max Elixer, PP Up + all five evolution stones | +| **NOWILD** | toggle wild encounters off | +| **REPEL** | refill repel steps | +| **EXPLORE** | free-flying overworld camera (see below) | +| **SAVER** | overworld screensaver (see below) | + +### 🗺️ EXPLORE + +A self-contained camera that flies over the **seamless Kanto overworld** with a +real hardware smooth-scroll — no character walking. The d-pad pans a screen at a +time and glides straight across map connections at the edges; **▲▼◀▶ arrows** +show which ways you can go. Press **A** to warp your trainer onto the tile you're +looking at, or **B** to return to the menu. + +### 💤 SAVER + +EXPLORE on autopilot: it keeps drifting in one direction until it hits a bound, +then turns and carries on, wandering across all of Kanto by itself. The arrows +and your trainer/Pikachu are hidden for a clean view. Press any button to wake it. + +--- + +## 🛠️ Build & play + +Needs [**RGBDS**](https://github.com/gbdev/rgbds) `v1.0.1` on your `PATH` +(`rgbasm` / `rgblink` / `rgbfix` / `rgbgfx`). See [INSTALL.md](INSTALL.md) for +toolchain setup. + +```sh +make # -> pokeyellow.gbc (ship this one) +``` + +Load `pokeyellow.gbc` in any accurate Game Boy Color emulator (or flash it to a +cart) and press **SELECT** in the overworld. The build is reproducible; the boot +splash regenerates from `gfx/slop/intro.png`. + +--- + +## 🧩 How it's built + +Almost everything lives in a handful of files, chiefly **`engine/slop_menu.asm`** +(the SELECT menu + the EXPLORE/SAVER camera). Adding a menu entry is three lines. +The overworld camera reuses the walking engine's own smooth-scroll machinery +(`hSCX/hSCY`, the rotating VRAM map pointer, and the vblank row/column redraws) to +scroll pixel-by-pixel and stream map connections. + +For the full technical write-up — the menu/handler dispatch, the smooth-scroll and +map-crossing math, the screensaver's wander logic, and the WRAM/ROM budget notes — +see **[SL0P.md](SL0P.md)**. + +--- + +## 🙏 Credits + +- Built on the **[pret/pokeyellow](https://github.com/pret/pokeyellow)** disassembly + — see [README.pret.md](README.pret.md) for the upstream project, and huge thanks + to the pret team and contributors. +- Pokémon is © Nintendo / Game Freak / The Pokémon Company. This is a + non-commercial fan project; **no ROM is distributed** — bring your own and build + from source. diff --git a/README.pret.md b/README.pret.md new file mode 100644 index 00000000..dcc01df6 --- /dev/null +++ b/README.pret.md @@ -0,0 +1,29 @@ +# Pokémon Yellow [![Build Status][ci-badge]][ci] + +This is a disassembly of Pokémon Yellow. + +It builds the following ROMs: + +- Pokemon Yellow (UE) [C][!].gbc `sha1: cc7d03262ebfaf2f06772c1a480c7d9d5f4a38e1` +- YELLMONS.GB (debug build) `sha1: d44e96eddfbdad633cbe4e6e64915e9e198974b0` +- Dmgapse0.h08.patch `sha1: f3346a5559d52c296b8feab0cdbbfb0e250ac161` + +To set up the repository, see [**INSTALL.md**](INSTALL.md). + + +## See also + +- [**Wiki**][wiki] (includes [tutorials][tutorials]) +- [**Symbols**][symbols] +- [**Tools**][tools] + +You can find us on [Discord (pret, #pokered)](https://discord.gg/d5dubZ3). + +For other pret projects, see [pret.github.io](https://pret.github.io/). + +[wiki]: https://github.com/pret/pokeyellow/wiki +[tutorials]: https://github.com/pret/pokeyellow/wiki/Tutorials +[symbols]: https://github.com/pret/pokeyellow/tree/symbols +[tools]: https://github.com/pret/gb-asm-tools +[ci]: https://github.com/pret/pokeyellow/actions +[ci-badge]: https://github.com/pret/pokeyellow/actions/workflows/main.yml/badge.svg @@ -38,7 +38,7 @@ A table-driven cheat menu. Cursor + A to pick, B to back out / close. | **NOWILD** | toggle wild encounters off (shows `ON`) | | **REPEL** | refill repel steps | | **EXPLORE** | a screen-paging overworld camera: each d-pad press smooth-scrolls the next screenful of the world (no walking), gliding across the connected map at each edge. **▲▼◀▶ arrows** show which directions you can move; **A** warps the player onto the tile you're looking at; **B** returns to the menu. | -| **SAVER** | screensaver: EXPLORE on autopilot. Drifts the camera across the overworld on its own (persistent direction, DFS-ish: keeps going, turns when blocked or occasionally at a junction). Arrows and the player/Pikachu sprites are hidden. Any button wakes it back to the menu. | +| **SAVER** | screensaver: EXPLORE on autopilot. Drifts the camera across the overworld on its own — keeps a heading until it hits a bound, then turns onto another open direction. Arrows and the player/Pikachu sprites are hidden. Any button wakes it back to the menu. | Everything is in `engine/slop_menu.asm`. Adding a new entry = add a name to `SlopMenuText`, a `dw Handler` to `SlopMenuHandlers`, and bump `SLOP_MENU_COUNT`. @@ -63,10 +63,19 @@ neighbour (one unavoidable load), or stops if there's no connection. **SAVER** is the same loop with `wSlopSaverDir` set: instead of reading the d-pad, `SlopSaverPickDir` synthesises a direction into the normal dispatch (so it -inherits smooth scroll + edge crossing), keeping a persistent heading and only -turning when blocked or occasionally at a junction (never an immediate U-turn). -Arrows are skipped, and OAM is cleared + frozen right after every `LoadMapData` -so the reloaded player/Pikachu are never drawn. Any real button exits. +inherits smooth scroll + edge crossing), keeping one heading until it's blocked, +then turning onto a random still-open direction (never an immediate U-turn). +"Open" (`SlopValidDirMask`) means >= 2 coords of room that way or a connection to +cross — the >= 2 matters because moves round to even coords and a map's far edge +is always odd, so a plain `coord != max` test would never register the edge and +the wander would freeze one step short of it. Arrows are skipped, and OAM is +cleared + frozen right after every `LoadMapData` so the reloaded player/Pikachu +are never drawn. Any real button exits. + +Crossing a connection applies its alignment offset blindly, so at an edge the +connection doesn't span the camera can land outside the neighbour; `SlopClampCoords` +(run after every entry/cross `LoadMapData`) clamps the coords back into +`[0,maxY] x [0,maxX]` so the view never reads past `wOverworldMap` into garbage. - **Direction arrows** are 4 OBJ sprites in `wShadowOAM` using the font's down/ right glyphs (`$ee`/`$ed`) plus CGB OBJ X/Y-flip for up/left; set diff --git a/screenshots/explore.png b/screenshots/explore.png Binary files differnew file mode 100644 index 00000000..c058c0b0 --- /dev/null +++ b/screenshots/explore.png diff --git a/screenshots/menu.png b/screenshots/menu.png Binary files differnew file mode 100644 index 00000000..48eec140 --- /dev/null +++ b/screenshots/menu.png diff --git a/screenshots/saver.png b/screenshots/saver.png Binary files differnew file mode 100644 index 00000000..c7fbb81f --- /dev/null +++ b/screenshots/saver.png diff --git a/screenshots/splash.png b/screenshots/splash.png Binary files differnew file mode 100644 index 00000000..a9984bfc --- /dev/null +++ b/screenshots/splash.png diff --git a/screenshots/warp.png b/screenshots/warp.png Binary files differnew file mode 100644 index 00000000..943cfa01 --- /dev/null +++ b/screenshots/warp.png |
