Found attack data (maybe)

Build: OK
This commit is contained in:
Ogre 2023-09-07 02:25:02 +02:00
parent b9900a1ffb
commit 16fc7c310e
8 changed files with 131 additions and 48 deletions

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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;

33
tools/attacks.py Normal file
View File

@ -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)

View File

@ -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}:")

30
tools/ob.py Normal file
View File

@ -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)