diff options
author | Bryan Bishop <kanzure@gmail.com> | 2012-05-20 03:39:25 -0500 |
---|---|---|
committer | Bryan Bishop <kanzure@gmail.com> | 2012-05-20 03:39:25 -0500 |
commit | 2e27285e37161f919903f7e885f0dfb212a3dd20 (patch) | |
tree | d32fce1dc1be84bb905a7a359bab94e7a4fced6c /crystal.py | |
parent | 3f8787b4d8cfd2f63c6a26989f8b351b31e23d47 (diff) |
remove extra spacing in crystal.py
original-commit-id: be8a5d6c6a7035c0dbf4c5d407e1aac12769c501
Diffstat (limited to 'crystal.py')
-rw-r--r-- | crystal.py | 188 |
1 files changed, 94 insertions, 94 deletions
@@ -412,7 +412,7 @@ class TextScript: base_label = "UnknownText_" def __init__(self, address, map_group=None, map_id=None, debug=False, label=None, force=False, show=None): self.address = address - # $91, $84, $82, $54, $8c + # $91, $84, $82, $54, $8c # 0x19768c is a a weird problem? if address in [0x26ef, 0x26f2, 0x6ee, 0x1071, 0x5ce33, 0x69523, 0x7ee98, 0x72176, 0x7a578, 0x19c09b, 0x19768c]: return None @@ -420,14 +420,14 @@ class TextScript: self.dependencies = None self.commands = None self.force = force - + if is_script_already_parsed_at(address) and not force: raise Exception, "TextScript already parsed at "+hex(address) if not label: label = self.base_label + hex(address) self.label = Label(name=label, address=address, object=self) - + self.parse() def is_valid(self): @@ -441,13 +441,13 @@ class TextScript: if self.dependencies != None and not recompute: global_dependencies.update(self.dependencies) return self.dependencies - + dependencies = [] for command in self.commands: deps = command.get_dependencies(recompute=recompute, global_dependencies=global_dependencies) dependencies.extend(deps) - + self.dependencies = dependencies return self.dependencies @@ -460,7 +460,7 @@ class TextScript: global text_command_classes, script_parse_table current_address = copy(self.address) start_address = copy(current_address) - + # don't clutter up my screen if self.debug: print "NewTextScript.parse address="+hex(self.address)+" map_group="+str(self.map_group)+" map_id="+str(self.map_id) @@ -476,7 +476,7 @@ class TextScript: # use this to control the while loop end = False - + # for each command found... while not end: # get the current scripting byte @@ -489,7 +489,7 @@ class TextScript: for class_ in text_command_classes: if class_[1].id == cur_byte: scripting_command_class = class_[1] - + # no matching command found if scripting_command_class == None: raise Exception, "unable to parse text command $%.2x in the text script at %s" % (cur_byte, hex(start_address)) @@ -499,7 +499,7 @@ class TextScript: if self.debug: print cls.to_asm() - + # store it in this script object commands.append(cls) @@ -1088,10 +1088,10 @@ class EncodedText: self.label = Label(name=label, address=address, object=self) self.parse() script_parse_table[self.address : self.last_address] = self - + def get_dependencies(self, recompute=False, global_dependencies=set()): return [] - + def parse(self): offset = self.address @@ -1104,7 +1104,7 @@ class EncodedText: jump = min([jump57, jump50, jump58]) end_address = offset + jump #we want the address before $57 - + text = parse_text_at2(offset, end_address-offset, debug=self.debug) self.text = text @@ -1131,7 +1131,7 @@ class EncodedText: lines[line_count] = current_line current_line = [] line_count += 1 - + #don't forget the last line lines[line_count] = current_line line_count += 1 @@ -1203,7 +1203,7 @@ def get_map_constant_label(map_group=None, map_id=None): """returns PALLET_TOWN for some map group/id pair""" if map_group == None: raise Exception, "need map_group" if map_id == None: raise Exception, "need map_id" - + global map_internal_ids for (id, each) in map_internal_ids.items(): if each["map_group"] == map_group and each["map_id"] == map_id: @@ -1608,13 +1608,13 @@ class MoneyByteParam(MultiByteParam): def to_asm(self): return str(self.x + (self.y << 8) + (self.z << 16)) - #this is used by the preprocessor + #this is used by the preprocessor @staticmethod def from_asm(value): #max is 0F423F #z = 0x0F ; y = 0x42 ; x = 0x3F #999999 = x + (y << 8) + (z << 16) - + value = int(value) x = (value & 0x0000FF) @@ -1762,7 +1762,7 @@ class TextPointerLabelParam(PointerLabelParam): self.text = parse_text_engine_script_at(address, map_group=self.map_group, map_id=self.map_id, force=self.force, debug=self.debug) if not self.text: self.text = script_parse_table[address] - + def get_dependencies(self, recompute=False, global_dependencies=set()): if self.text: global_dependencies.add(self.text) @@ -1779,7 +1779,7 @@ class TextPointerLabelAfterBankParam(PointerLabelAfterBank): self.text = parse_text_engine_script_at(address, map_group=self.map_group, map_id=self.map_id, force=self.force, debug=self.debug) if not self.text: self.text = script_parse_table[address] - + def get_dependencies(self, recompute=False, global_dependencies=set()): if self.text: global_dependencies.add(self.text) @@ -2028,7 +2028,7 @@ class MovementDBCommand(Command): 0: {"name": "db value", "class": SingleByteParam}, } params = [] - + def to_asm(self): asm = Command.to_asm(self) return asm + " ; movement" @@ -2062,7 +2062,7 @@ movement_command_bases = { # do these next two have any params ?? 0x4C: "teleport_from", 0x4D: "teleport_to", - + 0x4E: "skyfall", 0x4F: "step_wait5", 0x55: ["step_shake", ["displacement", DecimalParam]], @@ -2094,10 +2094,10 @@ def create_movement_commands(debug=False): print "each is: " + str(each) print "thing[class] is: " + str(thing["class"]) params["size"] += thing["class"].size - + if byte <= 0x34: for x in range(0, 4): - + direction = None if x == 0: direction = "down" @@ -2134,14 +2134,14 @@ movement_command_classes = create_movement_commands() all_movements = [] class ApplyMovementData: base_label = "MovementData_" - + def __init__(self, address, map_group=None, map_id=None, debug=False, label=None, force=False): self.address = address self.map_group = map_group self.map_id = map_id self.debug = debug self.force = force - + if not label: label = self.base_label + hex(address) self.label = Label(name=label, address=address, object=self) @@ -2150,7 +2150,7 @@ class ApplyMovementData: self.commands = [] self.parse() - + # this is almost an exact copy of Script.parse # with the exception of using text_command_classes instead of command_classes def parse(self): @@ -2159,10 +2159,10 @@ class ApplyMovementData: # i feel like checking myself assert is_valid_address(address), "ApplyMovementData.parse must be given a valid address" - + current_address = copy(self.address) start_address = copy(current_address) - + # don't clutter up my screen if self.debug: print "ApplyMovementData.parse address="+hex(self.address)+" map_group="+str(self.map_group)+" map_id="+str(self.map_id) @@ -2178,7 +2178,7 @@ class ApplyMovementData: # use this to control the while loop end = False - + # for each command found... while not end: # get the current scripting byte @@ -2193,11 +2193,11 @@ class ApplyMovementData: if (type(class_.id) == list and cur_byte in class_.id) \ or class_.id == cur_byte: scripting_command_class = class_ - + # temporary fix for applymovement scripts if ord(rom[current_address]) == 0x47: end = True - + # no matching command found xyz = None if scripting_command_class == None: @@ -2217,7 +2217,7 @@ class ApplyMovementData: if self.debug: print cls.to_asm() - + # store it in this script object commands.append(cls) @@ -2325,7 +2325,7 @@ class MainText(TextCommand): def to_asm(self): if self.size < 2 or len(self.bytes) < 1: raise Exception, "$0 text command can't end itself with no follow-on bytes" - + output = "db $0" # db $0, $57 or db $0, $50 or w/e @@ -2342,7 +2342,7 @@ class MainText(TextCommand): # whether or not there was a ", " last.. # this is useful outside of quotes was_comma = False - + # has a $50 or $57 been passed yet? end = False @@ -2361,7 +2361,7 @@ class MainText(TextCommand): # $4f, $51 and $55 can end a line if byte in [0x4f, 0x51, 0x55]: assert not new_line, "can't have $4f, $51, $55 as the first character on a newline" - + if in_quotes: output += "\", $%.2x\n" % (byte) elif not in_quotes: @@ -2385,7 +2385,7 @@ class MainText(TextCommand): if not was_comma and not new_line: output += ", " output += "\"@\"\n" - + # reset everything in_quotes = False new_line = True @@ -2461,7 +2461,7 @@ class MainText(TextCommand): if not was_comma and not new_line: output += ", " output += "$%.2x" % (byte) - + # reset things in_quotes = False new_line = False @@ -2487,14 +2487,14 @@ class WriteTextFromRAM(TextCommand): macro_name = "text_from_ram" size = 3 param_types = { - 0: {"name": "pointer", "class": MultiByteParam}, + 0: {"name": "pointer", "class": MultiByteParam}, } class WriteNumberFromRAM(TextCommand): """ 02 = Write number from ram. Structure: [02][Ram address (2byte)][Byte] - + Byte: - + Bit5:Bit6:Bit7 1: 1: 1 = PokéDollar| Don’t write zeros 0: 1: 1 = Don’t write zeros @@ -2504,7 +2504,7 @@ class WriteNumberFromRAM(TextCommand): 1: 0: 0 = PokéDollar 1: 1: 0 = PokéDollar 1: 0: 1 = Spaces instead of zeros| PokéDollar - + Number of figures = Byte AND 0x1F *2 No Hex --> Dec Conversio """ @@ -2562,7 +2562,7 @@ class WriteDecimalNumberFromRAM(TextCommand): """ 09 = Write number from rom/ram in decimal. Structure: [09][Ram address/Pointer (2byte)][Byte] Byte: - + Is split: 1. 4 bits = Number of bytes to load. 0 = 3, 1 = 1, 2 = 2 2. 4 bits = Number of figures of displayed number 0 = Don’t care @@ -2641,9 +2641,9 @@ class Play44thSound(Play0thSound): class DisplayByteFromRAMAt(TextCommand): """ 14 = Display MEMORY. Structure: [14][Byte] - + Byte: - + 00 = MEMORY1 01 = MEMORY2 02 = MEMORY @@ -3041,7 +3041,7 @@ class Script: sys.exit(1) if is_script_already_parsed_at(start_address) and not force and not force_top: raise Exception, "this script has already been parsed before, please use that instance ("+hex(start_address)+")" - + # load up the rom if it hasn't been loaded already load_rom() @@ -3081,16 +3081,16 @@ class Script: # create an instance of the command class and let it parse its parameter bytes #print "about to parse command(script@"+hex(start_address)+"): " + str(scripting_command_class.macro_name) cls = scripting_command_class(address=current_address, force=force, map_group=map_group, map_id=map_id, parent=self) - + #if self.debug: # print cls.to_asm() - + # store it in this script object commands.append(cls) - + # certain commands will end the scripting engine end = cls.end - + # skip past the command's parameter bytes to go to the next command #current_address = cls.last_address + 1 current_address += cls.size @@ -3101,13 +3101,13 @@ class Script: # store the script in the global table/map thing script_parse_table[start_address:current_address] = self - + asm_output = "\n".join([command.to_asm() for command in commands]) print "--------------\n"+asm_output - + # store the script self.commands = commands - + return commands def get_dependencies(self, recompute=False, global_dependencies=set()): @@ -3246,7 +3246,7 @@ class XYTrigger(Command): self.id = kwargs["id"] self.dependencies = None Command.__init__(self, *args, **kwargs) - + def get_dependencies(self, recompute=False, global_dependencies=set()): dependencies = [] if self.dependencies != None and not recompute: @@ -3337,10 +3337,10 @@ class ItemFragmentParam(PointerLabelParam): def parse(self): PointerLabelParam.parse(self) - + address = calculate_pointer_from_bytes_at(self.address, bank=self.bank) self.calculated_address = address - + itemfrag = ItemFragment(address=address, map_group=self.map_group, map_id=self.map_id, debug=self.debug) self.itemfrag = itemfrag @@ -3355,10 +3355,10 @@ class ItemFragmentParam(PointerLabelParam): trainer_group_maximums = {} class TrainerFragment(Command): """used by TrainerFragmentParam and PeopleEvent for trainer data - + Maybe this shouldn't be a Command. The output might sprawl over multiple lines, and maybe it should be commented in to_asm? - + [Bit no. (2byte)][Trainer group][Trainer] [2byte pointer to Text when seen] [2byte pointer to text when trainer beaten] @@ -3398,7 +3398,7 @@ class TrainerFragment(Command): script_parse_table[self.address : self.last_address] = self self.dependencies = None Command.__init__(self, *args, **kwargs) - + def get_dependencies(self, recompute=False, global_dependencies=set()): deps = [] if not is_valid_address(self.address): return deps @@ -3494,7 +3494,7 @@ class TrainerGroupTable: def get_dependencies(self, recompute=False, global_dependencies=set()): global_dependencies.update(self.headers) - if recompute == True and self.dependencies != None and self.dependencies != []: + if recompute == True and self.dependencies != None and self.dependencies != []: return self.dependencies dependencies = copy(self.headers) for header in self.headers: @@ -4495,7 +4495,7 @@ class Signpost(Command): self.params.append(mb) else: raise Exception, "unknown signpost type byte="+hex(func) + " signpost@"+hex(self.address) - + def get_dependencies(self, recompute=False, global_dependencies=set()): dependencies = [] if self.dependencies != None and not recompute: @@ -4621,7 +4621,7 @@ class MapHeader: self.music = HexByte(address=address+6) self.time_of_day = DecimalParam(address=address+7) self.fishing_group = DecimalParam(address=address+8) - + def get_dependencies(self, recompute=False, global_dependencies=set()): if self.dependencies != None and not recompute: global_dependencies.update(self.dependencies) @@ -4702,7 +4702,7 @@ class SecondMapHeader: #i think it's always a static size? script_parse_table[address : self.last_address] = self self.parse() - + def make_label(self): return map_names[self.map_group][self.map_id]["label"] + "_SecondMapHeader" @@ -4762,7 +4762,7 @@ class SecondMapHeader: #self.connections = connections return True - + def get_dependencies(self, recompute=False, global_dependencies=set()): if self.dependencies != None and not recompute: global_dependencies.update(self.dependencies) @@ -4855,7 +4855,7 @@ class MapBlockData: self.last_address = self.address + (self.width.byte * self.height.byte) script_parse_table[address : self.last_address] = self self.parse() - + def make_label(self): return map_names[self.map_group][self.map_id]["label"] + "_BlockData" @@ -4895,7 +4895,7 @@ class MapEventHeader: self.label = Label(address=address, object=self) self.parse() script_parse_table[address : self.last_address] = self - + def make_label(self): return map_names[self.map_group][self.map_id]["label"] + "_MapEventHeader" @@ -4948,7 +4948,7 @@ class MapEventHeader: else: self.last_address = after_signposts+1 return True - + def get_dependencies(self, recompute=False, global_dependencies=set()): if self.dependencies != None and not recompute: global_dependencies.update(self.dependencies) @@ -4958,7 +4958,7 @@ class MapEventHeader: bases += self.signposts bases += self.xy_triggers bases += self.warps - + dependencies = [] for p in bases: dependencies.extend(p.get_dependencies(recompute=recompute, global_dependencies=global_dependencies)) @@ -5000,7 +5000,7 @@ class MapEventHeader: output += xspacing output += people_event.to_asm() output += "\n" - + if output[-1] == "\n": output = output[:-1] return output @@ -5121,7 +5121,7 @@ class MapScriptHeader: self.label = Label(address=address, object=self) self.parse() script_parse_table[address : self.last_address] = self - + def make_label(self): return map_names[self.map_group][self.map_id]["label"] + "_MapScriptHeader" @@ -5158,7 +5158,7 @@ class MapScriptHeader: self.last_address = current_address print "done parsing a MapScriptHeader map_group="+str(map_group)+" map_id="+str(map_id) return True - + def get_dependencies(self, recompute=False, global_dependencies=set()): if self.dependencies != None and not recompute: global_dependencies.update(self.dependencies) @@ -6296,7 +6296,7 @@ class Incbin: print " " + incbins[-1].line return incbins - + class AsmSection: def __init__(self, line): self.bank_id = None @@ -6308,7 +6308,7 @@ class AsmSection: self.bank_id = bank_id start_address = bank_id * 0x4000 end_address = (bank_id * 0x4000) + 0x4000 - 1 - + self.address = self.start_address = start_address self.last_address = None self.end_address = None @@ -6377,12 +6377,12 @@ class Asm: # its' probably being injected in some get_dependencies() somewhere print "don't know why ScriptPointerLabelParam is getting to this point?" return - + #first some validation if not hasattr(new_object, "address"): print "object needs to have an address property: " + str(new_object) return - + start_address = new_object.address # skip this dragon shrine script calling itself @@ -6390,14 +6390,14 @@ class Asm: if start_address in lousy_dragon_shrine_hack: print "skipping 0x18d079 in dragon shrine for a lousy hack" 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) - + if not hasattr(new_object, "last_address"): print debugmsg raise Exception, "object needs to have a last_address property" @@ -6416,7 +6416,7 @@ class Asm: #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 # return - + if self.debug: print debugmsg del debugmsg @@ -6427,7 +6427,7 @@ class Asm: if hasattr(new_object, "to_asm"): print to_asm(new_object) raise Exception, "Asm.insert was given an object with a bad address range" - + # 1) find which object needs to be replaced # or # 2) find which object goes after it @@ -6470,13 +6470,13 @@ class Asm: if not found: raise Exception, "unable to insert object into Asm" self.labels.append(new_object.label) - return True + return True def insert_with_dependencies(self, input): if type(input) == list: input_objects = input else: input_objects = [input] - + for object0 in input_objects: global_dependencies = set([object0]) poopbutt = get_dependencies_for(object0, global_dependencies=global_dependencies, recompute=False) @@ -6497,7 +6497,7 @@ class Asm: if self.debug: print " object is: " + str(object) self.insert(object) - + #just some old debugging #if object.label.name == "UnknownText_0x60128": # raise Exception, "debugging..." @@ -6610,7 +6610,7 @@ def list_movements_in_bank(bank): assert bank != None, "list_movements_in_bank must be given a particular bank" assert 0 <= bank < 0x80, "bank doesn't exist in the ROM (out of bounds)" - + movements = [] for movement in all_movements: if calculate_bank(movement.address) == bank: @@ -6625,7 +6625,7 @@ def dump_asm_for_texts_in_bank(bank, start=50, end=100): if rom == None or len(rom) <= 4: load_rom() run_main() - + # get all texts # first 100 look okay? texts = list_texts_in_bank(bank)[start:end] @@ -6635,7 +6635,7 @@ def dump_asm_for_texts_in_bank(bank, start=50, end=100): # start the insertion process asm.insert_multiple_with_dependencies(texts) - + # start dumping asm.dump() @@ -6660,7 +6660,7 @@ def dump_things_in_bank(bank, start=50, end=100): if rom == None or len(rom) <= 4: load_rom() run_main() - + things = list_things_in_bank(bank)[start:end] # create a new dump @@ -6668,7 +6668,7 @@ def dump_things_in_bank(bank, start=50, end=100): # start the insertion process asm.insert_with_dependencies(things) - + # start dumping asm.dump() @@ -6760,7 +6760,7 @@ all_new_labels = [] class Label: """ Every object in script_parse_table is given a label. - + This label is simply a way to keep track of what objects have been previously written to file. """ @@ -6771,10 +6771,10 @@ class Label: self.address = address self.object = object - + # label might not be in the file yet self.line_number = line_number - + # -- These were some old attempts to check whether the label # -- was already in use. They work, but the other method is # -- better. @@ -6785,7 +6785,7 @@ class Label: self.is_in_file = is_in_file self.address_is_in_file = address_is_in_file - + if name == None: name = object.base_label + "_" + hex(object.address) @@ -6813,7 +6813,7 @@ class Label: def get_line_number_from_raw_file(self): """ Reads the asm file to figure out the line number. - + Note that this label might not be in the file yet, like if this is a newly generated label. However, if crystal.py has been run before and manipulated main.asm, then it is @@ -6835,14 +6835,14 @@ class Label: """ self.get_line_number_from_raw_file() return self.is_in_file - + def old_check_address_is_in_file(self): """ Checks whether or not the address of the object is already in the file. This might happen if the label name is different but the address is the same. Another scenario is that the label is already used, but at a different address. - + This method works by looking at the INCBINs. When there is an INCBIN that covers this address in the file, then there is no label at this address yet (or there is, but we can @@ -6852,7 +6852,7 @@ class Label: """ if processed_incbins == {}: process_incbins() - + incbin = find_incbin_to_replace_for(self.address) if incbin == None: @@ -7021,7 +7021,7 @@ def old_is_label_in_asm(label): # line numbering begins at 1 in vim i = 1 - + # check if any line starts with this label for line in asm: if line_has_label(line): |