From 1d9874f0acacef5fe757a6b8ff6e137e506a6dfa Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Fri, 24 Apr 2026 02:07:49 +0200 Subject: [PATCH 01/12] playrget progress and match treasuremanager remaining functions --- config/eur/arm9/delinks.txt | 16 +- config/eur/arm9/overlays/ov000/delinks.txt | 2 + config/eur/arm9/overlays/ov000/symbols.txt | 22 +- config/jp/arm9/delinks.txt | 16 +- config/jp/arm9/overlays/ov000/symbols.txt | 8 +- include/Item/ItemManager.hpp | 11 +- include/Player/PlayerGet.hpp | 8 +- include/Save/SaveManager.hpp | 10 +- include/System/Random.hpp | 14 +- include/Unknown/UnkStruct_027e0cec.hpp | 1 + include/Unknown/UnkStruct_027e0cf8.hpp | 16 ++ include/Unknown/UnkStruct_ov000_0208f820.hpp | 48 +++- src/000_Second/Item/TreasureManager.cpp | 228 +++++++++++++++++- src/019_MainSelect/FileSelectSubScreen.cpp | 2 +- src/110_PlayerGet/PlayerGet.cpp | 175 ++++++++------ .../PlayerSceneChange.cpp | 6 +- .../PlayerSceneChange2.cpp | 2 +- 17 files changed, 447 insertions(+), 138 deletions(-) create mode 100644 include/Unknown/UnkStruct_027e0cf8.hpp diff --git a/config/eur/arm9/delinks.txt b/config/eur/arm9/delinks.txt index c9bb79df..7471fd08 100644 --- a/config/eur/arm9/delinks.txt +++ b/config/eur/arm9/delinks.txt @@ -70,6 +70,14 @@ libs/c/src/ansi_files.c: .data start:0x020446a8 end:0x0204478c .bss start:0x020517a0 end:0x02051aa0 +libs/c/src/float.c: + complete + .data start:0x0204478c end:0x02044790 + +libs/c/src/locale.c: + complete + .data start:0x02044790 end:0x020449ac + libs/c/src/arith.c: complete .text start:0x020338d4 end:0x020338ec @@ -116,14 +124,6 @@ libs/c/src/wmem.c: complete .text start:0x020341f8 end:0x02034230 -libs/c/src/float.c: - complete - .data start:0x0204478c end:0x02044790 - -libs/c/src/locale.c: - complete - .data start:0x02044790 end:0x020449ac - libs/c/src/wprintf.c: .text start:0x02034230 end:0x0203615c .data start:0x020449ac end:0x02044a2c diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt index a42b1a24..5f01d9c9 100644 --- a/config/eur/arm9/overlays/ov000/delinks.txt +++ b/config/eur/arm9/overlays/ov000/delinks.txt @@ -107,3 +107,5 @@ src/000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp: src/000_Second/Item/TreasureManager.cpp: .text start:0x020a9b10 end:0x020aa224 + .rodata start:0x020afd68 end:0x020afed8 + .data start:0x020b4e60 end:0x020b4ec0 diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 1028ca4c..4e07f742 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -2716,12 +2716,12 @@ func_ov000_020a0f78 kind:function(thumb,size=0xc) addr:0x020a0f78 func_ov000_020a0f84 kind:function(thumb,size=0x30) addr:0x020a0f84 func_ov000_020a0fb4 kind:function(thumb,size=0x10) addr:0x020a0fb4 func_ov000_020a0fc4 kind:function(thumb,size=0x3c) addr:0x020a0fc4 -func_ov000_020a1000 kind:function(thumb,size=0x28) addr:0x020a1000 -func_ov000_020a1028 kind:function(thumb,size=0xcc) addr:0x020a1028 -func_ov000_020a10f4 kind:function(arm,size=0x30) addr:0x020a10f4 -_ZN4Save19func_ov000_020a1124Ev kind:function(arm,size=0x13c) addr:0x020a1124 +_ZN15SaveManager_21C19func_ov000_020a1000Ev kind:function(thumb,size=0x28) addr:0x020a1000 +_ZN8SaveInfo19func_ov000_020a1028Ev kind:function(thumb,size=0xcc) addr:0x020a1028 +_ZN8SaveSub719func_ov000_020a10f4Ev kind:function(arm,size=0x30) addr:0x020a10f4 +_ZN8SaveSlot19func_ov000_020a1124Ev kind:function(arm,size=0x13c) addr:0x020a1124 func_ov000_020a1260 kind:function(arm,size=0x40) addr:0x020a1260 -func_ov000_020a12a0 kind:function(arm,size=0x3c) addr:0x020a12a0 +_ZN8SaveSub519func_ov000_020a12a0Ev kind:function(arm,size=0x3c) addr:0x020a12a0 func_ov000_020a12dc kind:function(arm,size=0x18) addr:0x020a12dc func_ov000_020a12f4 kind:function(arm,size=0x8) addr:0x020a12f4 func_ov000_020a12fc kind:function(arm,size=0x8) addr:0x020a12fc @@ -3077,16 +3077,16 @@ func_ov000_020a9a94 kind:function(arm,size=0x28) addr:0x020a9a94 func_ov000_020a9abc kind:function(arm,size=0x24) addr:0x020a9abc func_ov000_020a9ae0 kind:function(arm,size=0x1c) addr:0x020a9ae0 func_ov000_020a9afc kind:function(arm,size=0x14) addr:0x020a9afc -_ZN15TreasureManager19func_ov000_020a9b10Ev kind:function(arm,size=0x1c) addr:0x020a9b10 -_ZN15TreasureManager19func_ov000_020a9b2cEv kind:function(arm,size=0x10) addr:0x020a9b2c -_ZN15TreasureManager19func_ov000_020a9b3cEv kind:function(arm,size=0x10) addr:0x020a9b3c -_ZN15TreasureManager19func_ov000_020a9b4cEv kind:function(arm,size=0x100) addr:0x020a9b4c +_ZN15TreasureManager19func_ov000_020a9b10EPv kind:function(arm,size=0x1c) addr:0x020a9b10 +_ZN15TreasureManager19func_ov000_020a9b2cEi kind:function(arm,size=0x10) addr:0x020a9b2c +_ZN15TreasureManager19func_ov000_020a9b3cEi kind:function(arm,size=0x10) addr:0x020a9b3c +_ZN15TreasureManager19func_ov000_020a9b4cEi kind:function(arm,size=0x100) addr:0x020a9b4c _ZN15TreasureManager19func_ov000_020a9c4cEs kind:function(arm,size=0x18) addr:0x020a9c4c _ZN15TreasureManager19func_ov000_020a9c64Ev kind:function(arm,size=0x2c) addr:0x020a9c64 _ZN15TreasureManager19func_ov000_020a9c90Es kind:function(arm,size=0x14) addr:0x020a9c90 _ZN15TreasureManager19func_ov000_020a9ca4Es kind:function(arm,size=0x18) addr:0x020a9ca4 _ZN15TreasureManager19func_ov000_020a9cbcEsi kind:function(arm,size=0x40) addr:0x020a9cbc -func_ov000_020a9cfc kind:function(arm,size=0x7c) addr:0x020a9cfc +_ZN15TreasureManager19func_ov000_020a9cfcEPhh kind:function(arm,size=0x7c) addr:0x020a9cfc _ZN15TreasureManager19func_ov000_020a9d78Ei kind:function(arm,size=0x9c) addr:0x020a9d78 _ZN15TreasureManager19func_ov000_020a9e14Ei kind:function(arm,size=0x9c) addr:0x020a9e14 _ZN15TreasureManager19func_ov000_020a9eb0Ei kind:function(arm,size=0x9c) addr:0x020a9eb0 @@ -4004,7 +4004,7 @@ data_ov000_020b4e4c kind:data(any) addr:0x020b4e4c data_ov000_020b4e60 kind:data(any) addr:0x020b4e60 data_ov000_020b4e74 kind:data(any) addr:0x020b4e74 data_ov000_020b4e88 kind:data(any) addr:0x020b4e88 -data_ov000_020b4e9c kind:data(any) addr:0x020b4e9c +data_ov000_020b4e9c kind:data(byte[14]) addr:0x020b4e9c data_ov000_020b4ec0 kind:bss addr:0x020b4ec0 data_ov000_020b4ec4 kind:bss addr:0x020b4ec4 data_ov000_020b4ed4 kind:bss addr:0x020b4ed4 diff --git a/config/jp/arm9/delinks.txt b/config/jp/arm9/delinks.txt index 53f95b86..545e74e1 100644 --- a/config/jp/arm9/delinks.txt +++ b/config/jp/arm9/delinks.txt @@ -70,6 +70,14 @@ libs/c/src/ansi_files.c: .data start:0x02045c1c end:0x02045d00 .bss start:0x02052d20 end:0x02053020 +libs/c/src/float.c: + complete + .data start:0x02045d00 end:0x02045d04 + +libs/c/src/locale.c: + complete + .data start:0x02045d04 end:0x02045f20 + libs/c/src/arith.c: complete .text start:0x02034e04 end:0x02034e1c @@ -116,14 +124,6 @@ libs/c/src/wmem.c: complete .text start:0x02035728 end:0x02035760 -libs/c/src/float.c: - complete - .data start:0x02045d00 end:0x02045d04 - -libs/c/src/locale.c: - complete - .data start:0x02045d04 end:0x02045f20 - libs/c/src/wprintf.c: .text start:0x02035760 end:0x0203768c .data start:0x02045f20 end:0x02045fa0 diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index 1464481f..09e70d55 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -2714,7 +2714,7 @@ func_ov000_020a2750 kind:function(thumb,size=0xc) addr:0x020a2750 func_ov000_020a275c kind:function(thumb,size=0x30) addr:0x020a275c func_ov000_020a278c kind:function(thumb,size=0x10) addr:0x020a278c func_ov000_020a279c kind:function(thumb,size=0x3c) addr:0x020a279c -func_ov000_020a27d8 kind:function(thumb,size=0x28) addr:0x020a27d8 +_ZN15SaveManager_21C19func_ov000_020a1000Ev kind:function(thumb,size=0x28) addr:0x020a27d8 _ZN8SaveInfo19func_ov000_020a1028Ev kind:function(thumb,size=0xcc) addr:0x020a2800 _ZN8SaveSub719func_ov000_020a10f4Ev kind:function(arm,size=0x30) addr:0x020a28cc _ZN8SaveSlot19func_ov000_020a1124Ev kind:function(arm,size=0x13c) addr:0x020a28fc @@ -3076,16 +3076,16 @@ func_ov000_020ab294 kind:function(arm,size=0x28) addr:0x020ab294 func_ov000_020ab2bc kind:function(arm,size=0x24) addr:0x020ab2bc func_ov000_020ab2e0 kind:function(arm,size=0x1c) addr:0x020ab2e0 func_ov000_020ab2fc kind:function(arm,size=0x14) addr:0x020ab2fc -_ZN15TreasureManager19func_ov000_020a9b10Ev kind:function(arm,size=0x1c) addr:0x020ab310 +_ZN15TreasureManager19func_ov000_020a9b10EPv kind:function(arm,size=0x1c) addr:0x020ab310 func_ov000_020ab32c kind:function(arm,size=0x10) addr:0x020ab32c func_ov000_020ab33c kind:function(arm,size=0x10) addr:0x020ab33c -_ZN15TreasureManager19func_ov000_020a9b4cEv kind:function(arm,size=0x100) addr:0x020ab34c +_ZN15TreasureManager19func_ov000_020a9b4cEi kind:function(arm,size=0x100) addr:0x020ab34c _ZN15TreasureManager19func_ov000_020a9c4cEs kind:function(arm,size=0x18) addr:0x020ab44c _ZN15TreasureManager19func_ov000_020a9c64Ev kind:function(arm,size=0x2c) addr:0x020ab464 _ZN15TreasureManager19func_ov000_020a9c90Es kind:function(arm,size=0x14) addr:0x020ab490 _ZN15TreasureManager19func_ov000_020a9ca4Es kind:function(arm,size=0x18) addr:0x020ab4a4 _ZN15TreasureManager19func_ov000_020a9cbcEsi kind:function(arm,size=0x40) addr:0x020ab4bc -func_ov000_020ab4fc kind:function(arm,size=0x7c) addr:0x020ab4fc +_ZN15TreasureManager19func_ov000_020a9cfcEPhh kind:function(arm,size=0x7c) addr:0x020ab4fc _ZN15TreasureManager19func_ov000_020a9d78Ei kind:function(arm,size=0x9c) addr:0x020ab578 _ZN15TreasureManager19func_ov000_020a9e14Ei kind:function(arm,size=0x9c) addr:0x020ab614 _ZN15TreasureManager19func_ov000_020a9eb0Ei kind:function(arm,size=0x9c) addr:0x020ab6b0 diff --git a/include/Item/ItemManager.hpp b/include/Item/ItemManager.hpp index b19bd66e..3d284741 100644 --- a/include/Item/ItemManager.hpp +++ b/include/Item/ItemManager.hpp @@ -126,15 +126,16 @@ class TreasureManager : public ItemManager { TreasureManager(); ~TreasureManager(); - void func_ov000_020a9b10(); - void func_ov000_020a9b2c(); - void func_ov000_020a9b3c(); - void func_ov000_020a9b4c(); + void func_ov000_020a9b10(void *param1); + static unk32 func_ov000_020a9b2c(unk32 param1); + static unk32 func_ov000_020a9b3c(unk32 param1); + unk32 func_ov000_020a9b4c(unk32 param1); bool func_ov000_020a9c4c(TreasureType type); bool func_ov000_020a9c64(); unk32 func_ov000_020a9c90(TreasureType type); bool func_ov000_020a9ca4(TreasureType type); void func_ov000_020a9cbc(TreasureType type, s32 amount); + static u32 func_ov000_020a9cfc(u8 *param1, u8 param2); static unk32 func_ov000_020a9d78(unk32 param1); static unk32 func_ov000_020a9e14(unk32 param1); static unk32 func_ov000_020a9eb0(unk32 param1); @@ -142,7 +143,7 @@ class TreasureManager : public ItemManager { ItemId func_ov000_020aa02c(ItemId itemId); void func_ov000_020aa0ac(ItemId itemId); void func_ov000_020aa200(); - void func_ov000_020aa210(); + bool func_ov000_020aa210(); }; extern TreasureManager *data_ov000_020b6510; diff --git a/include/Player/PlayerGet.hpp b/include/Player/PlayerGet.hpp index a873fc1c..6e65b258 100644 --- a/include/Player/PlayerGet.hpp +++ b/include/Player/PlayerGet.hpp @@ -64,15 +64,15 @@ class UnkStruct_PlayerGet_fc { class UnkStruct_PlayerGet_48 { public: - /* 00 */ unk8 mUnk_00[0x40]; + /* 00 */ unk32 mUnk_00; + /* 04 */ STRUCT_PAD(0x04, 0x40); /* 40 */ unk16 mUnk_40; /* 42 */ unk16 mUnk_42; - /* 43 */ unk8 mUnk_43; /* 44 */ unk8 mUnk_44; /* 45 */ unk8 mUnk_45; /* 46 */ unk8 mUnk_46; /* 47 */ unk8 mUnk_47; - /* 48 */ unk8 mUnk_48[0x5E - 0x48]; + /* 48 */ STRUCT_PAD(0x48, 0x5E); /* 5E */ unk16 mUnk_5E; /* 60 */ unk8 mUnk_60; /* 61 */ unk8 mUnk_61; @@ -87,7 +87,7 @@ class PlayerGet : public UnkStruct_ov000_0208f820 { /* 04C */ unk32 *mUnk_4C; /* 050 */ UnkStruct_PlayerGet_50 *mUnk_50; /* 054 */ UnkStruct_ov000_0208f820_04 mUnk_54; - /* 064 */ UnkStruct_PlayerGet_64 mUnk_64; + /* 064 */ UnkStruct_PlayerGet_64_2 mUnk_64; /* 068 */ unk32 mUnk_68; /* 06C */ unk32 mUnk_6C; // scale /* 070 */ unk16 mUnk_70; // angle/rotation diff --git a/include/Save/SaveManager.hpp b/include/Save/SaveManager.hpp index 362e35bd..fd644d20 100644 --- a/include/Save/SaveManager.hpp +++ b/include/Save/SaveManager.hpp @@ -361,6 +361,13 @@ class SaveFile : public SysObject { void func_ov019_020d1b14(unk32 param1); }; +class SaveManager_21C { +public: + /* 00 */ unk32 mUnk_00; + + unk32 func_ov000_020a1000(); +}; + class SaveManager { public: /* 000 */ void *mUnk_000; // related to mUnk_184 @@ -374,7 +381,8 @@ class SaveManager { /* 210 */ unk32 mUnk_210; /* 214 */ unk32 mUnk_214; /* 218 */ SaveFile *mpSaveFile; - /* 21C */ unk8 mUnk_21C[0x23C - 0x21C]; + /* 21C */ SaveManager_21C mUnk_21C; + /* 220 */ STRUCT_PAD(0x220, 0x23C); /* 23C */ PTMF::PTMFCallback mUnk_23C; /* 244 */ unk32 mUnk_244; diff --git a/include/System/Random.hpp b/include/System/Random.hpp index ddc74a50..2c741b89 100644 --- a/include/System/Random.hpp +++ b/include/System/Random.hpp @@ -40,7 +40,7 @@ struct Random { return (((this->GetRandomValue() >> 32) * (max - min)) >> 32) + min; } - u32 ConditionalNext32(u32 value) { + u16 ConditionalNext16(u32 value) { this->UpdateRandomValue(); u64 result = this->GetRandomValue() >> 32; @@ -52,6 +52,18 @@ struct Random { return result; } + u32 ConditionalNext32(u32 value) { + this->UpdateRandomValue(); + + u32 result = this->GetRandomValue() >> 32; + + if (value != 0) { + return ((u64) result * value) >> 32; + } + + return result; + } + void Init(); }; diff --git a/include/Unknown/UnkStruct_027e0cec.hpp b/include/Unknown/UnkStruct_027e0cec.hpp index 6d110cf8..d061ee56 100644 --- a/include/Unknown/UnkStruct_027e0cec.hpp +++ b/include/Unknown/UnkStruct_027e0cec.hpp @@ -6,6 +6,7 @@ class UnkStruct_027e0cec { public: + void func_ov000_0209feac(unk32 param1, Vec3p *param2, unk32 param3, unk32 param4, unk32 param5); void func_ov000_0209ff8c(UnkStruct_PlayerGet_ec *param1, unk32 param2, Vec3p *param3, unk32 param4); void func_ov000_020a0000(UnkStruct_PlayerGet_ec *param1, void *param2, unk32 *param3, Vec3p *param4, unk32 param5); void func_ov000_020a0110(UnkStruct_PlayerGet_ec *param1); diff --git a/include/Unknown/UnkStruct_027e0cf8.hpp b/include/Unknown/UnkStruct_027e0cf8.hpp new file mode 100644 index 00000000..0086be8e --- /dev/null +++ b/include/Unknown/UnkStruct_027e0cf8.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "global.h" +#include "types.h" + +class UnkStruct_027e0cf8 { +public: + /* 00 */ unk32 mUnk_00; + + UnkStruct_027e0cf8(); + ~UnkStruct_027e0cf8(); + + void func_ov024_020c7828(unk32 param1); +}; + +extern UnkStruct_027e0cf8 *data_027e0cf8; diff --git a/include/Unknown/UnkStruct_ov000_0208f820.hpp b/include/Unknown/UnkStruct_ov000_0208f820.hpp index ae79265a..71963700 100644 --- a/include/Unknown/UnkStruct_ov000_0208f820.hpp +++ b/include/Unknown/UnkStruct_ov000_0208f820.hpp @@ -26,19 +26,34 @@ class UnkStruct_ov000_0208f820_14 { class UnkStruct_PlayerGet_64 { public: /* 00 */ unk32 mUnk_00; + /* 3C */ unk32 mUnk_3C; + /* 40 */ u16 mUnk_40; - UnkStruct_PlayerGet_64(unk32 *param1, unk32 param2); + UnkStruct_PlayerGet_64(void *param1, unk32 param2); ~UnkStruct_PlayerGet_64(); void func_ov000_0208a100(); }; +class UnkStruct_PlayerGet_64_2 { +public: + /* 00 */ unk32 mUnk_00; + + UnkStruct_PlayerGet_64_2(void *param1, unk32 param2); + ~UnkStruct_PlayerGet_64_2(); + + void func_ov000_0208a100(); +}; + class UnkStruct_ov000_0208f820_28_98 { public: - /* 00 */ unk8 mUnk_00[0x38]; + /* 00 */ unk32 mUnk_00; + /* 00 */ unk32 mUnk_04; + /* 00 */ u16 mUnk_08; + /* 0C */ STRUCT_PAD(0x0C, 0x38); /* 38 */ UnkStruct_PlayerGet_64 mUnk_38; - /* 3C */ unk32 mUnk_3C; - /* 40 */ u16 mUnk_40; + // /* 3C */ unk32 mUnk_3C; + // /* 40 */ u16 mUnk_40; void func_ov093_0216f76c(Vec3p *param1, unk32 param2); }; @@ -47,9 +62,7 @@ class UnkStruct_ov000_0208f820_28 { public: /* 00 */ STRUCT_PAD(0x00, 0x38); /* 38 */ UnkStruct_PlayerGet_64 mUnk_38; - /* 3C */ unk32 mUnk_3C; - /* 40 */ u16 mUnk_40; - /* 42 */ STRUCT_PAD(0x42, 0x48); + /* 42 */ STRUCT_PAD(0x44, 0x48); /* 48 */ unk32 mUnk_48; /* 48 */ unk32 mUnk_4C; /* 48 */ unk32 mUnk_50; @@ -147,11 +160,19 @@ class UnkStruct_ov000_0208f820_24 { class UnkStruct_ov000_0208f820_04 { public: - /* 00 */ u8 mUnk_00[4]; - /* 04 */ u8 mUnk_04[4]; + /* 00 */ union { + u8 mUnk_00[4]; + u16 mUnk_00_s16; + u32 mUnk_00_s32; + }; + /* 04 */ union { + u8 mUnk_04[4]; + u16 mUnk_04_s16; + u32 mUnk_04_s32; + }; /* 08 */ unk32 mUnk_08; /* 0C */ ItemId mItemId; - /* 14 */ + /* 10 */ UnkStruct_ov000_0208f820_04(unk32 param1, unk32 param2, unk32 param3, ItemId itemId) { *(u32 *) this->mUnk_00 = param1; @@ -163,6 +184,11 @@ class UnkStruct_ov000_0208f820_04 { UnkStruct_ov000_0208f820_04() {} }; +class UnkStruct_ov000_0208f820_44 { +public: + void *mUnk_00; +}; + class UnkStruct_ov000_0208f820 { public: /* 00 (vtable) */ @@ -182,7 +208,7 @@ class UnkStruct_ov000_0208f820 { /* 38 */ Vec3p *mUnk_38; /* 3C */ Vec3p *mUnk_3C; /* 40 */ UnkStruct_ov000_0208f820_40 *mUnk_40; - /* 44 */ unk32 *mUnk_44; + /* 44 */ UnkStruct_ov000_0208f820_44 *mUnk_44; /* 48 */ /* 00 */ virtual void vfunc_00(); diff --git a/src/000_Second/Item/TreasureManager.cpp b/src/000_Second/Item/TreasureManager.cpp index e7054f70..ccecbbb8 100644 --- a/src/000_Second/Item/TreasureManager.cpp +++ b/src/000_Second/Item/TreasureManager.cpp @@ -1,12 +1,129 @@ #include "Item/ItemManager.hpp" +#include "Save/SaveManager.hpp" +#include "System/Random.hpp" +#include "Unknown/UnkMemFuncs.h" #include "global.h" -extern ItemId data_ov000_020afde8[]; +static const unk32 data_ov000_020afda8[] = { + 0x0015007E, 0x0015007F, 0x00150080, 0x00150081, 0x00150082, 0x00150083, 0x00150084, 0x00150085, + 0x00150086, 0x00150087, 0x00150088, 0x00150089, 0x0015008A, 0x0015008B, 0x0015008C, 0x0015008D, +}; -ARM void TreasureManager::func_ov000_020a9b10() {} -ARM void TreasureManager::func_ov000_020a9b2c() {} -ARM void TreasureManager::func_ov000_020a9b3c() {} -ARM void TreasureManager::func_ov000_020a9b4c() {} +static const unk32 data_ov000_020afd68[] = { + 0x0015006C, 0x0015006D, 0x0015006E, 0x0015006F, 0x00150070, 0x00150071, 0x00150072, 0x00150073, + 0x00150074, 0x00150075, 0x00150076, 0x00150077, 0x00150078, 0x00150079, 0x0015007A, 0x0015007B, +}; + +static const ItemId data_ov000_020afde8[] = { + ItemId_DemonFossil, ItemId_StalfosSkull, ItemId_StarFragment, ItemId_BeeLarvae, + ItemId_WoodHeart, ItemId_DarkPearlLoop, ItemId_WhitePearlLoop, ItemId_RutoCrown, + ItemId_DragonScale, ItemId_PirateNecklace, ItemId_PalaceDish, ItemId_GoronAmber, + ItemId_MysticJade, ItemId_AncientCoin, ItemId_PricelessStone, ItemId_RegalRing, +}; + +// static const u8 data_ov000_020afe28 = 5; +// static const u8 data_ov000_020afe2c = 2; +// static const u8 data_ov000_020afe30 = 4; +// static const u8 data_ov000_020afe34 = 5; +extern u8 data_ov000_020afe28; +extern u8 data_ov000_020afe2c; +extern u8 data_ov000_020afe30; +extern u8 data_ov000_020afe34; + +static const u8 data_ov000_020afe38[] = {0x32, 0x32}; +static const u8 data_ov000_020afe3a[] = {0x32, 0x32}; +static const u8 data_ov000_020afe3c[] = {0x32, 0x32}; +static const u8 data_ov000_020afe3e[] = {0x32, 0x32}; +static const u8 data_ov000_020afe40[] = {0x32, 0x32}; +static const u8 data_ov000_020afe42[] = {0x14, 0x1E, 0x14, 0x1E}; +static const u8 data_ov000_020afe46[] = {0x28, 0x0A, 0x05, 0x2D}; +static const u8 data_ov000_020afe4a[] = {0x05, 0x1E, 0x19, 0x28}; +static const u8 data_ov000_020afe4e[] = {0x1E, 0x1E, 0x0F, 0x19}; +static const u8 data_ov000_020afe52[] = {0x0A, 0x1E, 0x28, 0x14}; +static const u8 data_ov000_020afe56[] = {0x05, 0x1E, 0x14, 0x05, 0x28}; +static const u8 data_ov000_020afe5b[] = {0x0A, 0x1E, 0x14, 0x0A, 0x1E}; +static const u8 data_ov000_020afe60[] = {0x05, 0x1E, 0x05, 0x1E, 0x1E}; +static const u8 data_ov000_020afe65[] = {0x14, 0x14, 0x0A, 0x0A, 0x28}; +static const u8 data_ov000_020afe6a[] = {0x14, 0x28, 0x0F, 0x0F, 0x0A}; +static const u8 data_ov000_020afe6f[] = {0x05, 0x1E, 0x14, 0x05, 0x28}; +static const u8 data_ov000_020afe74[] = {0x1E, 0x0A, 0x14, 0x0A, 0x1E}; +static const u8 data_ov000_020afe79[] = {0x05, 0x1E, 0x05, 0x1E, 0x1E}; +static const u8 data_ov000_020afe7e[] = {0x28, 0x0A, 0x0A, 0x0A, 0x1E}; +static const u8 data_ov000_020afe83[] = {0x0A, 0x28, 0x0F, 0x0F, 0x14}; + +static u8 *data_ov000_020b4e88[] = { + (u8 *) data_ov000_020afe42, (u8 *) data_ov000_020afe46, (u8 *) data_ov000_020afe4a, + (u8 *) data_ov000_020afe4e, (u8 *) data_ov000_020afe52, +}; + +static u8 *data_ov000_020b4e74[] = { + (u8 *) data_ov000_020afe5b, (u8 *) data_ov000_020afe60, (u8 *) data_ov000_020afe65, + (u8 *) data_ov000_020afe6a, (u8 *) data_ov000_020afe6f, +}; + +static u8 *data_ov000_020b4e9c[] = { + (u8 *) data_ov000_020afe3e, (u8 *) data_ov000_020afe3c, (u8 *) data_ov000_020afe3a, + (u8 *) data_ov000_020afe40, (u8 *) data_ov000_020afe38, +}; + +static u8 *data_ov000_020b4e60[] = { + (u8 *) data_ov000_020afe74, (u8 *) data_ov000_020afe79, (u8 *) data_ov000_020afe7e, + (u8 *) data_ov000_020afe83, (u8 *) data_ov000_020afe56, +}; + +extern u32 data_ov000_020afec4[]; +extern u32 data_ov000_020afeb0[]; +extern u32 data_ov000_020afea0[]; +extern u32 data_ov000_020afe98[]; + +// static const u16 data_ov000_020afe88 = 0x01F4; +// static const u16 data_ov000_020afe8c = 0x0032; +// static const u16 data_ov000_020afe90 = 0x09C4; +// static const u16 data_ov000_020afe94 = 0x0096; +extern u16 data_ov000_020afe88; +extern u16 data_ov000_020afe8c; +extern u16 data_ov000_020afe90; +extern u16 data_ov000_020afe94; + +ARM void TreasureManager::func_ov000_020a9b10(void *param1) { + _MI_CpuCopy(param1, this, sizeof(TreasureManager)); +} + +ARM unk32 TreasureManager::func_ov000_020a9b2c(unk32 param1) { + return data_ov000_020afda8[param1]; +} + +ARM unk32 TreasureManager::func_ov000_020a9b3c(unk32 param1) { + return data_ov000_020afd68[param1]; +} + +ARM unk32 TreasureManager::func_ov000_020a9b4c(unk32 param1) { + for (int i = 0; i < data_ov000_020afe34; i++) { + if (data_ov000_020afec4[i] == param1) { + return data_ov000_020afe8c; + } + } + + for (int i = 0; i < data_ov000_020afe34; i++) { + if (data_ov000_020afeb0[i] == param1) { + return data_ov000_020afe94; + } + } + + for (int i = 0; i < data_ov000_020afe34; i++) { + if (data_ov000_020afea0[i] == param1) { + return data_ov000_020afe88; + } + } + + for (int i = 0; i < data_ov000_020afe2c; i++) { + if (data_ov000_020afe98[i] == param1) { + return data_ov000_020afe90; + } + } + + return 0; +} ARM bool TreasureManager::func_ov000_020a9c4c(TreasureType type) { return this->mUnk_3C[type] >= 0; @@ -56,10 +173,100 @@ ARM void TreasureManager::func_ov000_020a9cbc(TreasureType type, s32 amount) { this->mUnk_3C[type] = newAmount; } -ARM unk32 TreasureManager::func_ov000_020a9d78(unk32 param1) {} -ARM unk32 TreasureManager::func_ov000_020a9e14(unk32 param1) {} -ARM unk32 TreasureManager::func_ov000_020a9eb0(unk32 param1) {} -ARM unk32 TreasureManager::func_ov000_020a9f4c(unk32 param1) {} +ARM u32 TreasureManager::func_ov000_020a9cfc(u8 *param1, u8 param2) { + s32 uVar2 = gRandom.Next32(0, 100); + s32 iVar1 = 0; + + for (int i = 0; i < param2; i++) { + iVar1 += param1[i]; + + if (uVar2 < (s32) iVar1) { + return i; + } + } + + return param2; +} + +ARM unk32 TreasureManager::func_ov000_020a9d78(unk32 param1) { + unk32 var_r0; + if (param1 < 0) { + var_r0 = gSaveManager.mUnk_21C.func_ov000_020a1000(); + } else { + var_r0 = (u16) param1; + } + + u8 temp_r4 = data_ov000_020afe34; + s32 temp_r0 = func_ov000_020a9cfc(data_ov000_020b4e74[var_r0], temp_r4); + if (temp_r0 < temp_r4) { + return data_ov000_020afec4[temp_r0]; + } + + u32 var_r3; + var_r3 = gRandom.ConditionalNext32(temp_r4); + return data_ov000_020afec4[var_r3]; +} + +ARM unk32 TreasureManager::func_ov000_020a9e14(unk32 param1) { + unk32 var_r0; + if (param1 < 0) { + var_r0 = gSaveManager.mUnk_21C.func_ov000_020a1000(); + } else { + var_r0 = (u16) param1; + } + + u8 temp_r4 = data_ov000_020afe28; + s32 temp_r0 = func_ov000_020a9cfc(data_ov000_020b4e60[var_r0], temp_r4); + if (temp_r0 < temp_r4) { + return data_ov000_020afeb0[temp_r0]; + } + + u32 var_r3; + var_r3 = gRandom.ConditionalNext32(temp_r4); + return data_ov000_020afeb0[var_r3]; +} + +ARM unk32 TreasureManager::func_ov000_020a9eb0(unk32 param1) { + unk32 var_r0; + if (param1 < 0) { + var_r0 = gSaveManager.mUnk_21C.func_ov000_020a1000(); + } else { + var_r0 = (u16) param1; + } + + u8 temp_r4 = data_ov000_020afe30; + s32 temp_r0 = func_ov000_020a9cfc(data_ov000_020b4e88[var_r0], temp_r4); + if (temp_r0 < temp_r4) { + return data_ov000_020afea0[temp_r0]; + } + + u32 var_r3; + var_r3 = gRandom.ConditionalNext32(temp_r4); + return data_ov000_020afea0[var_r3]; +} + +ARM unk32 TreasureManager::func_ov000_020a9f4c(unk32 param1) { + if ((s32) gRandom.Next32(0, 100) < 80) { + return TreasureManager::func_ov000_020a9eb0(param1); + } + + unk32 var_r0; + if (param1 < 0) { + var_r0 = gSaveManager.mUnk_21C.func_ov000_020a1000(); + } else { + var_r0 = (u16) param1; + } + + u8 temp_r4 = data_ov000_020afe2c; + s32 temp_r0 = TreasureManager::func_ov000_020a9cfc(data_ov000_020b4e9c[var_r0], temp_r4); + if (temp_r0 < temp_r4) { + return data_ov000_020afe98[temp_r0]; + } + + u32 var_r3; + var_r3 = gRandom.ConditionalNext32(temp_r4); + return data_ov000_020afe98[var_r3]; +} ARM ItemId TreasureManager::func_ov000_020aa02c(ItemId itemId) { switch (itemId) { @@ -138,6 +345,7 @@ void TreasureManager::func_ov000_020aa200() { data_ov000_020b6510 = this; } -void TreasureManager::func_ov000_020aa210() { +bool TreasureManager::func_ov000_020aa210() { data_ov000_020b6510 = NULL; + //! @bug: no return value } diff --git a/src/019_MainSelect/FileSelectSubScreen.cpp b/src/019_MainSelect/FileSelectSubScreen.cpp index deb9911d..c21170d3 100644 --- a/src/019_MainSelect/FileSelectSubScreen.cpp +++ b/src/019_MainSelect/FileSelectSubScreen.cpp @@ -169,7 +169,7 @@ ARM FileSelect_UnkClass7::FileSelect_UnkClass7() { for (int i = 0; i < ARRAY_LEN(this->mUnk_004.mUnk_000); i++) { this->mUnk_004.mUnk_000[i].func_ov000_0206082c(0x8F, data_ov019_020d1bcc[gRandom.Next32(0, 3)]); - u16 value = gRandom.ConditionalNext32(this->mUnk_004.mUnk_000[i].func_ov000_02060c28()); + u16 value = gRandom.ConditionalNext16(this->mUnk_004.mUnk_000[i].func_ov000_02060c28()); this->mUnk_004.mUnk_000[i].func_ov000_02060bd8(value); Vec2us pos; diff --git a/src/110_PlayerGet/PlayerGet.cpp b/src/110_PlayerGet/PlayerGet.cpp index ed168a2b..4a2a763b 100644 --- a/src/110_PlayerGet/PlayerGet.cpp +++ b/src/110_PlayerGet/PlayerGet.cpp @@ -13,6 +13,7 @@ #include "Unknown/UnkStruct_027e09bc.hpp" #include "Unknown/UnkStruct_027e0cd8.hpp" #include "Unknown/UnkStruct_027e0cec.hpp" +#include "Unknown/UnkStruct_027e0cf8.hpp" #include "Unknown/UnkStruct_ov000_02067bc4.hpp" #include "Unknown/UnkStruct_ov000_020b34c4.hpp" #include "Unknown/UnkStruct_ov000_020b51b8.hpp" @@ -26,6 +27,9 @@ struct UnkStruct_02186240 { }; UnkStruct_02186240 data_ov110_02186240; +extern const char *data_ov000_020aa240; // .nsbtx +extern const char *data_ov000_020aa248; // .nsbmd + extern "C" void func_ov000_0205ca74(unk32); extern "C" void func_01ffb6e4(unk32, const void *, void *); extern "C" void func_01ffc5a0(UnkSystem4 *, unk32, u16, void *, unk32); @@ -35,16 +39,16 @@ extern "C" void func_ov000_02058fc4(unk32 *, UnkStruct_PlayerGet_74 *, Vec3p *); extern unk32 *data_027e0958; extern "C" void func_ov024_020d6370(unk32 *, ItemId); extern unk32 *data_ov024_020d86b0; -extern "C" void func_ov000_0208ba10(char *, void *, unk32); +extern "C" void func_ov000_0208ba10(void *, void *, unk32); extern "C" unk32 func_ov000_020a4c00(ItemId itemId); -extern "C" void func_02015ea8(unk32, unk16 *); +extern "C" void func_02015ea8(unk32, void *); extern "C" void func_02015628(char *, char *, unk32, void *, size_t); extern "C" void func_02015664(char *, unk32); extern "C" void func_020156c8(char *, char *, unk32); extern "C" void func_020156f4(char *); extern "C" void func_02015644(char *); -extern "C" UnkResourceStruct *func_ov000_0205abcc(char *, char *, unk32, unk32, unk32); +extern "C" UnkResourceStruct *func_ov000_0205abcc(void *, void *, unk32, unk32, unk32); extern "C" unk32 func_ov000_02077590(unk32); static const unk32 data_ov110_02185dc4[1] = {8}; @@ -243,9 +247,9 @@ ARM PlayerGet::~PlayerGet() { UnkStruct_ov000_0208f820_28_98 *pUnk_28_98 = this->mUnk_28->mUnk_98; if (pUnk_28_98 != 0) { - pUnk_28_98->mUnk_40 &= ~0x10; + pUnk_28_98->mUnk_38.mUnk_40 &= ~0x10; - if (pUnk_28_98->mUnk_40 == 0) { + if (pUnk_28_98->mUnk_38.mUnk_40 == 0) { // real? pUnk_28_98->mUnk_38.~UnkStruct_PlayerGet_64(); } @@ -273,24 +277,25 @@ ARM bool PlayerGet::func_ov110_02186b8c() { } #endif +// https://decomp.me/scratch/ZAW2N ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) { - ItemManager *pItemManager; ItemId itemId; + ItemManager *pItemManager; Actor *iVar10; Vec3p *pUnk_38; Vec3p *pUnk_3c; - char auStack_108[12]; - Vec3p VStack_fc; - unk32 uStack_f0[4]; - unk32 auStack_30[5]; switch (param1->mUnk_04) { case 0x39: - *(u32 *) this->mUnk_54.mUnk_00 = param1->mUnk_10.x; - *(u32 *) this->mUnk_54.mUnk_04 = param1->mUnk_10.y; - this->mUnk_54.mUnk_08 = param1->mUnk_10.z; - pItemManager = this->mUnk_28->pItemManager; - itemId = param1->mUnk_1C; + Vec3p temp; + itemId = param1->mUnk_1C; + temp.x = param1->mUnk_10.x; + temp.y = param1->mUnk_10.y; + temp.z = param1->mUnk_10.z; + this->mUnk_54.mUnk_08 = temp.z; + this->mUnk_54.mUnk_00_s32 = temp.x; + this->mUnk_54.mUnk_04_s32 = temp.y; + pItemManager = this->mUnk_28->pItemManager; switch (itemId) { case ItemId_BombBag: @@ -323,8 +328,9 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) { this->mUnk_54.mItemId = itemId; this->mUnk_70 = 0; this->mUnk_2C->mUnk_58 = 0; - func_ov000_0208ba10(auStack_108, &this->mUnk_24->mUnk_25, 0); - this->mUnk_40->mUnk_00 = 0x8000; + char auStack_108[12]; + func_ov000_0208ba10(auStack_108, &this->mUnk_24->mUnk_94, 0); + *(s16 *) &this->mUnk_40->mUnk_00 = 0x8000; pUnk_38 = this->mUnk_38; pUnk_38->x = 0; @@ -335,7 +341,7 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) { pUnk_3c->y = 0; pUnk_3c->z = 0; - if (((*(u16 *) this->mUnk_54.mUnk_00 << 0x10) >> 0x1E) != 1) { + if (((u32) (u16) this->mUnk_54.mUnk_00_s16 << 16) >> 30 != 1) { return; } @@ -352,48 +358,44 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) { break; case 0x3A: if (this->mUnk_54.mItemId != ItemId_Nothing) { - if (func_ov000_020a4c00(this->mUnk_54.mItemId) == 0) { - this->mUnk_8C.vfunc_08(0); - } else { - unk32 niVar10; + unk32 niVar10 = func_ov000_020a4c00(this->mUnk_54.mItemId); + if (niVar10 == 0) { + this->mUnk_8C.vfunc_08(NULL); + } else { if (this->mUnk_54.mItemId == ItemId_LokomoSword) { niVar10 = func_ov000_020a4c00(ItemId_NormalSword); } - unk16 auStack_110[2]; - unk16 acStack_a6[2]; - unk16 auStack_48[2]; - unk16 auStack_64[2]; - unk16 acStack_e0[2]; - size_t len; - - auStack_110[0] = 0; - auStack_110[1] = 0; - func_02015ea8(niVar10, auStack_110); - acStack_a6[1] = 0; - strncpy((char *) acStack_e0, "Player/get/", 0x39); - len = strlen((char *) acStack_e0); - strncpy((char *) acStack_e0 + len, (char *) auStack_110, 0x39 - len); - auStack_64[1] = 0; - strncpy((char *) acStack_a6, (char *) acStack_e0, 0x3f); - len = strlen((char *) acStack_a6); - strncpy((char *) acStack_a6 + len, ".nsbmd", 0x3f - len); - func_02015628((char *) auStack_64, (char *) acStack_a6, 0, &data_ov110_02186240, - sizeof(UnkStruct_02186240)); - func_02015664((char *) auStack_64, 0x10); - strncpy((char *) acStack_a6, (char *) acStack_e0, 0x3f); - len = strlen((char *) acStack_a6); - strncpy((char *) acStack_a6 + len, ".nsbtx", 0x3f - len); - func_020156c8((char *) auStack_48, (char *) acStack_a6, 0); - - unk32 var_r1_2; - UnkResourceStruct *ret = - func_ov000_0205abcc((char *) auStack_64, (char *) auStack_48, 0, 1, this->mUnk_30->mUnk_24); - - this->mUnk_8C.vfunc_08(GetUnkPointer1_Impl(ret)); - func_020156f4((char *) auStack_48); - func_02015644((char *) auStack_64); + wchar_t pathBuffer[32]; + char modelPath[64]; + u16 idStr[5]; + + idStr[0] = 0; + idStr[1] = 0; + func_02015ea8(niVar10, idStr); + idStr[4] = '\0'; + + strncpy((char *) pathBuffer, "Player/get/", 0x39); + size_t l = strlen((char *) pathBuffer); + strncpy((char *) pathBuffer + l, (char *) idStr, 0x39 - l); + pathBuffer[31] = '\0'; + + strncpy(modelPath, (char *) pathBuffer, 0x3F); + l = strlen(modelPath); + strncpy(modelPath + l, data_ov000_020aa248, 0x3F - l); + + UnkFileSystem4 fs4(modelPath, 0, (unk32) &data_ov110_02186240, sizeof(UnkStruct_02186240)); + fs4.vfunc_08(0x10); + + strncpy(modelPath, (char *) pathBuffer, 0x3F); + l = strlen(modelPath); + strncpy(modelPath + l, data_ov000_020aa240, 0x3F - l); + + UnkFileSystem2 fs2(modelPath, 0); + UnkResourceStruct *res = func_ov000_0205abcc((void *) &fs4, (void *) &fs2, 0, 1, this->mUnk_30->mUnk_24); + + this->mUnk_8C.vfunc_08(GetUnkPointer1_Impl(res)); } switch (this->mUnk_54.mItemId) { @@ -409,8 +411,7 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) { } UnkStruct_027e09bc_0c *uVar11 = data_027e09bc->mUnk_0C; - unk32 uVar6 = func_ov000_02077590(4); - uVar11->func_ov000_0207834c(this->mUnk_34, uVar6, 0); + uVar11->func_ov000_0207834c(this->mUnk_34, func_ov000_02077590(4), 0); UnkStruct_PlayerGet_48 *pUnk_48 = this->mUnk_48; pUnk_48->mUnk_42 = 0x1000; @@ -418,19 +419,48 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) { pUnk_48->mUnk_5E = 0x1000; pUnk_48->mUnk_63 = 0; - if (this->mUnk_44 != NULL) { + if (this->mUnk_44->mUnk_00 != NULL) { this->mUnk_64.func_ov000_0208a100(); } - // pUnk24 = this->mUnk_24; - bool bVar8; + bool var_r1_4 = 0; + void **temp_r5_2 = this->mUnk_24->mUnk_78; + if (temp_r5_2 != NULL) { + u16 temp_r6 = *(u16 *) temp_r5_2; + bool var_r3 = 1; + bool var_r2 = 0; - // ... + if ((temp_r6 != 0x100) && (temp_r6 != 0x101)) { + var_r3 = 0; + } - UnkStruct_ov000_0208f820_28_98 *pUnk28_98 = this->mUnk_28->mUnk_98; - if (!bVar8 && pUnk28_98 != NULL) { - pUnk28_98->mUnk_40 |= 0x10; - this->mUnk_64.func_ov000_0208a100(); + if (var_r3 != 0) { + bool var_r0_2; + + if (temp_r6 == 0x101) { + var_r0_2 = 0; + } else { + var_r0_2 = ((u16 *) temp_r5_2)[1]; + } + + if (var_r0_2 == 1) { + var_r2 = 1; + } + } + + if (var_r2 != 0) { + var_r1_4 = 1; + } + } + + if (!var_r1_4) { + UnkStruct_ov000_0208f820_28_98 *pUnk28_98 = this->mUnk_28->mUnk_98; + + if (pUnk28_98 != NULL) { + UnkStruct_PlayerGet_64 *ptr = &pUnk28_98->mUnk_38; + ptr->mUnk_40 |= 0x10; + this->mUnk_64.func_ov000_0208a100(); + } } this->mUnk_73 = 0; @@ -441,26 +471,31 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) { case ItemId_27: case ItemId_28: case ItemId_29: + data_ov000_020b51b8.func_ov000_0206c96c(data_027e0cd8->mUnk_0C->func_ov000_02080a44()); + this->mUnk_73 = 1; break; default: - return; + break; } - data_ov000_020b51b8.func_ov000_0206c96c(data_027e0cd8->mUnk_0C->func_ov000_02080a44()); - this->mUnk_73 = 1; break; case 0x3B: this->mUnk_72 = 0; if (this->mUnk_54.mItemId != ItemId_Nothing) { + unk32 uStack_f0[4]; + Vec3p VStack_fc; + Vec3p_Add(this->mUnk_34, &data_ov110_021861ec.mUnk_00, &VStack_fc); + data_027e0cec->func_ov000_0209feac(0x874, &VStack_fc, 1, 0, 0); + uStack_f0[0] = 0x870; uStack_f0[1] = 0x871; uStack_f0[2] = 0x872; - uStack_f0[0] = 0x870; uStack_f0[3] = 0x873; - data_027e0cec->func_ov000_020a0000(this->mUnk_EC, this->mUnk_FC, uStack_f0, &VStack_fc, 1); + data_027e0cec->func_ov000_020a0000(this->mUnk_EC, &this->mUnk_FC, uStack_f0, &VStack_fc, 1); } + data_027e0cf8->func_ov024_020c7828(this->mUnk_54.mItemId); UnkStruct_ov000_02067bc4::UnkStruct1 auStack_30; data_ov000_020b504c.func_ov000_02067cf8(ItemManager::func_ov110_02185da4(this->mUnk_54.mItemId), 0, &auStack_30); break; diff --git a/src/112_PlayerSceneChange/PlayerSceneChange.cpp b/src/112_PlayerSceneChange/PlayerSceneChange.cpp index 9f30dc4e..4e772b35 100644 --- a/src/112_PlayerSceneChange/PlayerSceneChange.cpp +++ b/src/112_PlayerSceneChange/PlayerSceneChange.cpp @@ -37,9 +37,9 @@ ARM PlayerSceneChange::PlayerSceneChange() { ARM PlayerSceneChange::~PlayerSceneChange() { UnkStruct_ov000_0208f820_28 *pUnk_28 = this->mUnk_28; - pUnk_28->mUnk_40 &= 0xFFFD; + pUnk_28->mUnk_38.mUnk_40 &= 0xFFFD; - if (pUnk_28->mUnk_40 == 0) { + if (pUnk_28->mUnk_38.mUnk_40 == 0) { pUnk_28->mUnk_38.~UnkStruct_PlayerGet_64(); } @@ -648,7 +648,7 @@ ARM void PlayerSceneChange::vfunc_10(unk32 param1, unk32 param2) { this->mUnk_6C--; if (this->mUnk_6C < 0x37) { - this->mUnk_28->mUnk_40 |= 0x02; + this->mUnk_28->mUnk_38.mUnk_40 |= 0x02; break; } diff --git a/src/112_PlayerSceneChange/PlayerSceneChange2.cpp b/src/112_PlayerSceneChange/PlayerSceneChange2.cpp index 60933f09..eaf1b5a6 100644 --- a/src/112_PlayerSceneChange/PlayerSceneChange2.cpp +++ b/src/112_PlayerSceneChange/PlayerSceneChange2.cpp @@ -31,7 +31,7 @@ ARM void PlayerSceneChange2::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param func_ov000_0208ba10(auStack_18, &this->mUnk_24->mUnk_94, 0); - if (this->mUnk_44[0] != 0) { + if (this->mUnk_44->mUnk_00 != 0) { this->mUnk_28->func_ov000_0208cf20(0x1400, 0); } From 2a6ce25b7e82c43dfd0d135369432d198f5da148 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Fri, 24 Apr 2026 16:13:51 +0200 Subject: [PATCH 02/12] some docs --- config/eur/arm9/overlays/ov000/symbols.txt | 4 ++-- config/jp/arm9/overlays/ov000/symbols.txt | 4 ++-- include/MapObject/MapObject.hpp | 6 +++--- include/MapObject/MapObjectProfile.hpp | 2 +- include/Unknown/UnkStruct_ov000_020b5d34.hpp | 4 ++-- libs/nitro/include/nitro/math.h | 4 ++++ src/000_Second/MapObject/MapObjectProfile.cpp | 4 ++-- 7 files changed, 16 insertions(+), 12 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 4e07f742..f42da1dd 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -2501,8 +2501,8 @@ _ZN16MapObjectManager19func_ov000_0209c490Ev kind:function(arm,size=0x94) addr:0 _ZN16MapObjectManager19func_ov000_0209c524Ev kind:function(arm,size=0x17c) addr:0x0209c524 func_ov000_0209c6a0 kind:function(arm,size=0xc) addr:0x0209c6a0 func_ov000_0209c6ac kind:function(arm,size=0xc) addr:0x0209c6ac -_ZN24UnkStruct_ov000_020b5d3419func_ov000_0209c6b8Ei kind:function(arm,size=0x38) addr:0x0209c6b8 -_ZN24UnkStruct_ov000_020b5d3419func_ov000_0209c6f0Ev kind:function(arm,size=0x28) addr:0x0209c6f0 +_ZN24UnkStruct_ov000_020b5d3416GetProfileFromIdEi kind:function(arm,size=0x38) addr:0x0209c6b8 +_ZN24UnkStruct_ov000_020b5d3415CreateMapObjectEP9MapObject kind:function(arm,size=0x28) addr:0x0209c6f0 _ZN24UnkStruct_ov000_020b5d3419func_ov000_0209c718Ej kind:function(arm,size=0x78) addr:0x0209c718 _ZN12MapObject_2019func_ov000_0209c790EjP16MapObjectProfile kind:function(arm,size=0x1c) addr:0x0209c790 _ZN12MapObject_2019func_ov000_0209c7acEj kind:function(arm,size=0x1c) addr:0x0209c7ac diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index 09e70d55..99f8282b 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -2498,8 +2498,8 @@ _ZN16MapObjectManager19func_ov000_0209c490Ev kind:function(arm,size=0x94) addr:0 _ZN16MapObjectManager19func_ov000_0209c524Ev kind:function(arm,size=0x17c) addr:0x0209dcf0 func_ov000_0209de6c kind:function(arm,size=0xc) addr:0x0209de6c func_ov000_0209de78 kind:function(arm,size=0xc) addr:0x0209de78 -_ZN24UnkStruct_ov000_020b5d3419func_ov000_0209c6b8Ei kind:function(arm,size=0x38) addr:0x0209de84 -_ZN24UnkStruct_ov000_020b5d3419func_ov000_0209c6f0Ev kind:function(arm,size=0x28) addr:0x0209debc +_ZN24UnkStruct_ov000_020b5d3416GetProfileFromIdEi kind:function(arm,size=0x38) addr:0x0209de84 +_ZN24UnkStruct_ov000_020b5d3415CreateMapObjectEP9MapObject kind:function(arm,size=0x28) addr:0x0209debc _ZN24UnkStruct_ov000_020b5d3419func_ov000_0209c718Ej kind:function(arm,size=0x78) addr:0x0209dee4 _ZN12MapObject_2019func_ov000_0209c790EjP16MapObjectProfile kind:function(arm,size=0x1c) addr:0x0209df5c _ZN12MapObject_2019func_ov000_0209c7acEj kind:function(arm,size=0x1c) addr:0x0209df78 diff --git a/include/MapObject/MapObject.hpp b/include/MapObject/MapObject.hpp index d4ea4937..de62cca1 100644 --- a/include/MapObject/MapObject.hpp +++ b/include/MapObject/MapObject.hpp @@ -95,7 +95,7 @@ class MapObject_10 : public MapObject_10_Base { class MapObject_20 { public: - /* 00 */ u16 mUnk_00[4]; + /* 00 */ u16 mUnk_00[4]; // parameters /* 08 */ u8 mUnk_08[2]; /* 0A */ u16 mUnk_0A[2]; /* 0E */ unk16 mUnk_0E; @@ -125,7 +125,7 @@ class MapObject : public SysObject { /* 1B */ unk8 mUnk_1B; /* 1C */ MapObjFlags mFlags[1]; /* 1E */ unk16 mUnk_1E; - /* 20 */ MapObject_20 mUnk_20; + /* 20 */ MapObject_20 mUnk_20; // parameters /* 38 */ unk8 mUnk_38; /* 39 */ unk8 mUnk_39; /* 3A */ Vec2b mUnk_3A; @@ -133,7 +133,7 @@ class MapObject : public SysObject { /* 40 */ // data_ov000_020b3590 - /* 00 */ virtual bool vfunc_00(); + /* 00 */ virtual bool vfunc_00(); // Init? the newly-created map object is deleted if this returns false /* 04 */ virtual void vfunc_04(); /* 08 */ virtual void vfunc_08(); /* 0C */ virtual void vfunc_0C(); diff --git a/include/MapObject/MapObjectProfile.hpp b/include/MapObject/MapObjectProfile.hpp index a9854c51..a31476cb 100644 --- a/include/MapObject/MapObjectProfile.hpp +++ b/include/MapObject/MapObjectProfile.hpp @@ -24,7 +24,7 @@ class MapObjectProfile : public SysObject { /* 0E */ unk8 mUnk_0E; /* 0F */ u8 mUnk_0F; /* 10 */ MapObjectId mMapObjId; - /* 14 */ unk32 mUnk_14; + /* 14 */ MapObjectId mUnk_14; /* 18 */ unk32 mUnk_18; /* 1C */ unk8 mUnk_1C; /* 1D */ unk8 mUnk_1D; diff --git a/include/Unknown/UnkStruct_ov000_020b5d34.hpp b/include/Unknown/UnkStruct_ov000_020b5d34.hpp index ee0a9691..27bdc686 100644 --- a/include/Unknown/UnkStruct_ov000_020b5d34.hpp +++ b/include/Unknown/UnkStruct_ov000_020b5d34.hpp @@ -28,8 +28,8 @@ class UnkStruct_ov000_020b5d34 { ~UnkStruct_ov000_020b5d34() {} - MapObjectProfile *func_ov000_0209c6b8(unk32 param1); - void func_ov000_0209c6f0(); + MapObjectProfile *GetProfileFromId(MapObjectId mapObjId); + MapObject *CreateMapObject(MapObjectId mapObjId); static unk32 func_ov000_0209c718(u32 param1); }; diff --git a/libs/nitro/include/nitro/math.h b/libs/nitro/include/nitro/math.h index f01df9dd..4f9fc4e0 100644 --- a/libs/nitro/include/nitro/math.h +++ b/libs/nitro/include/nitro/math.h @@ -127,7 +127,11 @@ union Vec3p { Vec3p() {} Vec3p(Vec3p &from) { + #if __MWERKS__ this->coords = from.coords; + #else + *this = from; + #endif } Vec3p(q20 X, q20 Y, q20 Z) { x = X; diff --git a/src/000_Second/MapObject/MapObjectProfile.cpp b/src/000_Second/MapObject/MapObjectProfile.cpp index 1ee4e414..1925662b 100644 --- a/src/000_Second/MapObject/MapObjectProfile.cpp +++ b/src/000_Second/MapObject/MapObjectProfile.cpp @@ -68,7 +68,7 @@ ARM unk32 MapObjectProfile::func_ov000_0209c8e4(MapObject_20 *param1) { ARM void MapObjectProfile::func_ov000_0209c8ec(MapObjectProfile *thisx) { if (thisx->mUnk_0F == 0) { if (thisx->mUnk_14 != 0) { - thisx->func_ov000_0209c8ec(data_ov000_020b5d34.func_ov000_0209c6b8(thisx->mUnk_14)); + thisx->func_ov000_0209c8ec(data_ov000_020b5d34.GetProfileFromId(thisx->mUnk_14)); } if (thisx->mUnk_18 != 0) { @@ -136,7 +136,7 @@ ARM MapObjectProfile_Derived2_20 *MapObjectProfile_Derived3::vfunc_04() { } ARM void MapObjectProfile_Derived3::vfunc_08() { - this->mUnk_20 = data_ov000_020b5d34.func_ov000_0209c6b8(this->mUnk_14)->vfunc_04(); + this->mUnk_20 = data_ov000_020b5d34.GetProfileFromId(this->mUnk_14)->vfunc_04(); } ARM MapObjectProfile_Derived4::MapObjectProfile_Derived4(MapObjectId mapObjId1, MapObjectId mapObjId2) : From 1a4d63b87c7a8a01bda527595d388b092cb758c0 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Fri, 24 Apr 2026 16:42:16 +0200 Subject: [PATCH 03/12] fix build issues --- config/eur/arm9/overlays/ov000/symbols.txt | 2 +- config/jp/arm9/overlays/ov000/symbols.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index f42da1dd..d930c499 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -2501,7 +2501,7 @@ _ZN16MapObjectManager19func_ov000_0209c490Ev kind:function(arm,size=0x94) addr:0 _ZN16MapObjectManager19func_ov000_0209c524Ev kind:function(arm,size=0x17c) addr:0x0209c524 func_ov000_0209c6a0 kind:function(arm,size=0xc) addr:0x0209c6a0 func_ov000_0209c6ac kind:function(arm,size=0xc) addr:0x0209c6ac -_ZN24UnkStruct_ov000_020b5d3416GetProfileFromIdEi kind:function(arm,size=0x38) addr:0x0209c6b8 +_ZN24UnkStruct_ov000_020b5d3416GetProfileFromIdEj kind:function(arm,size=0x38) addr:0x0209c6b8 _ZN24UnkStruct_ov000_020b5d3415CreateMapObjectEP9MapObject kind:function(arm,size=0x28) addr:0x0209c6f0 _ZN24UnkStruct_ov000_020b5d3419func_ov000_0209c718Ej kind:function(arm,size=0x78) addr:0x0209c718 _ZN12MapObject_2019func_ov000_0209c790EjP16MapObjectProfile kind:function(arm,size=0x1c) addr:0x0209c790 diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index 99f8282b..42a22b05 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -2498,7 +2498,7 @@ _ZN16MapObjectManager19func_ov000_0209c490Ev kind:function(arm,size=0x94) addr:0 _ZN16MapObjectManager19func_ov000_0209c524Ev kind:function(arm,size=0x17c) addr:0x0209dcf0 func_ov000_0209de6c kind:function(arm,size=0xc) addr:0x0209de6c func_ov000_0209de78 kind:function(arm,size=0xc) addr:0x0209de78 -_ZN24UnkStruct_ov000_020b5d3416GetProfileFromIdEi kind:function(arm,size=0x38) addr:0x0209de84 +_ZN24UnkStruct_ov000_020b5d3416GetProfileFromIdEj kind:function(arm,size=0x38) addr:0x0209de84 _ZN24UnkStruct_ov000_020b5d3415CreateMapObjectEP9MapObject kind:function(arm,size=0x28) addr:0x0209debc _ZN24UnkStruct_ov000_020b5d3419func_ov000_0209c718Ej kind:function(arm,size=0x78) addr:0x0209dee4 _ZN12MapObject_2019func_ov000_0209c790EjP16MapObjectProfile kind:function(arm,size=0x1c) addr:0x0209df5c From 276f8c26e34a17d50c8d9af6db401a8f08ddc159 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Sat, 25 Apr 2026 01:15:34 +0200 Subject: [PATCH 04/12] random docs --- config/eur/arm9/overlays/ov000/symbols.txt | 2 +- config/jp/arm9/overlays/ov000/symbols.txt | 2 +- include/Unknown/UnkStruct_ov000_02067bc4.hpp | 3 ++- src/110_PlayerGet/PlayerGet.cpp | 1 + 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index d930c499..04833b24 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -2498,7 +2498,7 @@ _ZN16MapObjectManager19func_ov000_0209c3a8Ev kind:function(arm,size=0x40) addr:0 _ZN16MapObjectManager19func_ov000_0209c3e8Ev kind:function(arm,size=0x5c) addr:0x0209c3e8 _ZN16MapObjectManager19func_ov000_0209c444Ev kind:function(arm,size=0x4c) addr:0x0209c444 _ZN16MapObjectManager19func_ov000_0209c490Ev kind:function(arm,size=0x94) addr:0x0209c490 -_ZN16MapObjectManager19func_ov000_0209c524Ev kind:function(arm,size=0x17c) addr:0x0209c524 +_ZN16MapObjectManager17AllocateMapObjectEv kind:function(arm,size=0x17c) addr:0x0209c524 func_ov000_0209c6a0 kind:function(arm,size=0xc) addr:0x0209c6a0 func_ov000_0209c6ac kind:function(arm,size=0xc) addr:0x0209c6ac _ZN24UnkStruct_ov000_020b5d3416GetProfileFromIdEj kind:function(arm,size=0x38) addr:0x0209c6b8 diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index 42a22b05..a6257de9 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -2495,7 +2495,7 @@ _ZN16MapObjectManager19func_ov000_0209c3a8Ev kind:function(arm,size=0x40) addr:0 _ZN16MapObjectManager19func_ov000_0209c3e8Ev kind:function(arm,size=0x5c) addr:0x0209dbb4 _ZN16MapObjectManager19func_ov000_0209c444Ev kind:function(arm,size=0x4c) addr:0x0209dc10 _ZN16MapObjectManager19func_ov000_0209c490Ev kind:function(arm,size=0x94) addr:0x0209dc5c -_ZN16MapObjectManager19func_ov000_0209c524Ev kind:function(arm,size=0x17c) addr:0x0209dcf0 +_ZN16MapObjectManager17AllocateMapObjectEv kind:function(arm,size=0x17c) addr:0x0209dcf0 func_ov000_0209de6c kind:function(arm,size=0xc) addr:0x0209de6c func_ov000_0209de78 kind:function(arm,size=0xc) addr:0x0209de78 _ZN24UnkStruct_ov000_020b5d3416GetProfileFromIdEj kind:function(arm,size=0x38) addr:0x0209de84 diff --git a/include/Unknown/UnkStruct_ov000_02067bc4.hpp b/include/Unknown/UnkStruct_ov000_02067bc4.hpp index 87acc840..f33673ed 100644 --- a/include/Unknown/UnkStruct_ov000_02067bc4.hpp +++ b/include/Unknown/UnkStruct_ov000_02067bc4.hpp @@ -117,7 +117,7 @@ class UnkStruct_ov000_020b504c { void *func_ov000_02067bb4(unk32 param1); UnkStruct_ov000_02067bc4 *func_ov000_02067bc4(unk32); - unk8 func_ov000_02067cf8(unk32 param1, unk32 param2, UnkStruct_ov000_02067bc4::UnkStruct1 *param3); + unk8 func_ov000_02067cf8(unk32 param1, unk32 param2, UnkStruct_ov000_02067bc4::UnkStruct1 *param3); // ShowText? void func_ov000_02067e60(u8 param1, unk32 param2); unk32 func_ov000_020682c0(unk32 param1); @@ -134,4 +134,5 @@ class UnkStruct_ov000_020b504c { void func_ov001_020be6f4(void); }; +// gMessageManager? extern UnkStruct_ov000_020b504c data_ov000_020b504c; diff --git a/src/110_PlayerGet/PlayerGet.cpp b/src/110_PlayerGet/PlayerGet.cpp index 4a2a763b..08c8fec3 100644 --- a/src/110_PlayerGet/PlayerGet.cpp +++ b/src/110_PlayerGet/PlayerGet.cpp @@ -190,6 +190,7 @@ ARM bool ItemManager::func_ov110_02184a40(ItemId itemId) { return false; } +// BMG IDs static const unk32 data_ov110_02185de8[] = { 0x30001, 0x30002, 0xB00D6, 0x8007A, 0x30003, 0x8007B, 0x8007C, 0x8007D, 0x8007E, 0x30004, 0x30005, 0x30006, 0x30007, 0x30008, 0x30009, 0x3000A, 0x3000B, 0x3000C, 0x3000D, 0x3000E, 0x3000F, 0xD0000, 0xD0001, 0xD0002, 0xD0003, 0xF00EB, From 3f3923e1bcad4670b9d611aba92a2d7c1a2bdb90 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Mon, 27 Apr 2026 18:03:25 +0200 Subject: [PATCH 05/12] match func_ov094_02172290 --- config/eur/arm9/overlays/ov031/symbols.txt | 62 ++++++++++---------- config/eur/arm9/overlays/ov094/symbols.txt | 2 +- config/jp/arm9/overlays/ov031/symbols.txt | 62 ++++++++++---------- include/MapObject/MapObjectUnkWDST.hpp | 5 +- include/Unknown/UnkStruct_027e0d34.hpp | 2 + src/031_Land/Actor/ActorRupee.cpp | 5 +- src/094_Land2/MapObject/MapObjectUnkWDST.cpp | 17 +++++- 7 files changed, 85 insertions(+), 70 deletions(-) diff --git a/config/eur/arm9/overlays/ov031/symbols.txt b/config/eur/arm9/overlays/ov031/symbols.txt index 450b6baf..100f0510 100644 --- a/config/eur/arm9/overlays/ov031/symbols.txt +++ b/config/eur/arm9/overlays/ov031/symbols.txt @@ -65,7 +65,7 @@ func_ov031_020d97f4 kind:function(arm,size=0x10) addr:0x020d97f4 func_ov031_020d9804 kind:function(arm,size=0x10) addr:0x020d9804 func_ov031_020d9814 kind:function(arm,size=0x10) addr:0x020d9814 func_ov031_020d9824 kind:function(arm,size=0x10) addr:0x020d9824 -func_ov031_020d9834 kind:function(arm,size=0x10) addr:0x020d9834 +_ZN18UnkStruct_027e0d3411TryItemGiveEi kind:function(arm,size=0x10) addr:0x020d9834 _ZN18UnkStruct_027e0d3419func_ov031_020d9844Ev kind:function(arm,size=0x10) addr:0x020d9844 func_ov031_020d9854 kind:function(arm,size=0x34) addr:0x020d9854 func_ov031_020d9888 kind:function(arm,size=0x34) addr:0x020d9888 @@ -1532,39 +1532,39 @@ _ZN23MapObjectProfileUnkTRES10GetProfileEv kind:function(arm,size=0xc) addr:0x02 _ZN23MapObjectProfileUnkTRES6CreateEv kind:function(arm,size=0x24) addr:0x02102e7c _ZN23MapObjectProfileUnkTRESC1Ev kind:function(arm,size=0x44) addr:0x02102ea0 _ZN16MapObjectUnkTRESC1Ev kind:function(arm,size=0x80) addr:0x02102ee4 -_ZN16MapObjectUnkTRES19func_ov031_02102f64Ev kind:function(arm,size=0x2c) addr:0x02102f64 -_ZN16MapObjectUnkTRES19func_ov031_02102f90Ev kind:function(arm,size=0x8) addr:0x02102f90 -_ZN16MapObjectUnkTRES19func_ov031_02102f98Ev kind:function(arm,size=0xc) addr:0x02102f98 +_ZN16MapObjectUnkTRES8vfunc_3CEv kind:function(arm,size=0x2c) addr:0x02102f64 +_ZN16MapObjectUnkTRES8vfunc_40Ev kind:function(arm,size=0x8) addr:0x02102f90 +_ZN16MapObjectUnkTRES8vfunc_54Ev kind:function(arm,size=0xc) addr:0x02102f98 _ZN16MapObjectUnkTRESD1Ev kind:function(arm,size=0x14) addr:0x02102fa4 _ZN16MapObjectUnkTRESD0Ev kind:function(arm,size=0x1c) addr:0x02102fb8 _ZN23MapObjectProfileUnkTRESD1Ev kind:function(arm,size=0x14) addr:0x02102fd4 -func_ov031_02102fe8 kind:function(arm,size=0x28) addr:0x02102fe8 -func_ov031_02103010 kind:function(arm,size=0x5c) addr:0x02103010 -func_ov031_0210306c kind:function(arm,size=0x10) addr:0x0210306c -func_ov031_0210307c kind:function(arm,size=0x80) addr:0x0210307c -func_ov031_021030fc kind:function(arm,size=0x14) addr:0x021030fc -_ZN19func_ov031_02103110D1Ev kind:function(arm,size=0x20) addr:0x02103110 -_ZN19func_ov031_02103130D0Ev kind:function(arm,size=0x28) addr:0x02103130 -_ZN19func_ov031_02103158D2Ev kind:function(arm,size=0x20) addr:0x02103158 -func_ov031_02103178 kind:function(arm,size=0xdc) addr:0x02103178 -func_ov031_02103254 kind:function(arm,size=0x2e0) addr:0x02103254 -func_ov031_02103534 kind:function(arm,size=0x27c) addr:0x02103534 -func_ov031_021037b0 kind:function(arm,size=0x14) addr:0x021037b0 -func_ov031_021037c4 kind:function(arm,size=0xc) addr:0x021037c4 -func_ov031_021037d0 kind:function(arm,size=0x94) addr:0x021037d0 -func_ov031_02103864 kind:function(arm,size=0x14) addr:0x02103864 -_ZN9MapObject19func_ov031_02103878Ev kind:function(arm,size=0x1c) addr:0x02103878 -func_ov031_02103894 kind:function(arm,size=0x3b4) addr:0x02103894 -func_ov031_02103c48 kind:function(arm,size=0xe8) addr:0x02103c48 -func_ov031_02103d30 kind:function(arm,size=0x108) addr:0x02103d30 -func_ov031_02103e38 kind:function(arm,size=0x100) addr:0x02103e38 -func_ov031_02103f38 kind:function(arm,size=0x8) addr:0x02103f38 -func_ov031_02103f40 kind:function(arm,size=0x8) addr:0x02103f40 -func_ov031_02103f48 kind:function(arm,size=0x58) addr:0x02103f48 -func_ov031_02103fa0 kind:function(arm,size=0x28) addr:0x02103fa0 -func_ov031_02103fc8 kind:function(arm,size=0x2c) addr:0x02103fc8 -func_ov031_02103ff4 kind:function(arm,size=0xc) addr:0x02103ff4 -_ZN19func_ov031_02104000D0Ev kind:function(arm,size=0x1c) addr:0x02104000 +_ZN19MapObjectUnkTRES_74C1Ei kind:function(arm,size=0x28) addr:0x02102fe8 +_ZN19MapObjectUnkTRES_748vfunc_1CEP19UnkSystem4_vfunc_1C kind:function(arm,size=0x5c) addr:0x02103010 +_ZN19MapObjectUnkTRES_7419func_ov031_0210306cEv kind:function(arm,size=0x10) addr:0x0210306c +_ZN18MapObjectChestBaseC2Ei kind:function(arm,size=0x80) addr:0x0210307c +_ZN19MapObjectUnkTRES_74D1Ev kind:function(arm,size=0x14) addr:0x021030fc +_ZN18MapObjectChestBaseD1Ev kind:function(arm,size=0x20) addr:0x02103110 +_ZN18MapObjectChestBaseD0Ev kind:function(arm,size=0x28) addr:0x02103130 +_ZN18MapObjectChestBaseD2Ev kind:function(arm,size=0x20) addr:0x02103158 +_ZN18MapObjectChestBase8vfunc_00Ev kind:function(arm,size=0xdc) addr:0x02103178 +_ZN18MapObjectChestBase8vfunc_04Ev kind:function(arm,size=0x2e0) addr:0x02103254 +_ZN18MapObjectChestBase8vfunc_08Ev kind:function(arm,size=0x27c) addr:0x02103534 +_ZN18MapObjectChestBase8vfunc_0CEv kind:function(arm,size=0x14) addr:0x021037b0 +_ZN18MapObjectChestBase8vfunc_28Ev kind:function(arm,size=0xc) addr:0x021037c4 +_ZN18MapObjectChestBase19func_ov031_021037d0Ev kind:function(arm,size=0x94) addr:0x021037d0 +_ZN18MapObjectChestBase19func_ov031_02103864Ev kind:function(arm,size=0x14) addr:0x02103864 +_ZN18MapObjectChestBase19func_ov031_02103878Ev kind:function(arm,size=0x1c) addr:0x02103878 +_ZN18MapObjectChestBase8vfunc_38Eii kind:function(arm,size=0x3b4) addr:0x02103894 +_ZN18MapObjectChestBase8vfunc_18EPcc kind:function(arm,size=0xe8) addr:0x02103c48 +_ZN18MapObjectChestBase8vfunc_14Ev kind:function(arm,size=0x108) addr:0x02103d30 +_ZN18MapObjectChestBase8vfunc_3CEv kind:function(arm,size=0x100) addr:0x02103e38 +_ZN18MapObjectChestBase8vfunc_40Ev kind:function(arm,size=0x8) addr:0x02103f38 +_ZN18MapObjectChestBase8vfunc_44Ev kind:function(arm,size=0x8) addr:0x02103f40 +_ZN18MapObjectChestBase8vfunc_48Ev kind:function(arm,size=0x58) addr:0x02103f48 +_ZN18MapObjectChestBase8vfunc_4CEv kind:function(arm,size=0x28) addr:0x02103fa0 +_ZN18MapObjectChestBase8vfunc_50Ev kind:function(arm,size=0x2c) addr:0x02103fc8 +_ZN18MapObjectChestBase8vfunc_54Ev kind:function(arm,size=0xc) addr:0x02103ff4 +_ZN19MapObjectUnkTRES_74D0Ev kind:function(arm,size=0x1c) addr:0x02104000 _ZN23MapObjectProfileUnkTRED10GetProfileEv kind:function(arm,size=0xc) addr:0x0210401c _ZN23MapObjectProfileUnkTRED6CreateEv kind:function(arm,size=0x24) addr:0x02104028 _ZN23MapObjectProfileUnkTREDC1Ev kind:function(arm,size=0x44) addr:0x0210404c diff --git a/config/eur/arm9/overlays/ov094/symbols.txt b/config/eur/arm9/overlays/ov094/symbols.txt index d7ca206b..d2980f47 100644 --- a/config/eur/arm9/overlays/ov094/symbols.txt +++ b/config/eur/arm9/overlays/ov094/symbols.txt @@ -415,7 +415,7 @@ _ZN16MapObjectUnkWDST19func_ov094_02172a44Ev kind:function(arm,size=0x9c) addr:0 _ZN16MapObjectUnkWDST19func_ov094_02172ae0Ev kind:function(arm,size=0x14) addr:0x02172ae0 _ZN16MapObjectUnkWDST19func_ov094_02172af4Ev kind:function(arm,size=0x108) addr:0x02172af4 _ZN16MapObjectUnkWDST19func_ov094_02172bfcEv kind:function(arm,size=0x98) addr:0x02172bfc -_ZN16MapObjectUnkWDST19func_ov094_02172c94Ev kind:function(arm,size=0x478) addr:0x02172c94 +_ZN16MapObjectUnkWDST19func_ov094_02172c94Ei kind:function(arm,size=0x478) addr:0x02172c94 _ZN16MapObjectUnkWDST19func_ov094_0217310cEv kind:function(arm,size=0xd8) addr:0x0217310c _ZN16MapObjectUnkWDST19func_ov094_021731e4Ev kind:function(arm,size=0x280) addr:0x021731e4 _ZN16MapObjectUnkWDST19func_ov094_02173464Ev kind:function(arm,size=0x30) addr:0x02173464 diff --git a/config/jp/arm9/overlays/ov031/symbols.txt b/config/jp/arm9/overlays/ov031/symbols.txt index 7f8a9634..536abb79 100644 --- a/config/jp/arm9/overlays/ov031/symbols.txt +++ b/config/jp/arm9/overlays/ov031/symbols.txt @@ -65,7 +65,7 @@ func_ov031_020db194 kind:function(arm,size=0x10) addr:0x020db194 func_ov031_020db1a4 kind:function(arm,size=0x10) addr:0x020db1a4 func_ov031_020db1b4 kind:function(arm,size=0x10) addr:0x020db1b4 func_ov031_020db1c4 kind:function(arm,size=0x10) addr:0x020db1c4 -func_ov031_020db1d4 kind:function(arm,size=0x10) addr:0x020db1d4 +_ZN18UnkStruct_027e0d3411TryItemGiveEi kind:function(arm,size=0x10) addr:0x020db1d4 _ZN18UnkStruct_027e0d3419func_ov031_020d9844Ev kind:function(arm,size=0x10) addr:0x020db1e4 func_ov031_020db1f4 kind:function(arm,size=0x34) addr:0x020db1f4 func_ov031_020db228 kind:function(arm,size=0x34) addr:0x020db228 @@ -1531,39 +1531,39 @@ _ZN23MapObjectProfileUnkTRES10GetProfileEv kind:function(arm,size=0xc) addr:0x02 _ZN23MapObjectProfileUnkTRES6CreateEv kind:function(arm,size=0x24) addr:0x02104bd8 _ZN23MapObjectProfileUnkTRESC1Ev kind:function(arm,size=0x44) addr:0x02104bfc _ZN16MapObjectUnkTRESC1Ev kind:function(arm,size=0x80) addr:0x02104c40 -_ZN16MapObjectUnkTRES19func_ov031_02102f64Ev kind:function(arm,size=0x2c) addr:0x02104cc0 -_ZN16MapObjectUnkTRES19func_ov031_02102f90Ev kind:function(arm,size=0x8) addr:0x02104cec -_ZN16MapObjectUnkTRES19func_ov031_02102f98Ev kind:function(arm,size=0xc) addr:0x02104cf4 +_ZN16MapObjectUnkTRES8vfunc_3CEv kind:function(arm,size=0x2c) addr:0x02104cc0 +_ZN16MapObjectUnkTRES8vfunc_40Ev kind:function(arm,size=0x8) addr:0x02104cec +_ZN16MapObjectUnkTRES8vfunc_54Ev kind:function(arm,size=0xc) addr:0x02104cf4 _ZN16MapObjectUnkTRESD1Ev kind:function(arm,size=0x14) addr:0x02104d00 _ZN16MapObjectUnkTRESD0Ev kind:function(arm,size=0x1c) addr:0x02104d14 _ZN23MapObjectProfileUnkTRESD1Ev kind:function(arm,size=0x14) addr:0x02104d30 -func_ov031_02104d44 kind:function(arm,size=0x28) addr:0x02104d44 -func_ov031_02104d6c kind:function(arm,size=0x5c) addr:0x02104d6c -func_ov031_02104dc8 kind:function(arm,size=0x10) addr:0x02104dc8 -func_ov031_02104dd8 kind:function(arm,size=0x80) addr:0x02104dd8 -func_ov031_02104e58 kind:function(arm,size=0x14) addr:0x02104e58 -_ZN19func_ov031_02104e6cD1Ev kind:function(arm,size=0x20) addr:0x02104e6c -_ZN19func_ov031_02104e8cD0Ev kind:function(arm,size=0x28) addr:0x02104e8c -_ZN19func_ov031_02104eb4D2Ev kind:function(arm,size=0x20) addr:0x02104eb4 -func_ov031_02104ed4 kind:function(arm,size=0xdc) addr:0x02104ed4 -func_ov031_02104fb0 kind:function(arm,size=0x2e0) addr:0x02104fb0 -func_ov031_02105290 kind:function(arm,size=0x27c) addr:0x02105290 -func_ov031_0210550c kind:function(arm,size=0x14) addr:0x0210550c -func_ov031_02105520 kind:function(arm,size=0xc) addr:0x02105520 -func_ov031_0210552c kind:function(arm,size=0x94) addr:0x0210552c -func_ov031_021055c0 kind:function(arm,size=0x14) addr:0x021055c0 -func_ov031_021055d4 kind:function(arm,size=0x1c) addr:0x021055d4 -func_ov031_021055f0 kind:function(arm,size=0x3b4) addr:0x021055f0 -func_ov031_021059a4 kind:function(arm,size=0xe8) addr:0x021059a4 -func_ov031_02105a8c kind:function(arm,size=0x108) addr:0x02105a8c -func_ov031_02105b94 kind:function(arm,size=0x100) addr:0x02105b94 -func_ov031_02105c94 kind:function(arm,size=0x8) addr:0x02105c94 -func_ov031_02105c9c kind:function(arm,size=0x8) addr:0x02105c9c -func_ov031_02105ca4 kind:function(arm,size=0x58) addr:0x02105ca4 -func_ov031_02105cfc kind:function(arm,size=0x28) addr:0x02105cfc -func_ov031_02105d24 kind:function(arm,size=0x2c) addr:0x02105d24 -func_ov031_02105d50 kind:function(arm,size=0xc) addr:0x02105d50 -_ZN19func_ov031_02105d5cD0Ev kind:function(arm,size=0x1c) addr:0x02105d5c +_ZN19MapObjectUnkTRES_74C1Ei kind:function(arm,size=0x28) addr:0x02104d44 +_ZN19MapObjectUnkTRES_748vfunc_1CEP19UnkSystem4_vfunc_1C kind:function(arm,size=0x5c) addr:0x02104d6c +_ZN19MapObjectUnkTRES_7419func_ov031_0210306cEv kind:function(arm,size=0x10) addr:0x02104dc8 +_ZN18MapObjectChestBaseC2Ei kind:function(arm,size=0x80) addr:0x02104dd8 +_ZN19MapObjectUnkTRES_74D1Ev kind:function(arm,size=0x14) addr:0x02104e58 +_ZN18MapObjectChestBaseD1Ev kind:function(arm,size=0x20) addr:0x02104e6c +_ZN18MapObjectChestBaseD0Ev kind:function(arm,size=0x28) addr:0x02104e8c +_ZN18MapObjectChestBaseD2Ev kind:function(arm,size=0x20) addr:0x02104eb4 +_ZN18MapObjectChestBase8vfunc_00Ev kind:function(arm,size=0xdc) addr:0x02104ed4 +_ZN18MapObjectChestBase8vfunc_04Ev kind:function(arm,size=0x2e0) addr:0x02104fb0 +_ZN18MapObjectChestBase8vfunc_08Ev kind:function(arm,size=0x27c) addr:0x02105290 +_ZN18MapObjectChestBase8vfunc_0CEv kind:function(arm,size=0x14) addr:0x0210550c +_ZN18MapObjectChestBase8vfunc_28Ev kind:function(arm,size=0xc) addr:0x02105520 +_ZN18MapObjectChestBase19func_ov031_021037d0Ev kind:function(arm,size=0x94) addr:0x0210552c +_ZN18MapObjectChestBase19func_ov031_02103864Ev kind:function(arm,size=0x14) addr:0x021055c0 +_ZN18MapObjectChestBase19func_ov031_02103878Ev kind:function(arm,size=0x1c) addr:0x021055d4 +_ZN18MapObjectChestBase8vfunc_38Eii kind:function(arm,size=0x3b4) addr:0x021055f0 +_ZN18MapObjectChestBase8vfunc_18EPcc kind:function(arm,size=0xe8) addr:0x021059a4 +_ZN18MapObjectChestBase8vfunc_14Ev kind:function(arm,size=0x108) addr:0x02105a8c +_ZN18MapObjectChestBase8vfunc_3CEv kind:function(arm,size=0x100) addr:0x02105b94 +_ZN18MapObjectChestBase8vfunc_40Ev kind:function(arm,size=0x8) addr:0x02105c94 +_ZN18MapObjectChestBase8vfunc_44Ev kind:function(arm,size=0x8) addr:0x02105c9c +_ZN18MapObjectChestBase8vfunc_48Ev kind:function(arm,size=0x58) addr:0x02105ca4 +_ZN18MapObjectChestBase8vfunc_4CEv kind:function(arm,size=0x28) addr:0x02105cfc +_ZN18MapObjectChestBase8vfunc_50Ev kind:function(arm,size=0x2c) addr:0x02105d24 +_ZN18MapObjectChestBase8vfunc_54Ev kind:function(arm,size=0xc) addr:0x02105d50 +_ZN19MapObjectUnkTRES_74D0Ev kind:function(arm,size=0x1c) addr:0x02105d5c _ZN23MapObjectProfileUnkTRED10GetProfileEv kind:function(arm,size=0xc) addr:0x02105d78 _ZN23MapObjectProfileUnkTRED6CreateEv kind:function(arm,size=0x24) addr:0x02105d84 _ZN23MapObjectProfileUnkTREDC1Ev kind:function(arm,size=0x44) addr:0x02105da8 diff --git a/include/MapObject/MapObjectUnkWDST.hpp b/include/MapObject/MapObjectUnkWDST.hpp index 7dfeda85..24b16219 100644 --- a/include/MapObject/MapObjectUnkWDST.hpp +++ b/include/MapObject/MapObjectUnkWDST.hpp @@ -10,7 +10,8 @@ class MapObjectUnkWDST : public MapObject { public: /* 00 (base) */ - /* 40 */ + /* 40 */ STRUCT_PAD(0x40, 0xB8); + /* B8 */ unk32 mUnk_B8; MapObjectUnkWDST(); @@ -34,7 +35,7 @@ class MapObjectUnkWDST : public MapObject { void func_ov094_02172ae0(void); void func_ov094_02172af4(void); void func_ov094_02172bfc(void); - void func_ov094_02172c94(void); + void func_ov094_02172c94(unk32 param1); void func_ov094_0217310c(void); void func_ov094_021731e4(void); void func_ov094_02173464(void); diff --git a/include/Unknown/UnkStruct_027e0d34.hpp b/include/Unknown/UnkStruct_027e0d34.hpp index 277cb6d7..72fcd9b0 100644 --- a/include/Unknown/UnkStruct_027e0d34.hpp +++ b/include/Unknown/UnkStruct_027e0d34.hpp @@ -1,5 +1,6 @@ #pragma once +#include "Item/Item.hpp" #include "global.h" #include "types.h" @@ -11,6 +12,7 @@ class UnkStruct_027e0d34 { ~UnkStruct_027e0d34(); void func_ov031_020d9844(); + bool TryItemGive(ItemId itemId); }; extern UnkStruct_027e0d34 *data_027e0d34; diff --git a/src/031_Land/Actor/ActorRupee.cpp b/src/031_Land/Actor/ActorRupee.cpp index dcf259a3..9edd292d 100644 --- a/src/031_Land/Actor/ActorRupee.cpp +++ b/src/031_Land/Actor/ActorRupee.cpp @@ -5,6 +5,7 @@ #include "Unknown/UnkStruct_027e0cd8.hpp" #include "Unknown/UnkStruct_027e0ce0.hpp" #include "Unknown/UnkStruct_027e0cec.hpp" +#include "Unknown/UnkStruct_027e0d34.hpp" extern "C" void func_01ffedac(u16 *, Vec3p *); extern "C" void func_01fff05c(u32 *, UnkStruct_027e0cd8_0c *, Vec3p *); @@ -14,9 +15,7 @@ extern "C" void func_ov017_020bf99c(); extern "C" void func_ov031_0210acd4(u8); extern "C" unk32 func_ov031_0210af50(u16, unk32 *); extern void func_ov031_0210b0e4(u16, unk32); -extern "C" unk32 func_ov031_020d9834(unk32 *); -extern unk32 *data_027e0d34; extern Cylinder data_ov031_02113478; ARM DECL_PROFILE(ActorProfileRupee); @@ -387,7 +386,7 @@ ARM void ActorRupee::func_ov031_020e951c() { break; } - if (itemId != ItemId_None && func_ov031_020d9834(data_027e0d34) == 0) { + if (itemId != ItemId_None && !data_027e0d34->TryItemGive(itemId)) { return; } diff --git a/src/094_Land2/MapObject/MapObjectUnkWDST.cpp b/src/094_Land2/MapObject/MapObjectUnkWDST.cpp index e21c7733..8b13ffec 100644 --- a/src/094_Land2/MapObject/MapObjectUnkWDST.cpp +++ b/src/094_Land2/MapObject/MapObjectUnkWDST.cpp @@ -1,7 +1,10 @@ //! TODO: This file was generated automatically and might contain errors #include "MapObject/MapObjectUnkWDST.hpp" +#include "Item/Item.hpp" #include "System/SysNew.hpp" +#include "Unknown/UnkStruct_027e09b8.hpp" +#include "Unknown/UnkStruct_027e0d34.hpp" ARM DECL_PROFILE(MapObjectProfileUnkWDST); @@ -19,7 +22,17 @@ ARM void MapObjectUnkWDST::func_ov094_02171e58(void) {} ARM void MapObjectUnkWDST::func_ov094_02171e9c(void) {} ARM void MapObjectUnkWDST::func_ov094_02171fbc(void) {} ARM void MapObjectUnkWDST::func_ov094_02172030(void) {} -ARM void MapObjectUnkWDST::func_ov094_02172290(void) {} + +ARM void MapObjectUnkWDST::func_ov094_02172290(void) { + if (!data_027e09b8->func_01ffd420()) { + if (this->mUnk_B8 != 2) { + data_027e0d34->TryItemGive(this->mUnk_B8 + ItemId_PanFluteSong_101); + } + + this->func_ov094_02172c94(5); + } +} + ARM void MapObjectUnkWDST::func_ov094_021722e0(void) {} ARM void MapObjectUnkWDST::func_ov094_021722f4(void) {} ARM void MapObjectUnkWDST::func_ov094_021726a0(void) {} @@ -32,7 +45,7 @@ ARM void MapObjectUnkWDST::func_ov094_02172a44(void) {} ARM void MapObjectUnkWDST::func_ov094_02172ae0(void) {} ARM void MapObjectUnkWDST::func_ov094_02172af4(void) {} ARM void MapObjectUnkWDST::func_ov094_02172bfc(void) {} -ARM void MapObjectUnkWDST::func_ov094_02172c94(void) {} +ARM void MapObjectUnkWDST::func_ov094_02172c94(unk32 param1) {} ARM void MapObjectUnkWDST::func_ov094_0217310c(void) {} ARM void MapObjectUnkWDST::func_ov094_021731e4(void) {} ARM void MapObjectUnkWDST::func_ov094_02173464(void) {} From 716526dd1a22f376a05ad5f77ea737b13a069c63 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Mon, 27 Apr 2026 18:04:11 +0200 Subject: [PATCH 06/12] random docs --- include/Actor/Actor.hpp | 2 +- include/Item/Item.hpp | 10 +++++----- include/Save/AdventureFlags.hpp | 4 ++-- include/Unknown/UnkStruct_ov000_02067bc4.hpp | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp index 31d3e3ba..23cc66d6 100644 --- a/include/Actor/Actor.hpp +++ b/include/Actor/Actor.hpp @@ -123,7 +123,7 @@ class Actor : public SysObject { /* 52 */ u16 mUnk_52; /* 54 */ unk32 mUnk_54; /* 58 */ ActorFlags mFlags[1]; - /* 5C */ Actor_5c mUnk_5C; + /* 5C */ Actor_5c mUnk_5C; // related to actor parameters /* 6C */ u16 mUnk_6C; // actor user id? /* 6E */ u16 mUnk_6E; /* 70 */ u16 mUnk_70; diff --git a/include/Item/Item.hpp b/include/Item/Item.hpp index 0bb59065..795b5c7b 100644 --- a/include/Item/Item.hpp +++ b/include/Item/Item.hpp @@ -126,11 +126,11 @@ enum ItemId_ { /* 0x16 */ ItemId_SnowGlyph = 22, /* 0x17 */ ItemId_OceanGlyph = 23, /* 0x18 */ ItemId_FireGlyph = 24, - /* 0x19 */ ItemId_25 = 25, - /* 0x1A */ ItemId_26 = 26, - /* 0x1B */ ItemId_27 = 27, - /* 0x1C */ ItemId_28 = 28, - /* 0x1D */ ItemId_29 = 29, + /* 0x19 */ ItemId_25 = 25, // glyph after forest restoration song + /* 0x1A */ ItemId_26 = 26, // glyph after restoration song + /* 0x1B */ ItemId_27 = 27, // glyph after restoration song + /* 0x1C */ ItemId_28 = 28, // glyph after restoration song + /* 0x1D */ ItemId_29 = 29, // glyph after restoration song /* 0x1E */ ItemId_FinalTrack = 30, // unlocks the endgame portal /* 0x1F */ ItemId_31 = 31, /* 0x20 */ ItemId_32 = 32, diff --git a/include/Save/AdventureFlags.hpp b/include/Save/AdventureFlags.hpp index 14a45428..301e5c21 100644 --- a/include/Save/AdventureFlags.hpp +++ b/include/Save/AdventureFlags.hpp @@ -7,7 +7,7 @@ typedef u32 AdventureFlag; typedef u16 AdventureFlag_Half; enum AdventureFlag_ { - /* 0x000 */ AdventureFlag_Unk_000 = FLAG(0, 0), + /* 0x000 */ AdventureFlag_Nothing = FLAG(0, 0), /* 0x001 */ AdventureFlag_Unk_001 = FLAG(0, 1), /* 0x002 */ AdventureFlag_ObtainedSpiritTrain = FLAG(0, 2), /* 0x003 */ AdventureFlag_ObtainedRecruitSword = FLAG(0, 3), @@ -307,7 +307,7 @@ enum AdventureFlag_ { /* 0x11C */ AdventureFlag_Unk_11C = FLAG(8, 28), /* 0x11D */ AdventureFlag_Unk_11D = FLAG(8, 29), /* 0x11E */ AdventureFlag_Unk_11E = FLAG(8, 30), - /* 0x11F */ ZeldaTextVisitPirateHideoutFirstTime = FLAG(8, 31), + /* 0x11F */ AdventureFlag_ZeldaTextVisitPirateHideoutFirstTime = FLAG(8, 31), /* 0x120 */ AdventureFlag_Unk_120 = FLAG(9, 0), /* 0x121 */ AdventureFlag_WadatsumiBoardsTrain2 = FLAG(9, 1), diff --git a/include/Unknown/UnkStruct_ov000_02067bc4.hpp b/include/Unknown/UnkStruct_ov000_02067bc4.hpp index f33673ed..8ef6d0d9 100644 --- a/include/Unknown/UnkStruct_ov000_02067bc4.hpp +++ b/include/Unknown/UnkStruct_ov000_02067bc4.hpp @@ -80,10 +80,10 @@ typedef void (*UnkCallback2)(); class UnkStruct_ov000_020b504c_Sub3 : public SysObject { public: - /* 00 */ SectionINF1 *mUnk_00; - /* 04 */ BMGHeader *mUnk_04; - /* 08 */ BMGHeader *mUnk_08; - /* 0C */ unk32 mUnk_0C; + /* 00 */ SectionINF1 **mUnk_00; + /* 04 */ BMGHeader **mUnk_04; + /* 08 */ BMGHeader **mUnk_08; + /* 0C */ SectionINF1 *mUnk_0C; /* 10 */ unk32 mUnk_10; /* 14 */ From 5da14c61509363a3c41ea3c3d2d0de5eed5a94e8 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Mon, 27 Apr 2026 23:14:45 +0200 Subject: [PATCH 07/12] actor cleanup --- config/eur/arm9/overlays/ov000/delinks.txt | 1 + config/eur/arm9/overlays/ov000/symbols.txt | 8 +- config/jp/arm9/overlays/ov000/symbols.txt | 4 +- include/Actor/Actor.hpp | 75 ++++++++----------- src/000_Second/Actor/Actor.cpp | 14 ++-- src/000_Second/Actor/ActorEventIcon.cpp | 2 +- src/000_Second/Actor/ActorUnkSWOB.cpp | 23 +++--- src/000_Second/Actor/ActorUnkSWTM.cpp | 12 +-- .../Actor/ActorUnk_ov000_020a8bb0.cpp | 8 +- src/031_Land/Actor/ActorRupee.cpp | 30 ++++---- 10 files changed, 82 insertions(+), 95 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt index 5f01d9c9..1c9bc23f 100644 --- a/config/eur/arm9/overlays/ov000/delinks.txt +++ b/config/eur/arm9/overlays/ov000/delinks.txt @@ -28,6 +28,7 @@ src/000_Second/Actor/Actor.cpp: .data start:0x020b30e4 end:0x020b3140 src/000_Second/Actor/ActorUnkSWOB.cpp: + complete .text start:0x0209a8b8 end:0x0209aca8 .init start:0x020b07e8 end:0x020b0838 .ctor start:0x020b1908 end:0x020b190c diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 04833b24..54aaa178 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -2261,7 +2261,7 @@ func_ov000_02097528 kind:function(arm,size=0x20) addr:0x02097528 func_ov000_02097548 kind:function(arm,size=0x78) addr:0x02097548 func_ov000_020975c0 kind:function(arm,size=0x1c) addr:0x020975c0 func_ov000_020975dc kind:function(arm,size=0x1c) addr:0x020975dc -_ZN8Actor_5c19func_ov000_020975f8Ev kind:function(arm,size=0x78) addr:0x020975f8 +_ZN11ActorParams19func_ov000_020975f8Ev kind:function(arm,size=0x78) addr:0x020975f8 func_ov000_02097670 kind:function(arm,size=0xc) addr:0x02097670 _ZN12ActorProfileC2Ej kind:function(arm,size=0xa8) addr:0x0209767c _ZN12ActorProfileD2Ev kind:function(arm,size=0x28) addr:0x02097724 @@ -2669,7 +2669,7 @@ func_ov000_0209fe54 kind:function(arm,size=0x18) addr:0x0209fe54 func_ov000_0209fe6c kind:function(arm,size=0x18) addr:0x0209fe6c func_ov000_0209fe84 kind:function(arm,size=0x1c) addr:0x0209fe84 func_ov000_0209fea0 kind:function(arm,size=0xc) addr:0x0209fea0 -func_ov000_0209feac kind:function(arm,size=0x78) addr:0x0209feac +_ZN18UnkStruct_027e0cec19func_ov000_0209feacEiP5Vec3piii kind:function(arm,size=0x78) addr:0x0209feac func_ov000_0209ff24 kind:function(arm,size=0x28) addr:0x0209ff24 func_ov000_0209ff4c kind:function(arm,size=0x40) addr:0x0209ff4c _ZN18UnkStruct_027e0cec19func_ov000_0209ff8cEP22UnkStruct_PlayerGet_eciP5Vec3pi kind:function(arm,size=0x74) addr:0x0209ff8c @@ -3347,7 +3347,7 @@ __sinit_ov000_020b046c kind:function(arm,size=0x2f4) addr:0x020b046c __sinit_ov000_020b0760 kind:function(arm,size=0x14) addr:0x020b0760 __sinit_ov000_020b0774 kind:function(arm,size=0x34) addr:0x020b0774 __sinit_ov000_020b07a8 kind:function(arm,size=0x40) addr:0x020b07a8 -__sinit_ActorUnkSWOB.cpp kind:function(arm,size=0x50) addr:0x020b07e8 +__sinit_ActorUnkSWOB.cpp kind:function(arm,size=0x50) addr:0x020b07e8 local __sinit_ActorUnkSWTM.cpp kind:function(arm,size=0x50) addr:0x020b0838 __sinit_ActorEventIcon.cpp kind:function(arm,size=0x50) addr:0x020b0888 local __sinit_ActorUnkEFIK.cpp kind:function(arm,size=0x50) addr:0x020b08d8 local @@ -3382,7 +3382,7 @@ __sinit_ov000_020b18a0 kind:function(arm,size=0x14) addr:0x020b18a0 .p__sinit_ov000_020b0760 kind:data(word) addr:0x020b18fc .p__sinit_ov000_020b0774 kind:data(word) addr:0x020b1900 .p__sinit_ov000_020b07a8 kind:data(word) addr:0x020b1904 -.p__sinit_ActorUnkSWOB.cpp kind:data(word) addr:0x020b1908 +.p__sinit_ActorUnkSWOB.cpp kind:data(word) addr:0x020b1908 local .p__sinit_ActorUnkSWTM.cpp kind:data(word) addr:0x020b190c .p__sinit_ActorEventIcon.cpp kind:data(word) addr:0x020b1910 local .p__sinit_ActorUnkEFIK.cpp kind:data(word) addr:0x020b1914 local diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index a6257de9..b95b839a 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -2259,7 +2259,7 @@ func_ov000_02098cdc kind:function(arm,size=0x20) addr:0x02098cdc func_ov000_02098cfc kind:function(arm,size=0x78) addr:0x02098cfc func_ov000_02098d74 kind:function(arm,size=0x1c) addr:0x02098d74 func_ov000_02098d90 kind:function(arm,size=0x1c) addr:0x02098d90 -_ZN8Actor_5c19func_ov000_020975f8Ev kind:function(arm,size=0x78) addr:0x02098dac +_ZN11ActorParams19func_ov000_020975f8Ev kind:function(arm,size=0x78) addr:0x02098dac _ZN12ActorProfileC2Ej kind:function(arm,size=0xa8) addr:0x02098e24 _ZN12ActorProfileD2Ev kind:function(arm,size=0x28) addr:0x02098ecc _ZN12ActorProfile8vfunc_04Ev kind:function(arm,size=0x8) addr:0x02098ef4 @@ -2667,7 +2667,7 @@ func_ov000_020a162c kind:function(arm,size=0x18) addr:0x020a162c func_ov000_020a1644 kind:function(arm,size=0x18) addr:0x020a1644 func_ov000_020a165c kind:function(arm,size=0x1c) addr:0x020a165c func_ov000_020a1678 kind:function(arm,size=0xc) addr:0x020a1678 -func_ov000_020a1684 kind:function(arm,size=0x78) addr:0x020a1684 +_ZN18UnkStruct_027e0cec19func_ov000_0209feacEiP5Vec3piii kind:function(arm,size=0x78) addr:0x020a1684 func_ov000_020a16fc kind:function(arm,size=0x28) addr:0x020a16fc func_ov000_020a1724 kind:function(arm,size=0x40) addr:0x020a1724 _ZN18UnkStruct_027e0cec19func_ov000_0209ff8cEP22UnkStruct_PlayerGet_eciP5Vec3pi kind:function(arm,size=0x74) addr:0x020a1764 diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp index 23cc66d6..961788da 100644 --- a/include/Actor/Actor.hpp +++ b/include/Actor/Actor.hpp @@ -18,40 +18,41 @@ #define OV040_ARM ARM #endif -class Actor_5c_Base { +class ActorParams { public: - /* 00 */ Vec3p mUnk_00; - /* 0C */ s16 mUnk_0C; - /* 0E */ unk16 mUnk_0E; // padding? - /* 10 */ - - Actor_5c_Base() {}; -}; - -class Actor_5c : public Actor_5c_Base { -public: - /* 00 (base) */ - // /* 04 */ STRUCT_PAD(0x04, 0x28); - // /* 28 */ unk32 mUnk_28; - - Actor_5c() {}; - void func_ov000_020975f8(); -}; - -class Actor_5c_temp : public Actor_5c_Base { -public: - /* 00 (base) */ - /* 10 */ unk16 mUnk_10[3]; - /* 16 */ STRUCT_PAD(0x16, 0x28); + /* 00 */ Vec3p mInitialPos; + /* 0C */ s16 mInitialAngle; + /* 0E */ s8 mUnk_0E; + /* 0F */ bool mUnk_0F; + /* 10 */ u16 mParams[4]; + /* 18 */ Vec2b mUnk_18; + /* 1A */ u16 mUnk_1A; + /* 1C */ union { + unk32 mUnk_1C; + u16 mUnk_1C_0; + u16 mUnk_1C_2; + }; + /* 20 */ union { + unk32 mUnk_20; + unk16 mUnk_20_0; + unk16 mUnk_20_2; + }; + /* 24 */ unk16 mUnk_24; + /* 26 */ union { + unk16 mUnk_26; + unk8 mUnk_26_0; + unk8 mUnk_26_1; + }; /* 28 */ unk32 mUnk_28; + /* 2C */ unk32 mUnk_2C; + /* 30 */ - Actor_5c_temp() {}; void func_ov000_020975f8(); }; class UnkStruct_ov000_020b539c { public: - /* 00 */ Actor_5c_Base mUnk_00[3]; + /* 00 */ ActorParams mUnk_00; /* 30 */ ActorProfile *mUnk_30; /* 34 */ @@ -123,21 +124,7 @@ class Actor : public SysObject { /* 52 */ u16 mUnk_52; /* 54 */ unk32 mUnk_54; /* 58 */ ActorFlags mFlags[1]; - /* 5C */ Actor_5c mUnk_5C; // related to actor parameters - /* 6C */ u16 mUnk_6C; // actor user id? - /* 6E */ u16 mUnk_6E; - /* 70 */ u16 mUnk_70; - /* 70 */ u16 mUnk_72; - /* 74 */ u8 mUnk_74; - /* 74 */ u8 mUnk_75; - /* 76 */ u16 mUnk_76; - /* 78 */ u16 mUnk_78; - /* 7A */ unk16 mUnk_7A; - /* 7C */ unk32 mUnk_7C; - /* 80 */ s16 mUnk_80; - /* 80 */ unk16 mUnk_82; - /* 84 */ unk32 mUnk_84; - /* 88 */ unk32 mUnk_88; + /* 5C */ ActorParams mUnk_5C; /* 8C */ ActorRef mRef; /* 90 */ ActorProfile *mType; /* 94 */ @@ -195,9 +182,9 @@ class Actor : public SysObject { s32 func_ov000_020985f0(void *param1); void func_ov000_0209862c(unk32 param1); - void func_ov000_020973f4(UnkStruct_ov000_020b539c *param1, ActorId param2, Actor_5c *param3, unk32 param4); - void func_ov000_020973f4(UnkStruct_ov000_020b539c *param1, ActorId param2, Actor_5c *param3); - void func_ov000_020973f4(UnkStruct_ov000_020b539c *param1, ActorId param2, Actor_5c param3); + void func_ov000_020973f4(UnkStruct_ov000_020b539c *param1, ActorId param2, ActorParams *param3, unk32 param4); + void func_ov000_020973f4(UnkStruct_ov000_020b539c *param1, ActorId param2, ActorParams *param3); + void func_ov000_020973f4(UnkStruct_ov000_020b539c *param1, ActorId param2, ActorParams param3); void func_ov000_020989e0(); bool func_ov000_02098a60(unk32 param1); diff --git a/src/000_Second/Actor/Actor.cpp b/src/000_Second/Actor/Actor.cpp index 55b7327d..f0f37dbe 100644 --- a/src/000_Second/Actor/Actor.cpp +++ b/src/000_Second/Actor/Actor.cpp @@ -17,14 +17,14 @@ ARM Actor::Actor() { this->mUnk_52 = 0; this->mUnk_54 = 0; this->ResetFlags(); - this->mUnk_84 = 0; + this->mUnk_5C.mUnk_28 = 0; this->mUnk_5C.func_ov000_020975f8(); this->mRef.Reset(); this->mType = NULL; - _MI_CpuCopy(&data_ov000_020b539c_eur.mUnk_00, &this->mUnk_5C, sizeof(data_ov000_020b539c_eur.mUnk_00)); - this->mPos = this->mUnk_5C.mUnk_00; - this->mPrevPos = this->mUnk_5C.mUnk_00; - this->mAngle = this->mUnk_5C.mUnk_0C; + _MI_CpuCopy(&data_ov000_020b539c_eur.mUnk_00, &this->mUnk_5C, sizeof(ActorParams)); + this->mPos = this->mUnk_5C.mInitialPos; + this->mPrevPos = this->mUnk_5C.mInitialPos; + this->mAngle = this->mUnk_5C.mInitialAngle; SET_FLAGS(this->mFlags, ActorFlag_Alive, ActorFlag_Visible, ActorFlag_Active, ActorFlag_14); this->mUnk_44 = 0xFF; this->mUnk_46 = 0; @@ -76,8 +76,8 @@ ARM void Actor::func_ov000_020984d0() { } ARM void Actor::func_ov000_020984f0() { - if (this->mUnk_80 >= 0) { - data_027e0cd8->func_ov000_02081ecc(this->mUnk_80, 1); + if (this->mUnk_5C.mUnk_24 >= 0) { + data_027e0cd8->func_ov000_02081ecc(this->mUnk_5C.mUnk_24, 1); } } diff --git a/src/000_Second/Actor/ActorEventIcon.cpp b/src/000_Second/Actor/ActorEventIcon.cpp index 48f08766..73342e83 100644 --- a/src/000_Second/Actor/ActorEventIcon.cpp +++ b/src/000_Second/Actor/ActorEventIcon.cpp @@ -15,7 +15,7 @@ ARM ActorEventIcon::ActorEventIcon() { } ARM bool ActorEventIcon::vfunc_18(unk32 param1) { - this->mUnk_094.func_ov000_0206082c(0x5D, this->mUnk_6C); + this->mUnk_094.func_ov000_0206082c(0x5D, this->mUnk_5C.mParams[0]); return true; } diff --git a/src/000_Second/Actor/ActorUnkSWOB.cpp b/src/000_Second/Actor/ActorUnkSWOB.cpp index fd751713..9d3afd40 100644 --- a/src/000_Second/Actor/ActorUnkSWOB.cpp +++ b/src/000_Second/Actor/ActorUnkSWOB.cpp @@ -21,11 +21,11 @@ ARM ActorProfileUnkSWOB::ActorProfileUnkSWOB() : ARM ActorUnkSWOB::ActorUnkSWOB() {} ARM bool ActorUnkSWOB::vfunc_18(unk32 param1) { - this->mUnk_9E = this->mUnk_78; - this->mUnk_94 = this->mUnk_6E; - this->mUnk_98 = this->mUnk_70; - this->mUnk_A0 = this->mUnk_9E + this->mUnk_6C; - this->mUnk_A2 = this->mUnk_75; + this->mUnk_9E = this->mUnk_5C.mUnk_1C_0; + this->mUnk_94 = this->mUnk_5C.mParams[1]; + this->mUnk_98 = this->mUnk_5C.mParams[2]; + this->mUnk_A0 = this->mUnk_9E + this->mUnk_5C.mParams[0]; + this->mUnk_A2 = this->mUnk_5C.mUnk_18.y; this->mUnk_9C = this->mUnk_9E; if (this->func_ov000_02098a60(0)) { @@ -61,30 +61,29 @@ ARM void ActorUnkSWOB::func_ov000_0209a9b4(unk32 param1) { } } -// https://decomp.me/scratch/cUf0c ARM void ActorUnkSWOB::func_ov000_0209aa30(void) { if (this->mUnk_4C == 1) { return; } - switch (this->mUnk_72) { + switch (this->mUnk_5C.mParams[3]) { case 1: data_ov000_020b5214.func_ov000_0206db44(0xA3); break; case 3: data_ov000_020b5214.func_ov000_0206db44(0xA3); - s16 unk_78 = this->mUnk_78; + s16 unk_78 = this->mUnk_5C.mUnk_1C_0; if (unk_78 > 0) { - data_027e0cd8->func_ov000_02081d7c((s16) (unk_78 - 1), this->mUnk_75, 1); + data_027e0cd8->func_ov000_02081d7c((s16) (unk_78 - 1), this->mUnk_5C.mUnk_18.y, 1); } break; case 2: { Vec3p temp; Vec3p vec2; Vec3p vec; - Actor_5c_temp AStack_7c; - u16 auStack_80[4]; + ActorParams AStack_7c; + u16 auStack_80[2]; int j; u32 i; @@ -109,7 +108,7 @@ ARM void ActorUnkSWOB::func_ov000_0209aa30(void) { if (j < 10) { func_01ffedac(auStack_80, &vec); - func_01ffb9cc(&vec2, &vec); + func_01ffb9cc(&temp, &vec); i--; j++; } diff --git a/src/000_Second/Actor/ActorUnkSWTM.cpp b/src/000_Second/Actor/ActorUnkSWTM.cpp index e7639c3d..8091a122 100644 --- a/src/000_Second/Actor/ActorUnkSWTM.cpp +++ b/src/000_Second/Actor/ActorUnkSWTM.cpp @@ -30,11 +30,11 @@ ARM ActorUnkSWTM::~ActorUnkSWTM() { // https://decomp.me/scratch/qkP8m ARM bool ActorUnkSWTM::vfunc_18(unk32 param1) { - this->mUnk_9E = this->mUnk_78; - this->mUnk_98 = this->mUnk_70; - this->mUnk_A4 = this->mUnk_6E * 30; - this->mUnk_A0 = this->mUnk_9E + this->mUnk_6C; - this->mUnk_A2 = this->mUnk_75; + this->mUnk_9E = this->mUnk_5C.mUnk_1C_0; + this->mUnk_98 = this->mUnk_5C.mParams[2]; + this->mUnk_A4 = this->mUnk_5C.mParams[1] * 30; + this->mUnk_A0 = this->mUnk_9E + this->mUnk_5C.mParams[0]; + this->mUnk_A2 = this->mUnk_5C.mUnk_18.y; this->mUnk_9C = this->mUnk_9E; if (this->func_ov000_02098a60(0)) { @@ -167,7 +167,7 @@ ARM unk32 ActorUnkSWTM::func_ov000_0209b038(void) { break; } - for (int i = 0; i < this->mUnk_6C; i++) { + for (int i = 0; i < this->mUnk_5C.mParams[0]; i++) { if (!data_027e0cd8->func_ov000_02081e30(this->mUnk_9E + i, this->mUnk_A2)) { return 0; } diff --git a/src/000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp b/src/000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp index f909fd44..9b9082bb 100644 --- a/src/000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp +++ b/src/000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp @@ -60,7 +60,7 @@ ARM ActorUnk_ov000_020a8bb0::ActorUnk_ov000_020a8bb0(UnkSystem4 *param1, unk32 p ARM ActorUnk_ov000_020a8bb0::~ActorUnk_ov000_020a8bb0() {} ARM bool ActorUnk_ov000_020a8bb0::vfunc_18(unk32 param1) { - if (this->mUnk_70 == 0 && this->func_ov000_020a8dd0()) { + if (this->mUnk_5C.mParams[2] == 0 && this->func_ov000_020a8dd0()) { UNSET_FLAG(this->mFlags, ActorFlag_Alive); } @@ -80,11 +80,11 @@ ARM void ActorUnk_ov000_020a8bb0::vfunc_1c() { } ARM bool ActorUnk_ov000_020a8bb0::func_ov000_020a8db0() { - return data_027e0cd8->func_ov000_02081e30(this->mUnk_76, this->mUnk_74); + return data_027e0cd8->func_ov000_02081e30(this->mUnk_5C.mUnk_1A, this->mUnk_5C.mUnk_18.x); } ARM bool ActorUnk_ov000_020a8bb0::func_ov000_020a8dd0() { - return data_027e0cd8->func_ov000_02081e30(this->mUnk_78, this->mUnk_75); + return data_027e0cd8->func_ov000_02081e30(this->mUnk_5C.mUnk_1C_0, this->mUnk_5C.mUnk_18.y); } // non-matching @@ -125,7 +125,7 @@ ARM void ActorUnk_ov000_020a8bb0::vfunc_b0() { if (data_027e09b8->func_01ffd420() == 0) { ActorUnk_vfunc_b0 auStack_60; auStack_60.mUnk_24 = this; - auStack_60.mUnk_0C = this->mUnk_7C; + auStack_60.mUnk_0C = this->mUnk_5C.mUnk_20; auStack_60.mUnk_14 = 0; auStack_60.mUnk_18 = -1; auStack_60.mUnk_1C = -1; diff --git a/src/031_Land/Actor/ActorRupee.cpp b/src/031_Land/Actor/ActorRupee.cpp index 9edd292d..c20318cb 100644 --- a/src/031_Land/Actor/ActorRupee.cpp +++ b/src/031_Land/Actor/ActorRupee.cpp @@ -54,7 +54,7 @@ ARM void ActorRupee::func_ov031_020e8d2c(Vec3p *param1, u8 param2, unk32 param3, stack.sp4.z = param1->z; stack.sp2C = param4; stack.sp30 = param3; - this->func_ov000_020973f4(&data_ov000_020b539c_eur, ActorId_Rupee, (Actor_5c *) &stack, 0); + this->func_ov000_020973f4(&data_ov000_020b539c_eur, ActorId_Rupee, (ActorParams *) &stack, 0); } ARM ActorRupee::ActorRupee() : @@ -80,12 +80,12 @@ ARM bool ActorRupee::vfunc_18(unk32 param1) { SET_FLAG(this->mFlags, ActorFlag_12); } - if (this->mUnk_80 >= 0) { + if (this->mUnk_5C.mUnk_24 >= 0) { if (this->func_ov000_02098a60(0)) { return false; } - if (this->mUnk_6E == 0) { + if (this->mUnk_5C.mParams[1] == 0) { this->func_ov031_020e9904(3); } else { this->func_ov031_020e9904(10); @@ -94,7 +94,7 @@ ARM bool ActorRupee::vfunc_18(unk32 param1) { return true; } - switch (this->mUnk_88) { + switch (this->mUnk_5C.mUnk_2C) { case 0: this->mUnk_96 = 0x1E0; this->mUnk_94 = 0; @@ -156,7 +156,7 @@ ARM bool ActorRupee::vfunc_18(unk32 param1) { } ARM void ActorRupee::func_ov031_020e8fec() { - switch (this->mUnk_6C) { + switch (this->mUnk_5C.mParams[0]) { case RupeeId_Green: data_027e09a8->func_ov000_02071b30(0x73, &this->mPos, 0); break; @@ -175,7 +175,7 @@ ARM void ActorRupee::func_ov031_020e8fec() { ARM void ActorRupee::func_ov031_020e9068() { bool var_r4 = false; - switch (this->mUnk_6C) { + switch (this->mUnk_5C.mParams[0]) { case RupeeId_BigGreen: case RupeeId_BigRed: case RupeeId_Gold: @@ -189,7 +189,7 @@ ARM void ActorRupee::func_ov031_020e9068() { } } - if (this->mUnk_80 >= 0 && this->mUnk_76 != 0) { + if (this->mUnk_5C.mUnk_24 >= 0 && this->mUnk_5C.mUnk_1A != 0) { this->func_ov000_02098a88(0, 1); } @@ -372,7 +372,7 @@ ARM void ActorRupee::func_ov031_020e951c() { itemId = ItemId_None; - switch (this->mUnk_6C) { + switch (this->mUnk_5C.mParams[0]) { case RupeeId_Gold: itemId = ItemId_BigGoldRupee; break; @@ -439,7 +439,7 @@ ARM void ActorRupee::func_ov031_020e9638() { UNSET_FLAG(this->mFlags, ActorFlag_Visible); this->mUnk_C4.mUnk_04 = 0; - if (this->mUnk_6E == 2) { + if (this->mUnk_5C.mParams[1] == 2) { this->mUnk_4A = 1; data_027e0cec->func_ov000_0209ff8c(&this->mUnk_F0, 0xD00C, &this->mPos, 2); } else { @@ -496,7 +496,7 @@ ARM void ActorRupee::func_ov031_020e9740() { } } else { temp_r0 = data_027e0cd8->mUnk_0C; - this->mPos.y = temp_r0->vfunc_28(&this->mUnk_5C.mUnk_00, 0, 0); + this->mPos.y = temp_r0->vfunc_28(&this->mUnk_5C.mInitialPos, 0, 0); this->func_ov031_020e9904(0xC); } @@ -661,11 +661,11 @@ ARM void ActorRupee::vfunc_20() { // (*pcVar6)(); - if ((this->mUnk_80 < 0) && (this->mUnk_4C != 5)) { + if ((this->mUnk_5C.mUnk_24 < 0) && (this->mUnk_4C != 5)) { this->func_ov031_020e9d94(); } - if (this->mUnk_6E != 0) { + if (this->mUnk_5C.mParams[1] != 0) { sVar1 = this->mUnk_4C; if (!(sVar1 != 10 && sVar1 != 0xb && sVar1 != 0xc)) { @@ -682,7 +682,7 @@ ARM void ActorRupee::func_ov031_020e9b88() { func_ov000_02098838(); Vec3p_Add(&this->mPos, &this->mVel, &this->mPos); - if (this->mUnk_5C.mUnk_00.y < this->mPos.y + this->mVel.y) { + if (this->mUnk_5C.mInitialPos.y < this->mPos.y + this->mVel.y) { this->mUnk_44 = 0x9C; } else { this->mUnk_44 = 0x9F; @@ -720,7 +720,7 @@ ARM void ActorRupee::vfunc_2c(unk32 param1) { return; } - func_ov000_0205c1f0(auStack_30, data_ov031_02110aa0[this->mUnk_6C]); + func_ov000_0205c1f0(auStack_30, data_ov031_02110aa0[this->mUnk_5C.mParams[0]]); iStack_18 = this->mPos; if (!this->func_ov031_020e9d54()) { @@ -742,7 +742,7 @@ ARM void ActorRupee::vfunc_2c(unk32 param1) { } ARM bool ActorRupee::func_ov031_020e9d54() { - switch (this->mUnk_6C) { + switch (this->mUnk_5C.mParams[0]) { case RupeeId_BigGreen: case RupeeId_BigRed: case RupeeId_Gold: From 044fb89a779c7584027f0638805a7a0e7a6a135d Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Mon, 27 Apr 2026 23:40:02 +0200 Subject: [PATCH 08/12] match freestanding item funcs --- include/Actor/Actor.hpp | 4 ++++ include/Actor/ActorUnkKEYN.hpp | 4 +++- include/Actor/ActorUnkSZKU.hpp | 4 +++- src/070_Dungeon/Actor/ActorUnkKEYN.cpp | 18 +++++++++++++++++- src/071_Tower/Actor/ActorUnkSZKU.cpp | 18 +++++++++++++++++- 5 files changed, 44 insertions(+), 4 deletions(-) diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp index 961788da..24086db9 100644 --- a/include/Actor/Actor.hpp +++ b/include/Actor/Actor.hpp @@ -157,6 +157,10 @@ class Actor : public SysObject { *(u32 *) this->mFlags = 0; } + void Kill() { + UNSET_FLAG(this->mFlags, ActorFlag_Alive); + } + Actor(); ActorId GetActorId(); diff --git a/include/Actor/ActorUnkKEYN.hpp b/include/Actor/ActorUnkKEYN.hpp index 651d88a3..9a0f8773 100644 --- a/include/Actor/ActorUnkKEYN.hpp +++ b/include/Actor/ActorUnkKEYN.hpp @@ -4,6 +4,7 @@ #include "Actor/Actor.hpp" #include "Actor/ActorProfile.hpp" +#include "Item/Item.hpp" #include "global.h" #include "types.h" @@ -20,7 +21,8 @@ class ActorUnkKEYN_c4 : public Actor_c4 { class ActorUnkKEYN : public Actor { public: /* 00 (base) */ - /* 94 */ + /* 94 */ STRUCT_PAD(0x94, 0xA0); + /* A0 */ ItemId mItemId; ActorUnkKEYN(); diff --git a/include/Actor/ActorUnkSZKU.hpp b/include/Actor/ActorUnkSZKU.hpp index 2dc86af7..98def769 100644 --- a/include/Actor/ActorUnkSZKU.hpp +++ b/include/Actor/ActorUnkSZKU.hpp @@ -4,6 +4,7 @@ #include "Actor/Actor.hpp" #include "Actor/ActorProfile.hpp" +#include "Item/Item.hpp" #include "global.h" #include "types.h" @@ -20,7 +21,8 @@ class ActorUnkSZKU_c4 : public Actor_c4 { class ActorUnkSZKU : public Actor { public: /* 00 (base) */ - /* 94 */ + /* 94 */ STRUCT_PAD(0x94, 0xA0); + /* A0 */ ItemId mItemId; ActorUnkSZKU(); diff --git a/src/070_Dungeon/Actor/ActorUnkKEYN.cpp b/src/070_Dungeon/Actor/ActorUnkKEYN.cpp index 7acb6c68..3c622e72 100644 --- a/src/070_Dungeon/Actor/ActorUnkKEYN.cpp +++ b/src/070_Dungeon/Actor/ActorUnkKEYN.cpp @@ -2,6 +2,8 @@ #include "Actor/ActorUnkKEYN.hpp" #include "System/SysNew.hpp" +#include "Unknown/UnkStruct_027e09b8.hpp" +#include "Unknown/UnkStruct_027e0d34.hpp" ARM DECL_PROFILE(ActorProfileUnkKEYN); @@ -38,7 +40,21 @@ ARM void ActorUnkKEYN::func_ov070_02141fbc(void) {} ARM void ActorUnkKEYN::func_ov070_02142014(void) {} ARM void ActorUnkKEYN::func_ov070_021420a4(void) {} ARM void ActorUnkKEYN::func_ov070_021420d8(void) {} -ARM void ActorUnkKEYN::func_ov070_02142140(void) {} + +ARM void ActorUnkKEYN::func_ov070_02142140(void) { + if (this->mUnk_50 < this->mUnk_52) { + this->mUnk_50++; + } + + if (!data_027e09b8->func_01ffd420()) { + if (data_027e0d34->TryItemGive(this->mItemId)) { + this->func_ov000_02098a88(0, 1); + this->Kill(); + this->func_ov000_020984f0(); + } + } +} + ARM void ActorUnkKEYN::func_ov070_021421bc(void) {} ARM void ActorUnkKEYN::func_ov070_021421e8(void) {} ARM void ActorUnkKEYN::func_ov070_021421ec(void) {} diff --git a/src/071_Tower/Actor/ActorUnkSZKU.cpp b/src/071_Tower/Actor/ActorUnkSZKU.cpp index a547f4a1..8af21100 100644 --- a/src/071_Tower/Actor/ActorUnkSZKU.cpp +++ b/src/071_Tower/Actor/ActorUnkSZKU.cpp @@ -2,6 +2,8 @@ #include "Actor/ActorUnkSZKU.hpp" #include "System/SysNew.hpp" +#include "Unknown/UnkStruct_027e09b8.hpp" +#include "Unknown/UnkStruct_027e0d34.hpp" ARM DECL_PROFILE(ActorProfileUnkSZKU); @@ -35,7 +37,21 @@ ARM void ActorUnkSZKU::func_ov071_0215fe54(void) {} ARM void ActorUnkSZKU::func_ov071_0215fe94(void) {} ARM void ActorUnkSZKU::func_ov071_0215fed4(void) {} ARM void ActorUnkSZKU::func_ov071_0215ff08(void) {} -ARM void ActorUnkSZKU::func_ov071_0215ff3c(void) {} + +ARM void ActorUnkSZKU::func_ov071_0215ff3c(void) { + if (this->mUnk_50 < this->mUnk_52) { + this->mUnk_50++; + } + + if (!data_027e09b8->func_01ffd420()) { + if (data_027e0d34->TryItemGive(this->mItemId)) { + this->func_ov000_02098a88(0, 1); + this->Kill(); + this->func_ov000_020984f0(); + } + } +} + ARM void ActorUnkSZKU::func_ov071_0215ffb8(void) {} ARM void ActorUnkSZKU::func_ov071_0215ffbc(void) {} ARM void ActorUnkSZKU::func_ov071_02160000(void) {} From 52ea9684f4efd5d3e7012ccb28ad72c2bd7be445 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Tue, 28 Apr 2026 00:34:29 +0200 Subject: [PATCH 09/12] mType -> mpProfile --- include/Actor/Actor.hpp | 2 +- src/000_Second/Actor/Actor.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp index 24086db9..f4c809a4 100644 --- a/include/Actor/Actor.hpp +++ b/include/Actor/Actor.hpp @@ -126,7 +126,7 @@ class Actor : public SysObject { /* 58 */ ActorFlags mFlags[1]; /* 5C */ ActorParams mUnk_5C; /* 8C */ ActorRef mRef; - /* 90 */ ActorProfile *mType; + /* 90 */ ActorProfile *mpProfile; /* 94 */ /* 00 */ virtual void vfunc_00(Vec3p *param1); diff --git a/src/000_Second/Actor/Actor.cpp b/src/000_Second/Actor/Actor.cpp index f0f37dbe..716e534b 100644 --- a/src/000_Second/Actor/Actor.cpp +++ b/src/000_Second/Actor/Actor.cpp @@ -20,7 +20,7 @@ ARM Actor::Actor() { this->mUnk_5C.mUnk_28 = 0; this->mUnk_5C.func_ov000_020975f8(); this->mRef.Reset(); - this->mType = NULL; + this->mpProfile = NULL; _MI_CpuCopy(&data_ov000_020b539c_eur.mUnk_00, &this->mUnk_5C, sizeof(ActorParams)); this->mPos = this->mUnk_5C.mInitialPos; this->mPrevPos = this->mUnk_5C.mInitialPos; @@ -42,7 +42,7 @@ ARM void Actor::func_ov000_0209848c(ActorProfile *param1) { unk_1c = param1->mUnk_1C; temp_r3 = ¶m1->mUnk_04; - this->mType = param1; + this->mpProfile = param1; this->mUnk_30 = this->mUnk_34 = temp_r3; this->mUnk_4E = unk_1c; } @@ -99,15 +99,15 @@ ARM Vec3p *Actor::func_ov000_0209853c(unk32 param1) { } ARM bool Actor::vfunc_04() { - return this->mType->mUnk_1E & 1; + return this->mpProfile->mUnk_1E & 1; } ARM unk16 Actor::vfunc_08() { - return this->mType->mUnk_1A; + return this->mpProfile->mUnk_1A; } ARM unk8 Actor::vfunc_0c() { - return this->mType->mUnk_18; + return this->mpProfile->mUnk_18; } // non-matching From 881d17836d733b2faf2f187555a7b4289f49b1fd Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Tue, 28 Apr 2026 23:14:19 +0200 Subject: [PATCH 10/12] decompile random functions --- include/Actor/ActorUnkGORY.hpp | 3 +- include/Actor/ActorUnkSHIT.hpp | 6 ++- include/Unknown/UnkStruct_027e0d34.hpp | 6 +++ src/031_Land/UnkStruct_027e0d34.cpp | 5 ++ src/036_MapA5/Actor/ActorUnkGORY.cpp | 34 +++++++++++- src/036_MapA5/Actor/ActorUnkSHIT.cpp | 72 +++++++++++++++++++++++++- 6 files changed, 121 insertions(+), 5 deletions(-) create mode 100644 src/031_Land/UnkStruct_027e0d34.cpp diff --git a/include/Actor/ActorUnkGORY.hpp b/include/Actor/ActorUnkGORY.hpp index c2364355..b85b8e97 100644 --- a/include/Actor/ActorUnkGORY.hpp +++ b/include/Actor/ActorUnkGORY.hpp @@ -4,6 +4,7 @@ #include "Actor/Actor.hpp" #include "Actor/ActorProfile.hpp" +#include "Item/Item.hpp" #include "global.h" #include "types.h" @@ -28,7 +29,7 @@ class ActorUnkGORY : public Actor { void func_ov036_0211bc20(void); void func_ov036_0211bc84(void); - void func_ov036_0211bcb0(void); + ItemId func_ov036_0211bcb0(unk32 param1); }; class ActorProfileUnkGORY : public ActorProfile_Derived1 { diff --git a/include/Actor/ActorUnkSHIT.hpp b/include/Actor/ActorUnkSHIT.hpp index ea453d40..35f3b387 100644 --- a/include/Actor/ActorUnkSHIT.hpp +++ b/include/Actor/ActorUnkSHIT.hpp @@ -4,6 +4,7 @@ #include "Actor/Actor.hpp" #include "Actor/ActorProfile.hpp" +#include "Item/Item.hpp" #include "global.h" #include "types.h" @@ -20,7 +21,8 @@ class ActorUnkSHIT_c4 : public Actor_c4 { class ActorUnkSHIT : public Actor { public: /* 00 (base) */ - /* 94 */ + /* 94 */ STRUCT_PAD(0x94, 0xE4); + /* E4 */ ItemId mItemId; ActorUnkSHIT(); @@ -48,7 +50,7 @@ class ActorUnkSHIT : public Actor { void func_ov036_0211c9d4(void); void func_ov036_0211cddc(void); void func_ov036_0211cdfc(void); - void func_ov036_0211ceec(void); + u16 func_ov036_0211ceec(void); void func_ov036_0211d0a8(void); void func_ov036_0211d22c(void); void func_ov036_0211d254(void); diff --git a/include/Unknown/UnkStruct_027e0d34.hpp b/include/Unknown/UnkStruct_027e0d34.hpp index 72fcd9b0..1c2c26fe 100644 --- a/include/Unknown/UnkStruct_027e0d34.hpp +++ b/include/Unknown/UnkStruct_027e0d34.hpp @@ -4,9 +4,15 @@ #include "global.h" #include "types.h" +class UnkStruct_027e0d34_04 { +public: + bool func_ov000_02093bc8(unk32 param1); +}; + class UnkStruct_027e0d34 { public: /* 00 */ unk32 mUnk_00; + /* 04 */ UnkStruct_027e0d34_04 *mUnk_04; UnkStruct_027e0d34(); ~UnkStruct_027e0d34(); diff --git a/src/031_Land/UnkStruct_027e0d34.cpp b/src/031_Land/UnkStruct_027e0d34.cpp new file mode 100644 index 00000000..567d93d9 --- /dev/null +++ b/src/031_Land/UnkStruct_027e0d34.cpp @@ -0,0 +1,5 @@ +#include "Unknown/UnkStruct_027e0d34.hpp" + +bool UnkStruct_027e0d34::TryItemGive(ItemId itemId) { + return this->mUnk_04->func_ov000_02093bc8(itemId); +} diff --git a/src/036_MapA5/Actor/ActorUnkGORY.cpp b/src/036_MapA5/Actor/ActorUnkGORY.cpp index 9b6e669d..77fe102e 100644 --- a/src/036_MapA5/Actor/ActorUnkGORY.cpp +++ b/src/036_MapA5/Actor/ActorUnkGORY.cpp @@ -1,7 +1,10 @@ //! TODO: This file was generated automatically and might contain errors #include "Actor/ActorUnkGORY.hpp" +#include "Save/AdventureFlags.hpp" #include "System/SysNew.hpp" +#include "Unknown/UnkStruct_027e09b8.hpp" +#include "Unknown/UnkStruct_027e0ce0.hpp" ARM DECL_PROFILE(ActorProfileUnkGORY); @@ -16,7 +19,36 @@ ARM ActorUnkGORY::ActorUnkGORY() {} ARM void ActorUnkGORY::func_ov036_0211bc20(void) {} ARM void ActorUnkGORY::func_ov036_0211bc84(void) {} -ARM void ActorUnkGORY::func_ov036_0211bcb0(void) {} + +ARM ItemId ActorUnkGORY::func_ov036_0211bcb0(unk32 param1) { + switch (param1) { + case 0: + return ItemId_BombsRefill; + case 1: + return ItemId_YellowPotion; + case 2: + return ItemId_PurplePotion; + case 3: + return ItemId_NormalShield; + case 4: + if (GET_FLAG(data_027e09b8->mAdventureFlags, AdventureFlag_Unk_110)) { + return ItemId_TenPriceCard; + } + + if (data_027e0ce0->mUnk_2C->mQuiverCapacity == UpgradeCapacity_Tier1) { + return ItemId_QuiverMedium; + } else if (data_027e0ce0->mUnk_2C->mQuiverCapacity == UpgradeCapacity_Tier2) { + return ItemId_QuiverLarge; + } else { + return ItemId_TenPriceCard; + } + + default: + break; + } + + return ItemId_Nothing; +} ARM ActorUnkGORY::~ActorUnkGORY() {} ARM ActorProfileUnkGORY::~ActorProfileUnkGORY() {} diff --git a/src/036_MapA5/Actor/ActorUnkSHIT.cpp b/src/036_MapA5/Actor/ActorUnkSHIT.cpp index 426fbc0c..87bedfdb 100644 --- a/src/036_MapA5/Actor/ActorUnkSHIT.cpp +++ b/src/036_MapA5/Actor/ActorUnkSHIT.cpp @@ -1,6 +1,7 @@ //! TODO: This file was generated automatically and might contain errors #include "Actor/ActorUnkSHIT.hpp" +#include "Item/ItemManager.hpp" #include "System/SysNew.hpp" ARM DECL_PROFILE(ActorProfileUnkSHIT); @@ -36,7 +37,76 @@ ARM void ActorUnkSHIT::func_ov036_0211c9cc(void) {} ARM void ActorUnkSHIT::func_ov036_0211c9d4(void) {} ARM void ActorUnkSHIT::func_ov036_0211cddc(void) {} ARM void ActorUnkSHIT::func_ov036_0211cdfc(void) {} -ARM void ActorUnkSHIT::func_ov036_0211ceec(void) {} + +ARM u16 ActorUnkSHIT::func_ov036_0211ceec(void) { + switch (this->mItemId) { + case ItemId_NormalShield: { + u16 param = this->mUnk_5C.mParams[3]; + if (param == 4) { + return 200; + } + if (param == 2) { + return 150; + } + return 80; + } + case ItemId_RedPotion: + return 100; + case ItemId_PurplePotion: + return 150; + case ItemId_YellowPotion: + return 200; + case ItemId_TenPriceCard: + return 100; + case ItemId_DemonFossil: + case ItemId_StalfosSkull: + case ItemId_StarFragment: + case ItemId_BeeLarvae: + case ItemId_WoodHeart: + case ItemId_DarkPearlLoop: + case ItemId_WhitePearlLoop: + case ItemId_RutoCrown: + case ItemId_DragonScale: + case ItemId_PirateNecklace: + case ItemId_PalaceDish: + case ItemId_GoronAmber: + case ItemId_MysticJade: + case ItemId_AncientCoin: + case ItemId_PricelessStone: + case ItemId_RegalRing: { + return data_ov000_020b6510->func_ov000_020a9b4c(this->mItemId - ItemId_DemonFossil) * 2; + } + case ItemId_HeartContainer: + return 2000; + case ItemId_BombsRefill: { + u16 param = this->mUnk_5C.mParams[3]; + + if (param == 4) { + return 200; + } + + if (param == 3) { + return 150; + } + + return 100; + } + case ItemId_ArrowsRefill: + return 50; + case ItemId_QuiverMedium: + case ItemId_QuiverLarge: + return 2000; + case ItemId_BombBag: + case ItemId_BombBagMedium: + case ItemId_BombBagLarge: + return 500; + default: + break; + } + + return 9999; +} + ARM void ActorUnkSHIT::func_ov036_0211d0a8(void) {} ARM void ActorUnkSHIT::func_ov036_0211d22c(void) {} ARM void ActorUnkSHIT::func_ov036_0211d254(void) {} From 1df80e74fef476f510d50b4e8600cb21df850cb8 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Tue, 28 Apr 2026 23:15:43 +0200 Subject: [PATCH 11/12] docs and start of wip chest stuff --- config/eur/arm9/overlays/ov000/symbols.txt | 2 +- config/eur/arm9/overlays/ov031/delinks.txt | 6 + config/eur/arm9/overlays/ov036/symbols.txt | 2 +- config/jp/arm9/overlays/ov000/symbols.txt | 2 +- config/jp/arm9/overlays/ov031/delinks.txt | 6 + config/jp/arm9/overlays/ov036/symbols.txt | 2 +- include/MapObject/MapObject.hpp | 2 - include/MapObject/MapObjectChestBase.hpp | 68 ++++++ include/MapObject/MapObjectUnkTRES.hpp | 15 +- src/110_PlayerGet/PlayerGet.cpp | 264 +++++++++++++++++++-- tools/configure.py | 2 + 11 files changed, 334 insertions(+), 37 deletions(-) create mode 100644 include/MapObject/MapObjectChestBase.hpp diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 54aaa178..c4a7af55 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -2160,7 +2160,7 @@ func_ov000_02093b04 kind:function(arm,size=0x68) addr:0x02093b04 func_ov000_02093b6c kind:function(arm,size=0x18) addr:0x02093b6c func_ov000_02093b84 kind:function(arm,size=0xc) addr:0x02093b84 func_ov000_02093b90 kind:function(arm,size=0x38) addr:0x02093b90 -func_ov000_02093bc8 kind:function(arm,size=0x144) addr:0x02093bc8 +_ZN21UnkStruct_027e0d34_0419func_ov000_02093bc8Ei kind:function(arm,size=0x144) addr:0x02093bc8 func_ov000_02093d0c kind:function(arm,size=0x34) addr:0x02093d0c func_ov000_02093d40 kind:function(arm,size=0x60) addr:0x02093d40 func_ov000_02093da0 kind:function(arm,size=0x1b8) addr:0x02093da0 diff --git a/config/eur/arm9/overlays/ov031/delinks.txt b/config/eur/arm9/overlays/ov031/delinks.txt index ff8777f7..79ece283 100644 --- a/config/eur/arm9/overlays/ov031/delinks.txt +++ b/config/eur/arm9/overlays/ov031/delinks.txt @@ -5,6 +5,9 @@ .data start:0x021128a0 end:0x02116380 kind:data align:32 .bss start:0x02116380 end:0x02118fc0 kind:bss align:32 +src/031_Land/UnkStruct_027e0d34.cpp: + .text start:0x020d9834 end:0x020d9854 + src/031_Land/Actor/ActorUnkBOMB.cpp: .text start:0x020e14c4 end:0x020e34b4 .init start:0x02110ff8 end:0x02111048 @@ -259,6 +262,9 @@ src/031_Land/MapObject/MapObjectUnkTRES.cpp: .ctor start:0x02112840 end:0x02112844 .bss start:0x02117ba0 end:0x02117cfc +src/031_Land/MapObject/MapObjectChestBase.cpp: + .text start:0x02102fe8 end:0x0210401c + src/031_Land/MapObject/MapObjectUnkTRED.cpp: .text start:0x0210401c end:0x021041b8 .init start:0x02111fe4 end:0x02112050 diff --git a/config/eur/arm9/overlays/ov036/symbols.txt b/config/eur/arm9/overlays/ov036/symbols.txt index 5d20ed1a..9675d62a 100644 --- a/config/eur/arm9/overlays/ov036/symbols.txt +++ b/config/eur/arm9/overlays/ov036/symbols.txt @@ -147,7 +147,7 @@ _ZN19ActorProfileUnkGORYC1Ev kind:function(arm,size=0x60) addr:0x0211bb04 _ZN12ActorUnkGORYC1Ev kind:function(arm,size=0xbc) addr:0x0211bb64 _ZN12ActorUnkGORY19func_ov036_0211bc20Ev kind:function(arm,size=0x64) addr:0x0211bc20 _ZN12ActorUnkGORY19func_ov036_0211bc84Ev kind:function(arm,size=0x2c) addr:0x0211bc84 -_ZN12ActorUnkGORY19func_ov036_0211bcb0Ev kind:function(arm,size=0x94) addr:0x0211bcb0 +_ZN12ActorUnkGORY19func_ov036_0211bcb0Ei kind:function(arm,size=0x94) addr:0x0211bcb0 _ZN12ActorUnkGORYD0Ev kind:function(arm,size=0x38) addr:0x0211bd44 _ZN12ActorUnkGORYD2Ev kind:function(arm,size=0x30) addr:0x0211bd7c _ZN19ActorProfileUnkGORYD1Ev kind:function(arm,size=0x14) addr:0x0211bdac diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index b95b839a..bfb718d1 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -2158,7 +2158,7 @@ func_ov000_020951e0 kind:function(arm,size=0x68) addr:0x020951e0 func_ov000_02095248 kind:function(arm,size=0x18) addr:0x02095248 func_ov000_02095260 kind:function(arm,size=0xc) addr:0x02095260 func_ov000_0209526c kind:function(arm,size=0x38) addr:0x0209526c -func_ov000_020952a4 kind:function(arm,size=0x21c) addr:0x020952a4 +_ZN21UnkStruct_027e0d34_0419func_ov000_02093bc8Ei kind:function(arm,size=0x21c) addr:0x020952a4 func_ov000_020954c0 kind:function(arm,size=0x34) addr:0x020954c0 func_ov000_020954f4 kind:function(arm,size=0x60) addr:0x020954f4 func_ov000_02095554 kind:function(arm,size=0x1b8) addr:0x02095554 diff --git a/config/jp/arm9/overlays/ov031/delinks.txt b/config/jp/arm9/overlays/ov031/delinks.txt index 31a87d0f..0aca8dda 100644 --- a/config/jp/arm9/overlays/ov031/delinks.txt +++ b/config/jp/arm9/overlays/ov031/delinks.txt @@ -5,6 +5,9 @@ .data start:0x02114640 end:0x02118120 kind:data align:32 .bss start:0x02118120 end:0x0211ad60 kind:bss align:32 +src/031_Land/UnkStruct_027e0d34.cpp: + .text start:0x020db1d4 end:0x020db1f4 + src/031_Land/Actor/ActorUnkBOMB.cpp: .text start:0x020e2e94 end:0x020e4ea0 .init start:0x02112d68 end:0x02112db8 @@ -259,6 +262,9 @@ src/031_Land/MapObject/MapObjectUnkTRES.cpp: .ctor start:0x021145cc end:0x021145d0 .bss start:0x02119940 end:0x02119a9c +src/031_Land/MapObject/MapObjectChestBase.cpp: + .text start:0x02104d44 end:0x02105d78 + src/031_Land/MapObject/MapObjectUnkTRED.cpp: .text start:0x02105d78 end:0x02105f14 .init start:0x02113d70 end:0x02113ddc diff --git a/config/jp/arm9/overlays/ov036/symbols.txt b/config/jp/arm9/overlays/ov036/symbols.txt index c8b9429c..b9130a22 100644 --- a/config/jp/arm9/overlays/ov036/symbols.txt +++ b/config/jp/arm9/overlays/ov036/symbols.txt @@ -147,7 +147,7 @@ _ZN19ActorProfileUnkGORYC1Ev kind:function(arm,size=0x60) addr:0x0211d8a8 _ZN12ActorUnkGORYC1Ev kind:function(arm,size=0xbc) addr:0x0211d908 _ZN12ActorUnkGORY19func_ov036_0211bc20Ev kind:function(arm,size=0x64) addr:0x0211d9c4 _ZN12ActorUnkGORY19func_ov036_0211bc84Ev kind:function(arm,size=0x2c) addr:0x0211da28 -_ZN12ActorUnkGORY19func_ov036_0211bcb0Ev kind:function(arm,size=0x94) addr:0x0211da54 +_ZN12ActorUnkGORY19func_ov036_0211bcb0Ei kind:function(arm,size=0x94) addr:0x0211da54 _ZN12ActorUnkGORYD0Ev kind:function(arm,size=0x38) addr:0x0211dae8 _ZN12ActorUnkGORYD2Ev kind:function(arm,size=0x30) addr:0x0211db20 _ZN19ActorProfileUnkGORYD1Ev kind:function(arm,size=0x14) addr:0x0211db50 diff --git a/include/MapObject/MapObject.hpp b/include/MapObject/MapObject.hpp index de62cca1..014baac3 100644 --- a/include/MapObject/MapObject.hpp +++ b/include/MapObject/MapObject.hpp @@ -183,8 +183,6 @@ class MapObject : public SysObject { bool func_ov000_0209d668(); void func_ov000_0209d6ac(Vec3p *param1); - void func_ov031_02103878(); - static void func_ov000_0209d0bc(Vec2b *param1, MapObject *thisx); static void func_ov000_0209d22c(unk16 *param1, MapObject *thisx, unk32 param2); static void func_ov000_0209d54c(void *param1, MapObject *thisx, unk32 param2, Vec3p *param3, unk32 param4, unk32 param5); diff --git a/include/MapObject/MapObjectChestBase.hpp b/include/MapObject/MapObjectChestBase.hpp new file mode 100644 index 00000000..56282879 --- /dev/null +++ b/include/MapObject/MapObjectChestBase.hpp @@ -0,0 +1,68 @@ +#pragma once + +#include "Item/Item.hpp" +#include "MapObject/MapObject.hpp" +#include "Unknown/Common.hpp" +#include "global.h" +#include "types.h" + +class MapObjectUnkTRES_74 : public UnkSystem4 { +public: + /* 00 (base) */ + /* 60 */ bool mUnk_60; + /* 61 */ unk8 mUnk_61; // pad? + /* 62 */ unk8 mUnk_62; // pad? + /* 63 */ unk8 mUnk_63; // pad? + /* 64 */ + + MapObjectUnkTRES_74(unk32 param1); + + // data_ov031_02115844 + /* 00 */ virtual ~MapObjectUnkTRES_74() override {} + /* 1C */ virtual void vfunc_1C(UnkSystem4_vfunc_1C *param1) override; + + void func_ov000_0209dde0(void); + + void func_ov031_0210306c(void); +}; + +class MapObjectChestBase : public MapObject { +public: + /* 000 (base) */ + /* 040 */ unk32 mUnk_040; + /* 044 */ unk32 mUnk_044; + /* 048 */ unk32 mUnk_048; + /* 04C */ unk8 mUnk_04C; + /* 04D */ unk8 mUnk_04D; + /* 04E */ unk8 mUnk_04E; // pad? + /* 04F */ unk8 mUnk_04F; // pad? + /* 050 */ MapObject_10 mUnk_050; + /* 074 */ MapObjectUnkTRES_74 mUnk_074; + /* 0D8 */ ItemId mItemId; + /* 0DC */ UnkSubStruct19 mUnk_0DC; + /* 154 */ + + MapObjectChestBase(unk32 param1); // func_ov031_0210307c + + /* 00 */ virtual bool vfunc_00() override; + /* 04 */ virtual void vfunc_04() override; + /* 08 */ virtual void vfunc_08() override; + /* 0C */ virtual void vfunc_0C() override; + /* 14 */ virtual void vfunc_14() override; + /* 18 */ virtual void vfunc_18(s8 *param1, s8 param2) override; + /* 28 */ virtual ItemId vfunc_28() override; + /* 30 */ virtual ~MapObjectChestBase() override; + /* 38 */ virtual void vfunc_38(unk32 param1, unk32 param2); + /* 3C */ virtual unk32 vfunc_3C(); + /* 40 */ virtual bool vfunc_40(); + /* 44 */ virtual bool vfunc_44(); + /* 48 */ virtual void vfunc_48(); + /* 4C */ virtual void vfunc_4C(); + /* 50 */ virtual void vfunc_50(); + /* 54 */ virtual Vec2p *vfunc_54(); + /* 58 */ + + unk32 func_ov031_021037d0(); + bool func_ov031_02103864(); + void func_ov031_02103878(); +}; diff --git a/include/MapObject/MapObjectUnkTRES.hpp b/include/MapObject/MapObjectUnkTRES.hpp index db2ad871..eb6e26ac 100644 --- a/include/MapObject/MapObjectUnkTRES.hpp +++ b/include/MapObject/MapObjectUnkTRES.hpp @@ -1,27 +1,26 @@ -//! TODO: This file was generated automatically and might contain errors - #pragma once -#include "MapObject/MapObject.hpp" +#include "MapObject/MapObjectChestBase.hpp" #include "MapObject/MapObjectProfile.hpp" -#include "global.h" -#include "types.h" -class MapObjectUnkTRES : public MapObject { +class MapObjectUnkTRES : public MapObjectChestBase { public: /* 00 (base) */ - /* 40 */ MapObjectUnkTRES(); + // data_ov031_021157dc /* 30 */ virtual ~MapObjectUnkTRES() override; + /* 3C */ virtual unk32 vfunc_3C() override; + /* 40 */ virtual bool vfunc_40() override; + /* 54 */ virtual Vec2p *vfunc_54() override; void func_ov031_02102f64(void); void func_ov031_02102f90(void); void func_ov031_02102f98(void); }; -class MapObjectProfileUnkTRES : public MapObjectProfile { +class MapObjectProfileUnkTRES : public MapObjectProfile_Derived2 { public: /* 00 (base) */ diff --git a/src/110_PlayerGet/PlayerGet.cpp b/src/110_PlayerGet/PlayerGet.cpp index 08c8fec3..af88c53f 100644 --- a/src/110_PlayerGet/PlayerGet.cpp +++ b/src/110_PlayerGet/PlayerGet.cpp @@ -3,6 +3,7 @@ #include "Actor/ActorId.hpp" #include "Actor/ActorManager.hpp" #include "Actor/ActorUnkNSHD.hpp" +#include "MapObject/MapObjectChestBase.hpp" #include "MapObject/MapObjectManager.hpp" #include "Player/PlayerGet.hpp" #include "System/OverlayManager.hpp" @@ -19,6 +20,7 @@ #include "Unknown/UnkStruct_ov000_020b51b8.hpp" #include "Unknown/UnkStruct_ov000_020b51c0.hpp" #include "versions.h" + #include struct UnkStruct_02186240 { @@ -192,28 +194,244 @@ ARM bool ItemManager::func_ov110_02184a40(ItemId itemId) { // BMG IDs static const unk32 data_ov110_02185de8[] = { - 0x30001, 0x30002, 0xB00D6, 0x8007A, 0x30003, 0x8007B, 0x8007C, 0x8007D, 0x8007E, 0x30004, 0x30005, 0x30006, 0x30007, - 0x30008, 0x30009, 0x3000A, 0x3000B, 0x3000C, 0x3000D, 0x3000E, 0x3000F, 0xD0000, 0xD0001, 0xD0002, 0xD0003, 0xF00EB, - 0x100000, 0x110000, 0x1C008E, 0x1E0048, 0x30010, 0x30011, 0x30012, 0x30013, 0x30014, 0x30015, 0x30016, 0x30017, 0xB00D7, - 0x30018, 0x30019, 0x3001A, 0x3001B, 0x3001C, 0x3001D, 0x3001E, 0x3001F, 0x30020, 0x30021, 0x30022, 0x30023, 0x30024, - 0x30025, 0x30026, 0x30027, 0x30028, 0x30029, 0x3002A, 0x3002B, 0x3002C, 0x3002D, 0x3002E, 0x3002F, 0x1400F7, 0x8007F, - 0x30030, 0x30031, 0x30032, 0x30033, 0x30034, 0x30035, 0x30036, 0x30037, 0x30038, 0x30039, 0x3003A, 0x3003B, 0x3003C, - 0x3003D, 0x3003E, 0x3003F, 0x30040, 0x30041, 0x30042, 0x30043, 0x30044, 0x30045, 0x30046, 0x30047, 0x1400F8, 0x30048, - 0x30049, 0x3004A, 0x3004B, 0x3004C, 0x3004D, 0xD0004, 0xD0005, 0x3004E, 0x3004F, 0x1400F9, 0xF00EC, 0x80080, 0x110001, - 0x1400FA, 0x100001, 0x30050, 0x30051, 0x30052, 0x30053, 0x30054, 0x30055, 0x30056, 0x30057, 0x30058, 0x030059, 0x3005A, + 0x00030001, // ItemId_Nothing + 0x00030002, // ItemId_NormalShield + 0x000B00D6, // ItemId_NormalSword + 0x0008007A, // ItemId_Whirlwind + 0x00030003, // ItemId_BombBag + 0x0008007B, // ItemId_NormalBow + 0x0008007C, // ItemId_Boomerang + 0x0008007D, // ItemId_Whip + 0x0008007E, // ItemId_SandRod + 0x00030004, // ItemId_9 + 0x00030005, // ItemId_NormalKey + 0x00030006, // ItemId_BossKey + 0x00030007, // ItemId_GreenRupee + 0x00030008, // ItemId_BlueRupee + 0x00030009, // ItemId_RedRupee + 0x0003000A, // ItemId_BigGreenRupee + 0x0003000B, // ItemId_BigRedRupee + 0x0003000C, // ItemId_BigGoldRupee + 0x0003000D, // ItemId_ForceGem_18 + 0x0003000E, // ItemId_ForceGem_19 + 0x0003000F, // ItemId_ForceGem_20 + 0x000D0000, // ItemId_ForestGlyph + 0x000D0001, // ItemId_SnowGlyph + 0x000D0002, // ItemId_OceanGlyph + 0x000D0003, // ItemId_FireGlyph + 0x000F00EB, // ItemId_25 + 0x00100000, // ItemId_26 + 0x00110000, // ItemId_27 + 0x001C008E, // ItemId_28 + 0x001E0048, // ItemId_29 + 0x00030010, // ItemId_FinalTrack + 0x00030011, // ItemId_31 + 0x00030012, // ItemId_32 + 0x00030013, // ItemId_33 + 0x00030014, // ItemId_34 + 0x00030015, // ItemId_ForceGem_35 + 0x00030016, // ItemId_ForceGem_36 + 0x00030017, // ItemId_ForceGem_37 + 0x000B00D7, // ItemId_RecruitUniform + 0x00030018, // ItemId_PostmasterLetter + 0x00030019, // ItemId_HeartContainer + 0x0003001A, // ItemId_QuiverMedium + 0x0003001B, // ItemId_BombBagMedium + 0x0003001C, // ItemId_ForceGem_43 + 0x0003001D, // ItemId_ForceGem_44 + 0x0003001E, // ItemId_ForceGem_45 + 0x0003001F, // ItemId_ForceGem_46 + 0x00030020, // ItemId_ForceGem_47 + 0x00030021, // ItemId_ForceGem_48 + 0x00030022, // ItemId_ForceGem_49 + 0x00030023, // ItemId_ForceGem_50 + 0x00030024, // ItemId_ForceGem_51 + 0x00030025, // ItemId_ForceGem_52 + 0x00030026, // ItemId_ForceGem_53 + 0x00030027, // ItemId_ForceGem_54 + 0x00030028, // ItemId_ForceGem_55 + 0x00030029, // ItemId_ForceGem_56 + 0x0003002A, // ItemId_ForceGem_57 + 0x0003002B, // ItemId_ForceGem_58 + 0x0003002C, // ItemId_ForceGem_59 + 0x0003002D, // ItemId_ForceGem_60 + 0x0003002E, // ItemId_ForceGem_61 + 0x0003002F, // ItemId_PanFlute + 0x001400F7, // ItemId_StampBook + 0x0008007F, // ItemId_LightBow + 0x00030030, // ItemId_LokomoSword + 0x00030031, // ItemId_TenPriceCard + 0x00030032, // ItemId_RedPotion + 0x00030033, // ItemId_PurplePotion + 0x00030034, // ItemId_YellowPotion + 0x00030035, // ItemId_DemonFossil + 0x00030036, // ItemId_StalfosSkull + 0x00030037, // ItemId_StarFragment + 0x00030038, // ItemId_BeeLarvae + 0x00030039, // ItemId_WoodHeart + 0x0003003A, // ItemId_DarkPearlLoop + 0x0003003B, // ItemId_WhitePearlLoop + 0x0003003C, // ItemId_RutoCrown + 0x0003003D, // ItemId_DragonScale + 0x0003003E, // ItemId_PirateNecklace + 0x0003003F, // ItemId_PalaceDish + 0x00030040, // ItemId_GoronAmber + 0x00030041, // ItemId_MysticJade + 0x00030042, // ItemId_AncientCoin + 0x00030043, // ItemId_PricelessStone + 0x00030044, // ItemId_RegalRing + 0x00030045, // ItemId_ArrowsRefill + 0x00030046, // ItemId_BombsRefill + 0x00030047, // ItemId_SoldOutSign + 0x001400F8, // ItemId_AncientShield + 0x00030048, // ItemId_QuiverLarge + 0x00030049, // ItemId_BombBagLarge + 0x0003004A, // ItemId_RandCommonTreasure + 0x0003004B, // ItemId_RandUncommonTreasure + 0x0003004C, // ItemId_RandRareTreasure + 0x0003004D, // ItemId_RandLegendaryTreasure + 0x000D0004, // ItemId_TearLight + 0x000D0005, // ItemId_LightCompass + 0x0003004E, // ItemId_ScrollSpinAttack + 0x0003004F, // ItemId_ScrollBeam + 0x001400F9, // ItemId_LinebeckLetter + 0x000F00EC, // ItemId_PanFluteSong_101 + 0x00080080, // ItemId_PanFluteSong_102 + 0x00110001, // ItemId_PanFluteSong_103 + 0x001400FA, // ItemId_PanFluteSong_104 + 0x00100001, // ItemId_PanFluteSong_105 + 0x00030050, // ItemId_RabbitNet + 0x00030051, // ItemId_BeedleCard + 0x00030052, // ItemId_SilverCard + 0x00030053, // ItemId_GoldCard + 0x00030054, // ItemId_PlatinumCard + 0x00030055, // ItemId_DiamondCard + 0x00030056, // ItemId_FreebieCard + 0x00030057, // ItemId_QuintupleCard + 0x00030058, // ItemId_CarbenLetter + 0x00030059, // ItemId_RecruitUniform2 + 0x0003005A, // ItemId_EngineerUniform }; +// Adventure Flags static const unk32 data_ov110_02185fbc[] = { - 0x000, 0x000, 0x003, 0x000, 0x000, 0x1A3, 0x000, 0x27B, 0x0CB, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x076, 0x077, 0x078, 0x00F, 0x010, 0x011, 0x012, 0x008, 0x009, 0x00A, 0x00B, 0x00C, 0x00D, 0x002, 0x01F, 0x020, - 0x021, 0x079, 0x07A, 0x07B, 0x000, 0x000, 0x000, 0x000, 0x000, 0x068, 0x069, 0x06A, 0x06B, 0x06C, 0x06D, 0x06E, 0x06F, - 0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x0A6, 0x0A7, 0x0A8, 0x0A9, 0x0AA, 0x000, 0x000, 0x0B0, 0x0B1, -}; - -static const unk32 data_ov110_021860c4[] = { - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x12D, 0x000, 0x000, - 0x03C, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0D6, 0x194, 0x18E, 0x18F, 0x190, 0x191, 0x192, 0x193, 0x046, 0x000, 0x000, + AdventureFlag_Nothing, // ItemId_Nothing + AdventureFlag_Nothing, // ItemId_NormalShield + AdventureFlag_ObtainedRecruitSword, // ItemId_NormalSword + AdventureFlag_Nothing, // ItemId_Whirlwind + AdventureFlag_Nothing, // ItemId_BombBag + AdventureFlag_ObtainedBowAndArrows, // ItemId_NormalBow + AdventureFlag_Nothing, // ItemId_Boomerang + AdventureFlag_ObtainedWhip, // ItemId_Whip + AdventureFlag_ObtainedSandWand, // ItemId_SandRod + AdventureFlag_Nothing, // ItemId_9 + AdventureFlag_Nothing, // ItemId_NormalKey + AdventureFlag_Nothing, // ItemId_BossKey + AdventureFlag_Nothing, // ItemId_GreenRupee + AdventureFlag_Nothing, // ItemId_BlueRupee + AdventureFlag_Nothing, // ItemId_RedRupee + AdventureFlag_Nothing, // ItemId_BigGreenRupee + AdventureFlag_Nothing, // ItemId_BigRedRupee + AdventureFlag_Nothing, // ItemId_BigGoldRupee + AdventureFlag_ObtainedWadatsumiForceGem, // ItemId_ForceGem_18 + AdventureFlag_ObtainedNiboshiForceGem, // ItemId_ForceGem_19 + AdventureFlag_ObtainedGoronAdultMegaIceForceGem, // ItemId_ForceGem_20 + AdventureFlag_ObtainedForestGlyph, // ItemId_ForestGlyph + AdventureFlag_ObtainedSnowGlyph, // ItemId_SnowGlyph + AdventureFlag_ObtainedOceanGlyph, // ItemId_OceanGlyph + AdventureFlag_ObtainedFireGlyph, // ItemId_FireGlyph + AdventureFlag_CompletedForestRestorationSong, // ItemId_25 + AdventureFlag_CompletedOceanRestorationSong, // ItemId_26 + AdventureFlag_CompletedSnowRestorationSong, // ItemId_27 + AdventureFlag_CompletedFireRestorationSong, // ItemId_28 + AdventureFlag_CompletedSandRestorationSong, // ItemId_29 + AdventureFlag_OpenedDarkRealmPortal, // ItemId_FinalTrack + AdventureFlag_ObtainedSpiritTrain, // ItemId_31 + AdventureFlag_ObtainedTrainCannon, // ItemId_32 + AdventureFlag_Unk_020, // ItemId_33 + AdventureFlag_ObtainedTrainWagon, // ItemId_34 + AdventureFlag_ObtainedFerrusForceGem2, // ItemId_ForceGem_35 + AdventureFlag_ObtainedKofuForceGem, // ItemId_ForceGem_36 + AdventureFlag_ObtainedChildGoronForceGem, // ItemId_ForceGem_37 + AdventureFlag_Nothing, // ItemId_RecruitUniform + AdventureFlag_Nothing, // ItemId_PostmasterLetter + AdventureFlag_Nothing, // ItemId_HeartContainer + AdventureFlag_Nothing, // ItemId_QuiverMedium + AdventureFlag_Nothing, // ItemId_BombBagMedium + AdventureFlag_ObtainedLuciaForceGem, // ItemId_ForceGem_43 + AdventureFlag_ObtainedOrcaForceGem, // ItemId_ForceGem_44 + AdventureFlag_ObtainedCarbenForceGem, // ItemId_ForceGem_45 + AdventureFlag_ObtainedRaelForceGem, // ItemId_ForceGem_46 + AdventureFlag_ObtainedJoeForceGem, // ItemId_ForceGem_47 + AdventureFlag_ObtainedMonaForceGem, // ItemId_ForceGem_48 + AdventureFlag_ObtainedHarryForceGem, // ItemId_ForceGem_49 + AdventureFlag_ObtainedMashForceGem, // ItemId_ForceGem_50 + AdventureFlag_ObtainedFerrusForceGem1, // ItemId_ForceGem_51 + AdventureFlag_ObtainedYekoForceGem, // ItemId_ForceGem_52 + AdventureFlag_ObtainedNokoForceGem, // ItemId_ForceGem_53 + AdventureFlag_ObtainedGoronAdultAnoukiForceGem, // ItemId_ForceGem_54 + AdventureFlag_ObtainedSteemForceGem, // ItemId_ForceGem_55 + AdventureFlag_ObtainedLinebeckForceGem, // ItemId_ForceGem_56 + AdventureFlag_ObtainedAnjeanDesertForceGem, // ItemId_ForceGem_57 + AdventureFlag_Unk_0A7, // ItemId_ForceGem_58 + AdventureFlag_Unk_0A8, // ItemId_ForceGem_59 + AdventureFlag_Unk_0A9, // ItemId_ForceGem_60 + AdventureFlag_Unk_0AA, // ItemId_ForceGem_61 + AdventureFlag_Nothing, // ItemId_PanFlute + AdventureFlag_Nothing, // ItemId_StampBook + AdventureFlag_ObtainedBowOfLight, // ItemId_LightBow + AdventureFlag_Unk_0B1, // ItemId_LokomoSword + AdventureFlag_Nothing, // ItemId_TenPriceCard + AdventureFlag_Nothing, // ItemId_RedPotion + AdventureFlag_Nothing, // ItemId_PurplePotion + AdventureFlag_Nothing, // ItemId_YellowPotion + AdventureFlag_Nothing, // ItemId_DemonFossil + AdventureFlag_Nothing, // ItemId_StalfosSkull + AdventureFlag_Nothing, // ItemId_StarFragment + AdventureFlag_Nothing, // ItemId_BeeLarvae + AdventureFlag_Nothing, // ItemId_WoodHeart + AdventureFlag_Nothing, // ItemId_DarkPearlLoop + AdventureFlag_Nothing, // ItemId_WhitePearlLoop + AdventureFlag_Nothing, // ItemId_RutoCrown + AdventureFlag_Nothing, // ItemId_DragonScale + AdventureFlag_Nothing, // ItemId_PirateNecklace + AdventureFlag_Nothing, // ItemId_PalaceDish + AdventureFlag_Nothing, // ItemId_GoronAmber + AdventureFlag_Nothing, // ItemId_MysticJade + AdventureFlag_Nothing, // ItemId_AncientCoin + AdventureFlag_Nothing, // ItemId_PricelessStone + AdventureFlag_Nothing, // ItemId_RegalRing + AdventureFlag_Nothing, // ItemId_ArrowsRefill + AdventureFlag_Nothing, // ItemId_BombsRefill + AdventureFlag_Nothing, // ItemId_SoldOutSign + AdventureFlag_Nothing, // ItemId_AncientShield + AdventureFlag_Nothing, // ItemId_QuiverLarge + AdventureFlag_Nothing, // ItemId_BombBagLarge + AdventureFlag_Nothing, // ItemId_RandCommonTreasure + AdventureFlag_Nothing, // ItemId_RandUncommonTreasure + AdventureFlag_Nothing, // ItemId_RandRareTreasure + AdventureFlag_Nothing, // ItemId_RandLegendaryTreasure + AdventureFlag_Nothing, // ItemId_TearLight + AdventureFlag_ObtainedCompassOfLight, // ItemId_LightCompass + AdventureFlag_Nothing, // ItemId_ScrollSpinAttack + AdventureFlag_Nothing, // ItemId_ScrollBeam + AdventureFlag_ObtainedLinebecksLetter, // ItemId_LinebeckLetter + AdventureFlag_Nothing, // ItemId_PanFluteSong_101 + AdventureFlag_Nothing, // ItemId_PanFluteSong_102 + AdventureFlag_Nothing, // ItemId_PanFluteSong_103 + AdventureFlag_Nothing, // ItemId_PanFluteSong_104 + AdventureFlag_Nothing, // ItemId_PanFluteSong_105 + AdventureFlag_ObtainedRabbitNet, // ItemId_RabbitNet + AdventureFlag_ObtainedBeedlePointsCard, // ItemId_BeedleCard + AdventureFlag_Unk_18E, // ItemId_SilverCard + AdventureFlag_Unk_18F, // ItemId_GoldCard + AdventureFlag_Unk_190, // ItemId_PlatinumCard + AdventureFlag_Unk_191, // ItemId_DiamondCard + AdventureFlag_ObtainedBeedleFreebieCard, // ItemId_FreebieCard + AdventureFlag_ObtainedBeedleQuintuplePointsCard, // ItemId_QuintupleCard + AdventureFlag_ReceivedCarbensLetter, // ItemId_CarbenLetter + AdventureFlag_Nothing, // ItemId_RecruitUniform2 + AdventureFlag_Nothing, // ItemId_EngineerUniform }; // non-matching @@ -509,7 +727,6 @@ const UnkStruct_ov110_021861ec data_ov110_021861ec(0x5E3, 0x152D, 0xCD); ARM void PlayerGet::vfunc_10(unk32 param1, unk32 param2) { unk32 var_r1; - MapObject **temp_r0_6; s32 temp_r5; bool temp_r6; s32 var_r0; @@ -701,10 +918,11 @@ ARM void PlayerGet::vfunc_10(unk32 param1, unk32 param2) { } if (var_r5_2 != MapObjectId_None) { - data_ov000_020b34c4.mUnk_04 = var_r5_2; - temp_r0_6 = gpMapObjManager->func_01fff520(&data_ov000_020b34c4, gpMapObjManager->mMapObjTable); + data_ov000_020b34c4.mUnk_04 = var_r5_2; + MapObjectChestBase **temp_r0_6 = (MapObjectChestBase **) gpMapObjManager->func_01fff520( + &data_ov000_020b34c4, gpMapObjManager->mMapObjTable); - if (temp_r0_6 == gpMapObjManager->mUnk_08) { + if ((MapObject **) temp_r0_6 == gpMapObjManager->mUnk_08) { (*temp_r0_6)->func_ov031_02103878(); } } diff --git a/tools/configure.py b/tools/configure.py index 5917ef3e..73731fcf 100755 --- a/tools/configure.py +++ b/tools/configure.py @@ -365,6 +365,7 @@ def GameLib(lib_name: str, objects: List[Object]) -> Dict[str, Any]: GameLib( "Overlay 31", [ + Object("031_Land/UnkStruct_027e0d34.cpp"), Object("031_Land/Actor/ActorRupee.cpp"), Object("031_Land/Actor/ActorUnkAROW.cpp"), Object("031_Land/Actor/ActorUnkATTG.cpp"), @@ -422,6 +423,7 @@ def GameLib(lib_name: str, objects: List[Object]) -> Dict[str, Any]: Object("031_Land/MapObject/MapObjectUnkTRED.cpp"), Object("031_Land/MapObject/MapObjectUnkTREN.cpp"), Object("031_Land/MapObject/MapObjectUnkTRES.cpp"), + Object("031_Land/MapObject/MapObjectChestBase.cpp"), Object("031_Land/MapObject/MapObjectUnkTREW.cpp"), Object("031_Land/MapObject/MapObjectUnkTRWS.cpp"), Object("031_Land/MapObject/MapObjectUnkTSUB.cpp"), From 3b6be4d95cc890d27c02ef4846662937ef78de66 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Thu, 30 Apr 2026 23:17:14 +0200 Subject: [PATCH 12/12] random docs --- include/Unknown/UnkStruct_ov000_02067bc4.hpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/include/Unknown/UnkStruct_ov000_02067bc4.hpp b/include/Unknown/UnkStruct_ov000_02067bc4.hpp index 8ef6d0d9..5abd8565 100644 --- a/include/Unknown/UnkStruct_ov000_02067bc4.hpp +++ b/include/Unknown/UnkStruct_ov000_02067bc4.hpp @@ -78,9 +78,19 @@ class UnkStruct_ov000_02067bc4 { typedef void (*UnkCallback2)(); +class BMGEntry { +public: + /* 00 */ SectionINF1 *mpINF1; + /* 04 */ SectionFLW1 *mpFLW1; + /* 08 */ SectionFLI1 *mpFLI1; + /* 0C */ SectionDAT1 *mpDAT1; + /* 10 */ unk32 mBMGGroup; + /* 14 */ +}; + class UnkStruct_ov000_020b504c_Sub3 : public SysObject { public: - /* 00 */ SectionINF1 **mUnk_00; + /* 00 */ BMGEntry **mpBMGTable; /* 04 */ BMGHeader **mUnk_04; /* 08 */ BMGHeader **mUnk_08; /* 0C */ SectionINF1 *mUnk_0C;