diff options
author | stag019 <stag019@gmail.com> | 2012-01-18 01:45:10 -0500 |
---|---|---|
committer | stag019 <stag019@gmail.com> | 2012-01-18 01:45:10 -0500 |
commit | 549637d0dfbb0adedcd6b05ec028c58044c8c46f (patch) | |
tree | 7a0cebc72707797842f284d1bcaa6c2f543f24c8 /extras/insert_texts.py | |
parent | 73d483e5d48df6ca9177172e0dc0a3d690af6e1d (diff) | |
parent | 25cc7be1a5e1ab2484bbfacf35033ffb5259baba (diff) |
fucking you and yours
hg-commit-id: 8a2a1f3736f2
Diffstat (limited to 'extras/insert_texts.py')
-rw-r--r-- | extras/insert_texts.py | 82 |
1 files changed, 73 insertions, 9 deletions
diff --git a/extras/insert_texts.py b/extras/insert_texts.py index 7a61e854..6d7b7b6d 100644 --- a/extras/insert_texts.py +++ b/extras/insert_texts.py @@ -1,9 +1,9 @@ #!/usr/bin/python2.7 #author: Bryan Bishop <kanzure@gmail.com> -#date: 2012-01-07 +#date: 2012-01-07, 2012-01-17 #insert TX_FAR targets into pokered.asm import extract_maps -from analyze_texts import analyze_texts, text_pretty_printer_at +from analyze_texts import analyze_texts, text_pretty_printer_at, scan_rom_for_tx_fars from pretty_map_headers import map_name_cleaner, make_text_label, map_constants, find_all_tx_fars, tx_far_pretty_printer, tx_far_label_maker import pretty_map_headers from analyze_incbins import asm, offset_to_pointer, find_incbin_to_replace_for, split_incbin_line_into_three, generate_diff_insert, load_asm, isolate_incbins, process_incbins, reset_incbins, apply_diff @@ -15,6 +15,19 @@ spacing = " " tx_fars = None failed_attempts = {} +def local_reset_incbins(): + asm = None + incbin_lines = [] + processed_incbins = {} + analyze_incbins.asm = None + analyze_incbins.incbin_lines = [] + analyze_incbins.processed_incbins = {} + + #reload + load_asm() + isolate_incbins() + process_incbins() + def find_tx_far_entry(map_id, text_id): for tx_far_line in tx_fars: if tx_far_line[0] == map_id and tx_far_line[1] == text_id: @@ -396,14 +409,20 @@ def insert_asm(start_address, label, text_asm=None, end_address=None): result = apply_diff(diff, try_fixing=True) return True -def insert_text(address, label): +def insert_text(address, label, apply=False, try_fixing=True): "inserts a text script (but not $8s)" start_address = address line_number = find_incbin_to_replace_for(start_address) if line_number == None: print "skipping text at " + hex(start_address) + " with address " + label - return + return "skip" + + #another reason to skip is if the interval is 0 + processed_incbin = analyze_incbins.processed_incbins[line_number] + if processed_incbin["interval"] == 0: + print "skipping text at " + hex(start_address) + " with address " + label + " because the interval is 0" + return "skip" text_asm, byte_count = text_pretty_printer_at(start_address, label) end_address = start_address + byte_count @@ -427,7 +446,10 @@ def insert_text(address, label): diff = generate_diff_insert(line_number, newlines) print diff - #apply_diff(diff) + if apply: + return apply_diff(diff, try_fixing=try_fixing) + else: #simulate a successful insertion + return True #move this into another file? def scan_for_map_scripts_pointer(): @@ -586,6 +608,47 @@ def scan_for_map_scripts_pointer(): print script_asm sys.exit(0) +def scan_rom_for_tx_fars_and_insert(): + """calls analyze_texts.scan_rom_for_tx_fars() + looks through INCBIN'd addresses from common.asm, + finds TX_FARs that aren't included yet. + """ + x = 0 + address_bundles = scan_rom_for_tx_fars(printer=True) + for address_bundle in address_bundles: + tx_far_address = address_bundle[1] + tx_far_target_address = address_bundle[0] + if tx_far_address in [0xeff2]: continue #skip + #if tx_far_address < 0x7627b: continue #because it stopped a few times for errors + + tx_far_label = "UnnamedText_%.2x" % (tx_far_address) + tx_far_target_label = "_" + tx_far_label + + #let's also do a quick check if it might be in the file already + if not (": ; " + hex(tx_far_address) in analyze_incbins.asm): + print "inserting text at " + hex(tx_far_address) + result = insert_text(tx_far_target_address, tx_far_target_label, apply=True) + else: + #we can't just pretend like it worked, because we don't know what label was used + #so, figure out the label + for line in analyze_incbins.asm_lines: + if ": ; " + hex(tx_far_address) in line: + tx_far_target_label = line.split(":")[0] + result = "skip" + + if result == True or result == None: + local_reset_incbins() + result2 = insert_text(tx_far_address, tx_far_label, apply=True) + local_reset_incbins() + elif result == "skip": + print "skipping " + hex(tx_far_address) + # result2 = insert_text(tx_far_address, tx_far_label, apply=True) + # local_reset_incbins() + + #just skip these for now + #if not result or not result2: + # sys.exit(0) + if __name__ == "__main__": #load map headers and object data extract_maps.load_rom() @@ -593,15 +656,16 @@ if __name__ == "__main__": extract_maps.read_all_map_headers() #load texts (these two have different formats) - all_texts = pretty_map_headers.analyze_texts.analyze_texts() - pretty_map_headers.all_texts = all_texts - tx_fars = pretty_map_headers.find_all_tx_fars() + #all_texts = pretty_map_headers.analyze_texts.analyze_texts() + #pretty_map_headers.all_texts = all_texts + #tx_fars = pretty_map_headers.find_all_tx_fars() #load incbins reset_incbins() #scan_for_map_scripts_pointer() - insert_text(0xa586b, "_VermilionCityText14") + scan_rom_for_tx_fars_and_insert() + #insert_text(0xa586b, "_VermilionCityText14") #insert _ViridianCityText10 #insert_tx_far(1, 10) |