GBA ROM PATCHER

Buy me a coffee

The ultimate tool for your GBA ROMs

Blog How to Apply an IPS or BPS Patch to a GBA ROM

How to Apply an IPS or BPS Patch to a GBA ROM

Step-by-step guide to applying IPS and BPS patches to GBA ROMs. Covers patch formats, why ROM version matters, and how to use the browser-based patcher.

Affiliate Disclosure: Some links on this page are affiliate links. If you make a purchase through them, we may earn a small commission at no extra cost to you. This helps keep the site and tools free.

If you've downloaded a GBA ROM hack and found yourself staring at a .ips or .bps file with no idea what to do next, this is the guide you need. Patching a GBA ROM is straightforward once you understand what these files actually are and why the process can go wrong.

What a Patch File Is (and Why It Exists)

A patch file contains only the differences between the original ROM and the modified version — not the original game data itself. The hack author takes a base ROM, makes their changes, and then generates a diff file that encodes those modifications.

This matters legally: distributing the patch file is generally accepted practice because it doesn't include any copyrighted ROM data. You supply the base ROM yourself, the patcher merges the patch into it, and you end up with the hacked version. No ROM data ever changes hands through the patch file itself.

The practical implication is that patching is a two-input process: you need the correct patch file and the correct base ROM. Both have to match for the result to work properly.

IPS Format: Simple but Limited

IPS (International Patching System) is the oldest format still in common use. It was designed in the 1990s and it shows. The format records a list of offsets and the new bytes that should be written at each offset — nothing more complicated than that.

The problems with IPS:

  • 16MB file size limit. IPS uses 3-byte offsets, which caps it at 16,777,216 bytes. Most GBA ROMs are under 32MB, so large hacks sometimes can't be distributed in IPS format at all.
  • No checksum verification. IPS has no mechanism to confirm you're applying the patch to the correct ROM. If you apply an IPS patch to the wrong ROM version or the wrong region, the patcher will happily do it without complaint — and you'll get a broken game. It patches blindly.
  • No source verification. Same issue applies to the input ROM. A corrupt or trimmed ROM will get patched without any warning.

IPS is still widely used because it's simple and universally supported. For smaller hacks on a single ROM version, it works fine. Just know that if something looks wrong after patching, the format itself won't tell you.

UPS Format: A Step Up

UPS was created partly to address IPS's size limitation by using variable-length encoding, which removes the 16MB ceiling. It also adds basic checksums for the source and output files.

In practice, UPS never became the dominant standard. BPS overtook it, and most new hacks ship as either IPS or BPS. You'll encounter UPS occasionally for older hacks.

BPS Format: The Modern Standard

BPS (Beat Patch System) is what most serious ROM hacks use today, and for good reason:

  • Checksums for source and target. BPS embeds CRC32 checksums for both the input ROM and the expected output ROM. If you try to apply a BPS patch to the wrong ROM version, it will refuse and tell you the checksums don't match. This prevents silent corruption.
  • Delta encoding. Rather than listing raw byte replacements, BPS encodes changes relative to the original data. This produces significantly smaller patch files, which matters when a hack modifies large chunks of a ROM.
  • No size limit. BPS handles GBA ROMs of any size without restriction.

The checksum enforcement is the most important difference in practice. With BPS, you get an error message when something is wrong. With IPS, you get a broken game.

Why ROM Version Matters

ROM hacks are built against a specific release of the base game. A FireRed hack built against the US (Rev 1) release will produce a broken result if you apply it to the European release or the Japanese release, or even the US Rev 0 release, because the underlying data at each memory address is different between versions.

Common version identifiers you'll see:

  • Region: US, EU, JP (Europe, Japan) — different language versions have different data layouts
  • Revision: Rev 0, Rev 1, Rev A — Nintendo rereleased some games with bug fixes
  • Language: Some hacks specify English, French, Spanish, etc.

The hack's distribution page will tell you which base ROM it was built for. Read it before patching. Applying to the wrong version is the most common reason patching "works" but the game crashes or glitches.

Where to Find Patches

Romhacking.net is the main repository for GBA patches. Each entry lists the base ROM the patch targets, the format, and usually the exact ROM identifier. Read the readme or description before downloading.

For Pokémon hacks specifically, individual hack pages (often on Reddit communities or dedicated Discord servers) are the authoritative source — see our best Pokémon ROM hacks roundup for specific recommendations and where each hack is distributed.

Do not use sources that bundle the patch together with a pre-patched ROM — those are distributing copyrighted data.

Step-by-Step: Patching with gbarompatcher.com

The IPS/BPS patcher on this site runs entirely in your browser. Nothing is uploaded to a server — the patching happens locally using JavaScript.

Steps:

  1. Open the patcher tool and go to the IPS/BPS Patcher tab.
  2. Click the ROM field and select your base ROM file (.gba).
  3. Click the Patch field and select your patch file (.ips or .bps).
  4. Click Apply Patch.
  5. The patched ROM will download automatically. Rename it if needed.

That's it. The whole process takes under ten seconds.

What to Do When Patching Fails

"Checksum mismatch" or the patcher refuses to apply: This almost always means you have the wrong ROM version. Check the hack's distribution page for the exact ROM it targets — region, revision, and sometimes a specific hash (MD5 or CRC32). Compare against your ROM using a tool like RomCenter or HashCheck. Track down the correct version.

The patch applies but the game crashes immediately: IPS patches don't verify input, so you patched the wrong ROM without getting an error. Same fix: find the correct base ROM version.

The patch applies, the game boots, but it's visually glitched or crashes later: Usually a ROM version mismatch that happened to be close enough to boot but not close enough to play correctly. Try a different regional version of the base ROM.

The patch file itself is corrupt: Rare, but possible. Re-download the patch from the official source and check that the file size matches what's listed on the distribution page.

After Patching: Do You Need an SRAM Patch Too?

Possibly — depends on how you're playing the patched ROM.

On emulator: Modern emulators (mGBA, RetroArch with mGBA core) auto-detect save types. You generally don't need to do anything extra.

On a flash cart: Most modern flash carts (EZ-Flash Omega DE, Everdrive GBA X5 Mini) handle save type detection automatically. Check your cart's documentation.

On a repro cartridge: This is where SRAM patching matters. Many repro carts use battery-backed SRAM regardless of what save type the ROM expects. If the ROM hack uses Flash 1M or Flash 128K saves (common in FireRed-based hacks), you need to convert that to SRAM format before flashing to the repro. Run the patched ROM through our SRAM patch tool to handle this.

If you also want saves to persist after the battery dies, apply the battery-less save patch at the same time.

Full details on this are in our guide on fixing GBA repro saves with SRAM patching.


Quick Reference

Format Size Limit Checksum Notes
IPS 16MB None Patches blindly — wrong ROM = broken game
UPS None Basic Rarely used today
BPS None Source + target Refuses wrong ROM, smaller files

The patcher tool handles all three formats. If you run into trouble, the most likely cause is a ROM version mismatch — double-check which version the hack was built against before anything else.

← Back to Blog