shithub: pokecrystal

Download patch

ref: 984597d1aa34646166e8c79a1680c83bb6c70268
parent: 604843604603d8f76b2731d62c7e5a4edb986cff
author: Bryan Bishop <[email protected]>
date: Sun May 13 18:48:35 EDT 2012

fix movement param get_dependencies

--- a/extras/crystal.py
+++ b/extras/crystal.py
@@ -399,7 +399,7 @@
         self.address = address
         # $91, $84, $82, $54, $8c 
         # 0x19768c is a a weird problem?
-        if address in [0x26f2, 0x6ee, 0x1071, 0x5ce33, 0x69523, 0x7ee98, 0x72176, 0x7a578, 0x19c09b, 0x19768c]:
+        if address in [0x26ef, 0x26f2, 0x6ee, 0x1071, 0x5ce33, 0x69523, 0x7ee98, 0x72176, 0x7a578, 0x19c09b, 0x19768c]:
             return None
         self.map_group, self.map_id, self.debug = map_group, map_id, debug
         self.dependencies = None
@@ -415,8 +415,14 @@
         
         self.parse()
 
+    def is_valid(self):
+        return not (self.address in [0x26ef, 0x26f2, 0x6ee, 0x1071, 0x5ce33, 0x69523, 0x7ee98, 0x72176, 0x7a578, 0x19c09b, 0x19768c])
+
     # hmm this looks exactly like Script.get_dependencies (which makes sense..)
     def get_dependencies(self, recompute=False, global_dependencies=set()):
+        if self.address in [0x26ef, 0x26f2, 0x6ee, 0x1071, 0x5ce33, 0x69523, 0x7ee98, 0x72176, 0x7a578, 0x19c09b, 0x19768c]:
+            return []
+
         if self.dependencies != None and not recompute:
             global_dependencies.update(self.dependencies)
             return self.dependencies
@@ -433,6 +439,9 @@
     # this is almost an exact copy of Script.parse
     # with the exception of using text_command_classes instead of command_classes
     def parse(self):
+        if self.address in [0x26ef, 0x26f2, 0x6ee, 0x1071, 0x5ce33, 0x69523, 0x7ee98, 0x72176, 0x7a578, 0x19c09b, 0x19768c]:
+            return None
+
         global text_command_classes, script_parse_table
         current_address = copy(self.address)
         start_address = copy(current_address)
@@ -520,6 +529,9 @@
         return commands
 
     def to_asm(self):
+        if self.address in [0x26ef, 0x26f2, 0x6ee, 0x1071, 0x5ce33, 0x69523, 0x7ee98, 0x72176, 0x7a578, 0x19c09b, 0x19768c]:
+            return None
+
         asm_output = "\n".join([command.to_asm() for command in self.commands])
         return asm_output
 
@@ -695,7 +707,8 @@
 
                 text = TextScript(pointer, map_group=self.map_group, map_id=self.amp_id, debug=self.debug, \
                                   show=self.debug, force=self.debug, label="Target"+self.label.name)
-                self.dependencies.append(text)
+                if text.is_valid():
+                    self.dependencies.append(text)
 
                 command = {"type": command_byte,
                            "start_address": offset,
@@ -1161,7 +1174,10 @@
     if deh:
         return deh
     else:
-        return TextScript(address, map_group=map_group, map_id=map_id, debug=debug)
+        text = TextScript(address, map_group=map_group, map_id=map_id, debug=debug)
+        if text.is_valid():
+            return text
+        else: return None
 
 def rom_text_at(address, count=10):
     """prints out raw text from the ROM
@@ -1709,7 +1725,7 @@
     def get_dependencies(self, recompute=False, global_dependencies=set()):
         if hasattr(self, "movement") and self.movement:
             global_dependencies.add(self.movement)
-            return [self.movement].extend(self.movement.get_dependencies())
+            return [self.movement] + self.movement.get_dependencies(recompute=recompute, global_dependencies=global_dependencies)
         else:
             raise Exception, "MovementPointerLabelParam hasn't been parsed yet"
 
@@ -1758,9 +1774,9 @@
 
     def get_dependencies(self, recompute=False, global_dependencies=set()):
         dependencies = []
-        if self.dependencies != None and not recompute:
-            global_dependencies.update(self.dependencies)
-            return self.dependencies
+        #if self.dependencies != None and not recompute:
+        #    global_dependencies.update(self.dependencies)
+        #    return self.dependencies
         for (key, param) in self.params.items():
             if hasattr(param, "get_dependencies") and param != self:
                 deps = param.get_dependencies(recompute=recompute, global_dependencies=global_dependencies)
@@ -5734,7 +5750,10 @@
         if not hasattr(new_object, "address"):
             print "object needs to have an address property: " + str(new_object)
             return
-        
+       
+        if not hasattr(new_object, "label") and hasattr(new_object, "is_valid") and not new_object.is_valid():
+            return
+
         debugmsg  = "object is " + new_object.label.name + " type="+str(new_object.__class__)+" new_object="+str(new_object)
         debugmsg += " label = " + new_object.label.name
         debugmsg += " start_address="+hex(start_address)#+" end_address="+hex(end_address)