-
Notifications
You must be signed in to change notification settings - Fork 53
Creating New NES Patches
For NES, it is preferable to have an .ips patch that will work with any header. There are countless ways to do this, but we will do it a specific way here. Everything you'll need to make a "proper" patch and get the info for the readme files:
- A patched ROM
- An unpatched ROM, preferably a current No Intro base.
- A hex editor, such as HxD.
- Floating IPS/FLIPS
- GameHeader
For the example, we are going to make a patch for the English translation of Digital Devil Story: Megami Tensei
.
First, we need to open the No Intro base with GameHeader to get the following information:
File: Digital Devil Story - Megami Tensei (Japan).nes
BitSize: 2 Mbit
Size (Bytes): 262160
CRC32: 682C4603
MD5: 99FBA6D02D110914C09A16E13F488CB5
Headerless MD5: D99BDC0B1E6D146D593E933F74BBE4D3
Note that the Headerless MD5 is what the RA Hash will be. Copy this information and paste it into a readme.txt file, which should look like this when opened:
Use with:
(No Intro)
File: Digital Devil Story - Megami Tensei (Japan).nes
BitSize: 2 Mbit
Size (Bytes): 262160
CRC32: 682C4603
MD5: 99FBA6D02D110914C09A16E13F488CB5
Headerless MD5: D99BDC0B1E6D146D593E933F74BBE4D3
Next, open the English-patched ROM with HxD. Ensure none of the first 16 bytes are FF
. In the copy used for this example, these are the first 16 bytes of the English-patched ROM:
4E 45 53 1A 10 10 C1 40 00 00 00 00 00 00 00 00
If for some strange reason one of the first 16 bytes are FF
, then replace it with FE
and save. For this example, we're good. So now we open the No Intro base in HxD. Replace all of the first 16 bytes with FF
.
4E 45 53 1A 08 10 C1 48 00 00 00 00 00 00 00 01
becomes
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Save the changes as a new file (unless you used a duplicate).
Now it's time to actually make the patch.
- Open FLIPS.
- Click "Create Patch"
- For
Select ORIGINAL UNMODIFIED FILE to Use
, select the file where you replaced the header, in this example it wasDigital Devil Story - Megami Tensei (Japan).nes
. - For
Select NEW MODIFIED File to Use
, select the English-patched ROM, in this example it wasDigital Devil Story - Megami Tensei (English v1.0).nes
. - For
Select File to Save As
, typeDigital Devil Story - Megami Tensei (Japan) (En) (v1.0) (Stardust Crusaders)
and make sure to selectIPS Patch File (*.ips)
underSave as type:
. - You will now have
Digital Devil Story - Megami Tensei (Japan) (En) (v1.0) (Stardust Crustaders).ips
.
To test it, simply delete the patched ROM, then apply the patch to the No Intro base (NOT the modified No intro base). You will now have Digital Devil Story - Megami Tensei (Japan) (En) (v1.0) (Stardust Crustaders).nes
Open this newly patched ROM with GameHeader. The full output is shown below:
----| File Data |--------------------------------------------------
System: Nintendo - Nintendo Entertainment System
Path: Desktop
Archive:
File: Digital Devil Story - Megami Tensei (English v1.0).nes
BitSize: 3 Mbit
Size (Bytes): 393232
CRC32: AC5ACC89
MD5: 70E6725348FE617905D65059FB526EF1
SHA1: 0C4FF5EB16A0826A92B6196EE67D8AEA2CB7572B
SHA256: 3726E8B71885326FF46331A2FDB4355330EA4C3A229EC379119F3DB18D1B134D
----| iNES Header Data |-------------------------------------------
Num ROM Banks: 0x10 (256 KBytes)
Num VROM Banks: 0x10 (128 KBytes)
Mirroring: 1 (Vertical)
Save RAM: 0 (No)
Trainer: 0 (No)
4-Screen VRAM: 0 (No)
VS-System Cartridge:0 (No)
ROM Mapper: 76 (Unknown)
Num RAM Banks: 0x00 (None or 8 KBytes)
Display: 0 (NTSC)
----| NES Header Data |--------------------------------------------
Title: MN8_\_84_???
PRG-ROM Checksum: 0xFFFF (Bad; 0xE0AD)
CHR-VROM Checksum: 0xFFFF (Bad; 0xBEBE)
PRG Size: 0x15 (33554432 KBytes)
CHR Size: 0x15 (16777216 KBytes)
Mirroring: 0x15 (Horizontal)
Board Type: 0x15
Unknown 1: 0xFFFFFFFF
Maker Code: 0xFF (Unknown)
Unknown 2: 0xFF
Vectors: 0x82C000C082C0
----| Headerless Data |--------------------------------------------
Size (Bytes): 393216
CRC32: A7B0717E
MD5: 9070A50282DF3937A9B90358DC97AA31
SHA1: 819CD03A28B422375829B71AE24FF655F22D4420
SHA256: 538CB152C7794684F9F7787BF4C563ED000E4FA9F6BA212323B177EAB9780038
-------------------------------------------------------------------
The most important number here is the MD5
under the Headerless Data
section, which shows 9070A50282DF3937A9B90358DC97AA31
.
Now, let's compare that to the RA Hash on the game's Linked Hashes page.
What do we see under Digital Devil Story - Megami Tensei (En) (Stardust Crusaders) (1.0).nes
?
9070a50282df3937a9b90358dc97aa31
! 🥳
This may seem like a lot of work, but it goes by pretty quick once you've done it a few hundred times.