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
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.
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.
4. Go to File > Open and select the game you intend to edit.
5. Go to Tools > NDS File System
6. Select arm9.bin, then right click on it and select Extract(U)...
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.
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.
(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.
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)
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 using08 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.
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 ->
7. Now save the progress into the arm9.bin. From this point onwards, this file will be referred to as the edited arm9.bin.
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.
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.
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.
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:
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.
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 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