mirror of https://github.com/pret/pokecrystal.git
top-level dependency bug fix.. actual problem not solved ?
This commit is contained in:
parent
94e486be89
commit
ef56a46e81
|
@ -505,6 +505,7 @@ class TextScript:
|
||||||
|
|
||||||
if is_script_already_parsed_at(address) and not force:
|
if is_script_already_parsed_at(address) and not force:
|
||||||
print "text is already parsed at this location: " + hex(address)
|
print "text is already parsed at this location: " + hex(address)
|
||||||
|
raise Exception, "text is already parsed, what's going on ?"
|
||||||
return script_parse_table[address]
|
return script_parse_table[address]
|
||||||
|
|
||||||
total_text_commands = 0
|
total_text_commands = 0
|
||||||
|
@ -1014,6 +1015,13 @@ def parse_text_at2(address, count=10, debug=True, japanese=False):
|
||||||
this does not handle text commands"""
|
this does not handle text commands"""
|
||||||
return EncodedText.parse_text_at(address, count, debug=debug, japanese=japanese)
|
return EncodedText.parse_text_at(address, count, debug=debug, japanese=japanese)
|
||||||
|
|
||||||
|
def parse_text_at3(address, map_group=None, map_id=None, debug=False):
|
||||||
|
deh = script_parse_table[address]
|
||||||
|
if deh:
|
||||||
|
return deh
|
||||||
|
else:
|
||||||
|
return TextScript(address, map_group=map_group, map_id=map_id, debug=debug)
|
||||||
|
|
||||||
def rom_text_at(address, count=10):
|
def rom_text_at(address, count=10):
|
||||||
"""prints out raw text from the ROM
|
"""prints out raw text from the ROM
|
||||||
like for 0x112110"""
|
like for 0x112110"""
|
||||||
|
@ -1287,8 +1295,8 @@ class PointerLabelParam(MultiByteParam):
|
||||||
return self.dependencies
|
return self.dependencies
|
||||||
thing = script_parse_table[self.parsed_address]
|
thing = script_parse_table[self.parsed_address]
|
||||||
if thing and thing.address == self.parsed_address and not (thing is self):
|
if thing and thing.address == self.parsed_address and not (thing is self):
|
||||||
if self.debug:
|
#if self.debug:
|
||||||
print "parsed address is: " + hex(self.parsed_address) + " with label: " + thing.label.name + " of type: " + str(thing.__class__)
|
# print "parsed address is: " + hex(self.parsed_address) + " with label: " + thing.label.name + " of type: " + str(thing.__class__)
|
||||||
dependencies.append(thing)
|
dependencies.append(thing)
|
||||||
if not thing in global_dependencies:
|
if not thing in global_dependencies:
|
||||||
global_dependencies.add(thing)
|
global_dependencies.add(thing)
|
||||||
|
@ -1508,7 +1516,9 @@ class RawTextPointerLabelParam(PointerLabelParam):
|
||||||
#bank = calculate_bank(self.address)
|
#bank = calculate_bank(self.address)
|
||||||
address = calculate_pointer_from_bytes_at(self.address, bank=False)
|
address = calculate_pointer_from_bytes_at(self.address, bank=False)
|
||||||
self.calculated_address = address
|
self.calculated_address = address
|
||||||
self.text = TextScript(address, map_group=self.map_group, map_id=self.map_id, debug=self.debug)
|
#self.text = parse_text_at3(address, map_group=self.map_group, map_id=self.map_id, debug=self.debug)
|
||||||
|
#self.text = TextScript(address, map_group=self.map_group, map_id=self.map_id, debug=self.debug)
|
||||||
|
self.text = parse_text_engine_script_at(address, map_group=self.map_group, map_id=self.map_id, debug=self.debug)
|
||||||
|
|
||||||
def get_dependencies(self, recompute=False, global_dependencies=set()):
|
def get_dependencies(self, recompute=False, global_dependencies=set()):
|
||||||
global_dependencies.add(self.text)
|
global_dependencies.add(self.text)
|
||||||
|
@ -4812,13 +4822,26 @@ class Asm:
|
||||||
|
|
||||||
return None
|
return None
|
||||||
def insert(self, new_object):
|
def insert(self, new_object):
|
||||||
|
if isinstance(new_object, ScriptPointerLabelParam):
|
||||||
|
# its' probably being injected in some get_dependencies() somewhere
|
||||||
|
print "don't know why ScriptPointerLabelParam is getting to this point?"
|
||||||
|
return
|
||||||
|
start_address = new_object.address
|
||||||
|
|
||||||
#first some validation
|
#first some validation
|
||||||
if not hasattr(new_object, "address"):
|
if not hasattr(new_object, "address"):
|
||||||
print "object needs to have an address property: " + str(new_object)
|
print "object needs to have an address property: " + str(new_object)
|
||||||
return
|
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)
|
||||||
|
|
||||||
if not hasattr(new_object, "last_address"):
|
if not hasattr(new_object, "last_address"):
|
||||||
print "object needs to have a last_address property: " + str(new_object)
|
print debugmsg
|
||||||
return
|
raise Exception, "object needs to have a last_address property"
|
||||||
|
end_address = new_object.last_address
|
||||||
|
debugmsg += " last_address="+hex(end_address)
|
||||||
|
|
||||||
#check if the object is already inserted
|
#check if the object is already inserted
|
||||||
if new_object in self.parts:
|
if new_object in self.parts:
|
||||||
|
@ -4832,18 +4855,13 @@ class Asm:
|
||||||
#if self.does_address_have_label(new_object.address):
|
#if self.does_address_have_label(new_object.address):
|
||||||
# print "object's address is already used ("+str(new_object)+") at "+hex(new_object.address)+" label="+new_object.label.name
|
# print "object's address is already used ("+str(new_object)+") at "+hex(new_object.address)+" label="+new_object.label.name
|
||||||
# return
|
# return
|
||||||
|
|
||||||
start_address = new_object.address
|
|
||||||
end_address = new_object.last_address
|
|
||||||
if self.debug:
|
if self.debug:
|
||||||
debugmsg = "object is " + new_object.label.name + " type="+str(new_object.__class__)+" new_object="+str(new_object)
|
|
||||||
debugmsg += " start_address="+hex(start_address)+" end_address="+hex(end_address)
|
|
||||||
debugmsg += " label = " + new_object.label.name
|
|
||||||
print debugmsg
|
print debugmsg
|
||||||
del debugmsg
|
del debugmsg
|
||||||
if (end_address < start_address) or ((end_address - start_address) < 0):
|
if (end_address < start_address) or ((end_address - start_address) < 0):
|
||||||
if not self.debug:
|
if not self.debug:
|
||||||
print "object is type="+str(new_object.__class__)+" new_object="+str(new_object)
|
print "object is new_object="+str(new_object)
|
||||||
print "start_address="+hex(start_address)+" end_address="+hex(end_address)
|
print "start_address="+hex(start_address)+" end_address="+hex(end_address)
|
||||||
if hasattr(new_object, "to_asm"):
|
if hasattr(new_object, "to_asm"):
|
||||||
print to_asm(new_object)
|
print to_asm(new_object)
|
||||||
|
@ -4892,15 +4910,28 @@ class Asm:
|
||||||
global_dependencies = set([object0])
|
global_dependencies = set([object0])
|
||||||
poopbutt = get_dependencies_for(object0, global_dependencies=global_dependencies, recompute=False)
|
poopbutt = get_dependencies_for(object0, global_dependencies=global_dependencies, recompute=False)
|
||||||
objects = global_dependencies
|
objects = global_dependencies
|
||||||
|
objects.update(poopbutt)
|
||||||
|
new_objects = copy(objects)
|
||||||
for object in objects:
|
for object in objects:
|
||||||
|
if hasattr(object, "dependencies") and object.dependencies == None:
|
||||||
|
new_objects.update(object.get_dependencies())
|
||||||
|
for object in new_objects:
|
||||||
|
if isinstance(object, ScriptPointerLabelParam):
|
||||||
|
continue
|
||||||
#if object in self.parts:
|
#if object in self.parts:
|
||||||
# if self.debug:
|
# if self.debug:
|
||||||
# print "already inserted -- object.__class__="+str(object.__class__)+" object is: "+str(object)+\
|
# print "already inserted -- object.__class__="+str(object.__class__)+" object is: "+str(object)+\
|
||||||
# " for object.__class__="+str(object0.__class__)+" object="+str(object0)
|
# " for object.__class__="+str(object0.__class__)+" object="+str(object0)
|
||||||
# continue
|
# continue
|
||||||
if self.debug:
|
if self.debug:
|
||||||
print "object.__class__="+str(object.__class__) + " object is: " + str(object)
|
print " object is: " + str(object)
|
||||||
self.insert(object)
|
self.insert(object)
|
||||||
|
|
||||||
|
#just some old debugging
|
||||||
|
#if object.label.name == "UnknownText_0x60128":
|
||||||
|
# raise Exception, "debugging..."
|
||||||
|
#elif object.label.name == "UnknownScript_0x60011":
|
||||||
|
# raise Exception, "debugging.. dependencies are: " + str(object.dependencies) + " versus: " + str(object.get_dependencies())
|
||||||
def insert_multiple_with_dependencies(self, objects):
|
def insert_multiple_with_dependencies(self, objects):
|
||||||
for object in objects:
|
for object in objects:
|
||||||
self.insert_single_with_dependencies(object)
|
self.insert_single_with_dependencies(object)
|
||||||
|
@ -5009,9 +5040,11 @@ def get_ram_label(address):
|
||||||
def get_label_for(address):
|
def get_label_for(address):
|
||||||
"""returns a label assigned to a particular address"""
|
"""returns a label assigned to a particular address"""
|
||||||
global all_labels
|
global all_labels
|
||||||
if type(address) != int:
|
|
||||||
print "get_label_for requires an integer address"
|
if address == None:
|
||||||
return None
|
return None
|
||||||
|
if type(address) != int:
|
||||||
|
raise Exception, "get_label_for requires an integer address, got: " + str(type(address))
|
||||||
|
|
||||||
#the old way
|
#the old way
|
||||||
for thing in all_labels:
|
for thing in all_labels:
|
||||||
|
|
Loading…
Reference in New Issue