89 lines
2.2 KiB
Python
89 lines
2.2 KiB
Python
from ob import read_rom, ELEMENT_NAME, get_element_name
|
|
|
|
from struct import unpack_from, calcsize
|
|
|
|
NAME_VADDR_START = 0x8016AF80
|
|
NAME_ADDR_START = 0x40E80
|
|
|
|
ITEM_FORMAT = '>IBBBBHbbbbbbbbbbbbbBBBBBBBBB'
|
|
|
|
def read_item(index):
|
|
ITEM_SIZE = 0x20
|
|
|
|
item_start = 0x6230C + (index * ITEM_SIZE)
|
|
item_end = item_start + ITEM_SIZE
|
|
|
|
return unpack_from(ITEM_FORMAT, read_rom(item_start, item_end))
|
|
|
|
print(f"Length: 0x{calcsize(ITEM_FORMAT):X}")
|
|
|
|
ITEM_TYPE_NAME = {
|
|
0: "None",
|
|
1: "Sword",
|
|
2: "Greatsword",
|
|
3: "Thrusting Sword",
|
|
4: "1-Handed Hammer",
|
|
5: "2-Handed Hammer",
|
|
6: "Short Spear",
|
|
7: "Spear",
|
|
8: "Whip",
|
|
9: "Claw",
|
|
10: "Bow",
|
|
11: "Mace",
|
|
12: "Staff",
|
|
13: "Doll",
|
|
14: "Small Shield",
|
|
15: "Shield",
|
|
16: "Light Armor",
|
|
17: "Armor",
|
|
18: "Full Body Armor",
|
|
19: "Robe",
|
|
20: "Garment",
|
|
21: "Helm",
|
|
22: "Headgear",
|
|
23: "Spellbook",
|
|
24: "Fan",
|
|
25: "Accessory",
|
|
|
|
255: "Invalid"
|
|
}
|
|
|
|
for i in range(0, 279):
|
|
# print(f"Item {i}:")
|
|
(name_vaddr, item_type, element, field_0x2, field_0x3, field_0x4,
|
|
strength, intelligence, agility, dexterity, vitality,
|
|
mem, *rest) = read_item(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]
|
|
|
|
(field_0xc, res_strike, res_wind, res_fire, res_earth, res_water,
|
|
res_holy, res_dark, *rest) = rest
|
|
|
|
rest = (field_0xc, *rest)
|
|
|
|
type_str = ITEM_TYPE_NAME[item_type] if item_type in ITEM_TYPE_NAME else f"Unknown({item_type})"
|
|
|
|
print(f"Name: {name} ({i})")
|
|
print(f"Type: {type_str}")
|
|
print(f"Element: {get_element_name(element)}")
|
|
print(f"STR: \t{strength} \tMEN: \t{mem}")
|
|
print(f"VIT: \t{vitality} \tAGI: \t{agility}")
|
|
print(f"INT: \t{intelligence} \tDEX: \t{dexterity}")
|
|
print()
|
|
print(f"RES STRIKE: \t{res_strike}")
|
|
print(f"RES WIND: \t{res_wind}")
|
|
print(f"RES FIRE: \t{res_fire}")
|
|
print(f"RES EARTH: \t{res_earth}")
|
|
print(f"RES WATER: \t{res_water}")
|
|
print(f"RES HOLY: \t{res_holy}")
|
|
print(f"RES DARK: \t{res_dark}")
|
|
|
|
for val in rest:
|
|
print(f"{val:X}")
|
|
|
|
print()
|
|
print("-------------------------------------------")
|
|
print()
|
|
|