diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index fe5e40108..45a433b21 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -158,6 +158,7 @@ public: daPyRFlg0_GRAB_PUT_START = 0x00400000, daPyRFlg0_TACT_INPUT = 0x01000000, daPyRFlg0_FAIRY_USE = 0x02000000, + daPyRFlg0_UNK4000000 = 0x04000000, daPyRFlg0_UNK8000000 = 0x08000000, daPyRFlg0_UNK10000000 = 0x10000000, daPyRFlg0_ARROW_SHOOT = 0x20000000, diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h index 5d3135c71..13f3bc214 100644 --- a/include/d/actor/d_a_player_main.h +++ b/include/d/actor/d_a_player_main.h @@ -986,7 +986,7 @@ public: void checkItemAction(); void getSlidePolygon(); BOOL checkJumpCutFromButton(); - void orderTalk(); + int orderTalk(); BOOL checkNextActionFromButton(); void setShieldGuard(); BOOL checkItemModeActorPointer(); @@ -1627,7 +1627,7 @@ public: BOOL procPullMove(); int changeBottleDrinkFace(int); void setBottleModel(u16); - void makeFairy(cXyz*, u32); + fopAc_ac_c* makeFairy(cXyz*, u32); BOOL procBottleDrink_init(u16); BOOL procBottleDrink(); BOOL procBottleOpen_init(u16); diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 2b7b48c61..5a98d8a77 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -377,6 +377,9 @@ public: void setItemBombNumCount(s16 num) { mItemBombNumCount += num; } + u16 getItemNowLife() { return mItemNowLife; } + void setItemNowLife(u16 life) { mItemNowLife = life; } + f32 getItemLifeCount() { return mItemLifeCount; } void setItemLifeCount(f32 num) { mItemLifeCount += num; } @@ -684,7 +687,7 @@ public: /* 0x491E */ s16 mAuctionRupee; /* 0x4920 */ s16 mAuctionGauge; /* 0x4922 */ s16 mItemTimer; - /* 0x4924 */ s16 mItemNowLife; + /* 0x4924 */ u16 mItemNowLife; /* 0x4926 */ s16 mItemNowRupee; /* 0x4928 */ bool mItemSwimTimerStatus; /* 0x4929 */ u8 field_0x4929; @@ -2226,6 +2229,14 @@ inline void dComIfGp_setMessageSetNumber(s16 num) { g_dComIfG_gameInfo.play.setMessageSetNumber(num); } +inline u16 dComIfGp_getItemNowLife() { + return g_dComIfG_gameInfo.play.getItemNowLife(); +} + +inline void dComIfGp_setItemNowLife(u16 life) { + g_dComIfG_gameInfo.play.setItemNowLife(life); +} + inline f32 dComIfGp_getItemLifeCount() { return g_dComIfG_gameInfo.play.getItemLifeCount(); } diff --git a/src/d/actor/d_a_player_bottle.inc b/src/d/actor/d_a_player_bottle.inc index 09b123b3d..a9cd9ee87 100644 --- a/src/d/actor/d_a_player_bottle.inc +++ b/src/d/actor/d_a_player_bottle.inc @@ -2,34 +2,92 @@ * d_a_player_bottle.inc * * Code relating to various bottled items and bottle interactions. - * - * This file is not a standalone translation unit and is instead directly + * + * This file is not a standalone translation unit and is instead directly * included into d_a_player_main.cpp. - * - * The original name of this file is not known, but a best guess was taken + * + * The original name of this file is not known, but a best guess was taken * based on the original names of the functions it contains. */ -#include "d/actor/d_a_player_main.h" -#include "d/actor/d_a_player_HIO.h" -#include "d/d_camera.h" -#include "d/d_procname.h" + #include "d/actor/d_a_player_main.h" + #include "d/actor/d_a_player_HIO.h" + #include "d/d_camera.h" + #include "d/d_procname.h" + #include "JSystem/J3DGraphLoader/J3DAnmLoader.h" /* 80151E40-80151E60 .text changeBottleDrinkFace__9daPy_lk_cFi */ int daPy_lk_c::changeBottleDrinkFace(int param_0) { - if ((param_0 == 0x55) || (param_0 == 0x54)) { + if ((param_0 == dItem_SOUP_BOTTLE_e) || (param_0 == dItem_HALF_SOUP_BOTTLE_e)) { return true; } return false; } /* 80151E60-80152128 .text setBottleModel__9daPy_lk_cFUs */ -void daPy_lk_c::setBottleModel(u16) { - /* Nonmatching */ +void daPy_lk_c::setBottleModel(u16 param_0) { + mEquipItem = param_0; + JKRHeap* oldHeap = setItemHeap(); + J3DModelData* tmp_modelData = initModel(&mpEquipItemModel, LINK_BDL_BOTTLEEMP, 0x37221222); + u8* buffer = new (0x20) u8[0x400]; + JKRReadIdxResource(buffer, 0x400, LKANM_BTK_TBOTTLE, dComIfGp_getAnmArchive()); + mpEquipItemBtk = static_cast(J3DAnmLoaderDataBase::load(buffer)); + mpEquipItemBtk->setFrame(0.0f); + mpEquipItemBtk->searchUpdateMaterialID(tmp_modelData); + tmp_modelData->entryTexMtxAnimator(mpEquipItemBtk); + if ((param_0 == dItem_RED_POTION_e) || (param_0 == dItem_GREEN_POTION_e) || + (param_0 == dItem_BLUE_POTION_e) || (param_0 == dItem_HALF_SOUP_BOTTLE_e) || + (param_0 == dItem_SOUP_BOTTLE_e) || (param_0 == dItem_WATER_BOTTLE_e) || + (param_0 == dItem_FOREST_WATER_e)) + { + u16 bdl; + if (param_0 == dItem_HALF_SOUP_BOTTLE_e) { + bdl = LINK_BDL_BINLIQUIDH; + } else { + bdl = LINK_BDL_BINLIQUID; + } + tmp_modelData = initModel(&mpBottleContentsModel, bdl, 0x13000022); + buffer = new (0x20) u8[0x400]; + JKRReadIdxResource(buffer, 0x400, LKANM_BRK_TBINLIQUID, dComIfGp_getAnmArchive()); + mpEquipItemBrk = static_cast(J3DAnmLoaderDataBase::load(buffer)); + if (param_0 == dItem_RED_POTION_e) { + mpEquipItemBrk->setFrame(0.0f); + } else if (param_0 == dItem_GREEN_POTION_e) { + mpEquipItemBrk->setFrame(1.0f); + } else if (param_0 == dItem_BLUE_POTION_e) { + mpEquipItemBrk->setFrame(2.0f); + } else if ((param_0 == dItem_SOUP_BOTTLE_e) || (param_0 == dItem_HALF_SOUP_BOTTLE_e)) { + mpEquipItemBrk->setFrame(4.0f); + } else { + mpEquipItemBrk->setFrame(3.0f); + } + mpEquipItemBrk->searchUpdateMaterialID(tmp_modelData); + tmp_modelData->entryTevRegAnimator(mpEquipItemBrk); + } else if (param_0 == dItem_FAIRY_BOTTLE_e) { + tmp_modelData = initModel(&mpBottleContentsModel, LINK_BDL_BINFAIRY, 0x13000022); + } else if (param_0 == dItem_FIREFLY_BOTTLE_e) { + tmp_modelData = initModel(&mpBottleContentsModel, LINK_BDL_BINHO, 0x13000022); + buffer = new (0x20) u8[0x400]; + JKRReadIdxResource(buffer, 0x400, LKANM_BRK_TBINHO, dComIfGp_getAnmArchive()); + mpEquipItemBrk = static_cast(J3DAnmLoaderDataBase::load(buffer)); + mpEquipItemBrk->searchUpdateMaterialID(tmp_modelData); + tmp_modelData->entryTevRegAnimator(mpEquipItemBrk); + m3600 = 0.0f; + } + if ((param_0 != dItem_EMPTY_BOTTLE_e) && (mCurProc != daPyProc_BOTTLE_DRINK_e)) { + tmp_modelData = initModel(&mpBottleCapModel, LINK_BDL_BOTTLECAP, 0x13000022); + m355E = 1; + } + mDoExt_setCurrentHeap(oldHeap); + if (param_0 == dItem_FOREST_WATER_e) { + m32F0.makeEmitter(dPa_name::ID_COMMON_020D, mpEquipItemModel->getBaseTRMtx(), ¤t.pos, + NULL); + } + return; } /* 80152128-801521A0 .text makeFairy__9daPy_lk_cFP4cXyzUl */ -void daPy_lk_c::makeFairy(cXyz* param_0, u32 param_1) { +fopAc_ac_c* daPy_lk_c::makeFairy(cXyz* param_0, u32 param_1) { onResetFlg0(daPyRFlg0_FAIRY_USE); resetCurse(); fopAcM_fastCreate(PROC_NPC_FA1, param_1, param_0, fopAcM_GetRoomNo(this), &shape_angle); @@ -67,7 +125,78 @@ BOOL daPy_lk_c::procBottleDrink_init(u16 param_0) { /* 80152300-80152624 .text procBottleDrink__9daPy_lk_cFv */ BOOL daPy_lk_c::procBottleDrink() { - /* Nonmatching */ + /* Nonmatching - sdata2 */ + static const GXColor red = {0xC8, 0x00, 0x00, 0xFF}; + static const GXColor green = {0x00, 0xFA, 0x00, 0xFF}; + static const GXColor blue = {0x00, 0x32, 0x96, 0xFF}; + + setShipRidePosUseItem(); + J3DFrameCtrl& frameCtrl = mFrameCtrlUnder[UNDER_MOVE0_e]; + u16 uVar1 = m_anm_heap_under[UNDER_MOVE0_e].mIdx; + if (uVar1 == LKANM_BCK_BINDRINKPRE) { + if (frameCtrl.getRate() < 0.01f) { + setSingleMoveAnime(ANM_BINDRINKING, daPy_HIO_bottle_c0::m.field_0x64, 0.0f, -1, 0.0f); + if (changeBottleDrinkFace(mEquipItem)) { + setTextureAnime(0x86, 0); + } + if (mEquipItem != dItem_GREEN_POTION_e) { + dComIfGp_setItemLifeCount(dComIfGs_getMaxLife()); + } + if (mEquipItem != dItem_RED_POTION_e) { + dComIfGp_setItemMagicCount(dComIfGs_getMaxMagic()); + } + if ((mEquipItem == dItem_SOUP_BOTTLE_e) || (mEquipItem == dItem_HALF_SOUP_BOTTLE_e)) { + onNoResetFlg1(daPyFlg1_UNK8000); + } + resetCurse(); + } else { + if (frameCtrl.checkPass(65.0f)) { + voiceStart(39); + } + } + } else if (uVar1 == LKANM_BCK_BINDRINKING) { + if ((dComIfGp_getItemNowLife() == dComIfGs_getLife()) && + (dComIfGs_getMagic() == g_dComIfG_gameInfo.play.field_0x48da)) + { + setSingleMoveAnime(ANM_BINDRINKAFTER, 1.0f, daPy_HIO_bottle_c0::m.field_0x68, + daPy_HIO_bottle_c0::m.field_0xE, daPy_HIO_bottle_c0::m.field_0x6C); + if (changeBottleDrinkFace(mEquipItem)) { + setTextureAnime(0x87, 0); + } + if (mEquipItem == dItem_SOUP_BOTTLE_e) { + setBottleModel(dItem_HALF_SOUP_BOTTLE_e); + dComIfGs_setEquipBottleItemIn(mReadyItemBtn, dItem_HALF_SOUP_BOTTLE_e); + } else { + mpBottleContentsModel = NULL; + dComIfGs_setEquipBottleItemEmpty(mReadyItemBtn); + } + const GXColor* p_Var3; + if ((mEquipItem != dItem_SOUP_BOTTLE_e) && (mEquipItem != dItem_HALF_SOUP_BOTTLE_e)) { + if (mEquipItem == dItem_RED_POTION_e) { + p_Var3 = &red; + } else if (mEquipItem == dItem_GREEN_POTION_e) { + p_Var3 = &green; + } else { + p_Var3 = &blue; + } + m33A8.makeEmitterColor(dPa_name::ID_COMMON_0057, mpCLModel->getAnmMtx(0x12), + ¤t.pos, &shape_angle, p_Var3, NULL); + } + } else { + if (frameCtrl.checkPass(10.0f)) { + voiceStart(39); + } + } + } else if (frameCtrl.getRate() < 0.01f) { + dComIfGp_event_reset(); + dCam_getBody()->EndEventCamera(fopAcM_GetID(this)); + endDemoMode(); + } else { + if (frameCtrl.checkPass(8.0f)) { + voiceStart(40); + } + } + return true; } /* 80152624-801527CC .text procBottleOpen_init__9daPy_lk_cFUs */ @@ -132,7 +261,7 @@ BOOL daPy_lk_c::procBottleSwing_init(int param_0) { commonProcInit(daPyProc_BOTTLE_SWING_e); if ((int)param_0 != 0) { deleteEquipItem(FALSE); - setBottleModel(0x50); + setBottleModel(dItem_EMPTY_BOTTLE_e); } current.angle.y = shape_angle.y; mVelocity = 0.0f; @@ -177,7 +306,68 @@ BOOL daPy_lk_c::procBottleSwing_init(int param_0) { /* 80153064-80153338 .text procBottleSwing__9daPy_lk_cFv */ BOOL daPy_lk_c::procBottleSwing() { - /* Nonmatching */ + setShipRidePosUseItem(); + if (m3570 == 0) { + if (eventInfo.checkCommandCatch()) { + m3570 = 1; + u8 bVar5 = dComIfGp_event_getPreItemNo(); + if (bVar5 == dItem_WATER_BOTTLE_e) { + seStartOnlyReverb(JA_SE_LK_SCOOP_WATER); + if (!strcmp(dComIfGp_getStartStageName(), "Omori")) { + bVar5 = dItem_FOREST_WATER_e; + if (dComIfGs_checkBottle(89)) { + m3628 = fpcM_ERROR_PROCESS_ID_e; + m3574 = 1; + } else { + dComIfGs_getpItemRecord()->resetTimer(36000); + } + } + } + if (m3574 == 0) { + setBottleModel(bVar5); + dComIfGs_setEquipBottleItemIn(mReadyItemBtn, mEquipItem); + m355E = 0; + } + mDemo.setDemoType(5); + } else { + if ((((mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() >= 1.0f) && + (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() <= 4.0f)) && + (getReadyItem() == dItem_EMPTY_BOTTLE_e)) && + ((dComIfGp_att_getCatghTarget() != NULL) || (m35D0 > current.pos.y + 10.0f))) + { + fopAcM_orderCatchEvent(this, dComIfGp_att_getCatghTarget()); + } + } + } + if ((mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) || (m34D4 != 0)) { + if (m3574 != 0) { + if (m34D4 == 0) { + offModeFlg(ModeFlg_00000400); + onModeFlg(ModeFlg_00000100); + setBlendMoveAnime(daPy_HIO_basic_c0::m.field_0xC); + m34D4 = 1; + } + if (checkEndMessage(0x14a2)) { + dComIfGp_event_reset(); + endDemoMode(); + } + } else { + if (m3570 != 0) { + procBottleGet_init(); + } else { + if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { + procShipPaddle_init(); + } else { + checkNextMode(0); + } + } + } + } else if (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() > m35A0) { + if ((m3570 == 0) && (!dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e))) { + checkNextMode(1); + } + } + return true; } /* 80153338-80153438 .text procBottleGet_init__9daPy_lk_cFv */ diff --git a/src/d/actor/d_a_player_dproc.inc b/src/d/actor/d_a_player_dproc.inc index dd01a761b..ad388043b 100644 --- a/src/d/actor/d_a_player_dproc.inc +++ b/src/d/actor/d_a_player_dproc.inc @@ -654,7 +654,7 @@ void daPy_lk_c::dProcLavaDamage_init_sub() { speed.y = daPy_HIO_restart_c0::m.field_0x8; m3570 = 0; voiceStart(4); - seStartMapInfo(0x3810); + seStartMapInfo(JA_SE_LK_FALL_MAGMA); gravity = daPy_HIO_autoJump_c0::m.field_0xC; mDemo.setDemoType(5); dComIfGp_setPlayerStatus0(0, daPyStts0_UNK10000000_e); @@ -713,7 +713,7 @@ void daPy_lk_c::dProcFreezeDamage_init_sub(int param_0) { onNoResetFlg1(daPyFlg1_FREEZE_STATE); offNoResetFlg1(daPyFlg1_UNK40000); mDoGph_gInf_c::fadeOut(1.0f, l_freeze_fade_color); - seStartMapInfo(0x2878); + seStartMapInfo(JA_SE_LK_FREEZE); for (int i = 0; i < 5; i++) { const u16* uVar1 = eff_joint; MtxP pMVar2 = mpCLModel->getAnmMtx(uVar1[i]); diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index a313a7649..6da529de1 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -1687,7 +1687,7 @@ BOOL daPy_lk_c::checkJumpCutFromButton() { } /* 8010D8B0-8010DB58 .text orderTalk__9daPy_lk_cFv */ -void daPy_lk_c::orderTalk() { +int daPy_lk_c::orderTalk() { /* Nonmatching */ } diff --git a/src/d/actor/d_a_player_pushpull.inc b/src/d/actor/d_a_player_pushpull.inc index 946f2d20a..ea85d032f 100644 --- a/src/d/actor/d_a_player_pushpull.inc +++ b/src/d/actor/d_a_player_pushpull.inc @@ -92,8 +92,8 @@ BOOL daPy_lk_c::procPushPullWait() { s16 sVar1 = cLib_addCalcAngleS(&shape_angle.y, m34D4, 3, 0x800, 0x100); current.angle.y = shape_angle.y; f32 dVar2 = cLib_addCalc(¤t.pos.x, m370C.x, 0.5f, 10.0f, 1.0f); - f32 dVar3 = cLib_addCalc(¤t.pos.z, m370C.z, 0.5f, 10.0f, 1.0f); - if (((!sVar1) && ((float)(dVar2 + dVar3) < 5.0f)) && (m_anm_heap_upper[UPPER_MOVE2_e].mIdx == 0xffff)) { + dVar2 += cLib_addCalc(¤t.pos.z, m370C.z, 0.5f, 10.0f, 1.0f); + if (((!sVar1) && (dVar2 < 5.0f)) && (m_anm_heap_upper[UPPER_MOVE2_e].mIdx == 0xffff)) { current.pos.x = m370C.x; current.pos.z = m370C.z; m3570 = 0; diff --git a/src/d/actor/d_a_player_ship.inc b/src/d/actor/d_a_player_ship.inc index b5e70fe99..72582469a 100644 --- a/src/d/actor/d_a_player_ship.inc +++ b/src/d/actor/d_a_player_ship.inc @@ -2,21 +2,24 @@ * d_a_player_ship.inc * * Code relating to interacting with and controlling The King of Red Lions. - * - * This file is not a standalone translation unit and is instead directly + * + * This file is not a standalone translation unit and is instead directly * included into d_a_player_main.cpp. - * - * The original name of this file is not known, but a best guess was taken + * + * The original name of this file is not known, but a best guess was taken * based on the original names of the functions it contains. */ +#include "d/actor/d_a_boomerang.h" +#include "d/actor/d_a_hookshot.h" +#include "d/actor/d_a_player_HIO.h" #include "d/actor/d_a_player_main.h" #include "d/actor/d_a_player_main_data.h" -#include "d/actor/d_a_player_HIO.h" #include "d/actor/d_a_ship.h" #include "d/d_com_inf_game.h" #include "d/d_kankyo_wether.h" #include "d/d_procname.h" +#include "f_op/f_op_camera_mng.h" /* 8013F848-8013F8AC .text shipSpecialDemoStart__9daPy_lk_cFv */ BOOL daPy_lk_c::shipSpecialDemoStart() { @@ -83,7 +86,7 @@ void daPy_lk_c::initShipRideUseItem(int param_1, int param_2) { if (param_1 == 0) { return; } - dComIfGp_getShipActor()->m034D = 2; // TODO probably inline setter + dComIfGp_getShipActor()->m034D = 2; // TODO probably inline setter gravity = 0.0f; speed.y = 0.0f; if (param_1 == 1) { @@ -150,9 +153,8 @@ void daPy_lk_c::setShipRidePos(int param_0) { if (fVar2 > 1.0f) { fVar2 = 1.0f; } - mFrameCtrlUpper[UPPER_MOVE2_e].setRate( - (1.0f - daPy_HIO_ship_c0::m.field_0xC) * fVar2 + daPy_HIO_ship_c0::m.field_0xC - ); + mFrameCtrlUpper[UPPER_MOVE2_e].setRate((1.0f - daPy_HIO_ship_c0::m.field_0xC) * fVar2 + + daPy_HIO_ship_c0::m.field_0xC); if ((iVar1->mStateFlag & 0x40) != 0) { if (iVar1->m03E4 > 0.6f) { voiceStart(6); @@ -246,7 +248,141 @@ void daPy_lk_c::setShipAttnetionBodyAngle() { /* 801405F0-80140C88 .text changeShipEndProc__9daPy_lk_cFv */ int daPy_lk_c::changeShipEndProc() { - /* Nonmatching */ + /* Nonmatching - branching */ + daBoomerang_c* pfVar4; + + daShip_c* ship = (daShip_c*)dComIfGp_getShipActor(); + if (ship == NULL) { + return checkNextMode(0); + } + offNoResetFlg0(daPyFlg0_SHIP_DROP); + if (doTrigger()) { + pfVar4 = (daBoomerang_c*)mActorKeepThrow.getActor(); + if (pfVar4 != NULL) { + pfVar4->onCancelFlg(); + } + } + if (((((mCurProc != daPyProc_SHIP_SCOPE_e) && (mCurProc != daPyProc_SHIP_BOW_e)) && + (mCurProc != daPyProc_SHIP_HOOKSHOT_e)) && + ((mCurProc != daPyProc_SHIP_BOOMERANG_e || (mEquipItem != dItem_BOOMERANG_e)))) && + ((ship->mStateFlag & 1) == 0)) + { + setTalkStatus(); + if (orderTalk()) { + return true; + } + } + if ((dComIfGp_getMiniGameType() != 1) && (ship->speedF < 3.0f)) { + if (ship->m1044.absXZ() < 3.0f) { + if (((!checkShipNotNormalMode() || + (m_anm_heap_under[UNDER_MOVE0_e].mIdx == LKANM_BCK_FREEA)) || + (m_anm_heap_under[UNDER_MOVE0_e].mIdx == LKANM_BCK_FREEB)) || + (m_anm_heap_under[UNDER_MOVE0_e].mIdx == LKANM_BCK_FREED)) + { + if (((!dComIfGp_checkPlayerStatus0(0, daPyStts0_UNK2000_e) && + (!spActionButton())) && + ((dComIfGp_getDoStatus() == 0 && (mCurProc == daPyProc_SHIP_PADDLE_e))))) + { + if ((!ship->checkForceMove()) && (dComIfGp_setDoStatus(29), doTrigger())) { + return procShipGetOff_init(); + } + } + } + } + } + if ((mCurProc != daPyProc_SHIP_SCOPE_e) && ((ship->mStateFlag & 1) == 0)) { + if (dComIfGp_getDoStatus() == 0) { + if ((ship->mShipMode == 1) || (ship->checkForceMove()) || + (((ship->speedF < 3.0f) && (ship->mShipMode != 0)))) + { + dComIfGp_setDoStatus(8); + } + } + if (checkSetItemTrigger(NORMAL_SAIL, 1)) { + pfVar4 = (daBoomerang_c*)mActorKeepThrow.getActor(); + if (pfVar4 != NULL) { + pfVar4->onCancelFlg(); + } + procShipSteer_init(); + } else if (checkSetItemTrigger(dItem_BOMB_BAG_e, 1)) { + pfVar4 = (daBoomerang_c*)mActorKeepThrow.getActor(); + if (pfVar4 != NULL) { + pfVar4->onCancelFlg(); + } + procShipCannon_init(); + } else if (checkSetItemTrigger(dItem_GRAPPLING_HOOK_e, 1)) { + pfVar4 = (daBoomerang_c*)mActorKeepThrow.getActor(); + if (pfVar4 != NULL) { + pfVar4->onCancelFlg(); + } + procShipCrane_init(); + } else if (checkSetItemTrigger(dItem_TELESCOPE_e, 1)) { + pfVar4 = (daBoomerang_c*)mActorKeepThrow.getActor(); + if (pfVar4 != NULL) { + pfVar4->onCancelFlg(); + } + procShipScope_init(1); + } else if (checkSetItemTrigger(daPyItem_PHOTOBOX_e, 1)) { + pfVar4 = (daBoomerang_c*)mActorKeepThrow.getActor(); + if (pfVar4 != NULL) { + pfVar4->onCancelFlg(); + } + procShipScope_init(0); + } else if (checkSetItemTrigger(daPyItem_BOW_e, 1)) { + pfVar4 = (daBoomerang_c*)mActorKeepThrow.getActor(); + if (pfVar4 != NULL) { + pfVar4->onCancelFlg(); + } + procShipBow_init(); + } else if ((checkSetItemTrigger(dItem_BOOMERANG_e, 1)) && + (mActorKeepThrow.getActor() == NULL)) + { + procShipBoomerang_init(); + } else if (checkSetItemTrigger(dItem_HOOKSHOT_e, 1)) { + pfVar4 = (daBoomerang_c*)mActorKeepThrow.getActor(); + if (pfVar4 != NULL) { + pfVar4->onCancelFlg(); + } + procShipHookshot_init(); + } else if (checkSetItemTrigger(dItem_WIND_WAKER_e, 1)) { + pfVar4 = (daBoomerang_c*)mActorKeepThrow.getActor(); + if (pfVar4 != NULL) { + pfVar4->onCancelFlg(); + } + procTactWait_init(-1); + } else if (checkSetItemTrigger(dItem_TINGLE_TUNER_e, 1)) { + fopAcM_orderTalkEvent(this, (fopAc_ac_c*)dComIfGp_getAgb()); + if (checkShipNotNormalMode()) { + setShipRidePos(0); + } else { + setShipRidePos(1); + } + return true; + } else if (checkSetItemTrigger(dItem_MAGIC_ARMOR_e, 1)) { + if (checkShipNotNormalMode()) { + setShipRidePos(0); + } else { + setShipRidePos(1); + } + changeDragonShield(1); + } else if (checkSetItemTrigger(daPyItem_DRINK_BOTTLE_e, 0)) { + procBottleDrink_init(dComIfGp_getSelectItem(mReadyItemBtn)); + } else if (checkSetItemTrigger(dItem_FAIRY_BOTTLE_e, 0)) { + procBottleOpen_init(0x57); + } else if (checkSetItemTrigger(daPyItem_OPEN_BOTTLE_e, 1)) { + procBottleOpen_init(dComIfGp_getSelectItem(mReadyItemBtn)); + } else if (checkSetItemTrigger(dItem_EMPTY_BOTTLE_e, 1)) { + procBottleSwing_init(1); + } else if (checkSetItemTrigger(dItem_HYOI_PEAR_e, 1)) { + procFoodSet_init(); + } else if (checkSetItemTrigger(daPyItem_ESA_e, 1)) { + procFoodThrow_init(); + } else if ((doTrigger()) && (dComIfGp_getDoStatus() == 8)) { + procShipPaddle_init(); + } + } else { + return false; + } } /* 80140C88-80140D04 .text initShipBaseAnime__9daPy_lk_cFv */ @@ -280,13 +416,9 @@ BOOL daPy_lk_c::procShipReady_init() { commonProcInit(daPyProc_SHIP_READY_e); deleteEquipItem(TRUE); daShip_c* iVar1 = dComIfGp_getShipActor(); - setSingleMoveAnime( - ANM_VJMPCL, - daPy_HIO_wallCatch_c0::m.field_0x24, - daPy_HIO_wallCatch_c0::m.field_0x2C, - daPy_HIO_wallCatch_c0::m.field_0x4, - daPy_HIO_wallCatch_c0::m.field_0x28 - ); + setSingleMoveAnime(ANM_VJMPCL, daPy_HIO_wallCatch_c0::m.field_0x24, + daPy_HIO_wallCatch_c0::m.field_0x2C, daPy_HIO_wallCatch_c0::m.field_0x4, + daPy_HIO_wallCatch_c0::m.field_0x28); gravity = 0.0f; mVelocity = 0.0f; s16 sVar3 = fopAcM_searchActorAngleY((fopAc_ac_c*)iVar1, this); @@ -446,6 +578,78 @@ BOOL daPy_lk_c::procShipPaddle_init() { /* 801413A4-801416BC .text procShipPaddle__9daPy_lk_cFv */ BOOL daPy_lk_c::procShipPaddle() { /* Nonmatching */ + bool bVar2; + int iVar3; + int iVar4; + daPy_ANM dVar5; + float dVar6; + + if (changeShipEndProc()) { + return true; + } + setShipRidePos(1); + dComIfGp_setRStatus(0x2c); + if ((dComIfGp_getDoStatus() == 0) && (dComIfGp_getShipActor()->speedF >= 3.0f)) { + dComIfGp_setDoStatus(19); + } + if (dComIfGp_checkPlayerStatus0(0, daPyStts0_UNK2000_e)) { + dComIfGp_setAStatus(7); + if (checkSubjectEnd(1)) { + dComIfGp_clearPlayerStatus0(0, daPyStts0_UNK2000_e); + } + } else { + onResetFlg0(daPyRFlg0_UNK4000000); + if (((dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x1000))) && + (dComIfGp_event_runCheck() == 0)) + { + setSubjectMode(); + } + } + daShip_c* ship = (daShip_c*)dComIfGp_getShipActor(); + if ((m34D0 == -1) || (m34D0 == -2)) { + if (m34D0 == -2) { + if (mFrameCtrlUnder[UNDER_MOVE0_e].checkPass(168.0f)) { + voiceStart(48); + } else if (mFrameCtrlUnder[UNDER_MOVE0_e].checkPass(105.0f)) { + voiceStart(47); + } + } + if ((!(mStickDistance > 0.05f) && (!dComIfGp_event_runCheck())) && + (dComIfGp_getDoStatus() == 29)) + { + if ((!ship->checkForceMove()) && !(mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f)) + goto LAB_801416a4; + } + initShipBaseAnime(); + m34D0 = cM_rndF(150.0f) + 300.0f; + } else { + if (((!dComIfGp_event_runCheck()) && (dComIfGp_getDoStatus() == 29)) && + (mStickDistance <= 0.05f)) + { + if ((!ship->checkForceMove()) && (!checkShipNotNormalMode())) { + m34D0--; + if (m34D0 == 0) { + dVar6 = cM_rnd(); + m34D0 = -1; + if (dVar6 < 0.3333f) { + dVar5 = ANM_FREEA; + } else { + if (dVar6 < 0.6666f) { + dVar5 = ANM_FREEB; + m34D0 = -2; + } else { + dVar5 = ANM_FREED; + } + } + setSingleMoveAnime(dVar5, 1.0f, 0.0f, -1, 5.0f); + } + goto LAB_801416a4; + } + } + m34D0 = cM_rndF(150.0f) + 300.0f; + } +LAB_801416a4: + return true; } /* 801416BC-801417EC .text procShipScope_init__9daPy_lk_cFi */ @@ -473,7 +677,24 @@ BOOL daPy_lk_c::procShipScope_init(int param_0) { /* 801417EC-801418B4 .text procShipScope__9daPy_lk_cFv */ BOOL daPy_lk_c::procShipScope() { - /* Nonmatching */ + int iVar2 = 1; + if (changeShipEndProc()) { + return true; + } + if (checkScopeEnd()) { + procShipPaddle_init(); + } else { + if ((((dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x10))) && + (!dComIfGp_event_runCheck())) && + (mDemo.getDemoType() == 0)) + { + shape_angle.y = fopCamM_GetAngleY(dComIfGp_getCamera(mCameraInfoIdx)); + iVar2 = 0; + } + } + offNoResetFlg0(daPyFlg0_SCOPE_CANCEL); + setShipRidePos(iVar2); + return true; } /* 801418B4-801419B4 .text procShipBoomerang_init__9daPy_lk_cFv */ @@ -501,7 +722,61 @@ BOOL daPy_lk_c::procShipBoomerang_init() { /* 801419B4-80141BB0 .text procShipBoomerang__9daPy_lk_cFv */ BOOL daPy_lk_c::procShipBoomerang() { - /* Nonmatching */ + if (changeShipEndProc()) { + dComIfGp_clearPlayerStatus0(0, daPyStts0_BOOMERANG_WAIT_e); + return true; + } else { + setShipRidePos(0); + if (mActorKeepThrow.getActor() == NULL) { + if (m_anm_heap_upper[UPPER_MOVE2_e].mIdx != LKANM_BCK_BOOMCATCH) { + dComIfGp_setDoStatus(7); + if (doTrigger()) { + { + procShipPaddle_init(); + deleteEquipItem(TRUE); + return true; + } + } + } + } + mSightPacket.offDrawFlg(); + daShip_c* ship = (daShip_c*)dComIfGp_getShipActor(); + if (m_anm_heap_upper[UPPER_MOVE2_e].mIdx != LKANM_BCK_BOOMCATCH) { + if (mEquipItem == dItem_BOOMERANG_e) { + if (m_anm_heap_upper[UPPER_MOVE2_e].mIdx == LKANM_BCK_BOOMWAIT) { + setShipAttentionAnmSpeed(daPy_HIO_boom_c0::m.field_0x18); + checkNextActionBoomerangReady(); + if (mpAttention->Lockon()) { + setShipAttnetionBodyAngle(); + } else { + m34DA = 0; + if (setBodyAngleToCamera()) { + daBoomerang_c* this_01 = (daBoomerang_c*)mActorKeepEquip.getActor(); + if (this_01 != NULL) { + { + cXyz local_28; + checkSightLine(this_01->getFlyMax(), &local_28); + mSightPacket.setPos(&local_28); + mSightPacket.onDrawFlg(); + } + } + } + } + if (mpAttnActorLockOn == NULL) { + shape_angle.y += (s16)(ship->shape_angle.y - m34D4); + } + } + } else { + if (mActorKeepThrow.getActor() == NULL) { + return procShipPaddle_init(); + } + setShapeAngleToAtnActor(); + mFrameCtrlUnder[UNDER_MOVE0_e].setRate(daPy_HIO_atnMove_c0::m.field_0x24); + } + } + m34D4 = ship->shape_angle.y; + } + return true; } /* 80141BB0-80141CF8 .text procShipHookshot_init__9daPy_lk_cFv */ @@ -535,7 +810,54 @@ BOOL daPy_lk_c::procShipHookshot_init() { /* 80141CF8-80141F2C .text procShipHookshot__9daPy_lk_cFv */ BOOL daPy_lk_c::procShipHookshot() { - /* Nonmatching */ + /* Nonmatching - regalloc */ + if (changeShipEndProc()) { + return true; + } + setShipRidePos(0); + dComIfGp_setDoStatus(7); + daHookshot_c* pfVar4 = (daHookshot_c*)mActorKeepEquip.getActor(); + if (((doTrigger()) || (pfVar4 == NULL)) || + ((m3570 != 0) && (m355E == 0)) && (!mpAttention->Lockon())) + { + procShipPaddle_init(); + deleteEquipItem(TRUE); + return true; + } else { + mSightPacket.offDrawFlg(); + checkNextActionHookshotReady(); + daShip_c* ship = (daShip_c*)dComIfGp_getShipActor(); + if (pfVar4->checkWait()) { + setShipAttentionAnmSpeed(1.0f); + } + if (mpAttention->Lockon()) { + if (pfVar4->checkWait()) { + setShipAttnetionBodyAngle(); + } else { + m34DA = 0; + } + m3570 = 1; + } else { + m34DA = 0; + setBodyAngleToCamera(); + m3570 = 0; + } + if (mpAttnActorLockOn == NULL) { + shape_angle.y += (s16)(ship->shape_angle.y - m34D4); + } + if (pfVar4->checkWait()) { + if (!mpAttention->Lockon()) { + setHookshotSight(); + } else { + mSightPacket.offDrawFlg(); + } + dComIfGp_clearPlayerStatus0(0, daPyStts0_UNK40000_e); + } else { + dComIfGp_setPlayerStatus0(0, daPyStts0_UNK40000_e); + } + m34D4 = ship->shape_angle.y; + } + return true; } /* 80141F2C-80142084 .text procShipBow_init__9daPy_lk_cFv */ @@ -572,7 +894,41 @@ BOOL daPy_lk_c::procShipBow_init() { /* 80142084-80142250 .text procShipBow__9daPy_lk_cFv */ BOOL daPy_lk_c::procShipBow() { - /* Nonmatching */ + if ((mDemo.getDemoMode() != 0x44) && (changeShipEndProc())) { + return true; + } + setShipRidePos(0); + if (mDemo.getDemoMode() != 0x44) { + dComIfGp_setDoStatus(7); + if ((doTrigger()) || + (((!mpAttention->Lockon()) && (mActorKeepEquip.getActor() == NULL)) && (m3570 != 0))) + { + procShipPaddle_init(); + deleteEquipItem(TRUE); + return true; + } + } else { + dComIfGp_evmng_cutEnd(mStaffIdx); + } + daShip_c* iVar1 = (daShip_c*)dComIfGp_getShipActor(); + if (m_anm_heap_upper[UPPER_MOVE2_e].mIdx == LKANM_BCK_BOWWAIT) { + setShipAttentionAnmSpeed(1.0f); + } + if ((mpAttention->Lockon()) && (mDemo.getDemoMode() != 0x44)) { + setShipAttnetionBodyAngle(); + m3570 = 1; + } else { + m34DA = 0; + setBodyAngleToCamera(); + m3570 = 0; + } + if (mpAttnActorLockOn == NULL) { + shape_angle.y += (s16)(iVar1->shape_angle.y - m34D4); + } + m34D4 = iVar1->shape_angle.y; + checkNextActionBowReady(); + m35EC = mFrameCtrlUpper[UPPER_MOVE2_e].getFrame(); + return true; } /* 80142250-80142300 .text procShipCannon_init__9daPy_lk_cFv */ @@ -663,7 +1019,42 @@ BOOL daPy_lk_c::procShipGetOff_init() { /* 80142A5C-80142C08 .text procShipGetOff__9daPy_lk_cFv */ BOOL daPy_lk_c::procShipGetOff() { - /* Nonmatching */ + /* Nonmatching - branching */ + daShip_c* iVar1 = dComIfGp_getShipActor(); + if (iVar1 == 0) { + checkNextMode(0); + } else if (m3570 == 0) { + current.pos.y = current.pos.y + (iVar1->current.pos.y - m35A0); + cLib_chaseF(¤t.pos.y, iVar1->current.pos.y + l_ship_ledge.y, 4.0f); + m35A0 = iVar1->current.pos.y; + s16 sVar3 = cLib_targetAngleY(¤t.pos, &m370C); + if (cLib_distanceAngleS(sVar3, shape_angle.y) >= 0x4000) { + setSingleMoveAnime( + ANM_JMPST, daPy_HIO_autoJump_c0::m.field_0x20, daPy_HIO_autoJump_c0::m.field_0x2C, + daPy_HIO_autoJump_c0::m.field_0x2, daPy_HIO_autoJump_c0::m.field_0x30); + gravity = daPy_HIO_autoJump_c0::m.field_0xC; + mVelocity = daPy_HIO_ship_c0::m.field_0x10; + speed.y = daPy_HIO_ship_c0::m.field_0x14; + m3570 = 1; + m34C2 = 1; + iVar1->m034D = 6; + onModeFlg(ModeFlg_MIDAIR); + } + } else { + m34C2 = 1; + dComIfGp_evmng_cutEnd(mStaffIdx); + if (mAcch.ChkGroundHit()) { + changeLandProc(daPy_HIO_autoJump_c0::m.field_0x24); + } else { + if (checkFanGlideProc(0)) { + return true; + } else if (speed.y < -gravity) { + procFall_init(0, daPy_HIO_smallJump_c0::m.field_0x18); + setTextureAnime(0x37, 0); + } + } + } + return true; } /* 80142C08-80142C9C .text procShipRestart_init__9daPy_lk_cFv */ diff --git a/src/d/actor/d_a_player_sword.inc b/src/d/actor/d_a_player_sword.inc index d74d1f7cd..892034b6e 100644 --- a/src/d/actor/d_a_player_sword.inc +++ b/src/d/actor/d_a_player_sword.inc @@ -2,17 +2,18 @@ * d_a_player_sword.inc * * Code relating using a sword item. - * - * This file is not a standalone translation unit and is instead directly + * + * This file is not a standalone translation unit and is instead directly * included into d_a_player_main.cpp. - * + * * The original name of this file is known because of an assert contained within * a function from this file. */ -#include "d/actor/d_a_player_main.h" -#include "d/actor/d_a_player_HIO.h" -#include "JSystem/J3DGraphLoader/J3DAnmLoader.h" + #include "d/actor/d_a_boko.h" + #include "d/actor/d_a_player_main.h" + #include "d/actor/d_a_player_HIO.h" + #include "JSystem/J3DGraphLoader/J3DAnmLoader.h" /* 80154B80-80154FBC .text setSwordModel__9daPy_lk_cFi */ void daPy_lk_c::setSwordModel(BOOL r28) { @@ -125,9 +126,110 @@ void daPy_lk_c::setSwordModel(BOOL r28) { /* 80154FBC-80155490 .text setLightSaver__9daPy_lk_cFv */ void daPy_lk_c::setLightSaver() { - /* Nonmatching */ + /* Nonmatching - floats, .sdata2, branching */ static JGeometry::TVec3 d_scale(1.4f, 1.4f, 1.4f); static JGeometry::TVec3 p_scale(1.6f, 1.4f, 1.4f); + static const GXColor g_prm0 = {0x09, 0x14, 0x06, 0xFF}; + static const GXColor g_env0 = {0x0C, 0x18, 0x00, 0xFF}; + static const GXColor y_prm0 = {0x14, 0x12, 0x0C, 0xFF}; + static const GXColor y_env0 = {0x18, 0x18, 0x00, 0xFF}; + static const GXColor g_prm1 = {0x80, 0xFF, 0x64, 0xFF}; + static const GXColor y_prm1 = {0xFF, 0xFF, 0xC8, 0xFF}; + static const GXColor y_env1 = {0xA5, 0xA5, 0x10, 0xFF}; + static const GXColor s_prm1 = {0xC8, 0xC8, 0xFF, 0xFF}; + static const GXColor s_env1 = {0x60, 0x60, 0xA5, 0xFF}; + JPABaseEmitter* pJVar7; + const GXColor* pbVar8; + const GXColor* pbVar9; + + if ((((mEquipItem == daPyItem_SWORD_e) && (mpEquipItemBrk != NULL)) && (mpSwordBtk != NULL)) && + ((mpSwordModel1 != NULL && (mpEquipItemModel == NULL)))) + { + if (checkChanceMode()) { + mpEquipItemBrk->setFrame(1.0f); + } else { + if (checkNoResetFlg1(daPyFlg1_UNK8000)) { + mpEquipItemBrk->setFrame(0.0f); + } else { + mpEquipItemBrk->setFrame(2.0f); + } + } + mpSwordModel1->setBaseTRMtx(mpEquipItemModel->getBaseTRMtx()); + if ((!checkDemoSwordNoDraw(0)) && + (((checkChanceMode() || (checkNoResetFlg1(daPyFlg1_UNK8000))) || + (checkFinalMasterSwordEquip())))) + { + simpleAnmPlay(mpSwordBtk); + if (((m3454).mpEmitter == NULL) && + ((checkChanceMode() || (checkNoResetFlg1(daPyFlg1_UNK8000))))) + { + pJVar7 = m3454.makeEmitter(dPa_name::ID_COMMON_0309, mpSwordModel1->getAnmMtx(2), + ¤t.pos, NULL); + if (pJVar7 != 0) { + if (checkMasterSwordEquip()) { + pJVar7->setGlobalDynamicsScale(d_scale); + pJVar7->setGlobalParticleScale(p_scale); + } + } + } else { + if ((!checkChanceMode()) && + ((!checkNoResetFlg1(daPyFlg1_UNK8000) && (checkFinalMasterSwordEquip())))) + { + m3454.end(); + } + } + if (checkChanceMode()) { + pbVar8 = &g_prm0; + pbVar9 = &g_env0; + } else { + pbVar8 = &y_prm0; + pbVar9 = &y_env0; + } + pJVar7 = (m3454).mpEmitter; + if (pJVar7 != NULL) { + pJVar7->setGlobalPrmColor(pbVar8->r, pbVar8->g, pbVar8->b); + pJVar7->setGlobalEnvColor(pbVar9->r, pbVar9->g, pbVar9->b); + } + if (((dComIfGp_getDoStatus() == 26) && (m355C == 0)) || + (((checkNoResetFlg1(daPyFlg1_UNK8000) || (checkFinalMasterSwordEquip())) && + (!checkNoResetFlg1(daPyFlg1_UNK200000))))) + { + if ((dComIfGp_getDoStatus() == 26) && (m355C == 0)) { + pbVar9 = &g_prm1; + pbVar8 = pbVar9; + dComIfGp_getVibration().StartShock(6, 1, cXyz(0.0f, 1.0f, 0.0f)); + } else if (checkNoResetFlg1(daPyFlg1_UNK8000)) { + pbVar9 = &y_prm1; + pbVar8 = &y_env1; + } else { + pbVar9 = &s_prm1; + pbVar8 = &s_env1; + } + pJVar7 = dComIfGp_particle_setP1(dPa_name::ID_COMMON_030A, ¤t.pos, NULL, NULL, + 0xff, NULL, -1, pbVar9, pbVar8, NULL); + if (pJVar7 != 0) { + JPASetRMtxTVecfromMtx(mpEquipItemModel->getAnmMtx(2), pJVar7->mGlobalRotation, + pJVar7->mGlobalTranslation); + if (checkMasterSwordEquip()) { + pJVar7->setGlobalDynamicsScale(d_scale); + pJVar7->setGlobalParticleScale(p_scale); + } + if (pbVar9 == &g_prm1) { + m355C = 0x1e; + } else { + onNoResetFlg1(daPyFlg1_UNK200000); + } + } + } + } else { + m3454.end(); + mpSwordBtk->setFrame(0.0f); + } + if ((m355C > 0) && (!checkChanceMode())) { + m355C--; + } + } + return; } /* 80155490-801554C8 .text checkDemoShieldNoDraw__9daPy_lk_cFv */ @@ -356,8 +458,85 @@ int daPy_lk_c::changeCutProc() { } /* 80155C3C-80156034 .text changeCutReverseProc__9daPy_lk_cFQ29daPy_lk_c8daPy_ANM */ -int daPy_lk_c::changeCutReverseProc(daPy_ANM) { - /* Nonmatching */ +int daPy_lk_c::changeCutReverseProc(daPy_ANM param_0) { + /* Nonmatching - floats, branching */ + if ((mEquipItem != dItem_SKULL_HAMMER_e) && + (((mAtCps[0].ChkAtShieldHit() || (mAtCps[1].ChkAtShieldHit())) || + (mAtCps[2].ChkAtShieldHit())))) + { + procCutReverse_init(param_0); + } else if (checkNoResetFlg0(daPyFlg0_CUT_AT_FLG)) { + cXyz local_24; + local_24.x = current.pos.x; + local_24.y = current.pos.y + 30.0f; + local_24.z = current.pos.z; + mLinkLinChk.Set(&local_24, &mSwordTopPos, this); + if (dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { + cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); + if (!(triPla->GetNP()->y >= 0.5f) || + ((mCurProc == daPyProc_HAMMER_FRONT_SWING_e && triPla->GetNP()->y < 0.64278764f))) + { + if (mEquipItem != dItem_DEKU_LEAF_e) { + u32 uVar7 = dComIfG_Bgsp()->GetMtrlSndId(mLinkLinChk); + u32 uVar12; + if (mAtCps[0].GetAtType() == AT_TYPE_BOKO_STICK) { + uVar12 = JA_SE_LK_W_WEP_HIT; + } else if ((mAtCps[0].GetAtType() == AT_TYPE_STALFOS_MACE) || + (mAtCps[0].GetAtType() == AT_TYPE_SKULL_HAMMER)) + { + uVar12 = JA_SE_LK_HAMMER_HIT; + } else { + uVar12 = JA_SE_LK_SW_HIT_S; + } + if ((mAtCps[0].GetAtType() != AT_TYPE_SKULL_HAMMER) || + (!checkNoResetFlg0(daPyFlg0_UNK10000000))) + { + mDoAud_seStart(uVar12, &mSwordTopPos, uVar7, mReverb); + } + if ((mAtCps[0].GetAtType() == AT_TYPE_SKULL_HAMMER) && + (mCurProc != daPyProc_JUMP_CUT_e)) + { + onNoResetFlg0(daPyFlg0_UNK10000000); + } + int iVar6 = dComIfG_Bgsp()->GetAttributeCode(mLinkLinChk); + if (!(iVar6 - 2U > 1) || (iVar6 == dBgS_Attr_METAL_e)) { + triPla = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); + csXyz local_44; + local_44.x = cM_atan2s(-triPla->GetNP()->y, triPla->GetNP()->absXZ()); + local_44.y = cM_atan2s(triPla->GetNP()->x, triPla->GetNP()->z); + local_44.z = 0; + JPABaseEmitter* emitter; + if (iVar6 == dBgS_Attr_WOOD_e) { + emitter = dComIfGp_particle_setP1( + dPa_name::ID_COMMON_002B, mLinkLinChk.GetCrossP(), &local_44, NULL, + 0xff, NULL, -1, &tevStr.mColorK0, &tevStr.mColorK0); + if (emitter != 0) { + emitter->mSpread = 0.2f; + emitter->mVolumeSweep = 0.15f; + emitter->mRate = 8.0f; + emitter->mMaxFrame = 1; + } + } else { + local_44.x += 0x4000; + emitter = dComIfGp_particle_setP1(dPa_name::ID_COMMON_002C, + mLinkLinChk.GetCrossP(), &local_44); + if (emitter != 0) { + emitter->mInitialVelAxis = 20.0f; + emitter->mRate = 20.0f; + emitter->mMaxFrame = 1; + emitter->mInitialVelDir = 20.0f; + } + } + } + } + dKy_Sound_set(current.pos, 100, fopAcM_GetID(this), 5); + procCutReverse_init(param_0); + } else if (mCurProc == daPyProc_HAMMER_FRONT_SWING_e) { + return true; + } + } + } + return false; } /* 80156034-80156198 .text procCutA_init__9daPy_lk_cFs */ @@ -1106,23 +1285,282 @@ BOOL daPy_lk_c::procCutExB() { } /* 80157D3C-80158220 .text procCutTurn_init__9daPy_lk_cFi */ -BOOL daPy_lk_c::procCutTurn_init(int) { - /* Nonmatching */ +BOOL daPy_lk_c::procCutTurn_init(int param_0) { + /* Nonmatching - floats */ + float fVar1; + + commonProcInit(daPyProc_CUT_TURN_e); + if (param_0 != 0) { + fVar1 = daPy_HIO_cutTurn_c0::m.field_0xC; + } else { + fVar1 = daPy_HIO_cutTurn_c0::m.field_0x8; + } + if (mEquipItem == daPyItem_SWORD_e) { + setSingleMoveAnime(ANM_CUTTURN, daPy_HIO_cutTurn_c0::m.field_0x4, fVar1, + daPy_HIO_cutTurn_c0::m.field_0x0, daPy_HIO_cutTurn_c0::m.field_0x28); + } else { + setSingleMoveAnime(ANM_CUTTURNC, daPy_HIO_cutTurn_c0::m.field_0x4, fVar1, + daPy_HIO_cutTurn_c0::m.field_0x0, daPy_HIO_cutTurn_c0::m.field_0x28); + } + if (mEquipItem == daPyItem_SWORD_e) { + if (checkNormalSwordEquip()) { + mSwordAnim.changeBckOnly(getItemAnimeResource(LKANM_BCK_CUTTURNA)); + } else { + mSwordAnim.changeBckOnly(getItemAnimeResource(LKANM_BCK_CUTTURNMS)); + } + if (checkNormalSwordEquip()) { + m35A4 = daPy_HIO_cutTurn_c0::m.field_0x40; + if (checkNoResetFlg1(daPyFlg1_UNK8000)) { + mAtCyl.SetAtAtp(4); + } else { + mAtCyl.SetAtAtp(2); + } + } else { + m35A4 = daPy_HIO_cutTurn_c0::m.field_0x44; + if (checkNoResetFlg1(daPyFlg1_UNK8000)) { + mAtCyl.SetAtAtp(8); + } else { + mAtCyl.SetAtAtp(4); + } + } + setBlurPosResource(LKANM__CUTTURN_POS); + } else { + daBoko_c* boko = (daBoko_c*)mActorKeepEquip.getActor(); + u32 uVar5; + if (boko == NULL) { + uVar5 = 0; + mAtCyl.SetAtAtp(1); + } else { + uVar5 = fopAcM_GetParam(boko); + mAtCyl.SetAtAtp((boko->getAtPoint())); + } + if (uVar5 == 0) { + m35A4 = daPy_HIO_cutTurn_c0::m.field_0x60; + } else if (uVar5 == 1) { + m35A4 = daPy_HIO_cutTurn_c0::m.field_0x64; + } else if (uVar5 == 2) { + m35A4 = daPy_HIO_cutTurn_c0::m.field_0x68; + } else if (uVar5 == 3) { + m35A4 = daPy_HIO_cutTurn_c0::m.field_0x6C; + } else if (uVar5 == 4) { + m35A4 = daPy_HIO_cutTurn_c0::m.field_0x70; + } else { + m35A4 = daPy_HIO_cutTurn_c0::m.field_0x74; + } + setBlurPosResource(LKANM__WEAPONTURN_POS); + } + mAtCyl.SetR(m35A4 * 0.5f); + m35EC = fVar1; + m3700 = cXyz::Zero; + m34C2 = 1; + m34D0 = daPy_HIO_cutTurn_c0::m.field_0x2; + current.angle.y = shape_angle.y; + m3578 = 0; + voiceStart(1); + dComIfGp_setPlayerStatus0(0, daPyStts0_SWORD_SWING_e); + mCutType = 8; + offResetFlg0(daPyRFlg0_UNK8000000); + mAtCyl.SetR(m35A4 * 0.5f); + if (!checkNoResetFlg0(daPyFlg0_UNK80000000)) { + m32E4.makeEmitter(dPa_name::ID_COMMON_001E, mpCLModel->getAnmMtx(0x28), ¤t.pos, NULL); + if (mCurrAttributeCode == dBgS_Attr_GRASS_e) { + GXColor color = {tevStr.mColorC0.r, tevStr.mColorC0.g, tevStr.mColorC0.b, + tevStr.mColorC0.a}; + m32F0.makeEmitterColor(dPa_name::ID_COMMON_0021, mpCLModel->getAnmMtx(0x23), + ¤t.pos, &color, &tevStr.mColorK0); + m35A0 = 18.0f; + } else if (mCurrAttributeCode == dBgS_Attr_WATER_e) { + GXColor amb, dif; + dKy_get_seacolor(&amb, &dif); + m32F0.makeEmitterColor(dPa_name::ID_COMMON_0020, mpCLModel->getAnmMtx(0x23), + ¤t.pos, &amb, NULL); + m35A0 = 17.0f; + } else { + dComIfGp_particle_setToonP1(dPa_name::ID_COMMON_201F, ¤t.pos, NULL, NULL, + daPy_HIO_basic_c0::m.field_0x2, &mSmokeEcallBack, -1, NULL, + NULL, NULL); + m35A0 = 21.0f; + } + } + m3570 = 0; + if (m34C4 == 6) { + onNoResetFlg0(daPyFlg0_UNK4); + m3570 = 1; + } else { + mCutCount = 0; + } + mVelocity = 0.0f; + m34C4 = 0; + endFlameDamageEmitter(); + return true; } /* 80158220-80158460 .text procCutTurn__9daPy_lk_cFv */ BOOL daPy_lk_c::procCutTurn() { - /* Nonmatching */ + J3DFrameCtrl& frameCtrl = mFrameCtrlUnder[UNDER_MOVE0_e]; + m35EC = frameCtrl.getFrame(); + if (((m3570 != 0) && (swordButton())) && (m34C5 == 0)) { + onNoResetFlg0(daPyFlg0_UNK4); + } else { + offNoResetFlg0(daPyFlg0_UNK4); + } + if (frameCtrl.getRate() < 0.01f) { + if ((int)m34D0 > 0) { + m34D0--; + } else { + m34B8 = 3; + checkNextMode(0); + return true; + } + } else { + if (frameCtrl.getFrame() > daPy_HIO_cutTurn_c0::m.field_0x10) { + u8 uVar1 = m34B8; + m34B8 = 3; + if (checkNextMode(1)) { + return true; + } + m34B8 = uVar1; + } else { + if (frameCtrl.getFrame() > 17.0f) { + m32E4.end(); + } + } + } + if (frameCtrl.getFrame() > m35A0) { + m32F0.end(); + mSmokeEcallBack.end(); + } + setSpecialBattle(1); + if ((doTrigger()) && (dComIfGp_getDoStatus() == 26)) { + changeSpecialBattle(); + } else { + if ((frameCtrl.getFrame() >= daPy_HIO_cutTurn_c0::m.field_0x30) && + (frameCtrl.getFrame() < daPy_HIO_cutTurn_c0::m.field_0x34)) + { + if (!checkNoResetFlg0(daPyFlg0_CUT_AT_FLG)) { + onResetFlg0(daPyRFlg0_UNK1); + seStartSwordCut(JA_SE_LK_KAITENGIRI); + } + onResetFlg0(daPyRFlg0_UNK2); + cLib_chaseF(mAtCyl.GetRP(), m35A4, 18.0f); + } + if (frameCtrl.checkPass(daPy_HIO_cutTurn_c0::m.field_0x34)) { + m331C.field_0x4 = 0x80; + m332C.field_0x4 = 0x80; + m333C.field_0x4 = 0x80; + } else { + if (m331C.field_0x4 == 0x80) { + m331C.field_0x4 = 0; + m332C.field_0x4 = 0; + m333C.field_0x4 = 0; + } + } + m34C2 = 1; + return true; + } } /* 80158460-801585D8 .text procCutRoll_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procCutRoll_init() { - /* Nonmatching */ + commonProcInit(daPyProc_CUT_ROLL_e); + setSingleMoveAnime(ANM_CUTTURNB, daPy_HIO_cutRoll_c0::m.field_0x8, + daPy_HIO_cutRoll_c0::m.field_0xC, daPy_HIO_cutRoll_c0::m.field_0x0, + daPy_HIO_cutRoll_c0::m.field_0x10); + m3578 = 0; + seStartMapInfo(JA_SE_LK_V_KAITEN_S); + dComIfGp_setItemMagicCount(-2); + mCutType = 9; + mCutCount = 0; + offResetFlg0(daPyRFlg0_UNK8000000); + if (checkNormalSwordEquip()) { + m35A4 = daPy_HIO_cutRoll_c0::m.field_0x20; + if (checkNoResetFlg1(daPyFlg1_UNK8000)) { + mAtCyl.SetAtAtp(4); + } else { + mAtCyl.SetAtAtp(2); + } + } else { + m35A4 = daPy_HIO_cutRoll_c0::m.field_0x24; + if (checkNoResetFlg1(daPyFlg1_UNK8000)) { + mAtCyl.SetAtAtp(8); + } else { + mAtCyl.SetAtAtp(4); + } + } + mAtCyl.SetR(m35A4 * 0.5f); + m34D0 = daPy_HIO_cutRoll_c0::m.field_0x2; + current.angle.y = shape_angle.y; + m34BE = 4; + dComIfGp_setPlayerStatus0(0, daPyStts0_SPIN_ATTACK_e); + endFlameDamageEmitter(); + return true; } /* 801585D8-801588F0 .text procCutRoll__9daPy_lk_cFv */ BOOL daPy_lk_c::procCutRoll() { - /* Nonmatching */ + /* Nonmatching - regalloc, math */ + s16 uVar1; + float fVar2; + short sVar3; + cXyz local_48; + cXyz local_3c; + + if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) { + uVar1 = current.angle.y; + if ((mAcch.ChkWallHit()) && (mDemo.getDemoMode() != 0x2b)) { + fVar2 = 25.0f + (mAcchCir[0]).GetWallR(); + local_48.set(current.pos.x, current.pos.y + (mAcchCir[0]).GetWallH(), current.pos.z); + local_3c.set(local_48.x + fVar2 * cM_ssin(uVar1), local_48.y, + local_48.z + fVar2 * cM_scos(uVar1)); + mLinkLinChk.Set(&local_48, &local_3c, this); + if (dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { + cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); + shape_angle.y = cM_atan2s(-triPla->GetNP()->x, -triPla->GetNP()->z); + current.angle.y = shape_angle.y; + return procFrontRollCrash_init(); + } + } else if (mStickDistance > 0.05f) { + cLib_addCalcAngleS(¤t.angle.y, m34E8, daPy_HIO_move_c0::m.field_0x6, + daPy_HIO_move_c0::m.field_0x0, daPy_HIO_move_c0::m.field_0x4); + shape_angle.y = current.angle.y; + } + sVar3 = current.angle.y - uVar1; + if (dComIfGp_event_runCheck() != 0) { + if (mDemo.getDemoMode() != 0x2b) { + m34D0 = 0; + } else { + m34D0 = 5; + } + } + if (m34D0 > 0) { + m34D0--; + mVelocity = daPy_HIO_cutRoll_c0::m.field_0x14; + m34EC -= daPy_HIO_cutRoll_c0::m.field_0x4 + sVar3; + if (!checkNoResetFlg0(daPyFlg0_CUT_AT_FLG)) { + onResetFlg0(daPyRFlg0_UNK1); + } + onResetFlg0(daPyRFlg0_UNK2); + cLib_chaseF(mAtCyl.GetRP(), m35A4, 18.0f); + seStartMapInfo(JA_SE_LK_V_KAITEN_S); + } else { + if (cLib_addCalc(&mVelocity, 0.0f, 0.1f, 2.5f, 1.0f) < 0.5f) { + shape_angle.y = shape_angle.y + m34EC; + current.angle.y = shape_angle.y; + if ((dComIfGp_event_runCheck() != 0) && (mDemo.getDemoMode() != 0x2b)) { + procWait_init(); + } else { + procCutRollEnd_init(); + } + } else { + m34EC = (s16)(m34EC - (512.0f + sVar3 + + (daPy_HIO_cutRoll_c0::m.field_0x4 - 0x200) * + (mVelocity / daPy_HIO_cutRoll_c0::m.field_0x14))); + } + } + } else { + seStartMapInfo(JA_SE_LK_V_KAITEN_S); + } + return true; } /* 801588F0-80158A40 .text procCutRollEnd_init__9daPy_lk_cFv */