// // Generated by dtk // Translation Unit: d_a_obj_figure.cpp // #include "d/actor/d_a_obj_figure.h" #include "f_op/f_op_actor_mng.h" #include "d/d_com_inf_game.h" #include "d/d_com_lib_game.h" #include "d/d_snap.h" #include "d/d_camera.h" #include "d/d_a_obj.h" #include "d/d_procname.h" #include "d/actor/d_a_player_main.h" #include "m_Do/m_Do_controller_pad.h" #include "weak_bss_936_to_1036.h" // IWYU pragma: keep #define TOTAL_FIGURE_COUNT 0x86 static const char* l_arcname_tbl[] = { "Figure", "Figure2", "Figure1", "Figure0", "Figure6", "Figure5", "Figure3", "Figure4", "Figure2a", "Figure2b", "Figure6a", "Figure6b", "Figure6c", }; static u16 l_figure_comp[] = { 0x95FF, 0x94FF, 0x93FF, 0x92FF, 0x91FF, 0x90FF, 0x8FFF, 0x8EFF, 0x8DFF, 0x8CFF, 0xB1FF, 0x9CFF, 0x84FF, 0x83FF, 0x82FF, 0x81FF, 0x80FF, }; static dCcD_SrcCyl l_cyl_src = { // dCcD_SrcGObjInf { /* Flags */ 0, /* SrcObjAt Type */ 0, /* SrcObjAt Atp */ 0, /* SrcObjAt SPrm */ 0, /* SrcObjTg Type */ AT_TYPE_ALL, /* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e, /* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_VsGrpAll_e, /* SrcGObjAt Se */ 0, /* SrcGObjAt HitMark */ 0, /* SrcGObjAt Spl */ 0, /* SrcGObjAt Mtrl */ 0, /* SrcGObjAt SPrm */ 0, /* SrcGObjTg Se */ 0, /* SrcGObjTg HitMark */ 0, /* SrcGObjTg Spl */ 0, /* SrcGObjTg Mtrl */ 0, /* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e, /* SrcGObjCo SPrm */ 0, }, // cM3dGCylS { /* Center */ 0.0f, 0.0f, 0.0f, /* Radius */ 60.0f, /* Height */ 150.0f, }, }; struct FigureData { /* 0x00 */ int mBmdId; /* 0x04 */ int mModelAttr; /* 0x08 */ int mRoomId; }; // Size: 0x0C static const FigureData l_figure_dat_tbl[TOTAL_FIGURE_COUNT] = { { 0, 0x37441422, -1 }, { 1, 0x37441422, -1 }, { 2, 0x37441422, -1 }, { 3, 0x37441422, -1 }, { 0xA, 0x37441422, -1 }, { 4, 0x37441422, -1 }, { 5, 0x37441422, -1 }, { 6, 0x37441422, -1 }, { 7, 0x37441422, -1 }, { 8, 0x37441422, -1 }, { 9, 0x11001222, -1 }, { 0xB, 0x37441422, -1 }, { 0xC, 0x37441422, -1 }, { 0xD, 0x37441422, -1 }, { 0, 0x37441422, -1 }, { 1, 0x37441422, -1 }, { 2, 0x37441422, -1 }, { 4, 0x37441422, -1 }, { 5, 0x37441422, -1 }, { 7, 0x37441422, -1 }, { 8, 0x37441422, -1 }, { 9, 0x37441422, -1 }, { 0xA, 0x37441422, -1 }, { 0xB, 0x37441422, -1 }, { 0xC, 0x37441422, -1 }, { 0xD, 0x37441422, -1 }, { 0xE, 0x37441422, -1 }, { 0xF, 0x37441422, -1 }, { 0x10, 0x37441422, -1 }, { 0x11, 0x37441422, -1 }, { 0x12, 0x37441422, -1 }, { 0x13, 0x37441422, -1 }, { 0x14, 0x37441422, -1 }, { 0x15, 0x37441422, -1 }, { 0x16, 0x37441422, -1 }, { 0x17, 0x37441422, -1 }, { 0x18, 0x37441422, -1 }, { 0x19, 0x37441422, -1 }, { 0x1A, 0x37441422, -1 }, { 0x1B, 0x37441422, -1 }, { 0x1C, 0x37441422, -1 }, { 0, 0x37441422, 8 }, { 1, 0x37441422, 8 }, { 2, 0x37441422, 8 }, { 3, 0x37441422, 8 }, { 4, 0x37441422, 8 }, { 5, 0x37441422, 8 }, { 6, 0x37441422, 8 }, { 7, 0x37441422, 8 }, { 8, 0x37441422, 8 }, { 9, 0x37441422, 8 }, { 0xA, 0x37441422, 8 }, { 0xB, 0x37441422, 8 }, { 0xC, 0x37441422, 8 }, { 0xD, 0x37441422, 8 }, { 0xE, 0x37441422, 8 }, { 0xF, 0x37441422, 8 }, { 0x10, 0x37441422, 8 }, { 0x11, 0x37441422, 8 }, { 0x12, 0x37441422, 8 }, { 0x13, 0x37441422, 8 }, { 6, 0x37441422, 9 }, { 1, 0x37441422, 9 }, { 2, 0x37441422, 9 }, { 5, 0x37441422, 9 }, { 0, 0x11001222, -1 }, { 1, 0x37441422, -1 }, { 2, 0x37441422, -1 }, { 3, 0x37441422, -1 }, { 4, 0x37441422, -1 }, { 5, 0x37441422, -1 }, { 6, 0x37441422, -1 }, { 7, 0x37441422, -1 }, { 8, 0x37441422, -1 }, { 9, 0x37441422, -1 }, { 0xA, 0x37441422, -1 }, { 0xB, 0x37441422, -1 }, { 0xC, 0x37441422, -1 }, { 0xD, 0x37441422, -1 }, { 0xE, 0x37441422, -1 }, { 0xF, 0x37441422, -1 }, { 0x10, 0x37441422, -1 }, { 0x11, 0x11001222, -1 }, { 0, 0x37441422, -1 }, { 5, 0x37441422, -1 }, { 6, 0x37441422, -1 }, { 7, 0x37441422, -1 }, { 8, 0x37441422, -1 }, { 9, 0x37441422, -1 }, { 0xA, 0x37441422, -1 }, { 0xB, 0x37441422, -1 }, { 0xC, 0x37441422, -1 }, { 0xD, 0x37441422, -1 }, { 1, 0x37441422, -1 }, { 2, 0x37441422, -1 }, { 3, 0x37441422, -1 }, { 4, 0x37441422, -1 }, { 0, 0x37441422, -1 }, { 1, 0x37441422, -1 }, { 2, 0x37441422, -1 }, { 3, 0x37441422, -1 }, { 4, 0x37441422, -1 }, { 5, 0x37441422, -1 }, { 6, 0x37441422, -1 }, { 7, 0x37441422, -1 }, { 8, 0x37441422, -1 }, { 9, 0x37441422, -1 }, { 0x12, 0x37441422, -1 }, { 0xA, 0x11001222, -1 }, { 0xB, 0x11001222, -1 }, { 0xC, 0x11001222, -1 }, { 0xD, 0x37441422, -1 }, { 0xE, 0x37441422, -1 }, { 0xF, 0x37441422, -1 }, { 0x10, 0x37441422, -1 }, { 0x11, 0x37441422, -1 }, { 0, 0x37441422, 0xA }, { 1, 0x37441422, 0xA }, { 2, 0x11001222, 0xA }, { 3, 0x11001222, 0xA }, { 4, 0x11001222, 0xA }, { 5, 0x37441422, 0xA }, { 6, 0x37441422, 0xA }, { 7, 0x37441422, 0xA }, { 0, 0x37441422, 0xB }, { 1, 0x11001222, 0xB }, { 2, 0x11001222, 0xB }, { 3, 0x37441422, 0xB }, { 4, 0x37441422, 0xB }, { 0, 0x11001222, 0xC }, { 1, 0x37441422, 0xC }, { 2, 0x11001222, 0xC }, { 3, 0x11001222, 0xC }, { 4, 0x37441422, 0xC }, }; struct FigureCheckTbl { /* 0x00 */ f32 field_0x00; /* 0x04 */ f32 field_0x04; /* 0x08 */ f32 field_0x08; /* 0x0C */ f32 field_0x0C; /* 0x10 */ f32 field_0x10; /* 0x14 */ f32 field_0x14; /* 0x18 */ f32 field_0x18; /* 0x1C */ f32 field_0x1C; /* 0x20 */ f32 field_0x20; /* 0x24 */ f32 field_0x24; /* 0x28 */ s16 field_0x28; /* 0x2A */ s16 field_0x2A; /* 0x2C */ s16 field_0x2C; /* 0x2E */ s16 field_0x2E; /* 0x30 */ s16 field_0x30; /* 0x32 */ s16 field_0x32; }; // Size: 0x34 static const FigureCheckTbl l_figure_check_tbl[] = { { 200.0f, 5.0f, 118.0f, 80.0f, 150.0f, 30.0f, 50.0f, 2.0f, 20.0f, 60.0f, 0x0000, 0x0200, 0x0200, 0xE3E0, 0x0FA0, 0x0000, }, { 200.0f, 5.0f, 118.0f, 80.0f, 150.0f, 30.0f, 50.0f, 2.0f, 20.0f, 60.0f, 0x0000, 0x0200, 0x0200, 0xE3E0, 0x0FA0, 0x0000, }, { 200.0f, 5.0f, 150.0f, 80.0f, 200.0f, 30.0f, 50.0f, 2.0f, 20.0f, 60.0f, 0x0000, 0x0200, 0x0200, 0xE3E0, 0x0FA0, 0x0000, }, { 200.0f, 5.0f, 150.0f, 80.0f, 200.0f, 30.0f, 50.0f, 2.0f, 20.0f, 60.0f, 0x0000, 0x0200, 0x0200, 0xE3E0, 0x0FA0, 0x0000, }, }; /* 000000EC-0000032C .text __ct__13daObjFigure_cFv */ daObjFigure_c::daObjFigure_c() { mFigureNo = getPrmFigureNo(); if(mFigureNo == 0xFF) { mFigureNo = 0; } if(mFigureNo >= TOTAL_FIGURE_COUNT) { mFigureNo = 0; } m734 = current.angle.y; mbDisplay = isFigureGet(mFigureNo); m732 = 0; m734 = 0; m736 = current.angle.y; m73C = 0; } /* 00000588-000005A8 .text CheckCreateHeap__FP10fopAc_ac_c */ static BOOL CheckCreateHeap(fopAc_ac_c* i_this) { return static_cast(i_this)->createHeap(); } /* 000005A8-00000624 .text phase_1__FP13daObjFigure_c */ static s32 phase_1(daObjFigure_c* i_this) { fopAcM_SetupActor(i_this, daObjFigure_c) i_this->setResFlag(0x1); int status = dComIfG_resLoad(i_this->getPhase1P(), "Figure"); if(status != cPhs_ERROR_e && status == cPhs_COMPLEATE_e) { return cPhs_NEXT_e; } return status; } /* 00000624-000006F0 .text phase_2__FP13daObjFigure_c */ static s32 phase_2(daObjFigure_c* i_this) { i_this->setResFlag(0x2); u8 figureNo = i_this->getFigureNo(); int id = dSnap_GetFigRoomId(figureNo); if(l_figure_dat_tbl[figureNo].mRoomId >= 0) { id = l_figure_dat_tbl[figureNo].mRoomId; } int status = dComIfG_resLoad(i_this->getPhase2P(), l_arcname_tbl[id]); if(status == cPhs_COMPLEATE_e) { if(fopAcM_entrySolidHeap(i_this, CheckCreateHeap, figureNo == 0x40 ? 0x25000 : 0xCD90)) { return i_this->createInit(); } else { return cPhs_ERROR_e; } } return status; } /* 000006F0-00000720 .text _create__13daObjFigure_cFv */ s32 daObjFigure_c::_create() { static cPhs__Handler l_method[] = { (cPhs__Handler)&phase_1, (cPhs__Handler)&phase_2, NULL, }; dComLbG_PhaseHandler(&mPhsLoad, l_method, this); } /* 00000720-00000A90 .text createHeap__13daObjFigure_cFv */ BOOL daObjFigure_c::createHeap() { int id = dSnap_GetFigRoomId(getFigureNo()); if(l_figure_dat_tbl[getFigureNo()].mRoomId >= 0) { id = l_figure_dat_tbl[getFigureNo()].mRoomId; } J3DModelData* pModelData; const char* arcname = l_arcname_tbl[id]; pModelData = (J3DModelData*)(dComIfG_getObjectIDRes(arcname, getFigureBmd(mFigureNo))); if(pModelData == NULL) { return false; } mpModel = mDoExt_J3DModel__create(pModelData, 0x80000, l_figure_dat_tbl[mFigureNo].mModelAttr); if(mpModel == NULL) { return false; } if(mFigureNo == 0x3D) { J3DAnmTevRegKey* pBrkData = static_cast(dComIfG_getObjectIDRes(arcname, 7)); if(pBrkData == NULL) { return false; } mpBrkAnm = new mDoExt_brkAnm; if(mpBrkAnm == NULL) { return false; } if(!mpBrkAnm->init(pModelData, pBrkData, true, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0)) { return false; } } if(mFigureNo == 0x40) { J3DModelData* p1 = (J3DModelData*)dComIfG_getObjectIDRes(arcname, 4); mpMorf = new mDoExt_McaMorf( p1, NULL, NULL, (J3DAnmTransformKey*)dComIfG_getObjectIDRes(arcname, 0), J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, 1, NULL, 0x80000, 0x11001222 ); if(mpMorf == NULL || mpMorf->getModel() == NULL) { return false; } J3DSkinDeform* pDeform = new J3DSkinDeform; if(pDeform == NULL) { return false; } if(mpMorf->getModel()->setSkinDeform(pDeform, 1) != 0) { return false; } } J3DModelData* pPedestalData = static_cast(dComIfG_getObjectIDRes("Figure", 1)); if(pPedestalData == NULL) { return false; } mpPedestalModel = mDoExt_J3DModel__create(pPedestalData, 0x80000, 0x11020022); if(mpPedestalModel == NULL) { return false; } mpPedestalBtp = static_cast(dComIfG_getObjectIDRes("Figure", 2)); if(mpPedestalBtp == NULL) { return false; } if(!mBtpAnm1.init(pPedestalData, mpPedestalBtp, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0)) { return false; } return true; } /* 00000A90-00000BF4 .text createInit__13daObjFigure_cFv */ s32 daObjFigure_c::createInit() { mStts.Init(0xFF, 0xFF, this); mCyl1.Set(l_cyl_src); mCyl1.SetStts(&mStts); mCyl2.Set(l_cyl_src); mCyl2.SetStts(&mStts); mCyl2.SetCoSPrm(0x129); mCyl2.SetR(200.0f); mCyl2.SetH(100.0f); fopAcM_SetMtx(this, mpPedestalModel->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -50.0f, 0.0f, -50.0f, 50.0f, 200.0f, 50.0f); mFigureCheckEvtIdx = dComIfGp_evmng_getEventIdx("FIGURE_CHECK"); mEventCut.setActorInfo("Figure", this); eventInfo.setEventId(mFigureCheckEvtIdx); attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 0xA8; attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 0xA8; attention_info.flags = fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e | fopAc_Attn_TALKFLAG_CHECK_e; shape_angle = current.angle; dKy_tevstr_init(&mTevStrBG2, fopAcM_GetHomeRoomNo(this), 0xFF); cMtx_copy(mDoMtx_getIdentity(), mMtx); setMtx(); return cPhs_COMPLEATE_e; } /* 00000BF4-00000C78 .text _delete__13daObjFigure_cFv */ BOOL daObjFigure_c::_delete() { dComIfG_resDelete(getPhase1P(), "Figure"); int id = dSnap_GetFigRoomId(getFigureNo()); if(l_figure_dat_tbl[getFigureNo()].mRoomId >= 0) { id = l_figure_dat_tbl[getFigureNo()].mRoomId; } dComIfG_resDelete(getPhase2P(), l_arcname_tbl[id]); return true; } void linkDraw(mDoExt_McaMorf*); /* 00000C78-00000DE8 .text _draw__13daObjFigure_cFv */ BOOL daObjFigure_c::_draw() { g_env_light.settingTevStruct(TEV_TYPE_BG2, ¤t.pos, &mTevStrBG2); g_env_light.setLightTevColorType(mpModel, &mTevStrBG2); g_env_light.settingTevStruct(TEV_TYPE_BG0, ¤t.pos, &tevStr); g_env_light.setLightTevColorType(mpPedestalModel, &tevStr); J3DModelData* pModelData = mpPedestalModel->getModelData(); if(mbDisplay) { if(mpBrkAnm) { J3DModelData* pModelData2 = mpModel->getModelData(); mpBrkAnm->entry(pModelData2, mpBrkAnm->getFrame()); } mBtpAnm1.entry(pModelData, 1); mDoExt_modelUpdateDL(mpPedestalModel); mDoExt_modelUpdateDL(mpModel); mBtpAnm1.remove(pModelData); if(mpBrkAnm) { mpBrkAnm->remove(mpModel->getModelData()); } if(mpMorf) { g_env_light.setLightTevColorType(mpMorf->getModel(), &mTevStrBG2); linkDraw(mpMorf); } } else { if(mFigureNo != 0x40 && mFigureNo != 0x32) { mBtpAnm1.entry(pModelData, 0); mDoExt_modelUpdateDL(mpPedestalModel); mBtpAnm1.remove(pModelData); } } return true; } typedef void(daObjFigure_c::*ProcFunc_t)(); static const ProcFunc_t moveProc[] = { &daObjFigure_c::executeNormal, }; /* 00000DE8-00000F10 .text _execute__13daObjFigure_cFv */ BOOL daObjFigure_c::_execute() { if(!dComIfGp_event_runCheck()) { (this->*moveProc[m73C])(); } else { eventMove(); } if(mbDisplay || (getFigureNo() != 0x40 && getFigureNo() != 0x32)) { mCyl1.SetC(current.pos); mCyl2.SetC(current.pos); dComIfG_Ccsp()->Set(&mCyl1); dComIfG_Ccsp()->Set(&mCyl2); } attention_info.position.set(current.pos.x, current.pos.y + 200.0f, current.pos.z); eyePos.set(current.pos.x, current.pos.y + 150.0f, current.pos.z); if(mpBrkAnm) { mpBrkAnm->play(); } setMtx(); return true; } /* 00000F10-00000FD4 .text executeNormal__13daObjFigure_cFv */ void daObjFigure_c::executeNormal() { if(mbDisplay) { fopAc_ac_c* pLink = dComIfGp_getLinkPlayer(); f32 temp1; s16 temp2; dNpc_calc_DisXZ_AngY(current.pos, pLink->current.pos, &temp1, &temp2); temp2 -= current.angle.y; if(150.0f > temp1 && abs(temp2) < 0x32C8) { eventInfo.onCondition(dEvtCnd_CANTALK_e); } } } /* 00000FD4-00001060 .text eventMove__13daObjFigure_cFv */ void daObjFigure_c::eventMove() { if(dComIfGp_evmng_endCheck(mFigureCheckEvtIdx)) { dComIfGp_event_reset(); } else { bool attn = mEventCut.getAttnFlag(); if (mEventCut.cutProc()) { if (!mEventCut.getAttnFlag()) { mEventCut.setAttnFlag(attn); } } else { privateCut(); } } } /* 00001060-0000119C .text privateCut__13daObjFigure_cFv */ void daObjFigure_c::privateCut() { static char* cut_name_tbl[] = { "MES_SET", "ON_PLR", "OFF_PLR", }; int staffIdx = dComIfGp_evmng_getMyStaffId("Figure"); if(staffIdx != -1) { m741 = dComIfGp_evmng_getMyActIdx(staffIdx, cut_name_tbl, ARRAY_SIZE(cut_name_tbl), TRUE, 0); if(m741 == -1) { dComIfGp_evmng_cutEnd(staffIdx); } else { if(dComIfGp_evmng_getIsAddvance(staffIdx)) { switch(m741) { case 0: eventMesSetInit(staffIdx); break; case 1: eventOnPlrInit(); break; case 2: eventOffPlrInit(); break; } } bool end; switch(m741) { case 0: end = eventMesSet(); break; default: end = true; break; } if(end) { dComIfGp_evmng_cutEnd(staffIdx); } } } } /* 0000119C-00001294 .text eventMesSetInit__13daObjFigure_cFi */ void daObjFigure_c::eventMesSetInit(int staffIdx) { u32* pMsgNo = dComIfGp_evmng_getMyIntegerP(staffIdx, "MsgNo"); if(pMsgNo) { m72C = NULL; switch(*pMsgNo) { case 0: setMessage(getMsg()); break; case 1: break; default: setMessage(*pMsgNo); break; } if(m72C) { setMessage(*m72C); } } else { m72C++; setMessage(*m72C); } m724 = l_figure_check_tbl[0].field_0x18; m728 = l_figure_check_tbl[0].field_0x08; m738 = 0; m73F = 0; m73A = 10; } /* 00001294-00001600 .text eventMesSet__13daObjFigure_cFv */ bool daObjFigure_c::eventMesSet() { switch(m73F) { case 0: { if(m73A != 0) { m73A--; } else { dComIfGp_setDoStatusForce(0x21); dComIfGp_setAStatusForce(0x27); if(g_mDoCPd_cpadInfo[0].mMainStickPosX || g_mDoCPd_cpadInfo[0].mMainStickPosY || g_mDoCPd_cpadInfo[0].mCStickPosY) { m738 = l_figure_check_tbl[0].field_0x32; m734 += (s16)(g_mDoCPd_cpadInfo[0].mMainStickPosX * l_figure_check_tbl[0].field_0x2C); m728 += (s16)(g_mDoCPd_cpadInfo[0].mMainStickPosY * l_figure_check_tbl[0].field_0x04); if(m728 < l_figure_check_tbl[0].field_0x0C) { m728 = l_figure_check_tbl[0].field_0x0C; } else if(m728 > l_figure_check_tbl[0].field_0x10) { m728 = l_figure_check_tbl[0].field_0x10; } m724 -= g_mDoCPd_cpadInfo[0].mCStickPosY * l_figure_check_tbl[0].field_0x1C; if(m724 < l_figure_check_tbl[0].field_0x20) { m724 = l_figure_check_tbl[0].field_0x20; } else if(m724 > l_figure_check_tbl[0].field_0x24) { m724 = l_figure_check_tbl[0].field_0x24; } } else { if(m738 != 0) { m738--; } else { m736 += l_figure_check_tbl[0].field_0x28; } } dComIfGp_setDoStatusForce(0x21); dComIfGp_setAStatusForce(0x27); if(CPad_CHECK_TRIG_B(0)) { m732 = 0; m734 = 0; m736 = current.angle.y; return true; } if(CPad_CHECK_TRIG_A(0)) { m73F = 1; } } f32 temp = m728 + l_figure_check_tbl[0].field_0x14; m70C.set(0.0f, temp, 0.0f); temp = m728 + l_figure_check_tbl[0].field_0x14; m718.x = 0.0f; m718.y = temp; m718.z = l_figure_check_tbl[0].field_0x00; mDoMtx_stack_c::YrotS(current.angle.y + m734); mDoMtx_stack_c::multVec(&m718, &m718); m70C += current.pos; m718 += current.pos; dCam_getBody()->Set(m70C, m718, m724, 0); break; } case 1: talk(0); if(m694 != fpcM_ERROR_PROCESS_ID_e) { m73F = 2; } break; case 2: if(talk(0) == fopMsgStts_BOX_CLOSED_e) { m73F = 0; } break; } return false; } /* 00001600-00001658 .text eventOnPlrInit__13daObjFigure_cFv */ void daObjFigure_c::eventOnPlrInit() { ((daPy_lk_c*)dComIfGp_getLinkPlayer())->offPlayerNoDraw(); dCam_getBody()->Reset(); dCam_getBody()->Start(); dComIfGs_offTmpBit(0x408); } /* 00001658-000016A8 .text eventOffPlrInit__13daObjFigure_cFv */ void daObjFigure_c::eventOffPlrInit() { ((daPy_lk_c*)dComIfGp_getLinkPlayer())->onPlayerNoDraw(); dCam_getBody()->Stop(); dComIfGs_onTmpBit(0x408); } /* 000016A8-00001788 .text talk__13daObjFigure_cFi */ u16 daObjFigure_c::talk(int param_1) { u16 msgStatus = 0xFF; if(m694 == fpcM_ERROR_PROCESS_ID_e) { if(param_1 == 1) { m69C = getMsg(); } m694 = fopMsgM_messageSet(m69C, this); mpCurrMsg = NULL; } else { if(mpCurrMsg) { msgStatus = mpCurrMsg->mStatus; if (msgStatus == fopMsgStts_MSG_DISPLAYED_e) { mpCurrMsg->mStatus = next_msgStatus(&m69C); if(mpCurrMsg->mStatus == fopMsgStts_MSG_CONTINUES_e) { fopMsgM_messageSet(m69C); } } else if (msgStatus == fopMsgStts_BOX_CLOSED_e) { mpCurrMsg->mStatus = fopMsgStts_MSG_DESTROYED_e; m694 = fpcM_ERROR_PROCESS_ID_e; } } else { mpCurrMsg = fopMsgM_SearchByID(m694); } } return msgStatus; } /* 00001788-000017D8 .text next_msgStatus__13daObjFigure_cFPUl */ u16 daObjFigure_c::next_msgStatus(u32* pMsgNo) { u16 msgStatus = fopMsgStts_MSG_CONTINUES_e; if(m72C) { m72C++; switch(*m72C) { case 0: m72C = NULL; msgStatus = fopMsgStts_MSG_ENDS_e; break; default: *pMsgNo = *m72C; break; } } else { msgStatus = fopMsgStts_MSG_ENDS_e; } return msgStatus; } /* 000017D8-000017EC .text getMsg__13daObjFigure_cFv */ u32 daObjFigure_c::getMsg() { m72C = NULL; return 0x37DD + getFigureNo(); } /* 000017EC-000017FC .text setMessage__13daObjFigure_cFUl */ void daObjFigure_c::setMessage(u32 msgNo) { m694 = fpcM_ERROR_PROCESS_ID_e; m69C = msgNo; } /* 000017FC-00001828 .text getPrmFigureNo__13daObjFigure_cFv */ u8 daObjFigure_c::getPrmFigureNo() { return daObj::PrmAbstract(this, PRM_FIGURE_NO_W, PRM_FIGURE_NO_S); } /* 00001828-00001954 .text setMtx__13daObjFigure_cFv */ void daObjFigure_c::setMtx() { mpPedestalModel->setBaseScale(scale); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(current.angle.y); mpPedestalModel->setBaseTRMtx(mDoMtx_stack_c::get()); cXyz scale(1.0f, 1.0f, 1.0f); mpModel->setBaseScale(scale); mDoMtx_stack_c::transS(current.pos.x, current.pos.y + 100.0f, current.pos.z); mDoMtx_stack_c::YrotM(m736); mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); if(mpMorf) { mpMorf->getModel()->setBaseScale(scale); mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); } } /* 00001954-000019DC .text isFigureGet__13daObjFigure_cFUc */ BOOL daObjFigure_c::isFigureGet(u8 figureNo) { if(figureNo / 8 < 0x11) { u8 reg = dComIfGs_getEventReg(l_figure_comp[figureNo / 8]); u32 ret = reg & (1 << figureNo % 8); return (u8)ret; // Fakematch for the clrlwi } return false; } /* 000019DC-00001A80 .text getFigureBmd__13daObjFigure_cFUc */ int daObjFigure_c::getFigureBmd(u8 figureNo) { u32 bmd = l_figure_dat_tbl[figureNo].mBmdId; switch(figureNo) { case 0x10: if(dComIfGs_isEventBit(0x2D01)) { bmd = 3; } break; case 0x12: if(dComIfGs_isEventBit(0x2D01)) { bmd = 6; } break; default: break; } return bmd; } /* 00001A80-00001AA0 .text daSampleCreate__FPv */ static s32 daSampleCreate(void* i_this) { return static_cast(i_this)->_create(); } /* 00001AA0-00001AC0 .text daSampleDelete__FPv */ static BOOL daSampleDelete(void* i_this) { return static_cast(i_this)->_delete(); } /* 00001AC0-00001AE0 .text daSampleExecute__FPv */ static BOOL daSampleExecute(void* i_this) { return static_cast(i_this)->_execute(); } /* 00001AE0-00001B00 .text daSampleDraw__FPv */ static BOOL daSampleDraw(void* i_this) { return static_cast(i_this)->_draw(); } /* 00001B00-00001B08 .text daSampleIsDelete__FPv */ static BOOL daSampleIsDelete(void*) { return true; } /* 00001B08-00002148 .text linkDraw__FP14mDoExt_McaMorf */ void linkDraw(mDoExt_McaMorf* pMorf) { /* Nonmatching - regalloc (maybe the same issue as daPy_lk_c::draw?) */ pMorf->calc(); J3DModel* model = pMorf->getModel(); J3DModelData* modelData = model->getModelData(); j3dSys.setModel(model); j3dSys.setTexture(modelData->getTexture()); model->unlock(); static mDoExt_offCupOnAupPacket l_offCupOnAupPacket1; static mDoExt_offCupOnAupPacket l_offCupOnAupPacket2; static mDoExt_onCupOffAupPacket l_onCupOffAupPacket1; static mDoExt_onCupOffAupPacket l_onCupOffAupPacket2; J3DShape* ZOffBlendShape[4]; J3DShape* ZOffNoneShape[4]; J3DShape* ZOnShape[4]; J3DJoint* link_root_joint = modelData->getJointNodePointer(0x00); // link_root joint J3DJoint* cl_eye_joint = modelData->getJointNodePointer(0x13); // cl_eye joint J3DJoint* cl_mayu_joint = modelData->getJointNodePointer(0x15); // cl_mayu joint J3DMaterial* mtl; mtl = modelData->getJointNodePointer(0x13)->getMesh(); // cl_eye joint int zoff_blend_cnt = 0; int zoff_none_cnt = 0; int zon_cnt = 0; int i; for (i = 0; i < 2; i++) { while (mtl) { mtl->setMaterialMode(1); if (mtl->getZMode()->getCompareEnable() == 0) { // TODO: debug map indicates J3DBlend::getType inline was used if (mtl->getBlend()->mBlendMode == GX_BM_BLEND) { ZOffBlendShape[zoff_blend_cnt] = mtl->getShape(); zoff_blend_cnt++; JUT_ASSERT(0x6E7, zoff_blend_cnt <= 4); } else { ZOffNoneShape[zoff_none_cnt] = mtl->getShape(); zoff_none_cnt++; JUT_ASSERT(0x6EA, zoff_none_cnt <= 4); } } else { ZOnShape[zon_cnt] = mtl->getShape(); zon_cnt++; JUT_ASSERT(0x6EE, zon_cnt <= 4); } mtl = mtl->getNext(); } mtl = modelData->getJointNodePointer(0x15)->getMesh(); // cl_mayu joint } dComIfGd_setListP0(); l_onCupOffAupPacket2.entryOpa(); for(i = 0; i < 4; i++) { ZOffBlendShape[i]->hide(); ZOnShape[i]->hide(); ZOffNoneShape[i]->show(); } cl_eye_joint->entryIn(); cl_mayu_joint->entryIn(); l_offCupOnAupPacket2.entryOpa(); for(i = 0; i < 4; i++) { ZOffBlendShape[i]->show(); ZOffNoneShape[i]->hide(); } cl_eye_joint->entryIn(); cl_mayu_joint->entryIn(); mtl = link_root_joint->getMesh(); for (i = 0; mtl != NULL; i++, mtl = mtl->getNext()) { if(i != 2 && i != 5) { mtl->getShape()->hide(); } } link_root_joint->entryIn(); for (i = 0, mtl = link_root_joint->getMesh(); mtl != NULL; i++, mtl = mtl->getNext()) { if(i != 2 && i != 5) { mtl->getShape()->show(); } else { mtl->getShape()->hide(); } } l_onCupOffAupPacket1.entryOpa(); for(i = 0; i < 4; i++) { ZOffBlendShape[i]->hide(); ZOnShape[i]->show(); ZOffNoneShape[i]->hide(); } cl_eye_joint->entryIn(); cl_mayu_joint->entryIn(); l_offCupOnAupPacket1.entryOpa(); for(i = 0; i < 4; i++) { ZOnShape[i]->hide(); } dComIfGd_setList(); mDoExt_modelEntryDL(pMorf->getModel()); for (mtl = link_root_joint->getMesh(); mtl != NULL; mtl = mtl->getNext()) { mtl->getShape()->show(); } modelData->getJointNodePointer(0x14)->getMesh()->getShape()->show(); // cl_hana joint modelData->getJointNodePointer(0x29)->getMesh()->getShape()->show(); // cl_back joint } static actor_method_class daSampleMethodTable = { (process_method_func)daSampleCreate, (process_method_func)daSampleDelete, (process_method_func)daSampleExecute, (process_method_func)daSampleIsDelete, (process_method_func)daSampleDraw, }; actor_process_profile_definition g_profile_OBJ_FIGURE = { /* LayerID */ fpcLy_CURRENT_e, /* ListID */ 0x0007, /* ListPrio */ fpcPi_CURRENT_e, /* ProcName */ PROC_OBJ_FIGURE, /* Proc SubMtd */ &g_fpcLf_Method.base, /* Size */ sizeof(daObjFigure_c), /* SizeOther */ 0, /* Parameters */ 0, /* Leaf SubMtd */ &g_fopAc_Method.base, /* Priority */ 0x01C7, /* Actor SubMtd */ &daSampleMethodTable, /* Status */ fopAcStts_CULL_e | fopAcStts_UNK40000_e, /* Group */ fopAc_ACTOR_e, /* CullType */ fopAc_CULLBOX_CUSTOM_e, };