summaryrefslogtreecommitdiff
path: root/extras/map_block_dumper.py
diff options
context:
space:
mode:
Diffstat (limited to 'extras/map_block_dumper.py')
m---------extras0
-rw-r--r--extras/map_block_dumper.py171
2 files changed, 0 insertions, 171 deletions
diff --git a/extras b/extras
new file mode 160000
+Subproject 795cd58a70c80082003e40127241cfaefa0fae8
diff --git a/extras/map_block_dumper.py b/extras/map_block_dumper.py
deleted file mode 100644
index 1ffa1e61..00000000
--- a/extras/map_block_dumper.py
+++ /dev/null
@@ -1,171 +0,0 @@
-#author: Bryan Bishop <kanzure@gmail.com>
-#date: 2012-01-03
-#purpose: extract .blk files from baserom.gbc
-#note: use python2.7 because of subprocess in analyze_incbins
-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
-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
-import analyze_incbins
-import os, sys
-import subprocess
-spacing = " "
-
-used_map_pointers = []
-
-def extract_map_block_data(map_id, savefile=False):
- map = extract_maps.map_headers[map_id]
- if map["name"] == "FREEZE": return #skip this one
-
- blocksdata_pointer = int(map["map_pointer"], 16)
-
- y = int(map["y"], 16)
- x = int(map["x"], 16)
- size = x*y
-
- #fetch the data from the rom
- blocksdata = extract_maps.rom[blocksdata_pointer:blocksdata_pointer+size]
-
- #clean up the filename and label (for pokered.asm)
- cleaned_name = map_name_cleaner(map["name"], None)
- label_text = cleaned_name.replace("_h", "Blocks")
- filename = cleaned_name.replace("_h", "").lower()
- full_filepath = "maps/" + filename + ".blk"
-
- if savefile:
- print "Saving ../maps/" + filename + ".blk for map id=" + str(map_id)
- fh = open("../maps/" + filename + ".blk", "w")
- fh.write(blocksdata)
- fh.close()
-
-def make_labels(name):
- cleaned_name = map_name_cleaner(name, None)
- label_text = cleaned_name.replace("_h", "Blocks")
- filename = cleaned_name.replace("_h", "").lower()
- full_filepath = "maps/" + filename + ".blk"
- return cleaned_name, label_text, filename, full_filepath
-
-def generate_label_asm(name,size=None):
- cleaned_name, label_text, filename, full_filepath = make_labels(name)
-
- output = label_text + ":"
- if size: output += " ; " + str(size) + "\n"
- else: output += "\n"
- output += spacing + "INCBIN \"" + full_filepath + "\""
-
- return output
-
-def insert_map_block_label(map_id):
- map = extract_maps.map_headers[map_id]
- address = int(map["map_pointer"], 16)
- y = int(map["y"], 16)
- x = int(map["x"], 16)
- size = x*y
-
- print "map name: " + map["name"]
- print "map address: " + map["map_pointer"]
-
- line_number = find_incbin_to_replace_for(address)
- if line_number == None:
- print "skipping map id=" + str(map_id) + " probably because it was already done."
- used_map_pointers.append(map["map_pointer"])
- return
-
- newlines = split_incbin_line_into_three(line_number, address, size)
-
- label_asm = generate_label_asm(map["name"], size)
-
- newlines = newlines.split("\n")
- if len(newlines) == 2: index = 0 #replace the 1st line with new content
- elif len(newlines) == 3: index = 1 #replace the 2nd line with new content
-
- newlines[index] = label_asm
-
- if len(newlines) == 3 and newlines[2][-2:] == "$0":
- #get rid of the last incbin line if it is only including 0 bytes
- del newlines[2]
- #note that this has to be done after adding in the new asm
- newlines = "\n".join(line for line in newlines)
-
- #fix a lame error from somewhere
- newlines = newlines.replace("$x", "$")
-
- diff = generate_diff_insert(line_number, newlines)
- print diff
- print "... Applying diff."
-
- #write the diff to a file
- fh = open("temp.patch", "w")
- fh.write(diff)
- fh.close()
-
- #apply the patch
- os.system("patch ../pokered.asm temp.patch")
-
- #remove the patch
- os.system("rm temp.patch")
-
- #confirm it's working
- subprocess.check_call("cd ../; make clean; LC_CTYPE=UTF-8 make", shell=True)
-
-def get_all_map_blockdata():
- for map in extract_maps.map_headers.keys():
- extract_map_block_data(map)
-
-def insert_all_labels():
- "this is very buggy, don't use it"
- #limit = 200 #0:150
- for map in extract_maps.map_headers.keys():
- mapmap = extract_maps.map_headers[map]
- if mapmap["name"] == "FREEZE": continue #skip this one
- if "Ash's" in mapmap["name"]: continue
- if "Gary's" in mapmap["name"]: continue
- if not ("cat" in mapmap["name"]) and "copy" in mapmap["name"].lower(): continue #skip this one
-
- #bill's house breaks things?
- #if mapmap["name"] == "Bill's House": continue
- if mapmap["name"] == "Viridian Forest": continue
- #if mapmap["name"] == "Cerulean Mart": continue
- if mapmap["name"] == "Virdian Forest Exit": continue
- #if "copy" in mapmap["name"].lower(): continue #skip this one too..
-
- if mapmap["map_pointer"] in used_map_pointers: continue #skip for sure
-
- #reset asm
- analyze_incbins.asm = None
- analyze_incbins.incbin_lines = []
- analyze_incbins.processed_incbins = {}
-
- #reload asm each time
- load_asm()
-
- #check if this label is already in there
- cleaned_name, label_text, filename, full_filepath = make_labels(mapmap["name"])
- if label_text in "\n".join(line for line in analyze_incbins.asm):
- print "skipping (found label text in asm already)"
- used_map_pointers.append(mapmap["map_pointer"])
- continue #skip this one
-
- isolate_incbins()
- process_incbins()
-
- print "XYZ|" + mapmap["name"]
- insert_map_block_label(map)
-
- used_map_pointers.append(mapmap["map_pointer"])
-
-if __name__ == "__main__":
- #load map headers
- extract_maps.load_rom()
- extract_maps.load_map_pointers()
- extract_maps.read_all_map_headers()
-
- #load incbins
- load_asm()
- isolate_incbins()
- process_incbins()
-
- #extract_map_block_data(2)
- #get_all_map_blockdata()
-
- #insert_map_block_label(49)
- insert_all_labels()