From d3d13aa6746636692228a7f1a1faca42e597a109 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Sun, 12 Nov 2023 21:25:55 -0500 Subject: [PATCH 1/4] Nearly 100% d_a_swhit0 --- include/d/actor/d_a_swhit0.h | 63 ++++ src/d/actor/d_a_swhit0.cpp | 655 +++++++++++++++++++++-------------- 2 files changed, 461 insertions(+), 257 deletions(-) create mode 100644 include/d/actor/d_a_swhit0.h diff --git a/include/d/actor/d_a_swhit0.h b/include/d/actor/d_a_swhit0.h new file mode 100644 index 000000000..bac103b28 --- /dev/null +++ b/include/d/actor/d_a_swhit0.h @@ -0,0 +1,63 @@ +#ifndef D_A_SWHIT0_H +#define D_A_SWHIT0_H + +#include "d/d_cc_d.h" +#include "f_op/f_op_actor.h" +#include "m_Do/m_Do_ext.h" +#include "dolphin/types.h" + +class daSwhit0_c : public fopAc_ac_c { +public: + ~daSwhit0_c() { + + } + + s32 getSwNo(); + u8 getEvNo(); + u8 getType(); + u8 getTimer(); + s32 getSwNo2(); + + s32 CreateHeap(); + void decisionRtType(); + + s32 CreateInit(); + s32 create(); + + s32 checkHit(); + s32 DemoProc(); + + s32 actionOffWait(); + s32 actionToOnReady(); + s32 actionToOnOrder(); + s32 actionToOnDemo(); + s32 actionOnWait(); + s32 actionOnTimer(); + + void setDrawMtx(); + + /* 0x0290 */ J3DModel* mpModel; + /* 0x0294 */ mDoExt_bckAnm mAnm; + /* 0x02A4 */ mDoExt_btkAnm mTexAnm; + + /* 0x02B8 */ dCcD_Stts mColStatus; + /* 0x02F4 */ dCcD_Cyl mColCyl; + /* 0x0424 */ dCcD_Sph mColSph; + + /* 0x0550 */ u8 mHitTimer; + /* 0x0551 */ u8 mState; + /* 0x0552 */ u8 mTimer; + /* 0x0553 */ u8 mRetType; + + /* 0x0554 */ s16 mOnTimer; + /* 0x0556 */ u16 mFlags; + /* 0x0558 */ s16 mEventIdx; + + /* 0x055C */ s32 mStaffId; + + void onFlag(u16 flag) { mFlags |= flag; } + void offFlag(u16 flag) { mFlags &= ~flag; } + s32 checkFlag(u16 flag) { return mFlags & flag; } +}; + +#endif diff --git a/src/d/actor/d_a_swhit0.cpp b/src/d/actor/d_a_swhit0.cpp index a7c6c6f01..35e0fb287 100644 --- a/src/d/actor/d_a_swhit0.cpp +++ b/src/d/actor/d_a_swhit0.cpp @@ -3,341 +3,482 @@ // Translation Unit: d_a_swhit0.cpp // -#include "d_a_swhit0.h" -#include "dolphin/types.h" +#include "d/actor/d_a_swhit0.h" +#include "d/d_com_inf_game.h" +#include "d/d_procname.h" +#include "f_op/f_op_actor_mng.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "m_Do/m_Do_mtx.h" + +static dCcD_SrcSph l_sph_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ 0, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0, + /* SrcObjTg Type */ 0xFF1DFEFF, + /* SrcObjTg SPrm */ 9, + /* SrcObjCo SPrm */ 0, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt GFlag */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg GFlag */ 0, + /* SrcGObjCo GFlag */ 0, + }, + // cM3dGSphS + { + /* Center */ 0.0f, 0.0f, 0.0f, + /* Radius */ 35.0f, + }, +}; + +static dCcD_SrcCyl l_cyl_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ 0, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0, + /* SrcObjTg Type */ 0, + /* SrcObjTg SPrm */ 0, + /* SrcObjCo SPrm */ 0x75, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt GFlag */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg GFlag */ 0x00, + /* SrcGObjCo GFlag */ 0, + }, + // cM3dGCylS + { + /* Center */ 0.0f, 0.0f, 0.0f, + /* Radius */ 25.0f, + /* Height */ 100.0f, + }, +}; /* 00000078-00000084 .text getSwNo__10daSwhit0_cFv */ -void daSwhit0_c::getSwNo() { - /* Nonmatching */ +s32 daSwhit0_c::getSwNo() { + return fopAcM_GetParam(this) & 0xFF; } /* 00000084-00000090 .text getEvNo__10daSwhit0_cFv */ -void daSwhit0_c::getEvNo() { - /* Nonmatching */ +u8 daSwhit0_c::getEvNo() { + return fopAcM_GetParam(this) >> 8; } /* 00000090-0000009C .text getType__10daSwhit0_cFv */ -void daSwhit0_c::getType() { - /* Nonmatching */ +u8 daSwhit0_c::getType() { + return (fopAcM_GetParam(this) >> 0x10) & 0x0F; } /* 0000009C-000000B8 .text getTimer__10daSwhit0_cFv */ -void daSwhit0_c::getTimer() { +u8 daSwhit0_c::getTimer() { /* Nonmatching */ + u32 timer = fopAcM_GetParamBit(mBase.mParameters, 0x14, 0xFF); + + if (timer != 0xFF) { + return timer; + } + + return 0; } /* 000000B8-000000C4 .text getSwNo2__10daSwhit0_cFv */ -void daSwhit0_c::getSwNo2() { - /* Nonmatching */ +s32 daSwhit0_c::getSwNo2() { + return orig.angle.z & 0xFF; } /* 000000C4-00000230 .text CreateHeap__10daSwhit0_cFv */ -void daSwhit0_c::CreateHeap() { - /* Nonmatching */ +s32 daSwhit0_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Always", 0x35); + JUT_ASSERT(0xD5, modelData != 0); + + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000202); + if (mpModel == NULL) { + return FALSE; + } + + J3DAnmTransform* anm = (J3DAnmTransform*)dComIfG_getObjectRes("Always", 0x0D); + if (mAnm.init(modelData, anm, true, 0x02, 1.0f, 0, -1, false) == 0) { + return FALSE; + } + + J3DAnmTextureSRTKey* texAnm = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Always", 0x58); + if (mTexAnm.init(modelData, texAnm, true, 0x02, 1.0f, 0, -1, false, 0) == 0) { + return FALSE; + } + + return TRUE; } /* 00000230-00000270 .text decisionRtType__10daSwhit0_cFv */ void daSwhit0_c::decisionRtType() { - /* Nonmatching */ + if (orig.angle.x == 0) { + mRetType = 0; + } + else if (orig.angle.x < -0x4E20 || orig.angle.x > 0x4E20) { + mRetType = 2; + return; + } + else { + mRetType = 1; + } } /* 00000270-000004E8 .text CreateInit__10daSwhit0_cFv */ -void daSwhit0_c::CreateInit() { - /* Nonmatching */ +s32 daSwhit0_c::CreateInit() { + setDrawMtx(); + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + decisionRtType(); + + mColStatus.Init(0xFF, 0xFF, this); + + mAttentionInfo.mPosition.x += cM_ssin(orig.angle.x) * 65.0f * cM_ssin(orig.angle.y); + mAttentionInfo.mPosition.y += cM_scos(orig.angle.x) * 65.0f; + mAttentionInfo.mPosition.z += cM_ssin(orig.angle.x) * 65.0f * cM_scos(orig.angle.y); + + mEyePos = mAttentionInfo.mPosition; + + if (mRetType == 0) { + mColCyl.Set(l_cyl_src); + mColCyl.SetStts(&mColStatus); + mColCyl.SetC(getPosition()); + + onFlag(0x02); + } + + mColSph.Set(l_sph_src); + mColSph.SetStts(&mColStatus); + mColSph.SetC(mAttentionInfo.mPosition); + + if (dComIfGs_isSwitch(getSwNo(), current.roomNo)) { + mState = 4; + onFlag(0x01); + } + else { + mState = 0; + offFlag(0x01); + } + + if (getType() == 0x03) { + mEventIdx = dComIfGp_evmng_getEventIdx("DEFAULT_SWITCH_NOSOUND", getEvNo()); + } + else { + mEventIdx = dComIfGp_evmng_getEventIdx("DEFAULT_SWITCH", getEvNo()); + } + + return TRUE; } /* 000004E8-00000508 .text CheckCreateHeap__FP10fopAc_ac_c */ -void CheckCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +static s32 CheckCreateHeap(fopAc_ac_c* i_actr) { + return static_cast(i_actr)->CreateHeap(); } /* 00000508-000006C0 .text create__10daSwhit0_cFv */ -void daSwhit0_c::create() { - /* Nonmatching */ -} +s32 daSwhit0_c::create() { + fopAcM_SetupActor(this, daSwhit0_c); -/* 000006C0-0000078C .text __dt__8dCcD_SphFv */ -dCcD_Sph::~dCcD_Sph() { - /* Nonmatching */ -} + shape_angle.z = 0; + current.angle.z = 0; -/* 0000078C-000007D4 .text __dt__8cM3dGSphFv */ -cM3dGSph::~cM3dGSph() { - /* Nonmatching */ -} + if ((fopAcM_entrySolidHeap(this, (heapCallbackFunc)CheckCreateHeap, 0x34A0) & 0xFF) == 0) { + return cPhs_ERROR_e; + } -/* 000007D4-000008A0 .text __dt__8dCcD_CylFv */ -dCcD_Cyl::~dCcD_Cyl() { - /* Nonmatching */ -} - -/* 000008A0-000008E8 .text __dt__8cM3dGCylFv */ -cM3dGCyl::~cM3dGCyl() { - /* Nonmatching */ -} - -/* 000008E8-00000944 .text __dt__14cCcD_ShapeAttrFv */ -cCcD_ShapeAttr::~cCcD_ShapeAttr() { - /* Nonmatching */ -} - -/* 00000944-0000098C .text __dt__8cM3dGAabFv */ -cM3dGAab::~cM3dGAab() { - /* Nonmatching */ -} - -/* 0000098C-000009E8 .text __dt__10dCcD_GSttsFv */ -dCcD_GStts::~dCcD_GStts() { - /* Nonmatching */ -} - -/* 000009E8-00000A44 .text __dt__13mDoExt_btkAnmFv */ -mDoExt_btkAnm::~mDoExt_btkAnm() { - /* Nonmatching */ -} - -/* 00000A44-00000AA0 .text __dt__13mDoExt_bckAnmFv */ -mDoExt_bckAnm::~mDoExt_bckAnm() { - /* Nonmatching */ -} - -/* 00000AA0-00000AE8 .text __dt__14mDoExt_baseAnmFv */ -mDoExt_baseAnm::~mDoExt_baseAnm() { - /* Nonmatching */ + CreateInit(); + return cPhs_COMPLEATE_e; } /* 00000AE8-00000B44 .text checkHit__10daSwhit0_cFv */ -void daSwhit0_c::checkHit() { - /* Nonmatching */ +s32 daSwhit0_c::checkHit() { + if (cLib_calcTimer(&mHitTimer) == 0 && mColSph.ChkTgHit() != 0) { + mHitTimer = 8; + return TRUE; + } + + return FALSE; } /* 00000B44-00000C48 .text DemoProc__10daSwhit0_cFv */ -void daSwhit0_c::DemoProc() { - /* Nonmatching */ +s32 daSwhit0_c::DemoProc() { + static char* action_table[] = { + "WAIT", + "CHANGE" + }; + + if (dComIfGp_evmng_getIsAddvance(mStaffId)) + { + switch(dComIfGp_evmng_getMyActIdx(mStaffId, action_table, 2, 0, 0)) { + case 1: + dComIfGs_onSwitch(getSwNo(), fopAcM_GetRoomNo(this)); + onFlag(0x01); + + fopAcM_seStart(this, JA_SE_SHOCK_SW_ON, 0); + break; + } + } + + dComIfGp_evmng_cutEnd(mStaffId); + return TRUE; } /* 00000C48-00000D8C .text actionOffWait__10daSwhit0_cFv */ -void daSwhit0_c::actionOffWait() { - /* Nonmatching */ +s32 daSwhit0_c::actionOffWait() { + u32 type = getType(); + + if (checkHit() != 0) { + switch(type) { + case 1: + mState = 1; + mTimer = 5; + break; + case 3: + mState = 2; + + fopAcM_orderOtherEventId(this, mEventIdx, getEvNo(), 0xFFFF, 0, 1); + mEvtInfo.onCondition(0x02); + + break; + default: + mState = 4; + onFlag(0x01); + + dComIfGs_onSwitch(getSwNo(), fopAcM_GetRoomNo(this)); + break; + } + + fopAcM_seStart(this, JA_SE_OBJ_COL_SWC_NSTONE, 0); + } + + return TRUE; } /* 00000D8C-00000E24 .text actionToOnReady__10daSwhit0_cFv */ -void daSwhit0_c::actionToOnReady() { - /* Nonmatching */ +s32 daSwhit0_c::actionToOnReady() { + if (dComIfGp_event_runCheck() != 0) { + return TRUE; + } + + if (mTimer != 0) { + mTimer--; + } + else { + mState = 2; + + fopAcM_orderOtherEventId(this, mEventIdx, getEvNo(), 0xFFFF, 0, 1); + mEvtInfo.onCondition(0x02); + } + + return TRUE; } /* 00000E24-00000EC8 .text actionToOnOrder__10daSwhit0_cFv */ -void daSwhit0_c::actionToOnOrder() { - /* Nonmatching */ +s32 daSwhit0_c::actionToOnOrder() { + if (mEvtInfo.checkCommandDemoAccrpt()) { + mState = 3; + mStaffId = dComIfGp_evmng_getMyStaffId("SWITCH", NULL, 0); + + DemoProc(); + } + else { + fopAcM_orderOtherEventId(this, mEventIdx, getEvNo(), 0xFFFF, 0, 1); + mEvtInfo.onCondition(0x02); + } + + return TRUE; } /* 00000EC8-00000F3C .text actionToOnDemo__10daSwhit0_cFv */ -void daSwhit0_c::actionToOnDemo() { - /* Nonmatching */ +s32 daSwhit0_c::actionToOnDemo() { + if (dComIfGp_evmng_endCheck(mEventIdx)) { + mState = 4; + dComIfGp_event_onEventFlag(0x08); + + return TRUE; + } + + DemoProc(); + + return TRUE; } /* 00000F3C-0000104C .text actionOnWait__10daSwhit0_cFv */ -void daSwhit0_c::actionOnWait() { - /* Nonmatching */ +s32 daSwhit0_c::actionOnWait() { + if (checkHit() != 0) { + fopAcM_seStart(this, JA_SE_OBJ_COL_SWC_NSTONE, 0); + } + + if (getType() == 0x02) { + if (!dComIfGs_isSwitch(getSwNo(), current.roomNo)) { + offFlag(0x01); + mState = 0; + + return TRUE; + } + } + + if (getTimer() != 0) { + mOnTimer = getTimer() * 0x0F; + mState = 5; + } + + return TRUE; } /* 0000104C-0000115C .text actionOnTimer__10daSwhit0_cFv */ -void daSwhit0_c::actionOnTimer() { - /* Nonmatching */ +s32 daSwhit0_c::actionOnTimer() { + if (checkHit() != 0) { + fopAcM_seStart(this, JA_SE_OBJ_COL_SWC_NSTONE, 0); + } + + if (dComIfGs_isSwitch(getSwNo2(), current.roomNo)) { + mState = 4; + } + else if (mOnTimer > 0) { + mOnTimer--; + } + else { + offFlag(0x01); + mState = 0; + + dComIfGs_offSwitch(getSwNo(), current.roomNo); + } + + return TRUE; } /* 0000115C-000011E4 .text setDrawMtx__10daSwhit0_cFv */ void daSwhit0_c::setDrawMtx() { - /* Nonmatching */ + mpModel->setBaseScale(mScale); + + mDoMtx_stack_c::transS(getPosition()); + mDoMtx_stack_c::XYZrotM(current.angle); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 000011E4-00001334 .text daSwhit0_Draw__FP10daSwhit0_c */ -void daSwhit0_Draw(daSwhit0_c*) { +static s32 daSwhit0_Draw(daSwhit0_c* i_swhit) { /* Nonmatching */ + static GXColorS10 l_color[] = { + { 0xF0, 0xF5, 0xFF, 0x6E }, + { 0xB4, 0xC8, 0xD2, 0x64 }, + + { 0xE6, 0xC8, 0x00, 0x6E }, + { 0x78, 0x64, 0x32, 0x64 } + }; + + g_env_light.settingTevStruct(TEV_TYPE_BG0, i_swhit->getPositionP(), &i_swhit->mTevStr); + g_env_light.setLightTevColorType(i_swhit->mpModel, &i_swhit->mTevStr); + + J3DModelData* modelData = i_swhit->mpModel->getModelData(); + GXColorS10* colors = i_swhit->checkFlag(0x01) ? l_color + 2 : l_color; + + for (u16 i = 0; i < modelData->getMaterialNum(); i++) { + J3DMaterial* mat = modelData->getMaterialNodePointer(i); + + if (mat->getTevColor(1) != NULL) { + mat->setTevColor(1, (J3DGXColorS10*)&colors[0]); + } + + if (mat->getTevColor(2) != NULL) { + mat->setTevColor(2, (J3DGXColorS10*)&colors[1]); + } + } + + i_swhit->mAnm.entry(modelData); + i_swhit->mTexAnm.entry(modelData); + + mDoExt_modelUpdateDL(i_swhit->mpModel); + + return TRUE; } /* 00001334-00001420 .text daSwhit0_Execute__FP10daSwhit0_c */ -void daSwhit0_Execute(daSwhit0_c*) { - /* Nonmatching */ +static s32 daSwhit0_Execute(daSwhit0_c* i_swhit) { + i_swhit->mAnm.play(); + i_swhit->mTexAnm.play(); + + switch (i_swhit->mState) { + case 0: + i_swhit->actionOffWait(); + break; + case 1: + i_swhit->actionToOnReady(); + break; + case 2: + i_swhit->actionToOnOrder(); + break; + case 3: + i_swhit->actionToOnDemo(); + break; + case 4: + i_swhit->actionOnWait(); + break; + case 5: + i_swhit->actionOnTimer(); + break; + } + + if (i_swhit->checkFlag(0x02)) { + g_dComIfG_gameInfo.play.mCcS.Set(&i_swhit->mColCyl); + } + + g_dComIfG_gameInfo.play.mCcS.Set(&i_swhit->mColSph); + return TRUE; } /* 00001420-00001428 .text daSwhit0_IsDelete__FP10daSwhit0_c */ -void daSwhit0_IsDelete(daSwhit0_c*) { - /* Nonmatching */ +static s32 daSwhit0_IsDelete(daSwhit0_c* i_swhit) { + return TRUE; } /* 00001428-00001450 .text daSwhit0_Delete__FP10daSwhit0_c */ -void daSwhit0_Delete(daSwhit0_c*) { - /* Nonmatching */ +static s32 daSwhit0_Delete(daSwhit0_c* i_swhit) { + i_swhit->~daSwhit0_c(); + return TRUE; } /* 00001450-00001470 .text daSwhit0_Create__FP10fopAc_ac_c */ -void daSwhit0_Create(fopAc_ac_c*) { - /* Nonmatching */ +static s32 daSwhit0_Create(fopAc_ac_c* i_swhit) { + return static_cast(i_swhit)->create(); } -/* 00001470-000014B8 .text __dt__10cCcD_GSttsFv */ -cCcD_GStts::~cCcD_GStts() { - /* Nonmatching */ -} - -/* 000014B8-000014C8 .text GetShapeAttr__8dCcD_SphFv */ -void dCcD_Sph::GetShapeAttr() { - /* Nonmatching */ -} - -/* 000014C8-000014D0 .text GetCoCP__12cCcD_SphAttrFv */ -void cCcD_SphAttr::GetCoCP() { - /* Nonmatching */ -} - -/* 000014D0-000014D8 .text GetCoCP__12cCcD_SphAttrCFv */ -void cCcD_SphAttr::GetCoCP() const { - /* Nonmatching */ -} - -/* 000014D8-000014E0 .text CrossAtTg__12cCcD_SphAttrCFRC12cCcD_AabAttrP4cXyz */ -void cCcD_SphAttr::CrossAtTg(const cCcD_AabAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 000014E0-000014E8 .text CrossAtTg__12cCcD_SphAttrCFRC12cCcD_PntAttrP4cXyz */ -void cCcD_SphAttr::CrossAtTg(const cCcD_PntAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 000014E8-00001520 .text CrossAtTg__12cCcD_SphAttrCFRC14cCcD_ShapeAttrP4cXyz */ -void cCcD_SphAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 00001520-00001528 .text CrossCo__12cCcD_SphAttrCFRC12cCcD_AabAttrPf */ -void cCcD_SphAttr::CrossCo(const cCcD_AabAttr&, float*) const { - /* Nonmatching */ -} - -/* 00001528-00001530 .text CrossCo__12cCcD_SphAttrCFRC12cCcD_TriAttrPf */ -void cCcD_SphAttr::CrossCo(const cCcD_TriAttr&, float*) const { - /* Nonmatching */ -} - -/* 00001530-00001538 .text CrossCo__12cCcD_SphAttrCFRC12cCcD_PntAttrPf */ -void cCcD_SphAttr::CrossCo(const cCcD_PntAttr&, float*) const { - /* Nonmatching */ -} - -/* 00001538-00001570 .text CrossCo__12cCcD_SphAttrCFRC14cCcD_ShapeAttrPf */ -void cCcD_SphAttr::CrossCo(const cCcD_ShapeAttr&, float*) const { - /* Nonmatching */ -} - -/* 00001570-00001574 .text GetGObjInf__12cCcD_GObjInfCFv */ -void cCcD_GObjInf::GetGObjInf() const { - /* Nonmatching */ -} - -/* 00001574-0000157C .text GetShapeAttr__8cCcD_ObjCFv */ -void cCcD_Obj::GetShapeAttr() const { - /* Nonmatching */ -} - -/* 0000157C-0000158C .text GetShapeAttr__8dCcD_CylFv */ -void dCcD_Cyl::GetShapeAttr() { - /* Nonmatching */ -} - -/* 0000158C-00001594 .text GetCoCP__12cCcD_CylAttrFv */ -void cCcD_CylAttr::GetCoCP() { - /* Nonmatching */ -} - -/* 00001594-0000159C .text GetCoCP__12cCcD_CylAttrCFv */ -void cCcD_CylAttr::GetCoCP() const { - /* Nonmatching */ -} - -/* 0000159C-000015A4 .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_AabAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_AabAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 000015A4-000015AC .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_PntAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_PntAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 000015AC-000015E4 .text CrossAtTg__12cCcD_CylAttrCFRC14cCcD_ShapeAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 000015E4-000015EC .text CrossCo__12cCcD_CylAttrCFRC12cCcD_AabAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_AabAttr&, float*) const { - /* Nonmatching */ -} - -/* 000015EC-000015F4 .text CrossCo__12cCcD_CylAttrCFRC12cCcD_TriAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_TriAttr&, float*) const { - /* Nonmatching */ -} - -/* 000015F4-000015FC .text CrossCo__12cCcD_CylAttrCFRC12cCcD_PntAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_PntAttr&, float*) const { - /* Nonmatching */ -} - -/* 000015FC-00001634 .text CrossCo__12cCcD_CylAttrCFRC14cCcD_ShapeAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_ShapeAttr&, float*) const { - /* Nonmatching */ -} - -/* 00001634-0000163C .text CrossAtTg__14cCcD_ShapeAttrCFRC14cCcD_ShapeAttrP4cXyz */ -void cCcD_ShapeAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 0000163C-00001644 .text CrossCo__14cCcD_ShapeAttrCFRC14cCcD_ShapeAttrPf */ -void cCcD_ShapeAttr::CrossCo(const cCcD_ShapeAttr&, float*) const { - /* Nonmatching */ -} - -/* 00001644-00001650 .text GetCoCP__14cCcD_ShapeAttrFv */ -void cCcD_ShapeAttr::GetCoCP() { - /* Nonmatching */ -} - -/* 00001650-0000165C .text GetCoCP__14cCcD_ShapeAttrCFv */ -void cCcD_ShapeAttr::GetCoCP() const { - /* Nonmatching */ -} - -/* 0000165C-00001678 .text cLib_calcTimer__FPUc */ -void cLib_calcTimer(unsigned char*) { - /* Nonmatching */ -} - -/* 00001678-00001680 .text @280@__dt__8dCcD_CylFv */ -void @280@__dt__8dCcD_CylFv { - /* Nonmatching */ -} - -/* 00001680-00001688 .text @248@__dt__8dCcD_CylFv */ -void @248@__dt__8dCcD_CylFv { - /* Nonmatching */ -} - -/* 00001688-00001690 .text @280@__dt__8dCcD_SphFv */ -void @280@__dt__8dCcD_SphFv { - /* Nonmatching */ -} - -/* 00001690-00001698 .text @248@__dt__8dCcD_SphFv */ -void @248@__dt__8dCcD_SphFv { - /* Nonmatching */ -} - -/* 00001698-000018A8 .text __dt__10daSwhit0_cFv */ -daSwhit0_c::~daSwhit0_c() { - /* Nonmatching */ -} +static actor_method_class l_daSwhit0_Method = { + (process_method_func)daSwhit0_Create, + (process_method_func)daSwhit0_Delete, + (process_method_func)daSwhit0_Execute, + (process_method_func)daSwhit0_IsDelete, + (process_method_func)daSwhit0_Draw, +}; +actor_process_profile_definition g_profile_SWHIT0 = { + fpcLy_CURRENT_e, + 8, + fpcPi_CURRENT_e, + PROC_SWHIT0, + &g_fpcLf_Method.mBase, + sizeof(daSwhit0_c), + 0, + 0, + &g_fopAc_Method.base, + 0x0119, + &l_daSwhit0_Method, + fopAcStts_UNK40000_e | fopAcStts_UNK4000_e | fopAcStts_CULL_e, + fopAc_ACTOR_e, + fopAc_CULLBOX_0_e, +}; From 7cf2a85d0c5d3eabf37f6a9c9552f06702cc5d30 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Sun, 12 Nov 2023 21:41:22 -0500 Subject: [PATCH 2/4] Match d_a_swhit0_c::draw --- include/d/actor/d_a_swhit0.h | 2 ++ src/d/actor/d_a_swhit0.cpp | 27 ++++++++++++++++++--------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/include/d/actor/d_a_swhit0.h b/include/d/actor/d_a_swhit0.h index bac103b28..87def4cdc 100644 --- a/include/d/actor/d_a_swhit0.h +++ b/include/d/actor/d_a_swhit0.h @@ -12,6 +12,8 @@ public: } + inline s32 draw(); + s32 getSwNo(); u8 getEvNo(); u8 getType(); diff --git a/src/d/actor/d_a_swhit0.cpp b/src/d/actor/d_a_swhit0.cpp index 35e0fb287..d5897be01 100644 --- a/src/d/actor/d_a_swhit0.cpp +++ b/src/d/actor/d_a_swhit0.cpp @@ -371,8 +371,7 @@ void daSwhit0_c::setDrawMtx() { mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } -/* 000011E4-00001334 .text daSwhit0_Draw__FP10daSwhit0_c */ -static s32 daSwhit0_Draw(daSwhit0_c* i_swhit) { +s32 daSwhit0_c::draw() { /* Nonmatching */ static GXColorS10 l_color[] = { { 0xF0, 0xF5, 0xFF, 0x6E }, @@ -382,11 +381,16 @@ static s32 daSwhit0_Draw(daSwhit0_c* i_swhit) { { 0x78, 0x64, 0x32, 0x64 } }; - g_env_light.settingTevStruct(TEV_TYPE_BG0, i_swhit->getPositionP(), &i_swhit->mTevStr); - g_env_light.setLightTevColorType(i_swhit->mpModel, &i_swhit->mTevStr); + g_env_light.settingTevStruct(TEV_TYPE_BG0, getPositionP(), &mTevStr); + g_env_light.setLightTevColorType(mpModel, &mTevStr); - J3DModelData* modelData = i_swhit->mpModel->getModelData(); - GXColorS10* colors = i_swhit->checkFlag(0x01) ? l_color + 2 : l_color; + J3DModelData* modelData = mpModel->getModelData(); + s32 flag = checkFlag(0x01); + + GXColorS10* colors = l_color; + if (flag) { + colors = l_color + 2; + } for (u16 i = 0; i < modelData->getMaterialNum(); i++) { J3DMaterial* mat = modelData->getMaterialNodePointer(i); @@ -400,14 +404,19 @@ static s32 daSwhit0_Draw(daSwhit0_c* i_swhit) { } } - i_swhit->mAnm.entry(modelData); - i_swhit->mTexAnm.entry(modelData); + mAnm.entry(modelData); + mTexAnm.entry(modelData); - mDoExt_modelUpdateDL(i_swhit->mpModel); + mDoExt_modelUpdateDL(mpModel); return TRUE; } +/* 000011E4-00001334 .text daSwhit0_Draw__FP10daSwhit0_c */ +static s32 daSwhit0_Draw(daSwhit0_c* i_swhit) { + return i_swhit->draw(); +} + /* 00001334-00001420 .text daSwhit0_Execute__FP10daSwhit0_c */ static s32 daSwhit0_Execute(daSwhit0_c* i_swhit) { i_swhit->mAnm.play(); From 860535b90d5d8020ff2b6e4613629de98a42d77a Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Sun, 12 Nov 2023 22:42:08 -0500 Subject: [PATCH 3/4] Match all d_a_swhit0 functions but not ok --- include/d/actor/d_a_swhit0.h | 6 ++---- src/d/actor/d_a_swhit0.cpp | 27 +++++++++++++++------------ 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/include/d/actor/d_a_swhit0.h b/include/d/actor/d_a_swhit0.h index 87def4cdc..33073fb82 100644 --- a/include/d/actor/d_a_swhit0.h +++ b/include/d/actor/d_a_swhit0.h @@ -8,16 +8,14 @@ class daSwhit0_c : public fopAc_ac_c { public: - ~daSwhit0_c() { - - } + ~daSwhit0_c(); inline s32 draw(); s32 getSwNo(); u8 getEvNo(); u8 getType(); - u8 getTimer(); + s32 getTimer(); s32 getSwNo2(); s32 CreateHeap(); diff --git a/src/d/actor/d_a_swhit0.cpp b/src/d/actor/d_a_swhit0.cpp index d5897be01..26180b674 100644 --- a/src/d/actor/d_a_swhit0.cpp +++ b/src/d/actor/d_a_swhit0.cpp @@ -86,15 +86,14 @@ u8 daSwhit0_c::getType() { } /* 0000009C-000000B8 .text getTimer__10daSwhit0_cFv */ -u8 daSwhit0_c::getTimer() { - /* Nonmatching */ - u32 timer = fopAcM_GetParamBit(mBase.mParameters, 0x14, 0xFF); - - if (timer != 0xFF) { - return timer; +s32 daSwhit0_c::getTimer() { + u8 param = (fopAcM_GetParam(this) >> 0x14); + s32 timer = param; + + if (param == 0xFF) { + timer = 0; } - - return 0; + return timer; } /* 000000B8-000000C4 .text getSwNo2__10daSwhit0_cFv */ @@ -332,8 +331,9 @@ s32 daSwhit0_c::actionOnWait() { } } - if (getTimer() != 0) { - mOnTimer = getTimer() * 0x0F; + u8 timer = getTimer(); + if (timer != 0) { + mOnTimer = (u8)getTimer() * 0x0F; mState = 5; } @@ -372,7 +372,6 @@ void daSwhit0_c::setDrawMtx() { } s32 daSwhit0_c::draw() { - /* Nonmatching */ static GXColorS10 l_color[] = { { 0xF0, 0xF5, 0xFF, 0x6E }, { 0xB4, 0xC8, 0xD2, 0x64 }, @@ -386,7 +385,7 @@ s32 daSwhit0_c::draw() { J3DModelData* modelData = mpModel->getModelData(); s32 flag = checkFlag(0x01); - + GXColorS10* colors = l_color; if (flag) { colors = l_color + 2; @@ -467,6 +466,10 @@ static s32 daSwhit0_Create(fopAc_ac_c* i_swhit) { return static_cast(i_swhit)->create(); } +daSwhit0_c::~daSwhit0_c() { + +} + static actor_method_class l_daSwhit0_Method = { (process_method_func)daSwhit0_Create, (process_method_func)daSwhit0_Delete, From 6112691adca0eeade6fac50d5c393d7d82faf267 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Sun, 12 Nov 2023 23:15:59 -0500 Subject: [PATCH 4/4] Add AT enum values for d_a_swhit0's sphere stuff --- include/d/actor/d_a_swhit0.h | 4 +++- src/d/actor/d_a_swhit0.cpp | 6 +----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/include/d/actor/d_a_swhit0.h b/include/d/actor/d_a_swhit0.h index 33073fb82..5e23b49fb 100644 --- a/include/d/actor/d_a_swhit0.h +++ b/include/d/actor/d_a_swhit0.h @@ -8,7 +8,9 @@ class daSwhit0_c : public fopAc_ac_c { public: - ~daSwhit0_c(); + ~daSwhit0_c() { + + } inline s32 draw(); diff --git a/src/d/actor/d_a_swhit0.cpp b/src/d/actor/d_a_swhit0.cpp index 26180b674..ec51f77d7 100644 --- a/src/d/actor/d_a_swhit0.cpp +++ b/src/d/actor/d_a_swhit0.cpp @@ -18,7 +18,7 @@ static dCcD_SrcSph l_sph_src = { /* SrcObjAt Type */ 0, /* SrcObjAt Atp */ 0, /* SrcObjAt SPrm */ 0, - /* SrcObjTg Type */ 0xFF1DFEFF, + /* SrcObjTg Type */ ~(AT_TYPE_LIGHT | AT_TYPE_UNK400000 | AT_TYPE_LEAF_WIND | AT_TYPE_UNK20000 | AT_TYPE_WATER), // 0xFF1DFEFF /* SrcObjTg SPrm */ 9, /* SrcObjCo SPrm */ 0, /* SrcGObjAt Se */ 0, @@ -466,10 +466,6 @@ static s32 daSwhit0_Create(fopAc_ac_c* i_swhit) { return static_cast(i_swhit)->create(); } -daSwhit0_c::~daSwhit0_c() { - -} - static actor_method_class l_daSwhit0_Method = { (process_method_func)daSwhit0_Create, (process_method_func)daSwhit0_Delete,