johnjohto ff90062741 Make the T3 content tier run on Windows (#269)
* Make ROM-free test tiers actually run on Windows

Suite discovery, the extension-point catalog scan, mod test-dir pickup,
and the meta-coverage corpus all shelled out to ls/find/test -d, which do
not exist in cmd.exe. Every listing came back empty on Windows, so tiers
ran 0 suites and still reported ALL TESTS PASSED.

Add portable probes to tests/fs_io.lua (same Unix commands on
Linux/macOS; dir /b and a shell-free rename-self existence check on
Windows) and rewire the four call sites to them. 15/15 engine suites and
2/2 modkit suites now genuinely run and pass on Windows.

Fixes #266

* Make the T3 content tier run on Windows

The content tier had the same Unix-shell assumptions as the tier
discovery fixed in #267, one level down:

- run_tests.lua redirected to /dev/null when chaining tier runners
- mod_runtime_tests.lua called ffi setenv/unsetenv, which msvcrt lacks
  (_putenv with an empty value unsets)
- modkit_tests.lua captured exit codes with POSIX '; echo 0' (cmd
  needs /v:on and !errorlevel!), called python3 (python on Windows),
  and used mkdir -p / rm -rf; cmd mkdir makes parents on its own and
  read -p as a directory name
- the save-editor suites globbed save backups with ls
- tools/save-editor/Catalog.lua scraped mod flags with ls; this one
  affects the real editor on Windows, not just tests

With a ROM imported, run_tests.lua goes from 12 failures to the 3 that
track the missing audio.lua generation (#268), which fails on any OS
and needs a maintainer decision.

---------

Co-authored-by: johnjohto <johnjohto@users.noreply.github.com>
2026-07-27 10:04:35 -04:00
2026-07-27 08:37:11 -04:00
2026-07-26 13:38:52 -04:00
2026-07-27 08:37:11 -04:00
2026-07-25 12:36:53 -04:00
2026-07-27 09:27:24 -04:00
2026-07-17 20:45:02 -04:00
2026-07-19 16:18:18 -04:00

Pokemon Gen 1 Recompilation Project

A native LÖVE2D recreation of Pokemon Red and Blue. The engine and map behavior are hand-written Lua; game data and graphics are decoded from a ROM supplied by the player.

SUPPORT AND ANNOUNCEMENTS: Discord

This project does not include a ROM, emulate the Game Boy, transpile assembly, or download a disassembly. A canonical US Pokemon Red or Blue ROM is the only game content input.

The ROM is verified, used during import, and then released from memory. It is not copied into the cache. Later launches load the private generated cache and do not ask for the ROM again. Red and Blue can both be imported and played side by side.

Quick Start

Open the desktop app. On first boot, choose your legally obtained .gb file or drop it onto the window. Import takes a few seconds and the game starts automatically.

Only the canonical 1 MiB US Red and Blue ROMs are accepted. The importer verifies SHA-1 before creating any game data:

  • Red: ea9bcae617fdf159b045185467ae58b2e4a48b9a
  • Blue: d7037c83e1ae5b39bde3c30787637ba1d4c48ce2

The packaged app contains neither a ROM nor pre-extracted game data. Music, sound effects, and cries are synthesized while the game runs from compact audio channel programs copied out of the verified ROM.

Controls

Action Keyboard Controller
Move Arrow keys / WASD D-pad / left stick
A Z / Enter / Space A
B X / Backspace B
Start Escape Start
Select Tab / Shift Back / Select

Rebind any of these in-game under OPTIONS → CONTROLS. Controllers are supported out of the box.

Hotkeys

Key What it does
- / = Zoom out / in (overworld; also mouse wheel)
2 Cycle COLORS
3 Cycle TILT (free-roam overworld)
4 Cycle ZOOM through every level (free-roam overworld)
5 Cycle GBC FX
F1 Save
F2 Load
F10 Open / close the mod manager

COLORS, TILT, ZOOM, GBC FX, and VOID FILL are also in the Options menu and persist in options.lua.

Running From Source

Requires LÖVE 11.x. Place a Red or Blue ROM in the project folder and double-click Play-Mac.command or Play-Windows.bat, or run:

scripts/setup.sh --rom "/path/to/Pokemon Red.gb"   # or Pokemon Blue.gb
scripts/run.sh

then love . for later launches. Windows PowerShell scripts, the optional developer data build, test suites, and cache management are covered in Developer Setup.

Portable Mode

By default the game keeps your save, options, and the private ROM-derived data cache in your OS's normal per-user app data folder. To keep everything next to the game instead (handy for a USB stick or portable drive you carry between computers), drop an empty file named portable.txt next to the app (next to PokemonRed.app/.exe, or next to main.lua/conf.lua when running from source), then launch the game. Portable mode is desktop-only (Windows, Linux, macOS); it has no effect on Android or iOS, where the app runs from a read-only package.

With portable.txt present:

  • save.lua, save.lua.bak, and options.lua are read from and written to that same folder instead of the OS save directory.
  • A ROM import writes the generated data/generated and assets/generated cache straight into that folder too (nothing is left in the OS save directory), so a later launch reuses it without asking for the ROM again even on a different computer, as long as the same folder comes along.
  • Deleting portable.txt switches back to the normal OS save directory; nothing already written to either location is touched automatically, so copy files over yourself if you want to carry existing progress across the switch.

Modding

The game ships a native mod platform: content registries, events and hooks, per-mod saves and options, and an in-game manager. The full modding book — getting started, a twelve-rung tutorial ladder, a cookbook, and the generated reference — lives on the project wiki.

Shipped example mods, one per kind of author, live in mods/.

Bugs and Ideas

Found a bug? A warp dropping you somewhere it shouldn't, a battle doing math that looks wrong, text in the wrong box, anything that does not match the original game. Open a bug report. Attach a screenshot if you can. It saves a lot of back and forth, and if you can't get one, the form asks you to describe what you saw instead.

Thought of a feature that could be good, or a way to improve one that already exists? Open a feature request. Say what you want, why it is worth doing, and how you picture it working. A request with real detail is one that can actually get built.

More

  • Link play — START > LINK connects two copies directly over UDP.
  • Save editor — edit party, boxes, items, events, and Pokédex flags outside the game.
  • docs/architecture.md — runtime details; docs/behavior-porting-notes.md — formula provenance.

Special Thanks

This project would not be possible without pret > the pret band of decompiling maniacs > and their pokered disassembly.

S
Description
No description provided
Readme 63 MiB
Languages
C 48.3%
Lua 23.1%
C++ 17%
Shell 2.4%
HTML 1.7%
Other 7%