From 0003efebb166be3460bb50da269508485ef34c57 Mon Sep 17 00:00:00 2001 From: Ogre Date: Mon, 11 Sep 2023 01:53:42 +0200 Subject: [PATCH] Corrected AbilityData --- include/common.h | 26 +++++++++++++------------- src/item.c | 2 +- symbol_addrs.txt | 2 +- tools/attacks.py | 7 ++++--- tools/items.py | 9 ++++++++- tools/ob.py | 1 + 6 files changed, 28 insertions(+), 19 deletions(-) diff --git a/include/common.h b/include/common.h index f40bed0..7da460e 100644 --- a/include/common.h +++ b/include/common.h @@ -297,19 +297,19 @@ extern u8 D_800A872C; extern CharacterSlot CHARACTER_SLOT[]; typedef struct { - /* 0x00 */ u8 field_0x0; - /* 0x01 */ Element element; - /* 0x02 */ u8 field_0x2; - /* 0x03 */ u8 field_0x3; - /* 0x04 */ u8 field_0x4; - /* 0x05 */ u8 field_0x5; - /* 0x06 */ u8 field_0x6; - /* 0x07 */ u8 field_0x7; - /* 0x08 */ u8 field_0x8; - /* 0x09 */ u8 field_0x9; - /* 0x0a */ u8 field_0xa; - /* 0x0b */ u8 field_0xb; - /* 0x0c */ const char* name; + /* 0x00 */ const char* name; + /* 0x04 */ u8 field_0x0; + /* 0x05 */ Element element; + /* 0x06 */ u8 field_0x2; + /* 0x07 */ u8 field_0x3; + /* 0x08 */ u8 field_0x4; + /* 0x09 */ u8 field_0x5; + /* 0x0a */ u8 field_0x6; + /* 0x0b */ u8 field_0x7; + /* 0x0c */ u8 field_0x8; + /* 0x0d */ u8 field_0x9; + /* 0x0e */ u8 field_0xa; + /* 0x0f */ u8 field_0xb; } AbilityData; // size:0x10 extern AbilityData ABILITY_DATA[]; diff --git a/src/item.c b/src/item.c index ab41e9f..5df9003 100644 --- a/src/item.c +++ b/src/item.c @@ -165,7 +165,7 @@ char* item_get_name(u16 index) { } /* 454C8 8016F5C8 */ -u8 item_get_type(u16 index) { +ItemType item_get_type(u16 index) { return ITEM_DATA[index].type; } diff --git a/symbol_addrs.txt b/symbol_addrs.txt index fa96031..f394584 100644 --- a/symbol_addrs.txt +++ b/symbol_addrs.txt @@ -16,7 +16,7 @@ STR_PETRIFICATION = 0x8021DFA0; // rom:0x1B22B0 STR_PHYSICAL = 0x80187660; // rom:0x5D560 type:asciz -ABILITY_DATA = 0x8018AA80; // rom:0x60980 size:0x10 +ABILITY_DATA = 0x8018AA7C; // rom:0x6097C size:0x10 ability_get_element = 0x8016E470; ITEM_DATA = 0x8018C40C; // size:0x20 diff --git a/tools/attacks.py b/tools/attacks.py index 16bbf0f..b9bf688 100644 --- a/tools/attacks.py +++ b/tools/attacks.py @@ -2,6 +2,9 @@ from ob import read_rom, ELEMENT_NAME from struct import unpack_from +NAME_VADDR_START = 0x8016AF80 +NAME_ADDR_START = 0x40E80 + def read_attack(index): ATTACK_SIZE = 0x10 ATTACK_FORMAT = '>BBBBBBBBBBBBI' @@ -14,14 +17,12 @@ def read_attack(index): length = 0x6136B - 0x60980 for i in range(0, 130): - name_vaddr_start = 0x801876FC - name_addr_start = 0x5D5FC (field_0x0, element, field_0x2, field_0x3, field_0x4, field_0x5, field_0x6, field_0x7, field_0x8, field_0x9, field_0xa, field_0xb, name_vaddr) = read_attack(i) - name_addr_diff = (name_vaddr - name_vaddr_start) + name_addr_start + 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}:\t", (field_0x0, field_0x2, field_0x3, field_0x4, field_0x5, diff --git a/tools/items.py b/tools/items.py index 5487c43..3f29102 100644 --- a/tools/items.py +++ b/tools/items.py @@ -39,10 +39,15 @@ ITEM_TYPE_NAME = { 19: "Robe", 20: "Garment", 21: "Helm", + 22: "Headgear", + 23: "Spellbook", 24: "Fan", + 25: "Accessory", + + 255: "Invalid" } -for i in range(1, 276): +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, @@ -53,6 +58,8 @@ for i in range(1, 276): (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})" diff --git a/tools/ob.py b/tools/ob.py index cd13d23..532e535 100644 --- a/tools/ob.py +++ b/tools/ob.py @@ -19,6 +19,7 @@ ELEMENT_NAME = { 14: "Unknown_14", 15: "Unknown_15", + 16: "Wind (Special)", 255: "Invalid" }