from ob import read_rom, ELEMENT_NAME from struct import unpack_from NAME_VADDR_START = 0x8016AF80 NAME_ADDR_START = 0x40E80 ABILITY_DATA = 0x6097C def read_ability(index): ABILITY_SIZE = 0x10 ABILITY_FORMAT = '>IBBBBBBBBBBBB' ability_start = ABILITY_DATA + (index * ABILITY_SIZE) ability_end = ability_start + ABILITY_SIZE return unpack_from(ABILITY_FORMAT, read_rom(ability_start, ability_end)) MAX_ABILITIES = 162 for i in range(1, MAX_ABILITIES): (name_vaddr, field_0x0, element, field_0x2, field_0x3, field_0x4, field_0x5, field_0x6, field_0x7, field_0x8, field_0x9, field_0xa, field_0xb) = read_ability(i) name_addr_diff = (name_vaddr - NAME_VADDR_START) + NAME_ADDR_START name = read_rom(name_addr_diff, name_addr_diff + 32).split(b'\0', 1)[0] print(f"{name} ({i}):\t", (field_0x0, field_0x2, field_0x3, field_0x4, field_0x5, field_0x6, field_0x7, field_0x8, field_0x9, field_0xa, field_0xb))