diff options
author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2017-09-10 22:12:47 -0400 |
---|---|---|
committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2017-09-10 22:12:47 -0400 |
commit | 6ceeb199181d64031f4173cfbffa066f5b9796b8 (patch) | |
tree | abda49c65817f58de5c0cb884e8848aae5723dea /gba/source/serialize.c | |
parent | 1d82e3affd42c2336702af4a644baa8eec249ead (diff) | |
download | gen3uploader-6ceeb199181d64031f4173cfbffa066f5b9796b8.tar.gz gen3uploader-6ceeb199181d64031f4173cfbffa066f5b9796b8.tar.bz2 gen3uploader-6ceeb199181d64031f4173cfbffa066f5b9796b8.zip |
Added identifying hash to Pokémon data structure
The purpose of this hash is described in detail in pokemon.h. The hash is computed using an implementation of SHA-224. To allow the GBA sufficient time to compute this hash, a delay of 5 milliseconds was introduced on the GC side before reading a Pokémon.
Diffstat (limited to 'gba/source/serialize.c')
-rw-r--r-- | gba/source/serialize.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/gba/source/serialize.c b/gba/source/serialize.c index c5e8570..ddd3ef2 100644 --- a/gba/source/serialize.c +++ b/gba/source/serialize.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include "basestats.h" | 10 | #include "basestats.h" |
11 | #include "exptables.h" | 11 | #include "exptables.h" |
12 | #include "dexorder.h" | 12 | #include "dexorder.h" |
13 | #include "sha2.h" | ||
13 | 14 | ||
14 | u32 CalculateStat( | 15 | u32 CalculateStat( |
15 | u8 base, | 16 | u8 base, |
@@ -51,6 +52,16 @@ void PokemonIntermediateInit( | |||
51 | struct PokemonSubstruct2* sub2 = GetBoxPokemonSubstruct2(bpkm); | 52 | struct PokemonSubstruct2* sub2 = GetBoxPokemonSubstruct2(bpkm); |
52 | struct PokemonSubstruct3* sub3 = GetBoxPokemonSubstruct3(bpkm); | 53 | struct PokemonSubstruct3* sub3 = GetBoxPokemonSubstruct3(bpkm); |
53 | 54 | ||
55 | u32 identifier[3]; | ||
56 | identifier[0] = bpkm->otId; // original trainer | ||
57 | identifier[1] = bpkm->personality; // personality value | ||
58 | identifier[2] = ((const u32*)sub3)[1]; // IVs (plus two non-random bits) | ||
59 | |||
60 | sha224( | ||
61 | (const unsigned char*)identifier, | ||
62 | 12, | ||
63 | (unsigned char*)pki->key); | ||
64 | |||
54 | const struct SmallBaseStats* baseStats = BaseStatsForSpecies(sub0->species); | 65 | const struct SmallBaseStats* baseStats = BaseStatsForSpecies(sub0->species); |
55 | 66 | ||
56 | for (int i=0; i<POKEMON_NAME_LENGTH; i++) | 67 | for (int i=0; i<POKEMON_NAME_LENGTH; i++) |
@@ -63,7 +74,7 @@ void PokemonIntermediateInit( | |||
63 | pki->otName[i] = bpkm->otName[i]; | 74 | pki->otName[i] = bpkm->otName[i]; |
64 | } | 75 | } |
65 | 76 | ||
66 | pki->otId = bpkm->otId; | 77 | pki->otId = bpkm->otId & 0x0000FFFF; |
67 | pki->otGender = sub3->otGender; | 78 | pki->otGender = sub3->otGender; |
68 | pki->species = gSpeciesToNationalPokedexNum[sub0->species - 1]; | 79 | pki->species = gSpeciesToNationalPokedexNum[sub0->species - 1]; |
69 | pki->heldItem = sub0->heldItem; | 80 | pki->heldItem = sub0->heldItem; |