/** * d_a_player_main.cpp * * Main file for the Link (Player) actor. * * Much of Link's code is spread across various `.inc` files and included directly * into this one to make the file size more managable. * The original split locations are indicated in the map file. */ #include "d/actor/d_a_player_main.h" #include "d/actor/d_a_player_HIO.h" #include "d/d_com_inf_game.h" #include "d/d_com_lib_game.h" #include "d/d_procname.h" #include "d/d_kankyo.h" #include "JSystem/JKernel/JKRSolidHeap.h" #include "JSystem/JUtility/JUTAssert.h" #include "d/actor/d_a_itembase.h" #include "d/d_item_data.h" #include "d/d_item.h" #include "m_Do/m_Do_audio.h" #include "m_Do/m_Do_mtx.h" #include "m_Do/m_Do_lib.h" #include "d/d_material.h" #include "JSystem/J3DGraphLoader/J3DAnmLoader.h" #include "d/actor/d_a_hookshot.h" #include "d/actor/d_a_bomb.h" #include "d/actor/d_a_ship.h" #include "d/actor/d_a_boko.h" #include "d/actor/d_a_npc_sarace.h" #include "d/actor/d_a_boomerang.h" #include "SSystem/SComponent/c_counter.h" #include "m_Do/m_Do_graphic.h" #include "weak_bss_3569.h" // IWYU pragma: keep JGeometry::TVec3 l_hammer_splash_particle_scale(0.67f, 0.67f, 0.67f); #include "d/actor/d_a_player_main_data.inc" #include "d/actor/d_a_player_HIO.inc" static void dummydatafunc(f32* temp, f64* temp2) { // temporary hack to improve diffs until sdata2 offsets are figured out *temp = 2.0f; *temp = -1000000000.0f; *temp = -1.0f; *temp = 0.0f; *temp = 0.08f; *temp = 1.0f; *temp = 12.0f; *temp = 13.0f; *temp = 150.0f; *temp = 30.0f; *temp = 0.65f; *temp = 0.35f; *temp = 32768.0f; *temp = 16384.0f; *temp = 10.0f; *temp2 = 4503601774854144.0; *temp2 = 4503599627370496.0; *temp = 25.0f; *temp = -0.05f; *temp2 = 0.5; *temp2 = 3.0; *temp = 0.6f; *temp = 0.01f; *temp = 0.001f; *temp = 15.0f; *temp = 1.5f; *temp = 3.1415927f; *temp = 0.5f; *temp = 0.3f; *temp = 1.2f; *temp = 0.4f; *temp = 5.0f; *temp = 0.1f; *temp = 0.8f; *temp = 60.0f; *temp = 4.0f; *temp = 0.25f; *temp = 0.75f; *temp = 16.0f; *temp = 8.0f; *temp = 18.0f; *temp = 3.0f; *temp = 0.2f; *temp = 0.05f; *temp = 45.0f; *temp = 11.0f; *temp = 17.5f; *temp = 1000000000.0f; OSReport("Adanmae"); OSReport("d_a_player_dproc.inc"); OSReport("0"); OSReport("Halt"); OSReport("Link"); OSReport("DEFAULT_GETITEM"); OSReport("GanonK"); OSReport("GTower"); OSReport("d_a_player_bow.inc"); OSReport("d_a_player_hook.inc"); OSReport("d_a_player_fan.inc"); OSReport("d_a_player_hammer.inc"); OSReport("Type"); OSReport("Omori"); OSReport("d_a_player_sword.inc"); OSReport("M_DaiB"); OSReport("Xboss2"); OSReport("M_DragB"); OSReport("Xboss0"); OSReport("fall"); OSReport("d_a_player_main.cpp"); OSReport("(demo_mode < daPy_demo_c::DEMO_LAST_e) || (demo_mode == daPy_demo_c::DEMO_NEW_ANM0_e)"); OSReport("Ojhous"); OSReport("Orichh"); OSReport("kinBOSS"); OSReport("Xboss1"); OSReport("ICE_FAILED"); OSReport("pos"); OSReport("angle"); OSReport("prm0"); OSReport("prm1"); OSReport("stick"); OSReport("face"); OSReport("GanonM"); OSReport("sea"); OSReport("m_tex_anm_heap.m_buffer != 0"); OSReport("m_texNoAnms != 0"); OSReport("mat_anm != 0"); OSReport("m_tex_scroll_heap.m_buffer != 0"); OSReport("material_num == 2"); OSReport("m_texMtxAnm != 0"); OSReport("m_tex_eye_scroll[no] != 0"); OSReport("tmtx != 0"); OSReport("mtl->getMaterialAnm() != 0"); OSReport("tmp_modelData != 0"); OSReport("aura_p->getModel() != 0"); OSReport("m_old_fdata != 0"); OSReport("m_pbCalc[PART_UNDER_e] != 0"); OSReport("m_pbCalc[PART_UPPER_e] != 0"); OSReport("m_HIO != 0"); OSReport("m_anm_heap_under[UNDER_MOVE0_e].m_buffer != 0"); OSReport("m_sanm_buffer != 0"); OSReport("m_item_bck_buffer != 0"); OSReport("tmp_trans_bas != 0"); OSReport("tmp_trans != 0"); OSReport("tmp_tp != 0"); OSReport("tmp_tk != 0"); OSReport("*i_model != 0"); OSReport("btk_anm != 0"); OSReport("brk_anm != 0"); OSReport("zoff_blend_cnt <= 4"); OSReport("zoff_none_cnt <= 4"); OSReport("zon_cnt <= 4"); OSReport("zon_cnt == 4"); OSReport("zoff_none_cnt == 4"); OSReport("zoff_blend_cnt == 4"); OSReport("dummy_data != 0"); OSReport("Always"); OSReport("tmp_tex != 0"); OSReport("tmp_img != 0"); OSReport("texture != 0"); OSReport("textureName != 0"); OSReport("linktexS3TC"); OSReport("Pjavdou"); OSReport("ShipD"); OSReport("Siren"); OSReport("data_size < l_sanm_buffer_size"); } cXyz l_debug_keep_pos; csXyz l_debug_current_angle; csXyz l_debug_shape_angle; GXColor l_freeze_fade_color = {0xFF, 0xFF, 0xFF, 0xFF}; u8 daPy_matAnm_c::m_maba_flg; u8 daPy_matAnm_c::m_eye_move_flg; u8 daPy_matAnm_c::m_maba_timer; u8 daPy_matAnm_c::m_morf_frame; #include "d/actor/d_a_player_particle.inc" #include "d/actor/d_a_player_dproc.inc" #include "d/actor/d_a_player_ladder.inc" #include "d/actor/d_a_player_hang.inc" #include "d/actor/d_a_player_climb.inc" #include "d/actor/d_a_player_whide.inc" #include "d/actor/d_a_player_crawl.inc" #include "d/actor/d_a_player_grab.inc" #include "d/actor/d_a_player_swim.inc" #include "d/actor/d_a_player_battle.inc" #include "d/actor/d_a_player_ship.inc" #include "d/actor/d_a_player_rope.inc" #include "d/actor/d_a_player_boomerang.inc" #include "d/actor/d_a_player_bow.inc" #include "d/actor/d_a_player_hook.inc" #include "d/actor/d_a_player_fan.inc" #include "d/actor/d_a_player_tact.inc" #include "d/actor/d_a_player_vomit.inc" #include "d/actor/d_a_player_hammer.inc" #include "d/actor/d_a_player_pushpull.inc" #include "d/actor/d_a_player_bottle.inc" #include "d/actor/d_a_player_weapon.inc" #include "d/actor/d_a_player_food.inc" #include "d/actor/d_a_player_sword.inc" /* 80102E8C-80102EAC .text daPy_createHeap__FP10fopAc_ac_c */ static BOOL daPy_createHeap(fopAc_ac_c* i_this) { return static_cast(i_this)->createHeap(); } /* 80102EAC-80102F1C .text __ct__13daPy_matAnm_cFv */ daPy_matAnm_c::daPy_matAnm_c() { mEyePosOld.x = 0.0f; mEyePosOld.y = 0.0f; mEyePos.x = 0.0f; mEyePos.y = 0.0f; m_maba_flg = 0; m_eye_move_flg = 0; m_maba_timer = 0; m_morf_frame = 0; } /* 80102F64-80103074 .text calc__13daPy_matAnm_cCFP11J3DMaterial */ void daPy_matAnm_c::calc(J3DMaterial* mat) const { daPy_matAnm_c* i_this = const_cast(this); J3DMaterialAnm::calc(mat); for (u32 i = 0; i < 8; i++) { if (getTexMtxAnm(i)) { J3DTextureSRTInfo& srt = mat->getTexMtx(i)->getTexMtxInfo().mSRT; if (m_morf_frame != 0) { f32 temp = 1.0f / (m_morf_frame + 1); srt.mTranslationX = mEyePosOld.x * (1.0f - temp) + (srt.mTranslationX * temp); srt.mTranslationY = mEyePosOld.y * (1.0f - temp) + (srt.mTranslationY * temp); } else if (m_eye_move_flg != 0) { srt.mTranslationX = mEyePos.x; srt.mTranslationY = mEyePos.y; } i_this->mEyePosOld.x = srt.mTranslationX; i_this->mEyePosOld.y = srt.mTranslationY; } } } /* 80103074-801030BC .text seStartOnlyReverb__9daPy_lk_cFUl */ void daPy_lk_c::seStartOnlyReverb(u32 i_seNum) { mDoAud_seStart(i_seNum, ¤t.pos, 0, mReverb); } /* 801030BC-80103104 .text seStartMapInfo__9daPy_lk_cFUl */ void daPy_lk_c::seStartMapInfo(u32 i_seNum) { mDoAud_seStart(i_seNum, ¤t.pos, mMtrlSndId, mReverb); } /* 80103104-8010314C .text seStartSwordCut__9daPy_lk_cFUl */ void daPy_lk_c::seStartSwordCut(u32 i_seNum) { mDoAud_seStart(i_seNum, &mSwordTopPos, 0, mReverb); } /* 8010314C-801031A4 .text voiceStart__9daPy_lk_cFUl */ void daPy_lk_c::voiceStart(u32 param_1) { mDoAud_linkVoiceStart(param_1, &eyePos, mDoAud_getLinkVoiceVowel(param_1), mReverb); } /* 801031A4-801031DC .text itemButton__9daPy_lk_cCFv */ BOOL daPy_lk_c::itemButton() const { if (mReadyItemBtn == dItemBtn_X_e) { return m34C9 & 0x04; } else if (mReadyItemBtn == dItemBtn_Y_e) { return m34C9 & 0x08; } else { return m34C9 & 0x10; } } /* 801031DC-80103214 .text itemTrigger__9daPy_lk_cCFv */ BOOL daPy_lk_c::itemTrigger() const { if (mReadyItemBtn == dItemBtn_X_e) { return mPressedButtons & 0x04; } else if (mReadyItemBtn == dItemBtn_Y_e) { return mPressedButtons & 0x08; } else { return mPressedButtons & 0x10; } } /* 80103214-80103258 .text getReadyItem__9daPy_lk_cFv */ int daPy_lk_c::getReadyItem() { if (mReadyItemBtn == dItemBtn_X_e) { return dComIfGp_getSelectItem(dItemBtn_X_e); } else if (mReadyItemBtn == dItemBtn_Y_e) { return dComIfGp_getSelectItem(dItemBtn_Y_e); } else { return dComIfGp_getSelectItem(dItemBtn_Z_e); } } /* 80103258-801032E4 .text checkGroupItem__9daPy_lk_cFii */ BOOL daPy_lk_c::checkGroupItem(int param_1, int itemNo) { if (param_1 == daPyItem_DRINK_BOTTLE_e) { return checkDrinkBottleItem(itemNo); } else if (param_1 == daPyItem_OPEN_BOTTLE_e) { return checkOpenBottleItem(itemNo); } else if (param_1 == daPyItem_ESA_e) { return isEsa(itemNo); } else if (param_1 == daPyItem_BOW_e) { return checkBowItem(itemNo); } else if (param_1 == daPyItem_PHOTOBOX_e) { return checkPhotoBoxItem(itemNo); } else { return param_1 == itemNo; } } /* 801032E4-801033E4 .text checkSetItemTrigger__9daPy_lk_cFii */ BOOL daPy_lk_c::checkSetItemTrigger(int param_1, int param_2) { if (param_2 == 0 || !daPy_dmEcallBack_c::checkCurse()) { if (mPressedButtons & 0x04 && checkGroupItem(param_1, dComIfGp_getSelectItem(dItemBtn_X_e))) { mReadyItemBtn = dItemBtn_X_e; return TRUE; } if (mPressedButtons & 0x08 && checkGroupItem(param_1, dComIfGp_getSelectItem(dItemBtn_Y_e))) { mReadyItemBtn = dItemBtn_Y_e; return TRUE; } if (mPressedButtons & 0x10 && checkGroupItem(param_1, dComIfGp_getSelectItem(dItemBtn_Z_e))) { mReadyItemBtn = dItemBtn_Z_e; return TRUE; } } return FALSE; } /* 801033E4-80103450 .text auraJointCB0__9daPy_lk_cFi */ BOOL daPy_lk_c::auraJointCB0(int jntNo) { mpYmgcs00Model->setAnmMtx(jntNo, mpCLModel->getAnmMtx(jntNo)); mDoMtx_copy(mpCLModel->getAnmMtx(jntNo), j3dSys.mCurrentMtx); return TRUE; } /* 80103450-80103494 .text daPy_auraCallback__FP7J3DNodei */ static BOOL daPy_auraCallback(J3DNode* node, int param_1) { if (!param_1) { J3DJoint* joint = static_cast(node); s32 jntNo = joint->getJntNo(); J3DModel* model = j3dSys.getModel(); daPy_lk_c* i_this = reinterpret_cast(model->getUserArea()); i_this->auraJointCB0(jntNo); } return TRUE; } /* 80103494-80103A88 .text jointBeforeCB__9daPy_lk_cFiP16J3DTransformInfoP10Quaternion */ BOOL daPy_lk_c::jointBeforeCB(int, J3DTransformInfo*, Quaternion*) { /* Nonmatching */ static Mtx root_mtx; static Quaternion norm_quat = {0.0f, 0.0f, 0.0f, 1.0f}; } /* 80103A88-80103AAC .text daPy_jointBeforeCallback__FUlUsP16J3DTransformInfoP10Quaternion */ static BOOL daPy_jointBeforeCallback(u32 userArea, u16 param_1, J3DTransformInfo* param_2, Quaternion* param_3) { return reinterpret_cast(userArea)->jointBeforeCB(param_1, param_2, param_3); } /* 80103AAC-80103C1C .text jointAfterCB__9daPy_lk_cFiP16J3DTransformInfoP10Quaternion */ BOOL daPy_lk_c::jointAfterCB(int, J3DTransformInfo*, Quaternion*) { /* Nonmatching */ } /* 80103C1C-80103C40 .text daPy_jointAfterCallback__FUlUsP16J3DTransformInfoP10Quaternion */ static BOOL daPy_jointAfterCallback(u32 userArea, u16 param_1, J3DTransformInfo* param_2, Quaternion* param_3) { return reinterpret_cast(userArea)->jointAfterCB(param_1, param_2, param_3); } /* 80103C40-80103EE4 .text jointCB0__9daPy_lk_cFi */ BOOL daPy_lk_c::jointCB0(int) { /* Nonmatching */ static f32 guard_rate = 0.0f; } /* 80103EE4-80103F28 .text daPy_jointCallback0__FP7J3DNodei */ static BOOL daPy_jointCallback0(J3DNode* node, int param_1) { if (!param_1) { J3DJoint* joint = static_cast(node); s32 jntNo = joint->getJntNo(); J3DModel* model = j3dSys.getModel(); daPy_lk_c* i_this = reinterpret_cast(model->getUserArea()); i_this->jointCB0(jntNo); } return TRUE; } /* 80103F28-80104178 .text jointCB1__9daPy_lk_cFv */ BOOL daPy_lk_c::jointCB1() { /* Nonmatching */ } /* 80104178-801041B4 .text daPy_jointCallback1__FP7J3DNodei */ static BOOL daPy_jointCallback1(J3DNode* node, int param_1) { if (!param_1) { J3DModel* model = j3dSys.getModel(); daPy_lk_c* i_this = reinterpret_cast(model->getUserArea()); i_this->jointCB1(); } return TRUE; } static mDoExt_offCupOnAupPacket l_offCupOnAupPacket1; static mDoExt_offCupOnAupPacket l_offCupOnAupPacket2; static mDoExt_onCupOffAupPacket l_onCupOffAupPacket1; static mDoExt_onCupOffAupPacket l_onCupOffAupPacket2; /* 801041B4-801041EC .text setAnimeHeap__9daPy_lk_cFP12JKRSolidHeap */ JKRHeap* daPy_lk_c::setAnimeHeap(JKRSolidHeap* animeHeap) { animeHeap->freeAll(); return mDoExt_setCurrentHeap(animeHeap); } /* 801041EC-80104240 .text setItemHeap__9daPy_lk_cFv */ JKRHeap* daPy_lk_c::setItemHeap() { if (!checkResetFlg0(daPyRFlg0_UNK4000)) { mCurrItemHeapIdx ^= 1; onResetFlg0(daPyRFlg0_UNK4000); } return setAnimeHeap(mpItemHeaps[mCurrItemHeapIdx]); } /* 80104240-80104280 .text setBlurPosResource__9daPy_lk_cFUs */ void daPy_lk_c::setBlurPosResource(u16 index) { JKRReadIdxResource(mSwBlur.mpPosBuffer, 0x4800, index, dComIfGp_getAnmArchive()); } /* 80104280-80104364 .text getItemAnimeResource__9daPy_lk_cFUs */ J3DAnmTransform* daPy_lk_c::getItemAnimeResource(u16 index) { JKRReadIdxResource(m_item_bck_buffer, 0x1000, index, dComIfGp_getAnmArchive()); JKRHeap* oldHeap = setAnimeHeap(mpItemAnimeHeap); mDoExt_transAnmBas* bas = new mDoExt_transAnmBas(NULL); J3DAnmLoaderDataBase::setResource(bas, m_item_bck_buffer); mDoExt_setCurrentHeap(oldHeap); return bas; } /* 80104364-801043F0 .text getAnimeResource__9daPy_lk_cFP14daPy_anmHeap_cUsUl */ J3DAnmTransform* daPy_lk_c::getAnimeResource(daPy_anmHeap_c* anmHeap, u16 index, u32 bufferSize) { J3DAnmTransform* bck; JKRReadIdxResource(anmHeap->m_buffer, bufferSize, index, dComIfGp_getAnmArchive()); JKRHeap* oldHeap = setAnimeHeap(anmHeap->mpAnimeHeap); bck = static_cast(J3DAnmLoaderDataBase::load(anmHeap->m_buffer)); mDoExt_setCurrentHeap(oldHeap); anmHeap->mIdx = index; anmHeap->field_0x2 = -1; return bck; } /* 801043F0-801044E8 .text getUnderUpperAnime__9daPy_lk_cFPC15daPy_anmIndex_cPP15J3DAnmTransformPP15J3DAnmTransformiUl */ void daPy_lk_c::getUnderUpperAnime(const daPy_anmIndex_c* anmIndex, J3DAnmTransform** pUnderBck, J3DAnmTransform** pUpperBck, int r7, u32 bufferSize) { if (m_anm_heap_under[r7].mIdx != anmIndex->mUnderBckIdx) { *pUnderBck = getAnimeResource(&m_anm_heap_under[r7], anmIndex->mUnderBckIdx, bufferSize); } else { *pUnderBck = getNowAnmPackUnder((daPy_UNDER)r7); } if (anmIndex->mUnderBckIdx != anmIndex->mUpperBckIdx) { if (bufferSize == 0xB400) { bufferSize = 0x4800; } if (m_anm_heap_upper[r7].mIdx != anmIndex->mUpperBckIdx) { *pUpperBck = getAnimeResource(&m_anm_heap_upper[r7], anmIndex->mUpperBckIdx, bufferSize); } else { *pUpperBck = getNowAnmPackUpper((daPy_UPPER)r7); } } else { *pUpperBck = NULL; m_anm_heap_upper[r7].mIdx = -1; } } /* 801044E8-80104564 .text setTextureAnimeResource__9daPy_lk_cFP16J3DAnmTexPatterni */ void daPy_lk_c::setTextureAnimeResource(J3DAnmTexPattern* btp, int r31) { btp->searchUpdateMaterialID(mpCLModelData); mpAnmTexPatternData = btp; m3530 = r31; u16 material_num = btp->getUpdateMaterialNum(); for (u16 i = 0; i < material_num; i++) { m_texNoAnms[i].setAnmTexPattern(btp); } } /* 80104564-80104600 .text loadTextureAnimeResource__9daPy_lk_cFUli */ J3DAnmTexPattern* daPy_lk_c::loadTextureAnimeResource(u32 btpIdx, BOOL isDemo) { J3DAnmTexPattern* btp; if (isDemo) { JKRReadResource(m_tex_anm_heap.m_buffer, 0x1000, btpIdx, dComIfGp_getLkDemoAnmArchive()); } else { JKRReadIdxResource(m_tex_anm_heap.m_buffer, 0x1000, btpIdx, dComIfGp_getAnmArchive()); } JKRHeap* oldHeap = setAnimeHeap(m_tex_anm_heap.mpAnimeHeap); btp = static_cast(J3DAnmLoaderDataBase::load(m_tex_anm_heap.m_buffer)); mDoExt_setCurrentHeap(oldHeap); return btp; } /* 80104600-801046CC .text checkBossBgm__9daPy_lk_cFv */ BOOL daPy_lk_c::checkBossBgm() { u32 mainBgm = mDoAud_checkPlayingMainBgmFlag(); u32 subBgm = mDoAud_checkPlayingSubBgmFlag(); if (mainBgm == JA_BGM_GOMA || mainBgm == JA_BGM_GOMA_2 || mainBgm == JA_BGM_KINDAN_BOSS || mainBgm == JA_BGM_DK_BATTLE || mainBgm == JA_BGM_MJ_TOWER_BATTLE || mainBgm == JA_BGM_BST_BATTLE || mainBgm == JA_BGM_RANE_BATTLE || mainBgm == JA_BGM_PAST_GOMA_2 || mainBgm == JA_BGM_BIG_POW || mainBgm == JA_BGM_PAST_BIG_POW || mainBgm == JA_BGM_PAST_BKM || mainBgm == JA_BGM_PAST_GOMA || mainBgm == JA_BGM_PAST_RANE || mainBgm == JA_BGM_GANON_BATTLE || mainBgm == JA_BGM_BGN_KUGUTSU || mainBgm == JA_BGM_BGN_TARABA || mainBgm == JA_BGM_BGN_HAYAMUSHI || subBgm == JA_BGM_MBOSS || subBgm == JA_BGM_MBOSS_S || subBgm == JA_BGM_P_GANON_1 || subBgm == JA_BGM_P_GANON_2 || subBgm == JA_BGM_DIOCTA_BATTLE || subBgm == JA_BGM_DIOCTA_2) { return TRUE; } else { return FALSE; } } /* 801046CC-801046EC .text checkMabaAnimeBtp__9daPy_lk_cFi */ BOOL daPy_lk_c::checkMabaAnimeBtp(int anmIdx) { if (anmIdx >= LKANM_BTP_TMABAA && anmIdx <= LKANM_BTP_TMABAJ) { return TRUE; } return FALSE; } /* 801046EC-80104A08 .text checkNormalFace__9daPy_lk_cFv */ BOOL daPy_lk_c::checkNormalFace() { /* Nonmatching */ } /* 80104A08-80104E08 .text setTextureAnime__9daPy_lk_cFUsi */ void daPy_lk_c::setTextureAnime(u16, int) { /* Nonmatching */ } /* 80104E08-80104EC8 .text setPriTextureAnime__9daPy_lk_cFUsi */ void daPy_lk_c::setPriTextureAnime(u16 r4, int r30) { u16 btpIdx = mTexAnmIndexTable[r4].mBtpIdx; u16 btkIdx = mTexAnmIndexTable[r4].mBtkIdx; if (m_tex_anm_heap.field_0x2 != btpIdx) { m_tex_anm_heap.field_0x2 = btpIdx; if (m_tex_anm_heap.field_0x4 == 0xFFFF) { setTextureAnimeResource(loadTextureAnimeResource(btpIdx, FALSE), r30); } } if (m_tex_scroll_heap.field_0x2 != btkIdx) { m_tex_scroll_heap.field_0x2 = btkIdx; if (m_tex_scroll_heap.field_0x4 == 0xFFFF) { setTextureScrollResource(loadTextureScrollResource(btkIdx, FALSE), r30); } } } /* 80104EC8-80104F74 .text resetPriTextureAnime__9daPy_lk_cFv */ void daPy_lk_c::resetPriTextureAnime() { if (m_tex_anm_heap.field_0x2 != 0xFFFF) { m_tex_anm_heap.field_0x2 = 0xFFFF; if (m_tex_anm_heap.field_0x4 == 0xFFFF) { setTextureAnimeResource(loadTextureAnimeResource(m_tex_anm_heap.mIdx, FALSE), 0); } } if (m_tex_scroll_heap.field_0x2 != 0xFFFF) { m_tex_scroll_heap.field_0x2 = 0xFFFF; if (m_tex_scroll_heap.field_0x4 == 0xFFFF) { setTextureScrollResource(loadTextureScrollResource(m_tex_scroll_heap.mIdx, FALSE), 0); } } } /* 80104F74-80105040 .text setDemoTextureAnime__9daPy_lk_cFUsUsiUs */ void daPy_lk_c::setDemoTextureAnime(u16 btpIdx, u16 btkIdx, int r30, u16 r31) { if (m_tex_anm_heap.field_0x4 != btpIdx || m_tex_anm_heap.field_0x6 != r31) { m_tex_anm_heap.field_0x4 = btpIdx; m_tex_anm_heap.field_0x6 = r31; setTextureAnimeResource(loadTextureAnimeResource(btpIdx, TRUE), r30); } if (m_tex_scroll_heap.field_0x4 != btkIdx || m_tex_scroll_heap.field_0x6 != r31) { m_tex_scroll_heap.field_0x4 = btkIdx; m_tex_scroll_heap.field_0x6 = r31; setTextureScrollResource(loadTextureScrollResource(btkIdx, TRUE), r30); } } /* 80105040-80105164 .text resetDemoTextureAnime__9daPy_lk_cFv */ void daPy_lk_c::resetDemoTextureAnime() { /* Nonmatching */ } /* 80105164-80105220 .text setTextureScrollResource__9daPy_lk_cFP19J3DAnmTextureSRTKeyi */ void daPy_lk_c::setTextureScrollResource(J3DAnmTextureSRTKey* btk, int r31) { btk->searchUpdateMaterialID(mpCLModelData); mpTexScrollResData = btk; m3532 = r31; u16 material_num = btk->getUpdateMaterialNum(); for (u16 i = 0; i < material_num; i++) { m_texMtxAnm[i].setAnmTransform(btk); } daPy_matAnm_c::setMorfFrame(3); daPy_matAnm_c::offMabaFlg(); daPy_matAnm_c::setMabaTimer(1); daPy_matAnm_c::setMabaTimer(75.0f + cM_rndF(30.0f)); } /* 80105220-801052BC .text loadTextureScrollResource__9daPy_lk_cFUli */ J3DAnmTextureSRTKey* daPy_lk_c::loadTextureScrollResource(u32 btkIdx, BOOL isDemo) { J3DAnmTextureSRTKey* btk; if (isDemo) { JKRReadResource(m_tex_scroll_heap.m_buffer, 0x800, btkIdx, dComIfGp_getLkDemoAnmArchive()); } else { JKRReadIdxResource(m_tex_scroll_heap.m_buffer, 0x800, btkIdx, dComIfGp_getAnmArchive()); } JKRHeap* oldHeap = setAnimeHeap(m_tex_scroll_heap.mpAnimeHeap); btk = static_cast(J3DAnmLoaderDataBase::load(m_tex_scroll_heap.m_buffer)); mDoExt_setCurrentHeap(oldHeap); return btk; } /* 801052BC-8010552C .text playTextureAnime__9daPy_lk_cFv */ void daPy_lk_c::playTextureAnime() { /* Nonmatching */ } /* 8010552C-8010558C .text checkPlayerGuard__9daPy_lk_cCFv */ BOOL daPy_lk_c::checkPlayerGuard() const { /* Nonmatching */ bool guard = false; if (mCurProc == daPyProc_CROUCH_DEFENSE_e || checkUpperGuardAnime() || checkGuardSlip()) { guard = true; } return guard; } /* 8010558C-801056E4 .text setOutPower__9daPy_lk_cFfsi */ void daPy_lk_c::setOutPower(f32, s16, int) { /* Nonmatching */ } /* 801056E4-80105814 .text checkSightLine__9daPy_lk_cFfP4cXyz */ BOOL daPy_lk_c::checkSightLine(f32, cXyz*) { /* Nonmatching */ } /* 80105814-80105910 .text setBootsModel__9daPy_lk_cFPP8J3DModel */ void daPy_lk_c::setBootsModel(J3DModel** pBootModels) { u16 bootsJointIdx; if (checkEquipHeavyBoots()) { // TODO: add enum for link's joint numbers pBootModels[0]->setAnmMtx(0x01, mpCLModel->getAnmMtx(0x26)); // RlegB_jnt joint pBootModels[1]->setAnmMtx(0x01, mpCLModel->getAnmMtx(0x21)); // LlegB_jnt joint bootsJointIdx = 2; } else { bootsJointIdx = 1; } J3DModel* bootModel = pBootModels[0]; bootModel->setAnmMtx(bootsJointIdx, mpCLModel->getAnmMtx(0x28)); // Rtoe_jnt joint bootModel->setAnmMtx(bootsJointIdx+1, mpCLModel->getAnmMtx(0x27)); // Rfoot_jnt joint bootModel = pBootModels[1]; bootModel->setAnmMtx(bootsJointIdx, mpCLModel->getAnmMtx(0x23)); // Ltoe_jnt joint bootModel->setAnmMtx(bootsJointIdx+1, mpCLModel->getAnmMtx(0x22)); // Lfoot_jnt joint } /* 80105910-80106660 .text setItemModel__9daPy_lk_cFv */ void daPy_lk_c::setItemModel() { /* Nonmatching */ } /* 80106660-801066DC .text checkUpperReadyAnime__9daPy_lk_cCFv */ BOOL daPy_lk_c::checkUpperReadyAnime() const { /* Nonmatching */ } /* 801066DC-80106750 .text checkUpperReadyThrowAnime__9daPy_lk_cCFv */ BOOL daPy_lk_c::checkUpperReadyThrowAnime() const { /* Nonmatching */ } /* 80106750-801067D8 .text checkNoCollisionCorret__9daPy_lk_cFv */ BOOL daPy_lk_c::checkNoCollisionCorret() { /* Nonmatching */ } /* 801067D8-80106BD0 .text setDrawHandModel__9daPy_lk_cFv */ void daPy_lk_c::setDrawHandModel() { /* Nonmatching */ } /* 80106BD0-80106C40 .text entryDLSetLight__9daPy_lk_cFP8J3DModelUl */ void daPy_lk_c::entryDLSetLight(J3DModel* model, u32 param_2) { g_env_light.setLightTevColorType(model, &tevStr); if (param_2 != 0) { dMat_control_c::iceEntryDL(model, -1, NULL); } else { mDoExt_modelEntryDL(model); } } /* 80106C40-80106CB0 .text updateDLSetLight__9daPy_lk_cFP8J3DModelUl */ void daPy_lk_c::updateDLSetLight(J3DModel* model, u32 param_2) { g_env_light.setLightTevColorType(model, &tevStr); if (param_2 != 0) { dMat_control_c::iceUpdateDL(model, -1, NULL); } else { mDoExt_modelUpdateDL(model); } } /* 80106CB0-80106D8C .text hideHatAndBackle__9daPy_lk_cFP11J3DMaterial */ void daPy_lk_c::hideHatAndBackle(J3DMaterial*) { /* Nonmatching */ } /* 80106D8C-80106E50 .text drawMirrorLightModel__9daPy_lk_cFv */ void daPy_lk_c::drawMirrorLightModel() { /* Nonmatching */ } /* 80106E50-80107210 .text drawShadow__9daPy_lk_cFv */ void daPy_lk_c::drawShadow() { /* Nonmatching */ } /* 80107210-8010728C .text offBodyEffect__9daPy_lk_cFv */ void daPy_lk_c::offBodyEffect() { /* Nonmatching */ } /* 8010728C-80107308 .text onBodyEffect__9daPy_lk_cFv */ void daPy_lk_c::onBodyEffect() { /* Nonmatching */ } /* 80107308-80108204 .text draw__9daPy_lk_cFv */ BOOL daPy_lk_c::draw() { /* Nonmatching - regalloc (maybe the same issue as linkDraw in d_a_obj_figure.cpp?) */ if (mSightPacket.getDrawFlg()) { mSightPacket.setSight(); } g_env_light.settingTevStruct(TEV_TYPE_PLAYER, ¤t.pos, &tevStr); if (checkPlayerNoDraw()) { offBodyEffect(); drawMirrorLightModel(); return TRUE; } if (dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x20)) { offBodyEffect(); } else { onBodyEffect(); } s16 origFogR, origFogG, origFogB; f32 origFogStartZ, origFogEndZ; origFogR = tevStr.mFogColor.r; origFogG = tevStr.mFogColor.g; origFogB = tevStr.mFogColor.b; origFogStartZ = tevStr.mFogStartZ; origFogEndZ = tevStr.mFogEndZ; if (!checkFreezeState() && mCurProc != daPyProc_ELEC_DAMAGE_e && (daPy_dmEcallBack_c::checkCurse() || checkConfuse() || mDamageWaitTimer > 0) ) { cXyz sp18; mDoLib_pos2camera(¤t.pos, &sp18); f32 f2 = std::abs(cM_ssin(g_Counter.mTimer * 0x800)); if (daPy_dmEcallBack_c::checkCurse() || checkConfuse()) { tevStr.mFogColor.r = 0x80; tevStr.mFogColor.g = 0x00; tevStr.mFogColor.b = 0xFF; } else { tevStr.mFogColor.r = 0xFF; tevStr.mFogColor.g = 0x3C; tevStr.mFogColor.b = 0x3C; } tevStr.mFogStartZ = -sp18.z - 200.0f + 200.0f * f2; tevStr.mFogEndZ = tevStr.mFogStartZ + 300.0f; } u16 material_num = mpAnmTexPatternData->getUpdateMaterialNum(); for (u16 i = 0; i < material_num; i++) { u16 matID = mpAnmTexPatternData->getUpdateMaterialID(i); if (matID != 0xFFFF) { J3DMaterial* mtl = mpCLModelData->getMaterialNodePointer(matID); J3DMaterialAnm* mtlAnm = mtl->getMaterialAnm(); u8 texNo = mpAnmTexPatternData->getAnmTable()[i].mTexNo; mtlAnm->setTexNoAnm(texNo, &m_texNoAnms[i]); if (matID != 0xE) { // Not mouth (i.e. it's eyeL, eyeR, mayuL, or mayuR) mtl = mpCLModelData->getMaterialNodePointer(matID+1); mtlAnm = mtl->getMaterialAnm(); mtlAnm->setTexNoAnm(texNo, &m_texNoAnms[i]); } } } mpCLModelData->setTexMtxAnimator(mpTexScrollResData, m_texMtxAnm, NULL); mpAnmTexPatternData->setFrame(m3530); mpTexScrollResData->setFrame(m3532); g_env_light.setLightTevColorType(mpCLModel, &tevStr); J3DJoint* link_root_joint = mpCLModelData->getJointNodePointer(0x00); // link_root joint mpCLModelData->getJointNodePointer(0x08)->getMesh()->getShape()->hide(); // cl_LhandA joint mpCLModelData->getJointNodePointer(0x0C)->getMesh()->getShape()->hide(); // cl_RhandA joint J3DMaterial* mtl = link_root_joint->getMesh(); for (int i = 0; i < 4; i++) { mtl = mtl->getNext(); } mtl->getShape()->show(); J3DJoint* cl_eye_joint = mpCLModelData->getJointNodePointer(0x13); // cl_eye joint J3DJoint* cl_mayu_joint = mpCLModelData->getJointNodePointer(0x15); // cl_mayu joint setDrawHandModel(); j3dSys.setModel(mpCLModel); j3dSys.setTexture(mpCLModelData->getTexture()); j3dSys.getModel()->unlock(); BOOL r24 = field_0x2b0 <= -85.0f; if (r24) { for (int i = 0; i < ARRAY_SIZE(mpZOffBlendShape); i++) { mpZOffBlendShape[i]->hide(); mpZOffNoneShape[i]->hide(); mpZOnShape[i]->hide(); } mpCLModelData->getJointNodePointer(0x08)->getMesh()->getShape()->hide(); // cl_LhandA joint mpCLModelData->getJointNodePointer(0x0C)->getMesh()->getShape()->hide(); // cl_RhandA joint mtl = link_root_joint->getMesh(); for (int i = 0; mtl != NULL; i++, mtl = mtl->getNext()) { if (i != 3) { mtl->getShape()->hide(); } else { mtl->getShape()->show(); } } } else if (dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x20)) { for (int i = 0; i < ARRAY_SIZE(mpZOffBlendShape); i++) { mpZOffBlendShape[i]->hide(); mpZOffNoneShape[i]->hide(); mpZOnShape[i]->hide(); } mtl = link_root_joint->getMesh(); for (int i = 0; mtl != NULL; i++, mtl = mtl->getNext()) { if (i != 0 && i != 3) { mtl->getShape()->hide(); } else { mtl->getShape()->show(); } } mpCLModelData->getJointNodePointer(0x14)->getMesh()->getShape()->hide(); // cl_hana joint } else { if (!checkFreezeState()) { dComIfGd_setListP0(); l_onCupOffAupPacket2.entryOpa(); for (int i = 0; i < ARRAY_SIZE(mpZOffBlendShape); i++) { mpZOffBlendShape[i]->hide(); mpZOnShape[i]->hide(); mpZOffNoneShape[i]->show(); } cl_eye_joint->entryIn(); cl_mayu_joint->entryIn(); l_offCupOnAupPacket2.entryOpa(); for (int i = 0; i < ARRAY_SIZE(mpZOffBlendShape); i++) { mpZOffBlendShape[i]->show(); mpZOffNoneShape[i]->hide(); } cl_eye_joint->entryIn(); cl_mayu_joint->entryIn(); mtl = link_root_joint->getMesh(); for (int i = 0; mtl != NULL; i++, mtl = mtl->getNext()) { if (i != 2 && i != 5) { mtl->getShape()->hide(); } } link_root_joint->entryIn(); if (checkMaskDraw()) { entryDLSetLight(mpYamuModel, mNoResetFlg1 & daPyFlg1_FREEZE_STATE); } j3dSys.setModel(mpCLModel); j3dSys.setTexture(mpCLModelData->getTexture()); hideHatAndBackle(link_root_joint->getMesh()); l_onCupOffAupPacket1.entryOpa(); for (int i = 0; i < ARRAY_SIZE(mpZOffBlendShape); i++) { mpZOffBlendShape[i]->hide(); mpZOnShape[i]->show(); mpZOffNoneShape[i]->hide(); } cl_eye_joint->entryIn(); cl_mayu_joint->entryIn(); l_offCupOnAupPacket1.entryOpa(); for (int i = 0; i < ARRAY_SIZE(mpZOffBlendShape); i++) { mpZOnShape[i]->hide(); } } else { hideHatAndBackle(link_root_joint->getMesh()); } if (!checkNormalSwordEquip() && dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) != dStageType_FF1_e || checkCaughtShapeHide() || checkDemoShieldNoDraw()) { mpCLModelData->getJointNodePointer(0x0D)->getMesh()->getShape()->hide(); // cl_podA joint } else { mpCLModelData->getJointNodePointer(0x0D)->getMesh()->getShape()->show(); // cl_podA joint } } // regalloc issues with j3dSys from here on dComIfGd_setListP1(); if (checkFreezeState()) { dMat_control_c::iceEntryDL(mpCLModel, -1, NULL); } else { mDoExt_modelEntryDL(mpCLModel); } mtl = link_root_joint->getMesh(); while (mtl != NULL) { mtl->getShape()->show(); mtl = mtl->getNext(); } mpCLModelData->getJointNodePointer(0x14)->getMesh()->getShape()->show(); // cl_hana joint mpCLModelData->getJointNodePointer(0x29)->getMesh()->getShape()->show(); // cl_back joint if (!r24) { entryDLSetLight(mpHandsModel, mNoResetFlg1 & daPyFlg1_FREEZE_STATE); if (checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES) && !checkCaughtShapeHide() && !dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x20)) { entryDLSetLight(mpKatsuraModel, mNoResetFlg1 & daPyFlg1_FREEZE_STATE); } if (checkFreezeState() && checkMaskDraw()) { entryDLSetLight(mpYamuModel, mNoResetFlg1 & daPyFlg1_FREEZE_STATE); } if (dComIfGs_getSelectEquip(2) == PWR_GROOVE) { entryDLSetLight(mpPringModel, mNoResetFlg1 & daPyFlg1_FREEZE_STATE); } if (checkMasterSwordEquip() && !checkCaughtShapeHide() && !checkDemoShieldNoDraw()) { updateDLSetLight(mpPodmsModel, mNoResetFlg1 & daPyFlg1_FREEZE_STATE); } } if (checkEquipHeavyBoots()) { entryDLSetLight(mpHbootsModels[0], mNoResetFlg1 & daPyFlg1_FREEZE_STATE); entryDLSetLight(mpHbootsModels[1], mNoResetFlg1 & daPyFlg1_FREEZE_STATE); } tevStr.mFogColor.r = origFogR; tevStr.mFogColor.g = origFogG; tevStr.mFogColor.b = origFogB; tevStr.mFogStartZ = origFogStartZ; tevStr.mFogEndZ = origFogEndZ; if (!r24) { if (mCurProc == daPyProc_CUT_F_e || mCurProc == daPyProc_BT_VERTICAL_JUMP_CUT_e) { updateDLSetLight(mpSwordTipStabModel, 0); } else if (checkModeFlg(ModeFlg_SWIM) && checkNoResetFlg0(daPyFlg0_UNK100) && !(mCurProc == daPyProc_DEMO_DEAD_e && m34D6 == 0)) { GXColor spc; GXColor sp8; dKy_get_seacolor(&spc, &sp8); J3DGXColorS10 sp10; sp10.mColor.r = spc.r; sp10.mColor.g = spc.g; sp10.mColor.b = spc.b; int matID = mpSuimenMunyaModel->getModelData()->getMaterialNum() - 1; for (; matID >= 0; matID--) { mpSuimenMunyaModel->getModelData()->getMaterialNodePointer(matID)->setTevColor(0, &sp10); } mDoExt_modelUpdateDL(mpSuimenMunyaModel); } if (!r24 && !dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x20)) { if (checkSwordEquip() && !checkDemoSwordNoDraw(1)) { entryDLSetLight(mpEquippedSwordModel, mNoResetFlg1 & daPyFlg1_FREEZE_STATE); } } if (dComIfGs_getSelectEquip(1) != dItem_NONE_e && !checkCaughtShapeHide() && !checkDemoShieldNoDraw()) { entryDLSetLight(mpEquippedShieldModel, mNoResetFlg1 & daPyFlg1_FREEZE_STATE); } dComIfGd_setList(); drawMirrorLightModel(); dComIfGd_setListP1(); if (mpBottleContentsModel != NULL) { updateDLSetLight(mpBottleContentsModel, 0); } if (mpEquipItemModel && !checkCaughtShapeHide() && !checkDemoSwordNoDraw(0)) { if (!checkBowItem(mEquipItem) || !checkPlayerGuard()) { if (mEquipItem == dItem_HOOKSHOT_e) { if (mActorKeepEquip.getActor()) { daHookshot_c* hookshot = (daHookshot_c*)mActorKeepEquip.getActor(); mpEquipItemModel->setAnmMtx(4, hookshot->getMtxTop()); } } entryDLSetLight(mpEquipItemModel, mNoResetFlg1 & daPyFlg1_FREEZE_STATE); if (mpSwordModel1 != NULL) { if (checkChanceMode() || checkNoResetFlg1(daPyFlg1_UNK8000) || dComIfGs_getSelectEquip(0) == MASTER_SWORD_EX) { updateDLSetLight(mpSwordModel1, 0); } } } } if (mpBottleCapModel != NULL && m355E != 0) { updateDLSetLight(mpBottleCapModel, 0); } if (!dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x20)) { f32 frame = mYaura00rBrk.getBrkAnm()->getFrame(); if (frame > 0.0f) { daPy_aura_c* auraEntry = &mMagicArmorAuraEntries[0]; mYaura00rBrk.entry(auraEntry->getModel()->getModelData(), frame); for (int i = 0; i < (s32)ARRAY_SIZE(mMagicArmorAuraEntries); i++, auraEntry++) { mpYaura00Btk->setFrame(auraEntry->getFrame()); updateDLSetLight(auraEntry->getModel(), 0); } } frame = mYmgcs00Brk.getBrkAnm()->getFrame(); if (frame > 0.0f) { mYmgcs00Brk.entry(mpYmgcs00Model->getModelData(), frame); mDoExt_modelEntryDL(mpYmgcs00Model); } } } if (fanWindEffectDraw()) { updateDLSetLight(mpYuchw00Model, 0); } if (fanWindCrashEffectDraw()) { updateDLSetLight(mpYbafo00Model, 0); } dComIfGd_setList(); if (mCurProc != daPyProc_DEMO_CAUGHT_e && !dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { drawShadow(); } if (mSwBlur.field_0x014 > 0) { dComIfGd_entryZSortXluList(&mSwBlur, mSwBlur.field_0x304[0]); } return TRUE; } /* 80108204-80108224 .text daPy_Draw__FP9daPy_lk_c */ static BOOL daPy_Draw(daPy_lk_c* i_this) { return static_cast(i_this)->draw(); } /* 80108224-8010841C .text setAtnList__9daPy_lk_cFv */ void daPy_lk_c::setAtnList() { /* Nonmatching */ } /* 8010841C-8010848C .text setActor__16daPy_actorKeep_cFv */ void daPy_actorKeep_c::setActor() { if (mID != fpcM_ERROR_PROCESS_ID_e) { mActor = fopAcM_SearchByID(mID); if (mActor == NULL) { mID = fpcM_ERROR_PROCESS_ID_e; } } else { mActor = NULL; } } /* 8010848C-801084AC .text setData__16daPy_actorKeep_cFP10fopAc_ac_c */ void daPy_actorKeep_c::setData(fopAc_ac_c* actor) { mActor = actor; mID = fopAcM_GetID(actor); } /* 801084AC-801084C0 .text clearData__16daPy_actorKeep_cFv */ void daPy_actorKeep_c::clearData() { mID = fpcM_ERROR_PROCESS_ID_e; mActor = NULL; } /* 801084C0-80108564 .text setActorPointer__9daPy_lk_cFv */ void daPy_lk_c::setActorPointer() { mActorKeepRope.setActor(); mActorKeepGrab.setActor(); mActorKeepThrow.setActor(); mActorKeepEquip.setActor(); if (mEquipItem == daPyItem_BOKO_e) { fopAc_ac_c* actor = mActorKeepEquip.getActor(); if (actor == NULL || !fopAcM_checkCarryNow(actor)) { mActorKeepEquip.clearData(); mEquipItem = daPyItem_NONE_e; } } if (m3630 != fpcM_ERROR_PROCESS_ID_e) { fopAc_ac_c* sp8; if (!fopAcM_SearchByID(m3630, &sp8)) { m3630 = fpcM_ERROR_PROCESS_ID_e; } } } /* 80108564-80108634 .text setTalkStatus__9daPy_lk_cFv */ void daPy_lk_c::setTalkStatus() { /* Nonmatching */ } /* 80108634-801086C8 .text setHintActor__9daPy_lk_cFv */ void daPy_lk_c::setHintActor() { /* Nonmatching */ } /* 801086C8-801088E8 .text setDoStatusBasic__9daPy_lk_cFv */ void daPy_lk_c::setDoStatusBasic() { /* Nonmatching */ } /* 801088E8-80108A9C .text setDoStatus__9daPy_lk_cFv */ void daPy_lk_c::setDoStatus() { /* Nonmatching */ } /* 80108A9C-80108B08 .text getDirectionFromAngle__9daPy_lk_cFs */ int daPy_lk_c::getDirectionFromAngle(s16 angle) { if (abs(angle) > 0x6000) { return 1; } else if (angle >= 0x2000) { return 2; } else if (angle <= -0x2000) { return 3; } else { return 0; } } /* 80108B08-80108B38 .text getDirectionFromShapeAngle__9daPy_lk_cFv */ int daPy_lk_c::getDirectionFromShapeAngle() { return getDirectionFromAngle(m34E8 - shape_angle.y); } /* 80108B38-80108B68 .text getDirectionFromCurrentAngle__9daPy_lk_cFv */ int daPy_lk_c::getDirectionFromCurrentAngle() { return getDirectionFromAngle(m34E8 - current.angle.y); } /* 80108B68-80108D80 .text setNormalSpeedF__9daPy_lk_cFffff */ void daPy_lk_c::setNormalSpeedF(f32, f32, f32, f32) { /* Nonmatching */ } /* 80108D80-8010959C .text posMoveFromFootPos__9daPy_lk_cFv */ void daPy_lk_c::posMoveFromFootPos() { /* Nonmatching */ static const Vec rtoe_pos_offset = {-14.05f, 0.0f, 5.02f}; static const Vec rheel_pos_offset = {-10.85f, 0.0f, -6.52f}; } /* 8010959C-80109E80 .text posMove__9daPy_lk_cFv */ void daPy_lk_c::posMove() { /* Nonmatching */ } /* 80109E80-80109ED8 .text setShapeAngleToAtnActor__9daPy_lk_cFv */ void daPy_lk_c::setShapeAngleToAtnActor() { if (mpAttnActorLockOn != NULL) { s16 targetAngle = cLib_targetAngleY(¤t.pos, &mpAttnActorLockOn->eyePos); cLib_addCalcAngleS(&shape_angle.y, targetAngle, 2, 0x2000, 0x800); } } /* 80109ED8-80109F4C .text cancelItemUpperReadyAnime__9daPy_lk_cFv */ void daPy_lk_c::cancelItemUpperReadyAnime() { /* Nonmatching */ } /* 80109F4C-8010A204 .text checkBodyAngleX__9daPy_lk_cFs */ BOOL daPy_lk_c::checkBodyAngleX(s16) { /* Nonmatching */ static Vec top_vec = {0.0f, 70.0f, 0.0f}; } /* 8010A204-8010A2F4 .text setBodyAngleToCamera__9daPy_lk_cFv */ BOOL daPy_lk_c::setBodyAngleToCamera() { /* Nonmatching */ } /* 8010A2F4-8010A4D4 .text setBodyAngleXReadyAnime__9daPy_lk_cFv */ void daPy_lk_c::setBodyAngleXReadyAnime() { /* Nonmatching */ } /* 8010A4D4-8010A96C .text setSpeedAndAngleNormal__9daPy_lk_cFs */ void daPy_lk_c::setSpeedAndAngleNormal(s16) { /* Nonmatching */ } /* 8010A96C-8010AA90 .text setSpeedAndAngleAtn__9daPy_lk_cFv */ void daPy_lk_c::setSpeedAndAngleAtn() { /* Nonmatching */ } /* 8010AA90-8010AB84 .text setSpeedAndAngleAtnBack__9daPy_lk_cFv */ void daPy_lk_c::setSpeedAndAngleAtnBack() { f32 f1; if (m35B0 > 0.05f) { if (getDirectionFromCurrentAngle() == 1) { current.angle.y += 0x8000; mVelocity *= -1.0f; } s16 origAngleY = current.angle.y; cLib_addCalcAngleS( ¤t.angle.y, m34E8, daPy_HIO_atnMoveB_c0::m.field_0x4, daPy_HIO_atnMoveB_c0::m.field_0x0, daPy_HIO_atnMoveB_c0::m.field_0x2 ); f1 = (daPy_HIO_atnMoveB_c0::m.field_0x8 * m35B0) * cM_scos(current.angle.y - origAngleY); } else { f1 = 0.0f; } shape_angle.y = m34E6; setNormalSpeedF( f1, daPy_HIO_atnMoveB_c0::m.field_0x18, daPy_HIO_atnMoveB_c0::m.field_0x10, daPy_HIO_atnMoveB_c0::m.field_0x14 ); } /* 8010AB84-8010AC8C .text setSpeedAndAngleAtnActor__9daPy_lk_cFv */ void daPy_lk_c::setSpeedAndAngleAtnActor() { /* Nonmatching */ } /* 8010AC8C-8010ACEC .text setFrameCtrl__9daPy_lk_cFP12J3DFrameCtrlUcssff */ void daPy_lk_c::setFrameCtrl(J3DFrameCtrl* frameCtrl, u8 attribute, s16 start, s16 end, f32 rate, f32 frame) { frameCtrl->setAttribute(attribute); frameCtrl->setEnd(end); frameCtrl->setRate(rate); frameCtrl->setStart(start); frameCtrl->setFrame(frame); if (rate >= 0.0f) { frameCtrl->setLoop(start); } else { frameCtrl->setLoop(end); } } /* 8010ACEC-8010AD2C .text checkAtnWaitAnime__9daPy_lk_cFv */ BOOL daPy_lk_c::checkAtnWaitAnime() { /* Nonmatching */ } /* 8010AD2C-8010B798 .text setBlendMoveAnime__9daPy_lk_cFf */ void daPy_lk_c::setBlendMoveAnime(f32) { /* Nonmatching */ } /* 8010B798-8010BB08 .text setBlendAtnBackMoveAnime__9daPy_lk_cFf */ void daPy_lk_c::setBlendAtnBackMoveAnime(f32) { /* Nonmatching */ } /* 8010BB08-8010C010 .text setBlendAtnMoveAnime__9daPy_lk_cFf */ void daPy_lk_c::setBlendAtnMoveAnime(f32) { /* Nonmatching */ } /* 8010C010-8010C100 .text setAnimeEquipSword__9daPy_lk_cFi */ void daPy_lk_c::setAnimeEquipSword(BOOL r4) { if (!checkSwordEquip()) { return; } m3562 = daPyItem_SWORD_e; f32 rate = daPy_HIO_cut_c0::m.field_0x8; f32 start = daPy_HIO_cut_c0::m.field_0xC; s16 end = daPy_HIO_cut_c0::m.field_0x0; f32 f3 = daPy_HIO_cut_c0::m.field_0x10; setActAnimeUpper(LKANM_BCK_REST, UPPER_MOVE2_e, rate, start, end, f3); setPriTextureAnime(0x72, 0); dComIfGp_clearPlayerStatus0(0, daPyStts0_BOOMERANG_WAIT_e); if (mActorKeepThrow.getActor() != NULL) { daBoomerang_c* boomerang = (daBoomerang_c*)mActorKeepThrow.getActor(); boomerang->onCancelFlg(); } if (!r4) { onNoResetFlg1(daPyFlg1_UNK4000000); } else { offNoResetFlg1(daPyFlg1_UNK4000000); } } /* 8010C100-8010C158 .text setAnimeEquipSingleItem__9daPy_lk_cFUs */ void daPy_lk_c::setAnimeEquipSingleItem(u16 bckIdx) { f32 rate = daPy_HIO_item_c0::m.field_0x14; f32 start = daPy_HIO_item_c0::m.field_0x18; s16 end = daPy_HIO_item_c0::m.field_0x2; f32 f3 = daPy_HIO_item_c0::m.field_0x1C; setActAnimeUpper(bckIdx, UPPER_MOVE2_e, rate, start, end, f3); setPriTextureAnime(0x74, 0); } /* 8010C158-8010C1D4 .text setAnimeEquipItem__9daPy_lk_cFv */ void daPy_lk_c::setAnimeEquipItem() { if (mActorKeepThrow.getActor() != NULL) { if (getReadyItem() == dItem_BOOMERANG_e) { return; } daBoomerang_c* boomerang = (daBoomerang_c*)mActorKeepThrow.getActor(); boomerang->onCancelFlg(); } u8 itemNo = getReadyItem(); m3562 = itemNo; dComIfGp_clearPlayerStatus0(0, daPyStts0_BOOMERANG_WAIT_e); setAnimeUnequipItem(m3562); } /* 8010C1D4-8010C284 .text setAnimeUnequipSword__9daPy_lk_cFv */ void daPy_lk_c::setAnimeUnequipSword() { f32 rate; f32 start; s16 end; f32 f3; if (checkModeFlg( // These combine to: 0x01FD2810 ModeFlg_WHIDE | ModeFlg_ROPE | ModeFlg_IN_SHIP | ModeFlg_CLIMB | ModeFlg_SWIM | ModeFlg_00080000 | ModeFlg_GRAB | ModeFlg_PUSHPULL | ModeFlg_LADDER | ModeFlg_CROUCH | ModeFlg_CRAWL ) || dComIfGp_event_runCheck() || mDemo.getDemoType() != 0) { rate = daPy_HIO_cut_c0::m.field_0x20; start = daPy_HIO_cut_c0::m.field_0x24; end = daPy_HIO_cut_c0::m.field_0x4; f3 = daPy_HIO_cut_c0::m.field_0x28; } else { rate = daPy_HIO_cut_c0::m.field_0x14; start = daPy_HIO_cut_c0::m.field_0x18; end = daPy_HIO_cut_c0::m.field_0x2; f3 = daPy_HIO_cut_c0::m.field_0x1C; } setActAnimeUpper(LKANM_BCK_REST, UPPER_MOVE2_e, rate, start, end, f3); setPriTextureAnime(0x72, 0); } /* 8010C284-8010C3C0 .text setAnimeUnequipItem__9daPy_lk_cFUs */ void daPy_lk_c::setAnimeUnequipItem(u16 i_itemNo) { if (i_itemNo == dItem_BOOMERANG_e || i_itemNo == dItem_GRAPPLING_HOOK_e || i_itemNo == dItem_TELESCOPE_e || checkPhotoBoxItem(i_itemNo) || i_itemNo == dItem_HOOKSHOT_e || i_itemNo == dItem_DEKU_LEAF_e || i_itemNo == dItem_TINGLE_TUNER_e || i_itemNo == dItem_WIND_WAKER_e || checkBottleItem(i_itemNo) ) { setAnimeEquipSingleItem(LKANM_BCK_TAKEL); } else if (checkBowItem(i_itemNo)) { setAnimeEquipSingleItem(LKANM_BCK_TAKER); } else if (i_itemNo == dItem_SKULL_HAMMER_e) { f32 rate = daPy_HIO_item_c0::m.field_0x24; f32 start = daPy_HIO_item_c0::m.field_0x28; s16 end = daPy_HIO_item_c0::m.field_0x4; f32 f3 = daPy_HIO_item_c0::m.field_0x2C; setActAnimeUpper(LKANM_BCK_TAKEBOTH, UPPER_MOVE2_e, rate, start, end, f3); } else { f32 rate = daPy_HIO_item_c0::m.field_0x8; f32 start = daPy_HIO_item_c0::m.field_0xC; s16 end = daPy_HIO_item_c0::m.field_0x0; f32 f3 = daPy_HIO_item_c0::m.field_0x10; setActAnimeUpper(LKANM_BCK_TAKE, UPPER_MOVE2_e, rate, start, end, f3); setPriTextureAnime(0x73, 0); } } /* 8010C3C0-8010C430 .text setAnimeUnequip__9daPy_lk_cFv */ void daPy_lk_c::setAnimeUnequip() { if (mEquipItem == daPyItem_SWORD_e) { setAnimeUnequipSword(); } else if (mEquipItem == daPyItem_BOKO_e) { deleteEquipItem(FALSE); m_old_fdata->initOldFrameMorf(5.0f, 0, 0x2A); } else { setAnimeUnequipItem(mEquipItem); } m3562 = daPyItem_NONE_e; } /* 8010C430-8010C4A4 .text checkBossGomaStage__9daPy_lk_cFv */ BOOL daPy_lk_c::checkBossGomaStage() { if (strcmp(dComIfGp_getStartStageName(), "M_DragB") == 0 || strcmp(dComIfGp_getStartStageName(), "Xboss0") == 0) { return TRUE; } return FALSE; } /* 8010C4A4-8010C4C8 .text checkSingleItemEquipAnime__9daPy_lk_cCFv */ BOOL daPy_lk_c::checkSingleItemEquipAnime() const { return m_anm_heap_upper[UPPER_MOVE2_e].mIdx == LKANM_BCK_TAKEL || m_anm_heap_upper[UPPER_MOVE2_e].mIdx == LKANM_BCK_TAKER; } /* 8010C4C8-8010C528 .text checkItemEquipAnime__9daPy_lk_cCFv */ BOOL daPy_lk_c::checkItemEquipAnime() const { return m_anm_heap_upper[UPPER_MOVE2_e].mIdx == LKANM_BCK_TAKE || checkSingleItemEquipAnime() || m_anm_heap_upper[UPPER_MOVE2_e].mIdx == LKANM_BCK_TAKEBOTH; } /* 8010C528-8010C570 .text checkEquipAnime__9daPy_lk_cCFv */ BOOL daPy_lk_c::checkEquipAnime() const { return m_anm_heap_upper[UPPER_MOVE2_e].mIdx == LKANM_BCK_REST || checkItemEquipAnime(); } /* 8010C570-8010C71C .text deleteEquipItem__9daPy_lk_cFi */ void daPy_lk_c::deleteEquipItem(BOOL param_1) { fopAc_ac_c* equipActor = mActorKeepEquip.getActor(); if (param_1 && (mEquipItem != daPyItem_NONE_e && mEquipItem != daPyItem_BOKO_e)) { if (mEquipItem == daPyItem_SWORD_e) { seStartOnlyReverb(JA_SE_LK_SW_PUTIN_S); } else { seStartOnlyReverb(JA_SE_LK_ITEM_TAKEOUT); } } if (mEquipItem == daPyItem_SWORD_e) { mDoAud_bgmSetSwordUsing(0); } else if (mEquipItem == daPyItem_BOKO_e) { if (equipActor != NULL) { fopAcM_cancelCarryNow(equipActor); } } else if (equipActor != NULL) { fopAcM_delete(equipActor); } if ((mEquipItem == dItem_GRAPPLING_HOOK_e && checkRopeAnime()) || (mEquipItem == dItem_BOOMERANG_e && checkBoomerangAnime()) || (mEquipItem == dItem_HOOKSHOT_e && checkHookshotReadyAnime()) || (checkBowItem(mEquipItem) && checkBowAnime()) ) { resetActAnimeUpper(UPPER_MOVE2_e, -1.0f); } mActorKeepEquip.clearData(); mEquipItem = daPyItem_NONE_e; mpEquipItemModel = NULL; if (mSwordAnim.getBckAnm() != NULL) { mSwordAnim.changeBckOnly(NULL); } mpParachuteFanMorf = NULL; mpEquipItemBtk = NULL; mpBottleContentsModel = NULL; mpBottleCapModel = NULL; mpEquipItemBrk = NULL; mpSwordBtk = NULL; mpSwordModel1 = NULL; m3454.end(); mpSwordTipStabModel = NULL; mpCutfBrk = NULL; mpCutfBtk = NULL; mpCutfBpk = NULL; offNoResetFlg1(daPyFlg1_UNK200000); } /* 8010C71C-8010C7F4 .text setFallVoice__9daPy_lk_cFv */ void daPy_lk_c::setFallVoice() { /* Nonmatching */ } /* 8010C7F4-8010C854 .text keepItemData__9daPy_lk_cFv */ /* Saves which item the player was holding in their hand so it can be restored later. */ void daPy_lk_c::keepItemData() { mKeepItem = mEquipItem; deleteEquipItem(FALSE); if (mKeepItem == daPyItem_BOKO_e) { mKeepItem = daPyItem_NONE_e; } else if (mKeepItem == daPyItem_NONE_e) { mKeepItem = daPyItem_UNK10B_e; } } /* 8010C854-8010C8D4 .text returnKeepItemData__9daPy_lk_cFv */ /* Restores which item the player was holding in their hand. */ void daPy_lk_c::returnKeepItemData() { if (mKeepItem == daPyItem_NONE_e) { return; } deleteEquipItem(FALSE); mEquipItem = mKeepItem; mKeepItem = daPyItem_NONE_e; if (mEquipItem == daPyItem_UNK10B_e) { mEquipItem = daPyItem_NONE_e; } else if (mEquipItem == daPyItem_SWORD_e) { setSwordModel(TRUE); } else { makeItemType(); } } /* 8010C8D4-8010CB70 .text makeItemType__9daPy_lk_cFv */ void daPy_lk_c::makeItemType() { if (mEquipItem == dItem_GRAPPLING_HOOK_e) { fopAc_ac_c* rope = (fopAc_ac_c*)fopAcM_fastCreate(PROC_HIMO2, 0, ¤t.pos); mActorKeepEquip.setData(rope); } else if (mEquipItem == dItem_HOOKSHOT_e) { fopAc_ac_c* hookshot = (fopAc_ac_c*)fopAcM_fastCreate(PROC_HOOKSHOT, 0, ¤t.pos); mActorKeepEquip.setData(hookshot); setHookshotModel(); } else if (mEquipItem == dItem_BOOMERANG_e) { fopAc_ac_c* boomerang = (fopAc_ac_c*)fopAcM_fastCreate(PROC_BOOMERANG, 0, ¤t.pos); mActorKeepEquip.setData(boomerang); return; } else if (mEquipItem == dItem_BOMB_BAG_e) { fopAc_ac_c* bomb = (fopAc_ac_c*)fopAcM_fastCreate(PROC_BOMB, daBomb_c::prm_make(daBomb_c::STATE_3, false, false), ¤t.pos); mActorKeepGrab.setData(bomb); mEquipItem = daPyItem_NONE_e; if (mActorKeepGrab.getActor() != NULL) { setActAnimeUpper(LKANM_BCK_GRABWAIT, UPPER_MOVE2_e, 0.0f, 0.0f, -1, 5.0f); mActivePlayerBombs++; fopAcM_setCarryNow(mActorKeepGrab.getActor(), FALSE); dComIfGp_setItemBombNumCount(-1); m35C8 = 17.0f; } return; } else if (checkBowItem(mEquipItem)) { setBowModel(); return; } else if (mEquipItem == dItem_TELESCOPE_e) { setScopeModel(); return; } else if (checkPhotoBoxItem(mEquipItem)) { setPhotoBoxModel(); return; } else if (mEquipItem == dItem_TINGLE_TUNER_e) { setTinkleCeiverModel(); return; } else if (mEquipItem == dItem_DEKU_LEAF_e) { setSmallFanModel(); return; } else if (mEquipItem == dItem_WIND_WAKER_e) { mEquipItem = dItem_NONE_e; setTactModel(); return; } else if (mEquipItem == dItem_SKULL_HAMMER_e) { setHammerModel(); return; } else if (mEquipItem == EMPTY_BOTTLE) { setBottleModel(mEquipItem); return; } else { return; } if (mActorKeepEquip.getActor() == NULL) { mEquipItem = daPyItem_NONE_e; offResetFlg0(daPyRFlg0_UNK80); } } /* 8010CB70-8010CBC8 .text setScopeModel__9daPy_lk_cFv */ void daPy_lk_c::setScopeModel() { JKRHeap* oldHeap = setItemHeap(); initModel(&mpEquipItemModel, LINK_BDL_TELESCOPE, 0x37221222); mDoExt_setCurrentHeap(oldHeap); } /* 8010CBC8-8010CC78 .text setPhotoBoxModel__9daPy_lk_cFv */ void daPy_lk_c::setPhotoBoxModel() { JKRHeap* oldHeap = setItemHeap(); initModel(&mpEquipItemModel, LINK_BDL_CAMERA, 0x37221222); mDoExt_setCurrentHeap(oldHeap); if (mEquipItem == CAMERA) { mpEquipItemModel->getModelData()->getJointNodePointer(0x02)->getMesh()->getShape()->hide(); // frash joint } else { mpEquipItemModel->getModelData()->getJointNodePointer(0x02)->getMesh()->getShape()->show(); // frash joint } } /* 8010CC78-8010CD34 .text changeDragonShield__9daPy_lk_cFi */ void daPy_lk_c::changeDragonShield(int) { /* Nonmatching */ } /* 8010CD34-8010CFB4 .text checkNewItemChange__9daPy_lk_cFUc */ BOOL daPy_lk_c::checkNewItemChange(u8) { /* Nonmatching */ } /* 8010CFB4-8010D26C .text checkItemChangeFromButton__9daPy_lk_cFv */ BOOL daPy_lk_c::checkItemChangeFromButton() { if (checkModeFlg(ModeFlg_00000004) && !checkEquipAnime() && mActorKeepGrab.getActor() == NULL && !checkPlayerGuard() ) { if (!daPy_dmEcallBack_c::checkCurse()) { if (mPressedButtons & 0x02 && checkSwordEquip() && mEquipItem != daPyItem_SWORD_e) { setAnimeEquipSword(1); } else if (mPressedButtons & 0x04) { if (checkNewItemChange(0)) { mReadyItemBtn = dItemBtn_X_e; return TRUE; } } else if (mPressedButtons & 0x08) { if (checkNewItemChange(1)) { mReadyItemBtn = dItemBtn_Y_e; return TRUE; } } else if (mPressedButtons & 0x10) { if (checkNewItemChange(2)) { mReadyItemBtn = dItemBtn_Z_e; return TRUE; } } else if (mPressedButtons & 0x01) { if (dComIfGp_getDoStatus() == 0x08) { // A button shows "Put Away" setAnimeUnequip(); } } } else { if (checkEquipDragonShield() && checkSetItemTrigger(dItem_MAGIC_ARMOR_e, 0)) { offNoResetFlg1(daPyFlg1_EQUIP_DRAGON_SHIELD); } else if (mAcch.ChkGroundHit() && !daPy_lk_c::checkPlayerFly()) { if (checkEquipHeavyBoots() && checkSetItemTrigger(dItem_IRON_BOOTS_e, 0)) { return procBootsEquip_init(dItem_IRON_BOOTS_e); } else if (checkSetItemTrigger(daPyItem_DRINK_BOTTLE_e, 0)) { return procBottleDrink_init(dComIfGp_getSelectItem(mReadyItemBtn)); } else if (checkSetItemTrigger(FAIRY_BOTTLE, 0)) { return procBottleOpen_init(FAIRY_BOTTLE); } else if (mPressedButtons & 0x01) { if (dComIfGp_getDoStatus() == 0x08) { // A button shows "Put Away" setAnimeUnequip(); } } } else if (mPressedButtons & 0x01) { if (dComIfGp_getDoStatus() == 0x08) { // A button shows "Put Away" setAnimeUnequip(); } } } } return FALSE; } /* 8010D26C-8010D754 .text checkItemAction__9daPy_lk_cFv */ void daPy_lk_c::checkItemAction() { /* Nonmatching */ } /* 8010D754-8010D810 .text getSlidePolygon__9daPy_lk_cFv */ void daPy_lk_c::getSlidePolygon() { /* Nonmatching */ } /* 8010D810-8010D8B0 .text checkJumpCutFromButton__9daPy_lk_cFv */ BOOL daPy_lk_c::checkJumpCutFromButton() { /* Nonmatching */ } /* 8010D8B0-8010DB58 .text orderTalk__9daPy_lk_cFv */ void daPy_lk_c::orderTalk() { /* Nonmatching */ } /* 8010DB58-8010E448 .text checkNextActionFromButton__9daPy_lk_cFv */ BOOL daPy_lk_c::checkNextActionFromButton() { /* Nonmatching */ } /* 8010E448-8010E75C .text setShieldGuard__9daPy_lk_cFv */ void daPy_lk_c::setShieldGuard() { /* Nonmatching */ } /* 8010E75C-8010E7C4 .text checkItemModeActorPointer__9daPy_lk_cFv */ BOOL daPy_lk_c::checkItemModeActorPointer() { /* Nonmatching */ } /* 8010E7C4-8010E828 .text checkNextActionItemFly__9daPy_lk_cFv */ BOOL daPy_lk_c::checkNextActionItemFly() { /* Nonmatching */ } /* 8010E828-8010EC78 .text checkNextMode__9daPy_lk_cFi */ BOOL daPy_lk_c::checkNextMode(int) { /* Nonmatching */ } /* 8010EC78-8010ED68 .text checkIceSlipFall__9daPy_lk_cFv */ BOOL daPy_lk_c::checkIceSlipFall() { /* Nonmatching */ } /* 8010ED68-8010F9AC .text setFrontWallType__9daPy_lk_cFv */ void daPy_lk_c::setFrontWallType() { /* Nonmatching */ } /* 8010F9AC-8010FEC4 .text changeFrontWallTypeProc__9daPy_lk_cFv */ void daPy_lk_c::changeFrontWallTypeProc() { /* Nonmatching */ } /* 8010FEC4-8010FFB0 .text changeSlideProc__9daPy_lk_cFv */ void daPy_lk_c::changeSlideProc() { /* Nonmatching */ } /* 8010FFB0-80110028 .text changeWaitProc__9daPy_lk_cFv */ void daPy_lk_c::changeWaitProc() { /* Nonmatching */ } /* 80110028-8011029C .text changeLandProc__9daPy_lk_cFf */ void daPy_lk_c::changeLandProc(f32) { /* Nonmatching */ } /* 8011029C-80110338 .text setDamagePoint__9daPy_lk_cFf */ BOOL daPy_lk_c::setDamagePoint(f32 amount) { if (!checkNoDamageMode()) { dComIfGp_setItemLifeCount(amount); if (amount < 0.0f) { offNoResetFlg1(daPyFlg1_UNK8000); if (dComIfGs_getSelectEquip(0) != MASTER_SWORD_EX) { offNoResetFlg1(daPyFlg1_UNK200000); } } return TRUE; } else { seStartMapInfo(JA_SE_LK_MGC_SHIELD_DEF); return FALSE; } } /* 80110338-80110448 .text checkNormalDamage__9daPy_lk_cFi */ BOOL daPy_lk_c::checkNormalDamage(int) { /* Nonmatching */ } /* 80110448-801104E4 .text setDashDamage__9daPy_lk_cFv */ void daPy_lk_c::setDashDamage() { /* Nonmatching */ } /* 801104E4-8011054C .text checkAtHitEnemy__9daPy_lk_cFP12dCcD_GObjInf */ BOOL daPy_lk_c::checkAtHitEnemy(dCcD_GObjInf*) { /* Nonmatching */ } /* 8011054C-801105D8 .text checkElecReturnDamage__9daPy_lk_cFP12dCcD_GObjInfP4cXyz */ BOOL daPy_lk_c::checkElecReturnDamage(dCcD_GObjInf*, cXyz*) { /* Nonmatching */ } /* 801105D8-80110654 .text checkWallAtributeDamage__9daPy_lk_cFP12dBgS_AcchCir */ s32 daPy_lk_c::checkWallAtributeDamage(dBgS_AcchCir*) { /* Nonmatching */ } /* 80110654-80110F3C .text changeDamageProc__9daPy_lk_cFv */ BOOL daPy_lk_c::changeDamageProc() { if (!checkModeFlg(ModeFlg_DAMAGE) && mDamageWaitTimer > 0) { mDamageWaitTimer--; if (mDamageWaitTimer == 0) { if (checkDashDamageAnime()) { resetActAnimeUpper(UPPER_MOVE2_e, daPy_HIO_basic_c0::m.field_0xC); } else if (checkModeFlg(ModeFlg_SWIM)) { resetPriTextureAnime(); } } } if (checkNoResetFlg0(daPyFlg0_UNK1000000)) { offNoResetFlg0(daPyFlg0_UNK1000000); changePlayer(this); return procLargeDamage_init(-5, 1, 0, 0); } daShip_c* ship = (daShip_c*)dComIfGp_getShipActor(); if (dComIfGp_event_runCheck() || mDemo.getDemoType() != 0 || checkNoControll() || mCurProc == daPyProc_SHIP_READY_e || ( dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && ship && ship->unknown_inline_TODO() ) ) { offNoResetFlg0(daPyFlg0_SHIP_DROP); return FALSE; } BOOL r30; int damage; s32 attribCode = dBgS_Attr_NORMAL_e; if (checkNoResetFlg1(daPyFlg1_UNK4) || ( mAcch.ChkGroundHit() && !checkModeFlg(ModeFlg_HANG) && mCurrAttributeCode == dBgS_Attr_FREEZE_e )) { changePlayer(this); return dProcFreezeDamage_init(); } else if ( dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && checkNoResetFlg0(daPyFlg0_SHIP_DROP) ) { offNoResetFlg0(daPyFlg0_SHIP_DROP); changePlayer(this); return procLargeDamage_init(-2, 1, 0, 0); } else if (!checkModeFlg(ModeFlg_DAMAGE) && mDamageWaitTimer == 0) { if (mAcch.ChkGroundHit() && ( mCurrAttributeCode == dBgS_Attr_DAMAGE_e || mCurrAttributeCode == dBgS_Attr_ELECTRICITY_e )) { attribCode = mCurrAttributeCode; } else { for (int i = 0; attribCode == dBgS_Attr_NORMAL_e && i < (s32)ARRAY_SIZE(mAcchCir); i++) { attribCode = checkWallAtributeDamage(&mAcchCir[i]); } } } if (attribCode != dBgS_Attr_NORMAL_e) { r30 = TRUE; damage = 1; } else { r30 = FALSE; damage = mStts.GetDmg(); if (mCyl.ChkTgHit() && mCyl.GetTgHitGObj() && mCyl.GetTgHitGObj()->GetAtType() == AT_TYPE_BOMB) { damage = 1; } } dCcG_At_Spl spl; if (mCyl.ChkTgHit()) { dCcD_GObjInf* gobj = mCyl.GetTgHitGObj(); if (gobj) { spl = gobj->GetAtSpl(); } else { spl = mStts.GetAtSpl(); } } else { spl = dCcG_At_Spl_UNK0; } if (checkModeFlg(ModeFlg_04000000)) { if (r30 || mCyl.ChkTgHit() && !checkSuccessGuard(spl)) { setDamagePoint(-damage); mDamageWaitTimer = daPy_HIO_dam_c0::m.field_0x2; voiceStart(2); seStartOnlyReverb(JA_SE_LK_DAMAGE_NORMAL); changePlayer(this); if (mCyl.ChkTgHit() && !checkSuccessGuard(spl)) { setDamageEmitter(); } else if (attribCode == dBgS_Attr_ELECTRICITY_e) { setDamageElecEmitter(); } if (daPy_dmEcallBack_c::checkElec()) { if (checkModeFlg(ModeFlg_ROPE)) { return procElecDamage_init(NULL); } else if (checkModeFlg(ModeFlg_SWIM)) { return procElecDamage_init(NULL); } } if (checkModeFlg(ModeFlg_SWIM) && !checkNoDamageMode()) { setPriTextureAnime(0x40, 0); } } } else { if (mAtCps[0].GetAtType() != AT_TYPE_BOKO_STICK && mAtCps[0].GetAtType() != AT_TYPE_WATER) { cXyz sp8; if (checkElecReturnDamage(&mAtCps[0], &sp8) || checkElecReturnDamage(&mAtCps[1], &sp8) || checkElecReturnDamage(&mAtCps[2], &sp8) ) { setDamagePoint(-1.0f); onResetFlg0(daPyRFlg0_UNK80000); setDamageElecEmitter(); changePlayer(this); if (procElecDamage_init(&sp8)) { return TRUE; } if (daPy_lk_c::checkPlayerFly()) { return procLargeDamage_init(-1, 1, 0, 0); } else { return procDamage_init(); } } } if (mCyl.ChkTgHit() && !checkGuardSlip() && (!dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) || !checkNoDamageMode()) ) { freeRopeItem(); freeHookshotItem(); if (!checkSuccessGuard(spl)) { if (mEquipItem == daPyItem_BOKO_e) { deleteEquipItem(FALSE); } setDamageEmitter(); changePlayer(this); setDamagePoint(-damage); fopAc_ac_c* grabActor = mActorKeepGrab.getActor(); if (daPy_dmEcallBack_c::checkElec()) { if (procElecDamage_init(NULL)) { return TRUE; } } if (checkModeFlg(ModeFlg_IN_SHIP)) { return procLargeDamage_init(-9, 1, 0, 0); } if (checkGrabWear() && mCyl.GetTgHitAc() && fopAcM_GetName(mCyl.GetTgHitAc()) == PROC_NZ && grabActor ) { cXyz* damageVec = getDamageVec(&mCyl); grabActor->shape_angle.y = cM_atan2s(damageVec->x, damageVec->z); grabActor->shape_angle.x = 0x2000; return procLargeDamage_init(-4, 1, 0, 0); } if (spl == 7 || spl == 2 || spl == 10) { return procLargeDamage_init(-6, 0, 0, 0); } if (daPy_lk_c::checkPlayerFly() || spl == 6 || spl == 1 || spl == 9) { return procLargeDamage_init(-1, 1, 0, 0); } if (checkNormalDamage(damage)) { return procDamage_init(); } setDashDamage(); } else { u8 hitSe = mCyl.GetTgHitObjSe(); if (hitSe == dCcG_SE_UNK6) { seStartOnlyReverb(JA_SE_OBJ_COL_N_BDY_MPLT); } else if (hitSe == dCcG_SE_UNK2 || hitSe == dCcG_SE_UNK5) { seStartOnlyReverb(JA_SE_OBJ_COL_SWS_NMTLP); } else if (hitSe == dCcG_SE_UNK4) { seStartOnlyReverb(JA_SE_OBJ_COL_NWHP_NMTL); } else { seStartOnlyReverb(JA_SE_OBJ_COL_SWM_NSWL); } if (mCurProc == daPyProc_CROUCH_DEFENSE_e) { return procCrouchDefenseSlip_init(); } else { return procGuardSlip_init(); } } } else if (r30) { changePlayer(this); if (mEquipItem == daPyItem_BOKO_e) { deleteEquipItem(FALSE); } setDamagePoint(-damage); if (attribCode == dBgS_Attr_ELECTRICITY_e) { setDamageElecEmitter(); if (procElecDamage_init(NULL)) { return TRUE; } } if (checkNormalDamage(damage)) { return procPolyDamage_init(); } setDashDamage(); } } mStts.ClrTg(); mStts.ClrAt(); return FALSE; } /* 80110F3C-80111424 .text changeAutoJumpProc__9daPy_lk_cFv */ BOOL daPy_lk_c::changeAutoJumpProc() { /* Nonmatching */ } /* 80111424-80111A80 .text changeDemoProc__9daPy_lk_cFv */ BOOL daPy_lk_c::changeDemoProc() { /* Nonmatching */ static const Vec tact_scale = {2.5f, 2.5f, 2.5f}; } /* 80111A80-80111B80 .text changeDeadProc__9daPy_lk_cFv */ BOOL daPy_lk_c::changeDeadProc() { /* Nonmatching */ } /* 80111B80-80111D64 .text getDamageVec__9daPy_lk_cFP12dCcD_GObjInf */ cXyz* daPy_lk_c::getDamageVec(dCcD_GObjInf*) { /* Nonmatching */ } /* 80111D64-80111E54 .text setOldRootQuaternion__9daPy_lk_cFsss */ void daPy_lk_c::setOldRootQuaternion(s16, s16, s16) { /* Nonmatching */ } /* 80111E54-80111EFC .text checkRestHPAnime__9daPy_lk_cFv */ BOOL daPy_lk_c::checkRestHPAnime() { /* Nonmatching */ } /* 80111EFC-80111F5C .text checkHeavyStateOn__9daPy_lk_cFv */ BOOL daPy_lk_c::checkHeavyStateOn() { if (!dComIfGp_event_runCheck() && mDemo.getDemoType() == 0 && (getHeavyStateAndBoots() || checkGrabSpecialHeavyState()) ) { return TRUE; } return FALSE; } /* 80111F5C-80111F7C .text checkBottleItem__9daPy_lk_cCFi */ BOOL daPy_lk_c::checkBottleItem(int itemNo) const { return itemNo >= EMPTY_BOTTLE && itemNo <= UNK_BOTTLE_60; } /* 80111F7C-80111FEC .text checkDrinkBottleItem__9daPy_lk_cCFi */ BOOL daPy_lk_c::checkDrinkBottleItem(int itemNo) const { return itemNo == RED_BOTTLE || itemNo == GREEN_BOTTLE || itemNo == BLUE_BOTTLE || itemNo == dItem_SOUP_BOTTLE_e || itemNo == dItem_HALF_SOUP_BOTTLE_e; } /* 80111FEC-8011201C .text checkOpenBottleItem__9daPy_lk_cCFi */ BOOL daPy_lk_c::checkOpenBottleItem(int itemNo) const { return itemNo == FIREFLY_BOTTLE || itemNo == BIN_IN_WATER || itemNo == FWATER_BOTTLE || itemNo == FAIRY_BOTTLE; } /* 8011201C-80112044 .text checkBowItem__9daPy_lk_cCFi */ BOOL daPy_lk_c::checkBowItem(int itemNo) const { return itemNo == dItem_BOW_e || itemNo == dItem_MAGIC_ARROW_e || itemNo == dItem_LIGHT_ARROW_e; } /* 80112044-80112064 .text checkPhotoBoxItem__9daPy_lk_cCFi */ BOOL daPy_lk_c::checkPhotoBoxItem(int itemNo) const { return itemNo == CAMERA || itemNo == CAMERA2; } /* 80112064-80112100 .text checkScopeEnd__9daPy_lk_cFv */ BOOL daPy_lk_c::checkScopeEnd() { /* Nonmatching */ } /* 80112100-8011215C .text setSubjectMode__9daPy_lk_cFv */ void daPy_lk_c::setSubjectMode() { dComIfGp_setPlayerStatus0(0, daPyStts0_UNK2000_e); mDoAud_seStart(JA_SE_SUBJ_VIEW_IN); } /* 8011215C-801121C8 .text checkMaskDraw__9daPy_lk_cFv */ BOOL daPy_lk_c::checkMaskDraw() { /* Nonmatching */ } /* 801121C8-80112280 .text checkSubjectEnd__9daPy_lk_cFi */ BOOL daPy_lk_c::checkSubjectEnd(int param_1) { if(dComIfGp_event_runCheck() || (mPressedButtons & 3) || (m34C9 & 0x20) || dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x2000)) { if(param_1) { mDoAud_seStart(JA_SE_SUBJ_VIEW_OUT); } onResetFlg0(daPyRFlg0_UNK10000000); return true; } return false; } /* 80112280-80112330 .text checkGuardAccept__9daPy_lk_cFv */ BOOL daPy_lk_c::checkGuardAccept() { if (checkModeFlg(ModeFlg_00000040) && !checkBowAnime()) { if (dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) != dStageType_MISC_e || strcmp(dComIfGp_getStartStageName(), "Ojhous") == 0 || strcmp(dComIfGp_getStartStageName(), "Orichh") == 0) { return TRUE; } } return FALSE; } /* 80112330-80112348 .text cancelNoDamageMode__9daPy_lk_cFv */ void daPy_lk_c::cancelNoDamageMode() { offNoResetFlg1(daPyFlg1_EQUIP_DRAGON_SHIELD); mTinkleShieldTimer = 0; } /* 80112348-80112954 .text commonProcInit__9daPy_lk_cFQ29daPy_lk_c9daPy_PROC */ BOOL daPy_lk_c::commonProcInit(daPy_PROC proc) { ProcInitTableEntry& procInit = mProcInitTable[proc]; s32 temp_r29; BOOL resetDemoAnime = FALSE; s32 temp_r28; if (mCurProc == daPyProc_SLIP_e) { mDoAud_seStop(JA_SE_LK_RUN_SLIP, 0); } else if (mCurProc == daPyProc_GRAB_MISS_e || (mCurProc == daPyProc_GRAB_READY_e && proc != daPyProc_GRAB_MISS_e)) { mActorKeepRope.clearData(); } else if (mCurProc == daPyProc_DEMO_TALISMAN_WAIT_e) { seStartOnlyReverb(JA_SE_LK_ITEM_TAKEOUT); mpEquipItemModel = NULL; } else if (mCurProc == daPyProc_FAN_SWING_e) { setSmallFanModel(); } else if (mCurProc == daPyProc_FAN_GLIDE_e) { deleteEquipItem(FALSE); maxFallSpeed = daPy_HIO_autoJump_c0::m.field_0x10; setSmallFanModel(); mEquipItem = dItem_DEKU_LEAF_e; m35F0 = m3688.y; m3730 = cXyz::Zero; m34E0 = 0; m34E4 = 0; } else if (mCurProc == daPyProc_SLOW_FALL_e) { maxFallSpeed = daPy_HIO_autoJump_c0::m.field_0x10; } else if (mCurProc == daPyProc_DEMO_TOOL_e) { resetDemoAnime = TRUE; speed.y = 0.0f; } else if (mCurProc == daPyProc_DEMO_GET_ITEM_e || mCurProc == daPyProc_DEMO_GET_DANCE_e) { dKy_Itemgetcol_chg_off(); if (mCurProc == daPyProc_DEMO_GET_ITEM_e && m34D8 != 0) { m34C2 = 0xB; } } else if (mCurProc == daPyProc_DEMO_PRESENT_e || mCurProc == daPyProc_NOT_USE_e) { daItemBase_c* item = (daItemBase_c*)fopAcM_getItemEventPartner(this); if (item && (fopAcM_GetName(item) == PROC_ITEM || fopAcM_GetName(item) == PROC_Demo_Item)) { item->dead(); } } else if (mCurProc == daPyProc_DEMO_LETTER_READ_e) { deleteEquipItem(FALSE); } else if (mCurProc == daPyProc_CUT_ROLL_END_e) { if (m33A8.getEmitter()) { m33A8.getEmitter()->setGlobalAlpha(0); } } else if (mCurProc == daPyProc_SHIP_BOW_e) { deleteArrow(); } returnKeepItemData(); temp_r28 = checkModeFlg(ModeFlg_SWIM) >> 0x12; // TODO fakematch? fixes regalloc // TODO: is this an inline? if (checkModeFlg(ModeFlg_HANG | ModeFlg_ROPE | ModeFlg_SWIM | ModeFlg_CAUGHT)) { m34C2 = 0xA; } temp_r29 = (checkModeFlg(ModeFlg_MIDAIR) >> 1) ^ 1; // TODO fakematch? fixes regalloc mCurProc = proc; mCurProcFunc = procInit.mProcFunc; m3598 = 0.0f; mModeFlg = procInit.mProcFlags; if (m34C2 == 1) { m34C2 = 2; } // TODO: is this an inline? if (checkModeFlg(ModeFlg_HANG | ModeFlg_ROPE | ModeFlg_SWIM | ModeFlg_CAUGHT)) { m34C2 = 0xB; } if (checkModeFlg(ModeFlg_HANG)) { mAcch.OffLineCheck(); } else { mAcch.OnLineCheck(); } dComIfGp_clearPlayerStatus0(0, ~(daPyStts0_BOOMERANG_WAIT_e | daPyStts0_UNK10_e)); dComIfGp_clearPlayerStatus1(0, ~(daPyStts1_SAIL_e | daPyStts1_UNK8000_e | daPyStts1_UNK40000_e) & 0x000FFFFF); gravity = daPy_HIO_autoJump_c0::m.field_0xC; m34F2 = 0; m34F4 = 0; onResetFlg0(daPyRFlg0_UNK8000000); m34C5 = 0; offNoResetFlg0(daPyFlg0_UNK4); offResetFlg0(daPyRFlg0_UNK2); offNoResetFlg1(daPyFlg1_UNK8000000); m3544 = 0; mSightPacket.offDrawFlg(); mSightPacket.offLockFlg(); m35C4 = 0.0f; mFanSwingCb.onAlphaOutFlg(); shape_angle.x = 0; shape_angle.z = 0; m34EC = 0; if (!(checkEquipAnime() && checkModeFlg(ModeFlg_00000004)) && !checkModeFlg(ModeFlg_00001000)) { if (!(checkGrabAnime() || checkBoomerangThrowAnime()) || !checkModeFlg(ModeFlg_00004000)) { resetActAnimeUpper(UPPER_MOVE2_e, -1.0f); if (!checkModeFlg(ModeFlg_GRAB)) { freeGrabItem(); } } } if (!checkModeFlg(ModeFlg_GRAB) && !checkGrabAnime() && mActorKeepGrab.getActor()) { freeGrabItem(); } if (temp_r29 && checkModeFlg(ModeFlg_MIDAIR)) { m3688 = current.pos; m35F0 = m3688.y; m35F4 = m3688.y; } if (mCurProc != daPyProc_SWIM_MOVE_e) { mSwimTailEcallBack[0].onEnd(); mSwimTailEcallBack[1].onEnd(); } if (!checkModeFlg(ModeFlg_SWIM)) { m3608 = 0.0f; } resetFootEffect(); if (resetDemoAnime) { resetDemoTextureAnime(); } m338C.end(); m33A8.end(); m32E4.end(); m32F0.end(); mSmokeEcallBack.end(); if (!checkGrabWear()) { m35D8 = 0.0f; } offNoResetFlg1(static_cast(daPyFlg1_UNK80 | daPyFlg1_UNK800000 | daPyFlg1_UNK1000000)); m35EC = 0.0f; if (mEquipItem == dItem_SKULL_HAMMER_e) { mSwordAnim.changeBckOnly(getItemAnimeResource(0x97)); } else if (checkBowItem(mEquipItem) && !checkBowAnime()) { mSwordAnim.changeBckOnly(getItemAnimeResource(0xD)); } m35E8 = 0.0f; if (!checkModeFlg(ModeFlg_ROPE) && mCurProc != daPyProc_ROPE_SUBJECT_e && mCurProc != daPyProc_ROPE_MOVE_e) { freeRopeItem(); } if (!checkModeFlg(ModeFlg_HOOKSHOT)) { freeHookshotItem(); } if (temp_r28 && !checkModeFlg(ModeFlg_SWIM)) { swimOutAfter(0); } dComIfGp_setAdvanceDirection(0); setBgCheckParam(); return TRUE; } /* 80112954-80112A24 .text procScope_init__9daPy_lk_cFi */ BOOL daPy_lk_c::procScope_init(int) { /* Nonmatching */ } /* 80112A24-80112AA8 .text procScope__9daPy_lk_cFv */ BOOL daPy_lk_c::procScope() { /* Nonmatching */ } /* 80112AA8-80112B18 .text procSubjectivity_init__9daPy_lk_cFi */ BOOL daPy_lk_c::procSubjectivity_init(int param_1) { commonProcInit(daPyProc_SUBJECTIVITY_e); mVelocity = 0.0f; setSubjectMode(); if(param_1 == 0) { setBlendMoveAnime(daPy_HIO_basic_c0::m.field_0xC); } m3570 = param_1; return true; } /* 80112B18-80112BEC .text procSubjectivity__9daPy_lk_cFv */ BOOL daPy_lk_c::procSubjectivity() { dComIfGp_setAStatus(7); if(checkSubjectEnd(0) || (m3570 != 0 && (m34C9 & 0x40) == 0)) { mDoAud_seStart(JA_SE_SUBJ_VIEW_OUT); if(m3570 != 0) { if(mEquipItem == daPyItem_NONE_e) { return procCrouch_init(); } return procCrouchDefense_init(); } changeWaitProc(); } else { setBodyAngleToCamera(); } return true; } /* 80112BEC-80112C90 .text procCall_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procCall_init() { commonProcInit(daPyProc_CALL_e); mVelocity = 0.0f; daPy_matAnm_c::offMabaFlg(); daPy_matAnm_c::setMabaTimer(1); setSingleMoveAnime(ANM_YOBU, 1.0f, 0.0f, -1, daPy_HIO_basic_c0::m.field_0xC); current.angle.y = shape_angle.y; if (mEquipItem == daPyItem_BOKO_e) { deleteEquipItem(FALSE); } voiceStart(0x2A); return TRUE; } /* 80112C90-80112D38 .text procCall__9daPy_lk_cFv */ BOOL daPy_lk_c::procCall() { if (dComIfGp_getCb1Player()) { s16 targetAngle = cLib_targetAngleY(¤t.pos, &dComIfGp_getCb1Player()->eyePos); cLib_addCalcAngleS(&shape_angle.y, targetAngle, 2, 0x2000, 0x800); current.angle.y = shape_angle.y; } if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) { if (dComIfGp_getCb1Player()) { daPy_py_c* partner = (daPy_py_c*)dComIfGp_getCb1Player(); partner->onNpcCallCommand(); } checkNextMode(0); } return TRUE; } /* 80112D38-80112DF4 .text procControllWait_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procControllWait_init() { /* Nonmatching */ } /* 80112DF4-80112E60 .text procControllWait__9daPy_lk_cFv */ BOOL daPy_lk_c::procControllWait() { /* Nonmatching */ } /* 80112E60-80113044 .text procWait_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procWait_init() { /* Nonmatching */ } /* 80113044-801133FC .text procWait__9daPy_lk_cFv */ BOOL daPy_lk_c::procWait() { /* Nonmatching */ } /* 801133FC-801134A0 .text procFreeWait_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procFreeWait_init() { /* Nonmatching */ } /* 801134A0-801135C4 .text procFreeWait__9daPy_lk_cFv */ BOOL daPy_lk_c::procFreeWait() { /* Nonmatching */ } /* 801135C4-80113628 .text procMove_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procMove_init() { /* Nonmatching */ } /* 80113628-801136D4 .text procMove__9daPy_lk_cFv */ BOOL daPy_lk_c::procMove() { /* Nonmatching */ } /* 801136D4-80113738 .text procAtnMove_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procAtnMove_init() { /* Nonmatching */ } /* 80113738-801137B4 .text procAtnMove__9daPy_lk_cFv */ BOOL daPy_lk_c::procAtnMove() { /* Nonmatching */ } /* 801137B4-8011388C .text procAtnActorWait_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procAtnActorWait_init() { /* Nonmatching */ } /* 8011388C-801138FC .text procAtnActorWait__9daPy_lk_cFv */ BOOL daPy_lk_c::procAtnActorWait() { /* Nonmatching */ } /* 801138FC-80113960 .text procAtnActorMove_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procAtnActorMove_init() { /* Nonmatching */ } /* 80113960-801139C0 .text procAtnActorMove__9daPy_lk_cFv */ BOOL daPy_lk_c::procAtnActorMove() { /* Nonmatching */ } /* 801139C0-80113AC4 .text procSideStep_init__9daPy_lk_cFi */ BOOL daPy_lk_c::procSideStep_init(int) { /* Nonmatching */ } /* 80113AC4-80113BDC .text procSideStep__9daPy_lk_cFv */ BOOL daPy_lk_c::procSideStep() { /* Nonmatching */ } /* 80113BDC-80113CBC .text procSideStepLand_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procSideStepLand_init() { /* Nonmatching */ } /* 80113CBC-80113D30 .text procSideStepLand__9daPy_lk_cFv */ BOOL daPy_lk_c::procSideStepLand() { /* Nonmatching */ } /* 80113D30-80113DBC .text procCrouchDefense_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procCrouchDefense_init() { /* Nonmatching */ } /* 80113DBC-80114014 .text procCrouchDefense__9daPy_lk_cFv */ BOOL daPy_lk_c::procCrouchDefense() { /* Nonmatching */ } /* 80114014-801142F4 .text procCrouchDefenseSlip_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procCrouchDefenseSlip_init() { /* Nonmatching */ } /* 801142F4-801143D4 .text procCrouchDefenseSlip__9daPy_lk_cFv */ BOOL daPy_lk_c::procCrouchDefenseSlip() { /* Nonmatching */ } /* 801143D4-80114440 .text procCrouch_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procCrouch_init() { /* Nonmatching */ } /* 80114440-8011476C .text procCrouch__9daPy_lk_cFv */ BOOL daPy_lk_c::procCrouch() { /* Nonmatching */ } /* 8011476C-80114804 .text procWaitTurn_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procWaitTurn_init() { /* Nonmatching */ } /* 80114804-80114908 .text procWaitTurn__9daPy_lk_cFv */ BOOL daPy_lk_c::procWaitTurn() { /* Nonmatching */ } /* 80114908-801149EC .text procMoveTurn_init__9daPy_lk_cFi */ BOOL daPy_lk_c::procMoveTurn_init(int) { /* Nonmatching */ } /* 801149EC-80114A60 .text procMoveTurn__9daPy_lk_cFv */ BOOL daPy_lk_c::procMoveTurn() { /* Nonmatching */ } /* 80114A60-80114B28 .text procSlip_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procSlip_init() { /* Nonmatching */ } /* 80114B28-80114D2C .text procSlip__9daPy_lk_cFv */ BOOL daPy_lk_c::procSlip() { /* Nonmatching */ } /* 80114D2C-80114DE4 .text procSlideFront_init__9daPy_lk_cFs */ BOOL daPy_lk_c::procSlideFront_init(s16) { /* Nonmatching */ } /* 80114DE4-80114EE8 .text procSlideFront__9daPy_lk_cFv */ BOOL daPy_lk_c::procSlideFront() { /* Nonmatching */ } /* 80114EE8-80114FA0 .text procSlideBack_init__9daPy_lk_cFs */ BOOL daPy_lk_c::procSlideBack_init(s16) { /* Nonmatching */ } /* 80114FA0-801150B0 .text procSlideBack__9daPy_lk_cFv */ BOOL daPy_lk_c::procSlideBack() { /* Nonmatching */ } /* 801150B0-80115118 .text procSlideFrontLand_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procSlideFrontLand_init() { /* Nonmatching */ } /* 80115118-801151C8 .text procSlideFrontLand__9daPy_lk_cFv */ BOOL daPy_lk_c::procSlideFrontLand() { /* Nonmatching */ } /* 801151C8-80115220 .text procSlideBackLand_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procSlideBackLand_init() { /* Nonmatching */ } /* 80115220-801152D0 .text procSlideBackLand__9daPy_lk_cFv */ BOOL daPy_lk_c::procSlideBackLand() { /* Nonmatching */ } /* 801152D0-80115478 .text procFrontRoll_init__9daPy_lk_cFf */ BOOL daPy_lk_c::procFrontRoll_init(f32) { /* Nonmatching */ } /* 80115478-80115628 .text procFrontRoll__9daPy_lk_cFv */ BOOL daPy_lk_c::procFrontRoll() { /* Nonmatching */ } /* 80115628-801157D8 .text procFrontRollCrash_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procFrontRollCrash_init() { /* Nonmatching */ } /* 801157D8-801158AC .text procFrontRollCrash__9daPy_lk_cFv */ BOOL daPy_lk_c::procFrontRollCrash() { /* Nonmatching */ } /* 801158AC-8011590C .text procNockBackEnd_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procNockBackEnd_init() { /* Nonmatching */ } /* 8011590C-80115968 .text procNockBackEnd__9daPy_lk_cFv */ BOOL daPy_lk_c::procNockBackEnd() { /* Nonmatching */ } /* 80115968-80115A18 .text procSideRoll_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procSideRoll_init() { /* Nonmatching */ } /* 80115A18-80115B08 .text procSideRoll__9daPy_lk_cFv */ BOOL daPy_lk_c::procSideRoll() { /* Nonmatching */ } /* 80115B08-80115BFC .text procBackJump_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procBackJump_init() { /* Nonmatching */ } /* 80115BFC-80115CA0 .text procBackJump__9daPy_lk_cFv */ BOOL daPy_lk_c::procBackJump() { /* Nonmatching */ } /* 80115CA0-80115DA8 .text procBackJumpLand_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procBackJumpLand_init() { /* Nonmatching */ } /* 80115DA8-80115E88 .text procBackJumpLand__9daPy_lk_cFv */ BOOL daPy_lk_c::procBackJumpLand() { /* Nonmatching */ } /* 80115E88-80115EA4 .text checkAutoJumpFlying__9daPy_lk_cCFv */ int daPy_lk_c::checkAutoJumpFlying() const { return mCurProc != daPyProc_AUTO_JUMP_e ? -1 : m34D0; } /* 80115EA4-8011602C .text procAutoJump_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procAutoJump_init() { /* Nonmatching */ } /* 8011602C-801163D4 .text procAutoJump__9daPy_lk_cFv */ BOOL daPy_lk_c::procAutoJump() { /* Nonmatching */ } /* 801163D4-8011651C .text procLand_init__9daPy_lk_cFfi */ BOOL daPy_lk_c::procLand_init(f32, int) { /* Nonmatching */ } /* 8011651C-801165B4 .text procLand__9daPy_lk_cFv */ BOOL daPy_lk_c::procLand() { /* Nonmatching */ } /* 801165B4-80116768 .text procLandDamage_init__9daPy_lk_cFi */ BOOL daPy_lk_c::procLandDamage_init(int) { /* Nonmatching */ } /* 80116768-80116864 .text procLandDamage__9daPy_lk_cFv */ BOOL daPy_lk_c::procLandDamage() { /* Nonmatching */ } /* 80116864-80116A38 .text procFall_init__9daPy_lk_cFif */ BOOL daPy_lk_c::procFall_init(int, f32) { /* Nonmatching */ } /* 80116A38-80116C14 .text procFall__9daPy_lk_cFv */ BOOL daPy_lk_c::procFall() { /* Nonmatching */ } /* 80116C14-80116CC4 .text procSlowFall_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procSlowFall_init() { /* Nonmatching */ } /* 80116CC4-80116D3C .text procSlowFall__9daPy_lk_cFv */ BOOL daPy_lk_c::procSlowFall() { /* Nonmatching */ } /* 80116D3C-80116EB4 .text procSmallJump_init__9daPy_lk_cFi */ BOOL daPy_lk_c::procSmallJump_init(int) { /* Nonmatching */ } /* 80116EB4-80116F54 .text procSmallJump__9daPy_lk_cFv */ BOOL daPy_lk_c::procSmallJump() { /* Nonmatching */ } /* 80116F54-80116FEC .text procVerticalJump_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procVerticalJump_init() { /* Nonmatching */ } /* 80116FEC-80117088 .text procVerticalJump__9daPy_lk_cFv */ BOOL daPy_lk_c::procVerticalJump() { /* Nonmatching */ } /* 80117088-801170F0 .text procGuardCrash__9daPy_lk_cFv */ BOOL daPy_lk_c::procGuardCrash() { /* Nonmatching */ } /* 801170F0-80117448 .text procDamage_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procDamage_init() { /* Nonmatching */ } /* 80117448-801176FC .text procDamage__9daPy_lk_cFv */ BOOL daPy_lk_c::procDamage() { /* Nonmatching */ } /* 801176FC-80117794 .text procPolyDamage_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procPolyDamage_init() { /* Nonmatching */ } /* 80117794-801177CC .text procPolyDamage__9daPy_lk_cFv */ BOOL daPy_lk_c::procPolyDamage() { /* Nonmatching */ } /* 801177CC-80117EAC .text procLargeDamage_init__9daPy_lk_cFiiss */ BOOL daPy_lk_c::procLargeDamage_init(int, int, s16, s16) { /* Nonmatching */ } /* 80117EAC-8011810C .text procLargeDamage__9daPy_lk_cFv */ BOOL daPy_lk_c::procLargeDamage() { /* Nonmatching */ } /* 8011810C-80118504 .text procLargeDamageUp_init__9daPy_lk_cFiiss */ BOOL daPy_lk_c::procLargeDamageUp_init(int, int, s16, s16) { /* Nonmatching */ } /* 80118504-80118640 .text procLargeDamageUp__9daPy_lk_cFv */ BOOL daPy_lk_c::procLargeDamageUp() { /* Nonmatching */ } /* 80118640-801189AC .text procLargeDamageWall_init__9daPy_lk_cFiiss */ BOOL daPy_lk_c::procLargeDamageWall_init(int, int, s16, s16) { /* Nonmatching */ } /* 801189AC-801189F0 .text procLargeDamageWall__9daPy_lk_cFv */ BOOL daPy_lk_c::procLargeDamageWall() { /* Nonmatching */ } /* 801189F0-80118BC4 .text procLavaDamage_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procLavaDamage_init() { /* Nonmatching */ } /* 80118BC4-80118C58 .text procLavaDamage__9daPy_lk_cFv */ BOOL daPy_lk_c::procLavaDamage() { /* Nonmatching */ } /* 80118C58-80118E6C .text procElecDamage_init__9daPy_lk_cFPC4cXyz */ BOOL daPy_lk_c::procElecDamage_init(const cXyz*) { /* Nonmatching */ } /* 80118E6C-80118F40 .text procElecDamage__9daPy_lk_cFv */ BOOL daPy_lk_c::procElecDamage() { /* Nonmatching */ } /* 80118F40-80119248 .text procGuardSlip_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procGuardSlip_init() { /* Nonmatching */ } /* 80119248-80119334 .text procGuardSlip__9daPy_lk_cFv */ BOOL daPy_lk_c::procGuardSlip() { /* Nonmatching */ } /* 80119334-80119478 .text procIceSlipFall_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procIceSlipFall_init() { /* Nonmatching */ } /* 80119478-80119500 .text procIceSlipFall__9daPy_lk_cFv */ BOOL daPy_lk_c::procIceSlipFall() { /* Nonmatching */ } /* 80119500-80119688 .text procIceSlipFallUp_init__9daPy_lk_cFiss */ BOOL daPy_lk_c::procIceSlipFallUp_init(int, s16, s16) { /* Nonmatching */ } /* 80119688-8011970C .text procIceSlipFallUp__9daPy_lk_cFv */ BOOL daPy_lk_c::procIceSlipFallUp() { /* Nonmatching */ } /* 8011970C-801197D4 .text procIceSlipAlmostFall_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procIceSlipAlmostFall_init() { /* Nonmatching */ } /* 801197D4-80119864 .text procIceSlipAlmostFall__9daPy_lk_cFv */ BOOL daPy_lk_c::procIceSlipAlmostFall() { /* Nonmatching */ } /* 80119864-801198E0 .text procBootsEquip_init__9daPy_lk_cFUs */ BOOL daPy_lk_c::procBootsEquip_init(u16) { /* Nonmatching */ } /* 801198E0-80119A5C .text procBootsEquip__9daPy_lk_cFv */ BOOL daPy_lk_c::procBootsEquip() { /* Nonmatching */ } /* 80119A5C-80119BA0 .text procNotUse_init__9daPy_lk_cFi */ BOOL daPy_lk_c::procNotUse_init(int) { /* Nonmatching */ } /* 80119BA0-80119DA0 .text procNotUse__9daPy_lk_cFv */ BOOL daPy_lk_c::procNotUse() { /* Nonmatching */ } /* 80119DA0-80119EBC .text getGroundAngle__9daPy_lk_cFP13cBgS_PolyInfos */ s16 daPy_lk_c::getGroundAngle(cBgS_PolyInfo*, s16) { /* Nonmatching */ } /* 80119EBC-8011A508 .text setLegAngle__9daPy_lk_cFfiPsPs */ void daPy_lk_c::setLegAngle(f32, int, s16*, s16*) { /* Nonmatching */ } /* 8011A508-8011ABB0 .text footBgCheck__9daPy_lk_cFv */ void daPy_lk_c::footBgCheck() { /* Nonmatching */ } /* 8011ABB0-8011AC78 .text setWaterY__9daPy_lk_cFv */ void daPy_lk_c::setWaterY() { /* Nonmatching */ } /* 8011AC78-8011AD9C .text autoGroundHit__9daPy_lk_cFv */ void daPy_lk_c::autoGroundHit() { /* Nonmatching */ } /* 8011AD9C-8011AE20 .text checkAttentionPosAngle__9daPy_lk_cFP10fopAc_ac_cPP4cXyz */ BOOL daPy_lk_c::checkAttentionPosAngle(fopAc_ac_c* actor, cXyz** pOutPos) { if (actor) { s16 targetAngle = cLib_targetAngleY(¤t.pos, &actor->eyePos); int angleDiff = cLib_distanceAngleS(targetAngle, m34DE); if (angleDiff <= 0x6000) { *pOutPos = &actor->eyePos; if (actor->group == fopAc_ENEMY_e) { onNoResetFlg1(daPyFlg1_UNK400); } return TRUE; } } return FALSE; } /* 8011AE20-8011BE08 .text setNeckAngle__9daPy_lk_cFv */ void daPy_lk_c::setNeckAngle() { /* Nonmatching */ } /* 8011BE08-8011BEA4 .text checkOriginalHatAnimation__9daPy_lk_cFv */ void daPy_lk_c::checkOriginalHatAnimation() { /* Nonmatching */ } /* 8011BEA4-8011CBA4 .text setHatAngle__9daPy_lk_cFv */ void daPy_lk_c::setHatAngle() { /* Nonmatching */ } /* 8011CBA4-8011CCF4 .text setMoveSlantAngle__9daPy_lk_cFv */ void daPy_lk_c::setMoveSlantAngle() { /* Nonmatching */ } /* 8011CCF4-8011CDB4 .text setWaistAngle__9daPy_lk_cFv */ void daPy_lk_c::setWaistAngle() { /* Nonmatching */ } /* 8011CDB4-8011D070 .text setWorldMatrix__9daPy_lk_cFv */ void daPy_lk_c::setWorldMatrix() { /* Nonmatching */ } /* 8011D070-8011D0E4 .text setAtParam__9daPy_lk_cFUli11dCcG_At_SplUcUcUcf */ void daPy_lk_c::setAtParam(u32 type, int atp, dCcG_At_Spl spl, u8 se, u8 hitMark, u8 cutType, f32 radius) { dCcD_Cps* cps = mAtCps; if (type == AT_TYPE_SWORD && checkNoResetFlg1(daPyFlg1_UNK8000)) { atp *= 2; } if (type != AT_TYPE_SWORD) { mCutCount = 0; } for (int i = 0; i < ARRAY_SIZE(mAtCps); i++, cps++) { cps->SetAtType(type); cps->SetAtAtp(atp); cps->SetAtSpl(spl); cps->SetAtSe(se); cps->SetAtHitMark(hitMark); cps->SetR(radius); } mCutType = cutType; offResetFlg0(daPyRFlg0_UNK8000000); offNoResetFlg0(daPyFlg0_UNK10000000); } /* 8011D0E4-8011D110 .text resetCurse__9daPy_lk_cFv */ void daPy_lk_c::resetCurse() { if (daPy_dmEcallBack_c::checkCurse()) { endDamageEmitter(); } } /* 8011D110-8011D4D0 .text checkLightHit__9daPy_lk_cFv */ void daPy_lk_c::checkLightHit() { /* Nonmatching */ static JGeometry::TVec3 normal_scale; static JGeometry::TVec3 boss_scale; } /* 8011D4D0-8011D6C4 .text setSwordAtCollision__9daPy_lk_cFv */ void daPy_lk_c::setSwordAtCollision() { /* Nonmatching */ } /* 8011D6C4-8011D788 .text getBlurTopRate__9daPy_lk_cFv */ f32 daPy_lk_c::getBlurTopRate() { if (mCurProc == daPyProc_DEMO_LAST_COMBO_e) { return 0.0f; } if (mEquipItem == daPyItem_SWORD_e) { if (checkNormalSwordEquip()) { return 0.5f; } else { return 1.0f; } } if (mEquipItem == daPyItem_BOKO_e) { if (mActorKeepEquip.getActor() == NULL) { return 0.0f; } else { daBoko_c* boko = (daBoko_c*)mActorKeepEquip.getActor(); if (mCurProc == daPyProc_JUMP_CUT_e || mCurProc == daPyProc_JUMP_CUT_LAND_e) { return boko->getJumpBlurRate(); } else { return boko->getBlurRate(); } } } return 0.0f; } /* 8011D788-8011EC0C .text setCollision__9daPy_lk_cFv */ void daPy_lk_c::setCollision() { /* Nonmatching */ } /* 8011EC0C-8011EEBC .text setAttentionPos__9daPy_lk_cFv */ void daPy_lk_c::setAttentionPos() { /* Nonmatching */ { static const Vec offset = {0.0f, 30.0f, 20.0f}; } { static const Vec offset = {0.0f, 70.0f, 0.0f}; } } /* 8011EEBC-8011EF94 .text setRoomInfo__9daPy_lk_cFv */ int daPy_lk_c::setRoomInfo() { /* Nonmatching */ } /* 8011EF94-8011F9C0 .text setDemoData__9daPy_lk_cFv */ void daPy_lk_c::setDemoData() { /* Nonmatching */ } /* 8011F9C0-8011FF50 .text setStickData__9daPy_lk_cFv */ void daPy_lk_c::setStickData() { /* Nonmatching */ } /* 8011FF50-801200F8 .text setBgCheckParam__9daPy_lk_cFv */ void daPy_lk_c::setBgCheckParam() { mAcchCir[0].SetWallH(30.1f); mAcchCir[1].SetWallH(89.9f); mAcchCir[2].SetWallH(125.0f); if (mCurProc == daPyProc_ROPE_SWING_START_e) { mAcchCir[0].SetWallH(-125.0f); mAcchCir[1].SetWallH(-89.9f); mAcchCir[2].SetWallH(0.0f); } else if (mCurProc == daPyProc_LARGE_DAMAGE_WALL_e || checkModeFlg(ModeFlg_CLIMB | ModeFlg_LADDER)) { mAcchCir[0].SetWallR(5.0f); } else if (checkModeFlg(ModeFlg_PUSHPULL)) { mAcchCir[0].SetWallR(40.0f); } else if (checkModeFlg(ModeFlg_WHIDE)) { mAcchCir[0].SetWallR(daPy_HIO_wall_c0::m.field_0x50); if (checkNoResetFlg0(daPyFlg0_UNK10000)) { mAcchCir[2].SetWallH(89.9f); } } else if (checkModeFlg(ModeFlg_SWIM)) { mAcchCir[0].SetWallR(67.5f); mAcchCir[0].SetWallH(-5.0f); mAcchCir[1].SetWallH(0.0f); mAcchCir[2].SetWallH(20.0f); } else if (checkModeFlg(ModeFlg_CRAWL) && mCurProc != daPyProc_CRAWL_END_e) { mAcchCir[0].SetWallR(30.0f); mAcchCir[0].SetWallH(10.0f); mAcchCir[1].SetWallH(50.0f); mAcchCir[2].SetWallH(50.0f); } else if (checkModeFlg(ModeFlg_HANG)) { mAcchCir[0].SetWallR(12.5f); mAcchCir[0].SetWallH(25.0f); mAcchCir[1].SetWallH(25.0f); mAcchCir[2].SetWallH(25.0f); } else if (checkGrabWear()) { mAcchCir[0].SetWallR(50.0f); } else { mAcchCir[0].SetWallR(35.0f); } mAcchCir[1].SetWallR(mAcchCir[0].GetWallR()); mAcchCir[2].SetWallR(mAcchCir[0].GetWallR()); } /* 801200F8-8012010C .text setParamData__9daPy_lk_cFiiii */ u32 daPy_lk_c::setParamData(int roomNo, int spawnType, int eventInfoIdx, int extraParams) { return roomNo & 0x3F | (spawnType & 0xF) << 0xC | eventInfoIdx << 0x18 | extraParams; } /* 8012010C-8012024C .text checkLavaFace__9daPy_lk_cFP4cXyzi */ BOOL daPy_lk_c::checkLavaFace(cXyz* oldPos, int attributeCode) { if (mDemo.getDemoType() == 5) { return FALSE; } if (oldPos != NULL) { cXyz pos(current.pos.x, oldPos->y + 20.0f, current.pos.z); mLavaGndChk.SetPos(&pos); m35D4 = dComIfG_Bgsp()->GroundCross(&mLavaGndChk); if (mAcch.GetGroundH() > m35D4) { m35D4 = -1000000000.0f; } if (m35D4 > current.pos.y) { attributeCode = dComIfG_Bgsp()->GetAttributeCode(mLavaGndChk); } else { return FALSE; } } if (attributeCode == dBgS_Attr_LAVA_e) { if (oldPos != NULL) { current.pos.y = m35D4; } if (checkBossGomaStage()) { return procLavaDamage_init(); } else { return dProcLavaDamage_init(); } } else if (attributeCode == dBgS_Attr_VOID_e) { startRestartRoom(5, 0xC9, -1.0f, 0); } return FALSE; } /* 8012024C-80120724 .text checkFallCode__9daPy_lk_cFv */ void daPy_lk_c::checkFallCode() { /* Nonmatching */ } /* 80120724-80120BBC .text startRestartRoom__9daPy_lk_cFUlifi */ BOOL daPy_lk_c::startRestartRoom(u32 mode, int eventInfoIdx, f32 param_3, int i_point) { if (!checkNoResetFlg0(daPyFlg0_UNK4000) && (i_point != 0 || dComIfGp_event_compulsory(this))) { mDemo.setOriginalDemoType(); if (i_point == 0) { mDemo.setDemoMode(1); } onNoResetFlg0(daPyFlg0_UNK4000); changePlayer(this); if (dComIfGp_getMiniGameType() == 1) { dComIfGp_setNextStage("sea", 1, 48); mDoAud_seStart(JA_SE_FORCE_BACK); daNpc_Sarace_c::ship_race_result = 3; mTinkleShieldTimer = 0; return TRUE; } else { u32 stageType = dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()); setDamagePoint(param_3); mTinkleShieldTimer = 0; if (stageType == dStageType_SEA_e && !dComIfGs_isEventBit(dSv_evtBit_c::RODE_KORL) && (current.roomNo == 11 || current.roomNo == 44) && dStage_chkPlayerId(0x80, current.roomNo)) { dComIfGp_setNextStage(dComIfGp_getStartStageName(), 0x80, current.roomNo, -1, 0.0f, mode); u32 roomParam = setParamData(-1, 0, eventInfoIdx, 0); dComIfGs_setRestartRoomParam(roomParam); mDoAud_seStart(JA_SE_FORCE_BACK); return TRUE; } if (checkNoResetFlg0(daPyFlg0_DEKU_SP_RETURN_FLG) && mCurProc != daPyProc_DEMO_DEAD_e) { i_point = mDekuSpRestartPoint; } else { i_point = mRestartPoint; if (i_point != 0xFF && !dComIfGs_checkSeaLandingEvent(current.roomNo)) { i_point = 0xFF; } } if (i_point == 0xFF) { if (stageType == dStageType_SEA_e) { cXyz* pos; if (dComIfGp_getShipActor()) { pos = &dComIfGp_getShipActor()->current.pos; } else { pos = ¤t.pos; } int quad_x = (1.0f/50000.0f) * (350000.0f + pos->x); int quad_z = (1.0f/50000.0f) * (350000.0f + pos->z); if (quad_x < 0) { quad_x = 0; } else if (quad_x > 13) { quad_x = 13; } if (quad_z < 0) { quad_z = 0; } else if (quad_z > 13) { quad_z = 13; } int subsector_z = quad_z & 1; int subsector_x = quad_x & 1; int sector_z = quad_z >> 1; int sector_x = quad_x >> 1; int sector_num = sector_z*7 + sector_x; int scls_idx = subsector_x + (sector_num << 2) + (subsector_z << 1); dStage_changeScene(scls_idx, 0.0f, mode, -1); } else { if (mCurProc == daPyProc_DEMO_DEAD_e) { dStage_changeScene(0, 0.0f, mode, -1); } else { int roomNo = dComIfGs_getRestartRoomNo(); u32 roomParam = setParamData(roomNo, 0, eventInfoIdx, 0); dStage_restartRoom(roomParam, mode); mDoAud_seStart(JA_SE_FORCE_BACK); } return TRUE; } } else if (checkNoResetFlg0(daPyFlg0_DEKU_SP_RETURN_FLG)) { dComIfGp_setNextStage(dComIfGp_getStartStageName(), i_point, 41, -1, 0.0f, mode); } else { dComIfGp_setNextStage(dComIfGp_getStartStageName(), i_point, current.roomNo, -1, 0.0f, mode); } if (mCurProc != daPyProc_DEMO_DEAD_e) { u32 roomParam = setParamData(-1, 0, eventInfoIdx, 0); dComIfGs_setRestartRoomParam(roomParam); mDoAud_seStart(JA_SE_FORCE_BACK); } return TRUE; } } return FALSE; } /* 80120BBC-80120BE0 .text checkSuccessGuard__9daPy_lk_cFi */ BOOL daPy_lk_c::checkSuccessGuard(int atSpl) { if (!mCyl.ChkTgShieldHit() || atSpl >= 8) { return FALSE; } return TRUE; } /* 80120BE0-80120F94 .text setShapeAngleOnGround__9daPy_lk_cFv */ void daPy_lk_c::setShapeAngleOnGround() { /* Nonmatching */ } /* 80120F94-801211B8 .text setStepsOffset__9daPy_lk_cFv */ void daPy_lk_c::setStepsOffset() { /* Nonmatching */ } /* 801211B8-8012135C .text setBeltConveyerPower__9daPy_lk_cFv */ void daPy_lk_c::setBeltConveyerPower() { /* Nonmatching */ } /* 8012135C-801216A8 .text setWindAtPower__9daPy_lk_cFv */ void daPy_lk_c::setWindAtPower() { /* Nonmatching */ } /* 801216A8-80121870 .text checkRoofRestart__9daPy_lk_cFv */ void daPy_lk_c::checkRoofRestart() { /* Nonmatching */ } /* 80121870-80122D30 .text execute__9daPy_lk_cFv */ BOOL daPy_lk_c::execute() { /* Nonmatching - regalloc */ if (setGetDemo()) { return TRUE; } if (checkNoResetFlg1(daPyFlg1_UNK200)) { fopMsgM_demoMsgFlagOn(); if (checkEndMessage(0x14A3)) { offNoResetFlg1(daPyFlg1_UNK200); dComIfGs_setEventReg(0x9EFF, 0); dComIfGp_event_reset(); mDemo.setDemoType(0); } return TRUE; } if (dComIfGs_checkBottle(FWATER_BOTTLE)) { if (dComIfGs_getFwaterTimer() == 0) { if (dComIfGp_event_compulsory(this)) { onNoResetFlg1(daPyFlg1_UNK200); dComIfGs_setBottleItemIn(FWATER_BOTTLE, BIN_IN_WATER); mDemo.setDemoType(5); m3628 = fpcM_ERROR_PROCESS_ID_e; if (mCurProc == daPyProc_SCOPE_e) { procWait_init(); } } } } if (checkNoControll()) { attention_info.flags = 0; fopAcM_SetStatusMap(this, 0x10); if (!dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { mStts.SetWeight(0xFF); mStts.ClrCcMove(); } else { mStts.SetWeight(120); } } else { attention_info.flags = ~0; fopAcM_SetStatusMap(this, 0x01); mStts.SetWeight(120); } if (checkEquipHeavyBoots() && dComIfGp_getSelectItem(dItemBtn_X_e) != dItem_IRON_BOOTS_e && dComIfGp_getSelectItem(dItemBtn_Y_e) != dItem_IRON_BOOTS_e && dComIfGp_getSelectItem(dItemBtn_Z_e) != dItem_IRON_BOOTS_e ) { offNoResetFlg0(daPyFlg0_EQUIP_HEAVY_BOOTS); } else if (checkEquipDragonShield() && dComIfGp_getSelectItem(dItemBtn_X_e) != dItem_MAGIC_ARMOR_e && dComIfGp_getSelectItem(dItemBtn_Y_e) != dItem_MAGIC_ARMOR_e && dComIfGp_getSelectItem(dItemBtn_Z_e) != dItem_MAGIC_ARMOR_e ) { offNoResetFlg1(daPyFlg1_EQUIP_DRAGON_SHIELD); } if (dComIfGp_event_runCheck()) { mStaffIdx = dComIfGp_evmng_getMyStaffId("Link", this); if (eventInfo.checkCommandDoor() && !dComIfGp_event_chkEventFlag(0x4) && mEquipItem == daPyItem_BOKO_e) { fopAc_ac_c* equipActor = mActorKeepEquip.getActor(); if (equipActor) { s16 angle = shape_angle.y + 0x8000; equipActor->speed.y = 0.0f; equipActor->speedF = 5.0f; equipActor->current.angle.y = angle; } deleteEquipItem(FALSE); } } current.pos = l_debug_keep_pos; shape_angle = l_debug_shape_angle; current.angle = l_debug_current_angle; mCameraInfoIdx = dComIfGp_getPlayerCameraID(0); m3748 = current.pos; if (mCurProc != daPyProc_HOOKSHOT_FLY_e && !dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && !checkModeFlg(ModeFlg_ROPE | ModeFlg_CLIMB | ModeFlg_LADDER) && mCurProc != daPyProc_DEMO_TOOL_e && mAcch.GetGroundH() != -1e9f && !checkNoResetFlg0((daPy_FLG0)(daPyFlg0_UNK20000000 | daPyFlg0_UNK80000000)) && dComIfG_Bgsp()->ChkPolySafe(mAcch.m_gnd) && dComIfG_Bgsp()->ChkMoveBG(mAcch.m_gnd) ) { dComIfG_Bgsp()->MoveBgCrrPos(mAcch.m_gnd, mAcch.ChkGroundHit(), ¤t.pos, ¤t.angle, &shape_angle); dComIfG_Bgsp()->MoveBgCrrPos(mAcch.m_gnd, mAcch.ChkGroundHit(), &old.pos, NULL, NULL); } cXyz oldPos = old.pos; m34DE = shape_angle.y; m35B4 = m35B0; m34EA = m34DC; dComIfGp_setDoStatus(0); dComIfGp_setRStatus(0); if (mEquipItem == daPyItem_BOKO_e) { dComIfGp_setAStatus(0x2F); } else if (checkSwordEquip()) { dComIfGp_setAStatus(0x35); } else { dComIfGp_setAStatus(0x00); } mFrontWallType = 0; if (checkResetFlg0(daPyRFlg0_POISON_CURSE)) { setDamageCurseEmitter(); } if (checkResetFlg0(daPyRFlg0_UNK8000000)) { mCutType = 0; } mResetFlg0 = 0; daPy_matAnm_c::decMorfFrame(); daPy_matAnm_c::decMabaTimer(); if (mCurProc == daPyProc_BOTTLE_SWING_e && eventInfo.checkCommandCatch()) { mDemo.setDemoType(5); } setActorPointer(); setAtnList(); fopAc_ac_c* zTarget = dComIfGp_getAttention().getZHintTarget(); if (zTarget) { stopDoButtonQuake(FALSE); } else { stopDoButtonQuake(TRUE); } if (m34C2 == 8) { if (m_old_fdata->getOldFrameMorfCounter() <= 0.0f) { m34C2 = 9; } } else { m34C2 = 0; } fopAc_ac_c* grabActor = mActorKeepGrab.getActor(); fopAc_ac_c* equipActor = mActorKeepEquip.getActor(); if (grabActor && !fopAcM_checkCarryNow(grabActor)) { freeGrabItem(); } if (mEquipItem == daPyItem_BOKO_e) { if (equipActor == NULL || !fopAcM_checkCarryNow(equipActor)) { deleteEquipItem(FALSE); } } if (!checkFreezeState()) { if (!checkNoResetFlg1(daPyFlg1_UNK40000000)) { animeUpdate(); } } else if (!checkNoResetFlg1(daPyFlg1_UNK40000)) { mDoGph_gInf_c::fadeIn(0.02f, l_freeze_fade_color); onNoResetFlg1(daPyFlg1_UNK40000); } setDemoData(); setStickData(); if (mEquipItem == dItem_GRAPPLING_HOOK_e && (mCurProc == daPyProc_ROPE_SUBJECT_e || mCurProc == daPyProc_ROPE_MOVE_e) && mActorKeepEquip.getActor() != NULL && fopAcM_GetParam(mActorKeepEquip.getActor()) == 2 ) { procRopeReady_init(); } if (mDemo.getDemoType() != 5) { if (!changeDemoProc() && !changeDeadProc() && mCurProc != daPyProc_DEMO_LAVA_DAMAGE_e && mCurProc != daPyProc_DEMO_FREEZE_DAMAGE_e ) { if (!changeAutoJumpProc()) { changeSwimProc(); } } changeDamageProc(); changeBoomerangCatchProc(); } checkItemAction(); if (mEquipItem == daPyItem_SWORD_e && (m34C4 == 2 || m34C4 == 3)) { if (mAtCps[0].ChkAtHit() || mAtCps[1].ChkAtHit() || mAtCps[2].ChkAtHit()) { m34C4 += 2; } } if (m3522 > 0) { m3522--; } else { m34C4 = 0; } setShieldGuard(); if (checkAtHitEnemy(&mAtCps[0]) || checkAtHitEnemy(&mAtCps[1]) || checkAtHitEnemy(&mAtCps[2])) { onNoResetFlg0(daPyFlg0_UNK10000000); } if (mCurProcFunc != NULL) { (this->*mCurProcFunc)(); } playTextureAnime(); cXyz sp14 = current.pos; posMove(); mOldSpeed = speed; cXyz sp8 = current.pos; mAcch.ClrGroundHit(); mAcch.CrrPos(*dComIfG_Bgsp()); setWaterY(); autoGroundHit(); checkLavaFace(&oldPos, dBgS_Attr_NORMAL_e); if (checkModeFlg(ModeFlg_SWIM)) { if (checkNoResetFlg0(daPyFlg0_UNK100) && !checkSwimFallCheck()) { current.pos.y = m35D0; } if (mCurProc != daPyProc_DEMO_DEAD_e) { if (mAcch.GetGroundH() + 84.9f > current.pos.y && mAcch.ChkGroundHit()) { current.pos.y = mAcch.GetGroundH() + 84.9f; if (speed.y < 0.0f) { speed.y = 0.0f; } } } else if (mAcch.ChkGroundHit()) { current.pos.y = mAcch.GetGroundH(); if (speed.y < 0.0f) { speed.y = 0.0f; } } } else if (mCurProc == daPyProc_DEMO_TOOL_e) { current.pos = sp14; if (m3574 != 0 && mAcch.GetGroundH() != -1e9f) { current.pos.y = mAcch.GetGroundH(); } } else if (mCurProc == daPyProc_HOOKSHOT_FLY_e || dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) || checkModeFlg(ModeFlg_ROPE | ModeFlg_LADDER | ModeFlg_CAUGHT) ) { current.pos = sp8; } else if (mCurProc == daPyProc_DEMO_DOOR_OPEN_e || mCurProc == daPyProc_HANG_WAIT_e || mCurProc == daPyProc_HANG_MOVE_e || mCurProc == daPyProc_HANG_UP_e || mCurProc == daPyProc_HANG_START_e || mCurProc == daPyProc_HANG_FALL_START_e ) { current.pos.x = sp8.x; current.pos.z = sp8.z; } int roomNo; if (mAcch.GetGroundH() != -1e9f) { roomNo = setRoomInfo(); m357C = m3580; m3580 = dComIfG_Bgsp()->GetGroundCode(mAcch.m_gnd); if (checkNoResetFlg0(daPyFlg0_UNK80000000)) { mCurrAttributeCode = dBgS_Attr_NORMAL_e; } else { mCurrAttributeCode = dComIfG_Bgsp()->GetAttributeCode(mAcch.m_gnd); } dStage_RoomCheck(&mAcch.m_gnd); checkFallCode(); if (mAcch.ChkGroundHit()) { if (!checkModeFlg(ModeFlg_HANG) && (mCurrAttributeCode == dBgS_Attr_LAVA_e || mCurrAttributeCode == dBgS_Attr_VOID_e)) { checkLavaFace(NULL, mCurrAttributeCode); } else { if (checkNoResetFlg0(daPyFlg0_UNK20000)) { onResetFlg0(daPyRFlg0_AUTO_JUMP_LAND); } offNoResetFlg0(daPyFlg0_UNK20000); if (checkNoResetFlg0(daPyFlg0_UNK400000)) { onResetFlg0(daPyRFlg0_UNK200); } offNoResetFlg0(daPyFlg0_UNK400000); if (current.pos.y < 2000.0f && dComIfG_Bgsp()->GetSpecialCode(mAcch.m_gnd) != 1) { cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd); if (triPla->GetNP()->y >= 0.5f) { offNoResetFlg0(daPyFlg0_DEKU_SP_RETURN_FLG); } } } if (!checkNoResetFlg0((daPy_FLG0)(daPyFlg0_UNK20000000 | daPyFlg0_UNK80000000)) && dComIfG_Bgsp()->ChkMoveBG(mAcch.m_gnd) ) { dComIfG_Bgsp()->MoveBgTransPos(mAcch.m_gnd, true, &m3724, NULL, NULL); } if (checkNoResetFlg0(daPyFlg0_UNK80000000)) { mMtrlSndId = 0; m34E2 = 0; } else { mMtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(mAcch.m_gnd); m34E2 = getGroundAngle(&mAcch.m_gnd, shape_angle.y); } if (checkModeFlg(ModeFlg_02000000)) { setShapeAngleOnGround(); } } else { if (checkModeFlg(ModeFlg_SWIM) && m3580 == 4) { startRestartRoom(5, 0xC9, -1.0f, 0); } m34E2 = 0; if (mCurProc == daPyProc_DEMO_TOOL_e) { mMtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(mAcch.m_gnd); } else if (mCurProc == daPyProc_SHIP_READY_e || mCurProc == daPyProc_SHIP_GET_OFF_e) { mMtrlSndId = 9; } else { mMtrlSndId = 0; } } if (mpSeAnmFrameCtrl) { f32 rate = mpSeAnmFrameCtrl->getRate(); f32 frame = mpSeAnmFrameCtrl->getFrame(); mJAIZelAnime.setAnimSound(¤t.pos, frame, rate, mMtrlSndId, mReverb); } if (!daPy_lk_c::checkPlayerFly() && mCurProc != daPyProc_DEMO_TOOL_e && (m34C3 == 1 || m34C3 == 4 || m34C3 == 0xA || m34C3 == 9) ) { setStepsOffset(); } u8 groupInfo = dComIfG_Bgsp()->GetGrpSoundId(mAcch.m_gnd); mDoAud_setLinkGroupInfo(groupInfo); } else { mRestartPoint = 0xFF; m34E2 = 0; mMtrlSndId = 0; m357C = m3580; m3580 = -1; mCurrAttributeCode = dBgS_Attr_UNK1B_e; roomNo = current.roomNo; checkFallCode(); } equipActor = mActorKeepEquip.getActor(); if (equipActor) { equipActor->tevStr.mRoomNo = tevStr.mRoomNo; equipActor->tevStr.mEnvrIdxOverride = tevStr.mEnvrIdxOverride; equipActor->current.roomNo = roomNo; } setWorldMatrix(); setWaistAngle(); if (m_old_fdata->getOldFrameFlg()) { footBgCheck(); } if (mCurProc != daPyProc_DAMAGE_e) { cLib_addCalcAngleS(&mBodyAngle.z, 0, 4, 0xC00, 0x180); if (mCurProc != daPyProc_FAN_GLIDE_e) { setMoveSlantAngle(); } if (!checkModeFlg(ModeFlg_SUBJECT)) { cLib_addCalcAngleS(&mBodyAngle.x, 0, 4, 0xC00, 0x180); } if (!checkModeFlg(ModeFlg_40000000)) { cLib_addCalcAngleS(&mBodyAngle.y, 0, 4, 0xC00, 0x180); } } setNeckAngle(); setHatAngle(); mpCLModelData->getJointNodePointer(0x00)->setMtxCalc(m_pbCalc[PART_UNDER_e]); // link_root joint mpCLModelData->getJointNodePointer(0x02)->setMtxCalc(m_pbCalc[PART_UPPER_e]); // body_chn joint mpCLModelData->getJointNodePointer(0x1D)->setMtxCalc(m_pbCalc[PART_UNDER_e]); // wash_chn joint checkOriginalHatAnimation(); static const Vec nsword_top = {45.0f, -31.0f, 0.0f}; static const Vec msword_top = {57.0f, 48.0f, 0.0f}; static const Vec boomerang_catch = {12.5f, 47.5f, 36.6f}; static const Vec hookshot_root = {22.0f, 0.0f, 0.0f}; static const Vec hammer_top = {160.0f, 70.0f, 0.0f}; static const Vec hammer_root = {8.0f, 0.0f, 0.0f}; static const Vec fan_top = {55.0f, 0.0f, 0.0f}; static const Vec head_offset = {40.0f, 0.0f, 0.0f}; mpCLModel->calc(); cMtx_multVec(mpCLModel->getAnmMtx(0x0F), &head_offset, &mHeadTopPos); checkRoofRestart(); mDoMtx_multVecZero(mpCLModel->getAnmMtx(0x08), &mLeftHandPos); mDoMtx_multVecZero(mpCLModel->getAnmMtx(0x0C), &mRightHandPos); cMtx_multVec(mpCLModel->getAnmMtx(0x00), &boomerang_catch, &m36F4); cMtx_multVec(mpCLModel->getAnmMtx(0x08), &hookshot_root, &mHookshotRootPos); mpKatsuraModel->setBaseTRMtx(mpCLModel->getAnmMtx(0x0F)); mpKatsuraModel->calc(); mpYamuModel->setBaseTRMtx(mpCLModel->getAnmMtx(0x0F)); mpYamuModel->calc(); setItemModel(); if (mCurProc == daPyProc_CUT_F_e || mCurProc == daPyProc_BT_VERTICAL_JUMP_CUT_e) { if (checkNormalSwordEquip()) { mpSwordTipStabModel->setBaseTRMtx(mpEquipItemModel->getAnmMtx(0x03)); } else { mpSwordTipStabModel->setBaseTRMtx(mpEquipItemModel->getAnmMtx(0x04)); } } cMtx_multVec(mpCLModel->getAnmMtx(0x13), &l_eye_offset, &eyePos); m36D0 = mSwordTopPos; m36DC = m36C4; if (mEquipItem == daPyItem_BOKO_e && mActorKeepEquip.getActor()) { daBoko_c* boko = static_cast(mActorKeepEquip.getActor()); boko->getTopPos(&mSwordTopPos); boko->getBlurRootPos(&m36C4); } else if (mEquipItem == dItem_SKULL_HAMMER_e) { cMtx_multVec(mpEquipItemModel->getBaseTRMtx(), &hammer_top, &mSwordTopPos); cMtx_multVec(mpEquipItemModel->getBaseTRMtx(), &hammer_root, &m36C4); } else if (mEquipItem == daPyItem_SWORD_e) { if (checkNormalSwordEquip()) { cMtx_multVec(mpEquipItemModel->getAnmMtx(0x01), &nsword_top, &mSwordTopPos); mDoMtx_multVecZero(mpEquipItemModel->getAnmMtx(0x02), &m36C4); } else { mDoMtx_multVecZero(mpEquipItemModel->getAnmMtx(0x01), &m36C4); cMtx_multVec(mpEquipItemModel->getAnmMtx(0x01), &msword_top, &mSwordTopPos); } } else if (mCurProc == daPyProc_FAN_SWING_e) { mDoMtx_multVecZero(mpEquipItemModel->getBaseTRMtx(), &m36C4); cMtx_multVec(mpEquipItemModel->getAnmMtx(0x06), &fan_top, &mSwordTopPos); } else { mDoMtx_multVecZero(mpCLModel->getAnmMtx(0x0D), &m36C4); mDoMtx_multVecZero(mpCLModel->getAnmMtx(0x0D), &mSwordTopPos); } checkLightHit(); setFootEffect(); setCollision(); setAttentionPos(); setGrabItemPos(); setWaterRipple(); setAuraEffect(); setHammerWaterSplash(); setLightSaver(); if (!checkNoResetFlg0((daPy_FLG0)(daPyFlg0_UNK20000000 | daPyFlg0_UNK80000000))) { if (mAcch.ChkGroundHit() && !daPy_lk_c::checkPlayerFly()) { eventInfo.onCondition(dEvtCnd_CANTALK_e | dEvtCnd_CANDOOR_e | dEvtCnd_CANGETITEM_e | dEvtCnd_UNK10_e | dEvtCnd_CANCATCH_e); } else if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) || (checkModeFlg(ModeFlg_SWIM) && checkNoResetFlg0(daPyFlg0_UNK100))) { eventInfo.onCondition(dEvtCnd_CANTALK_e); } } eventInfo.onCondition(dEvtCnd_CANGETITEM_e); JPABaseEmitter* emitter = mSmokeEcallBack.getEmitter(); if (emitter) { emitter->setGlobalRTMatrix(mpCLModel->getAnmMtx(0x23)); } setWaterDrop(); if (daPy_dmEcallBack_c::getTimer() > 0) { daPy_dmEcallBack_c::decTimer(); if (daPy_dmEcallBack_c::checkFlame()) { seStartOnlyReverb(JA_SE_LK_BURNING); mDoMtx_multVecZero(mpCLModel->getAnmMtx(0x00), &mLightInfluence.mPos); mLightInfluence.mPower = 150.0f; } else if (daPy_dmEcallBack_c::checkCurse()) { seStartOnlyReverb(JA_SE_LK_CURSE_BURNING); } if (daPy_dmEcallBack_c::getTimer() == 0) { endDamageEmitter(); } } offNoResetFlg1((daPy_FLG1)(daPyFlg1_NPC_CALL_COMMAND | daPyFlg1_VINE_CATCH)); if (dComIfGp_event_runCheck() || checkNoControll()) { dComIfGp_setDoStatus(0); dComIfGp_setRStatus(0); } else { if (dComIfGp_getDoStatus() == 0x43) { dComIfGp_setDoStatus(0x12); } if (checkResetFlg0(daPyRFlg0_UNK10000000)) { dComIfGp_setAStatus(0); } } offNoResetFlg1((daPy_FLG1)(daPyFlg1_UNK4 | daPyFlg1_FORCE_VOMIT_JUMP | daPyFlg1_FORCE_VOMIT_JUMP_SHORT | daPyFlg1_UNK10000000)); if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { mDoAud_setLinkOnBoard(1); fopAcM_OnStatus(this, fopAcStts_UNK4000_e); } else { mDoAud_setLinkOnBoard(2); fopAcM_OffStatus(this, fopAcStts_UNK4000_e); } mDoAud_setLinkHp(dComIfGs_getLife(), dComIfGs_getMaxLife()); mShieldFrontRangeYAngle = shape_angle.y + mBodyAngle.y; mFace = daPyFace_UNKNOWN; if (checkConfuse()) { seStartMapInfo(JA_SE_LK_NOW_CURSE_PW); } if (checkBowAnime()) { dComIfGp_setPlayerStatus0(0, daPyStts0_BOW_AIM_e); } else { dComIfGp_clearPlayerStatus0(0, daPyStts0_BOW_AIM_e); } m3634 = -1; l_debug_keep_pos = current.pos; l_debug_shape_angle = shape_angle; l_debug_current_angle = current.angle; return TRUE; } /* 80122D30-80122D50 .text daPy_Execute__FP9daPy_lk_c */ static BOOL daPy_Execute(daPy_lk_c* i_this) { return static_cast(i_this)->execute(); } /* 80122D50-80122D58 .text daPy_IsDelete__FP9daPy_lk_c */ static BOOL daPy_IsDelete(daPy_lk_c*) { return TRUE; } /* 80122D58-80123058 .text playerDelete__9daPy_lk_cFv */ BOOL daPy_lk_c::playerDelete() { int i; for (i = 0; i < (int)ARRAY_SIZE(m31E8); i++) { m31E8[i].getSmokeCallBack()->end(); m31E8[i].getOtherCallBack()->end(); } if (mFanSwingCb.mpEmitter) { mFanSwingCb.mpEmitter->clearStatus(0x40); mFanSwingCb.mpEmitter->setEmitterCallBackPtr(NULL); mFanSwingCb.mpEmitter = NULL; } m338C.end(); m33A8.end(); m3280.end(); m334C.end(); m336C.end(); mSwimTailEcallBack[0].remove(); mSwimTailEcallBack[1].remove(); m32E4.end(); m32F0.end(); m33E8.end(); mSmokeEcallBack.end(); m331C.end(); m332C.end(); m333C.end(); m3400.end(); m3410.end(); m3438.end(); m342C.end(); m3454.end(); m3460[0].end(); m3460[1].end(); endDamageEmitter(); dKy_plight_cut(&mLightInfluence); mDoAud_seDeleteObject(&mSwordTopPos); mDoAud_seDeleteObject(&mRopePos); mDoAud_seDeleteObject(&m338C.mPos); mDoAud_seDeleteObject(mFanWindCps.GetEndP()); for (i = 0; i < (int)ARRAY_SIZE(m_anm_heap_under); i++) { mDoExt_destroySolidHeap(m_anm_heap_under[i].mpAnimeHeap); } for (i = 0; i < (int)ARRAY_SIZE(m_anm_heap_upper); i++) { mDoExt_destroySolidHeap(m_anm_heap_upper[i].mpAnimeHeap); } mDoExt_destroySolidHeap(m_tex_anm_heap.mpAnimeHeap); mDoExt_destroySolidHeap(m_tex_scroll_heap.mpAnimeHeap); mDoExt_destroySolidHeap(mpItemHeaps[0]); mDoExt_destroySolidHeap(mpItemHeaps[1]); mDoExt_destroySolidHeap(mpItemAnimeHeap); mJAIZelAnime.stop(); if (checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES)) { *mpCurrLinktex = mOtherLinktex; } dComIfGp_clearPlayerStatus0(0, daPyStts0_BOOMERANG_WAIT_e); dComIfGp_clearPlayerStatus1(0, daPyStts1_UNK40000_e); g_dComIfG_gameInfo.play.field_0x4947 = 0; cancelNoDamageMode(); return TRUE; } /* 80123058-80123078 .text daPy_Delete__FP9daPy_lk_c */ static BOOL daPy_Delete(daPy_lk_c* i_this) { return static_cast(i_this)->playerDelete(); } /* 80123078-80123360 .text initTextureAnime__9daPy_lk_cFv */ void daPy_lk_c::initTextureAnime() { m_tex_anm_heap.m_buffer = new(0x20) u8[0x1000]; JUT_ASSERT(20869, m_tex_anm_heap.m_buffer != NULL); JKRReadIdxResource(m_tex_anm_heap.m_buffer, 0x1000, LKANM_BTP_TMABAA, dComIfGp_getAnmArchive()); J3DAnmTexPattern* btp = static_cast(J3DAnmLoaderDataBase::load(m_tex_anm_heap.m_buffer)); btp->searchUpdateMaterialID(mpCLModelData); u16 material_num = btp->getUpdateMaterialNum(); m_texNoAnms = new J3DTexNoAnm[material_num]; JUT_ASSERT(20885, m_texNoAnms != NULL); for (u16 i = 0; i < material_num; i++) { u16 matID = btp->getUpdateMaterialID(i); if (matID != 0xFFFF) { J3DMaterialAnm* mat_anm = new J3DMaterialAnm(); JUT_ASSERT(20894, mat_anm != NULL); if (matID != 1 && matID != 4) { // Not eyeL or eyeR (i.e. it's mouth, mayuL, or mayuR) // Set the animation on the specified material mpCLModelData->getMaterialNodePointer(matID)->change(); mpCLModelData->getMaterialNodePointer(matID)->setMaterialAnm(mat_anm); if (matID != 0xE) { // Not mouth (i.e. it's mayuL or mayuR) // Additionally, set the animation on mayuLdamA and mayuLdamB or mayuRdamA and mayuRdamB mpCLModelData->getMaterialNodePointer(matID+1)->change(); mpCLModelData->getMaterialNodePointer(matID+1)->setMaterialAnm(mat_anm); mpCLModelData->getMaterialNodePointer(matID+2)->change(); mpCLModelData->getMaterialNodePointer(matID+2)->setMaterialAnm(mat_anm); } } else { // eyeL or eyeR // Don't the animation on the specified material // Instead, set it on eyeLdamA and eyeLdamB or eyeRdamA and eyeRdamB mpCLModelData->getMaterialNodePointer(matID+1)->change(); mpCLModelData->getMaterialNodePointer(matID+1)->setMaterialAnm(mat_anm); mpCLModelData->getMaterialNodePointer(matID+2)->change(); mpCLModelData->getMaterialNodePointer(matID+2)->setMaterialAnm(mat_anm); } } m_texNoAnms[i].setAnmIndex(i); } } /* 80123360-80123830 .text initTextureScroll__9daPy_lk_cFv */ void daPy_lk_c::initTextureScroll() { /* Nonmatching - regalloc */ m_tex_scroll_heap.m_buffer = new(0x20) u8[0x800]; JUT_ASSERT(20944, m_tex_scroll_heap.m_buffer != NULL); JKRReadIdxResource(m_tex_scroll_heap.m_buffer, 0x800, LKANM_BTK_TMABA, dComIfGp_getAnmArchive()); J3DAnmTextureSRTKey* btk = static_cast(J3DAnmLoaderDataBase::load(m_tex_scroll_heap.m_buffer)); btk->searchUpdateMaterialID(mpCLModelData); u16 material_num = btk->getUpdateMaterialNum(); JUT_ASSERT(20958, material_num == 2); m_texMtxAnm = new J3DTexMtxAnm[material_num]; JUT_ASSERT(20961, m_texMtxAnm != NULL); for (u16 no = 0; no < material_num; no++) { u16 matID = btk->getUpdateMaterialID(no); if (matID != 0xFFFF) { m_tex_eye_scroll[no] = new daPy_matAnm_c(); JUT_ASSERT(20972, m_tex_eye_scroll[no] != NULL); mpCLModelData->getMaterialNodePointer(matID)->change(); mpCLModelData->getMaterialNodePointer(matID)->setMaterialAnm(m_tex_eye_scroll[no]); J3DMaterial* mtl = mpCLModelData->getMaterialNodePointer(matID); u8 texMtxID = btk->getUpdateTexMtxID(no); if (texMtxID != 0xFF) { J3DTexMtx* tmtx; if (mtl->getTexMtx(texMtxID) == NULL) { tmtx = new J3DTexMtx(); JUT_ASSERT(20984, tmtx != NULL); mtl->setTexMtx(no, tmtx); } if (mtl->getTexCoord(texMtxID) != NULL) { mtl->getTexCoord(texMtxID)->setTexGenMtx(GX_TEXMTX0 + (texMtxID & 0xFF) * 3); } tmtx = mtl->getTexMtx(no); m_texMtxAnm[no].setAnmTransform(btk); m_texMtxAnm[no].setAnmIndex(no); tmtx->getTexMtxInfo().mInfo = tmtx->getTexMtxInfo().mInfo & 0x7F | btk->getTexMtxCalcType() << 7; // Fakematch? The codegen doesn't match unless a temp variable is used and assigned to multiple times. Vec* temp = &btk->getSRTCenter(no); tmtx->getTexMtxInfo().mCenter.x = temp->x; temp = &btk->getSRTCenter(no); tmtx->getTexMtxInfo().mCenter.y = temp->y; temp = &btk->getSRTCenter(no); tmtx->getTexMtxInfo().mCenter.z = temp->z; JUT_ASSERT(21001, mtl->getMaterialAnm() != NULL); mtl->getMaterialAnm()->setTexMtxAnm(texMtxID, &m_texMtxAnm[no]); } } } } /* 80123834-8012469C .text createHeap__9daPy_lk_cFv */ BOOL daPy_lk_c::createHeap() { /* Nonmatching - daPy_HIO_c constructor */ J3DModelData* tmp_modelData; J3DAnmTransform* bck; J3DAnmTevRegKey* brk; int ret; mpCLModelData = initModel(&mpCLModel, LINK_BDL_CL, 0x37221222); tmp_modelData = initModel(&mpHandsModel, LINK_BDL_HANDS, 0x37221222); tmp_modelData = initModel(&mpKatsuraModel, LINK_BDL_KATSURA, 0x37221222); tmp_modelData = initModel(&mpYamuModel, LINK_BDL_YAMU, 0x37221222); tmp_modelData = initModel(&mpPringModel, LINK_BDL_PRING, 0x37221222); tmp_modelData = initModel(&mpSwgripaModel, LINK_BDL_SWGRIPA, 0x37221222); tmp_modelData = initModel(&mpSwgripmsModel, LINK_BDL_SWGRIPMS, 0x37221222); bck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, LINK_BCK_SWGRIPMSAB); ret = mSwgripmsabBckAnim.init(mpSwgripmsModel->getModelData(), bck, false, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false); if (!ret) { JUT_ASSERT(21046, FALSE); } mpTswgripmsabBrk = entryBrk(tmp_modelData, LINK_BRK_TSWGRIPMSAB); mpTswgripmsBtk = entryBtk(tmp_modelData, LINK_BTK_TSWGRIPMS); tmp_modelData = initModel(&mpPodmsModel, LINK_BDL_PODMS, 0x37221222); tmp_modelData = initModel(&mpShaModel, LINK_BDL_SHA, 0x37221222); bck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, LINK_BCK_ATNGSHA); ret = mAtngshaBck.init(mpShaModel->getModelData(), bck, false, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, false); if (!ret) { JUT_ASSERT(21063, FALSE); } tmp_modelData = initModel(&mpShmsModel, LINK_BDL_SHMS, 0x37221222); mpTshmsBtk = entryBtk(tmp_modelData, LINK_BTK_TSHMS); J3DSkinDeform* shmsSkinDeform = new J3DSkinDeform(); if (!shmsSkinDeform) { JUT_ASSERT(21077, FALSE); } if (mpShmsModel->setSkinDeform(shmsSkinDeform, 1) != J3DErrType_Success ) { JUT_ASSERT(21080, FALSE); } tmp_modelData = initModel(&mpYmsls00Model, LINK_BDL_YMSLS00, 0x13000222); mpYmsls00Btk = entryBtk(tmp_modelData, LINK_BTK_YMSLS00); tmp_modelData = initModel(&mpHbootsModels[0], LINK_BDL_HBOOTS, 0x37221222); tmp_modelData = initModel(&mpHbootsModels[1], LINK_BDL_HBOOTS, 0x37221222); tmp_modelData = initModel(&mpSuimenMunyaModel, LINK_BDL_SUIMEN_MUNYA, 0x11001222); mpSuimenMunyaBtk = entryBtk(tmp_modelData, LINK_BTK_SUIMEN_MUNYA); tmp_modelData = initModel(&mpYuchw00Model, LINK_BDL_YUCHW00, 0x13000222); bck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, LINK_BCK_YUCHW00); ret = mYuchw00Bck.init(tmp_modelData, bck, 1, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false); if (!ret) { JUT_ASSERT(21113, FALSE); } mpYuchw00Btk = entryBtk(tmp_modelData, LINK_BTK_YUCHW00); mpYuchw00Brk = entryBrk(tmp_modelData, LINK_BRK_YUCHW00); mpYuchw00Brk->setFrame(mpYuchw00Brk->getFrameMax()-0.001f); tmp_modelData = initModel(&mpYbafo00Model, LINK_BDL_YBAFO00, 0x13000222); mpYbafo00Btk = entryBtk(tmp_modelData, LINK_BTK_YBAFO00); mpYbafo00Btk->setFrame(mpYbafo00Btk->getFrameMax()-0.001f); tmp_modelData = static_cast(dComIfG_getObjectRes(l_arcName, LINK_BDL_YAURA00)); JUT_ASSERT(21130, tmp_modelData != NULL); daPy_aura_c* aura_p = mMagicArmorAuraEntries; for (int i = 0; i < 6; i++) { aura_p->setModel(mDoExt_J3DModel__create(tmp_modelData, 0x00080000, 0x11001222)); JUT_ASSERT(21139, aura_p->getModel() != NULL); aura_p++; } mpYaura00Btk = entryBtk(tmp_modelData, LINK_BTK_YAURA00); brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, LINK_BRK_YAURA00_R); ret = mYaura00rBrk.init(tmp_modelData, brk, false, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); if (!ret) { JUT_ASSERT(21147, FALSE); } mYaura00rBrk.entryFrame(0.0f); tmp_modelData = initModel(&mpYmgcs00Model, LINK_BDL_YMGCS00, 0x11001222); mpYmgcs00Btk = entryBtk(tmp_modelData, LINK_BTK_YMGCS00); brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, LINK_BRK_YMGCS00_MS); ret = mYmgcs00Brk.init(tmp_modelData, brk, false, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); if (!ret) { JUT_ASSERT(21161, FALSE); } mYmgcs00Brk.entryFrame(0.0f); tmp_modelData = static_cast(dComIfG_getObjectRes(l_arcName, LINK_BDL_BOMB)); JUT_ASSERT(21169, tmp_modelData != NULL); mpBombBrk = entryBrk(tmp_modelData, LINK_BRK_BOMB); tmp_modelData = static_cast(dComIfG_getObjectRes(l_arcName, LINK_BDL_GWP00)); JUT_ASSERT(21176, tmp_modelData != NULL); mpGwp00BrkData = entryBrk(tmp_modelData, LINK_BRK_GWP00); mpGwp00BtkData = entryBtk(tmp_modelData, LINK_BTK_GWP00); tmp_modelData = static_cast(dComIfG_getObjectRes(l_arcName, LINK_BDL_ARROW)); JUT_ASSERT(21184, tmp_modelData != NULL); mpIceArrowBtk = entryBtk(tmp_modelData, LINK_BTK_TTIPICE); tmp_modelData = static_cast(dComIfG_getObjectRes(l_arcName, LINK_BDL_ARROWGLITTER)); JUT_ASSERT(21191, tmp_modelData != NULL); mpLightArrowBtk = entryBtk(tmp_modelData, LINK_BTK_TARROWGLITTER); tmp_modelData = static_cast(dComIfG_getObjectRes(l_arcName, LINK_BDL_GICER00)); JUT_ASSERT(21198, tmp_modelData != NULL); mpGicer00Btk = entryBtk(tmp_modelData, LINK_BTK_GICER00); tmp_modelData = static_cast(dComIfG_getObjectRes(l_arcName, LINK_BDL_GICER01)); JUT_ASSERT(21205, tmp_modelData != NULL); mpGicer01Btk = entryBtk(tmp_modelData, LINK_BTK_GICER01); const int numCLJoints = 0x2A; m_old_fdata = new mDoExt_MtxCalcOldFrame(new J3DTransformInfo[numCLJoints], new Quaternion[numCLJoints]); JUT_ASSERT(21233, m_old_fdata != NULL); m_pbCalc[PART_UNDER_e] = new mDoExt_MtxCalcAnmBlendTblOld(m_old_fdata, ARRAY_SIZE(mAnmRatioUnder), mAnmRatioUnder); JUT_ASSERT(21239, m_pbCalc[PART_UNDER_e] != NULL); m_pbCalc[PART_UPPER_e] = new mDoExt_MtxCalcAnmBlendTblOld(m_old_fdata, ARRAY_SIZE(mAnmRatioUpper), mAnmRatioUpper); JUT_ASSERT(21245, m_pbCalc[PART_UPPER_e] != NULL); initTextureScroll(); initTextureAnime(); m_HIO = new daPy_HIO_c(); JUT_ASSERT(21254, m_HIO != NULL); m_anm_heap_under[UNDER_MOVE0_e].m_buffer = new(0x20) u8[0xB400]; JUT_ASSERT(21259, m_anm_heap_under[UNDER_MOVE0_e].m_buffer != NULL); m_sanm_buffer = new(0x20) u8[0x200]; JUT_ASSERT(21266, m_sanm_buffer != NULL); m_item_bck_buffer = new(0x20) u8[0x1000]; JUT_ASSERT(21269, m_item_bck_buffer != NULL); return TRUE; } /* 8012469C-801249F8 .text createAnimeHeap__9daPy_lk_cFPP12JKRSolidHeapQ29daPy_lk_c14daPy_HEAP_TYPE */ void daPy_lk_c::createAnimeHeap(JKRSolidHeap** pHeap, daPy_HEAP_TYPE heapType) { u32 heapSize; // TODO: Should these heap sizes be sizeof()s instead of magic numbers? if (heapType == HEAP_TYPE_ITEM_ANIME_e) { heapSize = 0x50; } else if (heapType == HEAP_TYPE_UNDER_UPPER_e || heapType == HEAP_TYPE_TEXTURE_ANIME_e) { heapSize = 0x40; } else { // heapType == HEAP_TYPE_TEXTURE_SCROLL_e heapSize = 0xA0; } *pHeap = mDoExt_createSolidHeapFromGameToCurrent(heapSize, 0x20); if (heapType == HEAP_TYPE_ITEM_ANIME_e) { mDoExt_transAnmBas* tmp_trans_bas = new mDoExt_transAnmBas(NULL); JUT_ASSERT(21307, tmp_trans_bas != NULL); } else if (heapType == HEAP_TYPE_UNDER_UPPER_e) { J3DAnmTransformKey* tmp_trans = new J3DAnmTransformKey; JUT_ASSERT(21310, tmp_trans != NULL); } else if (heapType == HEAP_TYPE_TEXTURE_ANIME_e) { J3DAnmTexPattern* tmp_tp = new J3DAnmTexPattern; JUT_ASSERT(21313, tmp_tp != NULL); } else { // heapType == HEAP_TYPE_TEXTURE_SCROLL_e J3DAnmTextureSRTKey* tmp_tk = new J3DAnmTextureSRTKey; JUT_ASSERT(21316, tmp_tk != NULL); } mDoExt_restoreCurrentHeap(); mDoExt_adjustSolidHeap(*pHeap); } /* 80124A40-80124B30 .text initModel__9daPy_lk_cFPP8J3DModeliUl */ J3DModelData* daPy_lk_c::initModel(J3DModel** i_model, int i_fileIndex, u32 i_differedDlistFlag) { J3DModelData* tmp_modelData; tmp_modelData = static_cast(dComIfG_getObjectRes(l_arcName, i_fileIndex)); JUT_ASSERT(21340, tmp_modelData != NULL); *i_model = mDoExt_J3DModel__create(tmp_modelData, 0x00080000, i_differedDlistFlag); JUT_ASSERT(21344, *i_model != NULL); return tmp_modelData; } /* 80124B30-80124BE4 .text entryBtk__9daPy_lk_cFP12J3DModelDatai */ J3DAnmTextureSRTKey* daPy_lk_c::entryBtk(J3DModelData*, int) { /* Nonmatching */ } /* 80124BE4-80124C98 .text entryBrk__9daPy_lk_cFP12J3DModelDatai */ J3DAnmTevRegKey* daPy_lk_c::entryBrk(J3DModelData*, int) { /* Nonmatching */ } /* 80124C98-80125CC8 .text playerInit__9daPy_lk_cFv */ void daPy_lk_c::playerInit() { if (!fopAcM_entrySolidHeap(this, daPy_createHeap, 0xB0000)) { JUT_ASSERT(0x53B6, FALSE); } fopAcM_SetMtx(this, mpCLModel->getBaseTRMtx()); mpCLModel->setUserArea(reinterpret_cast(this)); mpYmgcs00Model->setUserArea(reinterpret_cast(this)); for (u16 i = 0; i < mpYmgcs00Model->getModelData()->getJointNum(); i++) { mpYmgcs00Model->getModelData()->getJointNodePointer(i)->setCallBack(daPy_auraCallback); } mpCLModelData->getJointNodePointer(0x01)->setCallBack(daPy_jointCallback0); // center joint mpCLModelData->getJointNodePointer(0x0D)->setCallBack(daPy_jointCallback0); // cl_podA joint mpCLModelData->getJointNodePointer(0x04)->setCallBack(daPy_jointCallback0); // chest_jnt joint mpCLModelData->getJointNodePointer(0x08)->setCallBack(daPy_jointCallback0); // cl_LhandA joint mpCLModelData->getJointNodePointer(0x0C)->setCallBack(daPy_jointCallback0); // cl_RhandA joint mpCLModelData->getJointNodePointer(0x1C)->setCallBack(daPy_jointCallback0); // hatC_jnt mpCLModelData->getJointNodePointer(0x0F)->setCallBack(daPy_jointCallback0); // head_jnt mpCLModelData->getJointNodePointer(0x00)->setCallBack(daPy_jointCallback0); // link_root joint mpCLModelData->getJointNodePointer(0x28)->setCallBack(daPy_jointCallback1); // cl_back joint m_pbCalc[PART_UNDER_e]->setUserArea(reinterpret_cast(this)); m_pbCalc[PART_UNDER_e]->setBeforeCalc(daPy_jointBeforeCallback); m_pbCalc[PART_UNDER_e]->setAfterCalc(daPy_jointAfterCallback); m_pbCalc[PART_UPPER_e]->setUserArea(reinterpret_cast(this)); m_pbCalc[PART_UPPER_e]->setBeforeCalc(daPy_jointBeforeCallback); m_pbCalc[PART_UPPER_e]->setAfterCalc(daPy_jointAfterCallback); int i; J3DMaterial* mtl = mpCLModelData->getJointNodePointer(0x13)->getMesh(); // cl_eye joint int zoff_blend_cnt = 0; int zoff_none_cnt = 0; int zon_cnt = 0; for (i = 0; i < 2; i++) { while (mtl) { mtl->setMaterialMode(1); if (mtl->getZMode()->getCompareEnable() == 0) { // TODO: debug map indicates J3DBlend::getType inline was used if (mtl->getBlend()->mBlendMode == GX_BM_BLEND) { mpZOffBlendShape[zoff_blend_cnt] = mtl->getShape(); zoff_blend_cnt++; JUT_ASSERT(0x53EE, zoff_blend_cnt <= 4); } else { mpZOffNoneShape[zoff_none_cnt] = mtl->getShape(); zoff_none_cnt++; JUT_ASSERT(0x53F2, zoff_none_cnt <= 4); } } else { mpZOnShape[zon_cnt] = mtl->getShape(); zon_cnt++; JUT_ASSERT(0x53F6, zon_cnt <= 4); } mtl = mtl->getNext(); } mtl = mpCLModelData->getJointNodePointer(0x15)->getMesh(); // cl_mayu joint } JUT_ASSERT(0x53FD, zon_cnt == 4); JUT_ASSERT(0x53FE, zoff_none_cnt == 4); JUT_ASSERT(0x53FF, zoff_blend_cnt == 4); mpLhandShape = mpCLModelData->getJointNodePointer(0x08)->getMesh()->getShape(); // cl_LhandA joint mpRhandShape = mpCLModelData->getJointNodePointer(0x0C)->getMesh()->getShape(); // cl_RhandA joint J3DModelData* handsModelData = mpHandsModel->getModelData(); for (u16 i = 0x01; i < 0x0B; i++) { handsModelData->getJointNodePointer(i)->getMesh()->getShape()->hide(); } u32 buffer_start = reinterpret_cast(m_anm_heap_under[UNDER_MOVE0_e].m_buffer) + 0x2400; m_anm_heap_under[UNDER_MOVE1_e].m_buffer = reinterpret_cast(buffer_start); buffer_start = reinterpret_cast(m_anm_heap_under[UNDER_MOVE0_e].m_buffer) + 0x4800; m_anm_heap_upper[UPPER_MOVE0_e].m_buffer = reinterpret_cast(buffer_start); for (int i = UPPER_MOVE1_e; i <= UPPER_MOVE2_e; i++) { buffer_start = reinterpret_cast(m_anm_heap_upper[UPPER_MOVE0_e].m_buffer) + i*0x2400; m_anm_heap_upper[i].m_buffer = reinterpret_cast(buffer_start); } mAcch.Set(¤t.pos, &old.pos, this, ARRAY_SIZE(mAcchCir), mAcchCir, &speed, ¤t.angle, &shape_angle); mAcch.ClrWaterNone(); mAcch.SetWaterCheckOffset(500.0f); mAcch.OnLineCheck(); mAcch.ClrRoofNone(); mAcch.SetRoofCrrHeight(125.0f); mMaxNormalSpeed = daPy_HIO_move_c0::m.field_0x18; gravity = daPy_HIO_autoJump_c0::m.field_0xC; maxFallSpeed = daPy_HIO_autoJump_c0::m.field_0x10; mAcchCir[0].SetWall(30.1f, 35.0f); mAcchCir[1].SetWall(89.9f, 35.0f); mAcchCir[2].SetWall(125.0f, 35.0f); mHeadTopPos.setall(0.0f); mHeight = 125.0f; mEquipItem = daPyItem_NONE_e; mKeepItem = daPyItem_NONE_e; mCameraInfoIdx = dComIfGp_getPlayerCameraID(0); mpAttention = &dComIfGp_getAttention(); mStts.Init(120, 0xFF, this); mCyl.Set(l_cyl_src); mCyl.SetStts(&mStts); mCyl.OnTgShieldFrontRange(); mShieldFrontRangeYAngle = shape_angle.y + mBodyAngle.y; mCyl.SetTgShieldFrontRangeYAngle(&mShieldFrontRangeYAngle); mWindCyl.Set(l_wind_cyl_src); mWindCyl.SetStts(&mStts); mLightCyl.Set(l_wind_cyl_src); mLightCyl.SetStts(&mStts); mLightCyl.SetTgType(AT_TYPE_LIGHT); mAtCps[0].Set(l_at_cps_src); mAtCps[0].SetStts(&mStts); mAtCps[1].Set(l_at_cps_src); mAtCps[1].SetStts(&mStts); mAtCps[2].Set(l_at_cps_src); mAtCps[2].SetStts(&mStts); mAtCyl.Set(l_at_cyl_src); mAtCyl.SetStts(&mStts); mFanWindCps.Set(l_fan_wind_cps_src); mFanWindCps.SetR(70.0f); mFanWindCps.SetStts(&mStts); mFanWindSph.Set(l_fan_wind_sph_src); mFanWindSph.SetStts(&mStts); mFanLightCps.Set(l_fan_wind_cps_src); mFanLightCps.SetStts(&mStts); mFanLightCps.SetAtType(AT_TYPE_LIGHT); mFanLightCps.SetR(20.0f); for (int i = 0; i < (int)ARRAY_SIZE(m_anm_heap_under); i++) { createAnimeHeap(&m_anm_heap_under[i].mpAnimeHeap, HEAP_TYPE_UNDER_UPPER_e); m_anm_heap_under[i].mIdx = -1; m_anm_heap_under[i].field_0x2 = -1; m_anm_heap_under[i].field_0x4 = -1; } for (int i = 0; i < (int)ARRAY_SIZE(m_anm_heap_upper); i++) { createAnimeHeap(&m_anm_heap_upper[i].mpAnimeHeap, HEAP_TYPE_UNDER_UPPER_e); m_anm_heap_upper[i].mIdx = -1; m_anm_heap_upper[i].field_0x2 = -1; m_anm_heap_upper[i].field_0x4 = -1; } createAnimeHeap(&m_tex_anm_heap.mpAnimeHeap, HEAP_TYPE_TEXTURE_ANIME_e); m_tex_anm_heap.mIdx = -1; m_tex_anm_heap.field_0x2 = -1; m_tex_anm_heap.field_0x4 = -1; m_tex_anm_heap.field_0x6 = -1; createAnimeHeap(&m_tex_scroll_heap.mpAnimeHeap, HEAP_TYPE_TEXTURE_SCROLL_e); m_tex_scroll_heap.mIdx = -1; m_tex_scroll_heap.field_0x2 = -1; m_tex_scroll_heap.field_0x4 = -1; m_tex_scroll_heap.field_0x6 = -1; mSeAnmIdx = -1; m34F0 = -1; mpItemHeaps[0] = mDoExt_createSolidHeapFromGameToCurrent(0xE600, 0x20); u8* dummy_data = new u8[0xE600]; JUT_ASSERT(0x5493, dummy_data != NULL); mDoExt_restoreCurrentHeap(); mDoExt_adjustSolidHeap(mpItemHeaps[0]); mpItemHeaps[1] = mDoExt_createSolidHeapFromGameToCurrent(0xE600, 0x20); dummy_data = new u8[0xE600]; JUT_ASSERT(0x5499, dummy_data != NULL); mDoExt_restoreCurrentHeap(); mDoExt_adjustSolidHeap(mpItemHeaps[1]); createAnimeHeap(&mpItemAnimeHeap, HEAP_TYPE_ITEM_ANIME_e); mActorKeepEquip.clearData(); mActorKeepThrow.clearData(); mActorKeepGrab.clearData(); mActorKeepRope.clearData(); m3628 = fpcM_ERROR_PROCESS_ID_e; m3634 = fpcM_ERROR_PROCESS_ID_e; mTactZevPartnerPID = fpcM_ERROR_PROCESS_ID_e; m3630 = fpcM_ERROR_PROCESS_ID_e; ResTIMG* blur_img = (ResTIMG*)dComIfG_getObjectRes(l_arcName, LINK_BTI_BLUR); mSwBlur.mpTex = blur_img; current.angle.z = 0; shape_angle.z = 0; m3526 = 8; m3648.w = 1.0f; resetSeAnime(); ResTIMG* tmp_tex = (ResTIMG*)dComIfG_getObjectRes("Always", ALWAYS_I4_BALL128B); JUT_ASSERT(0x54B7, tmp_tex != NULL); mSightPacket.setSightTex(tmp_tex); ResTIMG* tmp_img = (ResTIMG*)dComIfG_getObjectRes(l_arcName, LINK_BTI_ROCK_MARK); JUT_ASSERT(0x54BD, tmp_img != NULL); void* tmp_img_data = reinterpret_cast(reinterpret_cast(tmp_img) + tmp_img->imageOffset); mSightPacket.setLockTex(tmp_img_data); mSightPacket.setImage(tmp_img); int startMode = getStartMode(); u8 lastMode = dComIfGs_getLastSceneMode(); if (startMode == 0xE) { mEventIdx = dComIfGp_evmng_startDemo(0xD4); } else if (startMode == 0xC) { mEventIdx = dComIfGp_evmng_startDemo(0xD0); } else if (startMode == 0x6) { mEventIdx = dComIfGp_evmng_startDemo(0xCF); } else if (startMode == 0xA) { mEventIdx = dComIfGp_evmng_startDemo(0xD2); } else if (startMode == 0xB) { mEventIdx = dComIfGp_evmng_startDemo(0xD3); } else if (startMode == 0x9 || lastMode == 0x6) { mEventIdx = dComIfGp_evmng_startDemo(0xCB); } else if (startMode == 0x2 && (lastMode == 0x4 || lastMode == 0x5)) { mEventIdx = dComIfGp_evmng_startDemo(0xC9); } else if (startMode == 0xF) { mEventIdx = dComIfGp_evmng_startDemo(0xD5); } else { mEventIdx = dComIfGp_evmng_startDemo(getStartEvent()); } onNoResetFlg0(daPyFlg0_UNK100); mLavaGndChk.OffWaterGrp(); mDemo.setStick(1.0f); endDamageEmitter(); mMirrorPacket.init(NULL); mLightInfluence.mColor.r = 600; mLightInfluence.mColor.g = 400; mLightInfluence.mColor.b = 120; mLightInfluence.mFluctuation = 250.0f; mLightInfluence.mPos = current.pos; mLightInfluence.mPower = 0.0f; dKy_plight_set(&mLightInfluence); m352E = 900; mFace = daPyFace_UNKNOWN; m34DE = shape_angle.y; ResTIMG* linktex_casual = (ResTIMG*)dComIfG_getObjectRes(l_arcName, LINK_BTI_LINKTEXBCI4); int num_linktex_headers_seen = 0; J3DTexture* texture = mpCLModelData->getTexture(); JUT_ASSERT(0x5504, texture != NULL); JUTNameTab* textureName = mpCLModelData->getTextureName(); JUT_ASSERT(0x5506, textureName != NULL); for (u16 i = 0; i < texture->getNum(); i++) { const char* texName = textureName->getName(i); if (strcmp(texName, "linktexS3TC") != 0) { continue; } if (num_linktex_headers_seen == 0) { // Link's model's TEX1 section has two headers for the linktexS3TC texture. // They seem identical except the first has alpha enabled and the second does not. // The second is the one that is actually used, so we have to skip over the first one. num_linktex_headers_seen += 1; continue; } mpCurrLinktex = texture->getResTIMG(i); mOtherLinktex = *mpCurrLinktex; // Modify the linktexS3TC texture in Link's model to be the casual clothes texture. texture->setResTIMG(i, *linktex_casual); if (!dComIfGs_isEventBit(0x2A80) || dComIfGs_getClearCount() != 0) { onNoResetFlg1(daPyFlg1_CASUAL_CLOTHES); } if (checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES)) { break; } // If Link isn't wearing the casual clothes, then load the hero's clothes texture from the backup and swap them. ResTIMG casualLinktex = *mpCurrLinktex; *mpCurrLinktex = mOtherLinktex; mOtherLinktex = casualLinktex; break; } } /* 80125CC8-80125D30 .text phase_1__FP9daPy_lk_c */ int phase_1(daPy_lk_c* i_this) { dComIfGp_setPlayer(0, i_this); dComIfGp_setLinkPlayer(i_this); fopAcM_setStageLayer(i_this); i_this->attention_info.flags = ~0; i_this->attention_info.position.x = i_this->current.pos.x; i_this->attention_info.position.y = i_this->current.pos.y + 125.0f; i_this->attention_info.position.z = i_this->current.pos.z; return cPhs_NEXT_e; } /* 80125D30-80125DB4 .text phase_2__FP9daPy_lk_c */ int phase_2(daPy_lk_c* i_this) { int result; if (dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)) == NULL) { result = cPhs_INIT_e; } else { fopAcM_SetupActor(i_this, daPy_lk_c); i_this->playerInit(); result = cPhs_NEXT_e; } return result; } /* 80125DB4-80126F00 .text __ct__9daPy_lk_cFv */ daPy_lk_c::daPy_lk_c() {} /* 80126F00-8012704C .text __dt__15daPy_footData_cFv */ daPy_footData_c::~daPy_footData_c() {} /* 8012704C-80127160 .text __ct__15daPy_footData_cFv */ daPy_footData_c::daPy_footData_c() { /* Nonmatching - regalloc */ } /* 80127160-80127B50 .text makeBgWait__9daPy_lk_cFv */ int daPy_lk_c::makeBgWait() { /* Nonmatching */ return cPhs_NEXT_e; } /* 80127B50-80127B70 .text phase_3__FP9daPy_lk_c */ int phase_3(daPy_lk_c* i_this) { return i_this->makeBgWait(); } /* 80127B70-80127BA0 .text daPy_Create__FP10fopAc_ac_c */ static s32 daPy_Create(fopAc_ac_c* i_this) { static int (*l_method[4])(daPy_lk_c*) = { phase_1, phase_2, phase_3, NULL, }; daPy_lk_c* a_this = (daPy_lk_c*)i_this; return dComLbG_PhaseHandler(a_this->getPhase(), (cPhs__Handler*)l_method, a_this); } /* 80127BA0-80127CC0 .text setSeAnime__9daPy_lk_cFPC14daPy_anmHeap_cP12J3DFrameCtrl */ void daPy_lk_c::setSeAnime(const daPy_anmHeap_c* anmHeap, J3DFrameCtrl* frameCtrl) { if (reinterpret_cast(anmHeap->m_buffer)->mSeAnmOffset == -1) { resetSeAnime(); } else if (mSeAnmIdx == anmHeap->mIdx && m34F0 == anmHeap->field_0x6 && mSeAnmRate * frameCtrl->getRate() >= 0.0f) { mpSeAnmFrameCtrl = frameCtrl; } else { JUTDataFileHeader* fileHeader = reinterpret_cast(anmHeap->m_buffer); u32 data_size = fileHeader->mFileSize - fileHeader->mSeAnmOffset; const u32 l_sanm_buffer_size = 0x200; JUT_ASSERT(22318, data_size < l_sanm_buffer_size); u8* seAnmPtr = reinterpret_cast(anmHeap->m_buffer) + fileHeader->mSeAnmOffset; cLib_memCpy(m_sanm_buffer, seAnmPtr, data_size); mpSeAnmFrameCtrl = frameCtrl; mSeAnmIdx = anmHeap->mIdx; m34F0 = anmHeap->field_0x6; mSeAnmRate = frameCtrl->getRate(); initSeAnime(); } } /* 80127CC0-80127DEC .text initSeAnime__9daPy_lk_cFv */ void daPy_lk_c::initSeAnime() { if (mpSeAnmFrameCtrl) { s16 loop = mpSeAnmFrameCtrl->getLoop(); u32 direction = mpSeAnmFrameCtrl->getRate() >= 0.0f ? 1 : -1; mJAIZelAnime.initActorAnimSound(m_sanm_buffer, direction, loop); } if (mpSeAnmFrameCtrl->getAttribute() == J3DFrameCtrl::LOOP_REPEAT_e) { f32 position = mpSeAnmFrameCtrl->getFrame() - mpSeAnmFrameCtrl->getRate(); if (position <= mpSeAnmFrameCtrl->getStart()) { position = mpSeAnmFrameCtrl->getEnd() - position; } else if (position >= mpSeAnmFrameCtrl->getEnd()) { position = position - mpSeAnmFrameCtrl->getEnd(); } mJAIZelAnime.setPlayPosition(position); } } /* 80127DEC-80127E08 .text resetSeAnime__9daPy_lk_cFv */ void daPy_lk_c::resetSeAnime() { mSeAnmIdx = -1; m34F0 = -1; mpSeAnmFrameCtrl = NULL; } /* 80127E08-8012821C .text setMoveAnime__9daPy_lk_cFfffQ29daPy_lk_c8daPy_ANMQ29daPy_lk_c8daPy_ANMif */ void daPy_lk_c::setMoveAnime(f32, f32, f32, daPy_ANM, daPy_ANM, int, f32) { /* Nonmatching */ } /* 8012821C-80128494 .text setSingleMoveAnime__9daPy_lk_cFQ29daPy_lk_c8daPy_ANMffsf */ BOOL daPy_lk_c::setSingleMoveAnime(daPy_ANM anm, f32 rate, f32 start, s16 end, f32 param_5) { const daPy_anmIndex_c* anmData = getAnmData(anm); J3DAnmTransform* under_bck; J3DAnmTransform* upper_bck; getUnderUpperAnime(anmData, &under_bck, &upper_bck, 0, 0xB400); m_anm_heap_under[UNDER_MOVE1_e].mIdx = -1; m_anm_heap_upper[UPPER_MOVE1_e].mIdx = -1; mAnmRatioUpper[UPPER_MOVE0_e].setRatio(1.0f); mAnmRatioUpper[UPPER_MOVE1_e].setRatio(0.0f); mAnmRatioUnder[UNDER_MOVE0_e].setRatio(1.0f); mAnmRatioUnder[UNDER_MOVE1_e].setRatio(0.0f); mAnmRatioUnder[UNDER_MOVE0_e].setAnmTransform(under_bck); mAnmRatioUnder[UNDER_MOVE1_e].setAnmTransform(NULL); s16 endUnder = end < 0 ? under_bck->getFrameMax() : end; f32 frame = rate < 0.0f ? endUnder-0.001f : start; setFrameCtrl(&mFrameCtrlUnder[UNDER_MOVE0_e], under_bck->getAttribute(), start, endUnder, rate, frame); under_bck->setFrame(frame); if (upper_bck) { mAnmRatioUpper[UPPER_MOVE0_e].setAnmTransform(upper_bck); s16 endUpper = end < 0 ? upper_bck->getFrameMax() : end; frame = rate < 0.0f ? endUpper-0.001f : start; // Note: It uses under_bck->getAttribute() again here instead of using upper_bck->getAttribute(). setFrameCtrl(&mFrameCtrlUpper[UPPER_MOVE0_e], under_bck->getAttribute(), start, endUpper, rate, frame); upper_bck->setFrame(frame); } else { mAnmRatioUpper[UPPER_MOVE0_e].setAnmTransform(under_bck); } mAnmRatioUpper[UPPER_MOVE1_e].setAnmTransform(NULL); if (param_5 >= 0.0f) { m_old_fdata->initOldFrameMorf(param_5, 0, 0x2A); } setTextureAnime(mAnmDataTable[anm].mTexAnmIdx, 0); setHandModel(anm); setSeAnime(&m_anm_heap_under[UNDER_MOVE0_e], &mFrameCtrlUnder[UNDER_MOVE0_e]); m34C3 = 0; return TRUE; } /* 80128494-801285F8 .text setActAnimeUpper__9daPy_lk_cFUsQ29daPy_lk_c10daPy_UPPERffsf */ BOOL daPy_lk_c::setActAnimeUpper(u16 bckIdx, daPy_UPPER upperIdx, f32 rate, f32 start, s16 end, f32 f30) { J3DAnmTransform* bck = getAnimeResource(&m_anm_heap_upper[upperIdx], bckIdx, 0x2400); resetPriTextureAnime(); mAnmRatioUpper[upperIdx].setAnmTransform(bck); mAnmRatioUpper[upperIdx].setRatio(1.0f); if (end < 0) { end = bck->getFrameMax(); } f32 frame = rate < 0.0f ? end - 0.001f : start; setFrameCtrl(&mFrameCtrlUpper[upperIdx], bck->getAttribute(), start, end, rate, frame); bck->setFrame(frame); if (f30 >= 0.0f) { m_old_fdata->initOldFrameMorf(f30, 2, 0x1D); } return TRUE; } /* 801285F8-801286C0 .text resetActAnimeUpper__9daPy_lk_cFQ29daPy_lk_c10daPy_UPPERf */ BOOL daPy_lk_c::resetActAnimeUpper(daPy_UPPER upperIdx, f32 f31) { if (checkDashDamageAnime()) { mDamageWaitTimer = daPy_HIO_dam_c0::m.field_0x0; } mAnmRatioUpper[upperIdx].setAnmTransform(NULL); mAnmRatioUpper[upperIdx].setRatio(0.0f); m_anm_heap_upper[upperIdx].mIdx = -1; mFrameCtrlUpper[upperIdx].init(0); if (f31 >= 0.0f) { m_old_fdata->initOldFrameMorf(f31, 2, 0x1D); } resetPriTextureAnime(); deleteArrow(); return TRUE; } /* 801286C0-801287E8 .text animeUpdate__9daPy_lk_cFv */ void daPy_lk_c::animeUpdate() { J3DAnmTransform* underPack0 = getNowAnmPackUnder(UNDER_MOVE0_e); J3DAnmTransform* underPack1 = getNowAnmPackUnder(UNDER_MOVE1_e); J3DAnmTransform* upperPack0 = getNowAnmPackUpper(UPPER_MOVE0_e); J3DAnmTransform* upperPack1 = getNowAnmPackUpper(UPPER_MOVE1_e); mFrameCtrlUnder[UNDER_MOVE0_e].update(); underPack0->setFrame(mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()); if (underPack1) { mFrameCtrlUnder[UNDER_MOVE1_e].update(); underPack1->setFrame(mFrameCtrlUnder[UNDER_MOVE1_e].getFrame()); } if (upperPack0 && upperPack0 != underPack0) { mFrameCtrlUpper[UPPER_MOVE0_e].update(); upperPack0->setFrame(mFrameCtrlUpper[UPPER_MOVE0_e].getFrame()); } if (upperPack1 && upperPack1 != underPack1) { mFrameCtrlUpper[UPPER_MOVE1_e].update(); upperPack1->setFrame(mFrameCtrlUpper[UPPER_MOVE1_e].getFrame()); } // Bug? This loop starts past the end of the array and immediately stops, without running a single iteration. // Maybe the array used to be more than 2 elements long but was shrank later. for (int i = 2; i < 2; i++) { J3DAnmTransform* underPack2 = getNowAnmPackUnder((daPy_UNDER)i); if (underPack2) { mFrameCtrlUnder[i].update(); underPack2->setFrame(mFrameCtrlUnder[i].getFrame()); } } J3DAnmTransform* upperPack2 = getNowAnmPackUpper(UPPER_MOVE2_e); if (upperPack2) { mFrameCtrlUpper[UPPER_MOVE2_e].update(); upperPack2->setFrame(mFrameCtrlUpper[UPPER_MOVE2_e].getFrame()); } if (mpParachuteFanMorf) { mpParachuteFanMorf->play(NULL, 0, 0); } } /* 801287E8-8012887C .text simpleAnmPlay__9daPy_lk_cFP10J3DAnmBase */ void daPy_lk_c::simpleAnmPlay(J3DAnmBase*) { /* Nonmatching */ } /* 8012887C-801288A0 .text setHandModel__9daPy_lk_cFQ29daPy_lk_c8daPy_ANM */ void daPy_lk_c::setHandModel(daPy_ANM anmIdx) { mLeftHandIdx = mAnmDataTable[anmIdx].mLeftHandIdx; mRightHandIdx = mAnmDataTable[anmIdx].mRightHandIdx; } /* 801288A0-8012894C .text getAnmData__9daPy_lk_cCFQ29daPy_lk_c8daPy_ANM */ const daPy_anmIndex_c* daPy_lk_c::getAnmData(daPy_ANM anm) const { if (mEquipItem == daPyItem_SWORD_e) { if (anm < (s32)ARRAY_SIZE(mSwordAnmIndexTable)) { return &mSwordAnmIndexTable[anm]; } } else if (mEquipItem == daPyItem_BOKO_e) { if (anm < (s32)ARRAY_SIZE(mBokoAnmIndexTable)) { return &mBokoAnmIndexTable[anm]; } } else if (mEquipItem == dItem_SKULL_HAMMER_e) { if (anm < (s32)ARRAY_SIZE(mHammerAnmIndexTable)) { return &mHammerAnmIndexTable[anm]; } } else if (mEquipItem == dItem_BOOMERANG_e || mEquipItem == dItem_DEKU_LEAF_e || mEquipItem == dItem_TELESCOPE_e) { if (anm == ANM_DASH) { return &mSwordAnmIndexTable[anm]; } } return &mAnmDataTable[anm].mAnmIdx; } /* 8012894C-80128988 .text checkGrabWeapon__9daPy_lk_cFi */ BOOL daPy_lk_c::checkGrabWeapon(int r4) { if (mEquipItem == daPyItem_BOKO_e && mActorKeepEquip.getActor() != NULL) { daBoko_c* boko = (daBoko_c*)mActorKeepEquip.getActor(); if (r4 == 6 || fopAcM_GetParam(boko) == r4) { return TRUE; } } return FALSE; } /* 80128988-801289A8 .text onDekuSpReturnFlg__9daPy_lk_cFUc */ void daPy_lk_c::onDekuSpReturnFlg(u8 i_point) { if (i_point != 0xFF) { mDekuSpRestartPoint = i_point; } onNoResetFlg0(daPyFlg0_DEKU_SP_RETURN_FLG); } /* 801289A8-80128AA4 .text changeTextureAnime__9daPy_lk_cFUsUsi */ void daPy_lk_c::changeTextureAnime(u16 btpIdx, u16 btkIdx, int r7) { if (!dComIfGp_event_runCheck()) { return; } if (r7 == -1) { if (m_tex_anm_heap.field_0x4 != btpIdx || m_tex_anm_heap.field_0x6 != 0xFFFE) { m_tex_anm_heap.field_0x4 = btpIdx; m_tex_anm_heap.field_0x6 = 0xFFFE; setTextureAnimeResource(loadTextureAnimeResource(btpIdx, FALSE), 0); } if (m_tex_scroll_heap.field_0x4 != btkIdx || m_tex_scroll_heap.field_0x6 != 0xFFFE) { m_tex_scroll_heap.field_0x4 = btkIdx; m_tex_scroll_heap.field_0x6 = 0xFFFE; setTextureScrollResource(loadTextureScrollResource(btkIdx, FALSE), 0); } } else { setDemoTextureAnime(btpIdx, btkIdx, 0, r7); } } /* 80128AA4-80128B50 .text setThrowDamage__9daPy_lk_cFP4cXyzsffi */ BOOL daPy_lk_c::setThrowDamage(cXyz* r4, s16 r5, f32 f30, f32 f31, int r6) { setPlayerPosAndAngle(r4, r5); mVelocity = f30; speed.y = f31; setDamagePoint(-r6); onNoResetFlg0(daPyFlg0_UNK1000000); return TRUE; } /* 80128B50-80128C10 .text setPlayerPosAndAngle__9daPy_lk_cFP4cXyzs */ void daPy_lk_c::setPlayerPosAndAngle(cXyz*, s16) { /* Nonmatching */ } /* 80128C10-80128CE4 .text setPlayerPosAndAngle__9daPy_lk_cFP4cXyzP5csXyz */ void daPy_lk_c::setPlayerPosAndAngle(cXyz*, csXyz*) { /* Nonmatching */ } /* 80128CE4-80128DC0 .text setPlayerPosAndAngle__9daPy_lk_cFPA4_f */ void daPy_lk_c::setPlayerPosAndAngle(MtxP) { /* Nonmatching */ } /* 80128DC0-80128F8C .text endDemoMode__9daPy_lk_cFv */ void daPy_lk_c::endDemoMode() { /* Nonmatching */ } /* 80128F8C-8012901C .text getBokoFlamePos__9daPy_lk_cFP4cXyz */ BOOL daPy_lk_c::getBokoFlamePos(cXyz* outPos) { if (mEquipItem == daPyItem_BOKO_e) { daBoko_c* boko = (daBoko_c*)fopAcM_SearchByID(mActorKeepEquip.getID()); if (boko && boko->m2C4 != 0) { // maybe daBoko_c::getFlameTimer inline *outPos = mSwordTopPos; return TRUE; } } return FALSE; } static actor_method_class2 l_daPy_Method = { (process_method_func)daPy_Create, (process_method_func)daPy_Delete, (process_method_func)daPy_Execute, (process_method_func)daPy_IsDelete, (process_method_func)daPy_Draw, }; actor_process_profile_definition2 g_profile_PLAYER = { /* LayerID */ fpcLy_CURRENT_e, /* ListID */ 5, /* ListPrio */ fpcPi_CURRENT_e, /* ProcName */ PROC_PLAYER, /* Proc SubMtd */ &g_fpcLf_Method.base, /* Size */ sizeof(daPy_lk_c), /* SizeOther */ 0, /* Parameters */ 0, /* Leaf SubMtd */ &g_fopAc_Method.base, /* Priority */ 0x0068, /* Actor SubMtd */ (actor_method_class*)&l_daPy_Method, /* Status */ fopAcStts_FREEZE_e, /* Group */ fopAc_PLAYER_e, /* CullType */ fopAc_CULLBOX_0_e, /* field_0x30 */ 2, };