Table of contents
Save editor
A built-in editor for party, boxes, items, event flags, map location,
Pokedex flags and trainer data, no play-through required. It ships inside
every build and edits saves for all eleven games: Red, Blue, Yellow, Gold,
Silver, Crystal, FireRed, LeafGreen, Ruby, Sapphire and Emerald. A generation
adapter (tools/save-editor/Gen.lua, plus Game3Adapter.lua for Gen 3)
routes every read and write, so an edit lands in that game's save shape
rather than the Gen 1 fields.
Quick safe edit
Use the launcher route if you are a player. It keeps the selected game and save slot together:
- Open a SAVE SLOT row that contains your save and select Edit.
- Change one small value, such as an item quantity or party entry.
- Save from the editor, then select Close to return to the launcher.
- Open the same slot again and confirm the value is still present.
Before making a larger change, confirm that the editor has created its
timestamped .bak-YYYYMMDD-HHMMSS backup.
Restore an editor backup
The editor writes the previous file beside the edited file before each save. To restore one:
- While the editor is still open, read and record the full save path shown in its title bar. If the path is not visible, use Open... to identify the file before closing anything.
- Close the editor and the game so the save is not being written. Open the directory in your file manager. For a launcher slot, use the matching version/slot path under the LÖVE save directory listed below.
- Copy the current save to a new name such as
slot1.lua.before-restore. Keep this copy until you have confirmed the restored file works. - Find the timestamped backup made before the unwanted edit, for example
slot1.lua.bak-20260909-143000. Copy that backup and rename the copy to the original save filename (slot1.lua). Keep the backup itself. - Reopen the same slot in the launcher, or use Open... in the standalone editor, and check the value you meant to recover.
Copying the backup preserves the original files and works on macOS, Linux, and Windows using their normal file manager. If the backup name or save path is unclear, stop before replacing anything and use Troubleshooting.
Two ways in
From the launcher. Every SAVE SLOT row that holds a save carries an Edit control next to Delete. Edit suspends the launcher, mounts that game's cache, and opens that slot's file; Close hands the launcher back with the slot list re-read. This is the path most people use, and it works on the supported game tabs. Hopping between games is safe: Close unmounts the version's cache and evicts the loaded data and editor modules, so the next Edit (or Play) on the other game cannot see this one's species or item tables.
Standalone, where Close quits instead. Close the game first, then from the repo root:
love . --editor
# or
POKEPORT_EDITOR=1 love .
# select another game instead of Red when the save requires it
POKEPORT_VERSION=gold love . --editor
POKEPORT_VERSION=emerald love . --editor
# open a specific save file (any path)
love . --editor --save "/path/to/slot1.lua"
POKEPORT_VERSION picks which game's cache and data the editor loads
(Red unless overridden), which matters: a Gold save edited against Red's
tables would be wrong, so match the variable to the save you open. The
game must already be imported.
Which save it opens
The game stores playthroughs as save slots: one Lua file per slot under
saves/<version>/ (slot1.lua, slot2.lua, ...) in the LÖVE save
directory, with the slot registry in options.lua. The launcher's Edit
opens exactly the slot you clicked. A bare standalone run falls back to
the legacy flat save.lua under:
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/LOVE/pokemon-love2d/ (without the LOVE/ segment in a packaged build) |
| Linux | ~/.local/share/love/pokemon-love2d/ |
| Windows | %APPDATA%\love\pokemon-love2d\ |
On a slotted install that flat file usually no longer exists, so pass
--save with the slot file's path, or take the launcher route. Once the
editor is up, Open... and dropping a save file onto the window also
work.
If options.lua is ever reset or loses its slot registry, nothing is
lost: the next boot rescans saves/<version>/ and re-registers every
slot file it finds, so orphaned saves reappear in the launcher on their
own.
Pages
The pages are Party, Boxes, Items, Events, Map, Pokedex, Trainer and Checks; the same pages serve every game and the adapter redirects what they touch. The Pokemon inspector has Main, Stats, Moves, Origin, Extras and Checks sections, and shows only the fields the generation has (DVs and stat experience on Gen 1 and 2, IVs, EVs, nature, ability and PID on Gen 3).
| Gen 1 | Gen 2 | Gen 3 | |
|---|---|---|---|
| Boxes | 12 of 20 | 14 of 20 | 14 of 30 |
| Items | bag, PC | pockets, PC | pockets, PC |
| Events | Gen 1 event flags | src/core/gen2/FlagNames.lua |
story, trainer, item, object and system flags plus script vars (Gen3Flags.lua) |
- Items splits into Bag, PC, Wallet and Badges. Gen 2 badges cover Johto and Kanto. Crystal adds Buena points; FireRed, LeafGreen and Emerald add Berry Powder; Ruby, Sapphire and Emerald add Volcanic Ash and a Pokeblocks view; Emerald adds Battle Points.
- Trainer edits name, IDs, gender and wallet. Ruby, Sapphire and Emerald also show the Mirage Island value.
- Boxes has a Sort popup (Living Dex, species, level, remove gaps) as one undoable edit.
- Map browses that game's map set, including maps mods add.
- Checks is a read-only property audit (ranges, stats, moves, PID traits, egg rules). It is not full PKHeX legality: a clean result means unchecked, not certified legal.
Undo/Redo (Ctrl/Cmd+Z, Shift for redo) keeps eight session snapshots. To move a save to real hardware or an emulator, use the launcher's Cartridge save (.sav) export rather than the editor.
Mods merge into the editor's data the same way the game loads them, so modded species, items, and flags are editable. Opening a save from a different game than the previous editor session reloads the data and mod set for that game automatically.
Safety
Every write makes a <file>.bak-YYYYMMDD-HHMMSS backup first. Saves are
plain Lua data files parsed by a data-only reader; the editor (and the
game) never execute code from a save. When a loaded save carries content
the game would quarantine (lost mons, items, script state), the status
bar reports it on load, before you change anything.
Headless test instructions live in tools/save-editor/README.md.
Start here
Playing
Tutorials
- Choose a tutorial
- 01 Sprite and Text Tweak
- 02 Balance Patch
- 03 New Species
- 04 New Item and Ball
- 05 New Move
- 06 NPC and Dialogue
- 07 New Map
- 08 Quest
- 09 Custom Music
- 10 New Mechanic
- 11 Custom UI Screen
- 12 Mini Total Conversion
Creative guides
Concepts
Recipes and reference
Author and developer tools
Home · Start Playing · Glossary · Troubleshooting · Repository · Community
Game data is imported locally from a supported ROM supplied by the player. Shared mods contain original work or transform recipes, never extracted game content. Check each guide's target game before using its examples.