How to create a ROM patch
To create a ROM patch, supply the original unmodified ROM and your edited copy, choose an output format such as BPS or IPS, and the tool compares them and produces a patch file. Distributing that patch is how romhacks are shared, because the patch contains only your changes and none of the original game.
Why distribute a patch instead of a ROM
A patch describes the difference between two files. It contains your changes, not the copyrighted game. That is why romhacks are shared as patches: users bring their own legally dumped ROM, apply your patch, and end up with your hack without anyone distributing the original game.
It also means your patch is tiny. A translation that rewrites every line of dialogue in a SNES game is usually a few hundred kilobytes as a BPS patch.
Which format should you choose?
| Format | Choose it when |
|---|---|
| BPS | Default choice. Verifies the source ROM, handles size changes, smallest patches. |
| IPS | A community or tool specifically expects IPS, and your ROM is under 16 MB. |
| UPS | You are matching an existing project that already uses UPS. |
| PPF | You are patching a CD or DVD disc image rather than a cartridge ROM. |
| APS | You are working on an N64 project that expects APS. |
| RUP | You need one patch file to cover several ROM files. |
| EBP | You are releasing an EarthBound hack built with CoilSnake. |
What to publish alongside your patch
- The CRC32 or MD5 of the base ROM your patch expects. This is the single most useful thing you can give users. Get it from the checksum tool.
- Whether the base ROM should be headered or unheadered, for SNES and NES projects.
- The exact region and revision of the base ROM, for example "USA 1.0" rather than just "USA".
- A readme with the patch version and what changed.
Frequently asked questions
Is it legal to share a ROM patch?
Sharing a patch is generally treated very differently from sharing a ROM, because the patch contains only your own changes rather than the copyrighted game. This is why the romhacking scene distributes patches. It is not legal advice, and specifics vary by jurisdiction.
Which format makes the smallest patch?
BPS in almost every case, because it can express moved and copied data as instructions instead of raw bytes. For a hack that expands a ROM, a BPS patch can be a thousand times smaller than the equivalent IPS.
Can I create an xdelta patch here?
No. This tool creates IPS, BPS, UPS, APS, RUP, PPF and EBP patches. Creating xdelta requires the xdelta3 command line tool. BPS is a good substitute for most projects.
Does the patch contain any of the original game?
A patch encodes differences, and for formats like BPS it stores copy instructions pointing into the source ROM rather than the ROM’s bytes. Regions you changed do appear as literal data, since those bytes are your own work.