diff options
author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2017-09-24 19:54:16 -0400 |
---|---|---|
committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2017-09-24 19:54:16 -0400 |
commit | 8d9df7cc26ef86c7af1d4aa6fd4633667bb3a743 (patch) | |
tree | 361e0f09222e6254b45c9f4003a76ff4b4cc944b /include | |
parent | 433df9a40045288ab70ab4f317bdd5e4e53ecb1b (diff) | |
download | gen3uploader-8d9df7cc26ef86c7af1d4aa6fd4633667bb3a743.tar.gz gen3uploader-8d9df7cc26ef86c7af1d4aa6fd4633667bb3a743.tar.bz2 gen3uploader-8d9df7cc26ef86c7af1d4aa6fd4633667bb3a743.zip |
Fixed Shedinja hash collision
A Shedinja will always have the same IVs, personality value, and original trainer as the Nincada that generated it, meaning that it is guaranteed to have the same hash as the Ninjask that the Nincada evolved into. To cirvument this, there is now a boolean field in the hash determiner that is set if and only if the Pokémon is a Shedinja. This allows the Ninjask to be considered the same Pokémon as the Nincada it evolved from, but for the Shedinja to be considered a new Pokémon. Because the hash determiner has changed, all old hashes are now invalid.
Diffstat (limited to 'include')
-rw-r--r-- | include/pokemon.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/include/pokemon.h b/include/pokemon.h index 95af35e..dbf0d41 100644 --- a/include/pokemon.h +++ b/include/pokemon.h | |||
@@ -35,6 +35,13 @@ struct __attribute__((aligned(4))) PokemonIntermediate { | |||
35 | // while not uniformly random (amongst Pokémon), is included as a sort of | 35 | // while not uniformly random (amongst Pokémon), is included as a sort of |
36 | // "namespace", in that any Pokémon with matching PVs and IVs must also have | 36 | // "namespace", in that any Pokémon with matching PVs and IVs must also have |
37 | // the same OT, thus preventing collaboratively finding PV and IV collisions. | 37 | // the same OT, thus preventing collaboratively finding PV and IV collisions. |
38 | // there is one deterministic way that two Pokémon can have the same hash: | ||
39 | // when a Nincada evolves into a Ninjask and a Shedinja is generated, the | ||
40 | // Shedinja is guaranteed to have the same IVs and personality value as the | ||
41 | // Ninjask. we circumvent this by also including a boolean in the hash which | ||
42 | // is set to true if the Pokémon is a Shedinja, and false otherwise. this | ||
43 | // differentiates a Shedinja from the Ninjask it came from, but also allows | ||
44 | // the Ninjask to be associated with the Nincada it used to be. | ||
38 | u32 key[7]; | 45 | u32 key[7]; |
39 | 46 | ||
40 | u32 experience; | 47 | u32 experience; |