From 92c3ded84a9966a48f07c80103f1e54b7f0a8041 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Mon, 25 Aug 2025 16:40:57 +0200 Subject: [PATCH 1/8] started ActorManager_001.cpp --- config/eur/arm9/overlays/ov000/symbols.txt | 6 +- config/eur/arm9/overlays/ov001/symbols.txt | 2 +- config/eur/arm9/overlays/ov021/symbols.txt | 2 +- config/eur/arm9/overlays/ov060/symbols.txt | 2 +- config/jp/arm9/overlays/ov000/symbols.txt | 6 +- config/jp/arm9/overlays/ov001/symbols.txt | 2 +- config/jp/arm9/overlays/ov021/symbols.txt | 2 +- config/jp/arm9/overlays/ov060/symbols.txt | 2 +- include/Actor/Actor.hpp | 4 + include/Actor/ActorManager.hpp | 3 +- include/Map/MapObjectId.hpp | 9 + include/Map/MapObjectTypeTable.inl | 265 +++++++++++++++++++ include/Unknown/UnkStruct_027e0cd8.hpp | 60 ++++- include/Unknown/UnkStruct_027e0cf4.hpp | 12 + include/Unknown/UnkStruct_027e0d70.hpp | 11 + include/files.h | 19 ++ src/001_SceneInit/Actor/ActorManager_001.cpp | 56 +++- 17 files changed, 443 insertions(+), 20 deletions(-) create mode 100644 include/Map/MapObjectId.hpp create mode 100644 include/Map/MapObjectTypeTable.inl create mode 100644 include/Unknown/UnkStruct_027e0cf4.hpp create mode 100644 include/Unknown/UnkStruct_027e0d70.hpp create mode 100644 include/files.h diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index d33d3aa1..5d3bf604 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -2252,11 +2252,11 @@ func_ov000_020970c8 kind:function(arm,size=0xc4) addr:0x020970c8 func_ov000_0209718c kind:function(arm,size=0xb8) addr:0x0209718c func_ov000_02097244 kind:function(arm,size=0x44) addr:0x02097244 func_ov000_02097288 kind:function(arm,size=0x154) addr:0x02097288 -func_ov000_020973dc kind:function(arm,size=0xc) addr:0x020973dc -func_ov000_020973e8 kind:function(arm,size=0xc) addr:0x020973e8 +_ZN24UnkStruct_ov000_020b539c18func_ov000_02073dcEv kind:function(arm,size=0xc) addr:0x020973dc +_ZN24UnkStruct_ov000_020b539c18func_ov000_02073e8Ev kind:function(arm,size=0xc) addr:0x020973e8 func_ov000_020973f4 kind:function(arm,size=0x50) addr:0x020973f4 func_ov000_02097444 kind:function(arm,size=0x98) addr:0x02097444 -func_ov000_020974dc kind:function(arm,size=0x4c) addr:0x020974dc +_ZN24UnkStruct_ov000_020b539c19func_ov000_020974dcEj kind:function(arm,size=0x4c) addr:0x020974dc 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 diff --git a/config/eur/arm9/overlays/ov001/symbols.txt b/config/eur/arm9/overlays/ov001/symbols.txt index a39741c4..7f63a0cc 100644 --- a/config/eur/arm9/overlays/ov001/symbols.txt +++ b/config/eur/arm9/overlays/ov001/symbols.txt @@ -184,7 +184,7 @@ _ZN12ActorManager19func_ov001_020bb548Ev kind:function(thumb,size=0xe8) addr:0x0 _ZN12ActorManager19func_ov001_020bb630Ev kind:function(thumb,size=0x80) addr:0x020bb630 _ZN12ActorManager19func_ov001_020bb6b0EPi kind:function(thumb,size=0x78) addr:0x020bb6b0 _ZN12ActorManager19func_ov001_020bb728Ei kind:function(thumb,size=0x88) addr:0x020bb728 -_ZN12ActorManager19func_ov001_020bb7b0Ei kind:function(thumb,size=0x40) addr:0x020bb7b0 +_ZN12ActorManager19func_ov001_020bb7b0EP15ZeldaObjectList kind:function(thumb,size=0x40) addr:0x020bb7b0 _ZN12ActorManager19func_ov001_020bb7f0Ev kind:function(thumb,size=0x34) addr:0x020bb7f0 _ZN12ActorManager19func_ov001_020bb824Ev kind:function(thumb,size=0x20) addr:0x020bb824 _ZN12ActorManager19func_ov001_020bb844Ev kind:function(thumb,size=0x20) addr:0x020bb844 diff --git a/config/eur/arm9/overlays/ov021/symbols.txt b/config/eur/arm9/overlays/ov021/symbols.txt index 8944cc6b..7e8e6d4a 100644 --- a/config/eur/arm9/overlays/ov021/symbols.txt +++ b/config/eur/arm9/overlays/ov021/symbols.txt @@ -443,7 +443,7 @@ func_ov021_020f879c kind:function(arm,size=0x18) addr:0x020f879c func_ov021_020f87b4 kind:function(arm,size=0x64) addr:0x020f87b4 func_ov021_020f8818 kind:function(arm,size=0x28) addr:0x020f8818 func_ov021_020f8840 kind:function(arm,size=0x458) addr:0x020f8840 -func_ov021_020f8c98 kind:function(arm,size=0x44) addr:0x020f8c98 +_ZN18UnkStruct_027e0cf4D1Ev kind:function(arm,size=0x44) addr:0x020f8c98 func_ov021_020f8cdc kind:function(arm,size=0x44) addr:0x020f8cdc func_ov021_020f8d20 kind:function(arm,size=0x48) addr:0x020f8d20 func_ov021_020f8d68 kind:function(arm,size=0x334) addr:0x020f8d68 diff --git a/config/eur/arm9/overlays/ov060/symbols.txt b/config/eur/arm9/overlays/ov060/symbols.txt index 2c01f334..4be772dc 100644 --- a/config/eur/arm9/overlays/ov060/symbols.txt +++ b/config/eur/arm9/overlays/ov060/symbols.txt @@ -249,7 +249,7 @@ func_ov060_0215e974 kind:function(arm,size=0xc) addr:0x0215e974 func_ov060_0215e980 kind:function(arm,size=0x24) addr:0x0215e980 func_ov060_0215e9a4 kind:function(arm,size=0x28) addr:0x0215e9a4 func_ov060_0215e9cc kind:function(arm,size=0xc4) addr:0x0215e9cc -func_ov060_0215ea90 kind:function(arm,size=0x6c) addr:0x0215ea90 +_ZN18UnkStruct_027e0d70D1Ev kind:function(arm,size=0x6c) addr:0x0215ea90 func_ov060_0215eafc kind:function(arm,size=0x14) addr:0x0215eafc func_ov060_0215eb10 kind:function(arm,size=0x14) addr:0x0215eb10 func_ov060_0215eb24 kind:function(arm,size=0x20) addr:0x0215eb24 diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index 4b1634dd..98b2b8ea 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -2250,11 +2250,11 @@ func_ov000_0209887c kind:function(arm,size=0xc4) addr:0x0209887c func_ov000_02098940 kind:function(arm,size=0xb8) addr:0x02098940 func_ov000_020989f8 kind:function(arm,size=0x44) addr:0x020989f8 func_ov000_02098a3c kind:function(arm,size=0x154) addr:0x02098a3c -func_ov000_02098b90 kind:function(arm,size=0xc) addr:0x02098b90 -func_ov000_02098b9c kind:function(arm,size=0xc) addr:0x02098b9c +_ZN24UnkStruct_ov000_020b539c18func_ov000_02073dcEv kind:function(arm,size=0xc) addr:0x02098b90 +_ZN24UnkStruct_ov000_020b539c18func_ov000_02073e8Ev kind:function(arm,size=0xc) addr:0x02098b9c func_ov000_02098ba8 kind:function(arm,size=0x50) addr:0x02098ba8 func_ov000_02098bf8 kind:function(arm,size=0x98) addr:0x02098bf8 -func_ov000_02098c90 kind:function(arm,size=0x4c) addr:0x02098c90 +_ZN24UnkStruct_ov000_020b539c19func_ov000_020974dcEj kind:function(arm,size=0x4c) addr:0x02098c90 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 diff --git a/config/jp/arm9/overlays/ov001/symbols.txt b/config/jp/arm9/overlays/ov001/symbols.txt index d9fb108e..8efe810d 100644 --- a/config/jp/arm9/overlays/ov001/symbols.txt +++ b/config/jp/arm9/overlays/ov001/symbols.txt @@ -184,7 +184,7 @@ _ZN12ActorManager19func_ov001_020bb548Ev kind:function(thumb,size=0xe8) addr:0x0 _ZN12ActorManager19func_ov001_020bb630Ev kind:function(thumb,size=0x80) addr:0x020bce78 _ZN12ActorManager19func_ov001_020bb6b0EPi kind:function(thumb,size=0x78) addr:0x020bcef8 _ZN12ActorManager19func_ov001_020bb728Ei kind:function(thumb,size=0x88) addr:0x020bcf70 -_ZN12ActorManager19func_ov001_020bb7b0Ei kind:function(thumb,size=0x40) addr:0x020bcff8 +_ZN12ActorManager19func_ov001_020bb7b0EP15ZeldaObjectList kind:function(thumb,size=0x40) addr:0x020bcff8 _ZN12ActorManager19func_ov001_020bb7f0Ev kind:function(thumb,size=0x34) addr:0x020bd038 _ZN12ActorManager19func_ov001_020bb824Ev kind:function(thumb,size=0x20) addr:0x020bd06c _ZN12ActorManager19func_ov001_020bb844Ev kind:function(thumb,size=0x20) addr:0x020bd08c diff --git a/config/jp/arm9/overlays/ov021/symbols.txt b/config/jp/arm9/overlays/ov021/symbols.txt index 3d167dfb..e8a226ba 100644 --- a/config/jp/arm9/overlays/ov021/symbols.txt +++ b/config/jp/arm9/overlays/ov021/symbols.txt @@ -443,7 +443,7 @@ func_ov021_020fa134 kind:function(arm,size=0x18) addr:0x020fa134 func_ov021_020fa14c kind:function(arm,size=0x64) addr:0x020fa14c func_ov021_020fa1b0 kind:function(arm,size=0x28) addr:0x020fa1b0 func_ov021_020fa1d8 kind:function(arm,size=0x458) addr:0x020fa1d8 -func_ov021_020fa630 kind:function(arm,size=0x44) addr:0x020fa630 +_ZN18UnkStruct_027e0cf4D1Ev kind:function(arm,size=0x44) addr:0x020fa630 func_ov021_020fa674 kind:function(arm,size=0x44) addr:0x020fa674 func_ov021_020fa6b8 kind:function(arm,size=0x48) addr:0x020fa6b8 func_ov021_020fa700 kind:function(arm,size=0x334) addr:0x020fa700 diff --git a/config/jp/arm9/overlays/ov060/symbols.txt b/config/jp/arm9/overlays/ov060/symbols.txt index 920a88c4..84566693 100644 --- a/config/jp/arm9/overlays/ov060/symbols.txt +++ b/config/jp/arm9/overlays/ov060/symbols.txt @@ -249,7 +249,7 @@ func_ov060_021606b4 kind:function(arm,size=0xc) addr:0x021606b4 func_ov060_021606c0 kind:function(arm,size=0x24) addr:0x021606c0 func_ov060_021606e4 kind:function(arm,size=0x28) addr:0x021606e4 func_ov060_0216070c kind:function(arm,size=0xc4) addr:0x0216070c -func_ov060_021607d0 kind:function(arm,size=0x6c) addr:0x021607d0 +_ZN18UnkStruct_027e0d70D1Ev kind:function(arm,size=0x6c) addr:0x021607d0 func_ov060_0216083c kind:function(arm,size=0x14) addr:0x0216083c func_ov060_02160850 kind:function(arm,size=0x14) addr:0x02160850 func_ov060_02160864 kind:function(arm,size=0x20) addr:0x02160864 diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp index cb7a30d3..0ede74ac 100644 --- a/include/Actor/Actor.hpp +++ b/include/Actor/Actor.hpp @@ -27,6 +27,10 @@ class UnkStruct_ov000_020b539c { /* 34 */ void func_02028cdc(Actor_5c *param1, unk32 param2); + + unk32 *func_ov000_02073dc(); + unk32 *func_ov000_02073e8(); + ActorType *func_ov000_020974dc(u32 id); }; typedef u32 ActorFlags; diff --git a/include/Actor/ActorManager.hpp b/include/Actor/ActorManager.hpp index 5b933e5f..57579a63 100644 --- a/include/Actor/ActorManager.hpp +++ b/include/Actor/ActorManager.hpp @@ -1,6 +1,7 @@ #pragma once #include "Actor/ActorUnk_ov000_020a8bb0.hpp" +#include "files.h" #include "types.h" class ActorManager { @@ -36,7 +37,7 @@ class ActorManager { void func_ov001_020bb630(); void func_ov001_020bb6b0(s32 *param1); static bool func_ov001_020bb728(s32 param1); - void func_ov001_020bb7b0(s32 param1); + void func_ov001_020bb7b0(ZeldaObjectList *pObjList); void func_ov001_020bb7f0(); static void func_ov001_020bb824(); static void func_ov001_020bb844(); diff --git a/include/Map/MapObjectId.hpp b/include/Map/MapObjectId.hpp new file mode 100644 index 00000000..36af389d --- /dev/null +++ b/include/Map/MapObjectId.hpp @@ -0,0 +1,9 @@ +#pragma once + +#include "types.h" + +enum MapObjectId { +#define DEFINE_MAP_OBJECT_TYPE(id, name) MapObjectId_##name = id, +#include "Map/MapObjectTypeTable.inl" +#undef DEFINE_MAP_OBJECT_TYPE +}; diff --git a/include/Map/MapObjectTypeTable.inl b/include/Map/MapObjectTypeTable.inl new file mode 100644 index 00000000..df802697 --- /dev/null +++ b/include/Map/MapObjectTypeTable.inl @@ -0,0 +1,265 @@ +// IMPORTANT: Map Object types must be sorted by ID! + +// DEFINE_MAP_OBJECT_TYPE(id, name) +DEFINE_MAP_OBJECT_TYPE('ACDS', ACDS) +DEFINE_MAP_OBJECT_TYPE('ACFR', ACFR) +DEFINE_MAP_OBJECT_TYPE('ACSN', ACSN) +DEFINE_MAP_OBJECT_TYPE('ACVC', ACVC) +DEFINE_MAP_OBJECT_TYPE('ACWT', ACWT) +DEFINE_MAP_OBJECT_TYPE('ARWL', ARWL) +DEFINE_MAP_OBJECT_TYPE('BBFL', BBFL) +DEFINE_MAP_OBJECT_TYPE('BFFL', BFFL) +DEFINE_MAP_OBJECT_TYPE('BFSP', BFSP) +DEFINE_MAP_OBJECT_TYPE('BKCT', BKCT) +DEFINE_MAP_OBJECT_TYPE('BLCC', BLCC) +DEFINE_MAP_OBJECT_TYPE('BLCE', BLCE) +DEFINE_MAP_OBJECT_TYPE('BLCK', BLCK) +DEFINE_MAP_OBJECT_TYPE('BLCM', BLCM) +DEFINE_MAP_OBJECT_TYPE('BLHL', BLHL) +DEFINE_MAP_OBJECT_TYPE('BLKF', BLKF) +DEFINE_MAP_OBJECT_TYPE('BLRB', BLRB) +DEFINE_MAP_OBJECT_TYPE('BLSR', BLSR) +DEFINE_MAP_OBJECT_TYPE('BLT3', BLT3) +DEFINE_MAP_OBJECT_TYPE('BLT4', BLT4) +DEFINE_MAP_OBJECT_TYPE('BLVC', BLVC) +DEFINE_MAP_OBJECT_TYPE('BMFL', BMFL) +DEFINE_MAP_OBJECT_TYPE('BREX', BREX) +DEFINE_MAP_OBJECT_TYPE('BRGL', BRGL) +DEFINE_MAP_OBJECT_TYPE('BRGS', BRGS) +DEFINE_MAP_OBJECT_TYPE('BRGW', BRGW) +DEFINE_MAP_OBJECT_TYPE('BRLI', BRLI) +DEFINE_MAP_OBJECT_TYPE('CHAI', CHAI) +DEFINE_MAP_OBJECT_TYPE('CLMN', CLMN) +DEFINE_MAP_OBJECT_TYPE('CRLL', CRLL) +DEFINE_MAP_OBJECT_TYPE('CRWL', CRWL) +DEFINE_MAP_OBJECT_TYPE('CSTL', CSTL) +DEFINE_MAP_OBJECT_TYPE('CTPT', CTPT) +DEFINE_MAP_OBJECT_TYPE('DFNC', DFNC) +DEFINE_MAP_OBJECT_TYPE('DNGN', DNGN) +DEFINE_MAP_OBJECT_TYPE('DOPA', DOPA) +DEFINE_MAP_OBJECT_TYPE('DRBK', DRBK) +DEFINE_MAP_OBJECT_TYPE('DRBR', DRBR) +DEFINE_MAP_OBJECT_TYPE('DRCG', DRCG) +DEFINE_MAP_OBJECT_TYPE('DRCK', DRCK) +DEFINE_MAP_OBJECT_TYPE('DRDS', DRDS) +DEFINE_MAP_OBJECT_TYPE('DRHS', DRHS) +DEFINE_MAP_OBJECT_TYPE('DRKY', DRKY) +DEFINE_MAP_OBJECT_TYPE('DRMC', DRMC) +DEFINE_MAP_OBJECT_TYPE('DRRS', DRRS) +DEFINE_MAP_OBJECT_TYPE('DRSN', DRSN) +DEFINE_MAP_OBJECT_TYPE('DRST', DRST) +DEFINE_MAP_OBJECT_TYPE('DRSW', DRSW) +DEFINE_MAP_OBJECT_TYPE('DRTC', DRTC) +DEFINE_MAP_OBJECT_TYPE('DRTW', DRTW) +DEFINE_MAP_OBJECT_TYPE('DRTY', DRTY) +DEFINE_MAP_OBJECT_TYPE('DRVC', DRVC) +DEFINE_MAP_OBJECT_TYPE('DRVT', DRVT) +DEFINE_MAP_OBJECT_TYPE('EBRD', EBRD) +DEFINE_MAP_OBJECT_TYPE('EFRF', EFRF) +DEFINE_MAP_OBJECT_TYPE('EFRS', EFRS) +DEFINE_MAP_OBJECT_TYPE('ETDK', ETDK) +DEFINE_MAP_OBJECT_TYPE('ETET', ETET) +DEFINE_MAP_OBJECT_TYPE('ETMW', ETMW) +DEFINE_MAP_OBJECT_TYPE('ETNL', ETNL) +DEFINE_MAP_OBJECT_TYPE('ETNM', ETNM) +DEFINE_MAP_OBJECT_TYPE('ETNS', ETNS) +DEFINE_MAP_OBJECT_TYPE('ETSD', ETSD) +DEFINE_MAP_OBJECT_TYPE('ETSW', ETSW) +DEFINE_MAP_OBJECT_TYPE('ETTV', ETTV) +DEFINE_MAP_OBJECT_TYPE('ETUS', ETUS) +DEFINE_MAP_OBJECT_TYPE('ETWP', ETWP) +DEFINE_MAP_OBJECT_TYPE('ETYG', ETYG) +DEFINE_MAP_OBJECT_TYPE('EXIT', EXIT) +DEFINE_MAP_OBJECT_TYPE('FLSP', FLSP) +DEFINE_MAP_OBJECT_TYPE('FNCE', FNCE) +DEFINE_MAP_OBJECT_TYPE('FRA1', FRA1) +DEFINE_MAP_OBJECT_TYPE('FRAI', FRAI) +DEFINE_MAP_OBJECT_TYPE('FRAM', FRAM) +DEFINE_MAP_OBJECT_TYPE('FRSH', FRSH) +DEFINE_MAP_OBJECT_TYPE('FRWL', FRWL) +DEFINE_MAP_OBJECT_TYPE('FSCT', FSCT) +DEFINE_MAP_OBJECT_TYPE('FSFR', FSFR) +DEFINE_MAP_OBJECT_TYPE('FSFS', FSFS) +DEFINE_MAP_OBJECT_TYPE('FSSN', FSSN) +DEFINE_MAP_OBJECT_TYPE('FSSV', FSSV) +DEFINE_MAP_OBJECT_TYPE('FST0', FST0) +DEFINE_MAP_OBJECT_TYPE('FST1', FST1) +DEFINE_MAP_OBJECT_TYPE('FST2', FST2) +DEFINE_MAP_OBJECT_TYPE('FST3', FST3) +DEFINE_MAP_OBJECT_TYPE('FSVC', FSVC) +DEFINE_MAP_OBJECT_TYPE('FSWT', FSWT) +DEFINE_MAP_OBJECT_TYPE('GATE', GATE) +DEFINE_MAP_OBJECT_TYPE('GBDR', GBDR) +DEFINE_MAP_OBJECT_TYPE('GELG', GELG) +DEFINE_MAP_OBJECT_TYPE('GRSG', GRSG) +DEFINE_MAP_OBJECT_TYPE('GRSS', GRSS) +DEFINE_MAP_OBJECT_TYPE('GRSV', GRSV) +DEFINE_MAP_OBJECT_TYPE('GSST', GSST) +DEFINE_MAP_OBJECT_TYPE('GTCT', GTCT) +DEFINE_MAP_OBJECT_TYPE('GTMT', GTMT) +DEFINE_MAP_OBJECT_TYPE('GTRB', GTRB) +DEFINE_MAP_OBJECT_TYPE('GTRK', GTRK) +DEFINE_MAP_OBJECT_TYPE('GTSN', GTSN) +DEFINE_MAP_OBJECT_TYPE('GTTN', GTTN) +DEFINE_MAP_OBJECT_TYPE('HOF0', HOF0) +DEFINE_MAP_OBJECT_TYPE('HOF1', HOF1) +DEFINE_MAP_OBJECT_TYPE('HOL0', HOL0) +DEFINE_MAP_OBJECT_TYPE('HOL1', HOL1) +DEFINE_MAP_OBJECT_TYPE('HOL2', HOL2) +DEFINE_MAP_OBJECT_TYPE('HOLB', HOLB) +DEFINE_MAP_OBJECT_TYPE('HOS0', HOS0) +DEFINE_MAP_OBJECT_TYPE('HOS1', HOS1) +DEFINE_MAP_OBJECT_TYPE('HOSB', HOSB) +DEFINE_MAP_OBJECT_TYPE('HOSO', HOSO) +DEFINE_MAP_OBJECT_TYPE('HOST', HOST) +DEFINE_MAP_OBJECT_TYPE('HOT0', HOT0) +DEFINE_MAP_OBJECT_TYPE('HOT1', HOT1) +DEFINE_MAP_OBJECT_TYPE('HOT2', HOT2) +DEFINE_MAP_OBJECT_TYPE('HOUS', HOUS) +DEFINE_MAP_OBJECT_TYPE('HOV0', HOV0) +DEFINE_MAP_OBJECT_TYPE('HOV1', HOV1) +DEFINE_MAP_OBJECT_TYPE('HOW0', HOW0) +DEFINE_MAP_OBJECT_TYPE('HOW1', HOW1) +DEFINE_MAP_OBJECT_TYPE('ICEB', ICEB) +DEFINE_MAP_OBJECT_TYPE('ICGR', ICGR) +DEFINE_MAP_OBJECT_TYPE('ITFL', ITFL) +DEFINE_MAP_OBJECT_TYPE('KNBN', KNBN) +DEFINE_MAP_OBJECT_TYPE('LEVS', LEVS) +DEFINE_MAP_OBJECT_TYPE('LTRW', LTRW) +DEFINE_MAP_OBJECT_TYPE('LTST', LTST) +DEFINE_MAP_OBJECT_TYPE('LVCM', LVCM) +DEFINE_MAP_OBJECT_TYPE('LVVT', LVVT) +DEFINE_MAP_OBJECT_TYPE('MBBS', MBBS) +DEFINE_MAP_OBJECT_TYPE('MBRB', MBRB) +DEFINE_MAP_OBJECT_TYPE('MBRG', MBRG) +DEFINE_MAP_OBJECT_TYPE('MTFS', MTFS) +DEFINE_MAP_OBJECT_TYPE('MTGT', MTGT) +DEFINE_MAP_OBJECT_TYPE('MTIC', MTIC) +DEFINE_MAP_OBJECT_TYPE('MTIR', MTIR) +DEFINE_MAP_OBJECT_TYPE('MTJR', MTJR) +DEFINE_MAP_OBJECT_TYPE('MTOR', MTOR) +DEFINE_MAP_OBJECT_TYPE('MTWD', MTWD) +DEFINE_MAP_OBJECT_TYPE('MTWR', MTWR) +DEFINE_MAP_OBJECT_TYPE('MZFE', MZFE) +DEFINE_MAP_OBJECT_TYPE('MZTR', MZTR) +DEFINE_MAP_OBJECT_TYPE('NPST', NPST) +DEFINE_MAP_OBJECT_TYPE('OJTH', OJTH) +DEFINE_MAP_OBJECT_TYPE('PLCT', PLCT) +DEFINE_MAP_OBJECT_TYPE('PLFM', PLFM) +DEFINE_MAP_OBJECT_TYPE('PLFR', PLFR) +DEFINE_MAP_OBJECT_TYPE('PLV2', PLV2) +DEFINE_MAP_OBJECT_TYPE('PRSH', PRSH) +DEFINE_MAP_OBJECT_TYPE('RCFL', RCFL) +DEFINE_MAP_OBJECT_TYPE('RDSD', RDSD) +DEFINE_MAP_OBJECT_TYPE('RKAG', RKAG) +DEFINE_MAP_OBJECT_TYPE('RLFL', RLFL) +DEFINE_MAP_OBJECT_TYPE('RLSG', RLSG) +DEFINE_MAP_OBJECT_TYPE('RNBO', RNBO) +DEFINE_MAP_OBJECT_TYPE('RPFL', RPFL) +DEFINE_MAP_OBJECT_TYPE('SAND', SAND) +DEFINE_MAP_OBJECT_TYPE('SBDE', SBDE) +DEFINE_MAP_OBJECT_TYPE('SHWB', SHWB) +DEFINE_MAP_OBJECT_TYPE('SKBN', SKBN) +DEFINE_MAP_OBJECT_TYPE('SKDI', SKDI) +DEFINE_MAP_OBJECT_TYPE('SKFR', SKFR) +DEFINE_MAP_OBJECT_TYPE('SKSN', SKSN) +DEFINE_MAP_OBJECT_TYPE('SKVC', SKVC) +DEFINE_MAP_OBJECT_TYPE('SKWT', SKWT) +DEFINE_MAP_OBJECT_TYPE('SPTB', SPTB) +DEFINE_MAP_OBJECT_TYPE('STAL', STAL) +DEFINE_MAP_OBJECT_TYPE('STAT', STAT) +DEFINE_MAP_OBJECT_TYPE('STDE', STDE) +DEFINE_MAP_OBJECT_TYPE('STDS', STDS) +DEFINE_MAP_OBJECT_TYPE('STIR', STIR) +DEFINE_MAP_OBJECT_TYPE('STNE', STNE) +DEFINE_MAP_OBJECT_TYPE('STSD', STSD) +DEFINE_MAP_OBJECT_TYPE('STSF', STSF) +DEFINE_MAP_OBJECT_TYPE('STSH', STSH) +DEFINE_MAP_OBJECT_TYPE('STSP', STSP) +DEFINE_MAP_OBJECT_TYPE('STSS', STSS) +DEFINE_MAP_OBJECT_TYPE('STSV', STSV) +DEFINE_MAP_OBJECT_TYPE('SWBR', SWBR) +DEFINE_MAP_OBJECT_TYPE('SWCB', SWCB) +DEFINE_MAP_OBJECT_TYPE('SWCR', SWCR) +DEFINE_MAP_OBJECT_TYPE('SWEY', SWEY) +DEFINE_MAP_OBJECT_TYPE('SWHT', SWHT) +DEFINE_MAP_OBJECT_TYPE('SWRA', SWRA) +DEFINE_MAP_OBJECT_TYPE('SWST', SWST) +DEFINE_MAP_OBJECT_TYPE('SWSW', SWSW) +DEFINE_MAP_OBJECT_TYPE('SWWN', SWWN) +DEFINE_MAP_OBJECT_TYPE('TATZ', TATZ) +DEFINE_MAP_OBJECT_TYPE('TBSD', TBSD) +DEFINE_MAP_OBJECT_TYPE('TBSF', TBSF) +DEFINE_MAP_OBJECT_TYPE('TBSS', TBSS) +DEFINE_MAP_OBJECT_TYPE('TCBT', TCBT) +DEFINE_MAP_OBJECT_TYPE('TDBP', TDBP) +DEFINE_MAP_OBJECT_TYPE('TDBR', TDBR) +DEFINE_MAP_OBJECT_TYPE('TDDR', TDDR) +DEFINE_MAP_OBJECT_TYPE('THAW', THAW) +DEFINE_MAP_OBJECT_TYPE('TMDE', TMDE) +DEFINE_MAP_OBJECT_TYPE('TMFR', TMFR) +DEFINE_MAP_OBJECT_TYPE('TMSB', TMSB) +DEFINE_MAP_OBJECT_TYPE('TMSN', TMSN) +DEFINE_MAP_OBJECT_TYPE('TMWT', TMWT) +DEFINE_MAP_OBJECT_TYPE('TOWN', TOWN) +DEFINE_MAP_OBJECT_TYPE('TRBB', TRBB) +DEFINE_MAP_OBJECT_TYPE('TRBF', TRBF) +DEFINE_MAP_OBJECT_TYPE('TRBL', TRBL) +DEFINE_MAP_OBJECT_TYPE('TRBM', TRBM) +DEFINE_MAP_OBJECT_TYPE('TRBR', TRBR) +DEFINE_MAP_OBJECT_TYPE('TRCC', TRCC) +DEFINE_MAP_OBJECT_TYPE('TRDA', TRDA) +DEFINE_MAP_OBJECT_TYPE('TRDR', TRDR) +DEFINE_MAP_OBJECT_TYPE('TRDT', TRDT) +DEFINE_MAP_OBJECT_TYPE('TREE', TREE) +DEFINE_MAP_OBJECT_TYPE('TREP', TREP) +DEFINE_MAP_OBJECT_TYPE('TRES', TRES) +DEFINE_MAP_OBJECT_TYPE('TRET', TRET) +DEFINE_MAP_OBJECT_TYPE('TRFI', TRFI) +DEFINE_MAP_OBJECT_TYPE('TRFO', TRFO) +DEFINE_MAP_OBJECT_TYPE('TRFS', TRFS) +DEFINE_MAP_OBJECT_TYPE('TRFV', TRFV) +DEFINE_MAP_OBJECT_TYPE('TRGE', TRGE) +DEFINE_MAP_OBJECT_TYPE('TRGM', TRGM) +DEFINE_MAP_OBJECT_TYPE('TRGW', TRGW) +DEFINE_MAP_OBJECT_TYPE('TRH0', TRH0) +DEFINE_MAP_OBJECT_TYPE('TRH1', TRH1) +DEFINE_MAP_OBJECT_TYPE('TRH2', TRH2) +DEFINE_MAP_OBJECT_TYPE('TRH3', TRH3) +DEFINE_MAP_OBJECT_TYPE('TRLS', TRLS) +DEFINE_MAP_OBJECT_TYPE('TRMA', TRMA) +DEFINE_MAP_OBJECT_TYPE('TRMR', TRMR) +DEFINE_MAP_OBJECT_TYPE('TRPI', TRPI) +DEFINE_MAP_OBJECT_TYPE('TRPT', TRPT) +DEFINE_MAP_OBJECT_TYPE('TRRA', TRRA) +DEFINE_MAP_OBJECT_TYPE('TRRC', TRRC) +DEFINE_MAP_OBJECT_TYPE('TRRD', TRRD) +DEFINE_MAP_OBJECT_TYPE('TRRS', TRRS) +DEFINE_MAP_OBJECT_TYPE('TRRW', TRRW) +DEFINE_MAP_OBJECT_TYPE('TRSA', TRSA) +DEFINE_MAP_OBJECT_TYPE('TRSD', TRSD) +DEFINE_MAP_OBJECT_TYPE('TRSH', TRSH) +DEFINE_MAP_OBJECT_TYPE('TRSN', TRSN) +DEFINE_MAP_OBJECT_TYPE('TRSR', TRSR) +DEFINE_MAP_OBJECT_TYPE('TRSS', TRSS) +DEFINE_MAP_OBJECT_TYPE('TRST', TRST) +DEFINE_MAP_OBJECT_TYPE('TRSW', TRSW) +DEFINE_MAP_OBJECT_TYPE('TRTF', TRTF) +DEFINE_MAP_OBJECT_TYPE('TRTS', TRTS) +DEFINE_MAP_OBJECT_TYPE('TRWA', TRWA) +DEFINE_MAP_OBJECT_TYPE('TRWS', TRWS) +DEFINE_MAP_OBJECT_TYPE('TSUB', TSUB) +DEFINE_MAP_OBJECT_TYPE('TWGS', TWGS) +DEFINE_MAP_OBJECT_TYPE('TWPG', TWPG) +DEFINE_MAP_OBJECT_TYPE('WDST', WDST) +DEFINE_MAP_OBJECT_TYPE('WHSW', WHSW) +DEFINE_MAP_OBJECT_TYPE('WLM0', WLM0) +DEFINE_MAP_OBJECT_TYPE('WLM1', WLM1) +DEFINE_MAP_OBJECT_TYPE('WLM2', WLM2) +DEFINE_MAP_OBJECT_TYPE('WLM3', WLM3) +DEFINE_MAP_OBJECT_TYPE('WLM4', WLM4) +DEFINE_MAP_OBJECT_TYPE('WLM5', WLM5) +DEFINE_MAP_OBJECT_TYPE('WLM6', WLM6) +DEFINE_MAP_OBJECT_TYPE('WLM7', WLM7) +DEFINE_MAP_OBJECT_TYPE('WLMS', WLMS) +DEFINE_MAP_OBJECT_TYPE('ZDPF', ZDPF) \ No newline at end of file diff --git a/include/Unknown/UnkStruct_027e0cd8.hpp b/include/Unknown/UnkStruct_027e0cd8.hpp index 8fadca21..c4e52d1c 100644 --- a/include/Unknown/UnkStruct_027e0cd8.hpp +++ b/include/Unknown/UnkStruct_027e0cd8.hpp @@ -1,10 +1,68 @@ #pragma once +#include "files.h" #include "nitro/math.h" #include "types.h" class UnkStruct_027e0cd8_0c { public: + /* 00 (vtable) */ + /* 04 */ unk32 *mUnk_04; + /* 08 */ unk32 *mUnk_08; + /* 0c */ unk32 mUnk_0c; + /* 10 */ unk32 *mUnk_10; + /* 14 */ unk32 *mUnk_14; + /* 18 */ unk32 mUnk_18; + /* 1c */ unk32 *mUnk_1c; + /* 20 */ unk32 mUnk_20; + /* 24 */ unk32 *mUnk_24; + /* 28 */ unk32 mUnk_28; + /* 2c */ unk32 *mUnk_2c; + /* 30 */ unk32 mUnk_30; + /* 34 */ unk32 *mUnk_34; + /* 38 */ unk32 mUnk_38; + /* 3c */ unk32 mUnk_3c; + /* 40 */ unk32 mUnk_40; + /* 44 */ unk32 mUnk_44; + /* 48 */ unk32 mUnk_48; + /* 4c */ unk32 mUnk_4c; + /* 50 */ unk32 mUnk_50; + /* 54 */ unk32 mUnk_54; + /* 58 */ unk32 mUnk_58; + /* 5c */ unk32 mUnk_5c; + /* 60 */ unk32 mUnk_60; + /* 64 */ unk32 mUnk_64; + /* 68 */ unk32 mUnk_68; + /* 6c */ unk32 mUnk_6c; + /* 70 */ unk32 *mUnk_70; + /* 74 */ unk32 *mUnk_74; + /* 78 */ unk32 *mUnk_78; + /* 7c */ unk32 mUnk_7c; + /* 80 */ unk32 mUnk_80; + /* 84 */ unk32 mUnk_84; + /* 88 */ unk32 *mUnk_88; + /* 8c */ unk32 *mUnk_8c; + /* 90 */ unk32 mUnk_90; + /* 94 */ unk32 mUnk_94; + /* 98 */ unk32 mUnk_98; + /* 9c */ unk32 mUnk_9c; + /* a0 */ unk32 mUnk_a0; + /* a4 */ unk32 mUnk_a4; + /* a8 */ unk32 mUnk_a8; + /* ac */ unk32 mUnk_ac; + /* b0 */ unk32 mUnk_b0; + /* b4 */ ZeldaObjectList *mUnk_b4; + /* b8 */ ZeldaObjectList *mUnk_b8; + /* bc */ ZeldaObjectList *mUnk_bc; + /* c0 */ ZeldaObjectList *mUnk_c0; + /* c4 */ ZeldaObjectList *mUnk_c4; + /* c8 */ ZeldaObjectList *mUnk_c8; + /* cc */ ZeldaObjectList *mUnk_cc; + /* d0 */ ZeldaObjectList *mUnk_d0; + /* d4 */ ZeldaObjectList *mUnk_d4; + /* d8 */ ZeldaObjectList *mUnk_d8; + /* dc */ ZeldaObjectList *mUnk_dc[8]; + /* 00 */ virtual void vfunc_00(); /* 04 */ virtual void vfunc_04(); /* 08 */ virtual void vfunc_08(); @@ -24,7 +82,7 @@ class UnkStruct_027e0cd8_0c { class UnkStruct_027e0cd8 { public: /* 00 */ unk32 mUnk_00; - /* 04 */ unk32 mUnk_04; + /* 04 */ unk32 *mUnk_04; /* 08 */ unk32 mUnk_08; /* 0c */ UnkStruct_027e0cd8_0c *mUnk_0c; /* 10 */ diff --git a/include/Unknown/UnkStruct_027e0cf4.hpp b/include/Unknown/UnkStruct_027e0cf4.hpp new file mode 100644 index 00000000..e0878d0b --- /dev/null +++ b/include/Unknown/UnkStruct_027e0cf4.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include "System/SysNew.hpp" +#include "types.h" + +class UnkStruct_027e0cf4 : public SysObject { +public: + ~UnkStruct_027e0cf4(); +}; + +// gBattleGame? +extern UnkStruct_027e0cf4 *data_027e0cf4; diff --git a/include/Unknown/UnkStruct_027e0d70.hpp b/include/Unknown/UnkStruct_027e0d70.hpp new file mode 100644 index 00000000..5a1254e0 --- /dev/null +++ b/include/Unknown/UnkStruct_027e0d70.hpp @@ -0,0 +1,11 @@ +#pragma once + +#include "System/SysNew.hpp" +#include "types.h" + +class UnkStruct_027e0d70 : public SysObject { +public: + ~UnkStruct_027e0d70(); +}; + +extern UnkStruct_027e0d70 *data_027e0d70; diff --git a/include/files.h b/include/files.h new file mode 100644 index 00000000..cfc6d368 --- /dev/null +++ b/include/files.h @@ -0,0 +1,19 @@ +#pragma once + +#include "Map/MapObjectId.hpp" +#include "types.h" + +enum FileType { + FileType_ZOB = 'BLOZ', +}; + +// .zob +typedef struct ZeldaObjectList { + /* 00 */ FileType type; // always "ZOLB" + /* 04 */ unk32 nSize; // file size? + /* 08 */ unk16 unk_08; + /* 0a */ unk16 unk_0a; + /* 0c */ u16 nEntries; // number of entries + /* 0e */ unk16 unk_0e; + /* 10 */ u32 aIdList[]; // actor id or map object id +} ZeldaObjectList; diff --git a/src/001_SceneInit/Actor/ActorManager_001.cpp b/src/001_SceneInit/Actor/ActorManager_001.cpp index b74c71ec..64b2902c 100644 --- a/src/001_SceneInit/Actor/ActorManager_001.cpp +++ b/src/001_SceneInit/Actor/ActorManager_001.cpp @@ -1,6 +1,10 @@ #include "Actor/ActorManager.hpp" +#include "Unknown/UnkStruct_027e0cf4.hpp" +#include "Unknown/UnkStruct_027e0d70.hpp" #include "global.h" +extern "C" void func_ov000_020977e4(); + THUMB void ActorManager::Create() {} THUMB ActorManager::ActorManager() {} THUMB ActorManager::~ActorManager() {} @@ -12,9 +16,49 @@ THUMB void ActorManager::func_ov001_020bb548() {} THUMB void ActorManager::func_ov001_020bb630() {} THUMB void ActorManager::func_ov001_020bb6b0(s32 *param1) {} THUMB bool ActorManager::func_ov001_020bb728(s32 param1) {} -THUMB void ActorManager::func_ov001_020bb7b0(s32 param1) {} -THUMB void ActorManager::func_ov001_020bb7f0() {} -THUMB void ActorManager::func_ov001_020bb824() {} -THUMB void ActorManager::func_ov001_020bb844() {} -THUMB void ActorManager::SetInstance(ActorManager *instance) {} -THUMB void ActorManager::ClearInstance() {} + +THUMB void ActorManager::func_ov001_020bb7b0(ZeldaObjectList *pObjList) { + for (s32 i = 0; i < pObjList->nEntries; i++) { + u32 id = pObjList->aIdList[i]; + ActorType *pActorType = data_ov000_020b539c.func_ov000_020974dc(id); + + if (!this->func_ov001_020bb728(id) && pActorType != NULL) { + pActorType->vfunc_08(); + } + } +} + +THUMB void ActorManager::func_ov001_020bb7f0() { + unk32 *ptr1 = data_ov000_020b539c.func_ov000_02073dc(); + unk32 *ptr2 = data_ov000_020b539c.func_ov000_02073e8(); + + while (ptr1 != ptr2) { + if (*ptr1 != 0) { + func_ov000_020977e4(); + } + + ptr1++; + ptr2 = data_ov000_020b539c.func_ov000_02073e8(); + } +} + +THUMB void ActorManager::func_ov001_020bb824() { + if (data_027e0cf4 != NULL) { + delete data_027e0cf4; + } +} + +THUMB void ActorManager::func_ov001_020bb844() { + if (data_027e0d70 != NULL) { + delete data_027e0d70; + } +} + +THUMB void ActorManager::SetInstance(ActorManager *instance) { + gActorManager = instance; +} + +// non-matching (regalloc) +THUMB void ActorManager::ClearInstance() { + gActorManager = NULL; +} From 0887caa71a3b966295db5621eb711ce5aa5ff48b Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Mon, 25 Aug 2025 16:52:19 +0200 Subject: [PATCH 2/8] create, ctor, dtor --- include/Actor/ActorManager.hpp | 19 ++++++++--- src/001_SceneInit/Actor/ActorManager_001.cpp | 34 ++++++++++++++++++-- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/include/Actor/ActorManager.hpp b/include/Actor/ActorManager.hpp index 57579a63..38214b81 100644 --- a/include/Actor/ActorManager.hpp +++ b/include/Actor/ActorManager.hpp @@ -1,25 +1,34 @@ #pragma once #include "Actor/ActorUnk_ov000_020a8bb0.hpp" +#include "System/SysNew.hpp" #include "files.h" #include "types.h" -class ActorManager { +class ActorManager : public SysObject { public: /* 00 */ Actor **mActorTable; /* 04 */ Actor **mActorTableEnd; /* 08 */ Actor **mUnk_08; /* 0c */ unk16 mActorCount; /* 0e */ unk16 mNextActorId; - /* 10 */ unk8 mUnk_10[0x14 - 0x10]; + /* 10 */ unk8 mUnk_10; + /* 10 */ unk8 mUnk_11; + /* 10 */ unk8 mUnk_12; + /* 10 */ unk8 mUnk_13; /* 14 */ unk32 mUnk_14; /* 18 */ unk32 mUnk_18; - /* 1c */ unk8 mUnk_1c[0x24 - 0x1c]; + /* 1c */ unk32 mUnk_1c; + /* 20 */ unk8 mUnk_20; + /* 21 */ unk8 mUnk_21; + /* 22 */ unk8 mUnk_22; + /* 23 */ unk8 mUnk_23; /* 24 */ unk32 mUnk_24; /* 28 */ unk32 mUnk_28; /* 2c */ unk32 mUnk_2c; /* 30 */ unk16 mUnk_30; - /* 32 */ unk8 mUnk_32[0x34 - 0x32]; + /* 32 */ unk8 mUnk_32; + /* 33 */ unk8 mUnk_33; /* 34 */ unk32 mUnk_34; /* 38 */ @@ -27,7 +36,7 @@ class ActorManager { ~ActorManager(); static void SetInstance(ActorManager *instance); static void ClearInstance(); - static void Create(); + static ActorManager *Create(); static void Destroy(); void func_ov001_020bafdc(); void func_ov001_020bb018(s32 param1); diff --git a/src/001_SceneInit/Actor/ActorManager_001.cpp b/src/001_SceneInit/Actor/ActorManager_001.cpp index 64b2902c..cf0fd1bb 100644 --- a/src/001_SceneInit/Actor/ActorManager_001.cpp +++ b/src/001_SceneInit/Actor/ActorManager_001.cpp @@ -5,9 +5,37 @@ extern "C" void func_ov000_020977e4(); -THUMB void ActorManager::Create() {} -THUMB ActorManager::ActorManager() {} -THUMB ActorManager::~ActorManager() {} +THUMB ActorManager *ActorManager::Create() { + return new(1, 4) ActorManager(); +} + +THUMB ActorManager::ActorManager() { + this->SetInstance(this); + this->mUnk_20 = 0; + this->mUnk_21 = 0; + this->mUnk_22 = 0; + this->mUnk_23 = 0; + this->mUnk_32 = 0; + this->mActorTable = NULL; + this->mActorTableEnd = NULL; + this->mUnk_08 = NULL; + this->mActorCount = 0; + this->mNextActorId = 0; + this->mUnk_10 = 0; + this->mUnk_14 = 0; + this->mUnk_18 = 0; + this->mUnk_24 = 0; + this->mUnk_28 = 0; + this->mUnk_2c = 0; + this->mUnk_30 = 0; + this->mUnk_34 = 0; +} + +// non-matching (D0 not generating?) +THUMB ActorManager::~ActorManager() { + this->ClearInstance(); +} + THUMB void ActorManager::func_ov001_020bafdc() {} THUMB void ActorManager::func_ov001_020bb018(s32 param1) {} THUMB void ActorManager::func_ov001_020bb414() {} From 1d83dd0245e7f2f0e418b653f35a7de01d3dfbd5 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Mon, 25 Aug 2025 18:59:12 +0200 Subject: [PATCH 3/8] prog --- include/Actor/Actor.hpp | 2 +- include/Actor/ActorManager.hpp | 2 +- include/Map/MapObjectTypeTable.inl | 2 +- include/Unknown/UnkStruct_027e09a4.hpp | 2 +- src/001_SceneInit/Actor/ActorManager_001.cpp | 55 +++++++++++++++++++- 5 files changed, 57 insertions(+), 6 deletions(-) diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp index 0ede74ac..6bbf575f 100644 --- a/include/Actor/Actor.hpp +++ b/include/Actor/Actor.hpp @@ -93,7 +93,7 @@ class Actor : public SysObject { /* 50 */ volatile u16 mUnk_50; /* 52 */ u16 mUnk_52; /* 54 */ unk32 mUnk_54; - /* 58 */ ActorFlags mFlags; + /* 58 */ ActorFlags mFlags[1]; /* 5c */ Actor_5c mUnk_5c; /* 6c */ u16 mUnk_6c; // actor user id? /* 6e */ u16 mUnk_6e; diff --git a/include/Actor/ActorManager.hpp b/include/Actor/ActorManager.hpp index 38214b81..cde8a241 100644 --- a/include/Actor/ActorManager.hpp +++ b/include/Actor/ActorManager.hpp @@ -40,7 +40,7 @@ class ActorManager : public SysObject { static void Destroy(); void func_ov001_020bafdc(); void func_ov001_020bb018(s32 param1); - void func_ov001_020bb414(); + static void func_ov001_020bb414(ActorManager *instance); void func_ov001_020bb488(); void func_ov001_020bb548(); void func_ov001_020bb630(); diff --git a/include/Map/MapObjectTypeTable.inl b/include/Map/MapObjectTypeTable.inl index df802697..3ac796dd 100644 --- a/include/Map/MapObjectTypeTable.inl +++ b/include/Map/MapObjectTypeTable.inl @@ -262,4 +262,4 @@ DEFINE_MAP_OBJECT_TYPE('WLM5', WLM5) DEFINE_MAP_OBJECT_TYPE('WLM6', WLM6) DEFINE_MAP_OBJECT_TYPE('WLM7', WLM7) DEFINE_MAP_OBJECT_TYPE('WLMS', WLMS) -DEFINE_MAP_OBJECT_TYPE('ZDPF', ZDPF) \ No newline at end of file +DEFINE_MAP_OBJECT_TYPE('ZDPF', ZDPF) diff --git a/include/Unknown/UnkStruct_027e09a4.hpp b/include/Unknown/UnkStruct_027e09a4.hpp index 01d70ddd..fd7cb8c1 100644 --- a/include/Unknown/UnkStruct_027e09a4.hpp +++ b/include/Unknown/UnkStruct_027e09a4.hpp @@ -4,7 +4,7 @@ class UnkStruct_027e09a4 { public: - /* 00 */ unk32 mUnk_00; + /* 00 */ unk32 mUnk_00; // overlay index? unk8 func_ov000_02070bd0(unk32, unk32); }; diff --git a/src/001_SceneInit/Actor/ActorManager_001.cpp b/src/001_SceneInit/Actor/ActorManager_001.cpp index cf0fd1bb..c540824b 100644 --- a/src/001_SceneInit/Actor/ActorManager_001.cpp +++ b/src/001_SceneInit/Actor/ActorManager_001.cpp @@ -1,9 +1,13 @@ #include "Actor/ActorManager.hpp" +#include "Unknown/UnkStruct_027e09a4.hpp" #include "Unknown/UnkStruct_027e0cf4.hpp" #include "Unknown/UnkStruct_027e0d70.hpp" +#include "flags.h" #include "global.h" extern "C" void func_ov000_020977e4(); +extern "C" void func_ov001_020ba59c(void *); +extern void *data_0204999c; THUMB ActorManager *ActorManager::Create() { return new(1, 4) ActorManager(); @@ -36,9 +40,56 @@ THUMB ActorManager::~ActorManager() { this->ClearInstance(); } -THUMB void ActorManager::func_ov001_020bafdc() {} +THUMB void ActorManager::func_ov001_020bafdc() { + Actor **ppActorTable = this->mActorTable; + + while (ppActorTable != this->mUnk_08) { + Actor *pActor = *ppActorTable; + + if (pActor != NULL) { + // alive and uninitialized? + if (GET_FLAG(pActor->mFlags, ActorFlag_Alive) && !GET_FLAG(pActor->mFlags, ActorFlag_4)) { + pActor->vfunc_1c(); + SET_FLAG(pActor->mFlags, ActorFlag_4); + } + } + + ppActorTable++; + } +} + THUMB void ActorManager::func_ov001_020bb018(s32 param1) {} -THUMB void ActorManager::func_ov001_020bb414() {} + +// non-matching +THUMB void ActorManager::func_ov001_020bb414(ActorManager *instance) { + bool bVar1; + + func_ov001_020ba59c(data_0204999c); + + switch (data_027e09a4->mUnk_00) { + case 0x03: + case 0x12: + case 0x42: + case 0x5A: + case 0x5B: + case 0x5D: + case 0x63: + bVar1 = true; + break; + default: + bVar1 = false; + break; + } + + if (bVar1) { + instance->func_ov001_020bb844(); + } + + delete instance; + instance->mActorTable = NULL; + instance->mActorTableEnd = NULL; +} + THUMB void ActorManager::func_ov001_020bb488() {} THUMB void ActorManager::func_ov001_020bb548() {} THUMB void ActorManager::func_ov001_020bb630() {} From 6e3e7cfca78ad21e735a0dff23c8945ef683a30e Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Mon, 25 Aug 2025 20:18:19 +0200 Subject: [PATCH 4/8] fix build --- include/Actor/Actor.hpp | 69 ++++++++++--------- include/flags.h | 12 ++++ src/000_Second/Actor/Actor.cpp | 18 ++--- .../Actor/ActorUnk_ov000_020a8bb0.cpp | 6 +- src/031_Land/Actor/ActorRupee.cpp | 18 ++--- src/110_PlayerGet/PlayerGet.cpp | 4 +- 6 files changed, 72 insertions(+), 55 deletions(-) diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp index 6bbf575f..6386906d 100644 --- a/include/Actor/Actor.hpp +++ b/include/Actor/Actor.hpp @@ -5,6 +5,7 @@ #include "Actor/ActorType.hpp" #include "Physics/Cylinder.hpp" #include "System/SysNew.hpp" +#include "flags.h" #include "global.h" #include "nitro/math.h" #include "types.h" @@ -35,38 +36,38 @@ class UnkStruct_ov000_020b539c { typedef u32 ActorFlags; enum ActorFlag_ { - ActorFlag_Alive, - ActorFlag_Visible, - ActorFlag_2, - ActorFlag_Active, // stops updating if false - ActorFlag_4, - ActorFlag_5, - ActorFlag_6, - ActorFlag_7, - ActorFlag_Grabbed, - ActorFlag_9, - ActorFlag_Interacting, // set when player interacts with actor - ActorFlag_11, - ActorFlag_12, - ActorFlag_13, - ActorFlag_14, - ActorFlag_15, - ActorFlag_16, - ActorFlag_17, - ActorFlag_18, - ActorFlag_19, - ActorFlag_20, - ActorFlag_21, - ActorFlag_22, - ActorFlag_23, - ActorFlag_24, - ActorFlag_25, - ActorFlag_26, - ActorFlag_27, - ActorFlag_28, - ActorFlag_29, - ActorFlag_30, - ActorFlag_31, + ActorFlag_Alive = FLAG(0, 0), + ActorFlag_Visible = FLAG(0, 1), + ActorFlag_2 = FLAG(0, 2), + ActorFlag_Active = FLAG(0, 3), // stops updating if false + ActorFlag_4 = FLAG(0, 4), + ActorFlag_5 = FLAG(0, 5), + ActorFlag_6 = FLAG(0, 6), + ActorFlag_7 = FLAG(0, 7), + ActorFlag_Grabbed = FLAG(0, 8), + ActorFlag_9 = FLAG(0, 9), + ActorFlag_Interacting = FLAG(0, 10), // set when player interacts with actor + ActorFlag_11 = FLAG(0, 11), + ActorFlag_12 = FLAG(0, 12), + ActorFlag_13 = FLAG(0, 13), + ActorFlag_14 = FLAG(0, 14), + ActorFlag_15 = FLAG(0, 15), + ActorFlag_16 = FLAG(0, 16), + ActorFlag_17 = FLAG(0, 17), + ActorFlag_18 = FLAG(0, 18), + ActorFlag_19 = FLAG(0, 19), + ActorFlag_20 = FLAG(0, 20), + ActorFlag_21 = FLAG(0, 21), + ActorFlag_22 = FLAG(0, 22), + ActorFlag_23 = FLAG(0, 23), + ActorFlag_24 = FLAG(0, 24), + ActorFlag_25 = FLAG(0, 25), + ActorFlag_26 = FLAG(0, 26), + ActorFlag_27 = FLAG(0, 27), + ActorFlag_28 = FLAG(0, 28), + ActorFlag_29 = FLAG(0, 29), + ActorFlag_30 = FLAG(0, 30), + ActorFlag_31 = FLAG(0, 31), }; class Actor : public SysObject { @@ -137,6 +138,10 @@ class Actor : public SysObject { unk32 func_01fff5d0(unk32 param1, unk32 param2); + void ResetFlags() { + *(u32 *) this->mFlags = 0; + } + Actor(); void func_ov000_0209848c(ActorType *param1); void func_ov000_020984b0(); diff --git a/include/flags.h b/include/flags.h index de9a4114..1bb5e197 100644 --- a/include/flags.h +++ b/include/flags.h @@ -14,3 +14,15 @@ #define SET_FLAG(arr, pos) ((arr)[((u32) (pos)) >> 5] |= 1 << ((pos) & 0x1F)) #define UNSET_FLAG(arr, pos) ((arr)[((u32) (pos)) >> 5] &= ~(1 << ((pos) & 0x1F))) #define FLAG(index, pos) (((index) << 5) | ((pos) & 0x1F)) + +//! TODO: improve or remove? idk +#define VA_NARGS_IMPL(_1, _2, _3, _4, N, ...) N +#define VA_NARGS(...) VA_NARGS_IMPL(__VA_ARGS__, 4, 3, 2, 1) +#define GET_FLAGS_1(f1) (1 << (f1)) +#define GET_FLAGS_2(f1, f2) GET_FLAGS_1(f1) | (1 << (f2)) +#define GET_FLAGS_3(f1, f2, f3) GET_FLAGS_2(f1, f2) | (1 << (f3)) +#define GET_FLAGS_4(f1, f2, f3, f4) GET_FLAGS_3(f1, f2, f3) | (1 << (f4)) +#define GET_FLAGS_IMPL2(N, ...) GET_FLAGS_##N(__VA_ARGS__) +#define GET_FLAGS_IMPL(N, ...) GET_FLAGS_IMPL2(N, __VA_ARGS__) +#define GET_FLAGS(...) GET_FLAGS_IMPL(VA_NARGS(__VA_ARGS__), __VA_ARGS__) +#define SET_FLAGS(arr, ...) (*(u32 *) arr = GET_FLAGS_IMPL(VA_NARGS(__VA_ARGS__), __VA_ARGS__)) diff --git a/src/000_Second/Actor/Actor.cpp b/src/000_Second/Actor/Actor.cpp index d2a0a6c0..5e3ee21b 100644 --- a/src/000_Second/Actor/Actor.cpp +++ b/src/000_Second/Actor/Actor.cpp @@ -15,7 +15,7 @@ ARM Actor::Actor() { this->mUnk_50 = 0; this->mUnk_52 = 0; this->mUnk_54 = 0; - this->mFlags = 0; + this->ResetFlags(); this->mUnk_84 = 0; this->mUnk_5c.func_ov000_020975f8(); this->mRef.Reset(); @@ -23,7 +23,7 @@ ARM Actor::Actor() { data_ov000_020b539c.func_02028cdc(&this->mUnk_5c, 0x30); this->mPrevPos = this->mPos = this->mUnk_5c.mUnk_00; this->mAngle = this->mUnk_5c.mUnk_0c; - this->mFlags = (1 << ActorFlag_Alive) | (1 << ActorFlag_Visible) | (1 << ActorFlag_Active) | (1 << ActorFlag_14); + SET_FLAGS(this->mFlags, ActorFlag_Alive, ActorFlag_Visible, ActorFlag_Active, ActorFlag_14); this->mUnk_44 = 0xFF; this->mUnk_46 = 0; this->func_ov000_0209862c(0); @@ -66,9 +66,9 @@ ARM unk32 Actor::vfunc_34() { } ARM void Actor::func_ov000_020984d0() { - UNSET_FLAG(&this->mFlags, ActorFlag_Alive); + UNSET_FLAG(this->mFlags, ActorFlag_Alive); - if (GET_FLAG(&this->mFlags, ActorFlag_16)) { + if (GET_FLAG(this->mFlags, ActorFlag_16)) { this->func_ov000_020984f0(); } } @@ -115,12 +115,12 @@ ARM unk32 Actor::vfunc_38(unk32 param1) { var_r3 = param1 >> 16; - if (GET_FLAG(&this->mFlags, ActorFlag_Grabbed)) { + if (GET_FLAG(this->mFlags, ActorFlag_Grabbed)) { return 0; } - SET_FLAG(&this->mFlags, ActorFlag_Grabbed); - stack_c = this->mFlags; + SET_FLAG(this->mFlags, ActorFlag_Grabbed); + stack_c = this->mFlags[0]; switch (stack_c) { case 0x100: @@ -141,12 +141,12 @@ ARM unk32 Actor::vfunc_38(unk32 param1) { // non-matching ARM bool Actor::vfunc_3c(unk32 param2, Vec3p *param3) { - if (!GET_FLAG(&this->mFlags, ActorFlag_Grabbed)) { + if (!GET_FLAG(this->mFlags, ActorFlag_Grabbed)) { return false; } this->mVel = *param3; - UNSET_FLAG(&this->mFlags, ActorFlag_Grabbed); + UNSET_FLAG(this->mFlags, ActorFlag_Grabbed); return true; } diff --git a/src/000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp b/src/000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp index 659ced0e..9b128de4 100644 --- a/src/000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp +++ b/src/000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp @@ -61,7 +61,7 @@ ARM ActorUnk_ov000_020a8bb0::~ActorUnk_ov000_020a8bb0() {} ARM unk32 ActorUnk_ov000_020a8bb0::vfunc_18(unk32 param1) { if (this->mUnk_70 == 0 && this->func_ov000_020a8dd0() != 0) { - UNSET_FLAG(&this->mFlags, ActorFlag_Alive); + UNSET_FLAG(this->mFlags, ActorFlag_Alive); } if (this->mUnk_0b0 & 8) { @@ -165,7 +165,7 @@ ARM void ActorUnk_ov000_020a8bb0::vfunc_60() { } ARM bool ActorUnk_ov000_020a8bb0::vfunc_64() { - return GET_FLAG(&this->mFlags, ActorFlag_Interacting); + return GET_FLAG(this->mFlags, ActorFlag_Interacting); } ARM void ActorUnk_ov000_020a8bb0::func_ov000_020a8ff4() {} @@ -173,7 +173,7 @@ ARM void ActorUnk_ov000_020a8bb0::func_ov000_020a8ff4() {} ARM void ActorUnk_ov000_020a8bb0::vfunc_6c() {} ARM void ActorUnk_ov000_020a8bb0::vfunc_68() { - UNSET_FLAG(&this->mFlags, ActorFlag_Interacting); + UNSET_FLAG(this->mFlags, ActorFlag_Interacting); this->func_ov000_020a9200(); this->vfunc_ac(); this->mUnk_0b0 &= ~0x01; diff --git a/src/031_Land/Actor/ActorRupee.cpp b/src/031_Land/Actor/ActorRupee.cpp index 0c122e76..20e7ddc7 100644 --- a/src/031_Land/Actor/ActorRupee.cpp +++ b/src/031_Land/Actor/ActorRupee.cpp @@ -111,7 +111,7 @@ ARM void ActorRupee::func_ov031_020e9108() { this->mVel.x = gRandom.Next(-0xCD, 0x19B); this->mVel.y = gRandom.Next(0, 0x19A); this->mVel.z = gRandom.Next(-0xCD, 0x19B); - SET_FLAG(&this->mFlags, ActorFlag_Visible); + SET_FLAG(this->mFlags, ActorFlag_Visible); } ARM void ActorRupee::func_ov031_020e91a8() { @@ -141,7 +141,7 @@ ARM void ActorRupee::func_ov031_020e9234() { this->mVel.x = 0; this->mVel.y = 0; this->mVel.z = 0; - SET_FLAG(&this->mFlags, ActorFlag_Visible); + SET_FLAG(this->mFlags, ActorFlag_Visible); } ARM void ActorRupee::func_ov031_020e9254() { @@ -240,7 +240,7 @@ ARM void ActorRupee::func_ov031_020e9450() { this->mPrevPos = this->mPos; Vec3p_Add(&this->mPos, &this->mVel, &this->mPos); - if (!GET_FLAG(&this->mFlags, ActorFlag_5)) { + if (!GET_FLAG(this->mFlags, ActorFlag_5)) { return; } @@ -260,7 +260,7 @@ ARM void ActorRupee::func_ov031_020e94d4() { this->mUnk_4a = 0; this->mUnk_44 = 0; this->mUnk_9c.func_ov000_02097bec(); - UNSET_FLAG(&this->mFlags, ActorFlag_Visible); + UNSET_FLAG(this->mFlags, ActorFlag_Visible); } ARM void ActorRupee::func_ov031_020e951c() { @@ -334,7 +334,7 @@ ARM void ActorRupee::func_ov031_020e9638() { this->mVel.x = 0; this->mVel.y = 0; this->mVel.z = 0; - UNSET_FLAG(&this->mFlags, ActorFlag_Visible); + UNSET_FLAG(this->mFlags, ActorFlag_Visible); this->mUnk_c4.mUnk_04 = 0; if (this->mUnk_6e == 2) { @@ -364,7 +364,7 @@ ARM void ActorRupee::func_ov031_020e970c() { this->mVel.x = 0; this->mVel.y = 0; this->mVel.z = 0; - SET_FLAG(&this->mFlags, ActorFlag_Visible); + SET_FLAG(this->mFlags, ActorFlag_Visible); this->mUnk_4a = 1; this->mUnk_52 = -1; this->mUnk_50 = 0; @@ -664,7 +664,7 @@ ARM void ActorRupee::func_ov031_020e9d94() { u32 temp_r1; if (this->func_ov031_020e9e5c()) { - SET_FLAG(&this->mFlags, ActorFlag_Visible); + SET_FLAG(this->mFlags, ActorFlag_Visible); return; } @@ -689,9 +689,9 @@ ARM void ActorRupee::func_ov031_020e9d94() { temp_r1 = temp_r0 >> 0x1F; if ((this->mUnk_94 & 7) < 4) { - UNSET_FLAG(&this->mFlags, ActorFlag_Visible); + UNSET_FLAG(this->mFlags, ActorFlag_Visible); } else { - SET_FLAG(&this->mFlags, ActorFlag_Visible); + SET_FLAG(this->mFlags, ActorFlag_Visible); } if (this->mUnk_94 < this->mUnk_96) { diff --git a/src/110_PlayerGet/PlayerGet.cpp b/src/110_PlayerGet/PlayerGet.cpp index acbe57a6..afc3d4a8 100644 --- a/src/110_PlayerGet/PlayerGet.cpp +++ b/src/110_PlayerGet/PlayerGet.cpp @@ -351,12 +351,12 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) { iVar10 = gActorManager->func_01fff3b4(*(u32 *) this->mUnk_54.mUnk_00); - if (iVar10 == 0) { + if (iVar10 == NULL) { return; } if (iVar10->func_01fff458() == ActorId_NormalShield) { - UNSET_FLAG(&(iVar10->mFlags), ActorFlag_Visible); + UNSET_FLAG(iVar10->mFlags, ActorFlag_Visible); iVar10->mUnk_4a = 0; } break; From c94e63efcc7e602cf02cda6a25f753dd4705f1cc Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Tue, 3 Feb 2026 21:03:22 +0100 Subject: [PATCH 5/8] fix build issues --- src/001_SceneInit/Actor/ActorManager_001.cpp | 3 +-- src/031_Land/Actor/ActorRupee.cpp | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/001_SceneInit/Actor/ActorManager_001.cpp b/src/001_SceneInit/Actor/ActorManager_001.cpp index c540824b..7a733d96 100644 --- a/src/001_SceneInit/Actor/ActorManager_001.cpp +++ b/src/001_SceneInit/Actor/ActorManager_001.cpp @@ -7,7 +7,6 @@ extern "C" void func_ov000_020977e4(); extern "C" void func_ov001_020ba59c(void *); -extern void *data_0204999c; THUMB ActorManager *ActorManager::Create() { return new(1, 4) ActorManager(); @@ -64,7 +63,7 @@ THUMB void ActorManager::func_ov001_020bb018(s32 param1) {} THUMB void ActorManager::func_ov001_020bb414(ActorManager *instance) { bool bVar1; - func_ov001_020ba59c(data_0204999c); + func_ov001_020ba59c(&data_0204999c); switch (data_027e09a4->mUnk_00) { case 0x03: diff --git a/src/031_Land/Actor/ActorRupee.cpp b/src/031_Land/Actor/ActorRupee.cpp index 1a6f8524..cde402d5 100644 --- a/src/031_Land/Actor/ActorRupee.cpp +++ b/src/031_Land/Actor/ActorRupee.cpp @@ -79,7 +79,7 @@ ARM bool ActorRupee::vfunc_18(unk32 param1) { if (this->func_ov031_020e9d54()) { this->mUnk_30 = &data_ov031_02113478; this->mUnk_34 = &data_ov031_02113478; - SET_FLAG(&this->mFlags, ActorFlag_12); + SET_FLAG(this->mFlags, ActorFlag_12); } if (this->mUnk_80 >= 0) { @@ -199,7 +199,7 @@ ARM void ActorRupee::func_ov031_020e9108() { this->mVel.y = vel.y + 0x9A + 0x100; this->mVel.z = vel.z - 0xCD; - SET_FLAG(&this->mFlags, ActorFlag_Visible); + SET_FLAG(this->mFlags, ActorFlag_Visible); } ARM void ActorRupee::func_ov031_020e91a8() { From 6fd41cf8e0097d12dcc30ac80b38536a7b51ba96 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Wed, 4 Feb 2026 03:28:12 +0100 Subject: [PATCH 6/8] progress --- config/eur/arm9/itcm/symbols.txt | 2 +- config/eur/arm9/overlays/ov000/symbols.txt | 10 +- config/eur/arm9/overlays/ov001/delinks.txt | 2 + config/eur/arm9/overlays/ov001/relocs.txt | 2 +- config/eur/arm9/overlays/ov001/symbols.txt | 5 +- config/eur/arm9/overlays/ov021/symbols.txt | 4 +- config/eur/arm9/overlays/ov068/symbols.txt | 2 +- config/eur/arm9/overlays/ov071/symbols.txt | 4 +- config/eur/arm9/symbols.txt | 2 +- config/jp/arm9/itcm/symbols.txt | 2 +- config/jp/arm9/overlays/ov000/symbols.txt | 10 +- config/jp/arm9/overlays/ov001/delinks.txt | 2 + config/jp/arm9/overlays/ov001/relocs.txt | 2 +- config/jp/arm9/overlays/ov001/symbols.txt | 5 +- config/jp/arm9/overlays/ov021/symbols.txt | 4 +- config/jp/arm9/overlays/ov068/symbols.txt | 2 +- config/jp/arm9/overlays/ov071/symbols.txt | 4 +- config/jp/arm9/symbols.txt | 2 +- docs/overlays.md | 8 +- include/Actor/Actor.hpp | 4 +- include/Actor/ActorManager.hpp | 32 +- include/Actor/ActorType.hpp | 2 +- include/System/SysNew.hpp | 3 +- include/Unknown/Common.hpp | 29 +- include/Unknown/UnkStruct_027e09a0.hpp | 27 ++ include/Unknown/UnkStruct_027e09a4.hpp | 52 ++- include/Unknown/UnkStruct_027e0cd8.hpp | 114 +++--- include/Unknown/UnkStruct_027e0cf4.hpp | 2 + include/Unknown/UnkStruct_027e0d70.hpp | 3 + include/global.h | 4 + src/001_SceneInit/Actor/ActorManager_001.cpp | 372 ++++++++++++++++--- src/025_Title/TitleScreen.cpp | 16 +- src/Main/System/SysNew.cpp | 2 +- tools/new_class.py | 2 +- 34 files changed, 558 insertions(+), 180 deletions(-) create mode 100644 include/Unknown/UnkStruct_027e09a0.hpp diff --git a/config/eur/arm9/itcm/symbols.txt b/config/eur/arm9/itcm/symbols.txt index 7cbee55f..c07d2517 100644 --- a/config/eur/arm9/itcm/symbols.txt +++ b/config/eur/arm9/itcm/symbols.txt @@ -155,7 +155,7 @@ func_01ffd250 kind:function(arm,size=0x44) addr:0x01ffd250 func_01ffd294 kind:function(arm,size=0x11c) addr:0x01ffd294 func_01ffd3b0 kind:function(arm,size=0x28) addr:0x01ffd3b0 func_01ffd3d8 kind:function(arm,size=0x28) addr:0x01ffd3d8 -func_01ffd400 kind:function(arm,size=0x20) addr:0x01ffd400 +_ZN18UnkStruct_027e09a413func_01ffd400Ev kind:function(arm,size=0x20) addr:0x01ffd400 _ZN18UnkStruct_027e09b813func_01ffd420Ev kind:function(arm,size=0x1c) addr:0x01ffd420 func_01ffd43c kind:function(arm,size=0x60) addr:0x01ffd43c func_01ffd49c kind:function(arm,size=0x1a4) addr:0x01ffd49c diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 9008368c..36f43b68 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -189,9 +189,9 @@ func_ov000_02059168 kind:function(arm,size=0x28) addr:0x02059168 func_ov000_02059190 kind:function(arm,size=0x3c) addr:0x02059190 _ZN29UnkStruct_ov000_020b4ec4_BaseC2Ev kind:function(arm,size=0x20) addr:0x020591cc _ZN26UnkStruct_StackTitleScreenC1EPKci kind:function(arm,size=0x54) addr:0x020591ec -_ZN26UnkStruct_StackTitleScreen19func_ov000_02059240Ev kind:function(arm,size=0x30) addr:0x02059240 +_ZN26UnkStruct_StackTitleScreenD1Ev kind:function(arm,size=0x30) addr:0x02059240 _ZN26UnkStruct_StackTitleScreen19func_ov000_02059270EiPci kind:function(arm,size=0x18) addr:0x02059270 -func_ov000_02059288 kind:function(arm,size=0x18) addr:0x02059288 +_ZN26UnkStruct_StackTitleScreen19func_ov000_02059288EiPci kind:function(arm,size=0x18) addr:0x02059288 func_ov000_020592a0 kind:function(thumb,size=0x4c) addr:0x020592a0 func_ov000_020592ec kind:function(thumb,size=0x70) addr:0x020592ec func_ov000_0205935c kind:function(thumb,size=0xc) addr:0x0205935c @@ -986,7 +986,7 @@ func_ov000_02070134 kind:function(arm,size=0x14) addr:0x02070134 func_ov000_02070148 kind:function(arm,size=0x1c) addr:0x02070148 func_ov000_02070164 kind:function(arm,size=0xfc) addr:0x02070164 func_ov000_02070260 kind:function(arm,size=0x3c) addr:0x02070260 -func_ov000_0207029c kind:function(arm,size=0xc) addr:0x0207029c +_ZN18UnkStruct_027e09a019func_ov000_0207029cEi kind:function(arm,size=0xc) addr:0x0207029c func_ov000_020702a8 kind:function(arm,size=0x14) addr:0x020702a8 func_ov000_020702bc kind:function(arm,size=0x40) addr:0x020702bc func_ov000_020702fc kind:function(arm,size=0x14) addr:0x020702fc @@ -1000,7 +1000,7 @@ _ZN18UnkStruct_027e09a4D1Ev kind:function(arm,size=0x44) addr:0x020704f4 func_ov000_02070538 kind:function(arm,size=0xc) addr:0x02070538 func_ov000_02070544 kind:function(arm,size=0x10) addr:0x02070544 func_ov000_02070554 kind:function(arm,size=0xc) addr:0x02070554 -func_ov000_02070560 kind:function(arm,size=0xc) addr:0x02070560 +_ZN18UnkStruct_027e09a419func_ov000_02070560Ev kind:function(arm,size=0xc) addr:0x02070560 func_ov000_0207056c kind:function(arm,size=0x14) addr:0x0207056c func_ov000_02070580 kind:function(arm,size=0x1c) addr:0x02070580 func_ov000_0207059c kind:function(arm,size=0x4c) addr:0x0207059c @@ -2244,7 +2244,7 @@ func_ov000_02096cc8 kind:function(arm,size=0x24) addr:0x02096cc8 func_ov000_02096cec kind:function(arm,size=0x14) addr:0x02096cec func_ov000_02096d00 kind:function(arm,size=0x68) addr:0x02096d00 func_ov000_02096d68 kind:function(arm,size=0xdc) addr:0x02096d68 -func_ov000_02096e44 kind:function(arm,size=0x6c) addr:0x02096e44 +_ZN12ActorManager19func_ov000_02096e44Ei kind:function(arm,size=0x6c) addr:0x02096e44 func_ov000_02096eb0 kind:function(arm,size=0x38) addr:0x02096eb0 func_ov000_02096ee8 kind:function(arm,size=0x164) addr:0x02096ee8 func_ov000_0209704c kind:function(arm,size=0x7c) addr:0x0209704c diff --git a/config/eur/arm9/overlays/ov001/delinks.txt b/config/eur/arm9/overlays/ov001/delinks.txt index 690f78b2..725b860b 100644 --- a/config/eur/arm9/overlays/ov001/delinks.txt +++ b/config/eur/arm9/overlays/ov001/delinks.txt @@ -7,3 +7,5 @@ src/001_SceneInit/Actor/ActorManager_001.cpp: .text start:0x020baf64 end:0x020bb87c + .rodata start:0x020c2624 end:0x020c264c + .data start:0x020c2b3c end:0x020c2c70 diff --git a/config/eur/arm9/overlays/ov001/relocs.txt b/config/eur/arm9/overlays/ov001/relocs.txt index 40bb3015..476382d7 100644 --- a/config/eur/arm9/overlays/ov001/relocs.txt +++ b/config/eur/arm9/overlays/ov001/relocs.txt @@ -2349,7 +2349,7 @@ from:0x020c1524 kind:load to:0x020c3508 module:overlay(1) from:0x020c1590 kind:load to:0x020c4701 module:overlay(1) from:0x020c159c kind:load to:0x020c2550 module:overlay(1) from:0x020c1608 kind:load to:0x020c4701 module:overlay(1) -from:0x020c1614 kind:load to:0x020c2628 module:overlay(1) +from:0x020c1614 kind:load to:0x020c2624 add:4 module:overlay(1) from:0x020c1680 kind:load to:0x020c4701 module:overlay(1) from:0x020c168c kind:load to:0x020c273c module:overlay(1) from:0x020c16f8 kind:load to:0x020c4701 module:overlay(1) diff --git a/config/eur/arm9/overlays/ov001/symbols.txt b/config/eur/arm9/overlays/ov001/symbols.txt index 88dd961e..bd896a74 100644 --- a/config/eur/arm9/overlays/ov001/symbols.txt +++ b/config/eur/arm9/overlays/ov001/symbols.txt @@ -177,8 +177,8 @@ _ZN12ActorManager6CreateEv kind:function(thumb,size=0x16) addr:0x020baf64 _ZN12ActorManagerC1Ev kind:function(thumb,size=0x46) addr:0x020baf7c _ZN12ActorManagerD1Ev kind:function(thumb,size=0x18) addr:0x020bafc4 _ZN12ActorManager19func_ov001_020bafdcEv kind:function(thumb,size=0x3c) addr:0x020bafdc -_ZN12ActorManager19func_ov001_020bb018Ei kind:function(thumb,size=0x3fc) addr:0x020bb018 -_ZN12ActorManager19func_ov001_020bb414Ev kind:function(thumb,size=0x74) addr:0x020bb414 +_ZN12ActorManager19func_ov001_020bb018EP36UnkStruct_func_ov001_020bb018_param2 kind:function(thumb,size=0x3fc) addr:0x020bb018 +_ZN12ActorManager19func_ov001_020bb414EPS_ kind:function(thumb,size=0x74) addr:0x020bb414 _ZN12ActorManager19func_ov001_020bb488Ev kind:function(thumb,size=0xc0) addr:0x020bb488 _ZN12ActorManager19func_ov001_020bb548Ev kind:function(thumb,size=0xe8) addr:0x020bb548 _ZN12ActorManager19func_ov001_020bb630Ev kind:function(thumb,size=0x80) addr:0x020bb630 @@ -473,7 +473,6 @@ data_ov001_020c25c0 kind:data(any) addr:0x020c25c0 data_ov001_020c25d4 kind:data(any) addr:0x020c25d4 data_ov001_020c25fc kind:data(any) addr:0x020c25fc data_ov001_020c2624 kind:data(any) addr:0x020c2624 -data_ov001_020c2628 kind:data(any) addr:0x020c2628 data_ov001_020c262e kind:data(any) addr:0x020c262e data_ov001_020c2638 kind:data(any) addr:0x020c2638 data_ov001_020c264c kind:data(any) addr:0x020c264c diff --git a/config/eur/arm9/overlays/ov021/symbols.txt b/config/eur/arm9/overlays/ov021/symbols.txt index 7e8e6d4a..5ce46dd4 100644 --- a/config/eur/arm9/overlays/ov021/symbols.txt +++ b/config/eur/arm9/overlays/ov021/symbols.txt @@ -444,8 +444,8 @@ func_ov021_020f87b4 kind:function(arm,size=0x64) addr:0x020f87b4 func_ov021_020f8818 kind:function(arm,size=0x28) addr:0x020f8818 func_ov021_020f8840 kind:function(arm,size=0x458) addr:0x020f8840 _ZN18UnkStruct_027e0cf4D1Ev kind:function(arm,size=0x44) addr:0x020f8c98 -func_ov021_020f8cdc kind:function(arm,size=0x44) addr:0x020f8cdc -func_ov021_020f8d20 kind:function(arm,size=0x48) addr:0x020f8d20 +_ZN18UnkStruct_027e0cf419func_ov021_020f8cdcEv kind:function(arm,size=0x44) addr:0x020f8cdc +_ZN18UnkStruct_027e0cf419func_ov021_020f8d20Ev kind:function(arm,size=0x48) addr:0x020f8d20 func_ov021_020f8d68 kind:function(arm,size=0x334) addr:0x020f8d68 func_ov021_020f909c kind:function(arm,size=0x48) addr:0x020f909c func_ov021_020f90e4 kind:function(arm,size=0x150) addr:0x020f90e4 diff --git a/config/eur/arm9/overlays/ov068/symbols.txt b/config/eur/arm9/overlays/ov068/symbols.txt index 75c6cb33..b816f3e7 100644 --- a/config/eur/arm9/overlays/ov068/symbols.txt +++ b/config/eur/arm9/overlays/ov068/symbols.txt @@ -253,7 +253,7 @@ func_ov068_0215e7e4 kind:function(arm,size=0xb0) addr:0x0215e7e4 func_ov068_0215e894 kind:function(arm,size=0xc) addr:0x0215e894 func_ov068_0215e8a0 kind:function(arm,size=0x28) addr:0x0215e8a0 func_ov068_0215e8c8 kind:function(arm,size=0x30) addr:0x0215e8c8 -func_ov068_0215e8f8 kind:function(arm,size=0x14) addr:0x0215e8f8 +_ZN18UnkStruct_027e0d7019func_ov068_0215e8f8Ev kind:function(arm,size=0x14) addr:0x0215e8f8 func_ov068_0215e90c kind:function(arm,size=0xc) addr:0x0215e90c func_ov068_0215e918 kind:function(arm,size=0x28) addr:0x0215e918 func_ov068_0215e940 kind:function(arm,size=0x54) addr:0x0215e940 diff --git a/config/eur/arm9/overlays/ov071/symbols.txt b/config/eur/arm9/overlays/ov071/symbols.txt index 932f9c08..0af41d8e 100644 --- a/config/eur/arm9/overlays/ov071/symbols.txt +++ b/config/eur/arm9/overlays/ov071/symbols.txt @@ -265,10 +265,10 @@ func_ov071_0215e7fc kind:function(arm,size=0xd8) addr:0x0215e7fc func_ov071_0215e8d4 kind:function(arm,size=0x24) addr:0x0215e8d4 func_ov071_0215e8f8 kind:function(arm,size=0x70) addr:0x0215e8f8 func_ov071_0215e968 kind:function(arm,size=0x44) addr:0x0215e968 -func_ov071_0215e9ac kind:function(arm,size=0x68) addr:0x0215e9ac +_ZN18UnkStruct_027e0d7019func_ov071_0215e9acEv kind:function(arm,size=0x68) addr:0x0215e9ac func_ov071_0215ea14 kind:function(arm,size=0x7c) addr:0x0215ea14 func_ov071_0215ea90 kind:function(arm,size=0x38) addr:0x0215ea90 -func_ov071_0215eac8 kind:function(arm,size=0x50) addr:0x0215eac8 +_ZN18UnkStruct_027e0d7019func_ov071_0215eac8Ev kind:function(arm,size=0x50) addr:0x0215eac8 func_ov071_0215eb18 kind:function(arm,size=0xc) addr:0x0215eb18 func_ov071_0215eb24 kind:function(arm,size=0x27c) addr:0x0215eb24 func_ov071_0215eda0 kind:function(arm,size=0x50) addr:0x0215eda0 diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt index 29453d87..a51c72ab 100644 --- a/config/eur/arm9/symbols.txt +++ b/config/eur/arm9/symbols.txt @@ -606,7 +606,7 @@ _Z9SysDeletePv kind:function(arm,size=0x6c) addr:0x02011ea4 _Z13func_02011f10i kind:function(arm,size=0x20) addr:0x02011f10 _Z13func_02011f30i kind:function(arm,size=0xc) addr:0x02011f30 _Znwmjj kind:function(arm,size=0xb8) addr:0x02011f3c -_ZN9SysObjectdlEPv kind:function(arm,size=0xc) addr:0x02011ff4 +_ZdlPv kind:function(arm,size=0xc) addr:0x02011ff4 _ZN9SysObjectdaEPv kind:function(arm,size=0xc) addr:0x02012000 func_0201200c kind:function(arm,size=0x15c) addr:0x0201200c func_02012168 kind:function(arm,size=0x198) addr:0x02012168 diff --git a/config/jp/arm9/itcm/symbols.txt b/config/jp/arm9/itcm/symbols.txt index 7cbee55f..c07d2517 100644 --- a/config/jp/arm9/itcm/symbols.txt +++ b/config/jp/arm9/itcm/symbols.txt @@ -155,7 +155,7 @@ func_01ffd250 kind:function(arm,size=0x44) addr:0x01ffd250 func_01ffd294 kind:function(arm,size=0x11c) addr:0x01ffd294 func_01ffd3b0 kind:function(arm,size=0x28) addr:0x01ffd3b0 func_01ffd3d8 kind:function(arm,size=0x28) addr:0x01ffd3d8 -func_01ffd400 kind:function(arm,size=0x20) addr:0x01ffd400 +_ZN18UnkStruct_027e09a413func_01ffd400Ev kind:function(arm,size=0x20) addr:0x01ffd400 _ZN18UnkStruct_027e09b813func_01ffd420Ev kind:function(arm,size=0x1c) addr:0x01ffd420 func_01ffd43c kind:function(arm,size=0x60) addr:0x01ffd43c func_01ffd49c kind:function(arm,size=0x1a4) addr:0x01ffd49c diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index 66e3824a..f4b4a9cb 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -189,9 +189,9 @@ func_ov000_0205a6e8 kind:function(arm,size=0x28) addr:0x0205a6e8 func_ov000_0205a710 kind:function(arm,size=0x3c) addr:0x0205a710 _ZN29UnkStruct_ov000_020b4ec4_BaseC2Ev kind:function(arm,size=0x20) addr:0x0205a74c _ZN26UnkStruct_StackTitleScreenC1EPKci kind:function(arm,size=0x54) addr:0x0205a76c -_ZN26UnkStruct_StackTitleScreen19func_ov000_02059240Ev kind:function(arm,size=0x30) addr:0x0205a7c0 +_ZN26UnkStruct_StackTitleScreenD1Ev kind:function(arm,size=0x30) addr:0x0205a7c0 _ZN26UnkStruct_StackTitleScreen19func_ov000_02059270EiPci kind:function(arm,size=0x18) addr:0x0205a7f0 -func_ov000_0205a808 kind:function(arm,size=0x18) addr:0x0205a808 +_ZN26UnkStruct_StackTitleScreen19func_ov000_02059288EiPci kind:function(arm,size=0x18) addr:0x0205a808 func_ov000_0205a820 kind:function(thumb,size=0x46) addr:0x0205a820 func_ov000_0205a868 kind:function(thumb,size=0x7c) addr:0x0205a868 func_ov000_0205a8e4 kind:function(thumb,size=0xc) addr:0x0205a8e4 @@ -987,7 +987,7 @@ func_ov000_020717ec kind:function(arm,size=0x14) addr:0x020717ec func_ov000_02071800 kind:function(arm,size=0x1c) addr:0x02071800 func_ov000_02070164 kind:function(arm,size=0xfc) addr:0x0207181c func_ov000_02071918 kind:function(arm,size=0x3c) addr:0x02071918 -func_ov000_02071954 kind:function(arm,size=0xc) addr:0x02071954 +_ZN18UnkStruct_027e09a019func_ov000_0207029cEi kind:function(arm,size=0xc) addr:0x02071954 func_ov000_02071960 kind:function(arm,size=0x14) addr:0x02071960 func_ov000_02071974 kind:function(arm,size=0x40) addr:0x02071974 func_ov000_020719b4 kind:function(arm,size=0x14) addr:0x020719b4 @@ -1001,7 +1001,7 @@ _ZN18UnkStruct_027e09a4D1Ev kind:function(arm,size=0x44) addr:0x02071bac func_ov000_02071bf0 kind:function(arm,size=0xc) addr:0x02071bf0 func_ov000_02071bfc kind:function(arm,size=0x10) addr:0x02071bfc func_ov000_02071c0c kind:function(arm,size=0xc) addr:0x02071c0c -func_ov000_02071c18 kind:function(arm,size=0xc) addr:0x02071c18 +_ZN18UnkStruct_027e09a419func_ov000_02070560Ev kind:function(arm,size=0xc) addr:0x02071c18 func_ov000_02071c24 kind:function(arm,size=0x14) addr:0x02071c24 func_ov000_02071c38 kind:function(arm,size=0x1c) addr:0x02071c38 func_ov000_02071c54 kind:function(arm,size=0x4c) addr:0x02071c54 @@ -2242,7 +2242,7 @@ func_ov000_0209847c kind:function(arm,size=0x24) addr:0x0209847c func_ov000_020984a0 kind:function(arm,size=0x14) addr:0x020984a0 func_ov000_020984b4 kind:function(arm,size=0x68) addr:0x020984b4 func_ov000_0209851c kind:function(arm,size=0xdc) addr:0x0209851c -func_ov000_020985f8 kind:function(arm,size=0x6c) addr:0x020985f8 +_ZN12ActorManager19func_ov000_02096e44Ei kind:function(arm,size=0x6c) addr:0x020985f8 func_ov000_02098664 kind:function(arm,size=0x38) addr:0x02098664 func_ov000_0209869c kind:function(arm,size=0x164) addr:0x0209869c func_ov000_02098800 kind:function(arm,size=0x7c) addr:0x02098800 diff --git a/config/jp/arm9/overlays/ov001/delinks.txt b/config/jp/arm9/overlays/ov001/delinks.txt index ed52e679..ce92dac1 100644 --- a/config/jp/arm9/overlays/ov001/delinks.txt +++ b/config/jp/arm9/overlays/ov001/delinks.txt @@ -7,3 +7,5 @@ src/001_SceneInit/Actor/ActorManager_001.cpp: .text start:0x020bc7ac end:0x020bd0c4 + .rodata start:0x020c3e78 end:0x020c3ea0 + .data start:0x020c437c end:0x020c44b0 diff --git a/config/jp/arm9/overlays/ov001/relocs.txt b/config/jp/arm9/overlays/ov001/relocs.txt index 8ce90f3b..bf7c0223 100644 --- a/config/jp/arm9/overlays/ov001/relocs.txt +++ b/config/jp/arm9/overlays/ov001/relocs.txt @@ -2352,7 +2352,7 @@ from:0x020c2d78 kind:load to:0x020c4d5c module:overlay(1) from:0x020c2de4 kind:load to:0x020c5f41 module:overlay(1) from:0x020c2df0 kind:load to:0x020c3da4 module:overlay(1) from:0x020c2e5c kind:load to:0x020c5f41 module:overlay(1) -from:0x020c2e68 kind:load to:0x020c3e7c module:overlay(1) +from:0x020c2e68 kind:load to:0x020c3e78 add:4 module:overlay(1) from:0x020c2ed4 kind:load to:0x020c5f41 module:overlay(1) from:0x020c2ee0 kind:load to:0x020c3f90 module:overlay(1) from:0x020c2f4c kind:load to:0x020c5f41 module:overlay(1) diff --git a/config/jp/arm9/overlays/ov001/symbols.txt b/config/jp/arm9/overlays/ov001/symbols.txt index f838e3b9..c17fa51f 100644 --- a/config/jp/arm9/overlays/ov001/symbols.txt +++ b/config/jp/arm9/overlays/ov001/symbols.txt @@ -177,8 +177,8 @@ _ZN12ActorManager6CreateEv kind:function(thumb,size=0x16) addr:0x020bc7ac _ZN12ActorManagerC1Ev kind:function(thumb,size=0x46) addr:0x020bc7c4 _ZN12ActorManagerD1Ev kind:function(thumb,size=0x18) addr:0x020bc80c _ZN12ActorManager19func_ov001_020bafdcEv kind:function(thumb,size=0x3c) addr:0x020bc824 -_ZN12ActorManager19func_ov001_020bb018Ei kind:function(thumb,size=0x3fc) addr:0x020bc860 -_ZN12ActorManager19func_ov001_020bb414Ev kind:function(thumb,size=0x74) addr:0x020bcc5c +_ZN12ActorManager19func_ov001_020bb018EP36UnkStruct_func_ov001_020bb018_param2 kind:function(thumb,size=0x3fc) addr:0x020bc860 +_ZN12ActorManager19func_ov001_020bb414EPS_ kind:function(thumb,size=0x74) addr:0x020bcc5c _ZN12ActorManager19func_ov001_020bb488Ev kind:function(thumb,size=0xc0) addr:0x020bccd0 _ZN12ActorManager19func_ov001_020bb548Ev kind:function(thumb,size=0xe8) addr:0x020bcd90 _ZN12ActorManager19func_ov001_020bb630Ev kind:function(thumb,size=0x80) addr:0x020bce78 @@ -472,7 +472,6 @@ data_ov001_020c3e14 kind:data(any) addr:0x020c3e14 data_ov001_020c3e28 kind:data(any) addr:0x020c3e28 data_ov001_020c3e50 kind:data(any) addr:0x020c3e50 data_ov001_020c3e78 kind:data(any) addr:0x020c3e78 -data_ov001_020c3e7c kind:data(any) addr:0x020c3e7c data_ov001_020c3e82 kind:data(any) addr:0x020c3e82 data_ov001_020c3e8c kind:data(any) addr:0x020c3e8c data_ov001_020c3ea0 kind:data(any) addr:0x020c3ea0 diff --git a/config/jp/arm9/overlays/ov021/symbols.txt b/config/jp/arm9/overlays/ov021/symbols.txt index e8a226ba..df9dd81b 100644 --- a/config/jp/arm9/overlays/ov021/symbols.txt +++ b/config/jp/arm9/overlays/ov021/symbols.txt @@ -444,8 +444,8 @@ func_ov021_020fa14c kind:function(arm,size=0x64) addr:0x020fa14c func_ov021_020fa1b0 kind:function(arm,size=0x28) addr:0x020fa1b0 func_ov021_020fa1d8 kind:function(arm,size=0x458) addr:0x020fa1d8 _ZN18UnkStruct_027e0cf4D1Ev kind:function(arm,size=0x44) addr:0x020fa630 -func_ov021_020fa674 kind:function(arm,size=0x44) addr:0x020fa674 -func_ov021_020fa6b8 kind:function(arm,size=0x48) addr:0x020fa6b8 +_ZN18UnkStruct_027e0cf419func_ov021_020f8cdcEv kind:function(arm,size=0x44) addr:0x020fa674 +_ZN18UnkStruct_027e0cf419func_ov021_020f8d20Ev kind:function(arm,size=0x48) addr:0x020fa6b8 func_ov021_020fa700 kind:function(arm,size=0x334) addr:0x020fa700 func_ov021_020faa34 kind:function(arm,size=0x48) addr:0x020faa34 func_ov021_020faa7c kind:function(arm,size=0x150) addr:0x020faa7c diff --git a/config/jp/arm9/overlays/ov068/symbols.txt b/config/jp/arm9/overlays/ov068/symbols.txt index 44768358..9938fe7a 100644 --- a/config/jp/arm9/overlays/ov068/symbols.txt +++ b/config/jp/arm9/overlays/ov068/symbols.txt @@ -257,7 +257,7 @@ func_ov068_02160848 kind:function(arm,size=0xb0) addr:0x02160848 func_ov068_021608f8 kind:function(arm,size=0xc) addr:0x021608f8 func_ov068_02160904 kind:function(arm,size=0x28) addr:0x02160904 func_ov068_0216092c kind:function(arm,size=0x30) addr:0x0216092c -func_ov068_0216095c kind:function(arm,size=0x14) addr:0x0216095c +_ZN18UnkStruct_027e0d7019func_ov068_0215e8f8Ev kind:function(arm,size=0x14) addr:0x0216095c func_ov068_02160970 kind:function(arm,size=0xc) addr:0x02160970 func_ov068_0216097c kind:function(arm,size=0x28) addr:0x0216097c func_ov068_021609a4 kind:function(arm,size=0x54) addr:0x021609a4 diff --git a/config/jp/arm9/overlays/ov071/symbols.txt b/config/jp/arm9/overlays/ov071/symbols.txt index 91cbce8e..177cb17f 100644 --- a/config/jp/arm9/overlays/ov071/symbols.txt +++ b/config/jp/arm9/overlays/ov071/symbols.txt @@ -266,10 +266,10 @@ func_ov071_021609e8 kind:function(arm,size=0xd8) addr:0x021609e8 func_ov071_02160ac0 kind:function(arm,size=0x24) addr:0x02160ac0 func_ov071_02160ae4 kind:function(arm,size=0x70) addr:0x02160ae4 func_ov071_02160b54 kind:function(arm,size=0x44) addr:0x02160b54 -func_ov071_02160b98 kind:function(arm,size=0x68) addr:0x02160b98 +_ZN18UnkStruct_027e0d7019func_ov071_0215e9acEv kind:function(arm,size=0x68) addr:0x02160b98 func_ov071_02160c00 kind:function(arm,size=0x7c) addr:0x02160c00 func_ov071_02160c7c kind:function(arm,size=0x38) addr:0x02160c7c -func_ov071_02160cb4 kind:function(arm,size=0x50) addr:0x02160cb4 +_ZN18UnkStruct_027e0d7019func_ov071_0215eac8Ev kind:function(arm,size=0x50) addr:0x02160cb4 func_ov071_02160d04 kind:function(arm,size=0xc) addr:0x02160d04 func_ov071_02160d10 kind:function(arm,size=0x27c) addr:0x02160d10 func_ov071_02160f8c kind:function(arm,size=0x50) addr:0x02160f8c diff --git a/config/jp/arm9/symbols.txt b/config/jp/arm9/symbols.txt index e2f76882..e8ed245a 100644 --- a/config/jp/arm9/symbols.txt +++ b/config/jp/arm9/symbols.txt @@ -606,7 +606,7 @@ _Z9SysDeletePv kind:function(arm,size=0x6c) addr:0x02011ea4 _Z13func_02011f10i kind:function(arm,size=0x20) addr:0x02011f10 _Z13func_02011f30i kind:function(arm,size=0xc) addr:0x02011f30 _Znwmjj kind:function(arm,size=0xb8) addr:0x02011f3c -_ZN9SysObjectdlEPv kind:function(arm,size=0xc) addr:0x02011ff4 +_ZdlPv kind:function(arm,size=0xc) addr:0x02011ff4 _ZN9SysObjectdaEPv kind:function(arm,size=0xc) addr:0x02012000 func_0201200c kind:function(arm,size=0x15c) addr:0x0201200c func_02012168 kind:function(arm,size=0x198) addr:0x02012168 diff --git a/docs/overlays.md b/docs/overlays.md index 8957e22a..1290f38f 100644 --- a/docs/overlays.md +++ b/docs/overlays.md @@ -79,11 +79,11 @@ Each overlay is tied to an index which is used to access the overlay in two diff `068` | FldAjito | `056` | | `069` | FldRabbit | `057` | | `070` | Dungeon | `031` | | -`071` | Tower | `033` | | +`071` | Tower | `033` | `8` | `072` | TowerLobby | `034` | | -`073` | BossDeago | `040` | | -`074` | BossLast1 | `041` | | -`075` | BossLast2 | `042` | | +`073` | BossDeago | `040` | `8` | +`074` | BossLast1 | `041` | `8` | +`075` | BossLast2 | `042` | `8` | `076` | DgnLv1 | `071` | | `077` | DgnForest | `043` | | `078` | BossForest | `035` | | diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp index 712ea558..7cb151c0 100644 --- a/include/Actor/Actor.hpp +++ b/include/Actor/Actor.hpp @@ -34,8 +34,8 @@ class UnkStruct_ov000_020b539c { /* 30 */ ActorType *mUnk_30; /* 34 */ - unk32 *func_ov000_02073dc(); - unk32 *func_ov000_02073e8(); + ActorType **func_ov000_02073dc(); + ActorType **func_ov000_02073e8(); ActorType *func_ov000_020974dc(u32 id); }; diff --git a/include/Actor/ActorManager.hpp b/include/Actor/ActorManager.hpp index cde8a241..5af181a9 100644 --- a/include/Actor/ActorManager.hpp +++ b/include/Actor/ActorManager.hpp @@ -2,9 +2,16 @@ #include "Actor/ActorUnk_ov000_020a8bb0.hpp" #include "System/SysNew.hpp" +#include "Unknown/Common.hpp" #include "files.h" #include "types.h" +struct UnkStruct_func_ov001_020bb018_param2 { + /* 00 */ STRUCT_PAD(0x00, 0x08); + /* 08 */ u16 mUnk_08; + /* 08 */ u16 mUnk_0A; +}; + class ActorManager : public SysObject { public: /* 00 */ Actor **mActorTable; @@ -16,8 +23,7 @@ class ActorManager : public SysObject { /* 10 */ unk8 mUnk_11; /* 10 */ unk8 mUnk_12; /* 10 */ unk8 mUnk_13; - /* 14 */ unk32 mUnk_14; - /* 18 */ unk32 mUnk_18; + /* 14 */ UnkStruct_ov019_020d24c8_28_258_00 mUnk_14; /* 1c */ unk32 mUnk_1c; /* 20 */ unk8 mUnk_20; /* 21 */ unk8 mUnk_21; @@ -34,24 +40,28 @@ class ActorManager : public SysObject { ActorManager(); ~ActorManager(); - static void SetInstance(ActorManager *instance); - static void ClearInstance(); - static ActorManager *Create(); - static void Destroy(); + + ActorUnk_ov000_020a8bb0 *func_01fff3b4(unk32 param1); + + void func_ov000_02096e44(int index); + + void ClearInstance(); void func_ov001_020bafdc(); - void func_ov001_020bb018(s32 param1); - static void func_ov001_020bb414(ActorManager *instance); + void func_ov001_020bb018(UnkStruct_func_ov001_020bb018_param2 *param1); void func_ov001_020bb488(); void func_ov001_020bb548(); void func_ov001_020bb630(); void func_ov001_020bb6b0(s32 *param1); - static bool func_ov001_020bb728(s32 param1); void func_ov001_020bb7b0(ZeldaObjectList *pObjList); void func_ov001_020bb7f0(); + + static void SetInstance(ActorManager *instance); + static ActorManager *Create(); + static void Destroy(); + static void func_ov001_020bb414(ActorManager *instance); + static bool func_ov001_020bb728(s32 param1); static void func_ov001_020bb824(); static void func_ov001_020bb844(); - - ActorUnk_ov000_020a8bb0 *func_01fff3b4(unk32 param1); }; extern ActorManager *gActorManager; diff --git a/include/Actor/ActorType.hpp b/include/Actor/ActorType.hpp index f6c9e983..e37f5dc6 100644 --- a/include/Actor/ActorType.hpp +++ b/include/Actor/ActorType.hpp @@ -23,7 +23,7 @@ class ActorType : public SysObject { /* 2c */ unk32 mUnk_2c; /* 30 */ unk32 mUnk_30; /* 34 */ unk32 mUnk_34; - /* 38 */ unk8 mUnk_38; + /* 38 */ u8 mUnk_38; /* 39 */ unk8 mUnk_39; /* 3a */ diff --git a/include/System/SysNew.hpp b/include/System/SysNew.hpp index d929c401..bc2d3a2a 100644 --- a/include/System/SysNew.hpp +++ b/include/System/SysNew.hpp @@ -27,7 +27,6 @@ enum HeapIndex_ { class SysObject { public: - static void operator delete(void *ptr); static void operator delete[](void *ptr); }; @@ -75,6 +74,8 @@ class UnkStruct_02011e10 : public SysObject { void func_02013014(); void func_02013070(); + void func_ov001_020ba588(unk32 param1, unk32 param2); + void func_ov018_020c4980(); void func_ov018_020c4a5c(); }; diff --git a/include/Unknown/Common.hpp b/include/Unknown/Common.hpp index ee7f6ed5..05ac9b62 100644 --- a/include/Unknown/Common.hpp +++ b/include/Unknown/Common.hpp @@ -233,10 +233,19 @@ class UnkSubStruct1 : public SysObject { } }; -class UnkStruct_ov019_020d24c8_28_258 { -public: +struct UnkStruct_ov019_020d24c8_28_258_00 { /* 00 */ void *mUnk_00; /* 04 */ unk32 mUnk_04; + + UnkStruct_ov019_020d24c8_28_258_00() {} + UnkStruct_ov019_020d24c8_28_258_00(void *param1, unk32 param2) : + mUnk_00(param1), + mUnk_04(param2) {} + void func_ov000_0205fc20(unk32 param1, unk32 param2, void *param3, void *param4); +}; + +class UnkStruct_ov019_020d24c8_28_258 : public UnkStruct_ov019_020d24c8_28_258_00 { +public: /* 08 */ unk16 mUnk_08; /* 0A */ union { //! TODO: figure out Vec2s mPos; @@ -257,8 +266,7 @@ class UnkStruct_ov019_020d24c8_28_258 { }; UnkStruct_ov019_020d24c8_28_258(unk32 param1, unk32 param2) : - mUnk_00(0), - mUnk_04(0) { + UnkStruct_ov019_020d24c8_28_258_00(NULL, 0) { this->UnknownAction(param1, param2); } @@ -267,8 +275,6 @@ class UnkStruct_ov019_020d24c8_28_258 { this->mUnk_12 = param1; this->mUnk_14 = param2; } - - void func_ov000_0205fc20(unk32 param1, unk32 param2, void *param3, void *param4); }; #define BTN_ID_NONE -1 @@ -844,3 +850,14 @@ class UnkSubStruct19 { unk32 func_ov000_02060c28(void); void func_ov000_02060bd8(unk32 param1); }; + +struct UnkStruct_StackTitleScreen { + /* 00 */ unk32 pad[5]; + /* 14 */ + + UnkStruct_StackTitleScreen(const char *path, unk32 param1); + ~UnkStruct_StackTitleScreen(); + + void func_ov000_02059270(unk32 param1, char *param2, unk32 param3); + void func_ov000_02059288(unk32 param1, char *param2, unk32 param3); +}; diff --git a/include/Unknown/UnkStruct_027e09a0.hpp b/include/Unknown/UnkStruct_027e09a0.hpp new file mode 100644 index 00000000..c2bf3ad5 --- /dev/null +++ b/include/Unknown/UnkStruct_027e09a0.hpp @@ -0,0 +1,27 @@ +#pragma once + +#include "global.h" +#include "types.h" + +struct UnkStruct_func_ov000_0207029c { + /* 00 */ STRUCT_PAD(0x00, 0x1D); + /* 20 */ u8 mUnk_1D; +}; + +struct UnkStruct_func_ov000_020702a8 { + /* 00 */ STRUCT_PAD(0x00, 0x20); + /* 20 */ unk16 mUnk_20; +}; + +class UnkStruct_027e09a0 { +public: + /* 00 */ unk32 mUnk_00; + + UnkStruct_027e09a0(); + ~UnkStruct_027e09a0(); + + UnkStruct_func_ov000_0207029c *func_ov000_0207029c(unk32 param1); + UnkStruct_func_ov000_020702a8 *func_ov000_020702a8(unk32 param1); +}; + +extern UnkStruct_027e09a0 *data_027e09a0; diff --git a/include/Unknown/UnkStruct_027e09a4.hpp b/include/Unknown/UnkStruct_027e09a4.hpp index ddaa34c1..9749d731 100644 --- a/include/Unknown/UnkStruct_027e09a4.hpp +++ b/include/Unknown/UnkStruct_027e09a4.hpp @@ -1,15 +1,65 @@ #pragma once #include "System/SysNew.hpp" +#include "global.h" #include "types.h" +struct UnkStruct_027e09a4_58_78 { + unk32 mUnk_00; + unk32 mUnk_04; + unk8 mUnk_08; + unk8 mUnk_09; + u8 mUnk_0A; +}; + +struct UnkStruct_func_01ffd400 { + /* 00 */ STRUCT_PAD(0x00, 0x10); + /* 1B */ unk32 mUnk_10; + /* 1B */ unk32 mUnk_14; + /* 1B */ unk8 mUnk_18; + /* 1B */ unk8 mUnk_19; + /* 1B */ unk8 mUnk_1A; + /* 1B */ u8 mUnk_1B; +}; + class UnkStruct_027e09a4 : public SysObject { public: - /* 00 */ unk32 mUnk_00; // overlay index? + /* 00 */ unk32 mUnk_00; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk32 mUnk_08; + /* 0C */ u8 mUnk_0C; + /* 0D */ STRUCT_PAD(0x0D, 0x60); + /* 60 */ unk32 mUnk_60; + + bool UnkCheck(unk32 value) { + switch (value) { + case 0x03: + case 0x13: + case 0x42: + case 0x5A: + case 0x5B: + case 0x5D: + case 0x63: + return true; + case 0x5C: + case 0x5E: + case 0x5F: + case 0x60: + case 0x61: + case 0x62: + default: + break; + } + + return false; + } ~UnkStruct_027e09a4(); + UnkStruct_func_01ffd400 *func_01ffd400(); + unk8 func_ov000_02070bd0(unk32, unk32); + UnkStruct_027e09a4_58_78 *func_ov000_02070560(); void func_ov000_020707a8(void *param1); void func_ov000_02070834(void *param1); void func_ov000_0207087c(unk32 param1); diff --git a/include/Unknown/UnkStruct_027e0cd8.hpp b/include/Unknown/UnkStruct_027e0cd8.hpp index c4e52d1c..3864be37 100644 --- a/include/Unknown/UnkStruct_027e0cd8.hpp +++ b/include/Unknown/UnkStruct_027e0cd8.hpp @@ -6,62 +6,64 @@ class UnkStruct_027e0cd8_0c { public: - /* 00 (vtable) */ - /* 04 */ unk32 *mUnk_04; - /* 08 */ unk32 *mUnk_08; - /* 0c */ unk32 mUnk_0c; - /* 10 */ unk32 *mUnk_10; - /* 14 */ unk32 *mUnk_14; - /* 18 */ unk32 mUnk_18; - /* 1c */ unk32 *mUnk_1c; - /* 20 */ unk32 mUnk_20; - /* 24 */ unk32 *mUnk_24; - /* 28 */ unk32 mUnk_28; - /* 2c */ unk32 *mUnk_2c; - /* 30 */ unk32 mUnk_30; - /* 34 */ unk32 *mUnk_34; - /* 38 */ unk32 mUnk_38; - /* 3c */ unk32 mUnk_3c; - /* 40 */ unk32 mUnk_40; - /* 44 */ unk32 mUnk_44; - /* 48 */ unk32 mUnk_48; - /* 4c */ unk32 mUnk_4c; - /* 50 */ unk32 mUnk_50; - /* 54 */ unk32 mUnk_54; - /* 58 */ unk32 mUnk_58; - /* 5c */ unk32 mUnk_5c; - /* 60 */ unk32 mUnk_60; - /* 64 */ unk32 mUnk_64; - /* 68 */ unk32 mUnk_68; - /* 6c */ unk32 mUnk_6c; - /* 70 */ unk32 *mUnk_70; - /* 74 */ unk32 *mUnk_74; - /* 78 */ unk32 *mUnk_78; - /* 7c */ unk32 mUnk_7c; - /* 80 */ unk32 mUnk_80; - /* 84 */ unk32 mUnk_84; - /* 88 */ unk32 *mUnk_88; - /* 8c */ unk32 *mUnk_8c; - /* 90 */ unk32 mUnk_90; - /* 94 */ unk32 mUnk_94; - /* 98 */ unk32 mUnk_98; - /* 9c */ unk32 mUnk_9c; - /* a0 */ unk32 mUnk_a0; - /* a4 */ unk32 mUnk_a4; - /* a8 */ unk32 mUnk_a8; - /* ac */ unk32 mUnk_ac; - /* b0 */ unk32 mUnk_b0; - /* b4 */ ZeldaObjectList *mUnk_b4; - /* b8 */ ZeldaObjectList *mUnk_b8; - /* bc */ ZeldaObjectList *mUnk_bc; - /* c0 */ ZeldaObjectList *mUnk_c0; - /* c4 */ ZeldaObjectList *mUnk_c4; - /* c8 */ ZeldaObjectList *mUnk_c8; - /* cc */ ZeldaObjectList *mUnk_cc; - /* d0 */ ZeldaObjectList *mUnk_d0; - /* d4 */ ZeldaObjectList *mUnk_d4; - /* d8 */ ZeldaObjectList *mUnk_d8; - /* dc */ ZeldaObjectList *mUnk_dc[8]; + /* 000 (vtable) */ + /* 004 */ unk32 *mUnk_04; + /* 008 */ unk32 *mUnk_08; + /* 00c */ unk32 mUnk_0c; + /* 010 */ unk32 *mUnk_10; + /* 014 */ unk32 *mUnk_14; + /* 018 */ unk32 mUnk_18; + /* 01c */ unk32 *mUnk_1c; + /* 020 */ unk32 mUnk_20; + /* 024 */ unk32 *mUnk_24; + /* 028 */ unk32 mUnk_28; + /* 02c */ unk32 *mUnk_2c; + /* 030 */ unk32 mUnk_30; + /* 034 */ unk32 *mUnk_34; + /* 038 */ unk32 mUnk_38; + /* 03c */ unk32 mUnk_3c; + /* 040 */ unk32 mUnk_40; + /* 044 */ unk32 mUnk_44; + /* 048 */ unk32 mUnk_48; + /* 04c */ unk32 mUnk_4c; + /* 050 */ unk32 mUnk_50; + /* 054 */ unk32 mUnk_54; + /* 058 */ unk32 mUnk_58; + /* 05c */ unk32 mUnk_5c; + /* 060 */ unk32 mUnk_60; + /* 064 */ unk32 mUnk_64; + /* 068 */ unk32 mUnk_68; + /* 06c */ unk32 mUnk_6c; + /* 070 */ unk32 *mUnk_70; + /* 074 */ unk32 *mUnk_74; + /* 078 */ unk32 *mUnk_78; + /* 07c */ unk32 mUnk_7c; + /* 080 */ unk32 mUnk_80; + /* 084 */ unk32 mUnk_84; + /* 088 */ unk32 *mUnk_88; + /* 08c */ unk32 *mUnk_8c; + /* 090 */ unk32 mUnk_90; + /* 094 */ unk32 mUnk_94; + /* 098 */ unk32 mUnk_98; + /* 09c */ unk32 mUnk_9c; + /* 0a0 */ unk32 mUnk_a0; + /* 0a4 */ unk32 mUnk_a4; + /* 0a8 */ unk32 mUnk_a8; + /* 0ac */ unk32 mUnk_ac; + /* 0b0 */ unk32 mUnk_b0; + /* 0b4 */ ZeldaObjectList *mUnk_b4; + /* 0b8 */ ZeldaObjectList *mUnk_b8; + /* 0bc */ ZeldaObjectList *mUnk_bc; + /* 0c0 */ ZeldaObjectList *mUnk_c0; + /* 0c4 */ ZeldaObjectList *mUnk_c4; + /* 0c8 */ ZeldaObjectList *mUnk_c8; + /* 0cc */ ZeldaObjectList *mUnk_cc; + /* 0d0 */ ZeldaObjectList *mUnk_d0; + /* 0d4 */ ZeldaObjectList *mUnk_d4; + /* 0d8 */ ZeldaObjectList *mUnk_d8; + /* 0dc */ ZeldaObjectList *mUnk_dc[8]; + /* 0fc */ STRUCT_PAD(0xFC, 0x128); + /* 128 */ u16 mUnk_128; /* 00 */ virtual void vfunc_00(); /* 04 */ virtual void vfunc_04(); diff --git a/include/Unknown/UnkStruct_027e0cf4.hpp b/include/Unknown/UnkStruct_027e0cf4.hpp index e0878d0b..1ba47f3c 100644 --- a/include/Unknown/UnkStruct_027e0cf4.hpp +++ b/include/Unknown/UnkStruct_027e0cf4.hpp @@ -6,6 +6,8 @@ class UnkStruct_027e0cf4 : public SysObject { public: ~UnkStruct_027e0cf4(); + void func_ov021_020f8cdc(); + void func_ov021_020f8d20(); }; // gBattleGame? diff --git a/include/Unknown/UnkStruct_027e0d70.hpp b/include/Unknown/UnkStruct_027e0d70.hpp index 5a1254e0..55c203c7 100644 --- a/include/Unknown/UnkStruct_027e0d70.hpp +++ b/include/Unknown/UnkStruct_027e0d70.hpp @@ -6,6 +6,9 @@ class UnkStruct_027e0d70 : public SysObject { public: ~UnkStruct_027e0d70(); + void func_ov068_0215e8f8(); + void func_ov071_0215e9ac(); + void func_ov071_0215eac8(); }; extern UnkStruct_027e0d70 *data_027e0d70; diff --git a/include/global.h b/include/global.h index f99f9ebd..7f7fa319 100644 --- a/include/global.h +++ b/include/global.h @@ -47,4 +47,8 @@ #define SUBSCREEN_WIDTH 256 #define SUBSCREEN_HEIGHT 192 +#define ALIGN_PREV(X, N) ((X) & ~((N) - 1)) +#define ALIGN_NEXT(X, N) ALIGN_PREV(((X) + (N) - 1), N) +#define ALIGN(X, N) ((X + N) & ~N) + #endif diff --git a/src/001_SceneInit/Actor/ActorManager_001.cpp b/src/001_SceneInit/Actor/ActorManager_001.cpp index 7a733d96..55cb62d8 100644 --- a/src/001_SceneInit/Actor/ActorManager_001.cpp +++ b/src/001_SceneInit/Actor/ActorManager_001.cpp @@ -1,12 +1,36 @@ #include "Actor/ActorManager.hpp" +#include "System/OverlayManager.hpp" +#include "Unknown/UnkMemFuncs.h" +#include "Unknown/UnkStruct_027e09a0.hpp" #include "Unknown/UnkStruct_027e09a4.hpp" +#include "Unknown/UnkStruct_027e09b8.hpp" +#include "Unknown/UnkStruct_027e0cd8.hpp" #include "Unknown/UnkStruct_027e0cf4.hpp" #include "Unknown/UnkStruct_027e0d70.hpp" #include "flags.h" #include "global.h" -extern "C" void func_ov000_020977e4(); -extern "C" void func_ov001_020ba59c(void *); +extern "C" { +void func_ov000_020977e4(); +void func_ov001_020ba59c(void *); +void func_ov021_020f8818(); +void func_ov031_020ea100(); +void func_ov071_0215e8d4(); +unk32 func_01ffd3b0(); +unk32 func_01ffd3d8(); +} + +struct UnkStruct_ov000_020ab1ac { + u32 mUnk_00; // +0x00 + u32 mUnk_04; // +0x04 + u8 mUnk_08; // +0x08 + u8 padding[3]; +}; +extern UnkStruct_ov000_020ab1ac data_ov000_020ab1ac[30]; + +const u32 data_ov001_020c2638[] = {ActorId_FOMC, ActorId_FOMA, ActorId_FOMB, ActorId_FOPD, ActorId_FOMR}; +const u16 data_ov001_020c2624[] = {0x01AE, 0x01AF, 0x01B0, 0x01B1, 0x01B2}; +const u16 data_ov001_020c262e[] = {0x01CB, 0x01CC, 0x01CD, 0x01CE, 0x01CF}; THUMB ActorManager *ActorManager::Create() { return new(1, 4) ActorManager(); @@ -14,28 +38,31 @@ THUMB ActorManager *ActorManager::Create() { THUMB ActorManager::ActorManager() { this->SetInstance(this); - this->mUnk_20 = 0; - this->mUnk_21 = 0; - this->mUnk_22 = 0; - this->mUnk_23 = 0; - this->mUnk_32 = 0; - this->mActorTable = NULL; - this->mActorTableEnd = NULL; - this->mUnk_08 = NULL; - this->mActorCount = 0; - this->mNextActorId = 0; - this->mUnk_10 = 0; - this->mUnk_14 = 0; - this->mUnk_18 = 0; - this->mUnk_24 = 0; - this->mUnk_28 = 0; - this->mUnk_2c = 0; - this->mUnk_30 = 0; - this->mUnk_34 = 0; -} - -// non-matching (D0 not generating?) + this->mUnk_20 = 0; + this->mUnk_21 = 0; + this->mUnk_22 = 0; + this->mUnk_23 = 0; + this->mUnk_32 = 0; + this->mActorTable = NULL; + this->mActorTableEnd = NULL; + this->mUnk_08 = NULL; + this->mActorCount = 0; + this->mNextActorId = 0; + this->mUnk_10 = 0; + this->mUnk_14.mUnk_00 = NULL; + this->mUnk_14.mUnk_04 = 0; + this->mUnk_24 = 0; + this->mUnk_28 = 0; + this->mUnk_2c = 0; + this->mUnk_30 = 0; + this->mUnk_34 = 0; +} + THUMB ActorManager::~ActorManager() { + if (this->mActorTable != NULL) { + delete this->mActorTable; + } + this->ClearInstance(); } @@ -57,43 +84,284 @@ THUMB void ActorManager::func_ov001_020bafdc() { } } -THUMB void ActorManager::func_ov001_020bb018(s32 param1) {} +THUMB void ActorManager::func_ov001_020bb018(UnkStruct_func_ov001_020bb018_param2 *param1) { + u16 unk_0A = param1->mUnk_0A; + u16 unk_08 = param1->mUnk_08; -// non-matching -THUMB void ActorManager::func_ov001_020bb414(ActorManager *instance) { - bool bVar1; + this->mActorCount = 0; + this->mNextActorId = 0; + this->mUnk_10 = 0; + this->mUnk_34 = 0; + + int aligned0A = ALIGN_NEXT(unk_0A, 8); + int aligned08 = ALIGN_NEXT(unk_08, 8); + + int iVar5 = data_027e09a0->func_ov000_020702a8(data_027e09a4->mUnk_00)->mUnk_20; + + s32 allocCount; + if (data_027e09a4->mUnk_60 == 0) { + allocCount = aligned0A + 0x40; + } else { + allocCount = aligned0A + 0x80; + } + + if (this->mActorTable != NULL) { + delete this->mActorTable; + } + + this->mActorTable = (Actor **) ::operator new(allocCount * 4, HeapIndex_1); + this->mActorTableEnd = this->mActorTable + allocCount * 4; + + size_t iVar9 = ((this->mActorTable + allocCount * 4) - this->mActorTable); + Fill32(0, this->mActorTable, (iVar9 * 4)); + this->mUnk_08 = this->mActorTable; + data_0204999c.func_ov001_020ba588(aligned08 + iVar5, 0x100); + + // it's 2 when we are on the title screen and 0 during normal gameplay, is it the game mode ? + if (data_027e09a4->mUnk_60 != 2) { + unk32 iVar5; + + if (func_01ffd3b0() != 0) { + iVar5 = data_027e09a4->mUnk_00; + + if (iVar5 == 0x3E) { + this->mUnk_34 = 0xFFFFECCD; // ~0x1332 + } + + this->mUnk_14.func_ov000_0205fc20(0x5D, 0x22, NULL, 0); + + { + UnkStruct_StackTitleScreen auStack_28("Npc/Tex.bin", 1); + auStack_28.func_ov000_02059270(0x07, "zdf_sw_trace", 0x39200000); + auStack_28.func_ov000_02059270(0x08, "zdf_sword02", 0x19150000); + auStack_28.func_ov000_02059270(0x0A, "whip", 0x28000000); + + auStack_28.func_ov000_02059270(0x0C, "rupy0", 0x2D200000); + auStack_28.func_ov000_02059288(0x0D, "rupy1", 0x0C); + auStack_28.func_ov000_02059288(0x0E, "rupy2", 0x0C); + auStack_28.func_ov000_02059288(0x0F, "rupy3", 0x0C); + + auStack_28.func_ov000_02059270(0x10, "life0", 0x2D200000); + auStack_28.func_ov000_02059270(0x1D, "arrow", 0x2D200000); + auStack_28.func_ov000_02059270(0x1E, "bomb", 0x2D200000); + auStack_28.func_ov000_02059270(0x1F, "drug", 0x2D200000); + auStack_28.func_ov000_02059270(0x20, "drop0", 0x2D200000); + auStack_28.func_ov000_02059270(0x21, "drop1", 0x2D200000); + auStack_28.func_ov000_02059270(0x22, "drop2", 0x2D200000); + auStack_28.func_ov000_02059270(0x23, "drop3", 0x2D200000); + auStack_28.func_ov000_02059270(0x24, "drop4", 0x2D200000); + auStack_28.func_ov000_02059270(0x25, "drop5", 0x2D200000); + + UnkStruct_func_ov000_0207029c *ptr = data_027e09a0->func_ov000_0207029c(iVar5); + if ((ptr->mUnk_1D - 1) == 1) { + auStack_28.func_ov000_02059270(0x38, "mic_0", 0x35B00000); + auStack_28.func_ov000_02059270(0x39, "mic_1", 0x35B00000); + auStack_28.func_ov000_02059270(0x3A, "mic_on", 0x35B00000); + auStack_28.func_ov000_02059270(0x3B, "mic_ok", 0x35B00000); + auStack_28.func_ov000_02059270(0x3C, "mic_ng", 0x35B00000); + } + + if (gOverlayManager.mLoadedOverlays[OverlaySlot_8] == OverlayIndex_BossDeago) { + auStack_28.func_ov000_02059270(0x09, "bdga_chain", 0x28000000); + } + if (gOverlayManager.mLoadedOverlays[OverlaySlot_8] == OverlayIndex_BossLast1) { + auStack_28.func_ov000_02059270(0x0B, "kimrat", 0x28000000); + } + } + + if (gOverlayManager.mLoadedOverlays[OverlaySlot_8] == OverlayIndex_Tower) { + UnkStruct_StackTitleScreen auStack_3c("Screen/tex2d.bin", 1); + auStack_3c.func_ov000_02059270(0x34, "baloon", 0x28a00000); + auStack_3c.func_ov000_02059270(0x35, "dot", 0x28000000); + } + + if (gOverlayManager.mLoadedOverlays[OverlaySlot_8] == OverlayIndex_BossDeago) { + UnkStruct_StackTitleScreen auStack_50("Screen/tex2d.bin", 1); + auStack_50.func_ov000_02059270(0x30, "deagohit", 0x29200000); + auStack_50.func_ov000_02059270(0x31, "deagotarget", 0x29200000); + } + + if (gOverlayManager.mLoadedOverlays[OverlaySlot_8] == OverlayIndex_BossLast2) { + UnkStruct_StackTitleScreen auStack_64("Screen/tex2d.bin", 1); + auStack_64.func_ov000_02059270(0x32, "zeldahit", 0x29200000); + auStack_64.func_ov000_02059270(0x33, "zeldatarget", 0x2D200000); + } + } else if (func_01ffd3d8() != 0) { + UnkStruct_StackTitleScreen auStack_78("Npc/Tex.bin", 1); + auStack_78.func_ov000_02059270(0x12, "rupy0", 0x2D200000); + auStack_78.func_ov000_02059288(0x13, "rupy1", 0x12); + auStack_78.func_ov000_02059288(0x14, "rupy2", 0x12); + + auStack_78.func_ov000_02059270(0x11, "life1", 0x2D200000); + } + } + + if (data_027e09a4->UnkCheck(data_027e09a4->mUnk_00)) { + func_ov071_0215e8d4(); + } + + // 1 for battle mode + if (data_027e09a4->mUnk_60 == 1) { + func_ov021_020f8818(); + } +} + +THUMB void ActorManager::func_ov001_020bb414(ActorManager *instance) { func_ov001_020ba59c(&data_0204999c); - switch (data_027e09a4->mUnk_00) { - case 0x03: - case 0x12: - case 0x42: - case 0x5A: - case 0x5B: - case 0x5D: - case 0x63: - bVar1 = true; - break; - default: - bVar1 = false; - break; - } - - if (bVar1) { + if (data_027e09a4->UnkCheck(data_027e09a4->mUnk_00)) { instance->func_ov001_020bb844(); } - delete instance; + if (instance->mActorTable != 0) { + delete instance->mActorTable; + } + instance->mActorTable = NULL; instance->mActorTableEnd = NULL; } -THUMB void ActorManager::func_ov001_020bb488() {} -THUMB void ActorManager::func_ov001_020bb548() {} -THUMB void ActorManager::func_ov001_020bb630() {} -THUMB void ActorManager::func_ov001_020bb6b0(s32 *param1) {} -THUMB bool ActorManager::func_ov001_020bb728(s32 param1) {} +THUMB void ActorManager::func_ov001_020bb488() { + if (data_027e09a4->mUnk_0C != 1) { + switch (data_027e09a4->func_01ffd400()->mUnk_10) { + case 0x00: + case 0x01: + case 0x03: + case 0x06: + if (data_027e0cd8->mUnk_0c->mUnk_128 & 0x800) { + func_ov031_020ea100(); + } + break; + default: + break; + } + } + + if (data_027e09a4->mUnk_60 == 1) { + data_027e0cf4->func_ov021_020f8cdc(); + } + + if (data_027e09a4->UnkCheck(data_027e09a4->mUnk_00)) { + data_027e0d70->func_ov068_0215e8f8(); + } +} + +THUMB void ActorManager::func_ov001_020bb548() { + Actor **ppActorTable = this->mActorTable; + int i = 0; + + while (ppActorTable < this->mUnk_08) { + Actor *pActor = *ppActorTable; + + if (pActor != NULL && pActor->vfunc_34() != 0) { + this->func_ov000_02096e44(i); + } + + ppActorTable++; + i++; + } + + unk32 value = data_027e09a4->mUnk_00; + if (data_027e09a4->UnkCheck(value)) { + data_027e0d70->func_ov071_0215e9ac(); + + if (data_027e09a4->UnkCheck(value)) { + data_027e0d70->func_ov071_0215eac8(); + } + } + + if (data_027e09a4->mUnk_60 == 1) { + ActorManager::func_ov001_020bb824(); + } +} + +THUMB void ActorManager::func_ov001_020bb630() { + ActorType **piVar2 = data_ov000_020b539c.func_ov000_02073dc(); + ActorType **piVar3 = data_ov000_020b539c.func_ov000_02073e8(); + + while (piVar2 != piVar3) { + ActorType *iVar4 = *piVar2; + + if (iVar4 != NULL) { + bool run_vfunc_08 = false; + + if (iVar4->mUnk_38 != 0) { + run_vfunc_08 = true; + } else { + if (iVar4->mActorId == ActorId_BSFC && data_027e09a4->func_01ffd400()->mUnk_1B & 0x10) { + run_vfunc_08 = true; + } + } + + if (run_vfunc_08) { + (*piVar2)->vfunc_08(); + } + } + + piVar2++; + piVar3 = data_ov000_020b539c.func_ov000_02073e8(); + } + + if (data_027e09a4->mUnk_60 == 1) { + data_027e0cf4->func_ov021_020f8d20(); + } +} + +THUMB void ActorManager::func_ov001_020bb6b0(s32 *param1) { + ActorType **piVar1 = data_ov000_020b539c.func_ov000_02073dc(); + ActorType **piVar2 = data_ov000_020b539c.func_ov000_02073e8(); + + while (piVar1 != piVar2) { + ActorType *iVar5 = *piVar1; + + if (iVar5 != NULL && iVar5->mUnk_38 == 0) { + for (int i = 0; i < ARRAY_LEN(data_ov000_020ab1ac); i++) { + UnkStruct_ov000_020ab1ac *pEntry = &data_ov000_020ab1ac[i]; + + if (pEntry->mUnk_00 == iVar5->mActorId && pEntry->mUnk_04 == ((UnkStruct_027e09a4_58_78 *) param1)->mUnk_00 && + pEntry->mUnk_08 == ((UnkStruct_027e09a4_58_78 *) param1)->mUnk_0A) { + (*piVar1)->mUnk_39 = 1; + (*piVar1)->vfunc_08(); + } + } + } + + piVar1++; + piVar2 = data_ov000_020b539c.func_ov000_02073e8(); + } +} + +THUMB bool ActorManager::func_ov001_020bb728(s32 param1) { + UnkStruct_027e09a4_58_78 *piVar1 = data_027e09a4->func_ov000_02070560(); + + if (piVar1->mUnk_00 != 0x2C || piVar1->mUnk_0A != 0) { + return false; + } + + for (u32 i = 0; i < 5; i++) { + int value; + int value2; + + if (param1 == data_ov001_020c2638[i]) { + value = data_ov001_020c2624[i] & 0x1F; + value2 = data_027e09b8->mUnk_14[(u32) data_ov001_020c2624[i] >> 5]; + + if ((1 << value) & value2) { + value = data_ov001_020c262e[i] & 0x1F; + value2 = data_027e09b8->mUnk_14[(u32) data_ov001_020c262e[i] >> 5]; + + if (!((1 << value) & value2)) { + continue; + } + } + + return true; + } + } + + return false; +} THUMB void ActorManager::func_ov001_020bb7b0(ZeldaObjectList *pObjList) { for (s32 i = 0; i < pObjList->nEntries; i++) { @@ -107,11 +375,11 @@ THUMB void ActorManager::func_ov001_020bb7b0(ZeldaObjectList *pObjList) { } THUMB void ActorManager::func_ov001_020bb7f0() { - unk32 *ptr1 = data_ov000_020b539c.func_ov000_02073dc(); - unk32 *ptr2 = data_ov000_020b539c.func_ov000_02073e8(); + ActorType **ptr1 = data_ov000_020b539c.func_ov000_02073dc(); + ActorType **ptr2 = data_ov000_020b539c.func_ov000_02073e8(); while (ptr1 != ptr2) { - if (*ptr1 != 0) { + if (*ptr1 != NULL) { func_ov000_020977e4(); } diff --git a/src/025_Title/TitleScreen.cpp b/src/025_Title/TitleScreen.cpp index 2dad4d58..b9885aa5 100644 --- a/src/025_Title/TitleScreen.cpp +++ b/src/025_Title/TitleScreen.cpp @@ -39,15 +39,6 @@ static const Vec2s data_ov025_020c5ae8(0x0100, 0x0080); static const Vec2us data_ov025_020c5ae0(0x0100, 0x0080); #endif -struct UnkStruct_StackTitleScreen { - /* 00 */ unk32 pad[5]; - /* 14 */ - - UnkStruct_StackTitleScreen(const char *path, unk32 param1); - void func_ov000_02059270(unk32 param1, char *param2, unk32 param3); - void func_ov000_02059240(); -}; - TitleScreen::TitleScreen() : mState(TitleScreenState_None), mShowUI(false), @@ -65,9 +56,10 @@ TitleScreen::TitleScreen() : size_t len = strlen((char *) acStack_54); strncpy((char *) acStack_54 + len, path, sizeof(acStack_54) - len - 1); - UnkStruct_StackTitleScreen auStack_68((char *) acStack_54, 1); - auStack_68.func_ov000_02059270(0x3E, "title", 0x32500000); - auStack_68.func_ov000_02059240(); + { + UnkStruct_StackTitleScreen auStack_68((char *) acStack_54, 1); + auStack_68.func_ov000_02059270(0x3E, "title", 0x32500000); + } data_0204aeac.func_0201c494(3); this->mUnk_218.func_0201effc(0x0F, 1, 0x1F); diff --git a/src/Main/System/SysNew.cpp b/src/Main/System/SysNew.cpp index 5cf74ac3..071c84d2 100644 --- a/src/Main/System/SysNew.cpp +++ b/src/Main/System/SysNew.cpp @@ -95,7 +95,7 @@ ARM void *operator new(unsigned long length, u32 id, u32 idLength) { return pvVar1; } -ARM void SysObject::operator delete(void *ptr) { +ARM void operator delete(void *ptr) { SysDelete(ptr); } diff --git a/tools/new_class.py b/tools/new_class.py index 79f54ec8..47d239e9 100755 --- a/tools/new_class.py +++ b/tools/new_class.py @@ -8,7 +8,7 @@ def main(): parser = argparse.ArgumentParser(description="Add new header") - parser.add_argument("--suffix", "-s", dest="suffix", help="Suffix") + parser.add_argument("--suffix", "-s", dest="suffix", help="Suffix", required=True) parser.add_argument("--pointer", "-p", dest="pointer", help="Make the symbol a pointer", action="store_true", default=False) parser.add_argument("--base", "-b", dest="base", help="Add a base class", action="store_true", default=False) args = parser.parse_args() From 87316f8f6e6d47f45e6fe8bdd0bc7f0300c472ad Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Wed, 4 Feb 2026 03:46:45 +0100 Subject: [PATCH 7/8] struct comments --- src/001_SceneInit/Actor/ActorManager_001.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/001_SceneInit/Actor/ActorManager_001.cpp b/src/001_SceneInit/Actor/ActorManager_001.cpp index 55cb62d8..5a81b3eb 100644 --- a/src/001_SceneInit/Actor/ActorManager_001.cpp +++ b/src/001_SceneInit/Actor/ActorManager_001.cpp @@ -21,10 +21,11 @@ unk32 func_01ffd3d8(); } struct UnkStruct_ov000_020ab1ac { - u32 mUnk_00; // +0x00 - u32 mUnk_04; // +0x04 - u8 mUnk_08; // +0x08 - u8 padding[3]; + /* 00 */ u32 mUnk_00; + /* 04 */ u32 mUnk_04; + /* 08 */ u8 mUnk_08; + /* 09 */ u8 pad[3]; + /* 0C */ }; extern UnkStruct_ov000_020ab1ac data_ov000_020ab1ac[30]; From c54399db7066e9f90a65fc7193fc4ef5d54996ef Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Wed, 4 Feb 2026 04:05:25 +0100 Subject: [PATCH 8/8] match ClearInstance --- include/Actor/ActorManager.hpp | 2 +- src/001_SceneInit/Actor/ActorManager_001.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/include/Actor/ActorManager.hpp b/include/Actor/ActorManager.hpp index 5af181a9..a6e1fdbc 100644 --- a/include/Actor/ActorManager.hpp +++ b/include/Actor/ActorManager.hpp @@ -45,7 +45,7 @@ class ActorManager : public SysObject { void func_ov000_02096e44(int index); - void ClearInstance(); + int ClearInstance(); void func_ov001_020bafdc(); void func_ov001_020bb018(UnkStruct_func_ov001_020bb018_param2 *param1); void func_ov001_020bb488(); diff --git a/src/001_SceneInit/Actor/ActorManager_001.cpp b/src/001_SceneInit/Actor/ActorManager_001.cpp index 5a81b3eb..087c978d 100644 --- a/src/001_SceneInit/Actor/ActorManager_001.cpp +++ b/src/001_SceneInit/Actor/ActorManager_001.cpp @@ -85,6 +85,7 @@ THUMB void ActorManager::func_ov001_020bafdc() { } } +// https://decomp.me/scratch/UywfM THUMB void ActorManager::func_ov001_020bb018(UnkStruct_func_ov001_020bb018_param2 *param1) { u16 unk_0A = param1->mUnk_0A; u16 unk_08 = param1->mUnk_08; @@ -405,7 +406,7 @@ THUMB void ActorManager::SetInstance(ActorManager *instance) { gActorManager = instance; } -// non-matching (regalloc) -THUMB void ActorManager::ClearInstance() { +THUMB int ActorManager::ClearInstance() { gActorManager = NULL; + //! @bug: the function expects a return value (though it seems unused) }