33 lines
1020 B
Python
33 lines
1020 B
Python
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 = 159
|
|
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} = 0x{name_vaddr:X}")
|
|
|
|
print(f"({i}):\t", (field_0x0, element, field_0x2, field_0x3, field_0x4, field_0x5,
|
|
field_0x6, field_0x7, field_0x8, field_0x9, field_0xa,
|
|
field_0xb)) |