# OgreBattle util ELEMENT_NAME = { 0: "Physical", 1: "Wind", 2: "Flame", 3: "Earth", 4: "Water", 5: "Virtue", 6: "Bane", 7: "Unknown_7", 8: "Unknown_8", 9: "Unknown_9", 10: "Unknown_10", 11: "Unknown_11", 12: "Unknown_12", 13: "Unknown_13", 14: "Unknown_14", 15: "Unknown_15", 16: "Wind (Special)", 255: "Invalid" } def get_element_name(index): return ELEMENT_NAME[index] if index in ELEMENT_NAME else f"Unknown({index})" CLASS_NAME = { 0x01: "Soldier", 0x02: "Fighter", 0x03: "Lycanthrope", 0x04: "Amazon", 0x05: "Knight", 0x06: "Berserker", 0x07: "Fencer", 0x08: "Phalanx", 0x09: "BeastTamer", 0x0A: "DollMaster", 0x0B: "Ninja", 0x0C: "Wizard", 0x0D: "Archer", 0x0E: "DragonTamer", 0x0F: "Valkyrie", 0x10: "Witch", 0x11: "Sorceress", 0x12: "Cleric", 0x13: "Paladin", 0x14: "Dragoon", 0x15: "BlackKnight", 0x16: "SwordMaster", 0x17: "Cataphract", 0x18: "BeastMaster", 0x19: "Enchanter", 0x1A: "NinjaMaster", 0x1B: "Archmage", 0x1C: "Diana", 0x1D: "DragonMaster", 0x1E: "Freya", 0x1F: "Siren", 0x20: "Priest", 0x21: "Princess", 0x22: "Centurion", 0x23: "Centurion", 0x24: "AngelKnight", 0x25: "Seraph", 0x26: "Lich", 0x27: "Hawkman", 0x28: "Vultan", 0x29: "Raven", 0x2A: "Werewolf", 0x2B: "Vampire", 0x2C: "Vampire", 0x2D: "Zombie", 0x2E: "Zombie", 0x2F: "Skeleton", 0x30: "Ghost", 0x31: "Gorgon", 0x32: "Pumpkinhead", 0x33: "Faerie", 0x34: "Gremlin", 0x35: "Goblin", 0x36: "Saturos", 0x37: "Ogre", 0x38: "YoungDragon", 0x39: "ThunderDragon", 0x3A: "RedDragon", 0x3B: "EarthDragon", 0x3C: "BlueDragon", 0x3D: "PlatinumDragon", 0x3E: "BlackDragon", 0x3F: "Quetzalcoatl", 0x40: "Flarebrass", 0x41: "AhziDahaka", 0x42: "Hydra", 0x43: "Bahamut", 0x44: "Tiamat", 0x45: "Wyrm", 0x46: "Wyvern", 0x47: "Griffin", 0x48: "Opinincus", 0x49: "Cockatrice", 0x4A: "Sphinx", 0x4B: "Hellhound", 0x4C: "Cerberus", 0x4D: "Giant", 0x4E: "Golem", 0x4F: "StoneGolem", 0x50: "BaldrGolem", 0x51: "Gladiator", 0x52: "Vanguard", 0x53: "General", 0x54: "Gladiator", 0x55: "Warrior", 0x56: "BlazeKnight", 0x57: "RuneKnight", 0x58: "Lord", 0x59: "General", 0x5A: "BeastMaster", 0x5B: "Priest", 0x5C: "Warlock", 0x5D: "Grappler", 0x5E: "Centurion", 0x5F: "Lycanthrope", 0x60: "Werewolf", 0x61: "Solidblade", 0x62: "Overlord", 0x63: "DarkPrince", 0x64: "SpecialClass", 0x65: "FlailMonarch", 0x66: "DeathTemplar", 0x67: "TempleCommander", 0x68: "TempleCommander", 0x69: "TempleCommander", 0x6A: "TempleCommander", 0x6B: "TempleCommander", 0x6C: "Vanity", 0x6D: "Vanity", 0x6E: "Vanity", 0x6F: "SuperiorKnight", 0x70: "SuperiorKnight", 0x71: "Gatekeeper", 0x72: "Grappler", 0x73: "KnightTemplar", 0x74: "Daemon", 0x75: "Phalanx", 0x76: "Berserker", 0x77: "Cleric", 0x78: "Archer", 0x79: "Hawkman", 0x7A: "Siren", 0x7B: "Enchanter", 0x7C: "BlackKnight", 0x7D: "SpecialClass", 0x7E: "SpecialClass", 0x7F: "SpecialClass", 0x80: "SpecialClass", 0x81: "SpecialClass", 0x82: "Barkeep", 0x83: "ElderlyMan", 0x84: "Commoner", 0x85: "Commoner", 0x86: "Danika", 0x87: "Danika_01", 0x88: "Danika_02", 0x89: "Archer", 0x8A: "Berserker", 0x8B: "BeastTamer", 0x8C: "Valkyrie", 0x8D: "Wizard", 0x8E: "Phalanx", 0x8F: "Berserker", 0x90: "Knight", 0x91: "NinjaMaster", 0x92: "DollMaster", 0x93: "KnightTemplar", 0x94: "Archmage", 0x95: "Priest", 0x96: "BlackKnight", 0x97: "DragonMaster", 0x98: "Siren", 0x99: "Saturos", 0x9A: "SwordMaster", 0x9B: "KnightTemplar", 0x9C: "Dragoon", 0x9D: "Gorgon", 0x9E: "Lich", 0x9F: "Daemon", 0xA0: "Plaladin", 0xA1: "Danika", 0xA2: "Paladin", 0xA3: "Witch", 0xA4: "DeathBahamut", } def read_rom(start, end): chunksize = end - start with open("baserom.z64", "rb") as f: f.seek(start) return f.read(chunksize)