shithub: pokecrystal

Download patch

ref: 03ce919b58a20fb65d658bd389beabb5c77fde93
parent: ec102bc62d5fae3135ad4fdf53103af922503fb2
author: Bryan Bishop <[email protected]>
date: Sat May 5 13:04:49 EDT 2012

tool to dump texts from a particular bank into asm

--- a/extras/crystal.py
+++ b/extras/crystal.py
@@ -5828,6 +5828,48 @@
         #make sure the file ends with a newline
         fh.write("\n")
 
+def list_texts_in_bank(bank):
+    """ Narrows down the list of objects
+    that you will be inserting into Asm.
+    """
+    if len(all_texts) == 0:
+        raise Exception, "all_texts is blank.. run_main() will populate it"
+
+    assert bank != None, "list_texts_in_banks must be given a particular bank"
+
+    assert 0 <= bank < 0x80, "bank doesn't exist in the ROM"
+
+    texts = []
+    for text in all_texts:
+        if calculate_bank(text.address) == bank:
+            texts.append(text)
+
+    return texts
+
+def dump_asm_for_texts_in_bank(bank, start=50, end=100):
+    """ 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()
+        run_main()
+    
+    # get all texts
+    # first 100 look okay?
+    texts = list_texts_in_bank(bank)[start:end]
+
+    # create a new dump
+    asm = Asm()
+
+    # start the insertion process
+    asm.insert_multiple_with_dependencies(texts)
+    
+    # start dumping
+    asm.dump()
+
+    print "done dumping texts for bank $%.2x" % (bank)
+
 def index(seq, f):
     """return the index of the first item in seq
     where f(item) == True."""