Since there was no such guide yet, I decided to make one.
This covers all of the ROMs out until now
What you need:
- The distro ROM (illegal to ask, Google is your friend)
- The pcd file(s) of the WonderCard(s) you want to inject
- An Hex Editor (I use UltraEdit on Windows)
- dslazy
General steps:
1) Open the ROM with dslazy and unpack it.
2) In the dslazy folder you will now have a NDS_UNPACK folder
3) Do the necessary modifications with the Hex Editor to arm9.bin and the files in /data (find the specific ROM instructions below)
- The "GGID" is a 4 bytes value that determines the region of the carts that can communicate with the distro ROM.
- The date limit (based on your DS's internal date) determines when the distribution is available
- The WonderCard contains a "mystery gift" for the receiving cartridge. You can edit it with Pokemon Mystery Gift Editor or Pokesav.
4) Repack the ROM and enjoy!
Deoxys/Dragonite American distro ROMs:
These are the easiest to "hack".
- WonderCard file: data\data.bin.
- The GGID is in data\ggid.dat.
- The date limit is in data\limit.bin. The first 4 bytes represent the starting date (YY00MMDD) in hex format (you can just replace them with 00000000), the remaining 4 are the ending date (replace them with FFFFFFFF).
- Unused files: data\decchi.bin, data\debug.lz
Shaymin European distro ROM:
This one actually contains 5 WonderCards and 5 GGIDs, one for each language. A different GGID and WonderCard will be used depending on your DS's language.
- WonderCard files: data\en.bin, it.bin, fr.bin, sp.bin, ge.bin
- arm9.bin contains both the date limit (in hex format) and the 5 GGIDs, here are the offsets:
So, it's impossible to achieve an "unlimited" distribution, you can make it last a year maximum.
- Unused files: data\decchi.bin, data\debug.lz, data\data.bin, data\limit.bin, data\ggid.dat
Pichu+Jirachi American dual distro ROM:
The ROM contains two different WonderCards (it chooses between them depending on the DS date), and obviously only handles one GGID.
- WonderCard files: data\p1.bin, p2.bin
- arm9.bin contains both the date limit (in hex format) and the GGID, here are the offsets:
It's impossible to achieve an "unlimited" distribution for this one too, you can make it last two years (one for each WonderCard) maximum.
- Unused files: data\decchi.bin, data\debug.lz, data\data.bin, data\limit.bin
Arceus European distro ROM:
5 WonderCards and 5 GGIDs in this ROM too, one for each language. A different GGID and WonderCard will be used depending on your DS's language.
- WonderCard files: data\en.bin, it.bin, fr.bin, sp.bin, ge.bin
- arm9.bin contains just the 5 GGIDs, here are the offsets:
- The date limit is in data\limit.bin (again?
). The first 4 bytes represent the starting date (YY00MMDD) in hex format (you can just replace them with 00000000), the remaining 4 are the ending date (replace them with FFFFFFFF).
- Unused files: data\decchi.bin, data\debug.lz, data\growtbl.narc, data\personal.narc, data\waza_tbl.narc, data\wotbl.narc, data\ggid.dat
Editing the WonderCard files:
- Open both the WonderCard ROM file that needs to be edited and the .pcd file.
- Copy the 80 bytes 0x104 - 0x153 in the .pcd to 0x0 - 0x4F in the ROM file:
to
- Copy the WHOLE .pcd to the remaining part of the ROM file (from 0x50 onwards):
- Finally, fill the last 8 bytes of the ROM file with zeros:
GGID list:
Here are the GGIDs for all the client cartridges.
Note: how to convert from decimal to hex (for dates).
If you didn't know, you can do this easily with the Windows/OSX calculator. Just set the "scientific" (programmer in OSX) view, write something in decimal and click on "Hex", and it will output the date in hex
Huge thanks to:
- Chamillionaire for finding half of the GGIDs and for writing the original guide for the first distro ROM;
- Kyohack for his independent research on the Arceus ROM, and for his automatic distro ROM editor.
This covers all of the ROMs out until now
What you need:
- The distro ROM (illegal to ask, Google is your friend)
- The pcd file(s) of the WonderCard(s) you want to inject
- An Hex Editor (I use UltraEdit on Windows)
- dslazy
General steps:
1) Open the ROM with dslazy and unpack it.
2) In the dslazy folder you will now have a NDS_UNPACK folder
3) Do the necessary modifications with the Hex Editor to arm9.bin and the files in /data (find the specific ROM instructions below)
- The "GGID" is a 4 bytes value that determines the region of the carts that can communicate with the distro ROM.
- The date limit (based on your DS's internal date) determines when the distribution is available
- The WonderCard contains a "mystery gift" for the receiving cartridge. You can edit it with Pokemon Mystery Gift Editor or Pokesav.
4) Repack the ROM and enjoy!
Deoxys/Dragonite American distro ROMs:
These are the easiest to "hack".
- WonderCard file: data\data.bin.
- The GGID is in data\ggid.dat.
- The date limit is in data\limit.bin. The first 4 bytes represent the starting date (YY00MMDD) in hex format (you can just replace them with 00000000), the remaining 4 are the ending date (replace them with FFFFFFFF).
- Unused files: data\decchi.bin, data\debug.lz
Shaymin European distro ROM:
This one actually contains 5 WonderCards and 5 GGIDs, one for each language. A different GGID and WonderCard will be used depending on your DS's language.
- WonderCard files: data\en.bin, it.bin, fr.bin, sp.bin, ge.bin
- arm9.bin contains both the date limit (in hex format) and the 5 GGIDs, here are the offsets:
Code:
0xCAC - Year (2009)
0xCB4 - Starting month (March)
0xCC0 - Starting day (24)
0xCCC - Ending month (June)
0xCD8 - Ending day (25)
0xD94 - English GGID
0xD70 - French GGID
0xD7C - German GGID
0xD84 - Italian GGID
0xD8C - Spanish GGID
- Unused files: data\decchi.bin, data\debug.lz, data\data.bin, data\limit.bin, data\ggid.dat
Pichu+Jirachi American dual distro ROM:
The ROM contains two different WonderCards (it chooses between them depending on the DS date), and obviously only handles one GGID.
- WonderCard files: data\p1.bin, p2.bin
- arm9.bin contains both the date limit (in hex format) and the GGID, here are the offsets:
Code:
0xC18 - (English) GGID
1st WonderCard (p1.bin):
0x14E4 - Year (2010)
0x14EC - Starting month (January)
0x14F4 - Starting day (23)
0x1500 - Ending month (February)
0x1508 - Ending day (15)
2nd WonderCard (p2.bin):
0x152C - Year (2010)
0x1534 - Starting month (February)
0x150C - Starting day (20)
0x1548 - Ending month (March)
0x1550 - Ending day (14)
- Unused files: data\decchi.bin, data\debug.lz, data\data.bin, data\limit.bin
Arceus European distro ROM:
5 WonderCards and 5 GGIDs in this ROM too, one for each language. A different GGID and WonderCard will be used depending on your DS's language.
- WonderCard files: data\en.bin, it.bin, fr.bin, sp.bin, ge.bin
- arm9.bin contains just the 5 GGIDs, here are the offsets:
Code:
0xD1C - French GGID
0xD28 - German GGID
0xD30 - Italian GGID
0xD38 - Spanish GGID
0xD40 - English GGID
- Unused files: data\decchi.bin, data\debug.lz, data\growtbl.narc, data\personal.narc, data\waza_tbl.narc, data\wotbl.narc, data\ggid.dat
Editing the WonderCard files:
- Open both the WonderCard ROM file that needs to be edited and the .pcd file.
- Copy the 80 bytes 0x104 - 0x153 in the .pcd to 0x0 - 0x4F in the ROM file:
GGID list:
Here are the GGIDs for all the client cartridges.
Code:
English: 18 03 40 00
French: CD 00 80 00
German: CE 00 80 00
Italian: CF 00 80 00
Spanish: D0 00 80 00
Japanese: 45 03 00 00
Korean: 18 00 C0 00
Note: how to convert from decimal to hex (for dates).
If you didn't know, you can do this easily with the Windows/OSX calculator. Just set the "scientific" (programmer in OSX) view, write something in decimal and click on "Hex", and it will output the date in hex
Huge thanks to:
- Chamillionaire for finding half of the GGIDs and for writing the original guide for the first distro ROM;
- Kyohack for his independent research on the Arceus ROM, and for his automatic distro ROM editor.