CLI tool
bryanthaboi/gen1recomp avatar
bryanthaboi/gen1recomp

Gen1Recomp: a LÖVE2D recreation of Gen 1 and Gen 2 Pokémon that imports your own ROM

Gen1Recomp - A native Lua / LÖVE2D recreation of Gen 1 Poke

3,763 stars326 forksCMIT

At a glance

What is it?
Gen1Recomp rebuilds Red, Blue, Yellow, Gold, Silver and Crystal in hand-written Lua on LÖVE2D, decoding game data from a ROM you supply. The engine is playable; the Gen 2 engine is not finished yet.
Who is it for?
Adopt Gen1Recomp if you already own a canonical US Red, Blue, Yellow, Gold, Silver or Crystal ROM and want a desktop or handheld build that runs hand-written Lua instead of emulating a Game Boy. Skip it if you want Gold, Silver or Crystal gameplay today; the README describes those three as Gen 2 Phase 1, an import and launcher only, with Crystal listed as Beta.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 4 days ago.
What is it written in?
Mainly C, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 25, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Gen1Recomp solves, and who it is built for

Emulators run original Game Boy code under a translation layer. Gen1Recomp takes the opposite route: the engine and map behavior are hand-written Lua, and the game data and graphics are decoded from a ROM the player supplies. The project states plainly that it does not include a ROM, emulate the Game Boy, transpile assembly, or download a disassembly. That is the whole pitch. If you want a native executable that behaves like the original cartridge rather than a window running a Game Boy interpreter, this is the category you are shopping in.

The audience is narrow on purpose. You need a legally obtained canonical US copy of Red, Blue, Yellow, Gold, Silver or Crystal. The README says the ROM is verified, used during import, and then released from memory; it is not copied into the cache, and later launches load a private generated cache without asking for the ROM again. Red, Blue, Yellow, Gold, Silver and Crystal can all be imported side by side. The project also carries mobile and native directories, plus build and install scripts named for ARM single-board computers and an RG34XXSP handheld, so handheld play is clearly a target rather than an afterthought.

How the import pipeline and the Lua engine fit together

The data flow starts at import. You choose a .gb or .gbc file or drop it onto the window. Before any game data is created, the importer verifies SHA-1 against a fixed list. Red must hash to ea9bcae617fdf159b045185467ae58b2e4a48b9a, Blue to d7037c83e1ae5b39bde3c30787637ba1d4c48ce2, Yellow to cc7d03262ebfaf2f06772c1a480c7d9d5f4a38e1, Gold to d8b8a3600a465308c9953dfa04f0081c05bdcb94, Silver to 49b163f7e57702bc939d642a18f591de55d92dae, Crystal 1.0 to f4cd194bdee0d04ca4eac29e09b8e4e9d818c133, and Crystal 1.1 to f2f52230b536214ef7c9924f483392993e226cfb. Anything else is refused. That is stricter than most emulators, which will happily boot a patched or regional dump, and it is the mechanism that keeps the project from shipping or redistributing game content.

After import, the ROM is gone from the equation. Music, sound effects and cries are synthesized while the game runs from compact audio channel programs copied out of the verified ROM, so the packaged app contains neither a ROM nor pre-extracted game data. The engine itself is Lua, and the repository layout reflects that: main.lua and conf.lua at the top level, src/ and data/ for the engine and its tables, assets/ for the port's own art, and a mods/ directory with a CONTRIBUTING-mods.md beside it. The docs/ folder carries feature notes, including docs/gold-phase1.md for the Gen 2 work and docs/new-features.md for the performance tiers.

Installing Gen1Recomp on PC and Steam Deck

There is no package manager install. The README's Quick Start is the desktop app: open it, and on first boot choose your .gb or .gbc file or drop it onto the window. Import takes a few seconds and the game starts automatically. The repository also ships Play-Windows.bat and Play-Mac.command launchers, which is what you would expect from a LÖVE2D project, since LÖVE games are typically distributed as a runtime with the game archive appended.

