Table of contents
Cookbook
Find the change you want, then read that recipe's prerequisites before copying code. First change recipes need only the two-file mod setup. Basic Lua assumes the tables and functions in Modding Basics. Callbacks, hooks, rendering, and platform integrations add further concepts; an outline deliberately leaves part of the feature for you to implement.
New here? Complete Your First Change first. Use the tutorials when you want a whole working project. Every recipe below links directly to its section and names a fuller walkthrough.
Recipes are written against Red. A Gen 2 / Gen 3 line under a recipe says what carries over to Gold, Silver and Crystal and to FireRed, LeafGreen, Ruby, Sapphire and Emerald, and what does not. For one source that runs on every game, see Portable Mods across Gen 1, 2 and 3; for Gold-specific routing, Preparing Your Mod for Gen 2.
| # | Recipe | Level | Primary API | Page |
|---|---|---|---|---|
| R01 | Recolor a battle sprite | Basic Lua | asset transform | Tweaks |
| R02 | Rewrite one dialogue line | First change | text:override |
Tweaks |
| R03 | Buff a move's power | Basic Lua | moves:patch |
Tweaks |
| R04 | Rebalance a species' stats | Basic Lua | pokemon:patch(baseStats) |
Tweaks |
| R05 | Change a wild encounter table | Basic Lua | encounters:patch |
Tweaks |
| R18 | Change a trainer's party | Basic Lua | trainers:patch(parties) |
Tweaks |
| R08 | Add a Mart item | Basic Lua | items:register + text_pointers |
Items and Balls |
| R09 | Define an item use effect | Basic Lua | item_effects:register |
Items and Balls |
| R10 | Add a new Poke Ball | Basic Lua | balls:register |
Items and Balls |
| R11 | Add a new move (existing effect) | Basic Lua | moves:register |
Species and Moves |
| R12 | Add a custom move effect | Callbacks | move_effects:register |
Species and Moves |
| R13 | Add a new species | Basic Lua + assets | pokemon:register |
Species and Moves |
| R14 | Give a species a party icon | Basic Lua + assets | icons:register |
Species and Moves |
| R15 | Give a species a cry | Basic Lua + audio | cries:register |
Species and Moves |
| R16 | Add a growth curve | Functions | growth_rates:register |
Species and Moves |
| R17 | Add an evolution method | Advanced outline | evolution_methods:register |
Species and Moves |
| R06 | Retarget a map's music | First change | map_songs:override |
Audio |
| R07 | Replace one SFX with a file | Basic Lua | sfx:override({file=}) |
Audio |
| R26 | Author a chiptune (ChipAsm) | Advanced audio | ChipAsm + music:register |
Audio |
| R20 | Add a script command | Scripting | mod.commands:register |
World and Scripting |
| R21 | Add a text token | Functions + text | tokens:register |
World and Scripting |
| R22 | Add a talk script to an NPC | Scripting | map_scripts:register(talk) |
World and Scripting |
| R23 | Spawn a new NPC on a map | Events | mod.world:spawnNpc |
World and Scripting |
| R24 | Add an onStep trigger | Callbacks | map_scripts compose |
World and Scripting |
| R25 | Add a new map + connection | Map authoring | maps:register |
World and Scripting |
| R19 | Add a custom AI brain | Advanced callbacks | trainers:patch(brain) |
Battle and Mechanics |
| R27 | React to a battle event | Events | events:on("battle.move_used") |
Battle and Mechanics |
| R28 | Wrap the damage hook | Hooks | hooks:wrap("battle.damage") |
Battle and Mechanics |
| R29 | Add a status condition | Advanced mechanics | statuses:register |
Battle and Mechanics |
| R30 | Add a type + chart row | Basic Lua + mechanics | type_chart:register |
Battle and Mechanics |
| R31 | Add a Start-menu entry | UI hooks | hooks:wrap("ui.start_menu.items") |
UI and Infrastructure |
| R32 | Register a custom screen | UI callbacks | screens:register + push_screen |
UI and Infrastructure |
| R33 | Persist mod state | Events + saves | mod.save:get/set |
UI and Infrastructure |
| R34 | Define a mod option | Basic Lua | mod.options:define |
UI and Infrastructure |
| R35 | Export an inter-mod API | Advanced multi-mod example | mod.exports + mod.find |
UI and Infrastructure |
| R36 | Scale a battle sprite | Basic Lua + art | battle_sprite_scales:register / pokemon:patch |
Battle and Mechanics |
| R37 | Reshape Oak's intro speech | UI hooks + saves | hooks:wrap("intro.oak_speech.build") |
UI and Infrastructure |
| R38 | Gen-2-like ruleset toggles | Advanced mechanics | rulesets + hyperBeamSkipRechargeOnKO |
Battle and Mechanics |
| R39 | Shiny indicator overlay | Advanced rendering | battle.overlay + Stats.isShiny |
Battle and Mechanics |
| R49 | Pick Pokémon sprites on the fly | Advanced outline | pokemon.sprite / pokemon.icon |
Battle and Mechanics |
| R50 | Swap the player's trainer art | Art or advanced hooks | field.playerPics / player.sprite |
Battle and Mechanics |
| R40 | Running shoes | Hooks | movement.speed |
World and Scripting |
| R41 | Day / night palette | Hooks + palettes | world.tod + map.palette |
World and Scripting |
| R42 | Slower / faster warp fades | Basic Lua | transitions:patch("warp_fade") |
World and Scripting |
| R51 | Make an ordinary NPC battleable | Advanced scripting | trainers:register + maps/map_scripts |
World and Scripting |
| R43 | CD-quality map soundtrack | Basic Lua + audio | music:override({file=}) |
Audio |
| R44 | Distance / indoor music volume | Hooks | music.volume |
Audio |
| R45 | Bag wrap / page-jump / hold-scroll | UI hooks | ui.list_menu |
UI and Infrastructure |
| R46 | Digits on the naming screen | UI hooks | ui.naming.grid |
UI and Infrastructure |
| R47 | Wider survey zoom | Hooks | zoom.range |
UI and Infrastructure |
| R48 | Super Game Boy border | Advanced rendering + art | render.letterbox |
UI and Infrastructure |
| R52 | One-button field actions | Hooks + world API | mod.world:availableFieldActions |
World and Scripting |
| R53 | Gen-2-style battle QoL toggles | UI hooks | battle.caught_marker_visible + grid navigation |
Battle and Mechanics |
| R54 | React to real-world steps | Platform integration | mod.steps (steps permission) |
UI and Infrastructure |
| R55 | Species / trainer battle theme | Basic Lua + audio | pokemon:patch + trainers:patch(battleTheme) |
Audio |
| R56 | Trainer palette and per-party names | Basic Lua + art | trainers:patch(palette, partyNames) |
Battle and Mechanics |
No recipe reaches the total-conversion tier; that is a guided rung (Tutorial 12), not a copy-paste snippet, because it coordinates every subsystem at once.
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.