From ce9f96d932c0028262821ff3fc39a4b05c977285 Mon Sep 17 00:00:00 2001 From: Yanis <35189056+Yanis002@users.noreply.github.com> Date: Wed, 16 Jul 2025 13:14:03 +0200 Subject: [PATCH] Match `00_Core/Actor/Dungeon/ActorEventIcon.cpp` (#119) * match ActorEventIcon * mark as complete --- config/eur/arm9/overlays/ov000/delinks.txt | 1 + config/eur/arm9/overlays/ov000/relocs.txt | 2 +- config/eur/arm9/overlays/ov000/symbols.txt | 8 +- config/eur/arm9/symbols.txt | 2 +- config/usa/arm9/overlays/ov000/delinks.txt | 1 + config/usa/arm9/overlays/ov000/relocs.txt | 2 +- config/usa/arm9/overlays/ov000/symbols.txt | 8 +- config/usa/arm9/symbols.txt | 2 +- include/Actor/Dungeon/ActorEventIcon.hpp | 5 +- include/Unknown/UnkStruct_0202e1a0.hpp | 4 +- include/Unknown/UnkStruct_02035064.hpp | 2 +- src/00_Core/Actor/Dungeon/ActorEventIcon.cpp | 155 +++++++++++++++++-- 12 files changed, 166 insertions(+), 26 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt index 2981bdf4..9fcaf6f8 100644 --- a/config/eur/arm9/overlays/ov000/delinks.txt +++ b/config/eur/arm9/overlays/ov000/delinks.txt @@ -28,6 +28,7 @@ src/00_Core/Actor/Dungeon/ActorSwitchObject.cpp: .sbss start:0x020ecd64 end:0x020ecd84 src/00_Core/Actor/Dungeon/ActorEventIcon.cpp: + complete .text start:0x020904f4 end:0x020908f8 .init start:0x020df6f8 end:0x020df738 .ctor start:0x020e1ecc end:0x020e1ed0 diff --git a/config/eur/arm9/overlays/ov000/relocs.txt b/config/eur/arm9/overlays/ov000/relocs.txt index 190c2319..3b4be288 100644 --- a/config/eur/arm9/overlays/ov000/relocs.txt +++ b/config/eur/arm9/overlays/ov000/relocs.txt @@ -2313,7 +2313,7 @@ from:0x02090518 kind:arm_call to:0x02090524 module:overlay(0) from:0x02090520 kind:load to:0x027e0fe0 module:dtcm from:0x0209052c kind:arm_call to:0x020c1554 module:overlay(0) from:0x02090548 kind:arm_call to:0x02035064 module:main -from:0x0209057c kind:load to:0x020e2aa8 module:overlay(0) +from:0x0209057c kind:load to:0x020e2aa0 add:8 module:overlay(0) from:0x020905c0 kind:arm_call to:0x020350b4 module:main from:0x020905d8 kind:arm_call to:0x020351b8 module:main from:0x020905fc kind:arm_call to:0x020350b4 module:main diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 74fa30f5..c9c6efa3 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -960,7 +960,7 @@ func_ov000_0209048c kind:function(arm,size=0x38) addr:0x0209048c func_ov000_020904c4 kind:function(arm,size=0x14) addr:0x020904c4 func_ov000_020904d8 kind:function(arm,size=0x1c) addr:0x020904d8 _ZN14ActorEventIcon6CreateEv kind:function(arm,size=0x30) addr:0x020904f4 -_ZN14ActorEventIconC2Ev kind:function(arm,size=0x5c) addr:0x02090524 +_ZN14ActorEventIconC1Ev kind:function(arm,size=0x5c) addr:0x02090524 _ZN14ActorEventIcon4InitEv kind:function(arm,size=0xb0) addr:0x02090580 _ZN14ActorEventIcon8vfunc_14Ej kind:function(arm,size=0xc) addr:0x02090630 _ZN14ActorEventIcon8vfunc_18Ej kind:function(arm,size=0xc) addr:0x0209063c @@ -3940,7 +3940,7 @@ __sinit_ov000_020df4cc kind:function(arm,size=0x174) addr:0x020df4cc __sinit_ov000_020df640 kind:function(arm,size=0x38) addr:0x020df640 __sinit_ActorSwitchObject.cpp kind:function(arm,size=0x40) addr:0x020df678 __sinit_ov000_020df6b8 kind:function(arm,size=0x40) addr:0x020df6b8 -__sinit_ActorEventIcon.cpp kind:function(arm,size=0x40) addr:0x020df6f8 +__sinit_ActorEventIcon.cpp kind:function(arm,size=0x40) addr:0x020df6f8 local __sinit_ov000_020df738 kind:function(arm,size=0x38) addr:0x020df738 __sinit_ov000_020df770 kind:function(arm,size=0x20) addr:0x020df770 __sinit_ov000_020df790 kind:function(arm,size=0x1718) addr:0x020df790 @@ -4066,7 +4066,7 @@ data_ov000_020e2870 kind:data(any) addr:0x020e2870 data_ov000_020e289c kind:data(any) addr:0x020e289c _ZTV17ActorSwitchObject kind:data(any) addr:0x020e2930 data_ov000_020e29ec kind:data(any) addr:0x020e29ec -_ZTV14ActorEventIcon kind:data(any) addr:0x020e2aa8 +_ZTV14ActorEventIcon kind:data(any) addr:0x020e2aa0 data_ov000_020e2b64 kind:data(any) addr:0x020e2b64 data_ov000_020e2bb4 kind:data(any) addr:0x020e2bb4 data_ov000_020e2c04 kind:data(any) addr:0x020e2c04 @@ -5849,7 +5849,7 @@ data_ov000_020ecd64 kind:bss addr:0x020ecd64 _ZN17ActorSwitchObject5gTypeE kind:bss addr:0x020ecd70 data_ov000_020ecd84 kind:bss addr:0x020ecd84 data_ov000_020ecd90 kind:bss addr:0x020ecd90 -data_ov000_020ecda4 kind:bss addr:0x020ecda4 +@558 kind:bss addr:0x020ecda4 local _ZN14ActorEventIcon5gTypeE kind:bss addr:0x020ecdb0 data_ov000_020ecdc4 kind:bss addr:0x020ecdc4 data_ov000_020ecdcc kind:bss addr:0x020ecdcc diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt index 59241971..4be3fe36 100644 --- a/config/eur/arm9/symbols.txt +++ b/config/eur/arm9/symbols.txt @@ -1719,7 +1719,7 @@ func_0203490c kind:function(arm,size=0x30) addr:0x0203490c func_0203493c kind:function(arm,size=0x48) addr:0x0203493c func_02034984 kind:function(arm,size=0x48) addr:0x02034984 func_020349cc kind:function(arm,size=0x50) addr:0x020349cc -func_02034a1c kind:function(arm,size=0xf0) addr:0x02034a1c +_ZN18UnkStruct_0203506413func_02034a1cEiiP18UnkStruct_01ffbe34 kind:function(arm,size=0xf0) addr:0x02034a1c func_02034b0c kind:function(arm,size=0x4c) addr:0x02034b0c func_02034b58 kind:function(arm,size=0x38) addr:0x02034b58 func_02034b90 kind:function(arm,size=0x38) addr:0x02034b90 diff --git a/config/usa/arm9/overlays/ov000/delinks.txt b/config/usa/arm9/overlays/ov000/delinks.txt index 2b777930..963fb43f 100644 --- a/config/usa/arm9/overlays/ov000/delinks.txt +++ b/config/usa/arm9/overlays/ov000/delinks.txt @@ -28,6 +28,7 @@ src/00_Core/Actor/Dungeon/ActorSwitchObject.cpp: .sbss start:0x020ecd04 end:0x020ecd24 src/00_Core/Actor/Dungeon/ActorEventIcon.cpp: + complete .text start:0x02090494 end:0x02090898 .init start:0x020df698 end:0x020df6d8 .ctor start:0x020e1e6c end:0x020e1e70 diff --git a/config/usa/arm9/overlays/ov000/relocs.txt b/config/usa/arm9/overlays/ov000/relocs.txt index 8d0854cd..444265ad 100644 --- a/config/usa/arm9/overlays/ov000/relocs.txt +++ b/config/usa/arm9/overlays/ov000/relocs.txt @@ -2313,7 +2313,7 @@ from:0x020904b8 kind:arm_call to:0x020904c4 module:overlay(0) from:0x020904c0 kind:load to:0x027e0fe0 module:dtcm from:0x020904cc kind:arm_call to:0x020c14f4 module:overlay(0) from:0x020904e8 kind:arm_call to:0x02035020 module:main -from:0x0209051c kind:load to:0x020e2a48 module:overlay(0) +from:0x0209051c kind:load to:0x020e2a40 add:8 module:overlay(0) from:0x02090560 kind:arm_call to:0x02035070 module:main from:0x02090578 kind:arm_call to:0x02035174 module:main from:0x0209059c kind:arm_call to:0x02035070 module:main diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index fa4df74f..86737deb 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -960,7 +960,7 @@ func_ov000_0209048c kind:function(arm,size=0x38) addr:0x0209042c func_ov000_020904c4 kind:function(arm,size=0x14) addr:0x02090464 func_ov000_020904d8 kind:function(arm,size=0x1c) addr:0x02090478 _ZN14ActorEventIcon6CreateEv kind:function(arm,size=0x30) addr:0x02090494 -_ZN14ActorEventIconC2Ev kind:function(arm,size=0x5c) addr:0x020904c4 +_ZN14ActorEventIconC1Ev kind:function(arm,size=0x5c) addr:0x020904c4 _ZN14ActorEventIcon4InitEv kind:function(arm,size=0xb0) addr:0x02090520 _ZN14ActorEventIcon8vfunc_14Ej kind:function(arm,size=0xc) addr:0x020905d0 _ZN14ActorEventIcon8vfunc_18Ej kind:function(arm,size=0xc) addr:0x020905dc @@ -3940,7 +3940,7 @@ __sinit_ov000_020df4cc kind:function(arm,size=0x174) addr:0x020df46c __sinit_ov000_020df640 kind:function(arm,size=0x38) addr:0x020df5e0 __sinit_ActorSwitchObject.cpp kind:function(arm,size=0x40) addr:0x020df618 __sinit_ov000_020df6b8 kind:function(arm,size=0x40) addr:0x020df658 -__sinit_ActorEventIcon.cpp kind:function(arm,size=0x40) addr:0x020df698 +__sinit_ActorEventIcon.cpp kind:function(arm,size=0x40) addr:0x020df698 local __sinit_ov000_020df738 kind:function(arm,size=0x38) addr:0x020df6d8 __sinit_ov000_020df770 kind:function(arm,size=0x20) addr:0x020df710 __sinit_ov000_020df790 kind:function(arm,size=0x1718) addr:0x020df730 @@ -4066,7 +4066,7 @@ data_ov000_020e2870 kind:data(any) addr:0x020e2810 data_ov000_020e289c kind:data(any) addr:0x020e283c _ZTV17ActorSwitchObject kind:data(any) addr:0x020e28d0 data_ov000_020e29ec kind:data(any) addr:0x020e298c -_ZTV14ActorEventIcon kind:data(any) addr:0x020e2a48 +_ZTV14ActorEventIcon kind:data(any) addr:0x020e2a40 data_ov000_020e2b64 kind:data(any) addr:0x020e2b04 data_ov000_020e2bb4 kind:data(any) addr:0x020e2b54 data_ov000_020e2c04 kind:data(any) addr:0x020e2ba4 @@ -5849,7 +5849,7 @@ data_ov000_020ecd64 kind:bss addr:0x020ecd04 _ZN17ActorSwitchObject5gTypeE kind:bss addr:0x020ecd10 data_ov000_020ecd84 kind:bss addr:0x020ecd24 data_ov000_020ecd90 kind:bss addr:0x020ecd30 -data_ov000_020ecda4 kind:bss addr:0x020ecd44 +@558 kind:bss addr:0x020ecd44 local _ZN14ActorEventIcon5gTypeE kind:bss addr:0x020ecd50 data_ov000_020ecdc4 kind:bss addr:0x020ecd64 data_ov000_020ecdcc kind:bss addr:0x020ecd6c diff --git a/config/usa/arm9/symbols.txt b/config/usa/arm9/symbols.txt index 68451708..14c1bb5a 100644 --- a/config/usa/arm9/symbols.txt +++ b/config/usa/arm9/symbols.txt @@ -1719,7 +1719,7 @@ func_0203490c kind:function(arm,size=0x30) addr:0x020348c8 func_0203493c kind:function(arm,size=0x48) addr:0x020348f8 func_02034984 kind:function(arm,size=0x48) addr:0x02034940 func_020349cc kind:function(arm,size=0x50) addr:0x02034988 -func_02034a1c kind:function(arm,size=0xf0) addr:0x020349d8 +_ZN18UnkStruct_0203506413func_02034a1cEiiP18UnkStruct_01ffbe34 kind:function(arm,size=0xf0) addr:0x020349d8 func_02034b0c kind:function(arm,size=0x4c) addr:0x02034ac8 func_02034b58 kind:function(arm,size=0x38) addr:0x02034b14 func_02034b90 kind:function(arm,size=0x38) addr:0x02034b4c diff --git a/include/Actor/Dungeon/ActorEventIcon.hpp b/include/Actor/Dungeon/ActorEventIcon.hpp index a7a86751..774905aa 100644 --- a/include/Actor/Dungeon/ActorEventIcon.hpp +++ b/include/Actor/Dungeon/ActorEventIcon.hpp @@ -12,9 +12,10 @@ public: static ActorType gType; /* 000 (base) */ - /* 158 */ void *mUnk_158; + /* 158 */ u32 mUnk_158; /* 15c */ u32 mUnk_15c; /* 160 */ UnkStruct_02035064 mUnk_160; + /* 1e8 */ /* 00 */ virtual ~ActorEventIcon() override; /* 08 */ virtual bool Init() override; @@ -25,6 +26,6 @@ public: static ActorEventIcon *Create(); ActorEventIcon(); - u32 func_ov000_02090648(u32 param1); + void func_ov000_02090648(u32 param1); bool func_ov000_02090774(u32 param1); }; diff --git a/include/Unknown/UnkStruct_0202e1a0.hpp b/include/Unknown/UnkStruct_0202e1a0.hpp index d6d6a793..aacd6144 100644 --- a/include/Unknown/UnkStruct_0202e1a0.hpp +++ b/include/Unknown/UnkStruct_0202e1a0.hpp @@ -5,10 +5,10 @@ // astruct_11 struct UnkStruct_0202e1a0 { - /* 00 */ unk16 mUnk_00; + /* 00 */ u16 mUnk_00; /* 02 */ unk16 mUnk_02; /* 04 */ s32 mUnk_04; - /* 08 */ u32 mUnk_08; + /* 08 */ s32 mUnk_08; /* 0c */ s32 mUnk_0c; /* 10 */ s32 mUnk_10; /* 14 */ s32 mUnk_14; diff --git a/include/Unknown/UnkStruct_02035064.hpp b/include/Unknown/UnkStruct_02035064.hpp index a55b8808..425683de 100644 --- a/include/Unknown/UnkStruct_02035064.hpp +++ b/include/Unknown/UnkStruct_02035064.hpp @@ -36,7 +36,7 @@ public: /* 74 */ u16 *mUnk_74; /* 78 */ s32 *mUnk_78; /* 7c */ u32 mUnk_7c; - /* 80 */ u16 mUnk_80; + /* 80 */ s16 mUnk_80; /* 82 */ unk16 mUnk_82; /* 84 */ unk16 mUnk_84; /* 86 */ bool mUnk_86; diff --git a/src/00_Core/Actor/Dungeon/ActorEventIcon.cpp b/src/00_Core/Actor/Dungeon/ActorEventIcon.cpp index 22e35d8e..a99cee25 100644 --- a/src/00_Core/Actor/Dungeon/ActorEventIcon.cpp +++ b/src/00_Core/Actor/Dungeon/ActorEventIcon.cpp @@ -1,13 +1,150 @@ #include "Actor/Dungeon/ActorEventIcon.hpp" +#include "Player/PlayerBase.hpp" +#include "Save/AdventureFlags.hpp" +extern u32 **data_027e0fe0[]; +extern void *data_027e0d3c; +extern "C" unk32 func_ov000_02079470(void *, Vec3p *, unk32, unk32, unk32 *, unk32 *, unk32, unk32); + +#pragma section sbss begin ActorType ActorEventIcon::gType = ActorType(ActorTypeId_EventIcon, (ActorCreateFunc) ActorEventIcon::Create, NULL); +#pragma section sbss end -ActorEventIcon *ActorEventIcon::Create() {} -ActorEventIcon::ActorEventIcon() {} -bool ActorEventIcon::Init() {} -void ActorEventIcon::vfunc_14(u32 param1) {} -void ActorEventIcon::vfunc_18(u32 param1) {} -u32 ActorEventIcon::func_ov000_02090648(u32 param1) {} -bool ActorEventIcon::func_ov000_02090774(u32 param1) {} -void ActorEventIcon::vfunc_1c(u16 *param1) {} -ActorEventIcon::~ActorEventIcon() {} +ARM ActorEventIcon *ActorEventIcon::Create() { + return new(*data_027e0fe0[0], 4) ActorEventIcon(); +} + +ARM ActorEventIcon::ActorEventIcon() : + mUnk_158(0), + mUnk_15c(0) { + this->mHitbox.pos.x = 0; + this->mHitbox.pos.y = 0x4000; + this->mHitbox.pos.z = 0; + this->mHitbox.size = 0x4000; + + this->mUnk_08c.pos.x = 0; + this->mUnk_08c.pos.y = 0x4000; + this->mUnk_08c.pos.z = 0; + this->mUnk_08c.size = 0x4000; +} + +ARM bool ActorEventIcon::Init() { + switch (this->mUnk_144) { + case 1: + case 2: + this->mUnk_15c = 0xFFFFFFF2; + this->mUnk_160.func_020350b4(3, 3, 0x19, 0, 0); + this->mUnk_160.func_020351b8(true, false, false, false); + break; + default: + this->mUnk_15c = 0xFFFFFFF4; + this->mUnk_160.func_020350b4(3, 0, 0x19, 0, 0); + this->mUnk_160.func_020351b8(false, false, false, false); + break; + } + + this->func_ov000_02090774(0); + return true; +} + +ARM void ActorEventIcon::vfunc_14(u32 param1) { + func_ov000_02090648(param1); +} + +ARM void ActorEventIcon::vfunc_18(u32 param1) { + func_ov000_02090648(param1); +} + +ARM void ActorEventIcon::func_ov000_02090648(u32 param1) { + if (!this->func_ov00_020c313c(param1)) { + return; + } + + this->mPrevPos = this->mPos; + + switch (this->mUnk_130) { + case 0: + switch (this->mUnk_140) { + case 0: + if (Vec3p_Distance(&this->mPos, &gPlayerPos) <= 0x1000) { + this->func_ov000_02090774(1); + return; + } + break; + case 1: break; + case 2: + if (this->mUnk_160.mUnk_5c.mUnk_08 >= 0x5A000 && Vec3p_Distance(&this->mPos, &gPlayerPos) > 0x1000) { + this->func_ov000_02090774(1); + return; + } + break; + default: break; + } + + if (this->mUnk_160.mUnk_5c.mUnk_00 == 1) { + if (this->mUnk_160.mUnk_5c.func_0202e58c() != 0) { + func_ov000_02090774(1); + } + } else { + if (!gAdventureFlags->func_ov00_02097738()) { + this->mUnk_158++; + } + + if (this->mUnk_158 >= 0x258) { + func_ov000_02090774(1); + } + } + break; + case 1: break; + default: break; + } + + this->mUnk_160.func_0203516c(); +} + +ARM bool ActorEventIcon::func_ov000_02090774(u32 param1) { + this->mUnk_130 = param1; + + switch (this->mUnk_130) { + case 0: this->mUnk_158 = 0; break; + case 1: this->mAlive = false; break; + default: break; + } + + return true; +} + +ARM void ActorEventIcon::vfunc_1c(u16 *param1) { + unk32 iStack_c; + unk32 iStack_10; + + if (((*param1 & 4) == 0) && ((*param1 & 8) == 0)) { + return; + } + + if (func_ov000_02079470(data_027e0d3c, &this->mPos, 0, 0, &iStack_c, &iStack_10, 0, 0) != 0) { + switch (this->mUnk_144) { + case 1: + if (this->mUnk_160.mUnk_80 >= 8) { + iStack_10 -= 8; + } else { + iStack_10 -= 0xe; + } + break; + case 2: + iStack_c++; + + if (this->mUnk_160.mUnk_80 >= 8) { + iStack_10 -= 0xb; + } else { + iStack_10 -= 0x11; + } + break; + default: iStack_10 += this->mUnk_15c; break; + } + + this->mUnk_160.func_02034a1c(iStack_c, iStack_10, 0); + } +} + +ARM ActorEventIcon::~ActorEventIcon() {}