If you are on a Steam Deck or another Linux handheld, the repository carries dedicated scripts rather than a single generic build. The names tell you the target: build-linux-arm-sbc.sh and install-linux-arm-sbc.sh for ARM single-board computers, and build-rg34xxsp.sh and install-rg34xxsp.sh for the RG34XXSP. A flatpak/ directory is present as well. Run the install script that matches your device from a shell; the README does not walk through the flags for these scripts, so read the script itself before executing it.

bash
bash install-linux-arm-sbc.sh

On Windows, Defender sometimes flags the build with a generic machine-learning detection such as Trojan:Win32/Wacatac!ml. The README calls this a known false positive and explains the cause: the exe is the official LÖVE runtime with the game archive appended, and the heuristics distrust unsigned executables with appended data. Every release publishes SHA-256 checksums in sha256sums.txt so you can verify your download before running it.

bash
sha256sum -c sha256sums.txt

Once the game is running, the controls are keyboard or controller. Move with the arrow keys or WASD, A is Z, Enter or Space, B is X or Backspace, Start is Escape, and Select is Tab or Shift. Rebind any of these in-game under OPTIONS, CONTROLS. Controllers work out of the box.

Rulesets: faithful quirks or cleaned-up battles

OPTIONS, RULESET selects which set of Gen 1 battle behaviors to run. Both rulesets share the same damage formulas and differ only in whether the original's quirks are kept. The setting persists in options.lua, and mods can register their own, which means a mod can change battle behavior without forking the engine.

The default is gen1_faithful, described as reproducing the original cartridge with its famous bugs included. The README's table starts with oneIn256Miss, the classic 1-in-256 accuracy failure. This is a deliberate design position: the project treats cartridge-accurate behavior as the baseline and any correction as opt-in. If you came for a modernized battle system, you are looking at the wrong default and will need to check whether a second ruleset or a mod covers what you want. The README does not enumerate every rule in the faithful set, so the table is where to look rather than an assumption that everything is covered.

Presentation extras and the performance tiers that gate them

The port adds hotkeys the original never had. The minus and equals keys zoom out and in on the overworld, and the mouse wheel does the same. The 1 key cycles GAME SPEED up, 2 cycles COLORS, 3 cycles TILT for the free-roam overworld, and 4 cycles ZOOM through every level. F1 saves, F2 loads, and F10 opens and closes the mod manager. COLORS, TILT, ZOOM, SHADER FX, GAME SPEED and VOID FILL also live in the Options menu and persist in options.lua.

Those extras are the part that scales down on weak hardware. OPTIONS, PERFORMANCE offers HIGH with everything on, BALANCED without 3D tilt, LOW which also drops survey zoom and caps FPS, and AUTO, the default, which picks a tier from the device: ARM handhelds get LOW, phones get BALANCED, normal desktops get HIGH. The important detail is that it only scales presentation. The fixed-step game logic is identical on every tier, and a lower tier hides your tilt and zoom preferences without forgetting them. So a handheld is not playing a different game, it is playing the same game with fewer rendering effects. If you set a tier manually and later wonder why tilt is missing, that setting is the reason.

Where Gen1Recomp is the wrong tool

Gold, Silver and Crystal are the clearest limitation. The README describes them as Gen 2 Phase 1, meaning import plus launcher, and states that the Gen 2 engine is still under construction. Crystal is the newest of the three, so the launcher lists it as Crystal (Beta). If your goal is to play Crystal natively today, this project will import your ROM and then stop short of the game you wanted. An emulator is the correct answer for that, and it is not a close call.

The SHA-1 gate is the second constraint. Only the seven listed canonical US dumps are accepted. A European or Japanese cartridge, a patched ROM, a reproduction cart dump, or a save-edited file will not import, and the README does not document an override. That is a feature for legal hygiene and a wall for anyone with a non-US copy.

The third constraint is operational. There is no homepage field on the repository and no documentation of an official download page beyond the GitHub repository, the Discord and gen1re.com. The README carries an explicit caution that the project is not affiliated with gen1recomp[.]com, that the site was not authorized, and that it has been filled with adware. If you search for this project and land somewhere else, you are on the wrong site. Support, announcements and mods are all routed through the Discord, which means the project's knowledge base is partly outside the repository.

How it compares to running an emulator

