diff options
Diffstat (limited to 'gba/source')
| -rw-r--r-- | gba/source/serialize.c | 31 | 
1 files changed, 26 insertions, 5 deletions
| diff --git a/gba/source/serialize.c b/gba/source/serialize.c index f5446ef..ddb156c 100644 --- a/gba/source/serialize.c +++ b/gba/source/serialize.c | |||
| @@ -12,6 +12,20 @@ | |||
| 12 | #include "dexorder.h" | 12 | #include "dexorder.h" | 
| 13 | #include "sha2.h" | 13 | #include "sha2.h" | 
| 14 | 14 | ||
| 15 | // See pokemon.h for more information about this. | ||
| 16 | struct HashDeterminer { | ||
| 17 | u32 otId; | ||
| 18 | u32 personality; | ||
| 19 | u32 hpIV:5; | ||
| 20 | u32 attackIV:5; | ||
| 21 | u32 defenseIV:5; | ||
| 22 | u32 speedIV:5; | ||
| 23 | u32 spAttackIV:5; | ||
| 24 | u32 spDefenseIV:5; | ||
| 25 | u32 isShedinja:1; | ||
| 26 | u32 zero:1; | ||
| 27 | }; | ||
| 28 | |||
| 15 | u32 CalculateStat( | 29 | u32 CalculateStat( | 
| 16 | u8 base, | 30 | u8 base, | 
| 17 | u32 iv, | 31 | u32 iv, | 
| @@ -50,13 +64,20 @@ void PokemonIntermediateInit( | |||
| 50 | struct PokemonSubstruct2* sub2 = GetBoxPokemonSubstruct2(bpkm); | 64 | struct PokemonSubstruct2* sub2 = GetBoxPokemonSubstruct2(bpkm); | 
| 51 | struct PokemonSubstruct3* sub3 = GetBoxPokemonSubstruct3(bpkm); | 65 | struct PokemonSubstruct3* sub3 = GetBoxPokemonSubstruct3(bpkm); | 
| 52 | 66 | ||
| 53 | u32 identifier[3]; | 67 | struct HashDeterminer identifier; | 
| 54 | identifier[0] = bpkm->otId; // original trainer | 68 | identifier.otId = bpkm->otId; | 
| 55 | identifier[1] = bpkm->personality; // personality value | 69 | identifier.personality = bpkm->personality; | 
| 56 | identifier[2] = ((const u32*)sub3)[1]; // IVs (plus two non-random bits) | 70 | identifier.hpIV = sub3->hpIV; | 
| 71 | identifier.attackIV = sub3->attackIV; | ||
| 72 | identifier.defenseIV = sub3->defenseIV; | ||
| 73 | identifier.speedIV = sub3->speedIV; | ||
| 74 | identifier.spAttackIV = sub3->spAttackIV; | ||
| 75 | identifier.spDefenseIV = sub3->spDefenseIV; | ||
| 76 | identifier.isShedinja = (sub0->species == SHEDINJA_SPECIES_INDEX) ? 1 : 0; | ||
| 77 | identifier.zero = 0; | ||
| 57 | 78 | ||
| 58 | sha224( | 79 | sha224( | 
| 59 | (const unsigned char*)identifier, | 80 | (const unsigned char*)&identifier, | 
| 60 | 12, | 81 | 12, | 
| 61 | (unsigned char*)pki->key); | 82 | (unsigned char*)pki->key); | 
| 62 | 83 | ||
