CLI tool
bryanthaboi/gen1recomp avatar
bryanthaboi/gen1recomp

Gen1Recomp: A Native Lua Recreation of Gen 1 Pokemon That Skips the Emulator

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

3,646 stars317 forksCMIT

At a glance

What is it?
Gen1Recomp rebuilds Pokemon Red, Blue, Yellow, Gold, Silver, and Crystal in LÖVE2D, decoding assets from a legally supplied ROM. It is not a recompilation in the classic sense, but a hand-written Lua engine with a clever import pipeline.
Who is it for?
Adopt Gen1Recomp if you want a native, emulator-free way to play Gen 1 and Gen 2 Pokemon games on modern hardware, with optional 3D tilt and performance tiers. Do not adopt it if you expect a true binary recompilation or if you are unwilling to supply a canonical US ROM with a verified SHA-1 hash.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
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 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What Gen1Recomp Actually Is

Gen1Recomp is not a recompiler in the usual sense. The README is explicit: it does not emulate the Game Boy, transpile assembly, or download a disassembly. Instead, the engine and map behavior are hand-written Lua, running on the LÖVE2D framework. The primary language listed is C, which likely refers to the LÖVE runtime and the importer tool, but the game logic itself is Lua. The project targets Pokemon Red, Blue, Yellow, Gold, Silver, and Crystal, with Gen 2 support in an early phase. It is a from-scratch recreation that borrows only the game data and graphics from a ROM the player supplies. This distinction matters: you are not running the original code, you are running a new implementation that aims to reproduce the original behavior, bugs included.

The ROM Import Pipeline

The core mechanism is a one-time import process. On first boot, the desktop app asks you to choose a .gb or .gbc file, or you can drop it onto the window. The importer verifies the ROM's SHA-1 hash against a hardcoded list of canonical US releases. Only those exact ROMs are accepted. The README lists hashes for Red, Blue, Yellow, Gold, Silver, and two Crystal revisions. After verification, the ROM is used to generate game data and graphics, then released from memory. It is not copied into the cache. Subsequent launches load a private generated cache and never ask for the ROM again. This means the project does not distribute copyrighted content, and it does not require the ROM to be present at runtime. The import takes a few seconds and the game starts automatically. This design is clean: it gives you a native experience without the overhead of an emulator, but it also means you must own a legitimate ROM to use it.

Getting It Running: Commands and Configuration

The Quick Start section describes a GUI-driven process: open the desktop app, choose or drop a ROM, wait for import, and play. There are no command-line instructions in the README, which is a gap for power users. The controls are documented in a table: movement uses arrow keys or WASD, A is Z/Enter/Space, B is X/Backspace, Start is Escape, and Select is Tab/Shift. Controllers are supported out of the box, with mappings for D-pad, sticks, and buttons. You can rebind everything in-game under OPTIONS → CONTROLS. Hotkeys include F1 for save, F2 for load, and F10 to open the mod manager. The options persist in options.lua, a file you can edit manually if you know the keys. The performance tier system is configurable: HIGH, BALANCED, LOW, or AUTO, where AUTO picks a tier based on device type. These are real, verifiable settings you can adjust.

Faithful Rulesets vs. Modern Tweaks

A notable feature is the ruleset system under OPTIONS → RULESET. The default, gen1_faithful, reproduces the original cartridge's quirks, including the famous oneIn256Miss bug. The README shows a table of rules, though it is truncated in the material. The key point is that both rulesets share the same damage formulas; they differ only in whether original quirks are kept. This gives players a choice between authenticity and convenience. The setting persists in options.lua, and mods can register their own rulesets. This is a thoughtful design: it acknowledges that some players want the original experience, while others want a more polished one. However, the README does not specify what the alternative ruleset contains, only that it differs in quirks. That is a documentation gap, but the mechanism is clear.

Performance Tiers and Presentation Extras

The performance tier system is aimed at low-end devices. OPTIONS → PERFORMANCE offers HIGH, BALANCED, LOW, and AUTO. HIGH enables everything, BALANCED disables 3D tilt, and LOW also disables survey zoom and caps FPS. AUTO picks a tier based on the device: ARM handhelds get LOW, phones get BALANCED, normal desktops get HIGH. The crucial detail is that this only scales presentation; the fixed-step game logic is identical on every tier. That means gameplay is deterministic across hardware, which is good for fairness and for modding. A lower tier hides your tilt and zoom preferences without forgetting them, so switching back restores them. This is a sensible approach for a project that targets both desktops and handhelds. The README points to docs/new-features.md for details, which is not included in the material, so specifics beyond this are unconfirmed.

Security and Trust: False Positives and Impersonation

The README contains a prominent warning about an impersonating website, gen1recomp[.]com. The project states it is not affiliated with that site, and that the site is untrustworthy and has been pumped full of adware. This is a serious concern for anyone downloading the project: you must only use official sources, which are this GitHub repository, the Discord, and gen1re.com. The README also addresses Windows Defender false positives. It says Defender sometimes flags the Windows build with a generic machine-learning detection like Trojan:Win32/Wacatac!ml. The project explains this is a false positive because the exe is the official LÖVE runtime with the game archive appended, which is standard for LÖVE games. The README advises verifying downloads via sha256sums.txt and checking VirusTotal. This is a practical issue: if you are on Windows, you will likely see a warning, and you need to decide whether to trust the project's explanation. The README's transparency is good, but it also means you must do your own verification.

Limitations and Wrong Use Cases

The most obvious limitation is that Gen 2 support is incomplete. The README states that Gold, Silver, and Crystal are in 'Gen 2 Phase 1 (import + launcher)', and the Gen 2 engine is still under construction. Crystal is listed as Beta. So if you want to play Gen 2 fully, this is not ready. Another limitation is the strict ROM requirement: only canonical US ROMs with specific SHA-1 hashes are accepted. If you have a European or Japanese version, or a ROM with any modification, the importer will reject it. This is intentional for accuracy, but it narrows the audience. The project also does not include a ROM, so you must source one legally, which can be a hurdle. Finally, the project is not a true recompilation, so if you expect the original assembly code running natively, you will be disappointed. It is a recreation, and the README's acronym joke makes that clear, but the name might mislead.

Alternatives and the Difference in Approach

The main alternative is using an emulator like mGBA or Visual Boy Advance with a Pokemon ROM. An emulator runs the original Game Boy code directly, translating instructions on the fly or via dynamic recompilation. That approach gives you 100% fidelity, including every bug, but it carries the overhead of emulation and does not offer native features like 3D tilt or performance tiers. Another alternative is the pret disassembly projects, like pokered and pokecrystal, which provide the source code for the original games, allowing you to compile them natively. That is a true recompilation, but it requires you to work with assembly and C, and it does not provide a polished LÖVE2D interface. Gen1Recomp's approach is different: it writes new Lua code that replicates the game's behavior, using the ROM only as a data source. This gives you a modern, portable, and customizable experience, but it is a recreation, not a recompilation. The trade-off is fidelity versus modernity.

Editorial conclusion

Adopt Gen1Recomp if you want a native, emulator-free way to play Gen 1 and Gen 2 Pokemon games on modern hardware, with optional 3D tilt and performance tiers. Do not adopt it if you expect a true binary recompilation or if you are unwilling to supply a canonical US ROM with a verified SHA-1 hash. Before using, verify that your ROM matches one of the listed hashes, check the official sources (this repository, the Discord, and gen1re.com) to avoid the impersonating site, and review the AI Use Disclosure and the gold-phase1 doc for Gen 2 limitations.

Official sources

  1. Official README
  2. Project repository
  3. Release notes
Community notes

Community notes