shithub: pokecrystal

Download patch

ref: 09908ecbdf84a178cc3101ae53eb4750b3a5d0f0
parent: c80279b98fdedd72f4da2a1b565a687015c1bf64
author: Bryan Bishop <[email protected]>
date: Fri Apr 20 18:19:01 EDT 2012

better get_dependencies and MapEventHeader.to_asm

--- a/extras/crystal.py
+++ b/extras/crystal.py
@@ -385,14 +385,16 @@
     #info1 += "    long_info: " + long_info
     return info1
 
-
-class TextScript():
+class TextScript:
     "a text is a sequence of commands different from a script-engine script"
-
-    def __init__(self, address, map_group=None, map_id=None, debug=True, show=True, force=False):
+    base_label = "UnknownText_"
+    def __init__(self, address, map_group=None, map_id=None, debug=True, show=True, force=False, label=None):
         self.address = address
         self.map_group, self.map_id, self.debug, self.show, self.force = map_group, map_id, debug, show, force
-        self.label = "UnknownTextLabel_"+hex(address)
+        if not label:
+            label = self.base_label + hex(address)
+        self.label = label
+        self.dependencies = []
         self.parse_text_at(address)
 
     @staticmethod
@@ -552,10 +554,15 @@
                 pointer = (pointer_byte1 + (pointer_byte2 << 8))
                 pointer = extract_maps.calculate_pointer(pointer, pointer_bank)
 
+                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)
+                self.dependencies.append(text)
+
                 command = {"type": command_byte,
                            "start_address": offset,
                            "end_address": offset + 3, #last byte belonging to this command
                            "pointer": pointer, #parameter
+                           "text": text,
                           }
 
                 offset += 3 + 1
@@ -704,6 +711,9 @@
         script_parse_table[original_address:offset-1] = self
         return commands
 
+    def get_dependencies(self):
+        return self.dependencies
+
     def to_asm(self, label=None):
         address = self.address
         start_address = address
@@ -1162,11 +1172,12 @@
 
     def parse(self): self.byte = ord(rom[self.address])
 
+    def get_dependencies(self): return []
+
     def to_asm(self):
         if not self.should_be_decimal: return hex(self.byte).replace("0x", "$")
         else: return str(self.byte)
 
-
 class DollarSignByte(SingleByteParam):
     def to_asm(self): return hex(self.byte).replace("0x", "$")
 HexByte=DollarSignByte
@@ -1247,8 +1258,12 @@
         MultiByteParam.parse(self)
 
     def get_dependencies(self):
-        dependencies = [script_parse_table[self.parsed_address]]
-        dependencies.append(script_parse_table[self.parsed_address].get_dependencies())
+        dependencies = []
+        thing = script_parse_table[self.parsed_address]
+        if thing:
+            print "parsed address is: " + hex(self.parsed_address)
+            dependencies.append(thing)
+            dependencies.extend(thing.get_dependencies())
         return dependencies
 
     def to_asm(self):
@@ -1493,7 +1508,7 @@
     def get_dependencies(self):
         dependencies = []
         for (key, param) in self.params.items():
-            if hasattr("get_dependencies", param):
+            if hasattr(param, "get_dependencies"):
                 deps = param.get_dependencies()
                 dependencies.extend(deps)
         return dependencies
@@ -2037,6 +2052,9 @@
         script_parse_table[kwargs["address"] : kwargs["address"] + self.size] = self
         Command.__init__(self, *args, **kwargs)
 
+    def get_dependencies(self):
+        return []
+
 all_warps = []
 def parse_warps(address, warp_count, bank=None, map_group=None, map_id=None, debug=True):
     warps = []
@@ -2086,6 +2104,13 @@
         #XYTrigger shouldn't really be in the globals, should it..
         script_parse_table[kwargs["address"] : kwargs["address"] + self.size] = self
         Command.__init__(self, *args, **kwargs)
+    
+    def get_dependencies(self):
+        dependencies = []
+        thing = script_parse_table[self.params[4].parsed_address]
+        if thing:
+            dependencies.append(thing)
+        return dependencies
 
 all_xy_triggers = []
 def parse_xy_triggers(address, trigger_count, bank=None, map_group=None, map_id=None, debug=True):
@@ -3109,7 +3134,7 @@
         people_event_byte_count = people_event_byte_size * people_event_count
         #people_events_bytes = rom_interval(after_signposts+1, people_event_byte_count)
         #people_events = parse_people_event_bytes(people_events_bytes, address=after_signposts+1, map_group=map_group, map_id=map_id)
-        people_events = parse_people_events(after_signposts+1, people_event_count, bank=bank, map_group=map_group, map_id=map_id, debug=debug)
+        people_events = parse_people_events(after_signposts+1, people_event_count, bank=calculate_bank(after_signposts+2), map_group=map_group, map_id=map_id, debug=debug)
         self.people_event_count = people_event_count
         self.people_events = people_events
 
@@ -3120,7 +3145,10 @@
         return True
     
     def get_dependencies(self):
-        dependencies = self.people_events + self.signposts + self.xy_triggers + self.warps
+        dependencies  = self.people_events
+        dependencies += self.signposts
+        dependencies += self.xy_triggers
+        dependencies += self.warps
         for p in list(dependencies):
             dependencies.extend(p.get_dependencies())
         return dependencies
@@ -3129,24 +3157,36 @@
         xspacing = "" #was =spacing
         output = ""
         output += xspacing + "; warps\n"
-        output += xspacing + "db %d\n"%(self.warp_count)
+        output += xspacing + "db %d"%(self.warp_count)
+        if len(self.warps) > 0:
+            output += "\n"
         output += "\n".join([xspacing+warp.to_asm() for warp in self.warps])
 
         output += "\n\n"
         output += xspacing + "; xy triggers\n"
-        output += xspacing + "db %d\n"%(self.xy_trigger_count)
+        output += xspacing + "db %d"%(self.xy_trigger_count)
+        if len(self.xy_triggers) > 0:
+            output += "\n"
         output += "\n".join([xspacing+xy_trigger.to_asm() for xy_trigger in self.xy_triggers])
 
         output += "\n\n"
         output += xspacing + "; signposts\n"
-        output += xspacing + "db %d\n"%(self.signpost_count)
+        output += xspacing + "db %d"%(self.signpost_count)
+        if len(self.signposts) > 0:
+            output += "\n"
         output += "\n".join([xspacing+signpost.to_asm() for signpost in self.signposts])
 
         output += "\n\n"
         output += xspacing + "; people-events\n"
-        output += xspacing + "db %d\n"%(self.people_event_count)
-        output += "\n".join([xspacing+people_event.to_asm() for people_event in self.people_events])
+        output += xspacing + "db %d"%(self.people_event_count)
+        if len(self.people_events) > 0:
+            output += "\n"
 
+        for people_event in self.people_events:
+            output += xspacing
+            output += people_event.to_asm()
+            output += "\n"
+
         return output
 
 
@@ -3305,6 +3345,7 @@
         for p in list(dependencies):
             dependencies.extend(p.get_dependencies())
         for callback in self.callbacks:
+            dependencies.append(callback["callback"])
             dependencies.extend(callback["callback"].get_dependencies())
         return dependencies