Added an is_shiny accessor to Pokémon structs. veekun-promotions/2010070701
authorEevee <git@veekun.com>
Thu, 8 Jul 2010 05:29:30 +0000 (22:29 -0700)
committerEevee <git@veekun.com>
Thu, 8 Jul 2010 05:33:14 +0000 (22:33 -0700)
pokedex/struct/__init__.py

index d1142d0..d55dda7 100644 (file)
@@ -76,6 +76,24 @@ class SaveFilePokemon(object):
         return struct.pack(struct_def, *shuffled)
 
 
+    ### Delicious data
+
+    @property
+    def is_shiny(self):
+        u"""Returns true iff this Pokémon is shiny."""
+        # See http://bulbapedia.bulbagarden.net/wiki/Personality#Shininess
+        # But don't see it too much, because the above is super over
+        # complicated.  Do this instead!
+        personality_msdw = self.structure.personality >> 16
+        personality_lsdw = self.structure.personality & 0xffff
+        return (
+            self.structure.original_trainer_id
+            ^ self.structure.original_trainer_secret_id
+            ^ personality_msdw
+            ^ personality_lsdw
+        ) < 8
+
+
     ### Utility methods
 
     shuffle_orders = list( permutations(range(4)) )