2012-01-05 23:45:15 +00:00
|
|
|
from extract_maps import *
|
2012-01-18 07:46:27 +00:00
|
|
|
spacing = " "
|
2012-01-05 23:45:15 +00:00
|
|
|
load_rom()
|
|
|
|
load_map_pointers()
|
|
|
|
read_all_map_headers()
|
|
|
|
|
|
|
|
#provided by sawakita
|
|
|
|
constants = {
|
|
|
|
0x01: ["Hiro", ""],
|
|
|
|
0x02: ["Rival", ""],
|
|
|
|
0x03: ["Oak", ""],
|
|
|
|
0x04: ["blonde boy", ""],
|
2012-01-06 01:20:36 +00:00
|
|
|
0x05: ["machoke/slowbro OW", "machoke slowbro"],
|
2012-01-05 23:45:15 +00:00
|
|
|
0x06: ["blonde(horse-tail-hair) girl", "blonde ponytail girl"],
|
|
|
|
0x07: ["black-hair boy 1", "black hair boy 1"],
|
|
|
|
0x08: ["little kid (F)", "little girl"],
|
|
|
|
0x09: ["bird", ""],
|
|
|
|
0x0A: ["fat bald man", "fat bald guy"],
|
|
|
|
0x0B: ["monk", ""],
|
|
|
|
0x0C: ["black-hair boy 2/Brock", "black hair boy 2"],
|
|
|
|
0x0D: ["girl", ""],
|
|
|
|
0x0E: ["hiker/angry man", "hiker"],
|
|
|
|
0x0F: ["foulard woman", "foulard woman"],
|
|
|
|
0x10: ["rich(black-hat) man", "gentleman"],
|
|
|
|
0x11: ["sister", ""],
|
2012-01-06 01:20:36 +00:00
|
|
|
0x12: ["motorbiker", "biker"],
|
2012-01-05 23:45:15 +00:00
|
|
|
0x13: ["sailor", ""],
|
|
|
|
0x14: ["cook", ""],
|
|
|
|
0x15: ["sun-glasses guy (bike seller)", "sunglasses guy"],
|
|
|
|
0x16: ["mr. fuji", ""],
|
|
|
|
0x17: ["giovanni", ""],
|
|
|
|
0x18: ["rocket guy", "rocket grunt"],
|
|
|
|
0x19: ["medium", ""],
|
|
|
|
0x1A: ["waiter", ""],
|
|
|
|
0x1B: ["erika", ""],
|
2012-01-06 01:20:36 +00:00
|
|
|
0x1C: ["mother (geisha)", "mom geisha"],
|
2012-01-05 23:45:15 +00:00
|
|
|
0x1D: ["brunette girl", ""],
|
|
|
|
0x1E: ["lance", ""],
|
|
|
|
0x1F: ["oak's aide/scientist", "oak scientist aide"],
|
|
|
|
0x20: ["oak's aide", "oak aide"],
|
|
|
|
0x21: ["punk", ""],
|
|
|
|
0x22: ["swimmer", ""],
|
|
|
|
0x23: ["white player", ""],
|
|
|
|
0x24: ["gym helper", ""],
|
|
|
|
0x25: ["old (wo)man", "old person"],
|
|
|
|
0x26: ["mart guy", ""],
|
|
|
|
0x27: ["fisher", ""],
|
|
|
|
0x28: ["old woman/medium?", "old medium woman"],
|
|
|
|
0x29: ["nurse", ""],
|
|
|
|
0x2A: ["cable-club woman", "cable club woman"],
|
|
|
|
0x2B: ["Mr. Masterball?", "mr masterball"],
|
|
|
|
0x2C: ["person that gives Lapras", "lapras giver"],
|
|
|
|
0x2D: ["semi-bald fat guy", "balding fat guy"],
|
|
|
|
0x2E: ["black hat white beard man ", ""],
|
|
|
|
0x2F: ["fat man", ""],
|
|
|
|
0x30: ["dojo guy", ""],
|
|
|
|
0x31: ["guard (cop?)", "guard cop"],
|
|
|
|
0x32: ["cop (guard)", "cop guard"],
|
2012-01-06 01:20:36 +00:00
|
|
|
0x33: ["mom", ""],
|
2012-01-05 23:45:15 +00:00
|
|
|
0x34: ["semi-bald man", "balding guy"],
|
2012-01-06 01:20:36 +00:00
|
|
|
0x35: ["young girl", ""],
|
|
|
|
0x36: ["gameboy kid", ""],
|
|
|
|
0x37: ["gameboy kid copy", ""],
|
2012-01-05 23:45:15 +00:00
|
|
|
0x38: ["clefairy-like", "clefairylike"],
|
|
|
|
0x39: ["Agatha", ""],
|
|
|
|
0x3A: ["Bruno", ""],
|
|
|
|
0x3B: ["Lorelei", ""],
|
|
|
|
0x3C: ["seel", ""],
|
|
|
|
0x3D: ["ball", ""],
|
|
|
|
0x3E: ["omanyte", ""],
|
2012-01-06 01:20:36 +00:00
|
|
|
0x3F: ["boulder", ""],
|
|
|
|
0x40: ["paper sheet", ""],
|
2012-01-05 23:45:15 +00:00
|
|
|
0x41: ["book/map/dex", ""],
|
2012-01-06 01:20:36 +00:00
|
|
|
0x42: ["clipboard", ""],
|
|
|
|
0x43: ["snorlax", ""],
|
2012-01-06 01:26:18 +00:00
|
|
|
0x44: ["old amber copy", ""],
|
2012-01-06 01:20:36 +00:00
|
|
|
0x45: ["old amber", ""],
|
|
|
|
0x46: ["lying old man unused 1", ""],
|
|
|
|
0x47: ["lying old man unused 2", ""],
|
2012-01-05 23:45:15 +00:00
|
|
|
0x48: ["lying old man", ""],
|
|
|
|
}
|
|
|
|
|
|
|
|
icons = {}
|
|
|
|
unique_icons = set()
|
2012-01-06 01:20:36 +00:00
|
|
|
todo_sprites = {}
|
2012-01-06 01:26:18 +00:00
|
|
|
sprites = {}
|
2012-01-05 23:45:15 +00:00
|
|
|
|
|
|
|
def load_icons():
|
|
|
|
for map_id in map_headers:
|
|
|
|
if map_id in [0x0b, 0x45, 0x4b, 0x4e, 0x69, 0x6a, 0x6b, 0x6d, 0x6e, 0x6f, 0x70, 0x72, 0x73, 0x74, 0x75, 0xad, 0xcc, 0xcd, 0xce, 0xe7, 0xed, 0xee, 0xf1, 0xf2, 0xf3, 0xf4]: continue #skip
|
|
|
|
map = map_headers[map_id]
|
|
|
|
for thing_id in map["object_data"]["things"]:
|
|
|
|
thing = map["object_data"]["things"][thing_id]
|
|
|
|
pic = thing["picture_number"]
|
|
|
|
unique_icons.add(pic)
|
|
|
|
|
|
|
|
if not icons.has_key(pic): icons[pic] = []
|
|
|
|
|
|
|
|
alerter = None
|
|
|
|
if int(thing["y"])-4 > int(map["y"], 16)*2: alerter = True
|
|
|
|
if int(thing["x"])-4 > int(map["x"], 16)*2: alerter = True
|
|
|
|
|
|
|
|
icons[pic].append((map["name"] + " (id=" + str(map["id"]) + ")", thing["y"], thing["x"], alerter))
|
|
|
|
|
|
|
|
def print_appearances():
|
|
|
|
"""print appearances of each icon
|
|
|
|
see: http://diyhpl.us/~bryan/irc/pokered/sprite_appearances.txt
|
|
|
|
"""
|
|
|
|
output = ""
|
|
|
|
for icon_id in icons:
|
|
|
|
icon = icons[icon_id]
|
|
|
|
|
|
|
|
possible_name = ""
|
|
|
|
if icon_id in constants.keys():
|
|
|
|
possible_name = " (sawakita suggests: " + constants[icon_id][0] + ")"
|
|
|
|
|
|
|
|
output += "sprite " + hex(icon_id) + possible_name + ":\n"
|
|
|
|
for appearance in icon:
|
|
|
|
if appearance[3] != None: outside_alert = " !! OUTSIDE BOUNDS"
|
|
|
|
else: outside_alert = ""
|
|
|
|
output += spacing + ".. in " + appearance[0] + " at (" + str(appearance[1]) + ", " + str(appearance[2]) + ")" + outside_alert + "\n"
|
|
|
|
output += "\n"
|
|
|
|
|
|
|
|
print output
|
|
|
|
|
2012-01-06 01:20:36 +00:00
|
|
|
def insert_todo_sprites():
|
2012-01-05 23:45:15 +00:00
|
|
|
load_icons()
|
2012-01-06 01:20:36 +00:00
|
|
|
counter = 1
|
|
|
|
for icon in unique_icons:
|
|
|
|
if icon not in constants:
|
|
|
|
todo_sprites[icon] = counter
|
|
|
|
constants[icon] = None
|
|
|
|
counter += 1
|
|
|
|
|
|
|
|
def sprite_name_cleaner(badname):
|
|
|
|
output = "SPRITE_" + badname
|
|
|
|
output = output.replace(" ", "_")
|
|
|
|
output = output.replace("/", "_")
|
|
|
|
output = output.replace(".", "")
|
|
|
|
|
|
|
|
output = output.upper()
|
|
|
|
|
|
|
|
while output[-1] == "_":
|
|
|
|
output = output[:-1]
|
|
|
|
return output
|
|
|
|
|
|
|
|
def sprite_namer():
|
|
|
|
"makes up better constant names for each sprite"
|
|
|
|
insert_todo_sprites()
|
|
|
|
|
|
|
|
for sprite_id in constants:
|
|
|
|
suggestions = constants[sprite_id]
|
|
|
|
if suggestions == None:
|
|
|
|
sprites[sprite_id] = "SPRITE_TODO_" + str(todo_sprites[sprite_id])
|
|
|
|
continue #next please
|
|
|
|
|
|
|
|
original = suggestions[0]
|
|
|
|
if suggestions[1] != "": original = suggestions[1]
|
|
|
|
|
|
|
|
result = sprite_name_cleaner(original)
|
|
|
|
sprites[sprite_id] = result
|
|
|
|
|
2012-01-06 01:26:18 +00:00
|
|
|
def sprite_printer():
|
2012-01-06 01:20:36 +00:00
|
|
|
for key in sprites:
|
|
|
|
line_length = len(sprites[key]) + len(" EQU $") + 2
|
|
|
|
|
|
|
|
if line_length < 40:
|
|
|
|
extra = (40 - line_length) * " "
|
|
|
|
else: extra = ""
|
|
|
|
|
|
|
|
value = hex(key)[2:]
|
|
|
|
if len(value) == 1: value = "0" + value
|
|
|
|
|
|
|
|
print sprites[key] + extra + " EQU $" + value
|
|
|
|
|
2012-01-06 01:26:18 +00:00
|
|
|
sprite_namer()
|
2012-01-06 01:20:36 +00:00
|
|
|
if __name__ == "__main__":
|
|
|
|
#load_icons()
|
|
|
|
#print_appearances()
|
2012-01-06 01:26:18 +00:00
|
|
|
sprite_printer()
|
2012-01-05 23:45:15 +00:00
|
|
|
|