Jump to content

Pokemon D/P : Adding new Pokemon species

Recommended Posts

Hey it's TheEbonyRaven09,

I've recently discovered how to add new Pokemon species to Pokemon Diamond. Thought I'd give you guys a tutorial as I haven't discovered any posts regarding the subject.

Tools Used :

- Nitro Explorer by Treeki

- NARCTool python scripts by CodenamePU (Github)

- Hex Editor (HxD)

This tutorial assumes you've legally bought a copy of Pokemon Diamond or Pearl and dumped the files to a ROM yourself.


Step 1 : Extracting files

To start open up your Pokemon Diamond ROM in Nitro Explorer 2 and extract the following files :

- /application/zukanlist/zkndata/zukan_data.narc

- /poketool/personal/personal.narc

- /poketool/personal/pms.narc

Your folder should look something like this :


Copy and paste NARCTool.py and NARC.py into your working folder. Note: In order to run the commands you need Python.

Next open command prompt and use NARCTool's extract command on both personal.narc and zukan_data.narc

Something like this : "NARCTool.py extract personal.narc personal" and "NARCTool.py extract zukan_data.narc  zukan". When asked to decompress enter no.

Your folder should look like this now :


Now we can get to the editing...


Step 2 : Editing Data ( zukan_data.narc )

To start we'll edit the zukan_data. Open the zukan folder and you'll see a list of about 58 .bin files labeled 0-57. We only need to worry about files 11 and 12.

This data is used to register pokedex entries. File 11 is the national dex ids, while file 12 is the regional dex ids. The last id used in Pokemon Diamond is 493. Your new Pokemon's id must be past this value.

Open file 11 and scroll to the bottom. You'll see the last value is ED 01, which if reversed is hex for 01 ED or 493 in decimal. Convert your new Pokemon id to hex (I recommend 501 or 502 to start). In my case 501 and 502 are 1F5 and 1F6 respectively. Then reverse the order of the bytes and insert those bytes after ED 01. You should have something similar :


Do the same for file 12.


Make sure to save. Your're done editing zukan_data.


Step 3 : Editing Data ( personal.narc )

Next we'll be editing in personal.narc. Open the personal folder and you'll see 501 .bin files labeled 0-500. Those files represent each Pokemon species. Before you begin, check out this link that documents the structure of those files


Starting out, make a copy of file 500. The number of files in your folder should equal [your chosen id]+1. This means that if your new id is 502 you'd have 503 files altogether. Keep in mind that you may need to duplicate files multiple times to equal your id. 


Also if you want to edit the Pokemon species stats, abilities, etc. consult the link. That's the order of the bytes and the respected values.

But in this case, we'll skip that. Almost finished...


Step 4 : Final edits (pms.narc)

Open pms.narc in a hex editor and add your new id in hex after F4 01. Your file should look something like this :


Now that's the editing done. :)


Step 5 : Recompile and Insert

Now that the editing's done its time to recompile the data.

Use NARCTool's compile command to recreate the personal.narc and zukan_data.narc files.

These are the commands : "NARCTool.py compile ./zukan zukan" and "NARCTool.py compile ./personal personal."

This will create a zukan.narc and personal.narc file in the respective folders.

Now open the ROM in Nitro Explorer 2 and use the reinsert command to override the original zukan.narc, personal.narc, and pms.narc files with the new edited files.


Step 6 : Testing it out

Alright now here come's the most rewarding part : actually testing it out. With my edited ROM opened in an emulator and this Action Replay code enabled in Cheats...

94000130 FFFB0000
D5000000 00000XXX
B21C4D28 00000000
B0000004 00000000
C0000000 0000000B
D7000000 00024620
DC000000 00000006
D2000000 00000000

Note : Replace XXX with your new Pokemon's hexadecimal id. (1F5 = 501, and so on)

Hold down your Select button, and walk into some tall grass. DISCLAIMER it may freeze from time to time so you may need to reload.

If everything was done successfully, you should encounter a glitched Pokemon with no name or sprite. This Pokemon can be captured through normal methods and when you open it's data in the party it should have the Pokedex id you created.


If people like this tutorial, I'll probably post a part 2 to show how to edit sprites and abilities. Let me know in the comments if you like this.

And just a final disclaimer. I do not condone illegal pokemon/rom hacking. Please use this knowledge for personal/educational use. Don't go online with these Pokemon, as you'll likely get caught. I shared this knowledge knowing these risks, and hope this exceptional community will get some use out of this post.


  • Like 1
Link to comment
Share on other sites

Hey its TheEbonyRaven09 again,

I've decided to post a part 2 to my "Adding Pokemon Species" tutorial. This time we'll give our newly registered Pokemon a sprite.

Tools Used :

- Nitro Explorer by Treeki

- NARCTool python scripts by CodenamePU (Github)

- GenIV Sprite Editor by loadingNOW and SCV


Part 1 : Extracting data

Open your EDITED Pokemon ROM from part 1 in Nitro Explorer 2. Extract the following file to your working directory :

- /poketool/pokegra/pokegra.narc

Then use NARCTool.py to extract pokegra.narc. Ex: "NARCTool.py extract pokegra.narc pokegra" If asked to decompress say no.

Your directory should look like this now :



Part 2 : Getting sprites to work

Before the actual editing we must create several files in order for the sprites to work properly. Note this will be tedious but bear with me.

Open the pokegra folder, and you'll see a lot of .NCGR and .NCLR files. Why so many files you may ask? Well each Pokemon id has 6 files associated with it's sprite data.

Now open a calculator and multiply the id created in part 1 by 6. That's where the sprite data starts for your Pokemon. (Ex: if your id is 501, its sprite data starts at file 3,006.)

Now for the tedious part. Copy the last 6 files of the folder until you have an amount of files equal to (your id)*6+6. (Ex: 501*6+6 is 3,012. Your folder should have 3,012 files.)

Once that's done you can actually move on to editing. I highly recommend a batch renamer as the files have to be in numerical order.

Finally, use the following command : "NARCTool.py compile ./pokegra pokegra" to compile the edited .narc file.


Part 3 : Editing Sprites

Open your edited pokegra narc in the GenIV sprite editor. Make sure the Diamond/Pearl checkbox is ticked.

Once everything opens up your interface should look something like so :


Navigate down to the files you created. This example is using id 501 so I'd navigate to file 3,006. You may get an "Index Out of Bounds Error". If you do, this means the files you created are in an incorrect order. (Make sure they're all in the index of 6. "3,006 <-> 3,012, etc."

Now import your sprites accordingly. Back sprites come first followed by the front sprites. Press NO when asked to change pallete, and if prompted again THEN press YES. Seems to be some sort of glitch that happens with the software.

If everything is done correctly, your sprite should load the correct colors. This is my example of using a custom sprite.


Hit Ctr+W or File -> Write to narc to save your edits. Your done editing.


Part 4 : Finishing up and testing

Now reinsert your edited pokegra file with Nitro Explorer 2 and load your edited ROM file in an emulator.

With everything completed the image you imported with GenIV sprite tool should now be a custom Pokemon sprite associated with your new Pokemon. It should work both in battle and in the Pokemon party.


That's all for now, hope you enjoyed Part 2 and best of luck. :)


Edited by TheEbonyRaven09
Link to comment
Share on other sites

  • 1 year later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Create New...