diff options
| author | Bryan Bishop <kanzure@gmail.com> | 2013-09-12 22:27:33 -0500 | 
|---|---|---|
| committer | Bryan Bishop <kanzure@gmail.com> | 2013-09-12 22:27:33 -0500 | 
| commit | 0c1e9095d805ce60af68c6d4497ea71e9bc08b5d (patch) | |
| tree | 960edacf434c0ba8c4fa79ebd1efb4057466afc4 /pokemontools/crystal.py | |
| parent | c6f0f7f5c9c6d7a5ec1310043c37f4d0a40b3395 (diff) | |
remove globals from some map group parsers
Diffstat (limited to 'pokemontools/crystal.py')
| -rw-r--r-- | pokemontools/crystal.py | 41 | 
1 files changed, 21 insertions, 20 deletions
| diff --git a/pokemontools/crystal.py b/pokemontools/crystal.py index 0222f8e..4fe9f38 100644 --- a/pokemontools/crystal.py +++ b/pokemontools/crystal.py @@ -148,26 +148,22 @@ def load_asm2(filename="../main.asm"):      new_asm = Asm(filename=filename)      return new_asm -def rom_interval(offset, length, strings=True, debug=True): +def rom_interval(offset, length, rom=None, strings=True, debug=True):      """returns hex values for the rom starting at offset until offset+length""" -    global rom      return rom.interval(offset, length, strings=strings, debug=debug) -def rom_until(offset, byte, strings=True, debug=True): +def rom_until(offset, byte, rom=None, strings=True, debug=True):      """returns hex values from rom starting at offset until the given byte""" -    global rom      return rom.until(offset, byte, strings=strings, debug=debug)  def how_many_until(byte, starting, rom):      index = rom.find(byte, starting)      return index - starting -def load_map_group_offsets(): +def load_map_group_offsets(map_group_pointer_table, map_group_count, rom=None):      """reads the map group table for the list of pointers""" -    global map_group_pointer_table, map_group_count, map_group_offsets -    global rom      map_group_offsets = [] # otherwise this method can only be used once -    data = rom_interval(map_group_pointer_table, map_group_count*2, strings=False) +    data = rom_interval(map_group_pointer_table, map_group_count*2, strings=False, rom=rom)      data = helpers.grouper(data)      for pointer_parts in data:          pointer = pointer_parts[0] + (pointer_parts[1] << 8) @@ -5677,16 +5673,18 @@ def parse_map_header_by_id(*args, **kwargs):      map_header_offset = offset + ((map_id - 1) * map_header_byte_size)      return parse_map_header_at(map_header_offset, map_group=map_group, map_id=map_id) -def parse_all_map_headers(debug=True): -    """calls parse_map_header_at for each map in each map group""" -    global map_names +def parse_all_map_headers(map_names, debug=True): +    """ +    Calls parse_map_header_at for each map in each map group. Updates the +    map_names structure. +    """      if not map_names[1].has_key("offset"):          raise Exception("dunno what to do - map_names should have groups with pre-calculated offsets by now") -    for group_id, group_data in map_names.items(): +    for (group_id, group_data) in map_names.items():          offset = group_data["offset"]          # we only care about the maps          #del group_data["offset"] -        for map_id, map_data in group_data.items(): +        for (map_id, map_data) in group_data.items():              if map_id == "offset": continue # skip the "offset" address for this map group              if debug:                  logging.debug( @@ -6529,14 +6527,14 @@ def list_movements_in_bank(bank):              movements.append(movement)      return movements -def dump_asm_for_texts_in_bank(bank, start=50, end=100): +def dump_asm_for_texts_in_bank(bank, start=50, end=100, rom=None):      """      Simple utility to help with dumping texts into a particular bank. This is      helpful for figuring out which text is breaking that bank.      """      # load and parse the ROM if necessary      if rom == None or len(rom) <= 4: -        load_rom() +        rom = load_rom()          run_main()      # get all texts @@ -6846,16 +6844,19 @@ def scan_for_predefined_labels(debug=False):      write_all_labels(all_labels)      return all_labels -def run_main(): -    # read the rom and figure out the offsets for maps -    direct_load_rom() -    load_map_group_offsets() +def run_main(rom=None): +    if not rom: +        # read the rom and figure out the offsets for maps +        rom = direct_load_rom() + +    # figure out the map offsets +    map_group_offsets = load_map_group_offsets(map_group_pointer_table=map_group_pointer_table, map_group_count=map_group_count, rom=rom)      # add the offsets into our map structure, why not (johto maps only)      [map_names[map_group_id+1].update({"offset": offset}) for map_group_id, offset in enumerate(map_group_offsets)]      # parse map header bytes for each map -    parse_all_map_headers() +    parse_all_map_headers(map_names)      # find trainers based on scripts and map headers      # this can only happen after parsing the entire map and map scripts | 
