- Klimov☕
- Flávia☕
- Jonathan☕
- Ivan☕
- Hotctime☕
GAME TRANSLATE · ROM HACKING · PATCHING GUIDE
ROM Patch Formats Explained: IPS, BPS, UPS and xDelta
Why ROM hacks and fan translations are usually distributed as patch files, how the major formats differ, and which one makes sense for different kinds of retro-game projects.
Download a fan translation and you will usually receive a tiny file ending in .ips, .bps, .ups or .xdelta instead of a complete game.
That file is the patch.
It contains enough information to transform a specific original game file into the modified version created by the ROM hacker or translation team.
A ROM patch is not the game itself. It is a description of the differences between the original file and the modified file.
This distinction matters for preservation, distribution, troubleshooting and project maintenance. It is also why the exact original ROM matters: if the patch expects one revision and you feed it another, the result may be wrong—or the patcher may refuse to continue.

Why Are ROM Hacks Distributed as Patches?
Imagine an original 4 MB game and a translated 6 MB version.
Most of the data may still be identical: the original program, maps, battle systems, graphics, music and countless other bytes have not changed.
A patch format takes advantage of that.
Instead of distributing the entire modified game, the author distributes only the information needed to reproduce those changes.
This has several practical benefits:
- The download is often much smaller than the complete game.
- The original game data does not need to be bundled with the patch.
- Players can verify that they are starting from the intended revision.
- Project authors can release updated patches as bugs are fixed.
But not all patch formats solve the problem in the same way.
IPS: The Classic ROM Hacking Patch Format
IPS is one of the oldest and simplest patch formats associated with classic ROM hacking.
An IPS file begins with the identifier PATCH. Its records essentially say:
Go to this offset and write these bytes.
The format can also use simple run-length encoding for repeated bytes.
That simplicity is a major reason IPS remained popular for so long. It is easy to implement, easy to apply and supported by a huge number of ROM hacking tools.
Why IPS is still useful
- Very simple format
- Excellent tool support
- Good fit for many classic cartridge ROMs
- Easy to create and apply
- Can write beyond the original end of a file, allowing many ROM expansions
What IPS does not solve
- No built-in source ROM checksum
- No built-in target checksum
- A patcher may happily modify the wrong ROM
- 24-bit offsets limit patchable locations to the first 16 MiB
- Less efficient than newer formats for some large changes
The checksum issue is particularly important.
If you apply an IPS patch to the wrong revision of a game, the format itself does not guarantee that the patcher will stop you. The patch may write perfectly valid bytes to perfectly wrong locations.
With IPS, the README and the published CRC32/SHA-1 of the required original ROM are part of the safety system.

BPS: Built-In Verification for Modern ROM Patching
BPS stands for Beat Patch System.
Instead of being only a list of raw writes, a BPS patch describes how to construct the target file using several kinds of operations: copying data from the source, inserting new data, and reusing data that has already been written to the target.
The most important difference for ordinary users is easier to understand:
BPS stores CRC32 checksums for the source file, the resulting target file and the patch itself.
That means a BPS patcher can verify three useful things:
- Is this the original ROM the patch was made for?
- Did the patch reconstruct the expected output?
- Is the patch file itself intact?
If the source ROM is wrong, a proper BPS patcher can reject it instead of silently creating a broken game.
For fan translations, where one Japanese game may have multiple revisions, headers or dumps circulating online, that is a very useful property.
Why BPS is often a good default
For cartridge-based systems, BPS offers a strong balance of compact patches, verification and broad support in modern ROM hacking tools.
It also avoids IPS’s 24-bit offset limitation, making it more comfortable for larger files and projects with substantial ROM expansion.
UPS: XOR-Based Patching with CRC32 Verification
UPS is another patch format created for binary differences between game files.
UPS uses an XOR-based delta representation and stores the input size, output size and three CRC32 values covering the input, output and patch.
Like BPS, this gives the patcher much more information for validation than classic IPS.
The XOR design also means the same difference data can be reversible: software that supports the behavior can use the patch relationship in either direction between the two matching files.
UPS advantages
- CRC32 verification
- Supports files changing size
- XOR-based delta system
- No small 24-bit address ceiling like IPS
Why you may see BPS more often
UPS remains a useful format, but many modern ROM hacking workflows prefer BPS because its source/target copy model can represent repeated data efficiently and its ecosystem became especially popular for cartridge ROM hacks.
xDelta: General-Purpose Binary Deltas for Larger Files
xDelta is different in spirit from the classic ROM-specific formats.
xdelta3 is a general-purpose binary delta tool that encodes differences using the VCDIFF format. It can reconstruct a new file from an old source file and a delta.
Because it is designed for arbitrary binary files and supports large files, xDelta is commonly encountered in projects involving larger game images, disc-based games and other data where the simplicity of IPS is no longer ideal.
Conceptually, the workflow is still familiar:
The underlying format is more sophisticated, however. VCDIFF divides the delta into windows and encodes operations that add or copy data instead of storing only simple offset writes.
Important: xDelta is a family/tool workflow rather than a ROM-only standard. Exact verification behavior can depend on the xdelta version and options used. Modern xdelta3 releases can perform whole-file source and target verification, but you should still publish the expected hash of the original game alongside the patch.

