diff options
Diffstat (limited to 'redtools/text_pointers.py')
-rw-r--r-- | redtools/text_pointers.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/redtools/text_pointers.py b/redtools/text_pointers.py new file mode 100644 index 0000000..f0f74da --- /dev/null +++ b/redtools/text_pointers.py @@ -0,0 +1,55 @@ +#author: Bryan Bishop <kanzure@gmail.com> +#date: 2012-01-03 +#utilities for working with text pointers +import extract_maps #rom, assert_rom, load_rom, calculate_pointer, load_map_pointers, read_all_map_headers, map_headers +from pretty_map_headers import map_name_cleaner +#import analyze_incbins #asm, offset_to_pointer, find_incbin_to_replace_for, split_incbin_line_into_three, generate_diff_insert, load_asm, isolate_incbins, process_incbins +spacing = " " + +def test_first_text_pointer_bytes(range=20): #30 for viridian city, 34 for cerulean city, 36 for celadon, 48 for fuchsia city, 50 for safron + """ + does the first text pointer byte always point to (end address of text pointer list) + 1? + + range determines how far is acceptable. + r=15 means 30 text pointers + """ + + for map_id in extract_maps.map_headers: + map = extract_maps.map_headers[map_id] + bank = int(map["bank"],16) + text_list_pointer = int(map["texts_pointer"], 16) + + bad_names = ["FREEZE", "COPY: Cinnibar Mart", "COPY OF: Underground Tunnel Entrance (Route 6)", "COPY OF: Trashed House", "COPY OF: Underground Path Entrance (Route 7)"] + if map["name"] in bad_names: continue + + #extract the bytes making up the first text pointer + pointer_byte1 = ord(extract_maps.rom[text_list_pointer]) + pointer_byte2 = ord(extract_maps.rom[text_list_pointer+1]) + + #swap the bytes + temp = pointer_byte1 + pointer_byte1 = pointer_byte2 + pointer_byte2 = temp + del temp + + #combine these into a single pointer + partial_pointer = (pointer_byte2 + (pointer_byte1 << 8)) + + #get the full pointer + first_text_pointer = extract_maps.calculate_pointer(partial_pointer, bank) + + #if (first_text_pointer <= (text_list_pointer+range)): + print "map " + map["name"] + " (" + str(map["id"]) + ")" + print spacing + "text_pointer (list) = " + hex(text_list_pointer) + print spacing + "first_text_pointer (first text) = " + hex(first_text_pointer) + print spacing + "difference = " + str(first_text_pointer - text_list_pointer) + #return False + + return True + +if __name__ == "__main__": + extract_maps.load_rom() + extract_maps.load_map_pointers() + extract_maps.read_all_map_headers() + + print test_first_text_pointer_bytes() |