Whoops, thanks will fix that now.
First, at the end here, you've said the PID starts at 0x1C but that it's only 1 byte long; either it's actually 4 bytes, or it starts at 0x1E
However, I'm really not sure those 4 bytes at 0x1C would be the PID anyway.
Yeah I called it the pid because I didn't have a better name but it definitely isn't the pid. I used the name because it is used to calculate the ability, gender and nature and I think this will affect the pid that is generated at the end of the day because it will need to match these values. I read somewhere that the game literally just keeps trying new values until they match.
All shadow pokemon have random genders. There is even footage of Zook's zangoose having different genders between the 3 times you see it because it's final value isn't set until you battle him yourself.
That's interesting actually. I noticed all the shadow pokemon either had 0x40 or 0x80 in the byte just before what I called the "pid" but couldn't figure out what it meant. I think it makes sense that it randomises the values. That's like how the values in colosseum worked where the high bit randomised the value.
There are two possibilities. The "pid" field is 2 bytes long and the high bit for those 16bits is what randomises that value and the IVs are randomised by default.
However there is no high bit set for the IVs of shadow pokemon so the second possibility is that the 0x40/0x80 byte itself randomises all the fields that need randomising.
Just by the way, I often document fields as being fewer bytes than they actually are because the game never used all the bytes. For example, string ids are all 4 bytes but there aren't any ids longer than 2. I documented them as 2 bytes because when I was editing values by hand it was easier to find the values by eye if I skipped the extra 00s. Also, when I moved to writing programs, I used the smaller sizes to speed up the programs.
My sizes are usually based on convenience rather than accuracy, so if you do have any doubts about the size you're probably right .
In a similar manner, I have barely tested any of my research. It's all based on presumptions. With all the information I have from people hacking other games and my brief spell hacking pokemon colosseum, a lot of it was pretty obvious. I have played what I've got so far of my hack though and everything seems to be working as intended so I know it's mostly accurate.
There are a couple of things I wasn't able to deduce though:
1. I fought the first trainer in the game when I started with 2 starters but it was still a single battle. I haven't looked into it yet but there is something that determines whether a battle is a single battle or not, as opposed to being a result of having 1 pokemon each.
2. I know how to give shadow pokemon to trainers that wouldn't usually have them. However, what happens if you catch/defeat them? Do they automatically go to miror b.? Also what determines which trainers keep their shadow pokemon? (e.g. greevil)
3. If one was to increase the total number of shadow pokemon by adding one to DeckData_DarkPokemon.bin, would miror b.'s final battle adjust to be after you've caught all shadow pokemon in the file or is he hard coded to battle you after you catch exactly 82/83 (I forget the number)