Merge remote-tracking branch 'upstream/HEAD' into bases

This commit is contained in:
elijah-thomas774
2026-10-19 22:51:09 -04:00
8 changed files with 192 additions and 55 deletions
@@ -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
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
lbl_599_data_40 = .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
lbl_599_data_C8 = .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
+2 -2
View File
@@ -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
@@ -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
+1 -1
View File
@@ -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"),
+21 -7
View File
@@ -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;
void setUpdateTilePositionsSignal(u8 val) {
mUpdateTilePositions = val;
}
s32 getCurrentSkyKeepRoomTileId();
void updateTileMtx();
void registerBgs();
// code is in the dol
s32 getSpotForTile(s32);
private:
/* 0x0330 */ dBgW field_330[8];
/* 0x13B0 */ u8 unk[0x180];
/* 0x0330 */ dBgW mTileBgWs[8];
/* 0x13B0 */ mMtx_c mTileMtx[8];
/* 0x1530 */ STATE_MGR_DECLARE(dAcOD3Dummy_c);
/* 0x156C */ u8 field_0x156C[4];
/* 0x1570 */ u8 field_0x1570;
/* 0x1571 */ u8 field_0x1571[0xB];
/* 0x156C */ s32 mCurrentRoomTileId;
/* 0x1570 */ bool mUpdateTilePositions;
/* 0x1574 */ void *mIconData;
/* 0x1578 */ bool mHasBgsRegistered;
};
#endif
+1 -1
View File
@@ -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();
+123
View File
@@ -1,9 +1,132 @@
#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",
};
mCurrentRoomTileId = getCurrentSkyKeepRoomTileId();
updateTileMtx();
for (int i = 0; i < 8; i++) {
if (i == mCurrentRoomTileId) {
continue;
}
void *dzb = getOarcDZB(oarcName, names[i]);
void *plc = getOarcPLC(oarcName, names[i]);
if (mTileBgWs[i].Set((cBgD_t *)dzb, (PLC *)plc, cBgW::MOVE_BG_e, &mTileMtx[i], &mScale)) {
return false;
}
bool result = mTileBgWs[i].InitMapStuff(&mAllocator);
if (!result) {
return false;
}
mTileBgWs[i].Set0x2F(i);
}
mIconData = getOarcFile(oarcName, iconName);
if (mIconData == nullptr) {
return false;
}
return true;
}
int dAcOD3Dummy_c::create() {
CREATE_ALLOCATOR_SIZE(dAcOD3Dummy_c, 0x40000);
// check has map
if (DungeonflagManager::sInstance->getCounterOrFlag(2, 8)) {
registerBgs();
}
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() {
// check has map
if (DungeonflagManager::sInstance->getCounterOrFlag(2, 8)) {
registerBgs();
}
mStateMgr.executeState();
if (mUpdateTilePositions) {
updateTileMtx();
for (int i = 0; i < 8; i++) {
if (i != mCurrentRoomTileId) {
mTileBgWs[i].Move();
}
}
}
mUpdateTilePositions = false;
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::getCurrentSkyKeepRoomTileId() {
for (int i = 0; i < 8; i++) {
if (dScGame_c::isCurrentStage(d3Stages[i])) {
return i;
}
}
return -1;
}
void dAcOD3Dummy_c::updateTileMtx() {
s32 currentStageSpot = getSpotForTile(mCurrentRoomTileId);
for (int i = 0; i < 8; i++) {
if (i == mCurrentRoomTileId) {
continue;
}
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
);
mTileMtx[i].transS(vec);
}
}
void dAcOD3Dummy_c::registerBgs() {
if (!mHasBgsRegistered) {
for (int i = 0; i < 8; i++) {
if (i == mCurrentRoomTileId) {
continue;
}
dBgS::GetInstance()->RegistBg(&mTileBgWs[i], this);
}
mHasBgsRegistered = true;
}
}
+2 -2
View File
@@ -261,7 +261,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);
@@ -477,7 +477,7 @@ void dAcOCtrlPnl_c::handleControl() {
dAcOD3Dummy_c *dummy = mD3DummyRef.get();
if (dummy != nullptr) {
savePuzzleState();
dummy->setField_0x1570(1);
dummy->setUpdateTilePositionsSignal(1);
}
}
allowInteraction = false;
+1 -1
View File
@@ -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;
}