/** * @file d_a_midna.cpp * */ #include "d/dolzel_rel.h" #include "d/actor/d_a_midna.h" #include "JSystem/J3DGraphLoader/J3DAnmLoader.h" #include "d/d_meter2_info.h" #include "d/actor/d_a_alink.h" #include "d/actor/d_a_kago.h" #include "d/d_demo.h" #include "d/d_msg_object.h" static f32 dummy_lit_3777(int idx, u8 foo) { Vec dummy_vec = {0.0f, 0.0f, 0.0f}; switch (idx) { case 0: return dummy_vec.x; case 1: return dummy_vec.y; default: return dummy_vec.z; } } /* 804C64D4-804C64DC 00000C 0006+02 5/6 0/0 0/0 .rodata l_arcName */ static char const l_arcName[6] = "Midna"; /* 804C64DC-804C64E8 000014 000C+00 0/1 0/0 0/0 .rodata l_eyeOffset */ static Vec const l_eyeOffset = { 16.0f, -10.400001f, 0.0f }; /* 804C64E8-804C64F4 000020 000C+00 0/1 0/0 0/0 .rodata l_headCenterOffset */ static Vec const l_headCenterOffset = { 0.0f, -10.400001f, 0.0f }; /* 804C64F4-804C64FC 00002C 0008+00 0/2 0/0 0/0 .rodata l_normalColor */ static GXColorS10 const l_normalColor = { 0x50, 0x00, 0x00, 0x00 }; /* 804C64FC-804C6500 000034 0004+00 0/3 0/0 0/0 .rodata l_normalKColor */ static GXColor const l_normalKColor = { 0xB4, 0x87, 0x00, 0x00 }; /* 804C6500-804C6504 000038 0004+00 0/3 0/0 0/0 .rodata l_normalKColor2 */ static GXColor const l_normalKColor2 = { 0x00, 0xC3, 0xC3, 0x00 }; /* 804C6504-804C650C 00003C 0008+00 0/1 0/0 0/0 .rodata l_bigColor */ static GXColorS10 const l_bigColor = { 0xFF, 0x64, 0x78, 0x00 }; /* 804C650C-804C6510 000044 0004+00 0/1 0/0 0/0 .rodata l_bigKColor */ static GXColor const l_bigKColor = { 0x1E, 0x00, 0x00, 0x00 }; /* 804C6510-804C6514 000048 0004+00 0/3 0/0 0/0 .rodata l_lNormalKColor */ static GXColor const l_lNormalKColor = { 0xFF, 0xDC, 0x00, 0x00 }; /* 804C6514-804C6518 00004C 0004+00 0/3 0/0 0/0 .rodata l_lNormalKColor2 */ static GXColor const l_lNormalKColor2 = { 0x00, 0xC3, 0xEB, 0x00 }; /* 804C6518-804C6520 000050 0008+00 0/1 0/0 0/0 .rodata l_lBigColor */ static GXColorS10 const l_lBigColor = { 0xFF, 0x78, 0x00, 0x00 }; /* 804C6520-804C6524 000058 0004+00 0/1 0/0 0/0 .rodata l_lBigKColor2 */ static GXColor const l_lBigKColor2 = { 0xAA, 0xFF, 0xC3, 0x00 }; /* 804C6524-804C6560 00005C 003C+00 0/2 0/0 0/0 .rodata l_hairScale */ static Vec const l_hairScale[5] = { {0.3f, 0.8f, 0.7f}, {0.2f, 0.8f, 0.4f}, {0.15f, 0.75f, 0.5f}, {0.1f, 0.7f, 0.7f}, {1.0f, 1.0f, 1.0f}, }; enum Joint { /* 0x00 */ JNT_WORLD_ROOT, /* 0x01 */ JNT_BACKBONE1, /* 0x02 */ JNT_BACKBONE2, /* 0x03 */ JNT_NECK, /* 0x04 */ JNT_HEAD, /* 0x05 */ JNT_CHIN, /* 0x06 */ JNT_HAIR_1, /* 0x07 */ JNT_HAIR_2, /* 0x08 */ JNT_HAIR_3, /* 0x09 */ JNT_HAIR_4, /* 0x0A */ JNT_HAIR_5, /* 0x0B */ JNT_MOUTH, /* 0x0C */ JNT_SHOULDER_L, /* 0x0D */ JNT_ARM_L1, /* 0x0E */ JNT_ARM_L2, /* 0x0F */ JNT_HAND_L, /* 0x10 */ JNT_SHOULDER_R, /* 0x11 */ JNT_ARM_R1, /* 0x12 */ JNT_ARM_R2, /* 0x13 */ JNT_HAND_R, /* 0x14 */ JNT_WAIST, /* 0x15 */ JNT_CLOTCHL, /* 0x16 */ JNT_LEG_L1, /* 0x17 */ JNT_LEG_L2, /* 0x18 */ JNT_FOOT_L, /* 0x19 */ JNT_CLOTCHR, /* 0x1A */ JNT_LEG_R1, /* 0x1B */ JNT_LEG_R2, /* 0x1C */ JNT_FOOT_R, /* 0x1D */ JNT_MAX, }; /* 804C6560-804C6580 000098 0020+00 1/3 0/0 0/0 .rodata m__14daMidna_hio_c0 */ daMidna_hio_c0::param const daMidna_hio_c0::m = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 1.0f, -87.0f, 25.0f, }; bool daMidna_matAnm_c::sEyeMoveFlg; u8 daMidna_matAnm_c::sMorfFrame; /* 804BC218-804BC248 000078 0030+00 2/2 0/0 0/0 .text init__16daMidna_matAnm_cFv */ void daMidna_matAnm_c::init() { mOldTransX = 0.0f; mOldTransY = 0.0f; mNowOffsetX = 0.0f; mNowOffsetY = 0.0f; sEyeMoveFlg = false; sMorfFrame = 0; } /* 804BC248-804BC36C 0000A8 0124+00 1/0 0/0 0/0 .text calc__16daMidna_matAnm_cCFP11J3DMaterial */ void daMidna_matAnm_c::calc(J3DMaterial* i_material) const { J3DMaterialAnm::calc(i_material); for (u32 i = 0; i < 8; i++) { if (getTexMtxAnm(i).getAnmFlag()) { J3DTexMtxInfo& tex_mtx = i_material->getTexGenBlock()->getTexMtx(i)->getTexMtxInfo(); if (sMorfFrame != 0) { f32 t = 1.0f / (sMorfFrame + 1); tex_mtx.mSRT.mTranslationX = mOldTransX * (1.0f - t) + tex_mtx.mSRT.mTranslationX * t; tex_mtx.mSRT.mTranslationY = mOldTransY * (1.0f - t) + tex_mtx.mSRT.mTranslationY * t; } else if (sEyeMoveFlg != 0) { tex_mtx.mSRT.mTranslationX = mNowOffsetX; tex_mtx.mSRT.mTranslationY = mNowOffsetY; } const_cast(this)->mOldTransX = tex_mtx.mSRT.mTranslationX; const_cast(this)->mOldTransY = tex_mtx.mSRT.mTranslationY; } } } /* 804BC36C-804BC3E0 0001CC 0074+00 1/0 0/0 0/0 .text * execute__20daMidna_McaMorfCB1_cFUsP16J3DTransformInfo */ int daMidna_McaMorfCB1_c::execute(u16 i_jointNo, J3DTransformInfo* transform) { if (!daPy_py_c::m_midnaActor->checkNoHairScale()) { if (i_jointNo >= JNT_HAIR_1 && i_jointNo <= JNT_HAIR_5) { cXyz* scale = &mpScale[i_jointNo - JNT_HAIR_1]; transform->mScale.x *= scale->x; transform->mScale.y *= scale->y; transform->mScale.z *= scale->z; } } return 1; } /* 804C6590-804C65E4 0000C8 0054+00 0/1 0/0 0/0 .rodata m_texDataTable__9daMidna_c */ daMidna_texData_s const daMidna_c::m_texDataTable[21] = { 0x0405, 0x03A4, 0x03F5, 0x0399, 0x03F6, 0x0399, 0x0407, 0x0399, 0x0406, 0x03A5, 0x0405, 0x03A0, 0x03FA, 0x0399, 0x0401, 0x039E, 0x03F7, 0x039F, 0x0403, 0x03A2, 0x0404, 0x03A3, 0x03F7, 0x03A1, 0x03FC, 0x039A, 0x0402, 0x0399, 0x03FE, 0x039B, 0x03FF, 0x039C, 0x03F8, 0x0399, 0x03F9, 0x0399, 0x0400, 0x039D, 0x03FB, 0x0399, 0x03FD, 0x0399, }; /* 804C65E4-804C6860 00011C 027C+00 3/12 0/0 0/0 .rodata m_anmDataTable__9daMidna_c */ daMidna_anmData_s const daMidna_c::m_anmDataTable[53] = { 0x01DC, 0x00, -1.0f, 0, 0x01B7, 0x01, -1.0f, 0, 0x01B8, 0x02, -1.0f, 0, 0x01DD, 0x03, -1.0f, 0, 0x01D3, 0x04, 1.0f, Z2SE_MDN_V_LV_PANIC, 0x01DB, 0x00, -1.0f, 0, 0x01C8, 0x05, 1.0f, Z2SE_MDN_V_FLY_OUT, 0x01C7, 0x00, -1.0f, 0, 0x01CB, 0x10, -1.0f, 0, 0x01CA, 0x00, 2.0f, Z2SE_MDN_V_HIP, 0x01C9, 0x00, 0.1f, Z2SE_MDN_V_LEADSWAIT, 0x01BA, 0x06, 3.0f, Z2SE_MDN_V_CLINGST, 0x01D8, 0x07, 3.0f, Z2SE_MDN_V_SWAITB_1, 0x01D9, 0x08, 1.0f, Z2SE_MDN_V_SWAITC, 0x01E1, 0x09, 1.0f, Z2SE_MDN_V_WLDIEA, 0x01E2, 0x0A, 1.0f, Z2SE_MDN_V_WLSWIMDIE, 0x0217, 0x00, -1.0f, 0, 0x0218, 0x00, -1.0f, 0, 0x021C, 0x00, -1.0f, 0, 0x0219, 0x00, -1.0f, 0, 0x01E0, 0x0B, -1.0f, 0, 0x01DF, 0x10, 7.0f, Z2SE_MDN_V_WAITTP, 0x01BE, 0x0C, 1.0f, Z2SE_MDN_V_ENTRANCE, 0x01DA, 0x0D, 28.0f, Z2SE_MDN_V_SWAITD, 0x01C6, 0x0E, 10.0f, Z2SE_MDN_V_HIT, 0x01CC, 0x0F, 11.0f, Z2SE_MDN_V_LOOKABOUT_1, 0x01D7, 0x12, 8.0f, Z2SE_MDN_V_SWAITA, 0x021A, 0x00, -1.0f, 0, 0x01D4, 0x00, -1.0f, 0, 0x01DE, 0x11, -1.0f, 0, 0x01B9, 0x11, -1.0f, 0, 0x01D6, 0x00, 27.0f, Z2SE_MDN_V_ROPEWAIT_1, 0x01D5, 0x00, 48.0f, Z2SE_MDN_V_ROPEFALTER, 0x01BB, 0x00, -1.0f, 0, 0x01BC, 0x00, 17.0f, Z2SE_MDN_V_DOOROP, 0x01BD, 0x00, 20.0f, Z2SE_MDN_V_DOOROP, 0x01C2, 0x13, -1.0f, 0, 0x01C3, 0x14, 0.1f, Z2SE_MDN_V_WARP_LIFTUP, 0x01CE, 0x10, 1.0f, Z2SE_MDN_V_MGN_CATCH, 0x01CD, 0x10, -1.0f, 0, 0x01D0, 0x10, 1.0f, Z2SE_MDN_V_MGN_TAME, 0x01CF, 0x10, 1.0f, Z2SE_MDN_V_MGN_THROW, 0x01D2, 0x10, 1.0f, Z2SE_MDN_V_MGN_TAME, 0x01D1, 0x10, 1.0f, Z2SE_MDN_V_MGN_THROW, 0x01BF, 0x00, -1.0f, 0, 0x01C0, 0x10, -1.0f, 0, 0x01C1, 0x00, -1.0f, 0, 0x01C1, 0x11, -1.0f, 0, 0x01C5, 0x00, -1.0f, 0, 0x021D, 0x00, -1.0f, 0, 0x021E, 0x00, -1.0f, 0, 0x021B, 0x00, -1.0f, 0, 0x01C4, 0x00, -1.0f, 0, }; /* 804BC3E0-804BC5C4 000240 01E4+00 1/1 0/0 0/0 .text modelCallBack__9daMidna_cFi */ int daMidna_c::modelCallBack(int i_jointNo) { mDoMtx_stack_c::copy(J3DSys::mCurrentMtx); if ((i_jointNo == JNT_BACKBONE1 || i_jointNo == JNT_WAIST) && mDemoMode == 0x200) { mDoMtx_stack_c::get()[0][3] = current.pos.x; mDoMtx_stack_c::get()[2][3] = current.pos.z; } if (i_jointNo == JNT_HEAD) { mDoMtx_stack_c::YrotM(-mNeckAngle.y); mDoMtx_stack_c::ZrotM(mNeckAngle.x); } else if (i_jointNo == JNT_BACKBONE1 || i_jointNo == JNT_BACKBONE2) { mDoMtx_stack_c::ZrotM(mBackboneAngleZ); } else { int hair_joint_no = i_jointNo - JNT_HAIR_1; if (checkStateFlg0(FLG0_UNK_10000000)) { if (i_jointNo != JNT_HAIR_1) { mDoMtx_stack_c::YrotM(-mHairAngleY[hair_joint_no - 1]); mDoMtx_stack_c::ZrotM(-mHairAngleZ[hair_joint_no - 1]); } else { mDoMtx_stack_c::transS(J3DSys::mCurrentMtx[0][3], J3DSys::mCurrentMtx[1][3], J3DSys::mCurrentMtx[2][3]); mDoMtx_stack_c::YrotM(shape_angle.y + 0x4000); mDoMtx_stack_c::XrotM(0x8000); mDoMtx_stack_c::scaleM(daMidna_hio_c0::m.mScale, daMidna_hio_c0::m.mScale, daMidna_hio_c0::m.mScale); } mDoMtx_stack_c::XYZrotM(0, mHairAngleY[hair_joint_no], mHairAngleZ[hair_joint_no]); } } mpShadowModel->setAnmMtx(i_jointNo, mDoMtx_stack_c::get()); PSMTXCopy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); return 1; } /* 804BC5C4-804BC614 000424 0050+00 1/1 0/0 0/0 .text changeUpperBck__9daMidna_cFv */ int daMidna_c::changeUpperBck() { J3DAnmTransform* anm = mUpperBck.getBckAnm(); mUpperBck.changeBckOnly(mpMorf->getAnm()); mpMorf->changeAnm(anm); return 1; } /* 804BC614-804BC670 000474 005C+00 1/1 0/0 0/0 .text changeFaceBck__9daMidna_cFv */ int daMidna_c::changeFaceBck() { if (checkStateFlg0(FLG0_UNK_800000)) { J3DAnmTransform* anm = mFaceBck.getBckAnm(); mFaceBck.changeBckOnly(mpMorf->getAnm()); mpMorf->changeAnm(anm); } return 1; } /* 804BC670-804BC6FC 0004D0 008C+00 1/1 0/0 0/0 .text baseModelCallBack__9daMidna_cFi */ int daMidna_c::baseModelCallBack(int i_jointNo) { if (i_jointNo == field_0x87e) { changeFaceBck(); } if (i_jointNo == JNT_WORLD_ROOT || i_jointNo == JNT_HAND_R) { changeUpperBck(); } else if (i_jointNo == JNT_MOUTH) { changeFaceBck(); } else if (i_jointNo != JNT_CHIN) { modelCallBack(i_jointNo); } return 1; } /* 804BC6FC-804BC740 00055C 0044+00 1/1 0/0 0/0 .text daMidna_modelCallBack__FP8J3DJointi */ static int daMidna_modelCallBack(J3DJoint* i_joint, int param_2) { int jnt_no = i_joint->getJntNo(); daMidna_c* _this = (daMidna_c*)j3dSys.getModel()->getUserArea(); if (param_2 == 0) { _this->baseModelCallBack(jnt_no); } return 1; } /* 804BC740-804BC7D4 0005A0 0094+00 1/1 0/0 0/0 .text * initInvModel__9daMidna_cFUsPP8J3DModelP21mDoExt_invisibleModelUl */ int daMidna_c::initInvModel(u16 i_resNo, J3DModel** i_modelP, mDoExt_invisibleModel* i_invModel, u32 flag) { J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes(l_arcName, i_resNo); *i_modelP = mDoExt_J3DModel__create(model_data, 0, flag); if (*i_modelP == NULL) { return 0; } if (!i_invModel->create(*i_modelP, 1)) { return 0; } return 1; } /* 804BC7D4-804BC868 000634 0094+00 1/1 0/0 0/0 .text initDemoModel__9daMidna_cFPP8J3DModelPCcUl */ int daMidna_c::initDemoModel(J3DModel** i_modelP, char const* i_bmdName, u32 flag) { *i_modelP = NULL; J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes(dStage_roomControl_c::getDemoArcName(), i_bmdName); if (model_data != NULL) { *i_modelP = mDoExt_J3DModel__create(model_data, 0x80000, flag | 0x11000084); if (*i_modelP == NULL) { return 0; } } return 1; } /* 804BC868-804BD050 0006C8 07E8+00 1/1 0/0 0/0 .text createHeap__9daMidna_cFv */ int daMidna_c::createHeap() { for (int i = 0; i < 3; i++) { if (i == 2) { mBckHeap[i].setBufferSize(0x1000); } else { mBckHeap[i].setBufferSize(0x3800); } if (!mBckHeap[i].mallocBuffer()) { return 0; } } for (int i = 0; i < 2; i++) { mpEyeMatAnm[i] = new daMidna_matAnm_c(); if (mpEyeMatAnm[i] == NULL) { return 0; } } if (dStage_roomControl_c::getDemoArcName()[0] != '\0') { if (!initDemoModel(&mpDemoHLTmpBmd, "demo00_Midna_cut00_HL_tmp.bmd", 0)) { return 0; } if (mpDemoHLTmpBmd != NULL && !daAlink_c::initDemoBck(&mpDemoHLTmpBck, "demo00_Midna_cut00_HL_tmp.bck")) { return 0; } if (!initDemoModel(&mpDemoHRTmpBmd, "demo00_Midna_cut00_HR_tmp.bmd", 0)) { return 0; } if (mpDemoHRTmpBmd != NULL && !daAlink_c::initDemoBck(&mpDemoHRTmpBck, "demo00_Midna_cut00_HR_tmp.bck")) { return 0; } J3DModelData* hd_bmd = (J3DModelData*)dComIfG_getObjectRes(dStage_roomControl_c::getDemoArcName(), "demo00_Midna_cut00_HD_tmp.bmd"); if (hd_bmd != NULL) { mpDemoHDTmpBmd = mDoExt_J3DModel__create(hd_bmd, 0, 0x11000084); if (mpDemoHDTmpBmd == NULL) { return 0; } if (!daAlink_c::initDemoBck(&mpDemoHDTmpBck, "demo00_Midna_cut00_HD_tmp.bck")) { return 0; } } if (!initDemoModel(&mpDemoFCBlendBmd, "demo00_Midna_cut00_FC_blend.bmd", 0x1000000)) { return 0; } if (!initDemoModel(&mpDemoFCTongueBmd, "demo00_Midna_cut00_FC_tongue.bmd", 0x200)) { return 0; } if (mpDemoFCTongueBmd != NULL && !daAlink_c::initDemoBck(&mpDemoFCTmpBck, "demo00_Midna_cut00_FC_tmp.bck")) { return 0; } J3DModelData* bd_bmd = (J3DModelData*)dComIfG_getObjectRes(dStage_roomControl_c::getDemoArcName(), "demo00_Midna_cut00_BD_tmp.bmd"); if (bd_bmd != NULL) { mpDemoBDTmpBmd = mDoExt_J3DModel__create(bd_bmd, 0, 0x11020284); if (mpDemoBDTmpBmd == NULL) { return 0; } bd_bmd->getMaterialNodePointer(2)->setMaterialAnm(mpEyeMatAnm[0]); bd_bmd->getMaterialNodePointer(3)->setMaterialAnm(mpEyeMatAnm[1]); } if (!initDemoModel(&mpDemoBDMaskBmd, "demo00_Midna_cut00_BD_mask.bmd", 0)) { return 0; } if (!initDemoModel(&mpDemoBDHandsBmd, "demo00_Midna_cut00_BD_hands.bmd", 0)) { return 0; } if (mpDemoBDHandsBmd != NULL) { J3DModelData* hands_bmd = mpDemoBDHandsBmd->getModelData(); for (u16 i = 0; i < 4; i++) { hands_bmd->getMaterialNodePointer(i)->getShape()->hide(); } } J3DModelData* hairhand_bmd = (J3DModelData*)dComIfG_getObjectRes(dStage_roomControl_c::getDemoArcName(), "demo00_Midna_cut00_BD_hairhand.bmd"); if (hairhand_bmd != NULL) { mpDemoBDHairhandBmd = mDoExt_J3DModel__create(hairhand_bmd, 0, 0x11000084); if (mpDemoBDHairhandBmd == NULL) { return 0; } } } JKRReadIdxResource(mBckHeap[0].getBuffer(), mBckHeap[0].getBufferSize(), 0x1DC, dComIfGp_getAnmArchive()); J3DAnmTransform* md_anm = (J3DAnmTransform*)J3DAnmLoaderDataBase::load(mBckHeap[0].getBuffer(), J3DLOADER_UNK_FLAG0); J3DModelData* md_bmd = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 14); mpMorf = new mDoExt_McaMorfSO(md_bmd, &mMorfCB, NULL, md_anm, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, NULL, 0, 0x11000284); if (mpMorf == NULL || mpMorf->getModel() == NULL) { return 0; } mMorfCB.setScale(mHairScale); if (!mInvModel.create(mpMorf->getModel(), 1)) { return 0; } if (!mUpperBck.init(mpMorf->getAnm(), TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false)) { return 0; } if (!mFaceBck.init(mpMorf->getAnm(), TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false)) { return 0; } if (!mBtpHeap.mallocBuffer()) { return 0; } if (!mBtkHeap.mallocBuffer()) { return 0; } if (!initInvModel(8, &mpShadowMaskBmd, &mMaskInvModel, 0x11000284)) { return 0; } if (!initInvModel(7, &mpShadowHandsBmd, &mHandsInvModel, 0x11000284)) { return 0; } if (!initInvModel(15, &mpShadowHairhandBmd, &mHairhandInvModel, 0x11000284)) { return 0; } J3DModelData* gokou_bmd = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 11); mpGokouBmd = mDoExt_J3DModel__create(gokou_bmd, 0x80000, 0x11000084); if (mpGokouBmd == NULL) { return 0; } mpHIO = new daMidna_hio_c0(); if (mpHIO == NULL) { return 0; } if (mpDemoFCBlendBmd != NULL) { mpDemoFCTmpBlk = new mDoExt_blkAnm(); if (mpDemoFCTmpBlk == NULL) { return 0; } mpDemoFCTmpBls = (J3DDeformData*)dComIfG_getObjectRes(dStage_roomControl_c::getDemoArcName(), "demo00_Midna_cut00_FC_tmp.bls"); if (mpDemoFCTmpBls != NULL && mpDemoFCBlendBmd->setDeformData(mpDemoFCTmpBls, 1)) { return 0; } } return 1; } /* 804BD254-804BD274 0010B4 0020+00 1/1 0/0 0/0 .text daMidna_createHeap__FP10fopAc_ac_c */ static int daMidna_createHeap(fopAc_ac_c* i_this) { return static_cast(i_this)->createHeap(); } /* 804BD274-804BD8B8 0010D4 0644+00 1/1 0/0 0/0 .text create__9daMidna_cFv */ cPhs__Step daMidna_c::create() { fopAcM_SetupActor(this, daMidna_c); cPhs__Step step = (cPhs__Step)dComIfG_resLoad(&mPhase, l_arcName); if (step == cPhs_COMPLEATE_e) { if (dStage_roomControl_c::getDemoArcName()[0] != '\0' && dComIfG_syncObjectRes(dStage_roomControl_c::getDemoArcName()) > 0) { return cPhs_INIT_e; } u32 heap_size = 0x15b60; if (dStage_roomControl_c::getDemoArcName()[0] != '\0') { heap_size = 0x4d740; heap_size |= 0x80000000; } if (!fopAcM_entrySolidHeap(this, daMidna_createHeap, heap_size)) { return cPhs_ERROR_e; } mpFunc = &daMidna_c::checkMetamorphoseEnableBase; for (u16 i = 0; i < 3; i++) { mBckHeap[i].createHeap(daPy_anmHeap_c::HEAP_TYPE_3); } mBtpHeap.createHeap(daPy_anmHeap_c::HEAP_TYPE_1); mBtkHeap.createHeap(daPy_anmHeap_c::HEAP_TYPE_2); mSound.init(¤t.pos, &eyePos, 3, 1); mpShadowModel = mpMorf->getModel(); mpShadowModel->setUserArea((uintptr_t)this); J3DModelData* model_data = mpShadowModel->getModelData(); model_data->getJointNodePointer(JNT_WORLD_ROOT)->setCallBack(&daMidna_modelCallBack); model_data->getJointNodePointer(JNT_HAND_R)->setCallBack(&daMidna_modelCallBack); model_data->getJointNodePointer(JNT_HEAD)->setCallBack(&daMidna_modelCallBack); model_data->getJointNodePointer(JNT_BACKBONE1)->setCallBack(&daMidna_modelCallBack); model_data->getJointNodePointer(JNT_BACKBONE2)->setCallBack(&daMidna_modelCallBack); model_data->getJointNodePointer(JNT_MOUTH)->setCallBack(&daMidna_modelCallBack); model_data->getJointNodePointer(JNT_CHIN)->setCallBack(&daMidna_modelCallBack); model_data->getJointNodePointer(JNT_WAIST)->setCallBack(&daMidna_modelCallBack); for (u16 i = JNT_HAIR_1; i < JNT_HAIR_5 + 1; i++) { model_data->getJointNodePointer(i)->setCallBack(&daMidna_modelCallBack); } mpShadowLeftHandShape = model_data->getMaterialNodePointer(1)->getShape(); mpShadowRightHandShape = model_data->getMaterialNodePointer(2)->getShape(); mpMoyaBtk = setSimpleBtk(model_data, 27); mpAppearBrk = setSimpleBrk(model_data, 18); model_data = mpShadowMaskBmd->getModelData(); mpMaskMoyaBtk = setSimpleBtk(model_data, 26); mpMaskAppearBrk = setSimpleBrk(model_data, 21); model_data = mpShadowHandsBmd->getModelData(); mpHandsMoyaBtk = setSimpleBtk(model_data, 25); for (u16 i = 0; i < 4; i++) { model_data->getMaterialNodePointer(i)->getShape()->hide(); } model_data = mpShadowHairhandBmd->getModelData(); mpHairhandMoyaBtk = setSimpleBtk(model_data, 24); mpHairhandAppearBrk = setSimpleBrk(model_data, 20); model_data = mpGokouBmd->getModelData(); mpGokouAppearBrk = setSimpleBrk(model_data, 19); mpGokouAppearBrk->setFrame(0.0f); fopAcM_setStageLayer(this); fopAcM_SetMtx(this, mpShadowModel->getBaseTRMtx()); mVoiceFrame = -1.0f; setMatrix(); setRoomInfo(); daPy_py_c::setMidnaActor(this); mpMorf->setMorf(1.0f); if (fopAcM_GetParam(this) == 1 && checkMidnaRealBody() && !checkMidnaTired()) { changeOriginalDemo(); changeDemoMode(11); } setHairAngle(); offStateFlg0(FLG0_UNK_8); setAnm(); mpMorf->setMorf(0.0f); allAnimePlay(); mpMorf->modelCalc(); setBodyPartMatrix(); field_0x6e0.r = l_normalColor.r; field_0x6e0.g = l_normalColor.g; field_0x6e0.b = l_normalColor.b; field_0x6e0.a = l_normalColor.a; if (dKy_darkworld_check()) { field_0x6e8.r = l_normalKColor.r; field_0x6e8.g = l_normalKColor.g; field_0x6e8.b = l_normalKColor.b; field_0x6e8.a = l_normalKColor.a; field_0x6ec.r = l_normalKColor2.r; field_0x6ec.g = l_normalKColor2.g; field_0x6ec.b = l_normalKColor2.b; field_0x6ec.a = l_normalKColor2.a; } else { field_0x6e8.r = l_lNormalKColor.r; field_0x6e8.g = l_lNormalKColor.g; field_0x6e8.b = l_lNormalKColor.b; field_0x6e8.a = l_lNormalKColor.a; field_0x6ec.r = l_lNormalKColor2.r; field_0x6ec.g = l_lNormalKColor2.g; field_0x6ec.b = l_lNormalKColor2.b; field_0x6ec.a = l_lNormalKColor2.a; } model = mpShadowModel; setMidnaNoDrawFlg(); } return step; } /* 804BD91C-804BD93C 00177C 0020+00 1/0 0/0 0/0 .text daMidna_Create__FP10fopAc_ac_c */ static cPhs__Step daMidna_Create(fopAc_ac_c* i_this) { return static_cast(i_this)->create(); } /* 804BD93C-804BDE04 00179C 04C8+00 2/2 0/0 0/0 .text allAnimePlay__9daMidna_cFv */ void daMidna_c::allAnimePlay() { daAlink_c::simpleAnmPlay(mpMoyaBtk); daAlink_c::simpleAnmPlay(mpHandsMoyaBtk); daAlink_c::simpleAnmPlay(mpMaskMoyaBtk); daAlink_c::simpleAnmPlay(mpHairhandMoyaBtk); daAlink_c::simpleAnmPlay(field_0x668); daAlink_c::simpleAnmPlay(mpDemoFCBlendBrk); mUpperBck.play(); if (mDemoMode == 0xc) { mUpperBck.setFrame(0.0f); } mUpperBck.getBckAnm()->setFrame(mUpperBck.getFrame()); if (checkStateFlg0(FLG0_UNK_800000)) { if (dMsgObject_c::isMouthCheck()) { mFaceBckTimer = 20; } else { if (mFaceBckTimer != 0) { mFaceBckTimer--; } } if (mFaceBckTimer == 0 && mFaceBck.checkFrame(0.0f)) { mFaceBck.setFrame(0.0f); mFaceBck.getBckAnm()->setFrame(0.0f); } else { mFaceBck.play(); mFaceBck.getBckAnm()->setFrame(mFaceBck.getFrame()); } } if (mpModel != NULL && mpFaceBtp != NULL && mpFaceBtk != NULL) { s16 uvar6, uvar7; if (checkStateFlg0(FLG0_UNK_40)) { if (field_0x84a != 0) { field_0x84a++; if (field_0x84a > mpFaceBtp->getFrameMax()) { field_0x84a = 0; } } else { if (cM_rnd() < 0.012f) { field_0x84a++; } } uvar7 = uvar6 = field_0x84a; } else if (checkStateFlg0(FLG0_UNK_800000)) { uvar7 = uvar6 = mFaceBck.getFrame(); } else { uvar7 = uvar6 = mUpperBck.getFrame(); } if (uvar6 > mpFaceBtp->getFrameMax()) { uvar6 = mpFaceBtp->getFrameMax(); } if (uvar7 > mpFaceBtk->getFrameMax()) { uvar7 = mpFaceBtk->getFrameMax(); } mpFaceBtp->setFrame(uvar6); mpFaceBtk->setFrame(uvar7); } mpMorf->play(0, mReverb); if (mDemoMode == 0xc) { mpMorf->setFrame(0.0f); } if (checkSetAnime(0, ANM_S_APPEAR) || checkSetAnime(0, ANM_S_APPEARBL)) { mpAppearBrk->setFrame(mpMorf->getFrame()); mpMaskAppearBrk->setFrame(mpMorf->getFrame()); mpHairhandAppearBrk->setFrame(mpMorf->getFrame()); mpGokouAppearBrk->setFrame(mpMorf->getFrame()); } else if (field_0x84e == 1 || field_0x84e == 2) { mpAppearBrk->setFrame(0.0f); mpMaskAppearBrk->setFrame(0.0f); mpHairhandAppearBrk->setFrame(0.0f); mpGokouAppearBrk->setFrame(0.0f); } else { mpAppearBrk->setFrame(mpAppearBrk->getFrameMax() - 0.001f); mpMaskAppearBrk->setFrame(mpMaskAppearBrk->getFrameMax() - 0.001f); mpHairhandAppearBrk->setFrame(mpHairhandAppearBrk->getFrameMax() - 0.001f); if (checkSetAnime(0, ANM_S_RETURN)) { mpGokouAppearBrk->setFrame(mpMorf->getEndFrame() - mpMorf->getFrame()); } else if (checkSetAnime(0, ANM_RETURN)) { f32 fvar8 = mpGokouAppearBrk->getFrame() - 2.0f; if (fvar8 < 0.0f) { fvar8 = 0.0f; } mpGokouAppearBrk->setFrame(fvar8); } else { mpGokouAppearBrk->setFrame(mpGokouAppearBrk->getFrameMax() - 0.001f); } } if (mLeftHandShapeIdx == 0xfd && mpDemoHLTmpBck != NULL) { mpDemoHLTmpBck->play(); } if (mRightHandShapeIdx == 0xfd && mpDemoHRTmpBck != NULL) { mpDemoHRTmpBck->play(); } if (checkStateFlg1(FLG1_UNK_10) && mpDemoHDTmpBck != NULL) { mpDemoHDTmpBck->play(); } if (checkStateFlg0(FLG0_UNK_10)) { if (mpDemoFCTmpBlk != NULL && mpDemoFCTmpBlk->getBlkAnm() != NULL) { daAlink_c::simpleAnmPlay(mpDemoFCTmpBlk->getBlkAnm()); } if (mpDemoFCTongueBtk != NULL) { daAlink_c::simpleAnmPlay(mpDemoFCTongueBtk); } if (mpDemoFCTmpBck != NULL) { mpDemoFCTmpBck->play(); } } } /* 804BDE04-804BE470 001C64 066C+00 2/2 0/0 0/0 .text setMatrix__9daMidna_cFv */ void daMidna_c::setMatrix() { Vec vec1 = {0.0f, daMidna_hio_c0::m.field_0x18, daMidna_hio_c0::m.field_0x1c}; Vec scale = {daMidna_hio_c0::m.mScale, daMidna_hio_c0::m.mScale, daMidna_hio_c0::m.mScale}; if (mpModel != NULL) { mpModel->setBaseScale(scale); } mpShadowModel->setBaseScale(scale); daAlink_c* link = daAlink_getAlinkActorClass(); if (mDemoMode == 0x200) { J3DTransformInfo transform; mpMorf->getTransform(1, &transform); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(shape_angle.y); Vec vec2 = {transform.mTranslate.x, 0.0f, transform.mTranslate.z}; mDoMtx_stack_c::multVec(&vec2, ¤t.pos); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::ZXYrotM(shape_angle); mpShadowModel->setBaseTRMtx(mDoMtx_stack_c::get()); } else if (mpKago != NULL) { mDoMtx_multVecZero(mpKago->getMidnaLocaterMtx(), ¤t.pos); shape_angle.y = mpKago->shape_angle.y; mDoMtx_MtxToRot(mpKago->getMidnaLocaterMtx(), &shape_angle); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::ZXYrotM(shape_angle); mDoMtx_stack_c::transM(0.0f, -98.0f, 17.0f); mpShadowModel->setBaseTRMtx(mDoMtx_stack_c::get()); } else if (!checkStateFlg0(FLG0_WOLF_NO_POS) && (!daPy_py_c::checkNowWolf() || checkShadowModelDrawSmode())) { if (field_0x84e != 4) { f32 sin_link_y = cM_ssin(link->shape_angle.y); f32 cos_link_y = cM_scos(link->shape_angle.y); if (field_0x84e == 2) { current.pos = link->current.pos; shape_angle.y = link->shape_angle.y; } else if (checkStateFlg0(FLG0_UNK_80000)) { // FIXME: x-val is a fakematch. Subtraction + negation fixes instruction order, // but debug no longer matches. current.pos.set( link->current.pos.x + -30.0f * sin_link_y - -(65.0f * cos_link_y), link->current.pos.y, link->current.pos.z + -30.0f * cos_link_y - 65.0f * sin_link_y ); shape_angle.y = link->shape_angle.y - cM_deg2s(50.0f); field_0x85a = shape_angle.y; } else { current.pos.set( link->current.pos.x + 90.0f * sin_link_y, link->current.pos.y, link->current.pos.z + 90.0f * cos_link_y ); shape_angle.y = link->shape_angle.y + 0x8000; field_0x85a = shape_angle.y; } if (!checkStateFlg0(FLG0_UNK_80000) && checkStateFlg0(FLG0_UNK_40000000)) { current.pos.x += 80.0f * sin_link_y; current.pos.z += 80.0f * cos_link_y; } if (link->checkHorseRide() || link->checkBoarRide()) { current.pos.y -= 100.0f; } else if (dComIfGp_checkPlayerStatus0(0, 0x100000)) { current.pos.y -= 150.0f; } if (mDemoMode == 2) { current.pos.x += field_0x8dc * sin_link_y; current.pos.z += field_0x8dc * cos_link_y; } } mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(shape_angle.y); mpShadowModel->setBaseTRMtx(mDoMtx_stack_c::get()); } else { if (!checkStateFlg0(FLG0_WOLF_NO_POS) && mDemoMode != 9) { mDoMtx_stack_c::copy(link->getWolfMidnaMatrix()); mDoMtx_stack_c::ZXYrotM(-0x4000, -0x4000, 0); mDoMtx_stack_c::transM(-1.6f, -1.56f, -6.6f); if (checkSetAnime(0, ANM_WLSWIMDIE) && !checkStateFlg0(FLG0_NO_DRAW)) { mDoMtx_stack_c::multVecZero(¤t.pos); } else { mDoMtx_stack_c::multVec(&vec1, ¤t.pos); } shape_angle = link->shape_angle; mDoMtx_stack_c::get()[0][3] = current.pos.x; mDoMtx_stack_c::get()[1][3] = current.pos.y; mDoMtx_stack_c::get()[2][3] = current.pos.z; } else { mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(shape_angle.y); if (checkSetAnime(0, ANM_WARPIN) && checkStateFlg1(FLG1_SIDE_WARP)) { f32 fvar7 = (mpMorf->getFrame() - 24.0f) * 0.05f; if (fvar7 < 0.0f) { fvar7 = 0.0f; } else if (fvar7 > 1.0f) { fvar7 = 1.0f; } mDoMtx_stack_c::transM(0.0f, 150.0f, 0.0f); mDoMtx_stack_c::XrotM(fvar7 * 16384.0f); mDoMtx_stack_c::transM(0.0f, -150.0f, 0.0f); } } mpShadowModel->setBaseTRMtx(mDoMtx_stack_c::get()); speedF = link->speedF; current.angle = shape_angle; s16 target_backbone_angle; if (checkStateFlg0(FLG0_UNK_4)) { target_backbone_angle = -(shape_angle.x >> 1); } else { target_backbone_angle = 0; } cLib_addCalcAngleS(&mBackboneAngleZ, target_backbone_angle, 3, 0x800, 0x100); } } /* 804BE470-804BED1C 0022D0 08AC+00 2/2 0/0 0/0 .text setBodyPartMatrix__9daMidna_cFv */ void daMidna_c::setBodyPartMatrix() { if (mpHandsBmd != NULL) { mpHandsBmd->setBaseTRMtx(mpShadowModel->getBaseTRMtx()); mpHandsBmd->calc(); mpHandsBmd->setAnmMtx(1, mpShadowModel->getAnmMtx(JNT_HAND_L)); mpHandsBmd->setAnmMtx(2, mpShadowModel->getAnmMtx(JNT_HAND_R)); } mpShadowHandsBmd->setBaseTRMtx(mpShadowModel->getBaseTRMtx()); mpShadowHandsBmd->calc(); mpShadowHandsBmd->setAnmMtx(1, mpShadowModel->getAnmMtx(JNT_HAND_L)); mpShadowHandsBmd->setAnmMtx(2, mpShadowModel->getAnmMtx(JNT_HAND_R)); if (mpMaskBmd != NULL) { mpMaskBmd->setBaseTRMtx(mpShadowModel->getAnmMtx(JNT_HEAD)); mpMaskBmd->calc(); } mpShadowMaskBmd->setBaseTRMtx(mpShadowModel->getAnmMtx(JNT_HEAD)); mpShadowMaskBmd->calc(); mDoMtx_stack_c::copy(mpShadowModel->getAnmMtx(JNT_HAIR_5)); mDoMtx_stack_c::transM(6.5f, 0.0f, 0.0f); if (checkStateFlg1(FLG1_UNK_10)) { mpDemoHDTmpBmd->setBaseTRMtx(mDoMtx_stack_c::get()); if (mpDemoHDTmpBck != NULL) { J3DModelData* model_data = mpDemoHDTmpBmd->getModelData(); mpDemoHDTmpBck->entry(model_data, mpDemoHDTmpBck->getFrame()); } mpDemoHDTmpBmd->calc(); } BOOL bvar8 = false; if (!checkStateFlg0((daMidna_FLG0)(FLG0_UNK_10000000 | FLG0_UNK_200000))) { cXyz vec1, vec2; mDoMtx_multVecZero(mpShadowModel->getAnmMtx(JNT_HAIR_1), &vec1); mDoMtx_multVecZero(mpShadowModel->getAnmMtx(JNT_HAIR_5), &vec2); vec2 -= vec1; mDoMtx_stack_c::XYZrotM(0, mHairAngleY[4], mHairAngleZ[4] - vec2.atan2sY_XZ()); } else if (daAlink_getAlinkActorClass()->getWolfLockActorEnd() != NULL) { cXyz vec; mDoMtx_stack_c::multVecZero(&vec); vec = daAlink_getAlinkActorClass()->getWolfLockActorEnd()->eyePos - vec; mDoMtx_stack_c::XrotM(vec.atan2sX_Z() - shape_angle.y); bvar8 = true; } if (mDemoMode == 0x13 || mDemoMode == 0x14 || mDemoMode == 0x15) { bvar8 = true; } mpShadowHairhandBmd->setBaseTRMtx(mDoMtx_stack_c::get()); mpShadowHairhandBmd->calc(); J3DModelData* hairhand_model_data = mpShadowHairhandBmd->getModelData(); for (u16 i = 0; i < 3; i++) { hairhand_model_data->getMaterialNodePointer(i)->getShape()->hide(); } BOOL bvar2; if (checkStateFlg0(FLG0_UNK_10000000) || checkSetAnime(2, ANM_HAIR) || checkSetAnime(2, ANM_S_TAKES) || checkSetAnime(2, ANM_S_WAITS) || checkSetAnime(2, ANM_S_PACKAWAY) || checkSetAnime(2, ANM_GRABST) || checkEndResetStateFlg0(ERFLG0_UNK_40) || dComIfGp_checkPlayerStatus1(0, 0x800000)) { if (bvar8) { hairhand_model_data->getMaterialNodePointer(2)->getShape()->show(); } else { hairhand_model_data->getMaterialNodePointer(1)->getShape()->show(); } bvar2 = true; } else { hairhand_model_data->getMaterialNodePointer(0)->getShape()->show(); bvar2 = false; } if (mpHairhandBmd != NULL) { mpHairhandBmd->setBaseTRMtx(mDoMtx_stack_c::get()); mpHairhandBmd->calc(); J3DModelData* model_data = mpHairhandBmd->getModelData(); for (u16 i = 0; i < 3; i++) { model_data->getMaterialNodePointer(i)->getShape()->hide(); } const GXColorS10* color; const GXColor* kcolor1; const GXColor* kcolor2; if (bvar2) { if (bvar8) { model_data->getMaterialNodePointer(2)->getShape()->show(); } else { model_data->getMaterialNodePointer(1)->getShape()->show(); } kcolor1 = &l_bigKColor; if (dKy_darkworld_check()) { color = &l_bigColor; kcolor2 = &l_normalKColor2; } else { color = &l_lBigColor; kcolor2 = &l_lBigKColor2; } } else { model_data->getMaterialNodePointer(0)->getShape()->show(); color = &l_normalColor; if (dKy_darkworld_check()) { kcolor1 = &l_normalKColor; kcolor2 = &l_normalKColor2; } else { kcolor1 = &l_lNormalKColor; kcolor2 = &l_lNormalKColor2; } } cLib_chaseS(&field_0x6e0.r, color->r, 10); cLib_chaseS(&field_0x6e0.g, color->g, 10); cLib_chaseS(&field_0x6e0.b, color->b, 10); cLib_chaseUC(&field_0x6e8.r, kcolor1->r, 10); cLib_chaseUC(&field_0x6e8.g, kcolor1->g, 10); cLib_chaseUC(&field_0x6e8.b, kcolor1->b, 10); cLib_chaseUC(&field_0x6ec.r, kcolor2->r, 10); cLib_chaseUC(&field_0x6ec.g, kcolor2->g, 10); cLib_chaseUC(&field_0x6ec.b, kcolor2->b, 10); } if (mpModel != NULL) { mpModel->setBaseTRMtx(mpShadowModel->getBaseTRMtx()); for (int i = 0; i < JNT_MAX; i++) { mpModel->setAnmMtx(i, mpShadowModel->getAnmMtx(i)); } mpModel->calcWeightEnvelopeMtx(); } mDoMtx_stack_c::transS(mpShadowModel->getAnmMtx(JNT_BACKBONE1)[0][3], mpShadowModel->getAnmMtx(JNT_BACKBONE1)[1][3] + 20.0f, mpShadowModel->getAnmMtx(JNT_BACKBONE1)[2][3]); mpGokouBmd->setBaseTRMtx(mDoMtx_stack_c::get()); mpGokouBmd->calc(); if (mLeftHandShapeIdx == 0xfd) { mpDemoHLTmpBmd->setBaseTRMtx(mpShadowModel->getAnmMtx(JNT_HAND_L)); if (mpDemoHLTmpBck != NULL) { mpDemoHLTmpBck->entry(mpDemoHLTmpBmd->getModelData()); } mpDemoHLTmpBmd->calc(); mpShadowLeftHandShape->hide(); if (mpLeftHandShape != NULL) { mpLeftHandShape->hide(); } } else { mpShadowLeftHandShape->show(); if (mpLeftHandShape != NULL) { mpLeftHandShape->show(); } } if (mRightHandShapeIdx == 0xfd) { mpDemoHRTmpBmd->setBaseTRMtx(mpShadowModel->getAnmMtx(JNT_HAND_R)); if (mpDemoHRTmpBck != NULL) { mpDemoHRTmpBck->entry(mpDemoHRTmpBmd->getModelData()); } mpDemoHRTmpBmd->calc(); mpShadowRightHandShape->hide(); if (mpRightHandShape != NULL) { mpRightHandShape->hide(); } } else { mpShadowRightHandShape->show(); if (mpRightHandShape != NULL) { mpRightHandShape->show(); } } if (checkStateFlg0(FLG0_UNK_10)) { mpDemoFCBlendBmd->setBaseTRMtx(mpShadowModel->getAnmMtx(JNT_HEAD)); mpDemoFCBlendBmd->calc(); mpDemoFCTongueBmd->setBaseTRMtx(mpShadowModel->getAnmMtx(JNT_HEAD)); if (mpDemoFCTmpBck != NULL) { mpDemoFCTmpBck->entry(mpDemoFCTongueBmd->getModelData()); } mpDemoFCTongueBmd->calc(); } } /* 804BED1C-804BEDB8 002B7C 009C+00 2/2 0/0 0/0 .text setRoomInfo__9daMidna_cFv */ void daMidna_c::setRoomInfo() { int room_no; if (fopAcM_gc_c::gndCheck(¤t.pos)) { room_no = fopAcM_gc_c::getRoomId(); tevStr.YukaCol = fopAcM_gc_c::getPolyColor(); } else { room_no = dComIfGp_roomControl_getStayNo(); } tevStr.room_no = room_no; mReverb = dComIfGp_getReverb(room_no); fopAcM_SetRoomNo(this, room_no); } /* 804BEDB8-804BEFA0 002C18 01E8+00 1/1 0/0 0/0 .text setBodyPartPos__9daMidna_cFv */ void daMidna_c::setBodyPartPos() { if (!(checkSetAnime(0, ANM_S_RETURN) && mpMorf->getFrame() > 14.0f)) { mDoMtx_multVec(mpShadowModel->getAnmMtx(JNT_HEAD), &l_eyeOffset, &eyePos); } if (field_0x84e == 1 || (checkSetAnime(0, ANM_S_APPEAR) && mpMorf->getFrame() < 3.0f)) { daAlink_c* link = daAlink_getAlinkActorClass(); f32 fvar1 = daPy_py_c::checkNowWolf() ? 250.0f : 50.0f; attention_info.position.set( link->current.pos.x + fvar1 * cM_ssin(link->shape_angle.y), link->current.pos.y - 30.0f, link->current.pos.z + fvar1 * cM_scos(link->shape_angle.y) ); eyePos = attention_info.position; } else if (field_0x84e == 2) { attention_info.position = eyePos; } else { attention_info.position.set(current.pos.x, current.pos.y + 120.0f, current.pos.z); } mDoMtx_multVec(mpShadowModel->getAnmMtx(JNT_HEAD), &l_headCenterOffset, &mHeadCenterPos); if (!checkStateFlg0(FLG0_NO_DRAW)) { cXyz item_pos; static Vec const localItemPos = { 0.0f, -68.0f, 0.0f }; mDoMtx_multVec(mpShadowModel->getAnmMtx(JNT_HEAD), &localItemPos, &item_pos); daAlink_getAlinkActorClass()->setItemPos(&item_pos); } } /* 804BEFA0-804BF070 002E00 00D0+00 1/1 0/0 0/0 .text checkAppear__9daMidna_cFv */ BOOL daMidna_c::checkAppear() { if (daPy_py_c::checkNowWolf() && daPy_py_c::checkFirstMidnaDemo() && (!daAlink_getAlinkActorClass()->checkMidnaDisappearMode() || checkStateFlg0(FLG0_WOLF_NO_POS) || (checkSetAnime(0, ANM_RETURN) && !mpMorf->isStop()))) { return TRUE; } return FALSE; } /* 804BF070-804BFF80 002ED0 0F10+00 1/1 0/0 0/0 .text checkMidnaPosState__9daMidna_cFv */ void daMidna_c::checkMidnaPosState() { daAlink_c* link = daAlink_getAlinkActorClass(); const cXyz* jump_point = link->checkMidnaLockJumpPoint(); if (checkStateFlg1(FLG1_UNK_200) || checkSetAnime(0, ANM_LEADTOWAITA)) { jump_point = NULL; } offStateFlg1(FLG1_UNK_200); const cXyz* pos = NULL; if (jump_point == NULL) { offStateFlg1(FLG1_UNK_400); field_0x850 = 0; } if (mDemoMode == 0x200) { dDemo_actor_c* demo_actor = dDemo_c::getActor(demoActorID); if (demo_actor != NULL) { int tmp1, tmp2, tmp3; u16 tmp4; while (demo_actor->getDemoIDData(&tmp1, &tmp2, &tmp3, &tmp4, NULL)) { if (tmp1 == 0 && tmp2 == 0 && tmp3 == 1) { if (tmp4 != 0) { offStateFlg0(FLG0_WOLF_NO_POS); } else { onStateFlg0(FLG0_WOLF_NO_POS); } } } } offStateFlg0(FLG0_UNK_20); return; } if (checkStateFlg0(FLG0_TAG_WAIT)) { if (!checkEndResetStateFlg0(ERFLG0_UNK_2)) { onStateFlg0(FLG0_NO_INPUT); } onStateFlg0(FLG0_WOLF_NO_POS); pos = &mTagWaitPos; field_0x8d4 = 30.0f; offStateFlg0(FLG0_UNK_20); } else if (link->checkMidnaWolfDeadAnime()) { offStateFlg0((daMidna_FLG0)(FLG0_UNK_1000 | FLG0_UNK_200 | FLG0_UNK_20)); if (checkSetAnime(0, ANM_WLDIEA) && !checkStateFlg0(FLG0_NO_DRAW) && mpMorf->getFrame() >= 72.0f) { onStateFlg0(FLG0_WOLF_NO_POS); } else { offStateFlg0(FLG0_WOLF_NO_POS); } } else if (link->checkMidnaWolfSwimDeadAnime()) { offStateFlg0((daMidna_FLG0)(FLG0_UNK_1000 | FLG0_UNK_200 | FLG0_UNK_20)); if (checkSetAnime(0, ANM_WLSWIMDIE) && !checkStateFlg0(FLG0_NO_DRAW) && mpMorf->getFrame() >= 2.0f) { onStateFlg0(FLG0_WOLF_NO_POS); } else { offStateFlg0(FLG0_WOLF_NO_POS); } } else if (jump_point != NULL) { if (checkStateFlg0(FLG0_UNK_100) && !link->checkWolfTagLockJump() && field_0x9a0.abs2(*jump_point) > 100.0f) { offStateFlg0((daMidna_FLG0)(FLG0_WOLF_NO_POS | FLG0_UNK_200 | FLG0_UNK_100)); field_0x850 = 0; field_0x851 = 0; jump_point = pos; } else { onStateFlg0(FLG0_WOLF_NO_POS); if (!checkStateFlg0(FLG0_UNK_100) || (field_0x9a0.abs2(*jump_point) > 100.0f && link->current.pos.abs2(field_0x9a0) < 40000.0f)) { field_0x9a0 = *jump_point; field_0x8d4 = jump_point->abs(current.pos) / link->getWolfTagJumpTime(); if (field_0x8d4 < 10.0f) { field_0x8d4 = 10.0f; } onStateFlg0(FLG0_UNK_100); offStateFlg0(FLG0_UNK_200); pos = jump_point; mSound.startCreatureSound(Z2SE_MIDNA_JUMP, field_0x850++, -1); field_0x851 = field_0x850; } else { pos = &field_0x9a0; } if (!link->checkWolfTagLockJump() && !checkStateFlg1(FLG1_UNK_400) && (!checkStateFlg0(FLG0_UNK_200) || checkSetAnime(0, ANM_LEADED))) { onStateFlg0(FLG0_NO_INPUT); } else { onStateFlg1(FLG1_UNK_400); } } offStateFlg0(FLG0_UNK_20); } else if (link->checkWolfTagLockJump() || checkStateFlg0(FLG0_UNK_100)) { onStateFlg0(FLG0_WOLF_NO_POS); if (!link->checkWolfTagLockJump()) { onStateFlg1(FLG1_UNK_200); } else { onStateFlg0(FLG0_UNK_20); } offStateFlg0(FLG0_UNK_100); } else { if (checkStateFlg0(FLG0_WOLF_NO_POS)) { offStateFlg0((daMidna_FLG0)(FLG0_WOLF_NO_POS | FLG0_UNK_200)); onStateFlg0(FLG0_UNK_1000); if (checkStateFlg0(FLG0_UNK_20)) { offStateFlg0(FLG0_UNK_20); mSound.startCreatureSound(Z2SE_MIDNA_JUMP_FINISH, field_0x851, -1); } } else { offStateFlg0(FLG0_UNK_20); } } if (mDemoMode == 12) { if (daPy_py_c::checkNowWolf()) { onStateFlg0(FLG0_WOLF_NO_POS); Vec vec1 = {0.0f, daMidna_hio_c0::m.field_0x18, daMidna_hio_c0::m.field_0x1c}; cXyz vec2; mDoMtx_stack_c::copy(link->getWolfMidnaMatrix()); mDoMtx_stack_c::ZXYrotM(-0x4000, -0x4000, 0); mDoMtx_stack_c::multVec(&vec1, &vec2); if (cLib_chasePos(¤t.pos, vec2, 50.0f)) { dComIfGp_evmng_cutEnd(mStaffID); } } else { offStateFlg0(FLG0_WOLF_NO_POS); dComIfGp_evmng_cutEnd(mStaffID); } offStateFlg0(FLG0_UNK_400000); } else if (mDemoMode == 13) { if (mpMorf->isStop()) { dComIfGp_evmng_cutEnd(mStaffID); } offStateFlg0(FLG0_UNK_400000); } else if (mDemoMode == 17 || mDemoMode == 18) { if (mpMorf->isStop()) { dComIfGp_evmng_cutEnd(mStaffID); } } else if (mDemoMode == 3 || mDemoMode == 6 || mDemoMode == 4 || mDemoMode == 19 || mDemoMode == 20 || mDemoMode == 21 || mDemoMode == 7 || mDemoMode == 14 || mDemoMode == 5 || mDemoMode == 16 || mDemoMode == 11 || mDemoMode == 8) { onStateFlg0(FLG0_WOLF_NO_POS); offStateFlg0((daMidna_FLG0)(FLG0_UNK_400000 | FLG0_UNK_1000)); if (mDemoMode == 16) { current.pos = mDemoPos; shape_angle.y = mDemoAngle; current.angle.y = shape_angle.y; dComIfGp_evmng_cutEnd(mStaffID); } else if (mDemoMode == 3 || mDemoMode == 6) { if (cLib_addCalcPos(¤t.pos, mDemoPos, 0.5f, mDemoSpeed, 1.0f) < 1.0f) { dComIfGp_evmng_cutEnd(mStaffID); } else { cXyz vec = mDemoPos - current.pos; cLib_addCalcAngleS(&shape_angle.y, vec.atan2sX_Z(), 2, 0x1000, 0x400); current.angle.y = shape_angle.y; onEndResetStateFlg0(ERFLG0_UNK_1); } } else if (mDemoMode == 4) { if (cLib_addCalcAngleS(&shape_angle.y, mDemoAngle, 2, 0x1000, 0x400) == 0) { dComIfGp_evmng_cutEnd(mStaffID); } current.angle.y = shape_angle.y; } else if (mDemoMode == 8) { if (checkSetAnime(0, ANM_S_HOLE)) { cLib_addCalcAngleS(&shape_angle.y, mDemoAngle, 2, 0x2000, 0x800); current.angle.y = shape_angle.y; if (mpMorf->getFrame() >= 26.0f) { setRightHandShape(3); } else if (mpMorf->getFrame() >= 13.0f) { setRightHandShape(2); } if (mpMorf->isStop()) { dComIfGp_evmng_cutEnd(mStaffID); } } } else if (mDemoMode == 7) { if (checkSetAnime(2, ANM_S_TAKES) && mFaceBck.isStop()) { dComIfGp_evmng_cutEnd(mStaffID); } } else if (mDemoMode == 14) { if (checkSetAnime(2, ANM_S_PACKAWAY) && mFaceBck.isStop()) { dComIfGp_evmng_cutEnd(mStaffID); } } else if (mDemoMode == 5) { if ((checkSetAnime(0, ANM_S_RETURN) || checkSetAnime(0, ANM_RETURN)) && mpMorf->isStop()) { offStateFlg0((daMidna_FLG0)(FLG0_WOLF_NO_POS | FLG0_TAG_WAIT)); dComIfGp_evmng_cutEnd(mStaffID); } } else if (mDemoMode == 19 || mDemoMode == 21 || mDemoMode == 20) { if (dComIfGp_event_getPt2()) { s16 angle = fopAcM_searchActorAngleY(this, dComIfGp_event_getPt2()); cLib_addCalcAngleS(&shape_angle.y, angle, 2, 0x2000, 0x800); current.angle.y = shape_angle.y; } if (mDemoMode == 20 || (mDemoMode == 21 && mpMorf->isStop()) || (mDemoMode == 19 && mFaceBck.isStop())) { dComIfGp_evmng_cutEnd(mStaffID); } } } else if (pos != NULL) { if (checkEndResetStateFlg0(ERFLG0_UNK_2)) { onStateFlg0(FLG0_UNK_200); current.pos = *pos; shape_angle.y = fopAcM_searchPlayerAngleY(this); current.angle.y = shape_angle.y; field_0x85a = shape_angle.y; onEndResetStateFlg0(ERFLG0_UNK_100); } else if (cLib_chasePos(¤t.pos, *pos, field_0x8d4)) { if (!checkStateFlg0(FLG0_UNK_200)) { field_0x876 = fopAcM_searchPlayerAngleY(this); } onStateFlg0(FLG0_UNK_200); } else { cXyz start(current.pos.x, current.pos.y + 100.0f, current.pos.z); cXyz end = current.pos * 2.0f - old.pos; end.y += 100.0f; mLinChk.Set(&start, &end, this); if (dComIfG_Bgsp().LineCross(&mLinChk)) { onStateFlg0(FLG0_UNK_400000); } } s16 angle = shape_angle.y; if (checkSetAnime(0, ANM_LEADED)) { if (mpMorf->getFrame() >= 4.0f && mpMorf->getFrame() < 17.0f) { if ((s16)(field_0x876 - shape_angle.y) < 0) { angle = shape_angle.y + 0x7fff; } else { angle = field_0x876; } } } else if (checkSetAnime(0, ANM_LEADST)) { if (!checkStateFlg0(FLG0_UNK_200)) { angle = cM_atan2s(pos->x - current.pos.x, pos->z - current.pos.z); } } else { angle = fopAcM_searchPlayerAngleY(this); onEndResetStateFlg0(ERFLG0_UNK_100); } cLib_addCalcAngleS(&shape_angle.y, angle, 2, 0x2000, 0x800); } else { offStateFlg0(FLG0_UNK_400000); } } /* 804BFF80-804C0020 003DE0 00A0+00 3/3 0/0 0/0 .text setUpperAnime__9daMidna_cFUsUs */ BOOL daMidna_c::setUpperAnime(u16 i_resID, u16 param_1) { J3DAnmTransform* bck; if (param_1 == 0xffff) { bck = (J3DAnmTransform*)mBckHeap[1].loadDataIdx(i_resID); } else { bck = (J3DAnmTransform*)mBckHeap[1].loadDataDemoRID(i_resID, 0); } if (bck == NULL) { return FALSE; } mUpperBck.init(bck, TRUE, -1, 1.0f, 0, -1, true); mSoundID = 0; mVoiceFrame = -1.0f; return TRUE; } /* 804C0020-804C0094 003E80 0074+00 1/1 0/0 0/0 .text * setUpperAnimeAndSe__9daMidna_cFQ29daMidna_c11daMidna_ANM */ BOOL daMidna_c::setUpperAnimeAndSe(daMidna_c::daMidna_ANM i_anm) { const daMidna_anmData_s* anm_data = &m_anmDataTable[i_anm]; if (setUpperAnime(anm_data->mResID, 0xffff)) { mSoundID = anm_data->mSoundID; mVoiceFrame = anm_data->mSoundFrame; return TRUE; } return FALSE; } /* 804C0094-804C0134 003EF4 00A0+00 1/1 0/0 0/0 .text setFaceAnime__9daMidna_cFUsUs */ BOOL daMidna_c::setFaceAnime(u16 i_resID, u16 param_1) { J3DAnmTransform* bck; if (param_1 == 0xffff) { bck = (J3DAnmTransform*)mBckHeap[2].loadDataIdx(i_resID); } else { bck = (J3DAnmTransform*)mBckHeap[2].loadDataDemoRID(i_resID, 0); } onStateFlg0(FLG0_UNK_800000); if (bck == NULL) { return FALSE; } mFaceBck.init(bck, TRUE, -1, 1.0f, 0, -1, true); mFaceBckTimer = 20; return TRUE; } /* 804C0134-804C0238 003F94 0104+00 2/2 0/0 0/0 .text endHighModel__9daMidna_cFv */ void daMidna_c::endHighModel() { if (mpDemoFCTongueBtk != NULL) { mpDemoFCTongueBmd->getModelData()->removeTexMtxAnimator(mpDemoFCTongueBtk); } offStateFlg0(FLG0_UNK_10); mpDemoFCTmpCluster = NULL; mpDemoFCTongueBtk = NULL; if (mpModel != NULL) { mpModel->getModelData()->getMaterialNodePointer(9)->getShape()->show(); mpModel->getModelData()->getMaterialNodePointer(1)->getShape()->show(); mpModel->getModelData()->getMaterialNodePointer(2)->getShape()->show(); mpModel->getModelData()->getMaterialNodePointer(3)->getShape()->show(); mpModel->getModelData()->getMaterialNodePointer(8)->getShape()->show(); } } /* 804C0238-804C0BAC 004098 0974+00 1/1 0/0 0/0 .text setDemoAnm__9daMidna_cFv */ BOOL daMidna_c::setDemoAnm() { dDemo_actor_c* demo_actor = dDemo_c::getActor(demoActorID); if (demo_actor == NULL) { return FALSE; } BOOL ret = FALSE; BOOL bVar1 = FALSE; int var1, var2, var3; u16 var4; while (demo_actor->getDemoIDData(&var1, &var2, &var3, &var4, NULL)) { if (var1 == 0) { if (var2 == 0) { if (var3 == 2) { offStateFlg1((daMidna_FLG1)(FLG1_UNK_20 | FLG1_SHADOW_MODEL_DRAW_DEMO_FORCE | FLG1_UNK_1)); if (var4 == 3) { onStateFlg1(FLG1_UNK_20); } else if (var4 == 2) { onStateFlg1(FLG1_UNK_1); } else if (var4 == 1) { field_0x84e = 3; onStateFlg1(FLG1_SHADOW_MODEL_DRAW_DEMO_FORCE); } else { field_0x84e = 0; } } else if (var3 == 3) { if (var4 == 2) { onStateFlg1(FLG1_FORCE_NORMAL_COL); offStateFlg1(FLG1_FORCE_TIRED_COL); } else if (var4 == 1) { offStateFlg1(FLG1_FORCE_NORMAL_COL); onStateFlg1(FLG1_FORCE_TIRED_COL); } else { offStateFlg1((daMidna_FLG1)(FLG1_FORCE_NORMAL_COL | FLG1_FORCE_TIRED_COL)); } } else if (var3 == 4) { if (var4 == 1) { onEndResetStateFlg0(ERFLG0_UNK_20); } } else if (var3 == 5) { if (var4 == 1) { onStateFlg1(FLG1_NO_MASK_DRAW); } else { offStateFlg1(FLG1_NO_MASK_DRAW); } } else if (var3 == 6) { if (var4 == 1) { onStateFlg1(FLG1_SHADOW_NO_DRAW); } else { offStateFlg1(FLG1_SHADOW_NO_DRAW); } } } else if (var2 == 5) { if (var4 < 2) { var4 += 2; } else if (var4 == 0xfd && mpDemoHRTmpBmd == NULL) { var4 = 0xfe; } setRightHandShape(var4); } else if (var2 == 6) { if (var4 == 0xfd && mpDemoHLTmpBmd == NULL) { var4 = 0xfe; } setLeftHandShape(var4); } else if (var2 == 9) { if (var4 == 1 && mpDemoFCBlendBmd != NULL && mpDemoFCTongueBmd != NULL) { onStateFlg0(FLG0_UNK_10); bVar1 = TRUE; if (mpModel != NULL) { mpModel->getModelData()->getMaterialNodePointer(9)->getShape()->hide(); mpModel->getModelData()->getMaterialNodePointer(1)->getShape()->hide(); mpModel->getModelData()->getMaterialNodePointer(2)->getShape()->hide(); mpModel->getModelData()->getMaterialNodePointer(3)->getShape()->hide(); mpModel->getModelData()->getMaterialNodePointer(8)->getShape()->hide(); } } else { endHighModel(); } } else if (var2 == 4) { if (var3 == 1) { if (var4 == 1) { onStateFlg0((daMidna_FLG0)(FLG0_NO_HAIR_SCALE | FLG0_UNK_200000)); } } else if (var4 == 2) { onStateFlg1(FLG1_UNK_40); } else if (var4 != 0 && mpDemoHDTmpBmd != NULL) { onStateFlg1(FLG1_UNK_10); } else { offStateFlg1((daMidna_FLG1)(FLG1_UNK_40 | FLG1_UNK_10)); } } } else if (var1 == 2) { if (var2 == 1) { if (var3 == 2) { J3DAnmTransform* bck = static_cast( mBckHeap[0].loadDataDemoRID(var4, 0)); if (bck != NULL) { f32 morf; if (demo_actor->checkEnable(0x80)) { morf = demo_actor->getPrm_Morf(); } else { morf = 0.0f; } setBckAnime(bck, -1, morf); setUpperAnime(var4, 0); offStateFlg0((daMidna_FLG0)(FLG0_UNK_1000 | FLG0_UNK_1)); demo_actor->setAnmFrameMax(mpMorf->getEndFrame()); } ret = TRUE; } } else if (var2 == 6) { if (var3 == 2) { if (mpDemoHLTmpBck != NULL) { J3DAnmTransform* bck = static_cast( dComIfG_getObjectIDRes(dStage_roomControl_c::getDemoArcName(), var4)); if (bck != NULL && mpDemoHLTmpBck->getBckAnm() != bck) { mpDemoHLTmpBck->init(bck, TRUE, -1, 1.0f, 0, -1, true); } } ret = TRUE; } } else if (var2 == 5) { if (var3 == 2) { if (mpDemoHRTmpBck != NULL) { J3DAnmTransform* bck = static_cast( dComIfG_getObjectIDRes(dStage_roomControl_c::getDemoArcName(), var4)); if (bck != NULL && mpDemoHRTmpBck->getBckAnm() != bck) { mpDemoHRTmpBck->init(bck, TRUE, -1, 1.0f, 0, -1, true); } } ret = TRUE; } } else if (var2 == 9) { if (var3 == 5) { setFaceBtp(var4, TRUE); ret = TRUE; } else if (var3 == 3) { if (checkStateFlg0(FLG0_UNK_10)) { J3DAnmTextureSRTKey* btk = static_cast( dComIfG_getObjectIDRes(dStage_roomControl_c::getDemoArcName(), var4)); if (btk != NULL && mpDemoFCTongueBtk != btk) { btk->searchUpdateMaterialID(mpDemoFCTongueBmd->getModelData()); mpDemoFCTongueBmd->getModelData()->entryTexMtxAnimator(btk); btk->setFrame(0.0f); mpDemoFCTongueBtk = btk; } } else { setFaceBtk(var4, TRUE); } ret = TRUE; } else if (var3 == 7) { J3DAnmCluster* cluster = static_cast( dComIfG_getObjectIDRes(dStage_roomControl_c::getDemoArcName(), var4)); if (mpDemoFCTmpCluster != cluster) { mpDemoFCTmpCluster = cluster; mpDemoFCTmpBlk->init(mpDemoFCTmpBls, mpDemoFCTmpCluster, FALSE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1); mpDemoFCTmpBlk->getBlkAnm()->setFrame(0.0f); } ret = TRUE; } else if (var3 == 2) { if (mpDemoFCTmpBck != NULL) { J3DAnmTransform* bck = static_cast( dComIfG_getObjectIDRes(dStage_roomControl_c::getDemoArcName(), var4)); if (bck != NULL && mpDemoFCTmpBck->getBckAnm() != bck) { mpDemoFCTmpBck->init(bck, TRUE, -1, 1.0f, 0, -1, true); } } ret = TRUE; } else if (var3 == 4) { J3DAnmTevRegKey* brk = static_cast( dComIfG_getObjectIDRes(dStage_roomControl_c::getDemoArcName(), var4)); if (brk != NULL && mpDemoFCBlendBrk != brk) { brk->setFrame(0.0f); mpDemoFCBlendBrk = brk; if (mpDemoFCBlendBmd != NULL) { mpDemoFCBlendBrk->searchUpdateMaterialID(mpDemoFCBlendBmd->getModelData()); } } } } else if (var2 == 4) { if (var3 == 2) { if (mpDemoHDTmpBck != NULL) { J3DAnmTransform* bck = static_cast( dComIfG_getObjectIDRes(dStage_roomControl_c::getDemoArcName(), var4)); if (bck != NULL && mpDemoHDTmpBck->getBckAnm() != bck) { mpDemoHDTmpBck->init(bck, TRUE, -1, 1.0f, 0, -1, true); } } ret = TRUE; } else if (var3 == 4) { J3DAnmTevRegKey* brk = static_cast( dComIfG_getObjectIDRes(dStage_roomControl_c::getDemoArcName(), var4)); if (brk != NULL && field_0x668 != brk) { brk->setFrame(0.0f); field_0x668 = brk; } } } } } if (demo_actor->checkEnable(0x40)) { mpMorf->setFrameF(demo_actor->getAnmFrame()); mUpperBck.setFrame(demo_actor->getAnmFrame()); mFaceBck.setFrame(demo_actor->getAnmFrame()); if (mpFaceBtp != NULL && !mBtpHeap.checkNoSetArcNo()) { mpFaceBtp->setFrame(demo_actor->getAnmFrame()); } if (mpFaceBtk != NULL && !mBtkHeap.checkNoSetArcNo()) { mpFaceBtk->setFrame(demo_actor->getAnmFrame()); } if (mpDemoFCTmpBck != NULL) { mpDemoFCTmpBck->setFrame(demo_actor->getAnmFrame()); } if (mpDemoHLTmpBck != NULL) { mpDemoHLTmpBck->setFrame(demo_actor->getAnmFrame()); } if (mpDemoHRTmpBck != NULL) { mpDemoHRTmpBck->setFrame(demo_actor->getAnmFrame()); } if (mpDemoHDTmpBck != NULL) { mpDemoHDTmpBck->setFrame(demo_actor->getAnmFrame()); } if (mpDemoFCTongueBtk != NULL) { mpDemoFCTongueBtk->setFrame(demo_actor->getAnmFrame()); } if (mpDemoFCTmpBlk != NULL && mpDemoFCTmpBlk->getBlkAnm() != NULL) { mpDemoFCTmpBlk->getBlkAnm()->setFrame(demo_actor->getAnmFrame()); } } if (!bVar1) { endHighModel(); } return ret; } /* 804C0BAC-804C0C6C 004A0C 00C0+00 2/2 0/0 0/0 .text setFaceBtp__9daMidna_cFUsi */ void daMidna_c::setFaceBtp(u16 i_index, BOOL i_isDemo) { J3DAnmTexPattern* btp; if (i_isDemo) { btp = static_cast(mBtpHeap.loadDataDemoRID(i_index, 0)); } else { btp = static_cast(mBtpHeap.loadDataIdx(i_index)); } if (btp != NULL && mpModel != NULL) { mpFaceBtp = btp; mpFaceBtp->searchUpdateMaterialID(mpModel->getModelData()); mpModel->getModelData()->entryTexNoAnimator(mpFaceBtp); field_0x84a = 0; mpFaceBtp->setFrame(field_0x84a); offStateFlg0(FLG0_UNK_40); } } /* 804C0C6C-804C0D2C 004ACC 00C0+00 2/2 0/0 0/0 .text setFaceBtk__9daMidna_cFUsi */ void daMidna_c::setFaceBtk(u16 i_index, BOOL i_isDemo) { J3DAnmTextureSRTKey* btk; if (i_isDemo) { btk = static_cast(mBtkHeap.loadDataDemoRID(i_index, 0)); } else { btk = static_cast(mBtkHeap.loadDataIdx(i_index)); } if (btk != NULL && mpModel != NULL) { mpFaceBtk = btk; mpFaceBtk->searchUpdateMaterialID(mpModel->getModelData()); mpModel->getModelData()->entryTexMtxAnimator(mpFaceBtk); field_0x84a = 0; mpFaceBtk->setFrame(field_0x84a); offStateFlg0(FLG0_UNK_40); } } /* 804C0D2C-804C0E18 004B8C 00EC+00 2/2 0/0 0/0 .text setLeftHandShape__9daMidna_cFUs */ void daMidna_c::setLeftHandShape(u16 i_idx) { mLeftHandShapeIdx = i_idx; if (mpLeftHandShape != NULL) { mpLeftHandShape->hide(); } mpShadowLeftHandShape->hide(); if (i_idx == 0xfe || i_idx == 0xfd) { mpShadowLeftHandShape = mpShadowModel->getModelData()->getMaterialNodePointer(1)->getShape(); if (mpLeftHandShape != NULL) { mpLeftHandShape = mpModel->getModelData()->getMaterialNodePointer(6)->getShape(); } } else { mpShadowLeftHandShape = mpShadowHandsBmd->getModelData()->getMaterialNodePointer(i_idx)->getShape(); if (mpLeftHandShape != NULL) { mpLeftHandShape = mpHandsBmd->getModelData()->getMaterialNodePointer(i_idx)->getShape(); } } mpShadowLeftHandShape->show(); if (mpLeftHandShape != NULL) { mpLeftHandShape->show(); } } /* 804C0E18-804C0F04 004C78 00EC+00 3/3 0/0 0/0 .text setRightHandShape__9daMidna_cFUs */ void daMidna_c::setRightHandShape(u16 i_idx) { mRightHandShapeIdx = i_idx; if (mpRightHandShape != NULL) { mpRightHandShape->hide(); } mpShadowRightHandShape->hide(); if (i_idx == 0xfe || i_idx == 0xfd) { mpShadowRightHandShape = mpShadowModel->getModelData()->getMaterialNodePointer(2)->getShape(); if (mpRightHandShape != NULL) { mpRightHandShape = mpModel->getModelData()->getMaterialNodePointer(7)->getShape(); } } else { mpShadowRightHandShape = mpShadowHandsBmd->getModelData()->getMaterialNodePointer(i_idx)->getShape(); if (mpRightHandShape != NULL) { mpRightHandShape = mpHandsBmd->getModelData()->getMaterialNodePointer(i_idx)->getShape(); } } mpShadowRightHandShape->show(); if (mpRightHandShape != NULL) { mpRightHandShape->show(); } } /* 804C0F04-804C0F24 004D64 0020+00 1/1 0/0 0/0 .text checkHairOnlyAnime__9daMidna_cCFi */ BOOL daMidna_c::checkHairOnlyAnime(int i_anm) const { return i_anm >= ANM_HAIR && i_anm < ANM_MAX; } /* 804C0F24-804C103C 004D84 0118+00 2/2 0/0 0/0 .text setBckAnime__9daMidna_cFP15J3DAnmTransformif */ void daMidna_c::setBckAnime(J3DAnmTransform* i_bck, int i_attr, f32 i_morf) { mpMorf->setAnm(i_bck, i_attr, i_morf, 1.0f, 0.0f, -1.0f); void* bas; if (!mBckHeap[0].checkNoSetArcNo()) { bas = static_cast(i_bck)->getBas(); if (bas == NULL) { offStateFlg1(FLG1_UNK_800); } else { onStateFlg1(FLG1_UNK_800); } } else { u8* buf = mBckHeap[0].getBuffer(); if (*(u32*)(buf + 0x1c) == 0xffffffff) { offStateFlg1(FLG1_UNK_800); bas = NULL; } else { onStateFlg1(FLG1_UNK_800); bas = mBckHeap[0].getBuffer() + *(u32*)(buf + 0x1c); } } if (bas != NULL) { mSound.initAnime(bas, mpMorf->getPlaySpeed() >= 0.0f, mpMorf->getLoopFrame(), 0.0f); } } /* 804C103C-804C287C 004E9C 1840+00 2/2 0/0 0/0 .text setAnm__9daMidna_cFv */ void daMidna_c::setAnm() { u16 sVar4, res_id; offStateFlg0((daMidna_FLG0)(FLG0_NO_HAIR_SCALE | FLG0_UNK_200000)); if (setDemoAnm()) { return; } daAlink_c* link = daAlink_getAlinkActorClass(); BOOL bVar1; if (dComIfGp_event_runCheck() || checkEndResetStateFlg0(ERFLG0_NO_SERVICE_WAIT)) { bVar1 = TRUE; } else { bVar1 = FALSE; } BOOL bVar2 = FALSE; BOOL bVar3 = TRUE; bool tired = checkMidnaTired(); daMidna_ANM anm; if (link->checkMidnaWolfDeadAnime() && !checkStateFlg0(FLG0_TAG_WAIT)) { if (tired) { anm = ANM_CLINGD; } else { anm = ANM_WLDIEA; } offStateFlg0(FLG0_UNK_1000); } else if (link->checkMidnaWolfSwimDeadAnime() && !checkStateFlg0(FLG0_TAG_WAIT)) { if (tired) { anm = ANM_CLINGD; } else { anm = ANM_WLSWIMDIE; bVar2 = TRUE; } offStateFlg0(FLG0_UNK_1000); } else if (link->checkMidnaGanonCatchAnm()) { bVar2 = TRUE; if (checkSetAnime(0, ANM_MGNCATCHED) || (mpMorf->isStop() && checkSetAnime(0, ANM_MGNCATCHST))) { anm = ANM_MGNCATCHED; } else { anm = ANM_MGNCATCHST; } } else if (link->checkMidnaGanonThrowLeftAnm()) { if (checkSetAnime(0, ANM_MGNTHROWLED) || (mpMorf->isStop() && checkSetAnime(0, ANM_MGNTHROWLST))) { bVar2 = TRUE; anm = ANM_MGNTHROWLED; if (mpMorf->isStop() && checkSetAnime(0, ANM_MGNTHROWLED)) { link->setEndGanonThrow(); } } else { anm = ANM_MGNTHROWLST; } } else if (link->checkMidnaGanonThrowRightAnm()) { if (checkSetAnime(0, ANM_MGNTHROWRED) || (mpMorf->isStop() && checkSetAnime(0, ANM_MGNTHROWRST))) { bVar2 = TRUE; anm = ANM_MGNTHROWRED; if (mpMorf->isStop() && checkSetAnime(0, ANM_MGNTHROWRED)) { link->setEndGanonThrow(); } } else { anm = ANM_MGNTHROWRST; } } else if (mDemoMode == 9) { anm = ANM_WARPIN; offStateFlg0(FLG0_UNK_1000); } else if (mDemoMode == 0x15) { anm = ANM_GRABED; offStateFlg0(FLG0_UNK_1000); } else if (mDemoMode == 0xd || mDemoMode == 0xc) { anm = ANM_LEADTOWAITA; bVar2 = TRUE; offStateFlg0(FLG0_UNK_1000); } else if (mDemoMode == 0x11) { anm = ANM_DOOROPC; offStateFlg0(FLG0_UNK_1000); } else if (mDemoMode == 0x12) { anm = ANM_DOOROPD; offStateFlg0(FLG0_UNK_1000); } else if (mDemoMode == 8) { anm = ANM_S_HOLE; } else if (mDemoMode == 7 || mDemoMode == 6 || mDemoMode == 0x13 || mDemoMode == 0x14 || mDemoMode == 0xe) { anm = ANM_LEADWAIT; bVar1 = TRUE; offStateFlg0(FLG0_UNK_1); } else if (mDemoMode == 5) { if (field_0x8dc > 0.5f) { anm = ANM_RETURN; } else { anm = ANM_S_RETURN; } } else if (mDemoMode == 0xf) { anm = ANM_RETURN; bVar2 = TRUE; } else if ((checkShadowModelDrawSmode() && !checkStateFlg0(FLG0_WOLF_NO_POS)) || mDemoMode == 6 || mDemoMode == 3 || mDemoMode == 0x10 || mDemoMode == 4) { if (field_0x84e == 4) { anm = ANM_S_RETURN; } else if (field_0x84e == 2) { if (checkStateFlg0(FLG0_UNK_80000)) { anm = ANM_S_APPEARBL; } else { anm = ANM_S_APPEAR; } } else { if (checkEndResetStateFlg0(ERFLG0_UNK_1)) { anm = ANM_S_MOVE; } else { anm = ANM_LEADWAIT; } } offStateFlg0((daMidna_FLG0)(FLG0_UNK_1000 | FLG0_UNK_1)); bVar1 = TRUE; bVar2 = TRUE; } else if (checkStateFlg0(FLG0_UNK_1000)) { bVar2 = TRUE; anm = ANM_LEADTOWAITA; if (mpMorf->isStop() && checkSetAnime(0, ANM_LEADTOWAITA)) { offStateFlg0(FLG0_UNK_1000); } } else if (checkStateFlg0(FLG0_UNK_200)) { if ((mpMorf->isStop() && checkSetAnime(0, ANM_LEADED)) || checkSetAnime(0, ANM_LEADSWAIT) || checkSetAnime(0, ANM_LEADWAIT)) { anm = ANM_LEADWAIT; offStateFlg0(FLG0_NO_INPUT); } else { anm = ANM_LEADED; } } else if (checkStateFlg0((daMidna_FLG0)(FLG0_TAG_WAIT | FLG0_UNK_100))) { anm = ANM_LEADST; } else if (mpKago != NULL) { if (dComIfGp_evmng_checkStartDemo()) { anm = ANM_CLING; onStateFlg0(FLG0_UNK_4000000); } else if (checkStateFlg0(FLG0_UNK_4000000)) { if (mpMorf->isStop() || checkSetAnime(0, ANM_CLING)) { anm = ANM_CLING; } else { anm = ANM_LEADTOWAITA; } } else { anm = ANM_LEADTOWAITA; onStateFlg0(FLG0_UNK_4000000); } } else { bVar3 = FALSE; offStateFlg0(FLG0_UNK_4000000); if (!tired && mMotionNum >= 31 && mMotionNum < 40 && !checkStateFlg0(FLG0_NO_DRAW)) { static daMidna_ANM const motionTable[9] = { ANM_WAITA, ANM_CLING, ANM_CLINGB, ANM_WAITB, ANM_TALKA, ANM_HIT, ANM_LOOKABOUT, ANM_SWAITA, ANM_SWAITD, }; anm = motionTable[mMotionNum - 31]; offStateFlg0(FLG0_UNK_1000); } else if (link->checkMidnaWolfDashAnime() && !tired) { if ((mpMorf->isStop() && checkSetAnime(0, ANM_CLINGST)) || checkSetAnime(0, ANM_CLING)) { anm = ANM_CLING; } else { anm = ANM_CLINGST; } } else if ((link->checkMidnaDisappearMode() || (link->checkMidnaDigInAnime() && !tired)) && checkMidnaRealBody()) { anm = ANM_RETURN; if (!checkSetAnime(0, ANM_RETURN)) { offStateFlg0(FLG0_NO_DRAW); } bVar2 = TRUE; } else if (dComIfGp_checkPlayerStatus1(0, 0x800000)) { anm = ANM_WAITA; offStateFlg0(FLG0_UNK_1); } else if (tired) { if (link->checkMidnaDigInAnime()) { anm = ANM_DIGIN; } else if (link->checkMidnaClingAnime() || link->checkMidnaLowClingAnime()) { anm = ANM_CLINGD; } else { anm = ANM_WAITD; } } else if (link->checkMidnaLookAroundAnime()) { if ((mpMorf->isStop() && checkSetAnime(0, ANM_ENTRANCE)) || checkSetAnime(0, ANM_SWAITB)) { anm = ANM_SWAITB; bVar2 = TRUE; } else { anm = ANM_ENTRANCE; } } else if (link->checkMidnaRopeWaitStaggerAnime()) { anm = ANM_ROPEWAIT; } else if (link->checkMidnaRopeMoveStaggerAnime()) { anm = ANM_ROPEFALTER; } else if (link->checkMidnaClingAnime()) { anm = ANM_CLING; } else if (link->checkMidnaLowClingAnime()) { anm = ANM_CLINGB; } else if (link->checkMidnaPanicAnime() || checkEndResetStateFlg0(ERFLG0_FORCE_PANIC)) { anm = ANM_PANIC; offStateFlg0(FLG0_UNK_1); } else if (!checkStateFlg0(FLG0_UNK_1) && checkSetAnime(0, ANM_SWAITB) && !mpMorf->isStop()) { anm = ANM_SWAITB; } else { anm = ANM_WAITA; } } if (anm != ANM_WAITA && anm != ANM_LEADWAIT && anm != ANM_PANIC) { offStateFlg0(FLG0_UNK_1); } if (anm == ANM_WAITA || anm == ANM_WAITB || anm == ANM_TALKA) { onStateFlg0(FLG0_UNK_4); } else { offStateFlg0(FLG0_UNK_4); } sVar4 = mBckHeap[1].getIdx(); res_id = m_anmDataTable[anm].mResID; J3DAnmTransform* bck; if (!mBckHeap[0].checkNoSetArcNo() || (!checkSetAnime(0, anm) && (mMotionNum != 0 || !checkStateFlg0(FLG0_UNK_1) || ((anm != ANM_WAITA || dComIfGp_event_runCheck()) && anm != ANM_LEADWAIT)))) { if (!mBckHeap[0].checkNoSetArcNo()) { mBckHeap[0].resetArcNo(); mBckHeap[0].resetIdx(); mBckHeap[1].resetArcNo(); mBckHeap[1].resetIdx(); } if (anm == ANM_S_APPEAR || anm == ANM_S_APPEARBL) { mSound.startCreatureSound(Z2SE_MIDNA_APPEAR, 0, -1); } else if (anm == ANM_S_RETURN || anm == ANM_RETURN) { mSound.startCreatureSound(Z2SE_MIDNA_DISAPPEAR, 0, -1); } if (checkStateFlg0(FLG0_UNK_2)) { offStateFlg0(FLG0_UNK_2); } f32 morf; if (bVar2 || checkEndResetStateFlg0(ERFLG0_FORCE_MORF_CANCEL)) { morf = 0.0f; } else { morf = 5.0f; } bck = (J3DAnmTransform*)mBckHeap[0].loadDataIdx(res_id); setBckAnime(bck, -1, morf); offStateFlg0(FLG0_UNK_1); if (checkStateFlg0(FLG0_UNK_2)) { setUpperAnime(mBckHeap[0].getIdx(), 0xffff); offStateFlg0(FLG0_UNK_2); } if (anm == ANM_WARPIN) { if (daPy_py_c::checkNowWolf()) { u32 sound_id; if (checkStateFlg1(FLG1_SIDE_WARP)) { sound_id = Z2SE_MDN_WARP_IN_YOKO; } else { sound_id = Z2SE_MDN_WARP_IN_TATE; } mSound.startCreatureSound(sound_id, 0, -1); } if (!checkStateFlg0(FLG0_PORTAL_OBJ_CALL)) { cXyz pos; mDoMtx_multVecZero(mpShadowModel->getAnmMtx(JNT_BACKBONE1), &pos); f32 dist = pos.abs(current.pos); f32 tmp = 19.0f * cM_scos(shape_angle.x); current.pos.set(pos.x + tmp * cM_ssin(shape_angle.y), pos.y - dist, pos.z + tmp * cM_scos(shape_angle.y)); } } else if (anm == ANM_S_RETURN) { current.pos.x += 90.0f * cM_ssin(shape_angle.y); current.pos.z += 90.0f * cM_scos(shape_angle.y); shape_angle.y += 0x8000; field_0x85a = shape_angle.y; current.angle.y = shape_angle.y; mpMorf->getOldTransInfo()[JNT_BACKBONE1].mTranslate.z += 90.0f; mpMorf->getOldTransInfo()[JNT_WAIST].mTranslate.z += 90.0f; Quaternion* quat_backbone_ptr = &mpMorf->getOldQuaternion()[JNT_BACKBONE1]; Quaternion quat1, quat2; JMAEulerToQuat(0, 0x8000, 0, &quat1); quat2 = *quat_backbone_ptr; mDoMtx_QuatConcat(&quat1, &quat2, quat_backbone_ptr); quat_backbone_ptr = &mpMorf->getOldQuaternion()[JNT_WAIST]; quat2 = *quat_backbone_ptr; mDoMtx_QuatConcat(&quat1, &quat2, quat_backbone_ptr); } else if (anm == ANM_WLSWIMDIE) { J3DTransformInfo* trans_backbone = &mpMorf->getOldTransInfo()[JNT_BACKBONE1]; J3DTransformInfo* trans_waist = &mpMorf->getOldTransInfo()[JNT_WAIST]; trans_backbone->mTranslate.x = trans_waist->mTranslate.x = 0.9f; trans_backbone->mTranslate.y = trans_waist->mTranslate.y = 36.060127f; trans_backbone->mTranslate.z = trans_waist->mTranslate.z = -14.515757f; } else if (anm == ANM_LEADTOWAITA && mDemoMode != 0xd && mDemoMode != 0xc) { if (link->checkMidnaRide()) { link->onMidnaRideShock(); } } else if (mDemoMode == 0xc) { current.pos.y += 1000.0f; } setUpperAnimeAndSe(anm); } else if (mMotionNum == 0 && ((anm == ANM_WAITA && !dComIfGp_event_runCheck()) || anm == ANM_LEADWAIT)) { if (dComIfGp_checkPlayerStatus1(0, 0x800000)) { onStateFlg0(FLG0_UNK_2); offStateFlg0(FLG0_UNK_1); if (setUpperAnimeAndSe(ANM_WAITTP)) { mUpperBck.setLoopFrame(15.0); mpMorf->setMorf(5.0f); offStateFlg0(FLG0_UNK_80); if (mpModel != NULL) { setFaceBtp(0x3F8, FALSE); } } else if (mUpperBck.checkFrame(9.0f)) { setRightHandShape(2); } else if (mUpperBck.checkFrame(12.0f)) { setLeftHandShape(0); } } else if (mDemoMode == 0x14) { if (setUpperAnimeAndSe(ANM_GRAB)) { mpMorf->setMorf(5.0f); } } else if (checkStateFlg0(FLG0_UNK_2)) { offStateFlg0(FLG0_UNK_2); setUpperAnime(mBckHeap[0].getIdx(), 0xffff); mpMorf->setMorf(5.0f); } else if (checkStateFlg0(FLG0_UNK_1)) { if (mUpperBck.isStop() || mUpperBck.checkFrame(0.0f) || mNeckAngle.x != 0 || mNeckAngle.y != 0 || bVar1 || (checkSetAnime(0, ANM_SWAITC) && fabsf(speedF) > 0.1f)) { offStateFlg0(FLG0_UNK_1); bck = (J3DAnmTransform*)mBckHeap[0].loadDataIdx(m_anmDataTable[anm].mResID); setBckAnime(bck, J3DFrameCtrl::EMode_LOOP, 5.0f); setUpperAnime(mBckHeap[0].getIdx(), 0xffff); } else if (checkSetAnime(0, ANM_SWAITB) && mUpperBck.checkFrame(95.0f) && fabsf(speedF) < 0.1f && cM_rnd() < 0.5f) { anm = ANM_SWAITC; setUpperAnimeAndSe(ANM_SWAITC); bck = (J3DAnmTransform*)mBckHeap[0].loadDataIdx(m_anmDataTable[anm].mResID); setBckAnime(bck, J3DFrameCtrl::EMode_NONE, 0.0f); } } else if (daPy_py_c::checkNowWolf() && !bVar1 && ((mNeckAngle.y == 0 && mNeckAngle.x == 0 && anm != ANM_LEADWAIT && cM_rnd() < 0.01f) || (anm == ANM_LEADWAIT && !checkStateFlg0(FLG0_NO_HAIR_LEAD) && cM_rnd() < 0.0125f))) { onStateFlg0(FLG0_UNK_1); if (anm == ANM_LEADWAIT) { anm = ANM_LEADSWAIT; } else { f32 rnd; if (fabsf(link->speedF) < 0.1f) { rnd = cM_rndF(5.0f); } else { rnd = cM_rndF(4.0f); } if (rnd < 1.0f) { anm = ANM_WAITB; } else if (rnd < 2.0f) { anm = ANM_SWAITB; } else if (rnd < 3.0f) { anm = ANM_SWAITD; } else if (rnd < 4.0f) { anm = ANM_LOOKABOUT; } else { anm = ANM_HIT; } } res_id = m_anmDataTable[anm].mResID; setUpperAnimeAndSe(anm); bck = (J3DAnmTransform*)mBckHeap[0].loadDataIdx(res_id); setBckAnime(bck, J3DFrameCtrl::EMode_NONE, 5.0f); } } else if (checkStateFlg0(FLG0_UNK_2)) { offStateFlg0(FLG0_UNK_2); setUpperAnime(mBckHeap[0].getIdx(), 0xffff); mpMorf->setMorf(5.0f); } if (sVar4 != mBckHeap[1].getIdx()) { if (checkSetAnime(1, ANM_CLINGB) || checkSetAnime(1, ANM_CLING) || checkSetAnime(1, ANM_GRAB) || checkSetAnime(1, ANM_GRABED) || checkSetAnime(1, ANM_WAITB)) { setLeftHandShape(0); setRightHandShape(2); } else { setLeftHandShape(0xFE); setRightHandShape(0xFE); } } if (checkSetAnime(1, ANM_SWAITD)) { if (mUpperBck.checkFrame(110.0f)) { setLeftHandShape(0xFE); setRightHandShape(0xFE); } else if (mUpperBck.checkFrame(15.0f)) { setLeftHandShape(0); setRightHandShape(2); } } else if (checkSetAnime(1, ANM_GRABED) && mUpperBck.checkFrame(53.0f)) { setLeftHandShape(0xFE); setRightHandShape(0xFE); } daMidna_ANM face_anm; if (mDemoMode == 0x13) { face_anm = ANM_GRABST; } else if (mDemoMode == 0x14) { face_anm = ANM_NONE; } else if ((anm == ANM_LEADWAIT || anm == ANM_LEADSWAIT) && !checkStateFlg0(FLG0_NO_HAIR_LEAD) && checkStateFlg0(FLG0_UNK_200)) { face_anm = ANM_HAIR; } else if (mDemoMode == 6) { face_anm = ANM_S_WAITS; } else if (mDemoMode == 7) { face_anm = ANM_S_TAKES; } else if (mDemoMode == 0xe) { face_anm = ANM_S_PACKAWAY; } else if (bVar3 || mFaceNum == 100) { face_anm = ANM_NONE; } else if (mFaceNum == 0x1f) { face_anm = ANM_FTALKA; } else if (mFaceNum == 0x20) { face_anm = ANM_FTALKB; } else if (mFaceNum == 0x21) { face_anm = ANM_FTALKC; } else if (mFaceNum == 0x22) { face_anm = ANM_FTALKC2; } else { face_anm = ANM_NONE; } if (checkHairOnlyAnime(face_anm) || (mpModel != NULL && !checkStateFlg0(FLG0_NO_DRAW) && (sVar4 != mBckHeap[1].getIdx() || face_anm != ANM_NONE || (face_anm == ANM_NONE && checkStateFlg0(FLG0_UNK_800000))))) { if (face_anm == ANM_NONE) { offStateFlg0(FLG0_UNK_800000); mBckHeap[2].resetIdx(); field_0x87e = JNT_HEAD; } else { setFaceAnime(m_anmDataTable[face_anm].mResID, 0xffff); if (checkHairOnlyAnime(face_anm)) { field_0x87e = JNT_CHIN; mFaceBckTimer = 20; } else { field_0x87e = JNT_HEAD; } } } else { offStateFlg0(FLG0_UNK_800000); mBckHeap[2].resetIdx(); field_0x87e = JNT_HEAD; } if (mpModel != NULL && !checkStateFlg0(FLG0_NO_DRAW) && (!checkStateFlg0(FLG0_UNK_1) || anm != ANM_WAITA)) { if (!mBtpHeap.checkNoSetArcNo()) { mBtpHeap.resetArcNo(); mBtpHeap.resetIdx(); } u16 tex_id; if (face_anm != ANM_NONE) { tex_id = m_anmDataTable[face_anm].mTexID; } else if (dComIfGp_checkPlayerStatus1(0, 0x800000)) { tex_id = 0x10; } else if (checkSetAnime(1, ANM_GRAB)) { tex_id = 0x13; } else { tex_id = m_anmDataTable[anm].mTexID; } setFaceBtp(m_texDataTable[tex_id].mBtpID, FALSE); if (!mBtkHeap.checkNoSetArcNo()) { mBtkHeap.resetArcNo(); mBtkHeap.resetIdx(); } setFaceBtk(m_texDataTable[tex_id].mBtkID, FALSE); if (m_texDataTable[tex_id].mBtpID == 0x405) { onStateFlg0(FLG0_UNK_40); } else { offStateFlg0(FLG0_UNK_40); } } BOOL local_c0 = mDemoMode == 0x14 || (anm >= ANM_DOOROPC && anm < ANM_FTALKA); if (checkStateFlg0(FLG0_UNK_2) || local_c0 || field_0x87e == JNT_CHIN) { onStateFlg0((daMidna_FLG0)(FLG0_NO_HAIR_SCALE | FLG0_UNK_200000)); if (local_c0) { onEndResetStateFlg0(ERFLG0_UNK_40); } } else if (anm == ANM_S_APPEAR || anm == ANM_S_APPEARBL || anm == ANM_RETURN || (anm == ANM_WARPIN && mpMorf->getFrame() > 2.0f) || anm == ANM_S_RETURN) { onStateFlg0(FLG0_NO_HAIR_SCALE); } } /* 804C287C-804C2A68 0066DC 01EC+00 1/1 0/0 0/0 .text getNeckAimAngle__9daMidna_cFPC4cXyzPsPsPsPs */ s16 daMidna_c::getNeckAimAngle(cXyz const* i_atnPos, s16* o_neckX, s16* o_neckY, s16* o_eyeX, s16* o_eyeY) { cXyz eye_vec, atn_vec; s16 offset_y = field_0x85a; eye_vec = eyePos - mHeadCenterPos; s16 eye_angle_x = eye_vec.atan2sY_XZ(); s16 eye_angle_y = eye_vec.atan2sX_Z(); s16 sVar1 = eye_angle_x - mNeckAngle.x; s16 sVar2 = eye_angle_y - offset_y - mNeckAngle.y; if (i_atnPos != NULL) { atn_vec = *i_atnPos - mHeadCenterPos; s16 atn_angle_x = atn_vec.atan2sY_XZ(); s16 atn_angle_y = atn_vec.atan2sX_Z() - offset_y; if ((atn_angle_y > 0x7000 && mNeckAngle.y < 0) || (atn_angle_y < -0x7000 && mNeckAngle.y > 0)) { atn_angle_y *= -1; } s16 sVar7 = cLib_minMaxLimit((s16)atn_angle_x, -10000, 8000); s16 sVar8 = cLib_minMaxLimit((s16)atn_angle_y, -20000, 20000); *o_eyeX = (s16)(sVar7 - sVar1) >> 1; *o_eyeY = (s16)(sVar8 - sVar2) >> 1; *o_neckX = *o_eyeX; *o_neckY = *o_eyeY; *o_eyeX += (s16)(atn_angle_x - sVar7); *o_eyeY += (s16)(atn_angle_y - sVar8); } else { *o_neckX = daAlink_getAlinkActorClass()->getProcNeckX(); *o_neckY = daAlink_getAlinkActorClass()->getMidnaProcNeckY(); } return sVar2; } /* 804C2A68-804C2AB8 0068C8 0050+00 2/2 0/0 0/0 .text clearEyeMove__9daMidna_cFv */ void daMidna_c::clearEyeMove() { mpEyeMatAnm[0]->setNowOffsetX(0.0f); mpEyeMatAnm[1]->setNowOffsetX(0.0f); mpEyeMatAnm[0]->setNowOffsetY(0.0f); mpEyeMatAnm[1]->setNowOffsetY(0.0f); if (daMidna_matAnm_c::getEyeMoveFlg()) { daMidna_matAnm_c::offEyeMoveFlg(); daMidna_matAnm_c::setMorfFrame(3); } } /* 804C2AB8-804C2EBC 006918 0404+00 1/1 0/0 0/0 .text setEyeMove__9daMidna_cFPC4cXyzss */ void daMidna_c::setEyeMove(cXyz const* i_atnPos, s16 i_angleX, s16 i_angleY) { daAlink_c* link = daAlink_getAlinkActorClass(); u8 timer = mEyeMoveTimer; f32 move_x = mEyeMoveX; f32 move_y = mEyeMoveY; mEyeMoveTimer = cM_rndF(30.0f) + 75.0f; mEyeMoveX = 0.0f; mEyeMoveY = 0.0f; f32 tmp_y, tmp_x; if (i_atnPos != NULL) { tmp_y = i_angleX * (1.0f / 0x2000); tmp_x = i_angleY * (1.0f / 0x2000); } else if (link->getEyeMoveRateY() != 0.0f || link->getMidnaEyeMoveRateX() != 0.0f) { tmp_y = link->getEyeMoveRateY(); tmp_x = link->getMidnaEyeMoveRateX(); } else if (!dComIfGp_event_runCheck() && checkStateFlg0(FLG0_UNK_40) && !dComIfGp_checkPlayerStatus1(0, 0x800000) && fabsf(speedF) < 0.01f) { if (timer != 0) { mEyeMoveTimer = timer - 1; mEyeMoveX = move_x; mEyeMoveY = move_y; } else if (move_x != 0 || move_y != 0) { if (cM_rnd() < 0.5f) { mEyeMoveX = 0.0f; mEyeMoveY = 0.0f; } else { s16 angle = cM_atan2s(mEyeMoveX, mEyeMoveY); s16 angle2 = angle + (s16)((int)cM_rndF(3.0f) * 0x2000 + 0x6000); mEyeMoveX = cM_ssin(angle2); mEyeMoveY = cM_scos(angle2); } } else { s16 angle = (s16)cM_rndF(8.0f) * 0x2000; mEyeMoveX = cM_ssin(angle); mEyeMoveY = cM_scos(angle); } tmp_x = mEyeMoveX; tmp_y = mEyeMoveY; } else { clearEyeMove(); return; } if (daMidna_matAnm_c::getMorfFrame() == 0) { if (tmp_x > 1.0f) { tmp_x = 1.0f; } else if (tmp_x < -1.0f) { tmp_x = -1.0f; } if (tmp_y > 1.0f) { tmp_y = 1.0f; } else if (tmp_y < -1.0f) { tmp_y = -1.0f; } f32 target_lx, target_rx, target_ly, target_ry; if (tmp_x > 0.0f) { target_lx = tmp_x * -0.2f; target_rx = tmp_x * 0.2f; } else { target_lx = tmp_x * -0.2f; target_rx = tmp_x * 0.2f; } if (tmp_y > 0.0f) { target_ly = tmp_y * 0.2f; } else { target_ly = tmp_y * 0.2f; } target_ry = target_ly; f32 fVar7 = JMAFastSqrt(tmp_x * tmp_x + tmp_y * tmp_y); if (fVar7 > 1.0f) { if (tmp_x * tmp_y < 0.0f) { target_rx *= fabsf(tmp_x) / fVar7; target_ry *= fabsf(tmp_y) / fVar7; } else { target_lx *= fabsf(tmp_x) / fVar7; target_ly *= fabsf(tmp_y) / fVar7; } } daMidna_matAnm_c::onEyeMoveFlg(); cLib_addCalc(mpEyeMatAnm[0]->getNowOffsetXP(), target_lx, 0.5f, 0.1f, 0.03f); cLib_addCalc(mpEyeMatAnm[1]->getNowOffsetXP(), target_rx, 0.5f, 0.1f, 0.03f); cLib_addCalc(mpEyeMatAnm[0]->getNowOffsetYP(), target_ly, 0.5f, 0.1f, 0.03f); cLib_addCalc(mpEyeMatAnm[1]->getNowOffsetYP(), target_ry, 0.5f, 0.1f, 0.03f); } } /* 804C2EBC-804C3168 006D1C 02AC+00 1/1 0/0 0/0 .text setNeckAngle__9daMidna_cFv */ void daMidna_c::setNeckAngle() { daAlink_c* link = daAlink_getAlinkActorClass(); BOOL clear_eye_move = mBtkHeap.getIdx() != 0x3A4 && !mBtkHeap.checkNoSetIdx() && mBtkHeap.getIdx() != 0x399; s16 neck_x = 0; s16 neck_y = 0; s16 eye_x = 0; s16 eye_y = 0; cXyz* pos; if (field_0x84e == 2 || checkMidnaTired() || checkSetAnime(0, ANM_CLINGB) || (checkStateFlg0((daMidna_FLG0)(FLG0_NO_HAIR_SCALE | FLG0_UNK_200000)) && !checkEndResetStateFlg0(ERFLG0_UNK_100)) || (clear_eye_move && !checkStateFlg0(FLG0_NO_DRAW)) || (!checkStateFlg0(FLG0_UNK_1) && checkSetAnime(0, ANM_SWAITB))) { pos = NULL; offStateFlg0(FLG0_FORCE_NECK_AIM); } else if (checkStateFlg0(FLG0_FORCE_NECK_AIM)) { pos = &mForceNeckAimPos; offStateFlg0(FLG0_FORCE_NECK_AIM); } else if (checkEndResetStateFlg0(ERFLG0_UNK_100)) { pos = &link->eyePos; } else if (checkShadowModelDrawSmode() && mDemoMode != 4 && mDemoMode != 7 && mDemoMode != 8 && mDemoMode != 0x10 && mDemoMode != 3 && !checkStateFlg0(FLG0_WOLF_NO_POS)) { pos = &link->eyePos; } else if (link->checkMidnaAtnPos() && !checkSetAnime(0, ANM_LEADST) && !checkSetAnime(0, ANM_LEADED)) { if (checkStateFlg0((daMidna_FLG0)(FLG0_TAG_WAIT | FLG0_UNK_100))) { pos = &link->eyePos; } else { pos = link->getMidnaAtnPos(); } } else { pos = NULL; } getNeckAimAngle(pos, &neck_x, &neck_y, &eye_x, &eye_y); daPy_addCalcShort(&mNeckAngle.x, neck_x, 3, 0x1000, 0x100); daPy_addCalcShort(&mNeckAngle.y, neck_y, 3, 0x1000, 0x100); if (clear_eye_move) { clearEyeMove(); } else { setEyeMove(pos, eye_x, eye_y); } } /* 804C3168-804C3298 006FC8 0130+00 1/1 0/0 0/0 .text initHairAngle__9daMidna_cFv */ void daMidna_c::initHairAngle() { static Vec const localOffset = {0.0f, 136.0f, -2.4f}; MTXMultVec(mpShadowModel->getBaseTRMtx(), &localOffset, &mHairPos[0]); mHairDir[0] = cXyz::Zero; mHairAngleZ[0] = 0; mHairAngleY[0] = 0; mHairScale[0] = l_hairScale[0]; for (int i = 1; i < 5; i++) { mHairPos[i] = mHairPos[i - 1]; mHairPos[i].y -= 28.0f; mHairDir[i] = cXyz::Zero; mHairAngleZ[i] = 0; mHairAngleY[i] = 0; mHairScale[i] = l_hairScale[i]; } onStateFlg0(FLG0_UNK_8); } /* 804C3298-804C3F04 0070F8 0C6C+00 2/2 0/0 0/0 .text setHairAngle__9daMidna_cFv */ void daMidna_c::setHairAngle() { if (!checkStateFlg0(FLG0_UNK_8)) { initHairAngle(); return; } cXyz prev_pos, head_dir; mDoMtx_multVecSR(mpShadowModel->getAnmMtx(JNT_HEAD), &cXyz::BaseX, &head_dir); mDoMtx_multVecZero(mpShadowModel->getAnmMtx(JNT_HAIR_1), &prev_pos); s16 head_angle = head_dir.atan2sX_Z(); s16 inv_head_angle = head_angle + 0x8000; cXyz vec, old_pos; int i; cXyz* pos = mHairPos; cXyz* dir = mHairDir; cXyz* scale = mHairScale; s16* angle_z = mHairAngleZ; s16* angle_y = mHairAngleY; f32 fVar4 = 0.75f; f32 fVar1 = 0.05f; s16 target_angle_y; BOOL bVar5 = false; f32 fVar2 = fabsf(speedF) * 0.04f; if (fVar2 > 1.0f) { fVar2 = 1.0f; } s16 target_angle_z, iVar16; iVar16 = field_0x872; BOOL bVar4 = false; field_0x872 += fVar2 * 0x1000 + 0x800; cXyz* atn_pos = NULL; daAlink_c* link = daAlink_getAlinkActorClass(); if (link->checkMidnaHairAtnPos() && !checkMidnaTired() && !checkStateFlg0((daMidna_FLG0) (FLG0_NO_HAIR_SCALE | FLG0_UNK_200000 | FLG0_TAG_WAIT | FLG0_UNK_100))) { atn_pos = link->getMidnaHairAtnPos(); onStateFlg0(FLG0_UNK_10000000); } else { offStateFlg0(FLG0_UNK_10000000); } for (i = 0; i < 5; i++, pos++, dir++, angle_z++, angle_y++, scale++) { if (checkStateFlg0(FLG0_UNK_10000000)) { cLib_chasePos(scale, l_hairScale[4], 0.1f); } else { cLib_chasePos(scale, l_hairScale[i], 0.1f); } old_pos = *pos; if (checkStateFlg0(FLG0_UNK_200000)) { if (i == 4) { mDoMtx_multVec(mpShadowModel->getAnmMtx(JNT_HAIR_5), &cXyz::BaseX, pos); } else { mDoMtx_multVecZero(mpShadowModel->getAnmMtx(JNT_HAIR_2 + i), pos); } old_pos = *pos; vec = *pos - prev_pos; *angle_z = cM_atan2s(-vec.y, -vec.z); *angle_y = cM_atan2s(vec.x, JMAFastSqrt(vec.y * vec.y + vec.z * vec.z)); prev_pos = *pos; } else if (atn_pos != NULL) { vec = *atn_pos - prev_pos; mDoMtx_stack_c::YrotS(-shape_angle.y); mDoMtx_stack_c::multVec(&vec, &vec); target_angle_y = fVar1 * cM_atan2s(vec.x, JMAFastSqrt(vec.y * vec.y + vec.z * vec.z)); if (i == 0 && (vec.z < 0.0f || vec.y >= 0.0f)) { bVar4 = true; } if (bVar4) { if (vec.y < 1.0f && i < 4) { vec.y = 1.0f; } target_angle_z = fVar1 * cM_atan2s(-vec.y, -vec.z) - (1.0f - fVar1) * 0x4000; } else { target_angle_z = fVar1 * (cM_atan2s(-vec.y, -vec.z) - 0x10000) - (1.0f - fVar1) * 0x4000; } cLib_addCalcAngleS(angle_z, target_angle_z, 5, 0x1800, 0x100); cLib_addCalcAngleS(angle_y, target_angle_y, 5, 0x1800, 0x100); fVar1 += 0.3f; if (fVar1 > 1.0f) { fVar1 = 1.0f; } } else { vec = *pos - prev_pos + *dir; vec += daAlink_getAlinkActorClass()->getWindSpeed(); if (checkEndResetStateFlg0(ERFLG0_UNK_20)) { vec = cXyz::Zero; } vec.y -= 2.0f; vec.y += fVar2 * (cM_rndFX(3.0f) + 3.0f) * cM_ssin(iVar16); mDoMtx_stack_c::YrotS(-head_angle); mDoMtx_stack_c::multVec(&vec, &vec); if (vec.abs() < 1.0f) { if (i == 0) { cLib_addCalcAngleS(angle_z, 0, 5, 0x1800, 0x100); cLib_addCalcAngleS(angle_y, 0, 5, 0x1800, 0x100); } else { cLib_addCalcAngleS(angle_z, 0, 5, 0x1800, 0x100); cLib_addCalcAngleS(angle_y, 0, 5, 0x1800, 0x100); } } else { if (i == 0) { if (vec.z > 0.0f) { vec.z *= -1.0f; } f32 fVar21 = vec.absXZ(); if (fVar21 < vec.y * -1.732f) { if (fVar21 < 1.0f) { vec.x = 0.0f; vec.z = -1.0f; vec.y = -0.577367f; } else { if (fabsf(speedF) < 0.1f) { vec.x *= 0.5f; fVar21 = vec.absXZ(); } vec.y = fVar21 * -0.577367f; } bVar5 = true; } } *angle_y = cM_atan2s(vec.x, JMAFastSqrt(vec.y * vec.y + vec.z * vec.z)); if (i == 4) { *angle_z = cM_atan2s(-vec.y, -vec.z); } else { *angle_z = 0; } } iVar16 -= (fVar2 * 0x1000 + 0x800); } static Vec const hairOffset = {0.0f, 0.0f, 28.0f}; if (!checkStateFlg0(FLG0_UNK_200000)) { mDoMtx_stack_c::transS(prev_pos); mDoMtx_stack_c::YrotM(inv_head_angle); mDoMtx_stack_c::XrotM(*angle_z); mDoMtx_stack_c::YrotM(-*angle_y); mDoMtx_stack_c::scaleM(*scale); mDoMtx_stack_c::multVec(&hairOffset, pos); } if (checkEndResetStateFlg0(ERFLG0_UNK_20)) { *dir = cXyz::Zero; } else { *dir = (*pos - old_pos) * fVar4; if (bVar5) { *dir *= 0.5f; } } prev_pos = *pos; fVar4 -= 0.1f; } } /* 804C3F04-804C4394 007D64 0490+00 1/1 0/0 0/0 .text setDemoData__9daMidna_cFv */ void daMidna_c::setDemoData() { if (!dComIfGp_event_runCheck()) { mStaffID = -1; } else { mStaffID = dComIfGp_evmng_getMyStaffId("Midna", this, 0); } if (dComIfGp_getEvent().isOrderOK()) { if (mDemoType != 0) { mDemoType = 0; mDemoMode = 0; field_0x8dc = 0.0f; endHighModel(); if (mLeftHandShapeIdx == 0xfd) { mLeftHandShapeIdx = 0xfe; } if (mRightHandShapeIdx == 0xfd) { mRightHandShapeIdx = 0xfe; } offStateFlg1((daMidna_FLG1)(FLG1_SHADOW_NO_DRAW | FLG1_NO_MASK_DRAW | FLG1_UNK_40 | FLG1_UNK_20 | FLG1_UNK_10 | FLG1_FORCE_NORMAL_COL | FLG1_FORCE_TIRED_COL | FLG1_SHADOW_MODEL_DRAW_DEMO_FORCE | FLG1_UNK_1)); } offStateFlg0((daMidna_FLG0)(FLG0_UNK_2000000 | FLG0_UNK_1000000)); if (mpDemoFCBlendBrk != NULL) { if (mpDemoFCBlendBmd != NULL) { mpDemoFCBlendBmd->getModelData()->removeTevRegAnimator(mpDemoFCBlendBrk); } mpDemoFCBlendBrk = NULL; } field_0x668 = NULL; } else { dDemo_actor_c* demo_actor = dDemo_c::getActor(demoActorID); if (demo_actor != NULL) { demo_actor->setModel(mpShadowModel); if (mDemoType != 1) { mDemoType = 1; onStateFlg0(FLG0_WOLF_NO_POS); } if (demo_actor->checkEnable(0x20)) { mDemoMode = demo_actor->getAnmId(); } if (demo_actor->checkEnable(2)) { current.pos = demo_actor->getTrans(); } if (demo_actor->checkEnable(8)) { shape_angle.x = 0; shape_angle.y = demo_actor->getRatate().y; shape_angle.z = 0; } } else if (mStaffID != -1) { if (mDemoType != 2) { mDemoType = 2; } char* cut_name = dComIfGp_getPEvtManager()->getMyNowCutName(mStaffID); if (cut_name != NULL) { mDemoMode = (cut_name[0] - 0x30) * 10 + (cut_name[1] - 0x30); cXyz* pos = dComIfGp_evmng_getMyXyzP(mStaffID, "pos"); if (pos != NULL) { mDemoPos = *pos; } else { mDemoPos = current.pos; } f32* speed = dComIfGp_evmng_getMyFloatP(mStaffID, "speed"); if (speed != NULL) { mDemoSpeed = *speed; } else { mDemoSpeed = 5.0f; } int* angle = dComIfGp_evmng_getMyIntegerP(mStaffID, "angle"); if (angle != NULL) { mDemoAngle = *angle; } else { mDemoAngle = shape_angle.y; } cXyz* npos = dComIfGp_evmng_getMyXyzP(mStaffID, "npos"); if (npos != NULL) { setForceNeckAimPos(*npos); } f32* fprm0 = dComIfGp_evmng_getMyFloatP(mStaffID, "fprm0"); if (fprm0 != NULL) { field_0x8dc = *fprm0; } else { field_0x8dc = 0.0f; } } else { mDemoMode = 1; } if (!checkMidnaRealBody() && !checkShadowModelDrawSmode() && (mDemoMode == 9 || mDemoMode == 0xb || mDemoMode == 0xd || mDemoMode == 0xc)) { mDemoMode = 1; } else if (mDemoMode == 0xd) { offStateFlg0(FLG0_WOLF_NO_POS); } if ((mDemoMode == 1 || mDemoMode == 0xb || (mDemoMode == 2 && field_0x84e == 3))) { dComIfGp_evmng_cutEnd(mStaffID); if (mDemoMode == 1) { offStateFlg0(FLG0_WOLF_NO_POS); } } } } } /* 804C4394-804C4444 0081F4 00B0+00 1/1 0/0 0/0 .text setSimpleBrk__9daMidna_cFP12J3DModelDataUs */ J3DAnmTevRegKey* daMidna_c::setSimpleBrk(J3DModelData* i_modelData, u16 i_idx) { J3DAnmTevRegKey* brk = static_cast(dComIfG_getObjectRes(l_arcName, i_idx)); if (brk == NULL) { return NULL; } brk->searchUpdateMaterialID(i_modelData); i_modelData->entryTevRegAnimator(brk); brk->setFrame(brk->getFrameMax() - 0.001f); return brk; } /* 804C4444-804C44CC 0082A4 0088+00 1/1 0/0 0/0 .text setSimpleBtk__9daMidna_cFP12J3DModelDataUs */ J3DAnmTextureSRTKey* daMidna_c::setSimpleBtk(J3DModelData* i_modelData, u16 i_idx) { J3DAnmTextureSRTKey* btk = static_cast(dComIfG_getObjectRes(l_arcName, i_idx)); if (btk == NULL) { return NULL; } btk->searchUpdateMaterialID(i_modelData); i_modelData->entryTexMtxAnimator(btk); btk->setFrame(0.0f); return btk; } /* 804C44CC-804C4750 00832C 0284+00 1/1 0/0 0/0 .text initMidnaModel__9daMidna_cFv */ void daMidna_c::initMidnaModel() { daAlink_c* link = daAlink_getAlinkActorClass(); if (checkStateFlg1(FLG1_UNK_1)) { if (mpDemoBDTmpBmd != NULL && mpModel != mpDemoBDTmpBmd) { mpModel = mpDemoBDTmpBmd; mpMaskBmd = mpDemoBDMaskBmd; mpHandsBmd = mpDemoBDHandsBmd; mpHairhandBmd = mpDemoBDHairhandBmd; if (mpLeftHandShape != NULL) { mpLeftHandShape->hide(); } mpLeftHandShape = mpModel->getModelData()->getMaterialNodePointer(6)->getShape(); if (mpRightHandShape != NULL) { mpRightHandShape->hide(); } mpRightHandShape = mpModel->getModelData()->getMaterialNodePointer(7)->getShape(); mBtpHeap.initData(); mBtkHeap.initData(); } } else { if (mpDemoBDTmpBmd != NULL && mpModel == mpDemoBDTmpBmd) { if (mpLeftHandShape != NULL) { mpLeftHandShape->hide(); } if (mpRightHandShape != NULL) { mpRightHandShape->hide(); } mpModel = NULL; mpMaskBmd = NULL; mpHandsBmd = NULL; mpHairhandBmd = NULL; mpLeftHandShape = NULL; mpRightHandShape = NULL; mBtpHeap.initData(); mBtkHeap.initData(); } J3DModel* midna_model = link->getMidnaModel(); if (mpModel != NULL) { if (midna_model == NULL && !checkStateFlg1(FLG1_UNK_1)) { mpModel = NULL; mpMaskBmd = NULL; mpHandsBmd = NULL; mpHairhandBmd = NULL; mpLeftHandShape = NULL; mpRightHandShape = NULL; } } else if (midna_model != NULL) { mpModel = midna_model; mpMaskBmd = link->getMidnaMaskModel(); mpHandsBmd = link->getMidnaHandModel(); mpHairhandBmd = link->getMidnaHairHandModel(); J3DModelData* model_data = mpModel->getModelData(); mpLeftHandShape = model_data->getMaterialNodePointer(6)->getShape(); mpRightHandShape = model_data->getMaterialNodePointer(7)->getShape(); model_data->getMaterialNodePointer(2)->setMaterialAnm(mpEyeMatAnm[0]); model_data->getMaterialNodePointer(3)->setMaterialAnm(mpEyeMatAnm[1]); mpEyeMatAnm[0]->init(); mpEyeMatAnm[1]->init(); J3DModelData* hand_model_data = mpHandsBmd->getModelData(); for (u16 i = 0; i < 4; i++) { hand_model_data->getMaterialNodePointer(i)->getShape()->hide(); } mBtpHeap.initData(); mBtkHeap.initData(); } } } /* 804C4750-804C49B8 0085B0 0268+00 2/2 0/0 0/0 .text daMidna_searchNpc__FP10fopAc_ac_cPv */ static void* daMidna_searchNpc(fopAc_ac_c* i_actor, void* o_far) { daAlink_c* link = daAlink_getAlinkActorClass(); cXyz link_pos = link->current.pos; link_pos.y += 100.0f; if (fopAcM_GetGroup(i_actor) == fopAc_NPC_e && !fopAcM_CheckStatus(i_actor, 0x8000000) && fabsf(link_pos.y - i_actor->eyePos.y) <= 700.0f) { f32 dist = i_actor->eyePos.absXZ(link_pos); if (dist <= link->getMetamorphoseNearDis()) { *(BOOL*)o_far = FALSE; } else { if (dist <= link->getMetamorphoseFarDis() && fopAcM_seenPlayerAngleY(i_actor) <= link->getMetamorphoseFarAngle()) { *(BOOL*)o_far = TRUE; } else { return NULL; } } if (!fopAcM_lc_c::lineCheck(&i_actor->eyePos, &link_pos, i_actor)) { return i_actor; } } return NULL; } /* 804C49B8-804C4AE8 008818 0130+00 2/2 0/0 0/0 .text setMidnaNoDrawFlg__9daMidna_cFv */ void daMidna_c::setMidnaNoDrawFlg() { if ((!checkStateFlg1((daMidna_FLG1)(FLG1_SHADOW_MODEL_DRAW_DEMO_FORCE | FLG1_UNK_1)) && (!checkAppear() || !checkMidnaRealBody())) || daAlink_c::checkCloudSea()) { onStateFlg0(FLG0_NO_DRAW); } else if (!checkStateFlg1((daMidna_FLG1)(FLG1_SHADOW_MODEL_DRAW_DEMO_FORCE | FLG1_UNK_1)) && daAlink_getAlinkActorClass()->checkPlayerNoDraw() && !checkStateFlg0((daMidna_FLG0)(FLG0_TAG_WAIT | FLG0_UNK_100))) { onStateFlg0((daMidna_FLG0)(FLG0_UNK_10000 | FLG0_NO_DRAW)); } else { if (checkStateFlg0(FLG0_NO_DRAW) && !checkStateFlg1((daMidna_FLG1)(FLG1_SHADOW_MODEL_DRAW_DEMO_FORCE | FLG1_UNK_1)) && !checkStateFlg0(FLG0_UNK_10000)) { onStateFlg0(FLG0_UNK_1000); } offStateFlg0((daMidna_FLG0)(FLG0_UNK_10000 | FLG0_NO_DRAW)); } } /* 804C4AE8-804C4B68 008948 0080+00 1/0 0/0 0/0 .text checkMetamorphoseEnableBase__9daMidna_cFv */ BOOL daMidna_c::checkMetamorphoseEnableBase() { BOOL tmp; if (!daAlink_getAlinkActorClass()->checkMidnaRide() || (g_env_light.mEvilInitialized & 0x80) /* dSv_event_flag_c::M_077 - Main Event - Get shadow crystal (can now transform) */ || !dComIfGs_isEventBit(0xD04) || fopAcIt_Judge((fopAcIt_JudgeFunc)daMidna_searchNpc, &tmp)) { return FALSE; } return TRUE; } /* 804C4B68-804C4BC0 0089C8 0058+00 1/1 0/0 0/0 .text checkNoDrawState__9daMidna_cFv */ BOOL daMidna_c::checkNoDrawState() { return mDemoMode == 0xb || checkStateFlg0(FLG0_UNK_400000) || checkStateFlg1(FLG1_UNK_20) || (checkStateFlg0(FLG0_NO_DRAW) && !checkShadowModelDrawSmode()); } /* 804C4BC0-804C4FDC 008A20 041C+00 1/1 0/0 0/0 .text setSound__9daMidna_cFv */ void daMidna_c::setSound() { static u32 const anmSoundLabel[4][2] = { Z2SE_MDN_HIP, Z2SE_MDN_HIP_WTR, Z2SE_MDN_HAND, Z2SE_MDN_HAND_WTR, Z2SE_MDN_LEG, Z2SE_MDN_LEG_WTR, Z2SE_MDN_LAND, Z2SE_MDN_LAND_WTR, }; int idx = 4; if (mDemoMode == 0xb || checkStateFlg1(FLG1_UNK_20) || (checkStateFlg0(FLG0_NO_DRAW) && !checkStateFlg0(FLG0_UNK_10000) && !checkShadowModelDrawSmode())) { return; } if (mUpperBck.checkFrame(mVoiceFrame)) { mSound.startCreatureVoice(mSoundID, -1); } if (checkSetAnime(1, ANM_SWAITB)) { if (mUpperBck.checkFrame(83.0f)) { mSound.startCreatureVoice(Z2SE_MDN_V_SWAITB_3, -1); } else if (mUpperBck.checkFrame(24.0f) || mUpperBck.checkFrame(99.0f)) { idx = 0; } } else if (checkSetAnime(1, ANM_ROPEWAIT)) { if (mUpperBck.checkFrame(66.0f)) { mSound.startCreatureVoice(Z2SE_MDN_V_ROPEWAIT_2, -1); } } else if (checkSetAnime(1, ANM_CLINGST)) { if (mUpperBck.checkFrame(11.0f)) { idx = 0; } } else if (checkSetAnime(1, ANM_LEADTOWAITA)) { if (mUpperBck.checkFrame(2.0f)) { idx = 0; } } else if (checkSetAnime(1, ANM_HIT)) { if (mUpperBck.checkFrame(10.0f) || mUpperBck.checkFrame(11.0f)) { idx = 1; } else if (mUpperBck.checkFrame(28.0f) || mUpperBck.checkFrame(35.0f)) { idx = 2; } } else if (checkSetAnime(1, ANM_SWAITC)) { if (mUpperBck.checkFrame(2.0f)) { idx = 3; } else if (mUpperBck.checkFrame(67.0f)) { idx = 0; } } else if (checkSetAnime(1, ANM_DIGIN)) { if (mUpperBck.checkFrame(19.0f) || mUpperBck.checkFrame(24.0f) || mUpperBck.checkFrame(34.0f)) { idx = 1; } } else if (checkSetAnime(1, ANM_WAITTP)) { if (mUpperBck.checkFrame(9.0f) || mUpperBck.checkFrame(12.0f)) { idx = 1; } } if (idx != 4) { u32 sound_id = anmSoundLabel[idx][dComIfGp_checkPlayerStatus0(0, 0x100000) ? 1 : 0]; mSound.startCreatureSound(sound_id, 0, -1); } if (checkStateFlg1(FLG1_UNK_800)) { mSound.updateAnime(mpMorf->getFrame(), mpMorf->getPlaySpeed()); } if (checkMidnaTired() && !dComIfGp_checkPlayerStatus0(0, 0x20000000)) { mSound.startCreatureVoiceLevel(Z2SE_MDN_V_WAITD, -1); } } /* 804C4FDC-804C59E8 008E3C 0A0C+00 1/1 0/0 0/0 .text execute__9daMidna_cFv */ int daMidna_c::execute() { daAlink_c* link = daAlink_getAlinkActorClass(); if (!link->checkMetamorphose()) { if (daPy_py_c::checkNowWolf()) { onStateFlg0(FLG0_UNK_40000000); } else { offStateFlg0(FLG0_UNK_40000000); } } initMidnaModel(); field_0x85a = shape_angle.y; setDemoData(); offStateFlg0(FLG0_NO_INPUT); if (checkStateFlg0(FLG0_TAG_WAIT) && (link->checkMidnaUseAbility() || checkSetAnime(0, ANM_LEADTOWAITA) || eventInfo.checkCommandTalk())) { offStateFlg0((daMidna_FLG0)(FLG0_PORTAL_OBJ_CALL | FLG0_TAG_WAIT | FLG0_UNK_200)); } daMidna_matAnm_c::decMorfFrame(); checkMidnaPosState(); if (daPy_py_c::checkFirstMidnaDemo() && !checkStateFlg0(FLG0_WOLF_NO_POS)) { link->onMidnaRide(); } else { link->offMidnaRide(); } setMidnaNoDrawFlg(); fopAc_ac_c* talk_partner = fopAcM_getTalkEventPartner(link); if (checkStateFlg0(FLG0_NO_DRAW) && (eventInfo.checkCommandTalk() || checkStateFlg0(FLG0_WOLF_NO_POS) || mDemoMode == 2 || (dComIfGp_event_runCheck() && talk_partner != NULL && (checkStateFlg0(FLG0_UNK_2000000) || fopAcM_GetName(talk_partner) == PROC_Tag_Mhint || fopAcM_GetName(talk_partner) == PROC_Tag_Mstop || fopAcM_GetName(talk_partner) == PROC_Tag_Mwait)))) { if (mDemoMode == 3 || mDemoMode == 0x10 || mDemoMode == 4 || mDemoMode == 6 || mDemoMode == 7 || mDemoMode == 0xe || mDemoMode == 0x13 || mDemoMode == 8) { field_0x84e = 3; } else if (field_0x84e == 0) { if (checkStateFlg0(FLG0_WOLF_NO_POS)) { field_0x84e = 3; } else { field_0x84e = 1; if (link->initShadowScaleLight()) { onStateFlg0(FLG0_UNK_80000); } else { offStateFlg0(FLG0_UNK_80000); } } } else if (field_0x84e == 1) { if (link->moveShadowScaleLight()) { field_0x84e = 2; } } else if (field_0x84e == 2) { link->moveShadowScaleLight(); if (mpMorf->isStop()) { field_0x84e = 3; } } else if (field_0x84e == 3 && checkStateFlg0(FLG0_UNK_1000000)) { offStateFlg0(FLG0_UNK_1000000); field_0x84e = 4; } else if (field_0x84e == 4) { if (mpMorf->isStop()) { field_0x84e = 5; } } else if (field_0x84e == 5 && checkStateFlg0(FLG0_WOLF_NO_POS)) { field_0x84e = 3; } } else { field_0x84e = 0; } if (checkSetAnime(0, ANM_LEADTOWAITA) && mpMorf->checkFrame(2.0f) && daPy_py_c::checkNowWolf() && mpKago == NULL) { dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); } allAnimePlay(); setAnm(); setHairAngle(); setMatrix(); mpMorf->modelCalc(); setRoomInfo(); setNeckAngle(); if (checkEndResetStateFlg0(ERFLG0_UNK_20)) { setHairAngle(); } setBodyPartMatrix(); setBodyPartPos(); mSound.framework(0, mReverb); if (eventInfo.checkCommandTalk()) { if (!checkShadowModeTalkWait() || fopAcM_getTalkEventPartner(link) == this) { if (!checkStateFlg0(FLG0_UNK_8000)) { offStateFlg0((daMidna_FLG0)(FLG0_NPC_NEAR | FLG0_NPC_FAR)); BOOL far; if (fopAcIt_Judge((fopAcIt_JudgeFunc)daMidna_searchNpc, &far)) { if (!far) { onStateFlg0(FLG0_NPC_NEAR); } else { onStateFlg0(FLG0_NPC_FAR); } } onStateFlg0(FLG0_UNK_8000); mMsgFlow.init(this, 0xbb9, 0, NULL); } else if (mMsgFlow.doFlow(this, NULL, 0)) { int item_id; u16 event_id = mMsgFlow.getEventId(&item_id); if (checkStateFlg0(FLG0_NO_DRAW)) { if (field_0x84e == 3) { field_0x84e = 4; } else { onStateFlg0(FLG0_UNK_1000000); } } if (event_id == 4 || event_id == 5) { dComIfGp_getEvent().reset(this); offStateFlg0(FLG0_UNK_8000); fopAcM_orderPotentialEvent(this, 0x400, 0xffff, 1); link->changeOriginalDemo(); if (event_id == 4) { link->changeDemoMode(0x3a, 0, 0, 0); if (mpModel != NULL && !checkStateFlg0(FLG0_NO_DRAW)) { changeOriginalDemo(); changeDemoMode(0xf); } } else { link->changeDemoMode(0x39, 0, 0, 0); } if (checkStateFlg0(FLG0_NO_DRAW)) { onStateFlg0(FLG0_UNK_2000000); } } else if (!checkStateFlg0(FLG0_NO_DRAW) || (checkSetAnime(0, ANM_S_RETURN) && mpMorf->isStop())) { if (event_id == 0xb) { dMeter2Info_setPauseStatus(6); link->onPortalWarpMidnaAtnKeep(); } else { link->onMidnaTalkPolySpeed(); } dComIfGp_getEvent().reset(this); offStateFlg0(FLG0_UNK_8000); } } } } else if (eventInfo.checkCommandDemoAccrpt() && !link->checkMetamorphose()) { dComIfGp_getEvent().reset(this); } if (link->checkMidnaRide()) { eventInfo.onCondition(1); } if (mpModel != NULL && !checkStateFlg0(FLG0_NO_DRAW)) { cXyz pos; if (checkSetAnime(0, ANM_LEADST)) { mDoMtx_multVecZero(mpModel->getAnmMtx(JNT_BACKBONE1), &pos); mParticleKey1 = dComIfGp_particle_set(mParticleKey1, 0x8397, &pos, &tevStr, &shape_angle, NULL, 0xff, NULL, -1, NULL, NULL, 0); mDoMtx_multVecZero(mpModel->getAnmMtx(JNT_HAIR_1), &pos); mParticleKey2 = dComIfGp_particle_set(mParticleKey2, 0x8398, &pos, &tevStr, &shape_angle, NULL, 0xff, NULL, -1, NULL, NULL, 0); } if (checkStateFlg0(FLG0_UNK_400000)) { static s16 const throughEffectJoint[6] = { JNT_HEAD, JNT_BACKBONE2, JNT_WAIST, JNT_HEAD, JNT_BACKBONE2, JNT_WAIST }; static u16 const throughEffectName[6] = { 0x84da, 0x84d9, 0x84db, 0x84dd, 0x84dc, 0x84de }; int i; u32* particle_key = mThroughEffectKey; for (i = 0; i < 6; i++, particle_key++) { mDoMtx_multVecZero(mpModel->getAnmMtx(throughEffectJoint[i]), &pos); *particle_key = dComIfGp_particle_set(*particle_key, throughEffectName[i], &pos, &tevStr, &shape_angle, NULL, 0xff, NULL, -1, NULL, NULL, 0); JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(*particle_key); if (emitter != NULL && emitter->isEnableDeleteEmitter()) { offStateFlg0(FLG0_UNK_400000); } } } else { for (int i = 0; i < 6; i++) { JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mThroughEffectKey[i]); if (emitter != NULL) { emitter->stopDrawParticle(); } } } } else { offStateFlg0(FLG0_UNK_400000); } mEndResetStateFlg0 = 0; link->clearMidnaMsgNum(); setSound(); return 1; } /* 804C59E8-804C5A08 009848 0020+00 1/0 0/0 0/0 .text daMidna_Execute__FP9daMidna_c */ static int daMidna_Execute(daMidna_c* i_this) { return i_this->execute(); } /* 804C5A08-804C6184 009868 077C+00 1/1 0/0 0/0 .text draw__9daMidna_cFv */ int daMidna_c::draw() { daAlink_c* link = daAlink_getAlinkActorClass(); if (checkNoDrawState() || (!checkStateFlg1((daMidna_FLG1)(FLG1_SHADOW_MODEL_DRAW_DEMO_FORCE | FLG1_UNK_1)) && daAlink_getAlinkActorClass()->checkPlayerNoDraw() && !checkStateFlg0((daMidna_FLG0)(FLG0_TAG_WAIT | FLG0_UNK_100)))) { return 1; } int bvar1 = false; dComIfGd_setListDark(); if (!checkStateFlg0(FLG0_NO_DRAW) && !checkStateFlg1(FLG1_SHADOW_MODEL_DRAW_DEMO_FORCE) && mpModel != NULL) { g_env_light.settingTevStruct(3, ¤t.pos, &tevStr); if (checkSetAnime(0, ANM_RETURN)) { f32 end_frame = mpMorf->getEndFrame(); f32 frame = mpMorf->getFrame(); tevStr.TevColor.r = (frame / end_frame) * -32.0f; tevStr.TevColor.g = tevStr.TevColor.r; tevStr.TevColor.b = tevStr.TevColor.r; } else if (link->getIceDamageWaitTimer() != 0 || link->checkFreezeDamage() != 0) { tevStr.TevColor = link->tevStr.TevColor; field_0x6e0 = link->tevStr.TevColor; if (dKy_darkworld_check()) { field_0x6e8 = (J3DGXColor)l_normalKColor; field_0x6ec = (J3DGXColor)l_normalKColor2; } else { field_0x6e8 = (J3DGXColor)l_lNormalKColor; field_0x6ec = (J3DGXColor)l_lNormalKColor2; } } g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); J3DMaterial* material = mpModel->getModelData()->getMaterialNodePointer(4); if (field_0x668 != NULL) { field_0x668->getTevColorReg(0, &field_0x6e0); field_0x668->getTevKonstReg(0, &field_0x6e8); } material->setTevColor(1, &field_0x6e0); material->setTevKColor(1, &field_0x6e8); mDoExt_modelEntryDL(mpModel); g_env_light.setLightTevColorType_MAJI(mpHandsBmd, &tevStr); mDoExt_modelEntryDL(mpHandsBmd); if (mpHairhandBmd != NULL && !checkStateFlg1((daMidna_FLG1)(FLG1_UNK_40 | FLG1_UNK_10))) { for (u16 i = 0; i < 3; i++) { J3DMaterial* material = mpHairhandBmd->getModelData()->getMaterialNodePointer(i); material->setTevColor(1, &field_0x6e0); material->setTevKColor(1, &field_0x6e8); material->setTevKColor(2, &field_0x6ec); } g_env_light.setLightTevColorType_MAJI(mpHairhandBmd, &tevStr); mDoExt_modelEntryDL(mpHairhandBmd); } if (!checkStateFlg1(FLG1_NO_MASK_DRAW)) { g_env_light.setLightTevColorType_MAJI(mpMaskBmd, &tevStr); mDoExt_modelEntryDL(mpMaskBmd); } if (!link->checkMidnaRide()) { bvar1 = true; } } else { g_env_light.settingTevStruct(1, ¤t.pos, &tevStr); if (field_0x668 != NULL) { field_0x668->getTevColorReg(0, &tevStr.TevColor); } g_env_light.setLightTevColorType_MAJI(mpGokouBmd, &tevStr); mDoExt_modelEntryDL(mpGokouBmd); MtxP mtx = mpShadowModel->getAnmMtx(JNT_WORLD_ROOT); cXyz vec(mtx[0][3], mtx[1][3], mtx[2][3]); MTXMultVec(dComIfGd_getViewMtx(), &vec, &vec); vec.z -= 200.0f; MTXMultVec(dComIfGd_getInvViewMtx(), &vec, &vec); g_env_light.setLightTevColorType_MAJI(mpShadowModel, &tevStr); mInvModel.entryDL(&vec); if (!checkStateFlg1(FLG1_NO_MASK_DRAW)) { g_env_light.setLightTevColorType_MAJI(mpShadowMaskBmd, &tevStr); mMaskInvModel.entryDL(&vec); } g_env_light.setLightTevColorType_MAJI(mpShadowHandsBmd, &tevStr); mHandsInvModel.entryDL(&vec); if (!checkStateFlg1(FLG1_UNK_40)) { g_env_light.setLightTevColorType_MAJI(mpShadowHairhandBmd, &tevStr); mHairhandInvModel.entryDL(&vec); } } if (mLeftHandShapeIdx == 0xfd) { g_env_light.setLightTevColorType_MAJI(mpDemoHLTmpBmd, &tevStr); mDoExt_modelEntryDL(mpDemoHLTmpBmd); } if (mRightHandShapeIdx == 0xfd) { g_env_light.setLightTevColorType_MAJI(mpDemoHRTmpBmd, &tevStr); mDoExt_modelEntryDL(mpDemoHRTmpBmd); } if (checkStateFlg0(FLG0_UNK_10)) { g_env_light.setLightTevColorType_MAJI(mpDemoFCBlendBmd, &tevStr); if (mpDemoFCBlendBrk != NULL) { mpDemoFCBlendBmd->getModelData()->entryTevRegAnimator(mpDemoFCBlendBrk); } mDoExt_modelEntryDL(mpDemoFCBlendBmd); g_env_light.setLightTevColorType_MAJI(mpDemoFCTongueBmd, &tevStr); mDoExt_modelEntryDL(mpDemoFCTongueBmd); } if (!checkStateFlg1(FLG1_UNK_40) && checkStateFlg1(FLG1_UNK_10)) { g_env_light.setLightTevColorType_MAJI(mpDemoHDTmpBmd, &tevStr); mDoExt_modelEntryDL(mpDemoHDTmpBmd); } tevStr.TevColor.r = 0; tevStr.TevColor.g = 0; tevStr.TevColor.b = 0; dComIfGd_setList(); if (bvar1 && !checkStateFlg1(FLG1_SHADOW_NO_DRAW)) { cXyz vec; mDoMtx_multVecZero(mpModel->getAnmMtx(JNT_BACKBONE1), &vec); if (fopAcM_gc_c::gndCheck(&vec)) { mShadowKey = dComIfGd_setShadow(mShadowKey, 0, mpModel, &vec, 600.0f, 0.0f, vec.y - 40.0f, fopAcM_gc_c::getGroundY(), *fopAcM_gc_c::getGroundCheck(), &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); if (!checkStateFlg1(FLG1_NO_MASK_DRAW)) { dComIfGd_addRealShadow(mShadowKey, mpMaskBmd); } if (!checkStateFlg1(FLG1_UNK_40)) { if (checkStateFlg1(FLG1_UNK_10)) { dComIfGd_addRealShadow(mShadowKey, mpDemoHDTmpBmd); } else { dComIfGd_addRealShadow(mShadowKey, mpHairhandBmd); } } } } return 1; } /* 804C6184-804C61A4 009FE4 0020+00 1/0 0/0 0/0 .text daMidna_Draw__FP9daMidna_c */ static int daMidna_Draw(daMidna_c* i_this) { return i_this->draw(); } /* 804C61A4-804C6324 00A004 0180+00 1/1 0/0 0/0 .text __dt__9daMidna_cFv */ daMidna_c::~daMidna_c() { dComIfG_resDelete(&mPhase, l_arcName); daPy_py_c::m_midnaActor = NULL; mSound.deleteObject(); } /* 804C6324-804C634C 00A184 0028+00 1/0 0/0 0/0 .text daMidna_Delete__FP9daMidna_c */ static int daMidna_Delete(daMidna_c* i_this) { i_this->~daMidna_c(); return 1; } /* 804C6C40-804C6C60 -00001 0020+00 1/0 0/0 0/0 .data l_daMidna_Method */ static actor_method_class l_daMidna_Method = { (process_method_func)daMidna_Create, (process_method_func)daMidna_Delete, (process_method_func)daMidna_Execute, (process_method_func)NULL, (process_method_func)daMidna_Draw, }; /* 804C6C60-804C6C90 -00001 0030+00 0/0 0/0 1/0 .data g_profile_MIDNA */ extern actor_process_profile_definition g_profile_MIDNA = { fpcLy_CURRENT_e, 6, fpcPi_CURRENT_e, PROC_MIDNA, &g_fpcLf_Method.base, sizeof(daMidna_c), 0, 0, &g_fopAc_Method.base, 0x5C, &l_daMidna_Method, 0x60000, fopAc_ENV_e, fopAc_CULLBOX_0_e, };