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)