IPS vs BPS vs UPS vs xDelta
| FORMAT | HOW IT WORKS | BUILT-IN VALIDATION | BEST FIT | MAIN CATCH |
|---|---|---|---|---|
| IPS | Offset + replacement data, optional RLE | No source/target checksum | Classic cartridge ROM hacks | Wrong ROM may still be patched; 16 MiB address limit |
| BPS | Source/target copy and insert operations | CRC32 for source, target and patch | Modern cartridge ROM hacks and translations | Requires a BPS-capable patcher |
| UPS | XOR-based binary delta | CRC32 for input, output and patch | ROM patches needing validation and size changes | Less commonly chosen than BPS in many current workflows |
| xDelta | VCDIFF differential encoding | Depends on implementation/options; modern xdelta3 adds strong verification features | Large files and disc images | More complex ecosystem and command-line/tool differences |
Why Does the Correct Original ROM Matter?
Two files can have the same game title and still be different at the byte level.
Common causes include:
- Different game revisions
- Different regions
- Headered vs. unheadered dumps
- Bad dumps
- Previous patches
- ROM hacks already applied
- Different disc-image layouts
If even one structural difference shifts the data the patch expects, an offset-based patch can hit the wrong bytes.
This is why patch releases often specify hashes such as:
- CRC32 — short and convenient for identifying common ROM dumps.
- MD5 — older but still frequently seen in preservation and patching documentation.
- SHA-1 or stronger hashes — useful when you want a more robust file identity.
A hash is effectively a fingerprint for the file.
If the hash of your original ROM does not match the hash listed by the patch author, stop and investigate before patching.
A Real Example: Bakumatsu Kourinden ONI
The completed English translation of Bakumatsu Kourinden ONI is distributed as an IPS patch.
The clean Japanese ROM used by the project has CRC32 1CF3C877. The translation expands the game from 4 MB to 6 MB so there is room for the larger English script, new text system and other translated assets.
That is still comfortably inside IPS’s 16 MiB addressing range.
So why use IPS rather than automatically converting everything to a newer format?
Because patch-format choice is not a competition where the newest format always wins.
- IPS is extremely well supported.
- The project fits within its technical limits.
- The required clean ROM checksum can be documented clearly.
- The output can be verified during the project’s own build and release process.
For this particular release, IPS is simple and sufficient.

What about Super Robot Wars R?
The same release principle applies to Super Robot Wars R on Game Boy Advance: the patch package should identify the exact clean Japanese source expected by the translation and provide enough information for users to verify it before applying anything.
The patch format may differ from project to project, but the rule should not:
One documented source file → one patch → one verified English output.
Which ROM Patch Format Should You Use?
If you are creating a new project, there is no single answer for every console and every game.
| IF YOUR PROJECT… | GOOD STARTING POINT |
|---|---|
| Is a small or medium classic cartridge ROM and compatibility is your priority | IPS can still be perfectly adequate |
| Is a modern cartridge-ROM translation and you want source/target verification | BPS is often an excellent default |
| Already uses a UPS-based toolchain or benefits from its XOR/reversible model | UPS |
| Uses large binary files or disc images | xDelta is often worth considering |
The most important factor is not the filename extension. It is whether the format works reliably with your game’s file size, your build pipeline, your intended audience and your verification strategy.
How Do You Apply a ROM Patch?
The exact program depends on the patch format, but the basic process is almost always the same.
- Read the patch documentation. Confirm the required game region and revision.
- Verify the original file. Compare its CRC32, SHA-1 or other published hash.
- Keep the original file untouched. Patch a copy rather than your only backup.
- Open the patcher. Select the original game and the patch.
- Create the patched output.
- Verify the result if the project publishes an output checksum.
- Test the game. Boot it in your emulator or on your own compatible hardware setup.
Best practice for patch authors: publish both the expected source hash and the expected patched-output hash whenever possible.
This turns a vague instruction like “use a clean ROM” into something users can actually verify.
What About PPF and Other Patch Formats?
IPS, BPS, UPS and xDelta are not the only binary patch formats.
You may also encounter formats such as PPF, especially around optical-disc games, along with project-specific and platform-specific formats.
The important skill is not memorizing every extension. It is learning to check three things:
- What exact source file does the patch expect?
- Can the patcher verify that source?
- Can you verify the final output?
If you know those answers, most patching problems become much easier to diagnose.
Final Thoughts
Patch formats look like a small technical detail, but they sit at the final boundary between a ROM hacking project and the people trying to use it.
IPS is simple and battle-tested. BPS adds strong built-in verification and a more sophisticated delta model. UPS uses a compact XOR-based approach with CRC32 validation. xDelta brings general-purpose differential compression to much larger files.
For players, the lesson is simple:
Do not choose a ROM because the filename looks right. Verify the exact file the patch expects.
For patch authors, the lesson is just as important: make the correct source ROM unambiguous, publish hashes, verify your output, and choose a format that fits the project rather than following fashion.
In the next ROM Hacking article, we will look at the problem from the other side: why translation patches fail because of ROM revisions, headers and checksums—and how to diagnose them.
New to ROM hacking? Start with the first two guides in this series.
▶ What Is ROM Hacking?BEGINNER’S GUIDEHow Fan Translation Works · ONI English patch · Super Robot Wars R English patch



What should I translate next?
Tap ▲ on the games you want in English. The top picks get translated first.
-
1
Super Robot Taisen L NDS
asked by 2 people
-
2
Milandra SNES
asked by 2 people
-
3
Metal Max 2 SNES
asked by 2 people
-
4
Kijin Korinden Oni SNES
asked by 1 person
-
5
SD Gundam Generation F PS1
asked by 1 person
See all 12 →Votes, comments here and requests on YouTube all count. Not on the list? Ask in a comment below.