From 16fc7c310e5c429a016c96c37663bbb4e4523c3c Mon Sep 17 00:00:00 2001 From: Ogre Date: Thu, 7 Sep 2023 02:25:02 +0200 Subject: [PATCH] Found attack data (maybe) Build: OK --- include/common.h | 18 ++++++++++++++++ splat.yaml | 56 +++++++++++++++++++++++++----------------------- src/2DE10.c | 2 +- src/item.c | 8 ++++++- symbol_addrs.txt | 13 ++++++++++- tools/attacks.py | 33 ++++++++++++++++++++++++++++ tools/items.py | 19 +--------------- tools/ob.py | 30 ++++++++++++++++++++++++++ 8 files changed, 131 insertions(+), 48 deletions(-) create mode 100644 tools/attacks.py create mode 100644 tools/ob.py diff --git a/include/common.h b/include/common.h index 4b4b09b..2ef6548 100644 --- a/include/common.h +++ b/include/common.h @@ -296,4 +296,22 @@ extern u8 D_800A872C; extern CharacterSlot CHARACTER_SLOT_MAGNUS[]; +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; +} MaybeAttackData; // size:0x10 + +extern MaybeAttackData __MAYBE_ATTACK_DATA[]; + #endif \ No newline at end of file diff --git a/splat.yaml b/splat.yaml index e5b1e93..cfafa88 100644 --- a/splat.yaml +++ b/splat.yaml @@ -832,24 +832,24 @@ segments: symbol_name_format: overlay_177ED0_$VRAM_$ROM exclusive_ram_id: test_overlapping subsegments: - - [0x177ED0, bin] - # - [0x1782C0, asm] - # - [0x178450, asm] + - [0x177ED0, asm] + - [0x1782C0, asm] + - [0x178450, asm] - # - [0x17BCD0, rodata] - # - [0x17BCE0, rodata] - # - [0x17C500, rodata] - # - [0x17CC20, rodata] - # - [0x17CCE0, rodata] - # - [0x17F130, rodata] - # - [0x17F460, rodata] - # - [0x17F7F0, rodata] - # - [0x17F8D0, rodata] - # - [0x17F8F0, rodata] - # - [0x17F900, rodata] - # - [0x17F910, rodata] + - [0x17BCD0, rodata] + - [0x17BCE0, rodata] + - [0x17C500, rodata] + - [0x17CC20, rodata] + - [0x17CCE0, rodata] + - [0x17F130, rodata] + - [0x17F460, rodata] + - [0x17F7F0, rodata] + - [0x17F8D0, rodata] + - [0x17F8F0, rodata] + - [0x17F900, rodata] + - [0x17F910, rodata] - - { start: 0x17F9C0, type: bss, vram: 0x8021CA70 } + # - { start: 0x17F9C0, type: bss, vram: 0x8021CA70 } - [0x17F9C0, bin] # Overlay here @@ -869,19 +869,21 @@ segments: # Overlay here - [0x1A9290, bin] - # - type: code - # dir: overlay_1A9290 - # start: 0x1A9290 - # vram: 0x80214F80 - # bss_size: 0x90 - # symbol_name_format: overlay_1A9290_$VRAM_$ROM - # exclusive_ram_id: test_overlapping - # subsegments: - # - [0x1A9290, asm] + - type: code + dir: overlay_1A9290 + start: 0x1A9290 + vram: 0x80214F80 + bss_size: 0x90 + symbol_name_format: overlay_1A9290_$VRAM_$ROM + exclusive_ram_id: test_overlapping + subsegments: + - [0x1A9290, asm] + - [0x1B1510, asm] - # - [0x1B2270, data] + - [0x1B2270, rodata] + - [0x1B2570, rodata] - # - { start: 0x1B2670, type: bss, vram: 0x8021E360 } + # - { start: 0x1B2670, type: bss, vram: 0x8021E360 } - [0x1B2670, bin] # Overlay here diff --git a/src/2DE10.c b/src/2DE10.c index 9c6e4db..4c093ab 100644 --- a/src/2DE10.c +++ b/src/2DE10.c @@ -41,5 +41,5 @@ INCLUDE_ASM(const s32, "2DE10", __calls_romCopy_8009DD38); INCLUDE_ASM(const s32, "2DE10", __calls_romCopy_8009DE40); -INCLUDE_ASM(const s32, "2DE10", __calls_romCopy_8009DF48); +INCLUDE_ASM(const s32, "2DE10", __load_and_unpack); diff --git a/src/item.c b/src/item.c index fb29627..4f8d696 100644 --- a/src/item.c +++ b/src/item.c @@ -104,7 +104,13 @@ INCLUDE_ASM(const s32, "item", func_8016E338); INCLUDE_ASM(const s32, "item", func_8016E440); -INCLUDE_ASM(const s32, "item", func_8016E458); +// INCLUDE_ASM(const s32, "item", func_8016E458); + +/* 44358 8016E458 */ +u8 func_8016E458(u8 arg0) { + return __MAYBE_ATTACK_DATA[arg0].field_0x0; +} + INCLUDE_ASM(const s32, "item", func_8016E470); diff --git a/symbol_addrs.txt b/symbol_addrs.txt index 888df02..6d50b67 100644 --- a/symbol_addrs.txt +++ b/symbol_addrs.txt @@ -1,4 +1,15 @@ +__MAYBE_ATTACK_DATA = 0x8018AA80; // rom:0x60980 size:0x10 +STR_LEVEL_UP = 0x8021DFCC; // rom:0x1B22DC +STR_MAXIMUM_HP_UP = 0x8021DFD8; // rom:0x1B22E8 +STR_STR_UP = 0x8021DFE8; // rom:0x1B22F8 +STR_VIT_UP = 0x8021DFF0; // rom:0x1B2300 +STR_INT_UP = 0x8021DFF8; // rom:0x1B2308 +STR_MEN_UP = 0x8021E000; // rom:0x1B2310 +STR_CANNOT_BE_USED = 0x8021DF80; // rom:0x1B2290 +STR_PETRIFICATION = 0x8021DFA0; // rom:0x1B22B0 + +STR_PHYSICAL = 0x80187660; // rom:0x5D560 type:asciz ITEM_DATA = 0x8018C410; // size:0x20 @@ -356,7 +367,7 @@ __calls_romCopy_8009DAF4 = 0x8009DAF4; __calls_romCopy_8009DBB8 = 0x8009DBB8; __calls_romCopy_8009DD38 = 0x8009DD38; __calls_romCopy_8009DE40 = 0x8009DE40; -__calls_romCopy_8009DF48 = 0x8009DF48; +__load_and_unpack = 0x8009DF48; //__calls_romCopy_800EA488 = 0x800EA488; __start_thread_800BE1C0 = 0x8008B0B0; diff --git a/tools/attacks.py b/tools/attacks.py new file mode 100644 index 0000000..ccc48dc --- /dev/null +++ b/tools/attacks.py @@ -0,0 +1,33 @@ +from ob import read_rom, ELEMENT_NAMES + +from struct import unpack_from + +def read_attack(index): + ATTACK_SIZE = 0x10 + ATTACK_FORMAT = '>BBBBBBBBBBBBI' + + attack_start = 0x60980 + (index * ATTACK_SIZE) + attack_end = attack_start + ATTACK_SIZE + + return unpack_from(ATTACK_FORMAT, read_rom(attack_start, attack_end)) + +length = 0x6136B - 0x60980 + +for i in range(0, 30): + 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 = read_rom(name_addr_diff, name_addr_diff + 32).split(b'\0', 1)[0] + + print(ELEMENT_NAMES[element]) + print(name) + print(field_0x0) + print(field_0x2) + print(field_0x3) + print(field_0x4) + print(field_0x5) \ No newline at end of file diff --git a/tools/items.py b/tools/items.py index e9f241f..2e4aa77 100644 --- a/tools/items.py +++ b/tools/items.py @@ -1,9 +1,4 @@ -def read_rom(start, end): - chunksize = end - start - with open("baserom.z64", "rb") as f: - f.seek(start) - return f.read(chunksize) - +from ob import read_rom, ELEMENT_NAMES from struct import unpack_from @@ -15,18 +10,6 @@ def read_item(index): item_end = item_start + ITEM_SIZE return unpack_from(ITEM_FORMAT, read_rom(item_start, item_end)) - -ELEMENT_NAMES = { - 0: "Physical", - 1: "Wind", - 2: "Flame", - 3: "Earth", - 4: "Water", - 5: "Virtue", - 6: "Bane", - - 255: "Invalid" -} for i in range(0, 130): # print(f"Item {i}:") diff --git a/tools/ob.py b/tools/ob.py new file mode 100644 index 0000000..fa3e17c --- /dev/null +++ b/tools/ob.py @@ -0,0 +1,30 @@ +# OgreBattle util + +ELEMENT_NAMES = { + 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", + + 255: "Invalid" +} + +def read_rom(start, end): + chunksize = end - start + with open("baserom.z64", "rb") as f: + f.seek(start) + return f.read(chunksize) \ No newline at end of file