summaryrefslogtreecommitdiff
path: root/extras/insert_texts.py
diff options
context:
space:
mode:
Diffstat (limited to 'extras/insert_texts.py')
-rw-r--r--extras/insert_texts.py82
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)