- 239
- Posts
- 9
- Years
- Seen Apr 17, 2025
Complete FireRed Upgrade
Decomp projects are in full swing, but it may be daunting to port your entire project over. This engine is a great compromise for those who want decomp-quality features in a binary hack. The source code is written almost entirely in C, and can easily be adapted to decomps when the time comes. But in the meantime, it will be an essential tool for FireRed hacks that seek to improve on the game in any way, shape, or form.
If you are starting a new project however; I recommend you use pret's decompilation projects, pokefirered and pokeemerald, over this feature. Having the entire source code at your fingertips will allow you to do things faster, easier, and with less risk of introducing bugs.
If you are starting a new project however; I recommend you use pret's decompilation projects, pokefirered and pokeemerald, over this feature. Having the entire source code at your fingertips will allow you to do things faster, easier, and with less risk of introducing bugs.
What Is This?
This project is a massive engine upgrade for Pokémon FireRed. It includes an updated battle engine on par with the current generation's, including every single attack, ability, item, AI, and more. In fact, this is the only game engine in gen3 with every single move animation! In addition, it includes several game improvement features such as Expanded PC Boxes, a DexNav, dynamic overworld palettes, character customization, TM/HM expansion, a Battle Frontier, and many others (see the features list below). Most of the engine features are easily configurable to the user by simply commenting and uncommenting lines. An extensive documentation has been written to fully explain what this engine is capable of and how to use all of the features contained within.
In addition, most table data is untouched or is loaded directly from the rom, allowing this engine to be smoothly implemented for (most) existing hacks!
Attributes
Spoiler:
- Dynamic Insertion: Pick and choose an offset! Free space can be found from that offset, and all necessary data will be repointed!
- No More Pokémon Encryption: Easier to manipulate Pokémon data!
- Customizable Options: Almost all features are easily included/removed by a simple line comment!
- Choose Between Old/New Mechanics: Most features that have been updated in recent generations can be set to either old or new-style mechanics.
- Unaltered Data: Most data tables have been left alone, meaning it is compatible with (pretty much) every hack!
Battle Features
Spoiler:
- All Moves(Data/Animations/Effects) Abilities, Item Effects, Weather effects, Terrain effects, mechanics, etc. through Gen 7
- Vastly improved AI system with decision-making skills for all new battle effects
- Mega Evolution / Primal Reversion / Ultra Burst
- Z-Moves
- Ability pop-ups
- Hidden Abilities
- Dissapearing HP-bars during Attack Animations
- Trainer Sliding / In-battle messages
- Expanded Poké Balls
- Critical Capture
- Battle Terrain
- Totem Pokémon
- Specified Max Levels (up to 255!)
- Show Move Data From Attack Menu
- Show Pokemon Type Icons on Healthbar
- Trainers with EVs
- Class-based Music
- Class-based Poké Balls
- Dynamic Trainer Backsprites
- Customizable Pre-Battle Mugshot Styles
- Wild Double Battles
- Multi Battles - Battle Two Opponents, Be Spotted By Two Trainers, Battle With a Partner, and More!
- Custom Wild Pokémon (Moves, Hidden Ability, Shininess, etc)
- New Evolution Methods / Evolution Moves / Expanded Evolutions per Pokémon
- Expanded Moves/Learnsets
- Badge-based obedience
- Shiny Charm
- Level Scaling - Wild/Trainer Pokémon levels can be scaled to the highest level of your party
- Updated Exp. Share / Exp. Yields
- Gain Exp. From Capturing Pokémon
- Inverse Battles / Sky Battles
- Overworld Trainer Facing
- Battle Background Switching
- Uncapturable Pokémon (Flag-based)
- Prevent Bag Use in Battle (Flag-based)
- Prevent Running in Battle (Flag-based)
- Capture Trainer's Pokémon (Flag-based)
- Day/Night System in Battle (Palette Shading, Time-Dependent Battle Backgrounds, etc.)
- Type-Changing Moves Show Current Type in Summary Screen
- Fairy type
- And More! Check out the configuration file for all customization options!
Other Features
Spoiler:
- Battle Frontier/Battle Facilities
- Improved Battle Tower - Tiers, Custom/Randomized Teams, Single/Double Battles, etc.
- Expanded Move Relearner (up to 50 moves)
- Improved TM/HM Expansion, Reusable TMs
- Updated Pickup mechanics
- Swarms / Daily Events
- Day/Night, Real Time Clock (RTC)
- Roaming Pokémon
- JPANs engine features ported and improved
- Character Customization
- Lots of New Scripting Specials (same special values/arguments/outputs used)
- Whiteout Hack / Text Updates
- Run Scripts Each Step
- Extra Pedometers for Script Events
- And more!
- Save-Block Expansion
- DexNav and Secondary PokéTools Start Menu
- Dynamic Overworld Palettes
- Updated Daycare System, Specified Hatch Level
- Expanded/Customizable Ability Names
- Direct PC Selection / Accommodating Specials
- Wrapping Summary Screen
- Base stats on Pokédex summary screen
- Updated BW Repel System
- Poison Survival
- Auto Naming-Screen Screen Swap
- Premier Balls From PokéMarts
- Configurable Start Menu
- Expanded Pokémon in the Hall of Fame
- Expanded Text Buffers
- Triple Layer Blocks
- Altering Cave / Tanoby Ruins Support
- Footstep noise in grass & on sand
- Omnidirectional Jumping
- Item Image on acquire
- Auto-Run Capability, Run Inside
- Expanded Game Corner Coins (up to 999,999,999!)
- More Safari Balls / Steps (each up to 65,535!)
- Scrolling Multichoice Lists
- Hold Item Swapping
- Randomizer(s)
- Follow Me
- Bag Sorter
- New Field Moves - Rock Climb, Defog, Dive
- Shiny Charm & Oval Charm
- And More!
Screenshots
Spoiler:
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/SYhUne1.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/xyP91yF.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/YVvlJyX.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/fM07Qeu.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/1BYo4OV.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/mBEV45v.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/jBnn1NI.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/F9NiOML.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/Ef5DyFc.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/J4UzBXX.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/FeJfZE5.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/X5s25QQ.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/EOWZcP7.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/CdlkYTe.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/N5ku3vF.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/r3T95hX.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/mvCM1Xh.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/3c0UjYk.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/peX0VOu.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/sL6sWP0.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/QmXtFxb.png)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/LdhNO9B.png)
GIFs
Spoiler:
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/rAzkMta.gif)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/HReTq3B.gif)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/vqzqRpt.gif)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/RgoOlxf.gif)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/PNFsHTQ.gif)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/EgZIw7q.gif)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/g5QOgd1.gif)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/8cebd6J.gif)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/oWYN02W.gif)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/HfVQSgH.gif)
![[PokeCommunity.com] Complete FireRed Upgrade [PokeCommunity.com] Complete FireRed Upgrade](https://i.imgur.com/lFYtwR1.gif)
Videos
Spoiler:
Here are a couple promotional videos for Pokemon Unbound that showcase the potential of this engine.
Compilation Instructions
Spoiler:
1. Clone or download the repository. It is highly recommended to clone the repository as you can then easily pull updates when they are made. See steps 1-5 here for instructions on how to clone.
2. Installation instruction can be found in the readme.
Note: Anytime you make changes, the compiler will only compile the files you have changed. Any changes made to header files (.h) will require you to type 'python scripts//clean.py build' in cmd and then rerun the build scripts. For more command line options, see "Engine Scripts" in the documentation.
2. Installation instruction can be found in the readme.
Note: Anytime you make changes, the compiler will only compile the files you have changed. Any changes made to header files (.h) will require you to type 'python scripts//clean.py build' in cmd and then rerun the build scripts. For more command line options, see "Engine Scripts" in the documentation.
FAQ
Spoiler:
Q: I'm experiencing lags whenever I give myself a Pokemon via a script.
A: Edit your include/constants/items.h to either comment out the Shiny Charm, or set it up properly as instructed in the documentation.
Q: Some vanilla multichoice menus are crashing the game.
A: Comment out SCROLLING_MULTICHOICE in the config file to fix the scrolling multichoice menus. Any other ones will need to be rescripted manually using the new format. Fortunately, this only happens to menus around when the player gets to Celadon City.
Q: All of my overworld sprites are invisible after applying the CFRU!
A: Check out this video solution/tutorial by Fred40!
Q: I applied the DPE and then the CFRU to clean ROM, but I can't evolve any Pokemon.
A: You need to change EVOS_PER_MON in the config file to 16 in order to match the CFRU with the DPE.
Q: I modified something in the config file and ran the make script, but nothing change.
A: You need to run python scripts//clean.py build first.
Q: I applied the Dynamic Pokemon Expansion, but the new Pokemon appear in AdvanceMap with glitchy names. Did I do something wrong?
A: Make sure you're using AdvanceMap 1.9.5. By default, the DPE inserts Pokemon data after 0xFFFFFF, the last offset AdvanceMap 1.9.2 can read from. However, had you followed the suggested instructions in the documentation, this wouldn't be an issue for you.
Q: Patch?
A: No official patch will be provided. That defeats the purpose of this engine. Additonally users of any patch made would be at the liberty of the pre-defined customization options and wouldn't get to choose anything for themselves.
Q: How can use a specific feature from the engine without installing the whole thing?
A: Figure out how to extract it yourself. However, most likely the feature is interconnected with other features and will be a pain to pull out. The engine was designed for maximum compatability with hacks in progress, so if it doesn't work for you, your hack may just be too far along.
Q: I installed the engine but I can't add any new wild Pokemon in Advance Map. Did I do something wrong?
A: Use the Dynamic Pokemon Expansion for FireRed to get the new Pokemon.
Q: What game editors should I use with this engine?
A: Ideally, if you use both this and the Dynamic Pokemon Expansion, you won't need any. Any data can be edited directly by modifying the files in the engines. If you only use the CFRU, then G3T is recommended. DON'T USE PGE!!!!
Q: I don't know how to code. How do I customize the engine for my game?
A: There is a section in the documentation that explains various C syntax to allow you to edit pretty much anything in the engine. The documentation also explains how to 'ignore' specific moves, abilities, and items so you don't have to mess with any of the generated tables. Otherwise, all of the customizable features should be in src/config.h. Beyond that, you will need to follow some C coding tutorials (eg. this one) to understand how to optimize this engine for your own hack.
Q: I compiled the CFRU but can't see any of the new items or Pokémon in my tool! Where are they?
A: The CFRU doesn't create any new item or Pokémon data for user flexibility. You can either create the new item data first and edit the values in include/constants/items.h (same with include/constants/species.h), or make the item (species) data match the values that are already in those header files.
Q: I opened my game in G3T but the ability names are all messed up. Did I do something wrong?
A: No, you didn't do anything wrong. The length of the ability names are expanded as part of the engine. To undo this, open the file strings/Ability_Name_Table.string and change the first line to MAX_LENGTH=12. If you compile after doing this, you'll receive several warnings stating that certain strings have been truncated. Modify all of these mentioned ability names and reduce their length to fit within the new twelve character limit.
Q: If I install this engine with default settings on vanilla FireRed, can I play a QOL (Quality-of-Life) FireRed?
A: The Trainer Tower on Seven Island will no longer retain it's data when the game is saved (if the Save Block Expansion is used). Either replace the Trainer Tower with a Battle Tower, or remove save game capabilities while in the Trainer Tower.
A: Edit your include/constants/items.h to either comment out the Shiny Charm, or set it up properly as instructed in the documentation.
Q: Some vanilla multichoice menus are crashing the game.
A: Comment out SCROLLING_MULTICHOICE in the config file to fix the scrolling multichoice menus. Any other ones will need to be rescripted manually using the new format. Fortunately, this only happens to menus around when the player gets to Celadon City.
Q: All of my overworld sprites are invisible after applying the CFRU!
A: Check out this video solution/tutorial by Fred40!
Q: I applied the DPE and then the CFRU to clean ROM, but I can't evolve any Pokemon.
A: You need to change EVOS_PER_MON in the config file to 16 in order to match the CFRU with the DPE.
Q: I modified something in the config file and ran the make script, but nothing change.
A: You need to run python scripts//clean.py build first.
Q: I applied the Dynamic Pokemon Expansion, but the new Pokemon appear in AdvanceMap with glitchy names. Did I do something wrong?
A: Make sure you're using AdvanceMap 1.9.5. By default, the DPE inserts Pokemon data after 0xFFFFFF, the last offset AdvanceMap 1.9.2 can read from. However, had you followed the suggested instructions in the documentation, this wouldn't be an issue for you.
Q: Patch?
A: No official patch will be provided. That defeats the purpose of this engine. Additonally users of any patch made would be at the liberty of the pre-defined customization options and wouldn't get to choose anything for themselves.
Q: How can use a specific feature from the engine without installing the whole thing?
A: Figure out how to extract it yourself. However, most likely the feature is interconnected with other features and will be a pain to pull out. The engine was designed for maximum compatability with hacks in progress, so if it doesn't work for you, your hack may just be too far along.
Q: I installed the engine but I can't add any new wild Pokemon in Advance Map. Did I do something wrong?
A: Use the Dynamic Pokemon Expansion for FireRed to get the new Pokemon.
Q: What game editors should I use with this engine?
A: Ideally, if you use both this and the Dynamic Pokemon Expansion, you won't need any. Any data can be edited directly by modifying the files in the engines. If you only use the CFRU, then G3T is recommended. DON'T USE PGE!!!!
Q: I don't know how to code. How do I customize the engine for my game?
A: There is a section in the documentation that explains various C syntax to allow you to edit pretty much anything in the engine. The documentation also explains how to 'ignore' specific moves, abilities, and items so you don't have to mess with any of the generated tables. Otherwise, all of the customizable features should be in src/config.h. Beyond that, you will need to follow some C coding tutorials (eg. this one) to understand how to optimize this engine for your own hack.
Q: I compiled the CFRU but can't see any of the new items or Pokémon in my tool! Where are they?
A: The CFRU doesn't create any new item or Pokémon data for user flexibility. You can either create the new item data first and edit the values in include/constants/items.h (same with include/constants/species.h), or make the item (species) data match the values that are already in those header files.
Q: I opened my game in G3T but the ability names are all messed up. Did I do something wrong?
A: No, you didn't do anything wrong. The length of the ability names are expanded as part of the engine. To undo this, open the file strings/Ability_Name_Table.string and change the first line to MAX_LENGTH=12. If you compile after doing this, you'll receive several warnings stating that certain strings have been truncated. Modify all of these mentioned ability names and reduce their length to fit within the new twelve character limit.
Q: If I install this engine with default settings on vanilla FireRed, can I play a QOL (Quality-of-Life) FireRed?
A: The Trainer Tower on Seven Island will no longer retain it's data when the game is saved (if the Save Block Expansion is used). Either replace the Trainer Tower with a Battle Tower, or remove save game capabilities while in the Trainer Tower.
Q: Does this engine expand Pokemon or Item data?
A: No, the DPE expands Pokemon, but neither that or the CFRU touches the item data. Base item IDs are assigned in include/constants/items.h. You will have to create your own item data (via G3T or in this engine if you have the coding knowledge) after first expanding items (see this post or step 1 in this tutorial). The item IDs can be match those already defined in include/constants/items.h, or you can create the items with whatever IDs you like and redefine the values in include/constants/items.h.
Q: I applied both the Complete FireRed Upgrade and Dynamic Pokemon Expansion, but the new Pokemon can only use Struggle. Did I do something wrong?
A: By default, the CFRU has the learnsets for expanded Pokemon commented out. You need to uncomment the new learnsets in src/Tables/level_up_learnsets.c. Additionally, don't forget to update the config file with any data related to new Pokemon (for instance, the National Pokedex size).
Bugs
Spoiler:
A full list of bugs can be found here
Bug reporting options:
In general, please try to be respectful of the developers and the resource. We cannot create a tool that is perfectly applicable to every hack, and therefore a lot of data was left untouched/is loaded directly from the rom and most options left customizable. This requires effort from the user, and will inevitably cause frustation among new users. We are a lot more receptive to helping you if you are willing to learn.
Bug reporting options:
- Reply to this thread
- Reach out to Skeli or ghoulslash directly (discord or pokecommunity)
- Open an issue on github
- Comment in Pokemon Unbound's Discord server in the cfru channel
In general, please try to be respectful of the developers and the resource. We cannot create a tool that is perfectly applicable to every hack, and therefore a lot of data was left untouched/is loaded directly from the rom and most options left customizable. This requires effort from the user, and will inevitably cause frustation among new users. We are a lot more receptive to helping you if you are willing to learn.
Recommended Add-Ons
Spoiler:
Since we can't add every feature ever created, we instead recommend some standalone features to include in your game alongside this engine:
- Dynamic Pokemon Expansion
- Overworld Form Change (Only Arceus, Silvally, Genesect, & Giratina are included in the CFRU)
- Sideways Stairs
- DS-Style Selection Screen
- BW Summary Screen (recommended to fit some expanded move descriptions)
- Nature Coloured Stats (see BW Summary Screen comments for alternate implementation)
- IV Rankings (see BW Summary Screen comments for alternate implementation)
Unown Report(NOT COMPATIBLE)- Various music patches. See documentation for full list.
Credits
Spoiler:
- Primary Developers:
- Code:
- Pret Team - decomps
- DizzyEgg - Emerald Battle Engine Upgrade Source
- FBI - DexNav Source, Saveblock Expansion
- Touched - Mega Evolution
- Navenatox - Dynamic Overworld Palettes
- Zeturic - Various Fixes
- JPAN - Hacked Engine Source Code
- azurile13 - Hidden Abilities
- DoesntKnowHowToPlay - Pokedex Screen Stats, Trainer's with EVs source
- Squeetz - Pokedex Screen Stats, Footstep noises
- Diegoisawesome - Triple Layer Tiles
- Jiangzhengwenjz – Linux compatibility
- Graphics:
- Golche - Attack Particles, Battle Backgrounds, Other Graphics
- Lixdel - Attack Animations
- Bela - Poké Balls
- Solo993 - Backsprites
- Criminon - Mega Indicators
- canstockphoto.ca - Battle Backgrounds
- Testers:
- Criminon
- Dionen
- Gail
- Recko Juice
- Anyone who played the Unbound Battle Tower Demo in its early stages
If you have contributed to this project and we forgot, please let us know asap! :)
Last edited: