Jump to content

Recommended Posts

Posted

Disclaimer
This guide would require some way of playing edited ROMs (such as a flash cart, NDS emulator etc). This guide assumes you already know how to dump your own ROM legally, and how to play the edited ROMs. As such, this guide will not entertain such questions, as it is not the point of this guide. This method works for any language'd variant of Diamond, Pearl, Platinum, HeartGold, SoulSilver, Black, White, Black 2, and White 2.

Note: the shinies obtained via this guide will only appear shiny. When the save is viewed in PKHeX, and when shiny Pokémon (resultant of this modification) is transferred forward, chances are they will not be shiny. Additionally, this guide will not give you 100% shiny encounters.
However, the shiny odds for these fake/temporary shinies are still higher than base rate, and may interest people that do not intend to transfer forward nor trade to vanilla games.
 

Anyhow, we will not be providing any arm9.bin or modified ROMs, as linking to or providing data files extracted from ROMs are against our forum's rules.
However do not fear, as the steps regarding how to extract the arm9.bin from your own dump and then re-injecting them, are included in this guide.
 

The 3 easy steps:
1. Extracting the decompressed version of the arm9.bin
2. Performing the edit
3. Injecting the edited arm9.bin back into your game

 

Extracting the decompressed version of the arm9.bin

Spoiler

1. Install CrystalTile2 onto your computer
image.png

2. Make a copy of the game you intend to edit, name it <game name> - shiny test.nds
Besides being named in a way that would provide clarity, it is also very important that you're viewing the copy, not your main dump.
image.png
 

3. Launch CrystalTile2.
Certain text might appear illegible, and certain UI parts may appear blank. That is fine. What is important is that the program launches, and you can see the text of the main UI itself.
image.png
 

4. Go to File > Open and select the game you intend to edit.
image.pngimage.png
image.png


5. Go to Tools > NDS File System
image.png
image.png

6. Select arm9.bin, then right click on it and select Extract(U)...
image.png

Note: If the Extract (U)... option does not exist, use Export instead.
It's important to opt for Extract (U)... when it exists.

(If I'm not mistaken, the Extract (U)... option appears for games HGSS BW B2W2)
 

7. Name it appropriately. Then click on save to extract it properly.
image.png
 

8. Leave CrystalTile2 with the ROM loaded open. Not necessary to close it.
Also keep the NDS File System tab open.

You now have a properly decompressed extracted arm9.bin

 

Performing the edit

Spoiler

1. Download a Hex Editor. I'll be using the program HxD

2. Open the extracted arm9.bin in the Hex Editor.
image.png
(this image is an example of it being open in HxD)

3. Go to the Find/Search tool. In HxD, it can be found at Search > Find.
image.png

 

4. In the Find/Search page, look for this string, in Hex Values/Bytes
The Hex value String:
08 28 01 D2 01
(Tested on ENG games)
image.png

Note:
If you're editing JPN DP, the search term is instead 08 2D 01 D2 01.

If you're editing KOR HGSS, the search term is instead 08 28 01 D2.
(also consider using 08 28 01 D2 as the search term if you're editing any other language'd game, beyond what I mentioned. I've not tested the other languages past ENG/JPN/KOR, but theoretically if should be possible.)

5. Once found, the entry will be highlighted.
image.png

If you don't find it, you probably did something wrong. Reread this guide, redo all the steps.

6. Replace the 08 of the lead of the searched term with FF
image.png -> image.png
 

7. Now save the progress into the arm9.bin. From this point onwards, this file will be referred to as the edited arm9.bin.
image.png



Injecting the edited arm9.bin  back into your game

Spoiler

1. Interact with the CrystalTile2 window that you left open.
(If you closed it, Open the program, load the ROM, go to NDS File System)

2. Select arm9.bin in the tab, then right click on it, and select Import.
image.png
 

edit: if you have to use “Extract” in the earlier part of the tutorial, use “Compression” instead of “Import”.
 

Make sure you select the edited arm9.bin for this step.
image.png
 

4. When importing the edited arm9.bin, you may get a prompt mentioning "File size too small", as well as a recommended location.
There is no need to cancel. There is no need to enter a new location. Just use the location they recommended, then hit OK.
image.png

Note: this prompt only appears if you had to use Extract (U)... earlier.
 

5. Now just close CrystalTile2. You'll receive a prompt like this:
image.png

Select Yes.
(The changes were already written to the file, so no harm in closing it without saving. Plus the saving option isn't really there anyway)

Additionally, this prompt may show up twice.
It is fine to click Yes both times.

 

Extra: Testing whether the modification works

Spoiler

This is not a step that is really needed, but good for people who are unsure they actually managed the edits right.

Basically, all you gotta do is edit your save file to contain this mon:
PSV 0426 Gengar (with TSV 0427)
 

This Gengar will be regular non-shiny in PKHeX, but will appear shiny if the game was edited correctly.
image.pngimage.png

If so, congratulations, you've edited your save to have a higher chance of encountering fake shinies!



FAQs and Explanations:

Spoiler

Why these shinies are fake; why are they only shiny in appearance?

For the record, this method doesn't make your Pokémon truly shiny. This method basically edits the xor threshold for them to *appear* shiny.

image.png
(Image is a snapshot of Bulbapedia's text)

Focus on the 8/65535 part. Now, recall that you've modified an 08. That's what you changed.
So by changing the value away from 8, you're merely increasing the range of Pokémon that would appear shiny in your game (even if they weren't)

So with that same PID, if the mon was transferred/traded away to other unmodified games, they'll continue to be non-shiny.


Hence why the Gengar that is in the spoiler above appears non-shiny in PKHeX, but shiny in an edited game



Why does this method not give 100% shiny encounters?
As mentioned above, the xor threshold is 8/65535.

The value you edited is a byte, which the maximum is 0xFF (which is also what you edited).
0xFF -> 255
Which means 255/65535 = ~0.39%

Thus, without significant editing of the ROM's structure, you probably can't bring the value higher than that.
The edits we did adhere to the ROM and arm9 structure.


This method does not change any in-game generation of stats (such as PID IVs etc). To reiterate, all it changes it whether a mon is seen as shiny in the game, based on the PID. (also referred to as the shiny xor threshold)


I'm not very technically capable. Is there an easier way to perform these edits?
This guide is as simplified as possible. Just read through the steps, look at the images, and go through the process very slowly.
If you're still struggling, then I'm sorry to say, no. I do not know of an easier way to perform these edits.



Is there a method for "non-fake" shinies and/or 100% shiny encounters?
As far as I know, no such method exists.


Sources (that I remember):
Bond697's original work to increase the shiny xor threshold on Pokemon Black 2
Me expanding on Bond697's work to find a working offset for Black/White
My explanation for why the shiny is fake/temporary
Bulbapedia's page on Shiny Pokémon


View full tutorial

  • 1 month later...
Posted

Just a reminder, downloading ROMs off the internet is piracy and against our rules.

For legal reasons I cannot comply with your request.

(Context: a guest posted a message here, and they are clearly pirating the game)

 

Edit: being rude isn't gonna get you into our good graces. Congrats that you got it working, but it's not that hard a thing to begin with tho 😜

Guest
This topic is now closed to further replies.
×
×
  • Create New...