From 9709236f8e073aa495910c2b6f488f4c6ec6fbd0 Mon Sep 17 00:00:00 2001 From: lepelog <25211966+lepelog@users.noreply.github.com> Date: Sun, 18 Oct 2026 22:46:28 +0200 Subject: [PATCH 1/2] d_a_obj_D3_dummy OK --- .../rels/d_a_obj_D3_dummyNP/symbols.txt | 20 +-- config/SOUE01/symbols.txt | 2 +- configure.py | 2 +- include/d/a/obj/d_a_obj_D3_dummy.h | 22 +++- include/d/col/bg/d_bg_w_base.h | 2 +- src/REL/d/a/obj/d_a_obj_D3_dummy.cpp | 124 ++++++++++++++++++ src/d/col/bg/d_bg_w_base.cpp | 2 +- 7 files changed, 156 insertions(+), 18 deletions(-) diff --git a/config/SOUE01/rels/d_a_obj_D3_dummyNP/symbols.txt b/config/SOUE01/rels/d_a_obj_D3_dummyNP/symbols.txt index 950ef6cf..479c0c39 100644 --- a/config/SOUE01/rels/d_a_obj_D3_dummyNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_D3_dummyNP/symbols.txt @@ -8,19 +8,19 @@ __dt__26sFState_c<13dAcOD3Dummy_c>Fv = .text:0x000001C0; // type:function size:0 __dt__29sFStateFct_c<13dAcOD3Dummy_c>Fv = .text:0x00000220; // type:function size:0x6C __dt__82sStateMgr_c<13dAcOD3Dummy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000290; // type:function size:0xA0 __dt__52sFStateMgr_c<13dAcOD3Dummy_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000330; // type:function size:0xA4 -fn_599_3E0 = .text:0x000003E0; // type:function size:0x15C -fn_599_540 = .text:0x00000540; // type:function size:0x10C +createHeap__13dAcOD3Dummy_cFv = .text:0x000003E0; // type:function size:0x15C +create__13dAcOD3Dummy_cFv = .text:0x00000540; // type:function size:0x10C changeState__82sStateMgr_c<13dAcOD3Dummy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000650; // type:function size:0x10 -fn_599_660 = .text:0x00000660; // type:function size:0x8 -fn_599_670 = .text:0x00000670; // type:function size:0xDC +doDelete__13dAcOD3Dummy_cFv = .text:0x00000660; // type:function size:0x8 +actorExecute__13dAcOD3Dummy_cFv = .text:0x00000670; // type:function size:0xDC executeState__82sStateMgr_c<13dAcOD3Dummy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000750; // type:function size:0x10 -fn_599_760 = .text:0x00000760; // type:function size:0x8 +draw__13dAcOD3Dummy_cFv = .text:0x00000760; // type:function size:0x8 initializeState_Wait__13dAcOD3Dummy_cFv = .text:0x00000770; // type:function size:0x4 executeState_Wait__13dAcOD3Dummy_cFv = .text:0x00000780; // type:function size:0x4 finalizeState_Wait__13dAcOD3Dummy_cFv = .text:0x00000790; // type:function size:0x4 -fn_599_7A0 = .text:0x000007A0; // type:function size:0x64 -fn_599_810 = .text:0x00000810; // type:function size:0x128 -fn_599_940 = .text:0x00000940; // type:function size:0x80 +fn_599_7A0__13dAcOD3Dummy_cFv = .text:0x000007A0; // type:function size:0x64 +fn_599_810__13dAcOD3Dummy_cFv = .text:0x00000810; // type:function size:0x128 +fn_599_940__13dAcOD3Dummy_cFv = .text:0x00000940; // type:function size:0x80 __dt__13dAcOD3Dummy_cFv = .text:0x000009C0; // type:function size:0xD8 getStateID__82sStateMgr_c<13dAcOD3Dummy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000AA0; // type:function size:0x10 build__29sFStateFct_c<13dAcOD3Dummy_c>FRC12sStateIDIf_c = .text:0x00000AB0; // type:function size:0x60 @@ -56,7 +56,7 @@ lbl_599_data_20 = .data:0x00000020; // type:object size:0x7 data:string lbl_599_data_28 = .data:0x00000028; // type:object size:0x7 data:string lbl_599_data_30 = .data:0x00000030; // type:object size:0x7 data:string lbl_599_data_38 = .data:0x00000038; // type:object size:0x7 data:string -lbl_599_data_40 = .data:0x00000040; // type:object size:0x20 data:4byte +d3Stages = .data:0x00000040; // type:object size:0x20 data:4byte g_profile_OBJ_D3_DUMMY = .data:0x00000060; // type:object size:0x10 lbl_599_data_70 = .data:0x00000070; // type:object size:0x3 data:string lbl_599_data_74 = .data:0x00000074; // type:object size:0x3 data:string @@ -69,7 +69,7 @@ lbl_599_data_8C = .data:0x0000008C; // type:object size:0x3 data:string lbl_599_data_90 = .data:0x00000090; // type:object size:0xB data:string lbl_599_data_9C = .data:0x0000009C; // type:object size:0xF data:string lbl_599_data_AC = .data:0x000000AC; // type:object size:0x1B data:string -lbl_599_data_C8 = .data:0x000000C8; // type:object size:0x80 +__vt__13dAcOD3Dummy_c = .data:0x000000C8; // type:object size:0x80 lbl_599_data_148 = .data:0x00000148; // type:object size:0x30 lbl_599_data_178 = .data:0x00000178; // type:object size:0x30 lbl_599_data_1A8 = .data:0x000001A8; // type:object size:0x18 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 4f01638a..3c6a5999 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -19541,7 +19541,7 @@ UpdateDraw__9dBgW_BaseFP12mAllocator_c = .text:0x8034ADC0; // type:function size RegistBg__9dBgW_BaseFi = .text:0x8034AED0; // type:function size:0x8 UnRegistBg__9dBgW_BaseFv = .text:0x8034AEE0; // type:function size:0xC ChkReady__9dBgW_BaseCFv = .text:0x8034AEF0; // type:function size:0x4C -Set0x2F__9dBgW_BaseFUc = .text:0x8034AF40; // type:function size:0x8 +Set0x2F__9dBgW_BaseFl = .text:0x8034AF40; // type:function size:0x8 __ct__8dBgWKColFv = .text:0x8034AF50; // type:function size:0x50 __dt__8dBgWKColFv = .text:0x8034AFA0; // type:function size:0x64 initKCollision__8dBgWKColFPv = .text:0x8034B010; // type:function size:0x34 diff --git a/configure.py b/configure.py index b7e46653..35fff01a 100644 --- a/configure.py +++ b/configure.py @@ -2450,7 +2450,7 @@ config.libs = [ Rel(NonMatching, "d_a_obj_control_panel", "REL/d/a/obj/d_a_obj_control_panel.cpp"), Rel(NonMatching, "d_a_obj_cumul_cloud", "REL/d/a/obj/d_a_obj_cumul_cloud.cpp"), Rel(NonMatching, "d_a_obj_D300", "REL/d/a/obj/d_a_obj_D300.cpp"), - Rel(NonMatching, "d_a_obj_D3_dummy", "REL/d/a/obj/d_a_obj_D3_dummy.cpp"), + Rel(Matching, "d_a_obj_D3_dummy", "REL/d/a/obj/d_a_obj_D3_dummy.cpp"), Rel(NonMatching, "d_a_obj_daynight", "REL/d/a/obj/d_a_obj_daynight.cpp"), Rel(NonMatching, "d_a_obj_decoA", "REL/d/a/obj/d_a_obj_decoA.cpp"), Rel(Matching, "d_a_obj_decoB", "REL/d/a/obj/d_a_obj_decoB.cpp"), diff --git a/include/d/a/obj/d_a_obj_D3_dummy.h b/include/d/a/obj/d_a_obj_D3_dummy.h index 48892644..3e7c5f28 100644 --- a/include/d/a/obj/d_a_obj_D3_dummy.h +++ b/include/d/a/obj/d_a_obj_D3_dummy.h @@ -3,6 +3,7 @@ #include "d/a/obj/d_a_obj_base.h" #include "d/col/bg/d_bg_w.h" +#include "m/m_mtx.h" #include "s/s_State.hpp" class dAcOD3Dummy_c : public dAcObjBase_c { @@ -10,19 +11,32 @@ public: dAcOD3Dummy_c() : mStateMgr(*this) {} virtual ~dAcOD3Dummy_c() {} + virtual int create() override; + virtual int doDelete() override; + virtual bool createHeap() override; + virtual int draw() override; + virtual int actorExecute() override; + STATE_FUNC_DECLARE(dAcOD3Dummy_c, Wait); void setField_0x1570(u8 val) { field_0x1570 = val; } + s32 fn_599_7A0(); + void fn_599_810(); + void fn_599_940(); + private: - /* 0x0330 */ dBgW field_330[8]; - /* 0x13B0 */ u8 unk[0x180]; + /* 0x0330 */ dBgW mBgWs[8]; + /* 0x13B0 */ mMtx_c field_13B0[8]; /* 0x1530 */ STATE_MGR_DECLARE(dAcOD3Dummy_c); - /* 0x156C */ u8 field_0x156C[4]; + /* 0x156C */ s32 field_0x156C; /* 0x1570 */ u8 field_0x1570; - /* 0x1571 */ u8 field_0x1571[0xB]; + /* 0x1571 */ u8 field_0x1571[3]; + /* 0x1574 */ void *field_0x1574; + /* 0x1578 */ u8 field_0x1578; + /* 0x1579 */ u8 field_0x1579[0x157C - 0x1579]; }; #endif diff --git a/include/d/col/bg/d_bg_w_base.h b/include/d/col/bg/d_bg_w_base.h index b1531119..fdc40a97 100644 --- a/include/d/col/bg/d_bg_w_base.h +++ b/include/d/col/bg/d_bg_w_base.h @@ -66,7 +66,7 @@ public: void RegistBg(int id); void UnRegistBg(); bool ChkReady() const; - void Set0x2F(u8); + void Set0x2F(s32); /* vt at 0x08 */ /* 0x008 */ virtual ~dBgW_Base(); diff --git a/src/REL/d/a/obj/d_a_obj_D3_dummy.cpp b/src/REL/d/a/obj/d_a_obj_D3_dummy.cpp index fe42fcca..60c9a671 100644 --- a/src/REL/d/a/obj/d_a_obj_D3_dummy.cpp +++ b/src/REL/d/a/obj/d_a_obj_D3_dummy.cpp @@ -1,9 +1,133 @@ #include "d/a/obj/d_a_obj_D3_dummy.h" +#include "common.h" +#include "d/a/obj/d_a_obj_base.h" +#include "d/col/bg/d_bg_s.h" +#include "d/d_sc_game.h" +#include "d/flag/dungeonflag_manager.h" +#include "f/f_base.h" +#include "m/m_vec.h" + +const char *d3Stages[8] = { + "D003_0", "D003_1", "D003_2", "D003_3", "D003_4", "D003_5", "D003_6", "D003_7", +}; + SPECIAL_ACTOR_PROFILE(OBJ_D3_DUMMY, dAcOD3Dummy_c, fProfile::OBJ_D3_DUMMY, 0x15E, 0, 6); STATE_DEFINE(dAcOD3Dummy_c, Wait); +bool dAcOD3Dummy_c::createHeap() { + const char *oarcName = "D3MapDummy"; + const char *iconName = "dat/d3icon.bil"; + const char *names[8] = { + "00", "01", "02", "03", "04", "05", "06", "07", + }; + field_0x156C = fn_599_7A0(); + fn_599_810(); + + for (int i = 0; i < 8; i++) { + if (i == field_0x156C) { + continue; + } + void *dzb = getOarcDZB(oarcName, names[i]); + void *plc = getOarcPLC(oarcName, names[i]); + if (mBgWs[i].Set((cBgD_t *)dzb, (PLC *)plc, 1, &field_13B0[i], &mScale)) { + return false; + } + bool result = mBgWs[i].InitMapStuff(&mAllocator); + if (!result) { + return false; + } + mBgWs[i].Set0x2F(i); + } + + field_0x1574 = getOarcFile(oarcName, iconName); + if (field_0x1574 == nullptr) { + return false; + } + + return true; +} + +int dAcOD3Dummy_c::create() { + CREATE_ALLOCATOR_SIZE(dAcOD3Dummy_c, 0x40000); + if (DungeonflagManager::sInstance->getCounterOrFlag(2, 8)) { + fn_599_940(); + } + mAcceleration = 0.f; + mMaxSpeed = 0.f; + mStateMgr.changeState(StateID_Wait); + mBoundingBox.Set(mVec3_c(-0.f, -0.f, -0.f), mVec3_c(0.f, 0.f, 0.f)); + return SUCCEEDED; +} + +int dAcOD3Dummy_c::doDelete() { + return SUCCEEDED; +} + +int dAcOD3Dummy_c::actorExecute() { + if (DungeonflagManager::sInstance->getCounterOrFlag(2, 8)) { + fn_599_940(); + } + mStateMgr.executeState(); + if (field_0x1570) { + fn_599_810(); + for (int i = 0; i < 8; i++) { + if (i != field_0x156C) { + mBgWs[i].Move(); + } + } + } + field_0x1570 = 0; + return SUCCEEDED; +} + +int dAcOD3Dummy_c::draw() { + return SUCCEEDED; +} + void dAcOD3Dummy_c::initializeState_Wait() {} void dAcOD3Dummy_c::executeState_Wait() {} void dAcOD3Dummy_c::finalizeState_Wait() {} + +s32 dAcOD3Dummy_c::fn_599_7A0() { + for (int i = 0; i < 8; i++) { + if (dScGame_c::isCurrentStage(d3Stages[i])) { + return i; + } + } + return -1; +} + +// get spot for tile +extern "C" s32 fn_80195730(dAcOD3Dummy_c *, s32 tile); + +void dAcOD3Dummy_c::fn_599_810() { + s32 currentStageSpot = fn_80195730(this, field_0x156C); + + for (int i = 0; i < 8; i++) { + if (i == field_0x156C) { + continue; + } + s32 spot = fn_80195730(this, i); + if (spot < 0) { + continue; + } + mVec3_c vec( + (spot % 3 - currentStageSpot % 3) * 7000.f, mPosition.y, (spot / 3 - currentStageSpot / 3) * 7000.f + ); + field_13B0[i].transS(vec); + } +} + +void dAcOD3Dummy_c::fn_599_940() { + if (field_0x1578 == 0) { + for (int i = 0; i < 8; i++) { + if (i == field_0x156C) { + continue; + } + dBgS::GetInstance()->RegistBg(&mBgWs[i], this); + } + field_0x1578 = 1; + } +} diff --git a/src/d/col/bg/d_bg_w_base.cpp b/src/d/col/bg/d_bg_w_base.cpp index 4efd5109..4df8b850 100644 --- a/src/d/col/bg/d_bg_w_base.cpp +++ b/src/d/col/bg/d_bg_w_base.cpp @@ -98,6 +98,6 @@ bool dBgW_Base::ChkReady() const { return true; } -void dBgW_Base::Set0x2F(u8 val) { +void dBgW_Base::Set0x2F(s32 val) { field_0x2F = val; } From df5b90c22a33a8956d402534528fbd49e0daf39c Mon Sep 17 00:00:00 2001 From: lepelog <25211966+lepelog@users.noreply.github.com> Date: Sun, 18 Oct 2026 23:13:42 +0200 Subject: [PATCH 2/2] d_a_obj_D3_dummy documented --- .../rels/d_a_obj_D3_dummyNP/symbols.txt | 72 +++++++++---------- config/SOUE01/symbols.txt | 2 +- include/d/a/obj/d_a_obj_D3_dummy.h | 26 +++---- src/REL/d/a/obj/d_a_obj_D3_dummy.cpp | 57 ++++++++------- src/REL/d/a/obj/d_a_obj_control_panel.cpp | 4 +- 5 files changed, 80 insertions(+), 81 deletions(-) diff --git a/config/SOUE01/rels/d_a_obj_D3_dummyNP/symbols.txt b/config/SOUE01/rels/d_a_obj_D3_dummyNP/symbols.txt index 479c0c39..4c40e490 100644 --- a/config/SOUE01/rels/d_a_obj_D3_dummyNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_D3_dummyNP/symbols.txt @@ -18,9 +18,9 @@ draw__13dAcOD3Dummy_cFv = .text:0x00000760; // type:function size:0x8 initializeState_Wait__13dAcOD3Dummy_cFv = .text:0x00000770; // type:function size:0x4 executeState_Wait__13dAcOD3Dummy_cFv = .text:0x00000780; // type:function size:0x4 finalizeState_Wait__13dAcOD3Dummy_cFv = .text:0x00000790; // type:function size:0x4 -fn_599_7A0__13dAcOD3Dummy_cFv = .text:0x000007A0; // type:function size:0x64 -fn_599_810__13dAcOD3Dummy_cFv = .text:0x00000810; // type:function size:0x128 -fn_599_940__13dAcOD3Dummy_cFv = .text:0x00000940; // type:function size:0x80 +getCurrentSkyKeepRoomTileId__13dAcOD3Dummy_cFv = .text:0x000007A0; // type:function size:0x64 +updateTileMtx__13dAcOD3Dummy_cFv = .text:0x00000810; // type:function size:0x128 +registerBgs__13dAcOD3Dummy_cFv = .text:0x00000940; // type:function size:0x80 __dt__13dAcOD3Dummy_cFv = .text:0x000009C0; // type:function size:0xD8 getStateID__82sStateMgr_c<13dAcOD3Dummy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000AA0; // type:function size:0x10 build__29sFStateFct_c<13dAcOD3Dummy_c>FRC12sStateIDIf_c = .text:0x00000AB0; // type:function size:0x60 @@ -43,38 +43,38 @@ isSameName__28sFStateID_c<13dAcOD3Dummy_c>CFPCc = .text:0x00000DE0; // type:func _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global __destroy_global_chain_reference = .dtors:0x00000000; // type:object size:0x4 scope:global -lbl_599_rodata_0 = .rodata:0x00000000; // type:object size:0x20 data:4byte -lbl_599_rodata_20 = .rodata:0x00000020; // type:object size:0x4 align:4 data:float -lbl_599_rodata_24 = .rodata:0x00000024; // type:object size:0x4 align:4 data:float -lbl_599_rodata_28 = .rodata:0x00000028; // type:object size:0x4 align:4 data:float -lbl_599_rodata_30 = .rodata:0x00000030; // type:object size:0x8 align:8 data:double -lbl_599_data_0 = .data:0x00000000; // type:object size:0x8 data:4byte -lbl_599_data_8 = .data:0x00000008; // type:object size:0x7 data:string -lbl_599_data_10 = .data:0x00000010; // type:object size:0x7 data:string -lbl_599_data_18 = .data:0x00000018; // type:object size:0x7 data:string -lbl_599_data_20 = .data:0x00000020; // type:object size:0x7 data:string -lbl_599_data_28 = .data:0x00000028; // type:object size:0x7 data:string -lbl_599_data_30 = .data:0x00000030; // type:object size:0x7 data:string -lbl_599_data_38 = .data:0x00000038; // type:object size:0x7 data:string -d3Stages = .data:0x00000040; // type:object size:0x20 data:4byte +lbl_599_rodata_0 = .rodata:0x00000000; // type:object size:0x20 scope:local data:4byte +lbl_599_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local align:4 data:float +lbl_599_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local align:4 data:float +lbl_599_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local align:4 data:float +lbl_599_rodata_30 = .rodata:0x00000030; // type:object size:0x8 scope:local align:8 data:double +lbl_599_data_0 = .data:0x00000000; // type:object size:0x8 scope:local data:4byte +lbl_599_data_8 = .data:0x00000008; // type:object size:0x7 scope:local data:string +lbl_599_data_10 = .data:0x00000010; // type:object size:0x7 scope:local data:string +lbl_599_data_18 = .data:0x00000018; // type:object size:0x7 scope:local data:string +lbl_599_data_20 = .data:0x00000020; // type:object size:0x7 scope:local data:string +lbl_599_data_28 = .data:0x00000028; // type:object size:0x7 scope:local data:string +lbl_599_data_30 = .data:0x00000030; // type:object size:0x7 scope:local data:string +lbl_599_data_38 = .data:0x00000038; // type:object size:0x7 scope:local data:string +d3Stages = .data:0x00000040; // type:object size:0x20 scope:local data:4byte g_profile_OBJ_D3_DUMMY = .data:0x00000060; // type:object size:0x10 -lbl_599_data_70 = .data:0x00000070; // type:object size:0x3 data:string -lbl_599_data_74 = .data:0x00000074; // type:object size:0x3 data:string -lbl_599_data_78 = .data:0x00000078; // type:object size:0x3 data:string -lbl_599_data_7C = .data:0x0000007C; // type:object size:0x3 data:string -lbl_599_data_80 = .data:0x00000080; // type:object size:0x3 data:string -lbl_599_data_84 = .data:0x00000084; // type:object size:0x3 data:string -lbl_599_data_88 = .data:0x00000088; // type:object size:0x3 data:string -lbl_599_data_8C = .data:0x0000008C; // type:object size:0x3 data:string -lbl_599_data_90 = .data:0x00000090; // type:object size:0xB data:string -lbl_599_data_9C = .data:0x0000009C; // type:object size:0xF data:string -lbl_599_data_AC = .data:0x000000AC; // type:object size:0x1B data:string -__vt__13dAcOD3Dummy_c = .data:0x000000C8; // type:object size:0x80 -lbl_599_data_148 = .data:0x00000148; // type:object size:0x30 -lbl_599_data_178 = .data:0x00000178; // type:object size:0x30 -lbl_599_data_1A8 = .data:0x000001A8; // type:object size:0x18 -lbl_599_data_1C0 = .data:0x000001C0; // type:object size:0x58 -lbl_599_data_218 = .data:0x00000218; // type:object size:0x34 +lbl_599_data_70 = .data:0x00000070; // type:object size:0x3 scope:local data:string +lbl_599_data_74 = .data:0x00000074; // type:object size:0x3 scope:local data:string +lbl_599_data_78 = .data:0x00000078; // type:object size:0x3 scope:local data:string +lbl_599_data_7C = .data:0x0000007C; // type:object size:0x3 scope:local data:string +lbl_599_data_80 = .data:0x00000080; // type:object size:0x3 scope:local data:string +lbl_599_data_84 = .data:0x00000084; // type:object size:0x3 scope:local data:string +lbl_599_data_88 = .data:0x00000088; // type:object size:0x3 scope:local data:string +lbl_599_data_8C = .data:0x0000008C; // type:object size:0x3 scope:local data:string +lbl_599_data_90 = .data:0x00000090; // type:object size:0xB scope:local data:string +lbl_599_data_9C = .data:0x0000009C; // type:object size:0xF scope:local data:string +lbl_599_data_AC = .data:0x000000AC; // type:object size:0x1B scope:local data:string +__vt__13dAcOD3Dummy_c = .data:0x000000C8; // type:object size:0x80 scope:local +lbl_599_data_148 = .data:0x00000148; // type:object size:0x30 scope:local +lbl_599_data_178 = .data:0x00000178; // type:object size:0x30 scope:local +lbl_599_data_1A8 = .data:0x000001A8; // type:object size:0x18 scope:local +lbl_599_data_1C0 = .data:0x000001C0; // type:object size:0x58 scope:local +lbl_599_data_218 = .data:0x00000218; // type:object size:0x34 scope:local __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global -lbl_599_bss_8 = .bss:0x00000008; // type:object size:0x10 -lbl_599_bss_18 = .bss:0x00000018; // type:object size:0x30 data:4byte +lbl_599_bss_8 = .bss:0x00000008; // type:object size:0x10 scope:local +lbl_599_bss_18 = .bss:0x00000018; // type:object size:0x30 scope:local data:4byte diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 3c6a5999..cf364588 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -10462,7 +10462,7 @@ fn_801956F0 = .text:0x801956F0; // type:function size:0x8 fn_80195700 = .text:0x80195700; // type:function size:0x8 AcOShutter__getSide1Room = .text:0x80195710; // type:function size:0xC AcOShutter__getSide2Room = .text:0x80195720; // type:function size:0xC -fn_80195730 = .text:0x80195730; // type:function size:0x64 +getSpotForTile__13dAcOD3Dummy_cFl = .text:0x80195730; // type:function size:0x64 fn_801957A0 = .text:0x801957A0; // type:function size:0xC fn_801957B0 = .text:0x801957B0; // type:function size:0x1D0 fn_80195980 = .text:0x80195980; // type:function size:0x48 diff --git a/include/d/a/obj/d_a_obj_D3_dummy.h b/include/d/a/obj/d_a_obj_D3_dummy.h index 3e7c5f28..ceeae272 100644 --- a/include/d/a/obj/d_a_obj_D3_dummy.h +++ b/include/d/a/obj/d_a_obj_D3_dummy.h @@ -19,24 +19,24 @@ public: STATE_FUNC_DECLARE(dAcOD3Dummy_c, Wait); - void setField_0x1570(u8 val) { - field_0x1570 = val; + void setUpdateTilePositionsSignal(u8 val) { + mUpdateTilePositions = val; } - s32 fn_599_7A0(); - void fn_599_810(); - void fn_599_940(); + s32 getCurrentSkyKeepRoomTileId(); + void updateTileMtx(); + void registerBgs(); + // code is in the dol + s32 getSpotForTile(s32); private: - /* 0x0330 */ dBgW mBgWs[8]; - /* 0x13B0 */ mMtx_c field_13B0[8]; + /* 0x0330 */ dBgW mTileBgWs[8]; + /* 0x13B0 */ mMtx_c mTileMtx[8]; /* 0x1530 */ STATE_MGR_DECLARE(dAcOD3Dummy_c); - /* 0x156C */ s32 field_0x156C; - /* 0x1570 */ u8 field_0x1570; - /* 0x1571 */ u8 field_0x1571[3]; - /* 0x1574 */ void *field_0x1574; - /* 0x1578 */ u8 field_0x1578; - /* 0x1579 */ u8 field_0x1579[0x157C - 0x1579]; + /* 0x156C */ s32 mCurrentRoomTileId; + /* 0x1570 */ bool mUpdateTilePositions; + /* 0x1574 */ void *mIconData; + /* 0x1578 */ bool mHasBgsRegistered; }; #endif diff --git a/src/REL/d/a/obj/d_a_obj_D3_dummy.cpp b/src/REL/d/a/obj/d_a_obj_D3_dummy.cpp index 60c9a671..fd854446 100644 --- a/src/REL/d/a/obj/d_a_obj_D3_dummy.cpp +++ b/src/REL/d/a/obj/d_a_obj_D3_dummy.cpp @@ -22,27 +22,27 @@ bool dAcOD3Dummy_c::createHeap() { const char *names[8] = { "00", "01", "02", "03", "04", "05", "06", "07", }; - field_0x156C = fn_599_7A0(); - fn_599_810(); + mCurrentRoomTileId = getCurrentSkyKeepRoomTileId(); + updateTileMtx(); for (int i = 0; i < 8; i++) { - if (i == field_0x156C) { + if (i == mCurrentRoomTileId) { continue; } void *dzb = getOarcDZB(oarcName, names[i]); void *plc = getOarcPLC(oarcName, names[i]); - if (mBgWs[i].Set((cBgD_t *)dzb, (PLC *)plc, 1, &field_13B0[i], &mScale)) { + if (mTileBgWs[i].Set((cBgD_t *)dzb, (PLC *)plc, cBgW::MOVE_BG_e, &mTileMtx[i], &mScale)) { return false; } - bool result = mBgWs[i].InitMapStuff(&mAllocator); + bool result = mTileBgWs[i].InitMapStuff(&mAllocator); if (!result) { return false; } - mBgWs[i].Set0x2F(i); + mTileBgWs[i].Set0x2F(i); } - field_0x1574 = getOarcFile(oarcName, iconName); - if (field_0x1574 == nullptr) { + mIconData = getOarcFile(oarcName, iconName); + if (mIconData == nullptr) { return false; } @@ -51,8 +51,9 @@ bool dAcOD3Dummy_c::createHeap() { int dAcOD3Dummy_c::create() { CREATE_ALLOCATOR_SIZE(dAcOD3Dummy_c, 0x40000); + // check has map if (DungeonflagManager::sInstance->getCounterOrFlag(2, 8)) { - fn_599_940(); + registerBgs(); } mAcceleration = 0.f; mMaxSpeed = 0.f; @@ -66,19 +67,20 @@ int dAcOD3Dummy_c::doDelete() { } int dAcOD3Dummy_c::actorExecute() { + // check has map if (DungeonflagManager::sInstance->getCounterOrFlag(2, 8)) { - fn_599_940(); + registerBgs(); } mStateMgr.executeState(); - if (field_0x1570) { - fn_599_810(); + if (mUpdateTilePositions) { + updateTileMtx(); for (int i = 0; i < 8; i++) { - if (i != field_0x156C) { - mBgWs[i].Move(); + if (i != mCurrentRoomTileId) { + mTileBgWs[i].Move(); } } } - field_0x1570 = 0; + mUpdateTilePositions = false; return SUCCEEDED; } @@ -90,7 +92,7 @@ void dAcOD3Dummy_c::initializeState_Wait() {} void dAcOD3Dummy_c::executeState_Wait() {} void dAcOD3Dummy_c::finalizeState_Wait() {} -s32 dAcOD3Dummy_c::fn_599_7A0() { +s32 dAcOD3Dummy_c::getCurrentSkyKeepRoomTileId() { for (int i = 0; i < 8; i++) { if (dScGame_c::isCurrentStage(d3Stages[i])) { return i; @@ -99,35 +101,32 @@ s32 dAcOD3Dummy_c::fn_599_7A0() { return -1; } -// get spot for tile -extern "C" s32 fn_80195730(dAcOD3Dummy_c *, s32 tile); - -void dAcOD3Dummy_c::fn_599_810() { - s32 currentStageSpot = fn_80195730(this, field_0x156C); +void dAcOD3Dummy_c::updateTileMtx() { + s32 currentStageSpot = getSpotForTile(mCurrentRoomTileId); for (int i = 0; i < 8; i++) { - if (i == field_0x156C) { + if (i == mCurrentRoomTileId) { continue; } - s32 spot = fn_80195730(this, i); + s32 spot = getSpotForTile(i); if (spot < 0) { continue; } mVec3_c vec( (spot % 3 - currentStageSpot % 3) * 7000.f, mPosition.y, (spot / 3 - currentStageSpot / 3) * 7000.f ); - field_13B0[i].transS(vec); + mTileMtx[i].transS(vec); } } -void dAcOD3Dummy_c::fn_599_940() { - if (field_0x1578 == 0) { +void dAcOD3Dummy_c::registerBgs() { + if (!mHasBgsRegistered) { for (int i = 0; i < 8; i++) { - if (i == field_0x156C) { + if (i == mCurrentRoomTileId) { continue; } - dBgS::GetInstance()->RegistBg(&mBgWs[i], this); + dBgS::GetInstance()->RegistBg(&mTileBgWs[i], this); } - field_0x1578 = 1; + mHasBgsRegistered = true; } } diff --git a/src/REL/d/a/obj/d_a_obj_control_panel.cpp b/src/REL/d/a/obj/d_a_obj_control_panel.cpp index a6a0457d..5efd6752 100644 --- a/src/REL/d/a/obj/d_a_obj_control_panel.cpp +++ b/src/REL/d/a/obj/d_a_obj_control_panel.cpp @@ -263,7 +263,7 @@ void dAcOCtrlPnl_c::finishMove() { sIsInSkykeepPuzzle = false; savePuzzleState(); if (mD3DummyRef.isLinked()) { - mD3DummyRef.get()->setField_0x1570(1); + mD3DummyRef.get()->setUpdateTilePositionsSignal(1); } if (changed) { mStateMgr.changeState(StateID_EndEvent); @@ -479,7 +479,7 @@ void dAcOCtrlPnl_c::handleControl() { dAcOD3Dummy_c *dummy = mD3DummyRef.get(); if (dummy != nullptr) { savePuzzleState(); - dummy->setField_0x1570(1); + dummy->setUpdateTilePositionsSignal(1); } } allowInteraction = false;