Files
pokemon-namegen/README.md
T

62 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Old Man Glitch Decoder
A single-file, dependency-free recreation of **Old Man Name Generator 2**, a
Pokémon Red/Blue/Yellow tool originally hosted on Glitch City Laboratories
and long since offline (recovered from an Internet Archive Wayback Machine
capture). Type a 7-character trainer name and see what the in-game "Old Man
glitch" would actually encounter with it.
## What it does
In Gen 1, walking away from the Old Man in Viridian City right after he
"shows you how to catch a Pokémon" can trigger a glitch encounter built from
raw bytes of your trainer's name:
- Positions **3, 5, and 7** of the name are each read as a Pokémon species
byte.
- Positions **2, 4, and 6** are each read as that encounter's level byte.
- Position **1** is never read — it has no effect on the outcome.
The species comes from Gen 1's internal character/index table: every
nameable character (AZ, az, digits, and a handful of symbols) has a raw
byte value from 128255, and that same byte doubles as a species ID. The
"level" isn't computed at all — it's printed as the identical raw byte
value, which is why these encounters always show absurd levels (128255)
instead of the normal 1100.
## Usage
Open `index.html` directly in a browser. There's no build step, no server,
and no external requests — the page is fully self-contained.
## Files
| Path | Purpose |
|---|---|
| `index.html` | The app. CSS and JS are inlined directly into the page (see [Inlining](#why-inlined) below), so this one file is all you need to run or share it. |
| `app.css` / `app.js` | Human-readable, unminified source of the styles/script that are inlined into `index.html`. Edit these, then re-minify and re-inline into `index.html` when publishing a change. |
| `data/charmap.json` | The full character → Gen 1 byte value → species lookup table, generated from the source spreadsheet. Source of truth for `app.js`'s inlined data. |
| `data/charmap.min.json` | Minified copy of the same table. |
| `csp-hash.py` | Prints the `sha256-...` CSP tokens for `index.html`'s inline `<style>`/`<script>` blocks, for a host that locks down `Content-Security-Policy` to hashes instead of `'unsafe-inline'`. Re-run after re-inlining. |
| `CHANGELOG.md` | Release history. |
| `LICENSE` | GPLv3. |
### Why inlined?
`index.html` bundles its CSS and JS inline rather than loading `app.css`
and `app.js` as separate requests. For a page this small, that trades
per-file browser caching for fewer round trips — worth it on a slow
connection for a single-visit tool like this one, at the cost of editing
convenience (hence keeping the unminified sources alongside it).
## Data source / credits
- Character-to-species mapping derived from the internal Gen 1 index table
(`Decimal` / `R/B/Y Pokémon` / `R/B/Y Letter` columns).
- Logic reverse-engineered from the archived "Old Man Name Generator 2"
page, originally by Abwayax and the Glitch City Laboratories team.
## License
GPLv3 — see [LICENSE](LICENSE).