diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2023-08-27 01:39:15 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-27 11:39:15 +0300 |
| commit | d369e2908cbe20165b5a2aaf6875807ffcc5da6c (patch) | |
| tree | 6140870345fef8d79bfe2e0e1fccca192478c243 /rel | |
| parent | 73cdbf549582522f293c45462322e3ec3ed33bf6 (diff) | |
obj_master_sword wip, fmobj mostly done, obj_usaku OK, some BG doc (#1897)
* obj_master_sword work, fix tag_chgrestart
* fmobj mostly done
* some bg documentation
* d_a_obj_usaku OK
* remove asm
Diffstat (limited to 'rel')
18 files changed, 569 insertions, 686 deletions
diff --git a/rel/d/a/d_a_bg/d_a_bg.cpp b/rel/d/a/d_a_bg/d_a_bg.cpp index 98b55e1e7b..8f39add93e 100644 --- a/rel/d/a/d_a_bg/d_a_bg.cpp +++ b/rel/d/a/d_a_bg/d_a_bg.cpp @@ -647,7 +647,7 @@ int daBg_c::createHeap() { return 0; } - if (mpBgW->Set(dzb, 0x20, NULL)) { + if (mpBgW->Set(dzb, cBgW::GLOBAL_e, NULL)) { return 0; } diff --git a/rel/d/a/d_a_bg_obj/d_a_bg_obj.cpp b/rel/d/a/d_a_bg_obj/d_a_bg_obj.cpp index e41bb33ad3..61e480cc94 100644 --- a/rel/d/a/d_a_bg_obj/d_a_bg_obj.cpp +++ b/rel/d/a/d_a_bg_obj/d_a_bg_obj.cpp @@ -508,7 +508,7 @@ asm void daBgObj_c::setAttentionInfo(fopAc_ac_c* param_0) { void daBgObj_c::initBaseMtx() { mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(shape_angle.y); - PSMTXCopy(mDoMtx_stack_c::get(), field_0x56c); + PSMTXCopy(mDoMtx_stack_c::get(), mBgMtx); setBaseMtx(); } @@ -516,7 +516,7 @@ void daBgObj_c::initBaseMtx() { void daBgObj_c::setBaseMtx() { for (int i = 0; i < 2; i++) { if (field_0x5a8[field_0xcc8][i] != NULL) { - field_0x5a8[field_0xcc8][i]->i_setBaseTRMtx(field_0x56c); + field_0x5a8[field_0xcc8][i]->i_setBaseTRMtx(mBgMtx); } } } @@ -584,8 +584,8 @@ int daBgObj_c::CreateInitType0() { int daBgObj_c::CreateInitType1() { if (i_fopAcM_isSwitch(this, daBgObj_prm::getSwBit(this))) { field_0xcc8 = 1; - release(field_0x568); - regist(mpBgW); + release(mpBgW); + regist(mpBgW2); mAction = 3; } else { field_0xcc8 = 0; @@ -613,8 +613,8 @@ int daBgObj_c::CreateInitType1() { mEventIdx = i_dComIfGp_getEventManager().getEventIdx(this, daBgObj_prm::getEvId(this)); - if (mpBgW != NULL) { - mpBgW->Move(); + if (mpBgW2 != NULL) { + mpBgW2->Move(); } initAtt(); @@ -801,9 +801,9 @@ int daBgObj_c::CreateHeapType1() { cBgD_t* dzb = (cBgD_t*)dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), getDzbName(1)); if (dzb != NULL) { - mpBgW = new dBgW(); - if (mpBgW == NULL || mpBgW->Set(dzb, 1, &field_0x56c)) { - mpBgW = NULL; + mpBgW2 = new dBgW(); + if (mpBgW2 == NULL || mpBgW2->Set(dzb, cBgW::MOVE_BG_e, &mBgMtx)) { + mpBgW2 = NULL; return 0; } } @@ -1270,8 +1270,8 @@ int daBgObj_c::actionOrder() { if (!i_fopAcM_isSwitch(this, daBgObj_prm::getSwBit(this)) || field_0xd00 != 0 || field_0xcc8 == 0) { - release(field_0x568); - regist(mpBgW); + release(mpBgW); + regist(mpBgW2); field_0xcc8 = 1; settingCullSizeBoxForCull(field_0xcc8); @@ -1323,21 +1323,21 @@ int daBgObj_c::ExecuteType0() { if (arg0 == 0xFF) { if (i_fopAcM_isSwitch(this, swBit)) { if (field_0xcc8 == 1) { - regist(field_0x568); + regist(mpBgW); field_0xcc8 = 0; } } else if (field_0xcc8 == 0) { - release(field_0x568); + release(mpBgW); field_0xcc8 = 1; } } else if (arg0 == 0) { if (i_fopAcM_isSwitch(this, swBit)) { if (field_0xcc8 == 0) { - release(field_0x568); + release(mpBgW); field_0xcc8 = 1; } } else if (field_0xcc8 == 1) { - regist(field_0x568); + regist(mpBgW); field_0xcc8 = 0; } } @@ -1374,7 +1374,7 @@ int daBgObj_c::Execute(f32 (**param_0)[3][4]) { } } - *param_0 = &field_0x56c; + *param_0 = &mBgMtx; setBaseMtx(); return 1; } @@ -1439,7 +1439,7 @@ void daBgObj_c::indirectProc(J3DModel* i_model) { /* 8045C2E8-8045C330 002D08 0048+00 1/0 0/0 0/0 .text Delete__9daBgObj_cFv */ int daBgObj_c::Delete() { - release(mpBgW); + release(mpBgW2); dComIfG_resDelete(&mPhase, daSetBgObj_c::getArcName(this)); return 1; } diff --git a/rel/d/a/d_a_dshutter/d_a_dshutter.cpp b/rel/d/a/d_a_dshutter/d_a_dshutter.cpp index f5ee70f310..a2d4590b1a 100644 --- a/rel/d/a/d_a_dshutter/d_a_dshutter.cpp +++ b/rel/d/a/d_a_dshutter/d_a_dshutter.cpp @@ -179,7 +179,7 @@ int daDsh_c::Draw() { int daDsh_c::Execute(f32 (**param_0)[3][4]) { callExecute(); setMtx(); - *param_0 = &field_0x56c; + *param_0 = &mBgMtx; func_80467DF8(&mTiltTime); return 1; } @@ -190,7 +190,7 @@ void daDsh_c::setMtx() { mDoMtx_stack_c::YrotM(shape_angle.y); mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); - PSMTXCopy(mDoMtx_stack_c::get(), field_0x56c); + PSMTXCopy(mDoMtx_stack_c::get(), mBgMtx); } /* 80467708-8046772C 0002E8 0024+00 5/5 0/0 0/0 .text setAction__7daDsh_cFPQ27daDsh_c8action_c */ diff --git a/rel/d/a/d_a_izumi_gate/d_a_izumi_gate.cpp b/rel/d/a/d_a_izumi_gate/d_a_izumi_gate.cpp index 8c86358bc5..0d6d315445 100644 --- a/rel/d/a/d_a_izumi_gate/d_a_izumi_gate.cpp +++ b/rel/d/a/d_a_izumi_gate/d_a_izumi_gate.cpp @@ -15,7 +15,7 @@ void daIzumiGate_c::initBaseMtx() { /* 808490B8-8084910C 000098 0054+00 2/2 0/0 0/0 .text setBaseMtx__13daIzumiGate_cFv */ void daIzumiGate_c::setBaseMtx() { mDoMtx_stack_c::transS(current.pos); - PSMTXCopy(mDoMtx_stack_c::now, field_0x56c); + PSMTXCopy(mDoMtx_stack_c::now, mBgMtx); PSMTXCopy(mDoMtx_stack_c::now, mpModel->mBaseTransformMtx); } @@ -55,7 +55,7 @@ int daIzumiGate_c::create() { if (phase == cPhs_ERROR_e) { return phase; } - fopAcM_SetMtx(this, field_0x56c); + fopAcM_SetMtx(this, mBgMtx); } return phase; } @@ -80,7 +80,7 @@ int daIzumiGate_c::Create() { /* 808492FC-80849328 0002DC 002C+00 1/0 0/0 0/0 .text Execute__13daIzumiGate_cFPPA3_A4_f */ int daIzumiGate_c::Execute(Mtx** i_mtx) { - *i_mtx = &field_0x56c; + *i_mtx = &mBgMtx; setBaseMtx(); return 1; } diff --git a/rel/d/a/obj/d_a_obj_cboard/d_a_obj_cboard.cpp b/rel/d/a/obj/d_a_obj_cboard/d_a_obj_cboard.cpp index 7a59245dda..8945faa781 100644 --- a/rel/d/a/obj/d_a_obj_cboard/d_a_obj_cboard.cpp +++ b/rel/d/a/obj/d_a_obj_cboard/d_a_obj_cboard.cpp @@ -18,7 +18,7 @@ void daObjBoard_c::setBaseMtx() { mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::ZXYrotM(shape_angle); mDoMtx_stack_c::scaleM(mScale); - PSMTXCopy(mDoMtx_stack_c::get(), field_0x56c); + PSMTXCopy(mDoMtx_stack_c::get(), mBgMtx); } /* 8057BE20-8057BE24 -00001 0004+00 2/2 0/0 0/0 .data l_arcName */ @@ -102,12 +102,12 @@ int daObjBoard_c::Execute(Mtx** param_0) { case 7: case 15: if (i_fopAcM_isSwitch(this, getSwNo())) { - if (!field_0x568->ChkUsed()) { - dComIfG_Bgsp().Regist(field_0x568, this); + if (!mpBgW->ChkUsed()) { + dComIfG_Bgsp().Regist(mpBgW, this); } } else { - if (field_0x568->ChkUsed()) { - dComIfG_Bgsp().Release(field_0x568); + if (mpBgW->ChkUsed()) { + dComIfG_Bgsp().Release(mpBgW); } } break; @@ -117,18 +117,18 @@ int daObjBoard_c::Execute(Mtx** param_0) { case 6: case 8: if (i_fopAcM_isSwitch(this, getSwNo())) { - if (field_0x568->ChkUsed()) { - dComIfG_Bgsp().Release(field_0x568); + if (mpBgW->ChkUsed()) { + dComIfG_Bgsp().Release(mpBgW); } } else { - if (!field_0x568->ChkUsed()) { - dComIfG_Bgsp().Regist(field_0x568, this); + if (!mpBgW->ChkUsed()) { + dComIfG_Bgsp().Regist(mpBgW, this); } } break; } - *param_0 = &field_0x56c; + *param_0 = &mBgMtx; return 1; } diff --git a/rel/d/a/obj/d_a_obj_cowdoor/d_a_obj_cowdoor.cpp b/rel/d/a/obj/d_a_obj_cowdoor/d_a_obj_cowdoor.cpp index 1230ef144f..4573028769 100644 --- a/rel/d/a/obj/d_a_obj_cowdoor/d_a_obj_cowdoor.cpp +++ b/rel/d/a/obj/d_a_obj_cowdoor/d_a_obj_cowdoor.cpp @@ -12,7 +12,7 @@ void daCowdoor_c::setBaseMtx() { PSMTXTrans(mDoMtx_stack_c::now, current.pos.x, current.pos.y, current.pos.z); mDoMtx_stack_c::YrotM(shape_angle.y); PSMTXCopy(mDoMtx_stack_c::now, field_0x5a8->mBaseTransformMtx); - PSMTXCopy(mDoMtx_stack_c::now, field_0x56c); + PSMTXCopy(mDoMtx_stack_c::now, mBgMtx); } /* 80BCC86C-80BCC8C4 0000EC 0058+00 1/0 0/0 0/0 .text Create__11daCowdoor_cFv */ @@ -57,7 +57,7 @@ int daCowdoor_c::create() { /* 80BCCA1C-80BCCA48 00029C 002C+00 1/0 0/0 0/0 .text Execute__11daCowdoor_cFPPA3_A4_f */ int daCowdoor_c::Execute(f32 (**param_0)[3][4]) { - *param_0 = &field_0x56c; + *param_0 = &mBgMtx; setBaseMtx(); return 1; } diff --git a/rel/d/a/obj/d_a_obj_fmobj/d_a_obj_fmobj.cpp b/rel/d/a/obj/d_a_obj_fmobj/d_a_obj_fmobj.cpp index 5da07ada27..99e691881e 100644 --- a/rel/d/a/obj/d_a_obj_fmobj/d_a_obj_fmobj.cpp +++ b/rel/d/a/obj/d_a_obj_fmobj/d_a_obj_fmobj.cpp @@ -4,75 +4,14 @@ // #include "rel/d/a/obj/d_a_obj_fmobj/d_a_obj_fmobj.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "SSystem/SComponent/c_math.h" +#include "d/bg/d_bg_w.h" +#include "d/com/d_com_inf_game.h" +#include "d/d_procname.h" #include "dol2asm.h" // -// Types: -// - -struct request_of_phase_process_class {}; - -struct obj_fmobj_class {}; - -struct mDoMtx_stack_c { - /* 8000CD9C */ void transM(f32, f32, f32); - - static u8 now[48]; -}; - -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); -}; - -struct dSv_memBit_c { - /* 80034934 */ void isDungeonItem(int) const; -}; - -struct dKy_tevstr_c {}; - -struct J3DModelData {}; - -struct cXyz {}; - -struct dScnKy_env_light_c { - /* 801A37C4 */ void settingTevStruct(int, cXyz*, dKy_tevstr_c*); - /* 801A4DA0 */ void setLightTevColorType_MAJI(J3DModelData*, dKy_tevstr_c*); -}; - -struct dRes_info_c {}; - -struct dRes_control_c { - /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int); -}; - -struct dBgW_Base {}; - -struct dBgW { - /* 8007B970 */ dBgW(); - /* 8007B9C0 */ void Move(); -}; - -struct dBgS { - /* 80074A08 */ void Regist(dBgW_Base*, fopAc_ac_c*); -}; - -struct csXyz {}; - -struct cBgD_t {}; - -struct cBgW { - /* 80079F38 */ void Set(cBgD_t*, u32, f32 (*)[3][4]); -}; - -struct cBgS_PolyInfo {}; - -struct cBgS { - /* 80074250 */ void Release(dBgW_Base*); -}; - -struct J3DModel {}; - -// // Forward References: // @@ -83,7 +22,6 @@ extern "C" static void daObj_Fmobj_Delete__FP15obj_fmobj_class(); extern "C" static void useHeapInit__FP10fopAc_ac_c(); extern "C" static void daObj_Fmobj_Create__FP10fopAc_ac_c(); extern "C" extern char const* const d_a_obj_fmobj__stringBase0; -extern "C" extern void* g_profile_OBJ_FMOBJ[12]; // // External References: @@ -109,71 +47,72 @@ extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); extern "C" void cM_rndF__Ff(); extern "C" void* __nw__FUl(); -extern "C" void PSMTXCopy(); -extern "C" void PSMTXTrans(); extern "C" void _savegpr_29(); extern "C" void _restgpr_29(); -extern "C" extern void* g_fopAc_Method[8]; -extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 g_env_light[4880]; // // Declarations: // /* 8057CBD8-8057CC44 000078 006C+00 1/0 0/0 0/0 .text daObj_Fmobj_Draw__FP15obj_fmobj_class */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObj_Fmobj_Draw(obj_fmobj_class* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_fmobj/d_a_obj_fmobj/daObj_Fmobj_Draw__FP15obj_fmobj_class.s" +static int daObj_Fmobj_Draw(obj_fmobj_class* i_this) { + J3DModel* model_p = i_this->mpModel; + + g_env_light.settingTevStruct(0x40, &i_this->current.pos, &i_this->mTevStr); + g_env_light.setLightTevColorType_MAJI(model_p, &i_this->mTevStr); + mDoExt_modelUpdateDL(model_p); + return 1; } -#pragma pop /* 8057CC44-8057CC84 0000E4 0040+00 1/0 0/0 0/0 .text daObj_Fmobj_Execute__FP15obj_fmobj_class */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObj_Fmobj_Execute(obj_fmobj_class* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_fmobj/d_a_obj_fmobj/daObj_Fmobj_Execute__FP15obj_fmobj_class.s" +static int daObj_Fmobj_Execute(obj_fmobj_class* i_this) { + i_this->field_0x578++; + + for (int i = 0; i < 2; i++) { + if (i_this->field_0x57e[i] != 0) { + i_this->field_0x57e[i]--; + } + } + + return 1; } -#pragma pop /* 8057CC84-8057CC8C 000124 0008+00 1/0 0/0 0/0 .text daObj_Fmobj_IsDelete__FP15obj_fmobj_class */ -static bool daObj_Fmobj_IsDelete(obj_fmobj_class* param_0) { - return true; +static int daObj_Fmobj_IsDelete(obj_fmobj_class* i_this) { + return 1; } -/* ############################################################################################## */ -/* 8057CF74-8057CF74 00000C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8057CF74 = "Obj_Fmobj"; -#pragma pop - /* 8057CC8C-8057CCDC 00012C 0050+00 1/0 0/0 0/0 .text daObj_Fmobj_Delete__FP15obj_fmobj_class */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObj_Fmobj_Delete(obj_fmobj_class* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_fmobj/d_a_obj_fmobj/daObj_Fmobj_Delete__FP15obj_fmobj_class.s" +static int daObj_Fmobj_Delete(obj_fmobj_class* i_this) { + dComIfG_resDelete(&i_this->mPhase, "Obj_Fmobj"); + dComIfG_Bgsp().Release(i_this->mpBgW); + return 1; } -#pragma pop /* 8057CCDC-8057CDE0 00017C 0104+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void useHeapInit(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_fmobj/d_a_obj_fmobj/useHeapInit__FP10fopAc_ac_c.s" +static int useHeapInit(fopAc_ac_c* i_this) { + obj_fmobj_class* a_this = (obj_fmobj_class*)i_this; + + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Obj_Fmobj", 4); + a_this->mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (a_this->mpModel == NULL) { + return 0; + } + + a_this->mpBgW = new dBgW(); + if (a_this->mpBgW == NULL) { + return 0; + } + + cBgD_t* pdzb = (cBgD_t*)dComIfG_getObjectRes("Obj_Fmobj", 7); + if (a_this->mpBgW->Set(pdzb, cBgW::MOVE_BG_e, &a_this->mBgMtx) == 1) { + return 0; + } + + a_this->mpBgW->SetCrrFunc(dBgS_MoveBGProc_Typical); + return 1; } -#pragma pop /* ############################################################################################## */ /* 8057CF68-8057CF6C 000000 0004+00 1/1 0/0 0/0 .rodata @3743 */ @@ -201,36 +140,76 @@ COMPILER_STRIP_GATE(0x8057CF70, &lit_3745); /* 8057CDE0-8057CF60 000280 0180+00 1/0 0/0 0/0 .text daObj_Fmobj_Create__FP10fopAc_ac_c */ +// reg alloc +#ifdef NONMATCHING +static int daObj_Fmobj_Create(fopAc_ac_c* i_this) { + obj_fmobj_class* a_this = (obj_fmobj_class*)i_this; + fopAcM_SetupActor(a_this, obj_fmobj_class); + + int phase = dComIfG_resLoad(&a_this->mPhase, "Obj_Fmobj"); + if (phase == cPhs_COMPLEATE_e) { + a_this->field_0x570 = fopAcM_GetParam(a_this) & 0xFF; + + if (dComIfGs_isStageBossEnemy()) { + return cPhs_ERROR_e; + } + + if (!fopAcM_entrySolidHeap(a_this, useHeapInit, 0x4B000)) { + return cPhs_ERROR_e; + } + + if (dComIfG_Bgsp().Regist(a_this->mpBgW, a_this)) { + return cPhs_ERROR_e; + } + + fopAcM_SetMtx(a_this, a_this->mpModel->getBaseTRMtx()); + a_this->shape_angle.y = cM_rndF(65536.0f); + + mDoMtx_stack_c::transS(a_this->current.pos.x, a_this->current.pos.y, a_this->current.pos.z); + mDoMtx_stack_c::YrotM(a_this->shape_angle.y); + a_this->mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); + + mDoMtx_stack_c::transM(0.0f, -30.0f, 0.0f); + PSMTXCopy(mDoMtx_stack_c::get(), a_this->mDzbMtx); + + a_this->mpBgW->Move(); + } + + return phase; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void daObj_Fmobj_Create(fopAc_ac_c* param_0) { +static asm int daObj_Fmobj_Create(fopAc_ac_c* param_0) { nofralloc #include "asm/rel/d/a/obj/d_a_obj_fmobj/d_a_obj_fmobj/daObj_Fmobj_Create__FP10fopAc_ac_c.s" } #pragma pop +#endif /* ############################################################################################## */ /* 8057CF80-8057CFA0 -00001 0020+00 1/0 0/0 0/0 .data l_daObj_Fmobj_Method */ -SECTION_DATA static void* l_daObj_Fmobj_Method[8] = { - (void*)daObj_Fmobj_Create__FP10fopAc_ac_c, - (void*)daObj_Fmobj_Delete__FP15obj_fmobj_class, - (void*)daObj_Fmobj_Execute__FP15obj_fmobj_class, - (void*)daObj_Fmobj_IsDelete__FP15obj_fmobj_class, - (void*)daObj_Fmobj_Draw__FP15obj_fmobj_class, - (void*)NULL, - (void*)NULL, - (void*)NULL, +static actor_method_class l_daObj_Fmobj_Method = { + (process_method_func)daObj_Fmobj_Create, (process_method_func)daObj_Fmobj_Delete, + (process_method_func)daObj_Fmobj_Execute, (process_method_func)daObj_Fmobj_IsDelete, + (process_method_func)daObj_Fmobj_Draw, }; /* 8057CFA0-8057CFD0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_OBJ_FMOBJ */ -SECTION_DATA extern void* g_profile_OBJ_FMOBJ[12] = { - (void*)0xFFFFFFFD, (void*)0x0003FFFD, - (void*)0x00260000, (void*)&g_fpcLf_Method, - (void*)0x000005BC, (void*)NULL, - (void*)NULL, (void*)&g_fopAc_Method, - (void*)0x00280000, (void*)&l_daObj_Fmobj_Method, - (void*)0x00040100, (void*)0x00070000, +extern actor_process_profile_definition g_profile_OBJ_FMOBJ = { + -3, + 3, + -3, + PROC_OBJ_FMOBJ, + &g_fpcLf_Method.mBase, + sizeof(obj_fmobj_class), + 0, + 0, + &g_fopAc_Method.base, + 40, + &l_daObj_Fmobj_Method, + 0x40100, + 0, + 7, }; - -/* 8057CF74-8057CF74 00000C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/rel/d/a/obj/d_a_obj_kjgjs/d_a_obj_kjgjs.cpp b/rel/d/a/obj/d_a_obj_kjgjs/d_a_obj_kjgjs.cpp index 122bd2635c..4ae7f3c6e6 100644 --- a/rel/d/a/obj/d_a_obj_kjgjs/d_a_obj_kjgjs.cpp +++ b/rel/d/a/obj/d_a_obj_kjgjs/d_a_obj_kjgjs.cpp @@ -66,8 +66,8 @@ static const Vec l_cull_box[4] = { int daObjKJgjs_c::Create() { fopAcM_SetMtx(this, mMtx[1]); PSMTXCopy(mMtx[1], mpModel->mBaseTransformMtx); - dBgW* mpBgW = field_0x568; - mpBgW->field_0x91 |= 4; + dBgW* bgw_p = mpBgW; + bgw_p->field_0x91 |= 4; if (!field_0x60c) { fopAcM_setCullSizeBox(this, l_cull_box[0].x, l_cull_box[0].y, l_cull_box[0].z, l_cull_box[1].x, l_cull_box[1].y, l_cull_box[1].z); diff --git a/rel/d/a/obj/d_a_obj_lv4floor/d_a_obj_lv4floor.cpp b/rel/d/a/obj/d_a_obj_lv4floor/d_a_obj_lv4floor.cpp index 7d8227d641..6a682af96d 100644 --- a/rel/d/a/obj/d_a_obj_lv4floor/d_a_obj_lv4floor.cpp +++ b/rel/d/a/obj/d_a_obj_lv4floor/d_a_obj_lv4floor.cpp @@ -20,7 +20,7 @@ void daObjLv4Floor_c::setBaseMtx() { mDoMtx_stack_c::YrotM(shape_angle.y); mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); - PSMTXCopy(mDoMtx_stack_c::get(), field_0x56c); + PSMTXCopy(mDoMtx_stack_c::get(), mBgMtx); } /* 80C678B0-80C678D4 000130 0024+00 1/0 0/0 0/0 .text Create__15daObjLv4Floor_cFv */ @@ -84,7 +84,7 @@ int daObjLv4Floor_c::create1st() { /* 80C679E4-80C67A30 000264 004C+00 1/0 0/0 0/0 .text Execute__15daObjLv4Floor_cFPPA3_A4_f */ int daObjLv4Floor_c::Execute(Mtx** param_0) { action(); - *param_0 = &field_0x56c; + *param_0 = &mBgMtx; setBaseMtx(); return 1; diff --git a/rel/d/a/obj/d_a_obj_magLiftRot/d_a_obj_magLiftRot.cpp b/rel/d/a/obj/d_a_obj_magLiftRot/d_a_obj_magLiftRot.cpp index b062c38289..029ab3c7d2 100644 --- a/rel/d/a/obj/d_a_obj_magLiftRot/d_a_obj_magLiftRot.cpp +++ b/rel/d/a/obj/d_a_obj_magLiftRot/d_a_obj_magLiftRot.cpp @@ -424,7 +424,7 @@ void daMagLiftRot_c::setBaseMtx() { mpModel->setBaseScale(cXyz(1.0f, 1.0f, 1.0f)); mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); - PSMTXCopy(mDoMtx_stack_c::get(), field_0x56c); + PSMTXCopy(mDoMtx_stack_c::get(), mBgMtx); } #else #pragma push @@ -547,8 +547,8 @@ int daMagLiftRot_c::create() { fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); fopAcM_setCullSizeBox2(this, mpModel->getModelData()); - field_0x568->onStickWall(); - field_0x568->onStickRoof(); + mpBgW->onStickWall(); + mpBgW->onStickRoof(); field_0x5e1 = fopAcM_GetParam(this) & 0xFF; field_0x5e2 = -0x8000; diff --git a/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword.cpp b/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword.cpp index 014ee8f4d4..c51e50774d 100644 --- a/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword.cpp +++ b/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword.cpp @@ -4,184 +4,63 @@ // #include "rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "d/a/d_a_player.h" +#include "d/com/d_com_inf_game.h" +#include "d/d_procname.h" +#include "d/meter/d_meter2_info.h" #include "dol2asm.h" // // Types: // -struct request_of_phase_process_class {}; +class daObjMasterSword_c; +typedef void (daObjMasterSword_c::*actionFunc)(); -struct cXyz {}; +class daObjMasterSword_c : public fopAc_ac_c { +public: + enum Mode_e { + MODE_0_e, + }; -struct mDoMtx_stack_c { - /* 8000CD64 */ void transS(cXyz const&); - - static u8 now[48]; -}; - -struct J3DAnmTextureSRTKey {}; - -struct J3DAnmTevRegKey {}; - -struct J3DMaterialTable { - /* 8032F7B4 */ void removeTexMtxAnimator(J3DAnmTextureSRTKey*); - /* 8032F880 */ void removeTevRegAnimator(J3DAnmTevRegKey*); -}; - -struct mDoExt_btkAnm { - /* 8000D63C */ void init(J3DMaterialTable*, J3DAnmTextureSRTKey*, int, int, f32, s16, s16); - /* 8000D6D8 */ void entry(J3DMaterialTable*, f32); -}; - -struct mDoExt_brkAnm { - /* 8000D70C */ void init(J3DMaterialTable*, J3DAnmTevRegKey*, int, int, f32, s16, s16); - /* 8000D7A8 */ void entry(J3DMaterialTable*, f32); -}; - -struct mDoExt_baseAnm { - /* 8000D428 */ void play(); -}; - -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); - /* 80018C8C */ ~fopAc_ac_c(); -}; - -struct daObjMasterSword_c { /* 80C90AF8 */ void initWait(); /* 80C90B50 */ void executeWait(); - /* 80C90C50 */ void createHeapCallBack(fopAc_ac_c*); - /* 80C90C70 */ void CreateHeap(); - /* 80C90DB8 */ void create(); + /* 80C90C50 */ static int createHeapCallBack(fopAc_ac_c* i_this); + /* 80C90C70 */ int CreateHeap(); + /* 80C90DB8 */ int create(); /* 80C90F6C */ void create_init(); /* 80C91448 */ ~daObjMasterSword_c(); - /* 80C91714 */ void draw(); - - static f32 const mAttr; - static u8 ActionTable[24]; -}; - -struct dSv_player_get_item_c { - /* 80033E60 */ void onFirstBit(u8); -}; - -struct dSv_event_tmp_flag_c { - static u8 const tempBitLabels[370 + 2 /* padding */]; -}; - -struct dSv_event_flag_c { - static u8 saveBitLabels[1644 + 4 /* padding */]; -}; - -struct dSv_event_c { - /* 8003498C */ void onEventBit(u16); - /* 800349BC */ void isEventBit(u16) const; -}; - -struct dKy_tevstr_c {}; - -struct J3DModelData {}; - -struct dScnKy_env_light_c { - /* 801A37C4 */ void settingTevStruct(int, cXyz*, dKy_tevstr_c*); - /* 801A4DA0 */ void setLightTevColorType_MAJI(J3DModelData*, dKy_tevstr_c*); -}; - -struct dRes_info_c {}; - -struct dRes_control_c { - /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int); -}; - -struct dDlst_shadowControl_c { - static u8 mSimpleTexObj[32]; -}; - -struct dCcD_Stts { - /* 80083860 */ void Init(int, int, fopAc_ac_c*); -}; - -struct dCcD_SrcCyl {}; - -struct dCcD_GStts { - /* 80083760 */ dCcD_GStts(); - /* 80C9137C */ ~dCcD_GStts(); -}; - -struct dCcD_GObjInf { - /* 80083A28 */ dCcD_GObjInf(); - /* 800840E4 */ ~dCcD_GObjInf(); -}; - -struct dCcD_Cyl { - /* 800848B4 */ void Set(dCcD_SrcCyl const&); -}; + /* 80C91714 */ int draw(); -struct dBgS_PolyPassChk { - /* 80078E68 */ void SetObj(); -}; + inline void initCollision(); + inline void setCollision(); + inline void initBaseMtx(); + inline void setAction(Mode_e i_mode); + inline void callInit(); + inline void callExecute(); + inline int execute(); -struct dBgS_ObjAcch { - /* 80C9120C */ ~dBgS_ObjAcch(); -}; - -struct dBgS_AcchCir { - /* 80075EAC */ dBgS_AcchCir(); - /* 80075F58 */ void SetWall(f32, f32); - /* 80C9127C */ ~dBgS_AcchCir(); -}; + f32 attr() const { return mAttr; } -struct csXyz {}; + u8 getEventID() { return (fopAcM_GetParam(this) >> 0x10) & 0xFF; } + u16 getFlagNo() { return fopAcM_GetParam(this) & 0xFFFF; } -struct dBgS {}; - -struct dBgS_Acch { - /* 80075F94 */ ~dBgS_Acch(); - /* 800760A0 */ dBgS_Acch(); - /* 80076248 */ void Set(cXyz*, cXyz*, fopAc_ac_c*, int, dBgS_AcchCir*, cXyz*, csXyz*, csXyz*); - /* 80076AAC */ void CrrPos(dBgS&); -}; - -struct dAttention_c { - /* 80070880 */ void getActionBtnB(); - /* 80073734 */ void ActionTarget(s32); -}; - -struct cM3dGCyl { - /* 80C912EC */ ~cM3dGCyl(); -}; - -struct cM3dGCir { - /* 8026EF18 */ ~cM3dGCir(); -}; - -struct cM3dGAab { - /* 80C91334 */ ~cM3dGAab(); -}; - -struct cCcD_Obj {}; - -struct cCcS { - /* 80264BA8 */ void Set(cCcD_Obj*); -}; - -struct cCcD_GStts { - /* 80C9189C */ ~cCcD_GStts(); -}; - -struct cBgS_PolyInfo { - /* 80268074 */ cBgS_PolyInfo(); - /* 802680B0 */ ~cBgS_PolyInfo(); -}; - -struct _GXTexObj {}; - -struct J3DModel {}; + static f32 const mAttr; + // static actionFunc ActionTable[]; + static u8 ActionTable[24]; -struct J3DFrameCtrl { - /* 803283FC */ void init(s16); - /* 80C913D8 */ ~J3DFrameCtrl(); + /* 0x568 */ J3DModel* mpModel; + /* 0x56C */ request_of_phase_process_class mPhase; + /* 0x574 */ mDoExt_btkAnm mBtk; + /* 0x58C */ mDoExt_brkAnm mBrk; + /* 0x5A4 */ dCcD_Stts mCcStts; + /* 0x5E0 */ dCcD_Cyl mCyl; + /* 0x71C */ actionFunc* mActionFunc; + /* 0x720 */ Mode_e mMode; + /* 0x724 */ u32 mShadowKey; + /* 0x728 */ cBgS_PolyInfo field_0x728; + /* 0x738 */ f32 field_0x738; }; // @@ -269,7 +148,6 @@ extern "C" void __dl__FPv(); extern "C" void init__12J3DFrameCtrlFs(); extern "C" void removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey(); extern "C" void removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey(); -extern "C" void PSMTXCopy(); extern "C" void __ptmf_scall(); extern "C" void _savegpr_26(); extern "C" void _savegpr_27(); @@ -280,8 +158,6 @@ extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); extern "C" u8 const tempBitLabels__20dSv_event_tmp_flag_c[370 + 2 /* padding */]; -extern "C" extern void* g_fopAc_Method[8]; -extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */]; extern "C" extern void* __vt__8dCcD_Cyl[36]; extern "C" extern void* __vt__9dCcD_Stts[11]; @@ -289,10 +165,7 @@ extern "C" extern void* __vt__12cCcD_CylAttr[25]; extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; extern "C" extern void* __vt__9cCcD_Stts[8]; extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" extern u8 g_env_light[4880]; -extern "C" extern u8 j3dSys[284]; extern "C" extern u8 data_80C91AD0[4]; // @@ -300,36 +173,39 @@ extern "C" extern u8 data_80C91AD0[4]; // /* 80C90AF8-80C90B50 000078 0058+00 1/0 0/0 0/0 .text initWait__18daObjMasterSword_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjMasterSword_c::initWait() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/initWait__18daObjMasterSword_cFv.s" +void daObjMasterSword_c::initWait() { + cLib_onBit(mAttentionInfo.mFlags, 0x10); + current.pos = orig.pos; + current.angle = orig.angle; + shape_angle = orig.angle; } -#pragma pop /* 80C90B50-80C90C50 0000D0 0100+00 1/0 0/0 0/0 .text executeWait__18daObjMasterSword_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjMasterSword_c::executeWait() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/executeWait__18daObjMasterSword_cFv.s" +void daObjMasterSword_c::executeWait() { + if (daPy_getPlayerActorClass()->checkPriActorOwn(this)) { + for (int i = 0; i < dComIfGp_getAttention().GetActionCount(); i++) { + if (dComIfGp_getAttention().ActionTarget(i) == this) { + if (dComIfGp_getAttention().getActionBtnB() != NULL && + dComIfGp_getAttention().getActionBtnB()->mType == 4) + { + dComIfGp_setDoStatusForce(8, 0); + } + } + } + } + + if (fopAcM_checkCarryNow(this)) { + dMeter2Info_setCloth(WEAR_KOKIRI, false); + fopAcM_orderMapToolEvent(this, getEventID(), 0xFF, 0xFFFF, 1, 0); + } } -#pragma pop /* 80C90C50-80C90C70 0001D0 0020+00 1/1 0/0 0/0 .text * createHeapCallBack__18daObjMasterSword_cFP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjMasterSword_c::createHeapCallBack(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/createHeapCallBack__18daObjMasterSword_cFP10fopAc_ac_c.s" +int daObjMasterSword_c::createHeapCallBack(fopAc_ac_c* i_this) { + return static_cast<daObjMasterSword_c*>(i_this)->CreateHeap(); } -#pragma pop /* ############################################################################################## */ /* 80C91940-80C91944 000000 0004+00 2/2 0/0 0/0 .rodata mAttr__18daObjMasterSword_c */ @@ -374,28 +250,34 @@ SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { #pragma pop /* 80C9199C-80C919A0 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName = (void*)&d_a_obj_master_sword__stringBase0; +SECTION_DATA static char* l_arcName = "MstrSword"; /* 80C90C70-80C90D98 0001F0 0128+00 1/1 0/0 0/0 .text CreateHeap__18daObjMasterSword_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjMasterSword_c::CreateHeap() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/CreateHeap__18daObjMasterSword_cFv.s" +int daObjMasterSword_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 5); + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000284); + if (mpModel == NULL) { + return 0; + } + + J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 11); + if (!mBtk.init(modelData, pbtk, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1)) { + return 0; + } + + J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 8); + if (!mBrk.init(modelData, pbrk, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1)) { + return 0; + } + + return 1; } -#pragma pop /* 80C90D98-80C90DB8 000318 0020+00 1/0 0/0 0/0 .text daObjMasterSword_Create__FP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjMasterSword_Create(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/daObjMasterSword_Create__FP10fopAc_ac_c.s" +static int daObjMasterSword_Create(fopAc_ac_c* i_this) { + return static_cast<daObjMasterSword_c*>(i_this)->create(); } -#pragma pop /* ############################################################################################## */ /* 80C919A0-80C919AC -00001 000C+00 0/1 0/0 0/0 .data @3655 */ @@ -425,6 +307,10 @@ SECTION_DATA u8 daObjMasterSword_c::ActionTable[24] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; +/* static actionFunc daObjMasterSword_c::ActionTable[] = { + &daObjMasterSword_c::initWait, &daObjMasterSword_c::executeWait, +}; */ + /* 80C919D0-80C91A14 000054 0044+00 1/1 0/0 0/0 .data * ccCylSrc$localstatic3$initCollision__18daObjMasterSword_cFv */ SECTION_DATA static u8 data_80C919D0[68] = { @@ -513,14 +399,36 @@ SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = { }; /* 80C90DB8-80C90F6C 000338 01B4+00 1/1 0/0 0/0 .text create__18daObjMasterSword_cFv */ +// matches with weak funcs +#ifdef NONMATCHING +int daObjMasterSword_c::create() { + fopAcM_SetupActor(this, daObjMasterSword_c); + + if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[getFlagNo()])) { + return cPhs_ERROR_e; + } + + int phase = dComIfG_resLoad(&mPhase, l_arcName); + if (phase == cPhs_COMPLEATE_e) { + if (!fopAcM_entrySolidHeap(this, daObjMasterSword_c::createHeapCallBack, 0x1830)) { + return cPhs_ERROR_e; + } + + create_init(); + } + + return phase; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daObjMasterSword_c::create() { +asm int daObjMasterSword_c::create() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/create__18daObjMasterSword_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80C91954-80C91958 000014 0004+00 0/1 0/0 0/0 .rodata @3861 */ @@ -544,8 +452,78 @@ SECTION_RODATA static f32 const lit_3863 = 30.0f; COMPILER_STRIP_GATE(0x80C9195C, &lit_3863); #pragma pop +void daObjMasterSword_c::initCollision() { + static dCcD_SrcCyl ccCylSrc = { + { + {0, {{0, 0, 0}, {0, 0}, 0x79}}, // mObj + {dCcD_SE_NONE, 0, 0, 0, 0}, // mGObjAt + {dCcD_SE_NONE, 0, 0, 0, 4}, // mGObjTg + {0}, // mGObjCo + }, // mObjInf + { + {current.pos.x, current.pos.y, current.pos.z}, // mCenter + 18.0f, // mRadius + 180.0f // mHeight + } // mCyl + }; + + mCcStts.Init(0xFF, 0xFF, this); + mCyl.Set(ccCylSrc); + mCyl.SetStts(&mCcStts); +} + +void daObjMasterSword_c::initBaseMtx() { + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + + Vec scale = {attr(), attr(), attr()}; + mpModel->setBaseScale(scale); + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(shape_angle.y); + + mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); +} + +void daObjMasterSword_c::callInit() { + (this->**mActionFunc)(); +} + +void daObjMasterSword_c::setAction(daObjMasterSword_c::Mode_e i_mode) { + mMode = i_mode; + // mActionFunc = &ActionTable[mMode]; + callInit(); +} + /* 80C90F6C-80C9120C 0004EC 02A0+00 1/1 0/0 0/0 .text create_init__18daObjMasterSword_cFv */ +// matches, but weak function emission is hella weird. cant be linked til its fixed +#ifdef NONMATCHING +void daObjMasterSword_c::create_init() { + fopAcM_setCullSizeBox2(this, mpModel->getModelData()); + initCollision(); + initBaseMtx(); + + fopAcM_OnCarryType(this, fopAcM_CARRY_UNK_30); + cLib_onBit(mAttentionInfo.mFlags, 0x10); + mAttentionInfo.field_0x0[4] = 74; + mAttentionInfo.mPosition = current.pos; + mAttentionInfo.mPosition.y += 100.0f; + mEyePos = mAttentionInfo.mPosition; + + dBgS_AcchCir cir_check; + dBgS_ObjAcch obj_check; + + cir_check.SetWall(10.0f, 30.0f); + obj_check.Set(&fopAcM_GetPosition_p(this), &fopAcM_GetOldPosition_p(this), this, 1, &cir_check, + &fopAcM_GetSpeed_p(this), NULL, NULL); + obj_check.CrrPos(dComIfG_Bgsp()); + + field_0x738 = obj_check.GetGroundH(); + field_0x728 = obj_check.m_gnd; + + setAction(MODE_0_e); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -554,12 +532,14 @@ asm void daObjMasterSword_c::create_init() { #include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/create_init__18daObjMasterSword_cFv.s" } #pragma pop +#endif /* 80C9120C-80C9127C 00078C 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dBgS_ObjAcch::~dBgS_ObjAcch() { +// asm dBgS_ObjAcch::~dBgS_ObjAcch() { +extern "C" asm void __dt__12dBgS_ObjAcchFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/__dt__12dBgS_ObjAcchFv.s" } @@ -569,7 +549,8 @@ asm dBgS_ObjAcch::~dBgS_ObjAcch() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dBgS_AcchCir::~dBgS_AcchCir() { +// asm dBgS_AcchCir::~dBgS_AcchCir() { +extern "C" asm void __dt__12dBgS_AcchCirFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/__dt__12dBgS_AcchCirFv.s" } @@ -579,7 +560,8 @@ asm dBgS_AcchCir::~dBgS_AcchCir() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cM3dGCyl::~cM3dGCyl() { +// asm cM3dGCyl::~cM3dGCyl() { +extern "C" asm void __dt__8cM3dGCylFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/__dt__8cM3dGCylFv.s" } @@ -589,7 +571,8 @@ asm cM3dGCyl::~cM3dGCyl() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cM3dGAab::~cM3dGAab() { +// asm cM3dGAab::~cM3dGAab() { +extern "C" asm void __dt__8cM3dGAabFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/__dt__8cM3dGAabFv.s" } @@ -599,7 +582,8 @@ asm cM3dGAab::~cM3dGAab() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dCcD_GStts::~dCcD_GStts() { +// asm dCcD_GStts::~dCcD_GStts() { +extern "C" asm void __dt__10dCcD_GSttsFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/__dt__10dCcD_GSttsFv.s" } @@ -609,7 +593,8 @@ asm dCcD_GStts::~dCcD_GStts() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DFrameCtrl::~J3DFrameCtrl() { +// asm J3DFrameCtrl::~J3DFrameCtrl() { +extern "C" asm void __dt__12J3DFrameCtrlFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/__dt__12J3DFrameCtrlFv.s" } @@ -617,14 +602,10 @@ asm J3DFrameCtrl::~J3DFrameCtrl() { /* 80C91420-80C91448 0009A0 0028+00 1/0 0/0 0/0 .text * daObjMasterSword_Delete__FP18daObjMasterSword_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjMasterSword_Delete(daObjMasterSword_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/daObjMasterSword_Delete__FP18daObjMasterSword_c.s" +static int daObjMasterSword_Delete(daObjMasterSword_c* i_this) { + i_this->~daObjMasterSword_c(); + return 1; } -#pragma pop /* 80C91448-80C915E8 0009C8 01A0+00 1/1 0/0 0/0 .text __dt__18daObjMasterSword_cFv */ #pragma push @@ -643,27 +624,45 @@ SECTION_RODATA static u8 const lit_4030[8] = { }; COMPILER_STRIP_GATE(0x80C91960, &lit_4030); +void daObjMasterSword_c::callExecute() { + (this->*mActionFunc[1])(); +} + +void daObjMasterSword_c::setCollision() { + dComIfG_Ccsp()->Set(&mCyl); +} + +int daObjMasterSword_c::execute() { + callExecute(); + setCollision(); + + mBtk.play(); + mBrk.play(); + + if (dComIfGs_isTmpBit(dSv_event_tmp_flag_c::tempBitLabels[73])) { + dComIfGs_onItemFirstBit(MASTER_SWORD); + dMeter2Info_setSword(MASTER_SWORD, false); + dComIfGs_setSelectEquipSword(MASTER_SWORD); + + i_dComIfGp_setItemLifeCount(dComIfGs_getMaxLife(), 0); + dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[getFlagNo()]); + fopAcM_delete(this); + } + + return 1; +} + /* 80C915E8-80C916F4 000B68 010C+00 1/0 0/0 0/0 .text * daObjMasterSword_Execute__FP18daObjMasterSword_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjMasterSword_Execute(daObjMasterSword_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/daObjMasterSword_Execute__FP18daObjMasterSword_c.s" +static int daObjMasterSword_Execute(daObjMasterSword_c* i_this) { + return i_this->execute(); } -#pragma pop /* 80C916F4-80C91714 000C74 0020+00 1/0 0/0 0/0 .text * daObjMasterSword_Draw__FP18daObjMasterSword_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjMasterSword_Draw(daObjMasterSword_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/daObjMasterSword_Draw__FP18daObjMasterSword_c.s" +static int daObjMasterSword_Draw(daObjMasterSword_c* i_this) { + return i_this->draw(); } -#pragma pop /* ############################################################################################## */ /* 80C91968-80C9196C 000028 0004+00 0/1 0/0 0/0 .rodata @4091 */ @@ -681,26 +680,56 @@ COMPILER_STRIP_GATE(0x80C9196C, &lit_4092); #pragma pop /* 80C91714-80C91894 000C94 0180+00 1/1 0/0 0/0 .text draw__18daObjMasterSword_cFv */ +// weird cXyz stuff +#ifdef NONMATCHING +int daObjMasterSword_c::draw() { + if (dComIfGs_isTmpBit(dSv_event_tmp_flag_c::tempBitLabels[73])) { + return 1; + } + + J3DModelData* modelData = mpModel->getModelData(); + g_env_light.settingTevStruct(0x10, ¤t.pos, &mTevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &mTevStr); + + dComIfGd_setListBG(); + mBtk.entry(modelData); + mBrk.entry(modelData); + mDoExt_modelUpdateDL(mpModel); + + mBtk.remove(modelData); + mBrk.remove(modelData); + dComIfGd_setList(); + + cXyz sp14, sp8 = cXyz(current.pos.x, current.pos.y + 50.0f, current.pos.z); + mShadowKey = + dComIfGd_setShadow(mShadowKey, 1, mpModel, &sp14, 200.0f, 10.0f, current.pos.y, field_0x738, + field_0x728, &mTevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daObjMasterSword_c::draw() { +asm int daObjMasterSword_c::draw() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/draw__18daObjMasterSword_cFv.s" } #pragma pop +#endif /* 80C91894-80C9189C 000E14 0008+00 1/0 0/0 0/0 .text * daObjMasterSword_IsDelete__FP18daObjMasterSword_c */ -static bool daObjMasterSword_IsDelete(daObjMasterSword_c* param_0) { - return true; +static int daObjMasterSword_IsDelete(daObjMasterSword_c* param_0) { + return 1; } /* 80C9189C-80C918E4 000E1C 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cCcD_GStts::~cCcD_GStts() { +// asm cCcD_GStts::~cCcD_GStts() { +extern "C" asm void __dt__10cCcD_GSttsFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/__dt__10cCcD_GSttsFv.s" } @@ -710,8 +739,7 @@ asm cCcD_GStts::~cCcD_GStts() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __sinit_d_a_obj_master_sword_cpp() { - nofralloc +asm void __sinit_d_a_obj_master_sword_cpp(){nofralloc #include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/__sinit_d_a_obj_master_sword_cpp.s" } #pragma pop diff --git a/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate.cpp b/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate.cpp index b5405e580a..52ff0f186e 100644 --- a/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate.cpp +++ b/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate.cpp @@ -58,7 +58,7 @@ void daObjMGate_c::setBaseMtx() { mDoMtx_stack_c::YrotM(shape_angle.y); mDoMtx_stack_c::ZXYrotM(mGateAngle.x, mGateAngle.y, mGateAngle.z); mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); - PSMTXCopy(mDoMtx_stack_c::get(), field_0x56c); + PSMTXCopy(mDoMtx_stack_c::get(), mBgMtx); if (mpKeyModel != NULL) { cXyz key_offset(l_key_offset[mKind]); @@ -223,7 +223,7 @@ int daObjMGate_c::Execute(Mtx** param_0) { } } - *param_0 = &field_0x56c; + *param_0 = &mBgMtx; setBaseMtx(); mGateAngle.y = mGateSwingMultiplier * cM_ssin(mCounter * 4000); diff --git a/rel/d/a/obj/d_a_obj_onsen/d_a_obj_onsen.cpp b/rel/d/a/obj/d_a_obj_onsen/d_a_obj_onsen.cpp index a7e8355bc5..284cb4390e 100644 --- a/rel/d/a/obj/d_a_obj_onsen/d_a_obj_onsen.cpp +++ b/rel/d/a/obj/d_a_obj_onsen/d_a_obj_onsen.cpp @@ -20,7 +20,7 @@ void daObjOnsen_c::setBaseMtx() { mDoMtx_stack_c::YrotM(shape_angle.y); PSMTXCopy(mDoMtx_stack_c::now, mpModel[0]->mBaseTransformMtx); PSMTXCopy(mDoMtx_stack_c::now, mpModel[1]->mBaseTransformMtx); - PSMTXCopy(mDoMtx_stack_c::now, field_0x56c); + PSMTXCopy(mDoMtx_stack_c::now, mBgMtx); } /* 80CA7C28-80CA7C74 000148 004C+00 1/0 0/0 0/0 .text Create__12daObjOnsen_cFv */ @@ -92,7 +92,7 @@ int daObjOnsen_c::create1st() { /* 80CA7EEC-80CA7F1C 00040C 0030+00 1/0 0/0 0/0 .text Execute__12daObjOnsen_cFPPA3_A4_f */ int daObjOnsen_c::Execute(Mtx** i_mtx) { - *i_mtx = &field_0x56c; + *i_mtx = &mBgMtx; mpBtk->play(); return 1; } diff --git a/rel/d/a/obj/d_a_obj_tgake/d_a_obj_tgake.cpp b/rel/d/a/obj/d_a_obj_tgake/d_a_obj_tgake.cpp index a2c437b6a7..af2f76a103 100644 --- a/rel/d/a/obj/d_a_obj_tgake/d_a_obj_tgake.cpp +++ b/rel/d/a/obj/d_a_obj_tgake/d_a_obj_tgake.cpp @@ -21,7 +21,7 @@ void daObjGake_c::setBaseMtx() { mDoMtx_stack_c::YrotM(shape_angle.y); mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); - PSMTXCopy(mDoMtx_stack_c::get(), field_0x56c); + PSMTXCopy(mDoMtx_stack_c::get(), mBgMtx); } /* 80D0BCB8-80D0BD30 000118 0078+00 1/0 0/0 0/0 .text Create__11daObjGake_cFv */ @@ -72,8 +72,8 @@ int daObjGake_c::Execute(Mtx** param_0) { (mEventBit1 != 0x3FF && !i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[mEventBit1]))) { - if (field_0x568 != NULL && field_0x568->ChkUsed()) { - dComIfG_Bgsp().Release(field_0x568); + if (mpBgW != NULL && mpBgW->ChkUsed()) { + dComIfG_Bgsp().Release(mpBgW); } mHide = true; @@ -81,15 +81,15 @@ int daObjGake_c::Execute(Mtx** param_0) { } if (mEventBit1 != 0x3FF && i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[mEventBit1])) { - if (field_0x568 != NULL && !field_0x568->ChkUsed()) { - dComIfG_Bgsp().Regist(field_0x568, this); + if (mpBgW != NULL && !mpBgW->ChkUsed()) { + dComIfG_Bgsp().Regist(mpBgW, this); } mHide = false; return 1; } - *param_0 = &field_0x56c; + *param_0 = &mBgMtx; return 1; } diff --git a/rel/d/a/obj/d_a_obj_usaku/d_a_obj_usaku.cpp b/rel/d/a/obj/d_a_obj_usaku/d_a_obj_usaku.cpp index 95ff394360..fecfffb48f 100644 --- a/rel/d/a/obj/d_a_obj_usaku/d_a_obj_usaku.cpp +++ b/rel/d/a/obj/d_a_obj_usaku/d_a_obj_usaku.cpp @@ -1,231 +1,128 @@ -// -// Generated By: dol2asm -// Translation Unit: d_a_obj_usaku -// +/** + * d_a_obj_usaku.cpp + * Horse Fence + */ #include "rel/d/a/obj/d_a_obj_usaku/d_a_obj_usaku.h" -#include "dol2asm.h" - -// -// Types: -// - -struct request_of_phase_process_class {}; - -struct obj_usaku_class {}; - -struct mDoMtx_stack_c { - static u8 now[48]; -}; - -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); -}; - -struct dKy_tevstr_c {}; - -struct J3DModelData {}; - -struct cXyz {}; - -struct dScnKy_env_light_c { - /* 801A37C4 */ void settingTevStruct(int, cXyz*, dKy_tevstr_c*); - /* 801A4DA0 */ void setLightTevColorType_MAJI(J3DModelData*, dKy_tevstr_c*); -}; - -struct dRes_info_c {}; - -struct dRes_control_c { - /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int); -}; - -struct dBgW_Base {}; - -struct dBgW { - /* 8007B970 */ dBgW(); - /* 8007B9C0 */ void Move(); -}; - -struct dBgS { - /* 80074A08 */ void Regist(dBgW_Base*, fopAc_ac_c*); -}; - -struct csXyz {}; - -struct cBgD_t {}; - -struct cBgW { - /* 80079F38 */ void Set(cBgD_t*, u32, f32 (*)[3][4]); -}; - -struct cBgS_PolyInfo {}; - -struct cBgS { - /* 80074250 */ void Release(dBgW_Base*); -}; - -struct J3DModel {}; - -// -// Forward References: -// - -extern "C" static void daObj_Usaku_Draw__FP15obj_usaku_class(); -extern "C" static void daObj_Usaku_Execute__FP15obj_usaku_class(); -extern "C" static bool daObj_Usaku_IsDelete__FP15obj_usaku_class(); -extern "C" static void daObj_Usaku_Delete__FP15obj_usaku_class(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" static void daObj_Usaku_Create__FP10fopAc_ac_c(); -extern "C" extern char const* const d_a_obj_usaku__stringBase0; -extern "C" extern void* g_profile_OBJ_USAKU[12]; - -// -// External References: -// - -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void Release__4cBgSFP9dBgW_Base(); -extern "C" void Regist__4dBgSFP9dBgW_BaseP10fopAc_ac_c(); -extern "C" void dBgS_MoveBGProc_Typical__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void Set__4cBgWFP6cBgD_tUlPA3_A4_f(); -extern "C" void __ct__4dBgWFv(); -extern "C" void Move__4dBgWFv(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void* __nw__FUl(); -extern "C" void PSMTXCopy(); -extern "C" void PSMTXTrans(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_29(); -extern "C" extern void* g_fopAc_Method[8]; -extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 g_env_light[4880]; - -// -// Declarations: -// +#include "JSystem/JKernel/JKRHeap.h" +#include "d/bg/d_bg_w.h" +#include "d/com/d_com_inf_game.h" +#include "d/d_procname.h" /* 80D20F58-80D20FBC 000078 0064+00 1/0 0/0 0/0 .text daObj_Usaku_Draw__FP15obj_usaku_class */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObj_Usaku_Draw(obj_usaku_class* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_usaku/d_a_obj_usaku/daObj_Usaku_Draw__FP15obj_usaku_class.s" +static int daObj_Usaku_Draw(obj_usaku_class* i_this) { + g_env_light.settingTevStruct(0x10, &i_this->current.pos, &i_this->mTevStr); + g_env_light.setLightTevColorType_MAJI(i_this->mpModel, &i_this->mTevStr); + mDoExt_modelUpdateDL(i_this->mpModel); + + return 1; } -#pragma pop /* 80D20FBC-80D21048 0000DC 008C+00 2/1 0/0 0/0 .text daObj_Usaku_Execute__FP15obj_usaku_class */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObj_Usaku_Execute(obj_usaku_class* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_usaku/d_a_obj_usaku/daObj_Usaku_Execute__FP15obj_usaku_class.s" +static int daObj_Usaku_Execute(obj_usaku_class* i_this) { + mDoMtx_stack_c::transS(i_this->current.pos.x, i_this->current.pos.y, i_this->current.pos.z); + mDoMtx_stack_c::YrotM(i_this->shape_angle.y); + + i_this->mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); + if (i_this->mpBgW != NULL) { + PSMTXCopy(mDoMtx_stack_c::get(), i_this->mBgMtx); + i_this->mpBgW->Move(); + } + + return 1; } -#pragma pop /* 80D21048-80D21050 000168 0008+00 1/0 0/0 0/0 .text daObj_Usaku_IsDelete__FP15obj_usaku_class */ -static bool daObj_Usaku_IsDelete(obj_usaku_class* param_0) { - return true; +static int daObj_Usaku_IsDelete(obj_usaku_class* i_this) { + return 1; } -/* ############################################################################################## */ -/* 80D212EC-80D212EC 000010 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80D212EC = "Obj_usaku"; -#pragma pop - /* 80D21050-80D210A8 000170 0058+00 1/0 0/0 0/0 .text daObj_Usaku_Delete__FP15obj_usaku_class */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObj_Usaku_Delete(obj_usaku_class* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_usaku/d_a_obj_usaku/daObj_Usaku_Delete__FP15obj_usaku_class.s" +static int daObj_Usaku_Delete(obj_usaku_class* i_this) { + dComIfG_resDelete(&i_this->mPhase, "Obj_usaku"); + + if (i_this->mpBgW != NULL) { + dComIfG_Bgsp().Release(i_this->mpBgW); + } + return 1; } -#pragma pop /* 80D210A8-80D211AC 0001C8 0104+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void useHeapInit(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_usaku/d_a_obj_usaku/useHeapInit__FP10fopAc_ac_c.s" +static int useHeapInit(fopAc_ac_c* i_this) { + obj_usaku_class* a_this = (obj_usaku_class*)i_this; + + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Obj_usaku", 4); + a_this->mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (a_this->mpModel == NULL) { + return 0; + } + + a_this->mpBgW = new dBgW(); + if (a_this->mpBgW == NULL) { + return 0; + } + + cBgD_t* pdzb = (cBgD_t*)dComIfG_getObjectRes("Obj_usaku", 7); + if (a_this->mpBgW->Set(pdzb, cBgW::MOVE_BG_e, &a_this->mBgMtx) == 1) { + return 0; + } + + a_this->mpBgW->SetCrrFunc(dBgS_MoveBGProc_Typical); + return 1; } -#pragma pop - -/* ############################################################################################## */ -/* 80D212DC-80D212E0 000000 0004+00 1/1 0/0 0/0 .rodata @3744 */ -SECTION_RODATA static f32 const lit_3744 = -300.0f; -COMPILER_STRIP_GATE(0x80D212DC, &lit_3744); - -/* 80D212E0-80D212E4 000004 0004+00 0/1 0/0 0/0 .rodata @3745 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3745 = -600.0f; -COMPILER_STRIP_GATE(0x80D212E0, &lit_3745); -#pragma pop - -/* 80D212E4-80D212E8 000008 0004+00 0/1 0/0 0/0 .rodata @3746 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3746 = 300.0f; -COMPILER_STRIP_GATE(0x80D212E4, &lit_3746); -#pragma pop - -/* 80D212E8-80D212EC 00000C 0004+00 0/1 0/0 0/0 .rodata @3747 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3747 = 600.0f; -COMPILER_STRIP_GATE(0x80D212E8, &lit_3747); -#pragma pop /* 80D211AC-80D212D4 0002CC 0128+00 1/0 0/0 0/0 .text daObj_Usaku_Create__FP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObj_Usaku_Create(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_usaku/d_a_obj_usaku/daObj_Usaku_Create__FP10fopAc_ac_c.s" +static int daObj_Usaku_Create(fopAc_ac_c* i_this) { + fopAcM_SetupActor(i_this, obj_usaku_class); + obj_usaku_class* a_this = (obj_usaku_class*)i_this; + + int phase = dComIfG_resLoad(&a_this->mPhase, "Obj_usaku"); + if (phase == cPhs_COMPLEATE_e) { + a_this->field_0x570 = fopAcM_GetParam(a_this) & 0xFF; + if (a_this->field_0x570 == 0xFF) { + a_this->field_0x570 = 0; + } + + if (!fopAcM_entrySolidHeap(a_this, useHeapInit, 0xC60)) { + return cPhs_ERROR_e; + } + + if (a_this->mpBgW != NULL && dComIfG_Bgsp().Regist(a_this->mpBgW, a_this)) { + return cPhs_ERROR_e; + } + + a_this->mCullMtx = a_this->mpModel->getBaseTRMtx(); + fopAcM_SetMin(a_this, -300.0f, -600.0f, -300.0f); + fopAcM_SetMax(a_this, 300.0f, 600.0f, 300.0f); + daObj_Usaku_Execute(a_this); + } + + return phase; } -#pragma pop /* ############################################################################################## */ /* 80D212F8-80D21318 -00001 0020+00 1/0 0/0 0/0 .data l_daObj_Usaku_Method */ -SECTION_DATA static void* l_daObj_Usaku_Method[8] = { - (void*)daObj_Usaku_Create__FP10fopAc_ac_c, - (void*)daObj_Usaku_Delete__FP15obj_usaku_class, - (void*)daObj_Usaku_Execute__FP15obj_usaku_class, - (void*)daObj_Usaku_IsDelete__FP15obj_usaku_class, - (void*)daObj_Usaku_Draw__FP15obj_usaku_class, - (void*)NULL, - (void*)NULL, - (void*)NULL, +static actor_method_class l_daObj_Usaku_Method = { + (process_method_func)daObj_Usaku_Create, (process_method_func)daObj_Usaku_Delete, + (process_method_func)daObj_Usaku_Execute, (process_method_func)daObj_Usaku_IsDelete, + (process_method_func)daObj_Usaku_Draw, }; /* 80D21318-80D21348 -00001 0030+00 0/0 0/0 1/0 .data g_profile_OBJ_USAKU */ -SECTION_DATA extern void* g_profile_OBJ_USAKU[12] = { - (void*)0xFFFFFFFD, (void*)0x0007FFFD, - (void*)0x012A0000, (void*)&g_fpcLf_Method, - (void*)0x000005B4, (void*)NULL, - (void*)NULL, (void*)&g_fopAc_Method, - (void*)0x004E0000, (void*)&l_daObj_Usaku_Method, - (void*)0x00040100, (void*)0x000E0000, +extern actor_process_profile_definition g_profile_OBJ_USAKU = { + -3, + 7, + -3, + PROC_OBJ_USAKU, + &g_fpcLf_Method.mBase, + sizeof(obj_usaku_class), + 0, + 0, + &g_fopAc_Method.base, + 78, + &l_daObj_Usaku_Method, + 0x40100, + 0, + 14, }; - -/* 80D212EC-80D212EC 000010 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/rel/d/a/obj/d_a_obj_web1/d_a_obj_web1.cpp b/rel/d/a/obj/d_a_obj_web1/d_a_obj_web1.cpp index 81bfa84a1d..0bdcf2575d 100644 --- a/rel/d/a/obj/d_a_obj_web1/d_a_obj_web1.cpp +++ b/rel/d/a/obj/d_a_obj_web1/d_a_obj_web1.cpp @@ -238,7 +238,7 @@ static int useHeapInit(fopAc_ac_c* i_this) { } cBgD_t* dzb = (cBgD_t*)dComIfG_getObjectRes("Obj_web1", 11); - if (_this->mpBgW->Set(dzb, 1, &_this->mMtx) == 1) { + if (_this->mpBgW->Set(dzb, cBgW::MOVE_BG_e, &_this->mMtx) == 1) { return 0; } diff --git a/rel/d/a/tag/d_a_tag_chgrestart/d_a_tag_chgrestart.cpp b/rel/d/a/tag/d_a_tag_chgrestart/d_a_tag_chgrestart.cpp index c0c2aeb3cd..33aec83a66 100644 --- a/rel/d/a/tag/d_a_tag_chgrestart/d_a_tag_chgrestart.cpp +++ b/rel/d/a/tag/d_a_tag_chgrestart/d_a_tag_chgrestart.cpp @@ -1,51 +1,38 @@ /** * d_a_tag_chgrestart.cpp - * + * */ #include "rel/d/a/tag/d_a_tag_chgrestart/d_a_tag_chgrestart.h" #include "JSystem/JKernel/JKRHeap.h" #include "d/d_procname.h" -// -// External References: -// - -extern "C" void mDoMtx_YrotS__FPA4_fs(); -extern "C" void getStatusRoomDt__20dStage_roomControl_cFi(); -extern "C" void setRoom__13dSv_restart_cFRC4cXyzsSc(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_29(); -extern "C" u8 now__14mDoMtx_stack_c[48]; - /* 80D56758-80D567E4 000078 008C+00 1/1 0/0 0/0 .text Create__17daTagChgRestart_cFv */ s32 daTagChgRestart_c::Create() { - field_0x568[0].x = -100.0f * mScale.x; - field_0x568[0].z = -100.0f * mScale.z; + mVertices[0].x = -100.0f * mScale.x; + mVertices[0].z = -100.0f * mScale.z; - field_0x568[1].x = 100.0f * mScale.x; - field_0x568[1].z = -100.0f * mScale.z; + mVertices[1].x = 100.0f * mScale.x; + mVertices[1].z = -100.0f * mScale.z; - field_0x568[2].x = 100.0f * mScale.x; - field_0x568[2].z = 100.0f * mScale.z; + mVertices[2].x = 100.0f * mScale.x; + mVertices[2].z = 100.0f * mScale.z; - field_0x568[3].x = -100.0f * mScale.x; - field_0x568[3].z = 100.0f * mScale.z; + mVertices[3].x = -100.0f * mScale.x; + mVertices[3].z = 100.0f * mScale.z; - field_0x568[3].y = 0.0f; - field_0x568[2].y = 0.0f; - field_0x568[1].y = 0.0f; - field_0x568[0].y = 0.0f; + mVertices[3].y = 0.0f; + mVertices[2].y = 0.0f; + mVertices[1].y = 0.0f; + mVertices[0].y = 0.0f; return 1; } /* 80D567E4-80D56878 000104 0094+00 1/1 0/0 0/0 .text create__17daTagChgRestart_cFv */ -s32 daTagChgRestart_c::create() { +s32 daTagChgRestart_c::create() { fopAcM_SetupActor(this, daTagChgRestart_c); - + if (!Create()) { return cPhs_ERROR_e; } @@ -54,10 +41,8 @@ s32 daTagChgRestart_c::create() { } /* 80D568B8-80D56A84 0001D8 01CC+00 1/1 0/0 0/0 .text execute__17daTagChgRestart_cFv */ -#ifdef NONMATCHING -// do-while loop is wrong s32 daTagChgRestart_c::execute() { - if (i_fopAcM_isSwitch(this,daTagChgRestart_prm::getSwNo(this))) { + if (i_fopAcM_isSwitch(this, daTagChgRestart_prm::getSwNo(this))) { return 1; } @@ -66,46 +51,40 @@ s32 daTagChgRestart_c::execute() { pos -= orig.pos; mDoMtx_stack_c::YrotS(-current.angle.y); - mDoMtx_stack_c::multVec(&pos,&pos); + mDoMtx_stack_c::multVec(&pos, &pos); + + if (mVertices[0].x < pos.x && mVertices[0].z < pos.z && mVertices[2].x > pos.x && + mVertices[2].z > pos.z) + { + cXyz restart_pos = orig.pos; + s16 restart_angle = orig.angle.y; - if (field_0x568[0].x < pos.x && field_0x568[0].z < pos.z && - field_0x568[2].x > pos.x && field_0x568[2].z > pos.z) { - cXyz l_restartPos = orig.pos; - s16 l_restartAngle = orig.angle.y; - u8 playerNo = daTagChgRestart_prm::getPlayerNo(this); if (playerNo != 0xFF) { - dStage_roomStatus_c* roomStatusDt = dComIfGp_roomControl_getStatusRoomDt(fopAcM_GetRoomNo(this)); - stage_actor_class* actor = roomStatusDt->mRoomDt.getPlayer(); - stage_actor_data_class* actor_data = actor->mEntries; - int entryNum = actor->mEntryNum; + dStage_roomStatus_c* roomStatusDt = + dComIfGp_roomControl_getStatusRoomDt(fopAcM_GetRoomNo(this)); + stage_actor_class* player_data = roomStatusDt->mRoomDt.getPlayer(); - do { - actor_data++; + stage_actor_data_class* entry_p = player_data->mEntries; + for (int i = 0; i < player_data->mEntryNum; i++) { + if ((entry_p->mAngle.z & 0xFF) == playerNo) { + break; + } + + entry_p++; } - while (entryNum > 0 && actor->mEntryNum > playerNo && actor_data != 0); - - l_restartPos = actor_data->mSpawnPos; - l_restartAngle = actor_data->mAngle.y; + + restart_pos = entry_p->mSpawnPos; + restart_angle = entry_p->mAngle.y; } - + s32 l_roomNo = fopAcM_GetRoomNo(player); - dComIfGs_setRestartRoom(l_restartPos,l_restartAngle,l_roomNo); - i_fopAcM_onSwitch(this,daTagChgRestart_prm::getSwNo(this)); + dComIfGs_setRestartRoom(restart_pos, restart_angle, l_roomNo); + i_fopAcM_onSwitch(this, daTagChgRestart_prm::getSwNo(this)); } return 1; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm s32 daTagChgRestart_c::execute() { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_chgrestart/d_a_tag_chgrestart/execute__17daTagChgRestart_cFv.s" -} -#pragma pop -#endif /* 80D56A84-80D56A8C 0003A4 0008+00 1/1 0/0 0/0 .text _delete__17daTagChgRestart_cFv */ s32 daTagChgRestart_c::_delete() { @@ -125,8 +104,8 @@ static s32 daTagChgRestart_Delete(daTagChgRestart_c* i_this) { } /* 80D56ACC-80D56AEC 0003EC 0020+00 1/0 0/0 0/0 .text daTagChgRestart_Create__FP10fopAc_ac_c */ -static s32 daTagChgRestart_Create(fopAc_ac_c* param_0) { - return static_cast<daTagChgRestart_c*>(param_0)->create(); +static s32 daTagChgRestart_Create(fopAc_ac_c* i_this) { + return static_cast<daTagChgRestart_c*>(i_this)->create(); } /* ############################################################################################## */ @@ -134,7 +113,7 @@ static s32 daTagChgRestart_Create(fopAc_ac_c* param_0) { static actor_method_class l_daTagChgRestart_Method = { (process_method_func)daTagChgRestart_Create, (process_method_func)daTagChgRestart_Delete, - (process_method_func)daTagChgRestart_Execute + (process_method_func)daTagChgRestart_Execute, }; /* 80D56B20-80D56B50 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Tag_ChgRestart */ diff --git a/rel/d/a/tag/d_a_tag_hjump/d_a_tag_hjump.cpp b/rel/d/a/tag/d_a_tag_hjump/d_a_tag_hjump.cpp index 42604d127f..74e3aab553 100644 --- a/rel/d/a/tag/d_a_tag_hjump/d_a_tag_hjump.cpp +++ b/rel/d/a/tag/d_a_tag_hjump/d_a_tag_hjump.cpp @@ -55,7 +55,7 @@ int daTagHjump_c::create() { mDoMtx_stack_c::get()[1][3] -= 100.0f; current.pos.y -= 100.0f; - field_0x568->SetLock(); + mpBgW->SetLock(); mScale.x = 250.0f; mScale.y = 350.0f; mScale.z = 400.0f; |
