From d5f043ed1c670cd7399ef5d91651fd892723e24c Mon Sep 17 00:00:00 2001 From: Ogre Date: Wed, 6 Sep 2023 15:00:27 +0200 Subject: [PATCH] Identified more symbols Decompiled more functions Improved .gitignore Before I do something stupid... --- .gitignore | 5 + include/character.h | 4 +- include/common.h | 44 +++++++ splat.yaml | 2 +- src/overlays/overlay1/43100.c | 238 ++++++++++++++++++++++++++++++++++ symbol_addrs.txt | 20 ++- 6 files changed, 308 insertions(+), 5 deletions(-) create mode 100644 src/overlays/overlay1/43100.c diff --git a/.gitignore b/.gitignore index 59d2f16..5104ee2 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,8 @@ build .vscode tools/build + +ogrebattle64.ld +undefined_funcs_auto.txt +undefined_syms_auto.txt +ctx.c diff --git a/include/character.h b/include/character.h index 773248a..8f839da 100644 --- a/include/character.h +++ b/include/character.h @@ -18,12 +18,14 @@ typedef struct { /* 0x14 */ u8 field_0x14[0x2]; /* 0x16 */ u16 max_hp; /* 0x18 */ u16 cur_hp; - /* 0x1A */ u8 field_0x1a[0x2]; + /* 0x1A */ u8 field_0x1a; + /* 0x1B */ u8 field_0x1b; /* 0x1C */ u16 strength; /* 0x1E */ u16 vitality; /* 0x20 */ u16 intelligence; /* 0x22 */ u16 mem; /* 0x24 */ u16 agility; + // DEX affects melee and special attacks, as well as accuracy. /* 0x26 */ u16 dexterity; /* 0x28 */ u8 field_0x28[0x10]; } CharacterSlot; // size:0x38 diff --git a/include/common.h b/include/common.h index 3b913e2..77c2d0a 100644 --- a/include/common.h +++ b/include/common.h @@ -295,4 +295,48 @@ extern u8 D_800A872C; extern CharacterSlot CHARACTER_SLOT_MAGNUS[]; +typedef struct { + /* 0x00 */ u8 field_0x0; + /* 0x01 */ u8 field_0x1; + /* 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; + /* 0x10 */ u8 field_0xa; + /* 0x11 */ u8 field_0xb; + /* 0x12 */ u8 field_0xc; + /* 0x13 */ u8 field_0xd; + /* 0x14 */ u8 field_0xe; + /* 0x15 */ u8 field_0xf; + /* 0x10 */ u8 field_0x10; + /* 0x11 */ u8 field_0x11; + /* 0x12 */ u8 field_0x12; + /* 0x13 */ u8 field_0x13; + /* 0x14 */ u8 field_0x14; + /* 0x15 */ u8 field_0x15; + /* 0x16 */ u8 field_0x16; + /* 0x17 */ u8 field_0x17; + /* 0x18 */ u8 field_0x18; + /* 0x19 */ u8 field_0x19; + /* 0x1a */ u8 field_0x1a; + /* 0x1b */ u8 field_0x1b; + /* 0x1c */ u8 field_0x1c; + /* 0x1d */ u8 field_0x1d; + /* 0x1e */ u8 field_0x1e; + /* 0x1f */ u8 field_0x1f; +} __UnkCharacterStats; // size:0x20 + +extern u8 D_8018C410[]; +extern u8 D_8018C411[]; +extern u8 D_8018C416[]; +extern u8 D_8018C417[]; +extern u8 D_8018C41A[]; + +extern s8 __magnus_get_vitality(u16 arg0); +extern s8 __magnus_get_intelligence(u16 arg0); + #endif \ No newline at end of file diff --git a/splat.yaml b/splat.yaml index 9bef73d..deaf903 100644 --- a/splat.yaml +++ b/splat.yaml @@ -373,7 +373,7 @@ segments: - [0x420D0, asm] - [0x42C30, c] - [0x42C90, asm] - - [0x43100, asm] + - [0x43100, c] - [0x45CB0, asm] - [0x46090, asm] - [0x49510, asm] diff --git a/src/overlays/overlay1/43100.c b/src/overlays/overlay1/43100.c new file mode 100644 index 0000000..24d34c4 --- /dev/null +++ b/src/overlays/overlay1/43100.c @@ -0,0 +1,238 @@ +#include "common.h" + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D200); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D254); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D2A8); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D2FC); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D350); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D3A4); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D3F8); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D44C); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D4A0); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D4F4); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D548); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D59C); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D5F0); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D644); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D698); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D6EC); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D740); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D794); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D7E8); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D83C); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D890); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D8E4); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D938); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D98C); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016D9E0); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DA34); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DA88); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DADC); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DB30); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DB84); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DBD8); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DC2C); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DC80); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DCD4); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DD20); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DD74); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DDC8); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DE1C); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DE70); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DEC4); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DF18); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DF88); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016DFDC); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016E030); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016E084); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016E0D8); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016E140); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016E174); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016E1DC); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016E230); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016E338); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016E440); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016E458); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016E470); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016E50C); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016EA34); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016EAEC); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016EBA4); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F11C); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F4E0); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F500); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F520); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F540); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F560); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F580); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F598); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F5B0); + +/* 454C8 8016F5C8 */ +u8 func_8016F5C8(u16 arg0) { + return D_8018C410[arg0 * 32]; +} + +/* 454E0 8016F5E0 */ +u8 func_8016F5E0(u16 arg0) { + u8 var_a0; + + var_a0 = D_8018C411[arg0 * 32]; + if (var_a0 == 0x10) { + var_a0 = CHARACTER_SLOT_MAGNUS->field_0x1a; + } + return var_a0; +} + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F614); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F62C); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F644); + +/* 4555C 8016F65C */ +s8 __magnus_get_strength(u16 arg0) { + s8 ret; + if (arg0 == 132) { + ret = CHARACTER_SLOT_MAGNUS[0].strength / 20; + } else { + ret = D_8018C416[arg0 * 32]; + } + return ret; +} + +/* 455AC 8016F6AC */ +s8 __magnus_get_vitality(u16 arg0) { + s8 ret; + if (arg0 == 132) { + ret = CHARACTER_SLOT_MAGNUS[0].vitality / 20; + } else { + ret = D_8018C41A[arg0 * 32]; + } + return ret; +} + +/* 455FC 8016F6FC */ +s8 __magnus_get_intelligence(u16 arg0) { + s8 ret; + if (arg0 == 132) { + ret = CHARACTER_SLOT_MAGNUS[0].intelligence / 20; + } else { + ret = D_8018C417[arg0 * 32]; + } + return ret; +} + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", __magnus_get_mem); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", __magnus_get_agility); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", __magnus_get_dexterity); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F83C); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F854); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F86C); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F884); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F89C); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F8B4); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F8CC); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F8E4); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F900); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F920); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F940); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F95C); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F978); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F998); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F9B8); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F9D4); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016F9F0); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016FA34); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016FB50); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016FBE0); + +INCLUDE_ASM(const s32, "overlays/overlay1/43100", func_8016FCEC); diff --git a/symbol_addrs.txt b/symbol_addrs.txt index ec20f76..f208c53 100644 --- a/symbol_addrs.txt +++ b/symbol_addrs.txt @@ -1,11 +1,19 @@ +__magnus_get_vitality = 0x8016F6AC; +__magnus_get_strength = 0x8016F65C; +__magnus_get_intelligence = 0x8016F6FC; +__magnus_get_mem = 0x8016F74C; +__magnus_get_agility = 0x8016F79C; +__magnus_get_dexterity = 0x8016F7EC; + + __setup_overlay5 = 0x8017B5EC; __setup_overlay3 = 0x8017B774; __setup_overlay6 = 0x8017B6B0; MakeRouteList = 0x801B3620; // rom:0x107D60 -STR_VALUE_CANNOT_BE_REACHED_MAKE_ROUTE_LIST = 0x801EE0A0; +STR_VALUE_CANNOT_BE_REACHED_MAKE_ROUTE_LIST = 0x801EE0A0; // type:asciz Magnetic = 0x801B44DC; // rom:0x108C1C -STR_MEM_ERROR_MAGNETIC = 0x801EE0F0; +STR_MEM_ERROR_MAGNETIC = 0x801EE0F0; // type:asciz // Obviously wrong translated but whatevs.. STR_FAILED_TO_CONTROL_THE_HEATER = 0x800ADE78; STR_EMPTY = 0x800AE334; // type:asciz @@ -22,6 +30,12 @@ NAME_SHEEN = 0x8018E9FC; // type:asciz size:0x6 CLASS_NAME_DRAGON_MASTER = 0x80190230; // type:asciz +ITEM_NAME_SWORD = 0x80212E50; // type:asciz rom:0x163FC0 +ITEM_NAME_GREAT_SWORD = 0x80212E58; // type:asciz rom:0x163FC8 +ITEM_NAME_THRUSTING_SWORD = 0x80212E64; // type:asciz rom:0x163FC8 +ITEM_NAME_1HANDED = 0x80212E74; // type:asciz rom:0x163FE4 +ITEM_NAME_SHORT_SPEAR = 0x80212EA4; // type:asciz rom:0x164014 + __PTR_BIG_STRUCT = 0x80196AF8; // type:u32 __maybe_get_used_character_slots = 0x8016C048; @@ -57,7 +71,7 @@ STR_CREATING_NEW_DATA = 0x800ADEE8; STR_CREATING_A_NEW_FILE = 0x800ADEC8; STR_ADDING_NEW_DATA = 0x800ADEA4; STR_buSave_SAVING = 0x800ADF08; -STR_UNUSEDMALLOCNO_INSUFFICIENT_MEMORY = 0x800ADF88; +STR_UNUSEDMALLOCNO_INSUFFICIENT_MEMORY = 0x800ADF88; // type:asciz STR_FILE_NOT_FOUND = 0x800AE2AC; D_800A86B8 = 0x800A86B8; // size:0x3 type:u8