The obvious alternative is an emulator plus a legally obtained ROM. The difference is architectural rather than cosmetic. An emulator implements Game Boy hardware and runs the cartridge's machine code; Gen1Recomp reimplements the game's behavior in Lua and uses the ROM only as a data source during a one-time import. That distinction has consequences. An emulator supports every Game Boy and Game Boy Color title, save states, link cable emulation and shaders through a mature plugin ecosystem. Gen1Recomp supports exactly six games from one region, with no ROM present after import.

What you get in exchange is control over the engine. Rulesets are selectable and mods can register their own. The mods/ directory and the F10 mod manager exist as first-class parts of the app, and the related searches around voxel and sprite mods suggest that visual overhauls are the main draw for a chunk of the audience. You cannot swap the battle system inside a Game Boy cartridge the same way. The trade is breadth for depth: an emulator plays everything, this plays a specific set of games in a form you can edit.

Licence, maintenance and upgrade cost

The repository is MIT licensed, which is permissive and places few conditions on reuse, modification or redistribution of the code. Note what the licence does not cover. The project ships no ROM and no pre-extracted game data, and the ROM is the player's responsibility. Nothing in the MIT grant changes the copyright status of the game content you import, and the SHA-1 verification exists precisely because the project does not distribute that content. This is a description of the repository's terms, not legal advice.

The last push was on 2026-08-28, the same day as release v0.2.36. The two preceding releases, v0.2.35 and v0.2.34, landed earlier that same day, which tells you the release cadence is bursty rather than scheduled. The version number is still 0.2.x, so treat upgrades as pre-1.0. The upgrade path is a download replacement rather than a package update, and because options.lua persists your settings, the practical cost of upgrading is re-verifying the new build's checksum and checking whether a mod you rely on still loads under the current ruleset registration. The README does not document a rollback procedure or a migration path for options.lua between versions.

Editorial conclusion

Adopt Gen1Recomp if you already own a canonical US Red, Blue, Yellow, Gold, Silver or Crystal ROM and want a desktop or handheld build that runs hand-written Lua instead of emulating a Game Boy. Skip it if you want Gold, Silver or Crystal gameplay today; the README describes those three as Gen 2 Phase 1, an import and launcher only, with Crystal listed as Beta. Before committing, verify three things: that your ROM's SHA-1 matches one of the seven hashes in the README, that the release you download has a matching entry in sha256sums.txt, and that your hardware tier in OPTIONS, PERFORMANCE does not hide the tilt and zoom features you actually want.

Frequently asked questions

What is Pokémon Gen1Recomp?

It is a native LÖVE2D recreation of Pokémon Red, Blue, Yellow, Gold, Silver and Crystal. The engine and map behavior are hand-written Lua, and game data and graphics are decoded from a ROM the player supplies. It does not emulate the Game Boy, transpile assembly or download a disassembly.

How do I install Gen1Recomp on PC?

Open the desktop app and on first boot choose your legally obtained .gb or .gbc file, or drop it onto the window. Import takes a few seconds and the game starts automatically. The repository also provides Play-Windows.bat and Play-Mac.command launchers.

How do I install Gen1Recomp on a Steam Deck?

The repository includes install-linux-arm-sbc.sh and install-rg34xxsp.sh, plus matching build scripts and a flatpak directory. The README does not document the flags for these scripts, so read the script before running it. An AUTO performance tier is the default and will pick LOW on ARM handhelds.

Is Gen1Recomp safe to download?

Download only from the GitHub repository, the Discord, or gen1re.com, which the README names as the official sources. The project states it is not affiliated with gen1recomp[.]com and that the site is impersonating it and has been filled with adware. Every release publishes SHA-256 checksums in sha256sums.txt, and Windows Defender false positives on the Windows build are described as a known issue.

How does Gen1Recomp differ from gen2recomp?

The README does not describe a separate gen2recomp project. It does state that Gold, Silver and Crystal are Gen 2 Phase 1 in this repository, covering import and launcher only, with the Gen 2 engine still under construction and Crystal listed as Beta.

Official sources

  1. Official README
  2. Project repository
  3. Release notes
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/bryanthaboi-gen1recomp.svg)](https://hysenlabs.com/projects/bryanthaboi-gen1recomp)