mirror of
https://github.com/pret/pokered.git
synced 2024-10-23 15:08:23 +00:00
somewhat buggy TX_FAR pretty printer
hg-commit-id: 94a023e4e37e
This commit is contained in:
parent
6bad9c837c
commit
d0be12ead0
2 changed files with 194 additions and 2 deletions
|
@ -46,7 +46,7 @@ def process_00_subcommands(start_address, end_address):
|
||||||
current_line = []
|
current_line = []
|
||||||
for pbyte in subsection:
|
for pbyte in subsection:
|
||||||
byte = ord(pbyte)
|
byte = ord(pbyte)
|
||||||
current_line.append(hex(byte))
|
current_line.append(byte)
|
||||||
if byte == 0x4f or byte == 0x51 or byte == 0x55:
|
if byte == 0x4f or byte == 0x51 or byte == 0x55:
|
||||||
lines[line_count] = current_line
|
lines[line_count] = current_line
|
||||||
current_line = []
|
current_line = []
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
#author: Bryan Bishop <kanzure@gmail.com>
|
#author: Bryan Bishop <kanzure@gmail.com>
|
||||||
#date: 2012-01-02
|
#date: 2012-01-02
|
||||||
#purpose: dump asm for each map header
|
#purpose: dump asm for each map header
|
||||||
|
@ -7,9 +8,11 @@ import extract_maps
|
||||||
import sprite_helper
|
import sprite_helper
|
||||||
import random
|
import random
|
||||||
import string
|
import string
|
||||||
|
import analyze_texts #hopefully not a dependency loop
|
||||||
|
|
||||||
base = 16
|
base = 16
|
||||||
spacing = " "
|
spacing = " "
|
||||||
|
all_texts = None
|
||||||
|
|
||||||
#map constants
|
#map constants
|
||||||
map_constants = [
|
map_constants = [
|
||||||
|
@ -245,6 +248,112 @@ for constant in map_constants:
|
||||||
map_constants = temp
|
map_constants = temp
|
||||||
del temp
|
del temp
|
||||||
|
|
||||||
|
#these appear outside of quotes
|
||||||
|
constant_abbreviation_bytes = {
|
||||||
|
0x4A: "Char4A",
|
||||||
|
0x52: "Char52",
|
||||||
|
0x53: "Char53",
|
||||||
|
0x54: "Char54",
|
||||||
|
0x56: "Char56",
|
||||||
|
0x5B: "Char5B",
|
||||||
|
0x5C: "Char5C",
|
||||||
|
0x5D: "Char5D",
|
||||||
|
0x5E: "Char5E",
|
||||||
|
}
|
||||||
|
|
||||||
|
#these appear in quotes
|
||||||
|
char_conversion = [
|
||||||
|
(" ", 0x7F),
|
||||||
|
("A", 0x80),
|
||||||
|
("B", 0x81),
|
||||||
|
("C", 0x82),
|
||||||
|
("D", 0x83),
|
||||||
|
("E", 0x84),
|
||||||
|
("F", 0x85),
|
||||||
|
("G", 0x86),
|
||||||
|
("H", 0x87),
|
||||||
|
("I", 0x88),
|
||||||
|
("J", 0x89),
|
||||||
|
("K", 0x8A),
|
||||||
|
("L", 0x8B),
|
||||||
|
("M", 0x8C),
|
||||||
|
("N", 0x8D),
|
||||||
|
("O", 0x8E),
|
||||||
|
("P", 0x8F),
|
||||||
|
("Q", 0x90),
|
||||||
|
("R", 0x91),
|
||||||
|
("S", 0x92),
|
||||||
|
("T", 0x93),
|
||||||
|
("U", 0x94),
|
||||||
|
("V", 0x95),
|
||||||
|
("W", 0x96),
|
||||||
|
("X", 0x97),
|
||||||
|
("Y", 0x98),
|
||||||
|
("Z", 0x99),
|
||||||
|
("(", 0x9A),
|
||||||
|
(")", 0x9B),
|
||||||
|
(":", 0x9C),
|
||||||
|
(";", 0x9D),
|
||||||
|
("[", 0x9E),
|
||||||
|
("]", 0x9F),
|
||||||
|
("a", 0xA0),
|
||||||
|
("b", 0xA1),
|
||||||
|
("c", 0xA2),
|
||||||
|
("d", 0xA3),
|
||||||
|
("e", 0xA4),
|
||||||
|
("f", 0xA5),
|
||||||
|
("g", 0xA6),
|
||||||
|
("h", 0xA7),
|
||||||
|
("i", 0xA8),
|
||||||
|
("j", 0xA9),
|
||||||
|
("k", 0xAA),
|
||||||
|
("l", 0xAB),
|
||||||
|
("m", 0xAC),
|
||||||
|
("n", 0xAD),
|
||||||
|
("o", 0xAE),
|
||||||
|
("p", 0xAF),
|
||||||
|
("q", 0xB0),
|
||||||
|
("r", 0xB1),
|
||||||
|
("s", 0xB2),
|
||||||
|
("t", 0xB3),
|
||||||
|
("u", 0xB4),
|
||||||
|
("v", 0xB5),
|
||||||
|
("w", 0xB6),
|
||||||
|
("x", 0xB7),
|
||||||
|
("y", 0xB8),
|
||||||
|
("z", 0xB9),
|
||||||
|
("é", 0xBA),
|
||||||
|
("'s", 0xBD),
|
||||||
|
("'t", 0xBE),
|
||||||
|
("'", 0xE0),
|
||||||
|
("-", 0xE3),
|
||||||
|
("?", 0xE6),
|
||||||
|
("!", 0xE7),
|
||||||
|
(".", 0xE8),
|
||||||
|
("♂", 0xEF),
|
||||||
|
("/", 0xF3),
|
||||||
|
(",", 0xF4),
|
||||||
|
("♀", 0xF5),
|
||||||
|
("0", 0xF6),
|
||||||
|
("1", 0xF7),
|
||||||
|
("2", 0xF8),
|
||||||
|
("3", 0xF9),
|
||||||
|
("4", 0xFA),
|
||||||
|
("5", 0xFB),
|
||||||
|
("6", 0xFC),
|
||||||
|
("7", 0xFD),
|
||||||
|
("8", 0xFE),
|
||||||
|
("9", 0xFF)]
|
||||||
|
#these appear in quotes
|
||||||
|
txt_bytes = {
|
||||||
|
0x50: "@",
|
||||||
|
0x54: "#",
|
||||||
|
0x75: "…",
|
||||||
|
}
|
||||||
|
for item in char_conversion:
|
||||||
|
txt_bytes[item[1]] = item[0]
|
||||||
|
del char_conversion
|
||||||
|
|
||||||
#this was originally for renaming freeze maps for a unique name
|
#this was originally for renaming freeze maps for a unique name
|
||||||
def random_hash():
|
def random_hash():
|
||||||
available_chars = string.hexdigits[:16]
|
available_chars = string.hexdigits[:16]
|
||||||
|
@ -517,6 +626,82 @@ def object_data_pretty_printer(map_id):
|
||||||
output += "\n"
|
output += "\n"
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
def find_all_tx_fars():
|
||||||
|
global all_texts
|
||||||
|
tx_fars = [] #[map_id, text_id, text_pointer, tx_far_pointer, tx_far_start_address, TX_FAR]
|
||||||
|
for map_id in all_texts:
|
||||||
|
map2 = all_texts[map_id]
|
||||||
|
for text_id in map2.keys():
|
||||||
|
text = map2[text_id]
|
||||||
|
for command_id in text.keys():
|
||||||
|
command = text[command_id]
|
||||||
|
if "TX_FAR" in command.keys():
|
||||||
|
TX_FAR = command["TX_FAR"]
|
||||||
|
if TX_FAR[0]["type"] == 0x0:
|
||||||
|
tx_fars.append([map_id, text_id, analyze_texts.get_text_pointer(int(extract_maps.map_headers[map_id]["texts_pointer"], 16), text_id), TX_FAR[0]["start_address"], TX_FAR])
|
||||||
|
return tx_fars
|
||||||
|
|
||||||
|
def print_tx_far(tx_far):
|
||||||
|
"pretty output for a tx_far"
|
||||||
|
map_id = tx_far[0]
|
||||||
|
map2 = extract_maps.map_headers[map_id]
|
||||||
|
text_id = tx_far[1]
|
||||||
|
text_pointer = tx_far[2]
|
||||||
|
tx_far_start_address = tx_far[3]
|
||||||
|
text_far = tx_far[4]
|
||||||
|
lines = text_far[0]["lines"]
|
||||||
|
label = "_" + map_name_cleaner(map2["name"], None)[:-2] + "Text" + str(text_id)
|
||||||
|
|
||||||
|
output = ""
|
||||||
|
output += label + ":\n"
|
||||||
|
first = True
|
||||||
|
for line_id in lines:
|
||||||
|
line = lines[line_id]
|
||||||
|
output += spacing + "db "
|
||||||
|
if first:
|
||||||
|
output += "$0, "
|
||||||
|
first = False
|
||||||
|
|
||||||
|
quotes_open = False
|
||||||
|
first_byte = True
|
||||||
|
byte_count = 0
|
||||||
|
for byte in line:
|
||||||
|
if byte in txt_bytes:
|
||||||
|
if not quotes_open and not first_byte: #start text
|
||||||
|
output += ", \""
|
||||||
|
quotes_open = True
|
||||||
|
first_byte = False
|
||||||
|
if not quotes_open and first_byte: #start text
|
||||||
|
output += "\""
|
||||||
|
quotes_open = True
|
||||||
|
output += txt_bytes[byte]
|
||||||
|
elif byte in constant_abbreviation_bytes:
|
||||||
|
if quotes_open:
|
||||||
|
output += "\""
|
||||||
|
quotes_open = False
|
||||||
|
output += ", " + constant_abbreviation_bytes[byte]
|
||||||
|
else:
|
||||||
|
if quotes_open:
|
||||||
|
output += "\""
|
||||||
|
quotes_open = False
|
||||||
|
output += ", $" + hex(byte)[2:]
|
||||||
|
|
||||||
|
#add a comma unless it's the end of the line
|
||||||
|
if byte_count+1 != len(line):
|
||||||
|
output += ", "
|
||||||
|
|
||||||
|
byte_count += 1
|
||||||
|
#close final quotes
|
||||||
|
if quotes_open:
|
||||||
|
output += "\""
|
||||||
|
quotes_open = False
|
||||||
|
|
||||||
|
output += "\n"
|
||||||
|
|
||||||
|
#TODO: add $50 to the end of this
|
||||||
|
output += "\n"
|
||||||
|
return output
|
||||||
|
|
||||||
def print_all_headers():
|
def print_all_headers():
|
||||||
maps = []
|
maps = []
|
||||||
for map in extract_maps.map_headers:
|
for map in extract_maps.map_headers:
|
||||||
|
@ -538,8 +723,15 @@ if __name__ == "__main__":
|
||||||
#load map headers into memory
|
#load map headers into memory
|
||||||
extract_maps.read_all_map_headers()
|
extract_maps.read_all_map_headers()
|
||||||
|
|
||||||
|
#load texts
|
||||||
|
all_texts = analyze_texts.analyze_texts()
|
||||||
|
|
||||||
#print them out
|
#print them out
|
||||||
#print_all_headers()
|
#print_all_headers()
|
||||||
|
|
||||||
#print out only the object data for pallet town (map 0)
|
#print out only the object data for pallet town (map 0)
|
||||||
print object_data_pretty_printer(0)
|
#print object_data_pretty_printer(0)
|
||||||
|
|
||||||
|
tx_fars = find_all_tx_fars()
|
||||||
|
for entry in tx_fars:
|
||||||
|
print print_tx_far(entry)
|
||||||
|
|
Loading…
Reference in a new issue