diff --git a/pokedex/struct/__init__.py b/pokedex/struct/__init__.py index 0d6c4c3..e7a623b 100644 --- a/pokedex/struct/__init__.py +++ b/pokedex/struct/__init__.py @@ -324,6 +324,14 @@ class SaveFilePokemon(object): save(result, 'genes', genes, condition=any_values) save(result, 'contest stats', contest_stats, condition=any_values) + trash = [] + while True: + try: + trash.append(st['trash_{0}'.format(len(trash))]) + except KeyError: + break + save(result, 'trash values', trash, condition=any) + return result def update(self, dct, **kwargs): @@ -460,6 +468,9 @@ class SaveFilePokemon(object): ('contest stats', 'contest')): for name, value in dct.get(key, {}).items(): st['{}_{}'.format(prefix, name.replace(' ', '_'))] = value + if 'trash values' in dct: + for i, data in enumerate(dct['trash values']): + st['trash_{0}'.format(i)] = data del self.stats del self.blob return self diff --git a/pokedex/struct/_pokemon_struct.py b/pokedex/struct/_pokemon_struct.py index ece59e2..70aa0ca 100644 --- a/pokedex/struct/_pokemon_struct.py +++ b/pokedex/struct/_pokemon_struct.py @@ -687,9 +687,9 @@ def make_pokemon_struct(generation): 5: ULInt8('nature_id'), }[generation] - padding_or_hidden_ability = { - 4: Padding(1), - 5: Flag('hidden_ability'), + hidden_ability_with_padding = { + 4: ULInt16('trash_1'), + 5: Embed(Struct('', Flag('hidden_ability'), ULInt8('trash_1'))), }[generation] PokemonStringAdapter = { @@ -700,7 +700,7 @@ def make_pokemon_struct(generation): return Struct('pokemon_struct', # Header ULInt32('personality'), # XXX aughgh http://bulbapedia.bulbagarden.net/wiki/Personality - Padding(2), + ULInt16('trash_0'), ULInt16('checksum'), # XXX should be checked or calculated # Block A @@ -845,14 +845,13 @@ def make_pokemon_struct(generation): Flag('fateful_encounter'), )), leaves_or_nature, - padding_or_hidden_ability, - Padding(1), + hidden_ability_with_padding, ULInt16('pt_egg_location_id'), ULInt16('pt_met_location_id'), # Block C PokemonStringAdapter(String('nickname', 22), 22), - Padding(1), + ULInt8('trash_2'), LeakyEnum(ULInt8('original_version'), sapphire = 1, ruby = 2, @@ -889,7 +888,7 @@ def make_pokemon_struct(generation): Flag('cool_ribbon_great'), Flag('cool_ribbon'), ), - Padding(4), + ULInt32('trash_3'), # Block D PokemonStringAdapter(String('original_trainer_name', 16), 16), @@ -919,5 +918,5 @@ def make_pokemon_struct(generation): hgss_gift = 24, # starter; fossil; bebe's eevee (pt only??) ), ULInt8('hgss_pokeball'), - Padding(1), + ULInt8('trash_4'), )