diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 4dec5f79b..5cb805bfd 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -93,6 +93,7 @@ public: daPyFlg0_UNK80 = 0x00000080, daPyFlg0_UNK100 = 0x00000100, daPyFlg0_SHIP_DROP = 0x00000200, + daPyFlg0_UNK400 = 0x00000400, daPyFlg0_PUSH_PULL_KEEP = 0x00000800, daPyFlg0_HOVER_BOOTS = 0x00001000, daPyFlg0_UNK4000 = 0x00004000, diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h index c448fe29f..d4c030f7d 100644 --- a/include/d/actor/d_a_player_main.h +++ b/include/d/actor/d_a_player_main.h @@ -922,7 +922,7 @@ public: void setAtnList(); void setActorPointer(); BOOL setTalkStatus(); - void setHintActor(); + int setHintActor(); void setDoStatusBasic(); void setDoStatus(); int getDirectionFromAngle(s16); diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index c7eef4927..efc175f8c 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -32,6 +32,7 @@ enum fopAc_Status_e { fopAcStts_CARRY_e = 0x00002000, fopAcStts_UNK4000_e = 0x00004000, fopAcStts_FORCEMOVE_e = 0x00008000, + fopAcStts_UNK10000_e = 0x00010000, fopAcStts_NOPAUSE_e = 0x00020000, fopAcStts_UNK40000_e = 0x00040000, fopAcStts_UNK80000_e = 0x00080000, // Hookshot related diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index 65656cd2b..83f8d7e5e 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -555,6 +555,7 @@ s32 fopAcM_rollPlayerCrash(fopAc_ac_c* i_this, f32 distAdjust, u32 flag); s32 fopAcM_checkCullingBox(Mtx, f32, f32, f32, f32, f32, f32); s32 fopAcM_cullingCheck(fopAc_ac_c*); s32 fopAcM_orderTalkEvent(fopAc_ac_c*, fopAc_ac_c*); +s32 fopAcM_orderZHintEvent(fopAc_ac_c*, fopAc_ac_c*); s32 fopAcM_orderSpeakEvent(fopAc_ac_c* i_actor); s32 fopAcM_orderDoorEvent(fopAc_ac_c*, fopAc_ac_c*); s32 fopAcM_orderCatchEvent(fopAc_ac_c*, fopAc_ac_c*); diff --git a/src/d/actor/d_a_player_grab.inc b/src/d/actor/d_a_player_grab.inc index 869467a9a..0ca90ff49 100644 --- a/src/d/actor/d_a_player_grab.inc +++ b/src/d/actor/d_a_player_grab.inc @@ -10,125 +10,891 @@ * based on the original names of the functions it contains. */ +#include "d/actor/d_a_boko.h" +#include "d/actor/d_a_obj_barrel.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 "f_op/f_op_camera.h" /* 8013A85C-8013A890 .text checkGrabSpecialHeavyState__9daPy_lk_cFv */ BOOL daPy_lk_c::checkGrabSpecialHeavyState() { - /* Nonmatching */ + fopAc_ac_c *pfVar1 = mActorKeepGrab.getActor(); + + if (pfVar1 != NULL) { + if ((fopAcM_GetName(pfVar1) == PROC_KB) && + (((fopAcM_GetParam(pfVar1) & 8) != 0))) { + return true; + } + } + return false; } /* 8013A890-8013A8B4 .text getGrabMissActor__9daPy_lk_cFv */ fopAc_ac_c* daPy_lk_c::getGrabMissActor() { - /* Nonmatching */ + if ((mCurProc != ANM_MROLLL) && (mCurProc != ANM_MROLLLC)) { + return NULL; + } + return mActorKeepRope.getActor(); } /* 8013A8B4-8013A904 .text setWeaponBlur__9daPy_lk_cFv */ void daPy_lk_c::setWeaponBlur() { - /* Nonmatching */ + JKRHeap *pJVar1 = setItemHeap(); + + mSwBlur.mpPosBuffer = new (0x20) Vec[2 * 0x300]; + mDoExt_setCurrentHeap(pJVar1); + return; } /* 8013A904-8013A97C .text checkGrabBarrelSearch__9daPy_lk_cFi */ -BOOL daPy_lk_c::checkGrabBarrelSearch(int) { - /* Nonmatching */ +BOOL daPy_lk_c::checkGrabBarrelSearch(int param_0) { + fopAc_ac_c *pfVar1; + + if (param_0 != 0) { + if (mActorKeepGrab.getID() == fpcM_ERROR_PROCESS_ID_e) { + return false; + } + pfVar1 = fopAcM_SearchByID(mActorKeepGrab.getID()); + } else { + pfVar1 = mActorKeepGrab.getActor(); + } + if ((pfVar1 != NULL) && ((fopAcM_GetName(pfVar1) == PROC_Obj_Barrel))) { + return true; + } else { + return false; + } } /* 8013A97C-8013AF84 .text setGrabItemPos__9daPy_lk_cFv */ void daPy_lk_c::setGrabItemPos() { - /* Nonmatching */ + /* Nonmatching - floats, math around the + "getStart() - getFrame()" section. */ static f32 magtail_offset = 40.0f; + float dVar10; + cXyz cStack_58; + cXyz local_64; + + fopAc_ac_c *pfVar8 = mActorKeepGrab.getActor(); + if (pfVar8 != NULL) { + if (mCurProc == daPyProc_GRAB_READY_e) { + mDoMtx_trans(mDoMtx_stack_c::now, current.pos.x, current.pos.y, + current.pos.z); + mDoMtx_YrotM(mDoMtx_stack_c::now, (int)(short)(shape_angle.y - m34D4)); + mDoMtx_multVec(mDoMtx_stack_c::now, &m370C, &pfVar8->current.pos); + } else { + s8 sVar2 = current.roomNo; + pfVar8->tevStr.mRoomNo = sVar2; + pfVar8->tevStr.mEnvrIdxOverride = tevStr.mEnvrIdxOverride; + pfVar8->current.roomNo = sVar2; + if (((!checkNoResetFlg0(daPyFlg0_UNK400)) && + (checkGrabBarrelSearch(0))) && + (!doButton())) { + onNoResetFlg0(daPyFlg0_UNK400); + for (int i = 0; i < 3; i++) { + mAcchCir[i].SetWallR(50.0f); + } + } + if (mCurProc == daPyProc_GRAB_UP_e) { + cLib_chaseAngleS(&pfVar8->shape_angle.y, shape_angle.y, 0x1000); + } else { + if (mCurProc != daPyProc_DEMO_STAND_ITEM_PUT_e) { + pfVar8->shape_angle.y = shape_angle.y; + } + pfVar8->shape_angle.z = m351C; + if (checkNoResetFlg0(daPyFlg0_UNK400)) { + if (mCurProc == daPyProc_GRAB_PUT_e) { + dVar10 = 0.0f; + } else if ((mCurProc == daPyProc_GRAB_WAIT_e) || + (mCurProc == daPyProc_WAIT_TURN_e)) { + dVar10 = -115.0f; + } else { + dVar10 = -85.0f; + } + field_0x2b0 += m35D8; + cLib_addCalc(&field_0x2b0, dVar10, 0.5f, 20.0f, 1.0f); + if (field_0x2b0 < -85.0f) { + m35D8 = field_0x2b0 - -85.0f; + field_0x2b0 = -85.0f; + } else { + m35D8 = 0.0f; + } + s16 sVar6; + if ((speedF > 0.0f) && (m34C3 != 0)) { + sVar6 = + (short)(2048.0f * + cM_ssin( + cM_rad2s(( + (6.2831855f * + mFrameCtrlUnder[UNDER_MOVE1_e].getFrame()) / + (int)mFrameCtrlUnder[UNDER_MOVE1_e].getEnd())) & + 0xffff)); + } else { + sVar6 = 0; + } + s16 local_68 = pfVar8[2].eventInfo.mEventId; + cLib_addCalcAngleS(&local_68, sVar6, 5, 0x200, 0x80); + pfVar8[2].eventInfo.mEventId = local_68; + } + } + if (mCurProc == daPyProc_GRAB_UP_e) { + cStack_58 = pfVar8->current.pos; + } + pfVar8->current.pos = ((mLeftHandPos + mRightHandPos) * 0.5f); + pfVar8->current.pos.y += field_0x2b0; + f32 fVar1; + if ((m_anm_heap_under[UNDER_MOVE0_e]).mIdx == LKANM_BCK_GRABUP) { + dVar10 = (1.0f - (((uint)mFrameCtrlUnder[UNDER_MOVE0_e].getStart() - + mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()) / + ((int)mFrameCtrlUnder[UNDER_MOVE0_e].getEnd()))); + fVar1 = (m35C8 * dVar10); + pfVar8->current.pos.x += fVar1 * cM_ssin(shape_angle.y); + pfVar8->current.pos.z += fVar1 * cM_scos(shape_angle.y); + if (mCurProc == daPyProc_GRAB_PUT_e) { + pfVar8->current.pos.y += (-18.07f * dVar10); + } else { + pfVar8->current.pos.y += (-16.41f * dVar10); + } + if (mCurProc == daPyProc_GRAB_PUT_e) { + local_64.set(pfVar8->current.pos.x, current.pos.y + 125.0f, + pfVar8->current.pos.z); + mGndChk.SetPos(&local_64); + f32 dVar9 = dComIfG_Bgsp()->GroundCross(&mGndChk); + if (dVar9 > pfVar8->current.pos.y) { + pfVar8->speedF = 0.0f; + pfVar8->current.pos.y = dVar9; + freeGrabItem(); + goto LAB_8013af64; + } + } + if (fopAcM_GetName(pfVar8) == PROC_MT) { + pfVar8->current.pos.y += magtail_offset * (1.0f - dVar10); + } + } else if (fopAcM_GetName(pfVar8) == PROC_MT) { + fVar1 = -magtail_offset * cM_ssin(m351C); + pfVar8->current.pos.x += fVar1 * cM_scos(shape_angle.y); + pfVar8->current.pos.y += magtail_offset * cM_scos(m351C); + pfVar8->current.pos.z += -fVar1 * cM_ssin(shape_angle.y); + } + if ((mCurProc == daPyProc_GRAB_UP_e) && + (pfVar8->current.pos.y < cStack_58.y)) { + pfVar8->current.pos = cStack_58; + } + if (checkNoResetFlg0(daPyFlg0_UNK400)) { + m35CC = 0.0f; + } else { + if ((checkModeFlg(ModeFlg_MIDAIR)) && (fVar1 = speed.y, fVar1 < 0.0f)) { + m35CC -= 0.2f * fVar1; + if (m35CC > 40.0f) { + m35CC = 40.0f; + } + } else { + cLib_chaseF(&m35CC, 0.0f, 5.0f); + } + } + pfVar8->current.pos.y = pfVar8->current.pos.y + m35CC; + } + } + LAB_8013af64: + return; } /* 8013AF84-8013B05C .text freeGrabItem__9daPy_lk_cFv */ void daPy_lk_c::freeGrabItem() { - /* Nonmatching */ + daObjBarrel::Act_c *barrel = + static_cast(mActorKeepGrab.getActor()); + + if (barrel != NULL) { + fopAcM_cancelCarryNow(barrel); + (barrel->shape_angle).z = 0; + if (checkGrabBarrelSearch(0)) { + barrel->m61C = 0; + } + } + mActorKeepGrab.clearData(); + if (checkGrabAnime()) { + resetActAnimeUpper(UPPER_MOVE2_e, daPy_HIO_basic_c0::m.field_0xC); + } + field_0x2b0 = 0.0f; + m35CC = 0.0f; + offNoResetFlg0(daPyFlg0_UNK400); + dComIfGp_clearPlayerStatus1(0, daPyStts1_UNK40000_e); + return; } /* 8013B05C-8013B458 .text checkNextActionGrab__9daPy_lk_cFv */ BOOL daPy_lk_c::checkNextActionGrab() { - /* Nonmatching */ + /* Nonmatching - branching */ + fopAc_ac_c *pfVar7 = mActorKeepGrab.getActor(); + + if (pfVar7 == NULL) { + return false; + } else { + int iVar3 = checkGrabBarrelSearch(0); + if ((fopAcM_CheckStatus(pfVar7, fopAcStts_UNK10000_e)) && + (!checkGrabSpecialHeavyState())) { + g_dComIfG_gameInfo.play.field_0x492d = 14; + dComIfGp_setDoStatus(14); + } else { + g_dComIfG_gameInfo.play.field_0x492d = 9; + } + if ((((mpAttnActorLockOn == NULL) && (mpAttnEntryA != NULL)) && + (iVar3 == 0)) && + ((mpAttnEntryA->mType == 5 && + (fopAcM_CheckStatus(pfVar7, fopAcStts_UNK2000000_e))))) { + dComIfGp_setDoStatus(11); + } else if (iVar3 != 0) { + dComIfGp_setDoStatus(9); + } else { + if (mpAttention->Lockon()) { + int iVar4 = getDirectionFromShapeAngle(); + if ((mStickDistance <= 0.05f) || + ((mStickDistance > 0.05f && ((iVar4 == 0 || (iVar4 == 1)))))) { + dComIfGp_setDoStatus(14); + } + } else { + dComIfGp_setDoStatus(14); + } + } + if ((setHintActor()) && (doTrigger())) { + fopAcM_orderZHintEvent(this, dComIfGp_att_getZHint()); + return true; + } else { + if ((checkSetItemTrigger(dItem_MAGIC_ARMOR_e, 1)) || + ((checkNoResetFlg1(daPyFlg1_EQUIP_DRAGON_SHIELD) && + (checkSetItemTrigger(dItem_MAGIC_ARMOR_e, 0))))) { + changeDragonShield(1); + return true; + } else { + if ((checkSetItemTrigger(dItem_IRON_BOOTS_e, 1)) || + ((checkNoResetFlg0(daPyFlg0_EQUIP_HEAVY_BOOTS) && + (checkSetItemTrigger(dItem_IRON_BOOTS_e, 0))))) { + procBootsEquip_init(dItem_IRON_BOOTS_e); + } else if ((fopAcM_GetName(pfVar7) == PROC_BOMB) && + (checkSetItemTrigger(dItem_BOMB_BAG_e, 0))) { + procGrabThrow_init(0); + } else if ((cancelTrigger()) && (checkSwordEquip()) && (iVar3 == 0)) { + if (g_dComIfG_gameInfo.play.field_0x492d == 14) { + procGrabThrow_init(1); + } else { + freeGrabItem(); + setAnimeEquipSword(0); + return true; + } + } else if (((!doTrigger()) || + (checkNoResetFlg0(daPy_FLG0(daPyFlg0_UNK20000000 | + daPyFlg0_UNK80000000)))) || + (dComIfGp_getDoStatus() == 11)) { + fopAcM_orderDoorEvent(this, mpAttnActorA); + return true; + } else if (((!doTrigger()) || (dComIfGp_getDoStatus() != 14)) && + ((g_dComIfG_gameInfo.play.field_0x492d != 14 || + (((mItemTrigger & 0x1f) == 0 && (spActionTrigger())))))) { + if (cancelTrigger()) { + procGrabThrow_init(1); + } else { + procGrabThrow_init(0); + } + } else if ((((mItemTrigger & 0x1f) != 0) || (spActionTrigger())) && + ((!doTrigger() || (dComIfGp_getDoStatus() != 0)))) { + procGrabPut_init(); + } else { + return false; + } + } + } + } } /* 8013B458-8013B56C .text initGrabNextMode__9daPy_lk_cFv */ void daPy_lk_c::initGrabNextMode() { - /* Nonmatching */ + if (fopAcM_CheckStatus(mActorKeepGrab.getActor(), fopAcStts_UNK10000_e)) { + if (!checkGrabSpecialHeavyState()) { + procGrabHeavyWait_init(); + } else { + if (!checkGrabAnime()) { + setActAnimeUpper(LKANM_BCK_GRABWAITB, UPPER_MOVE2_e, 0.0f, 0.0f, -1, + -1.0f); + } + m_pbCalc[PART_UPPER_e]->setRatio(2, 1.0f); + checkNextMode(0); + } + } else { + if (!checkGrabAnime()) { + setActAnimeUpper(LKANM_BCK_GRABWAIT, UPPER_MOVE2_e, 0.0f, 0.0f, -1, + -1.0f); + } + m_pbCalc[PART_UPPER_e]->setRatio(2, 1.0f); + checkNextMode(0); + } + return; } /* 8013B56C-8013B6F4 .text procGrabReady_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procGrabReady_init() { - /* Nonmatching */ + commonProcInit(daPyProc_GRAB_READY_e); + mVelocity = 0.0f; + if (mEquipItem == daPyItem_NONE_e) { + if (checkEquipAnime()) { + resetActAnimeUpper(UPPER_MOVE2_e, -1.0f); + } + setSingleMoveAnime(ANM_GRABP, daPy_HIO_grab_c0::m.field_0x20, + daPy_HIO_grab_c0::m.field_0x24, + daPy_HIO_grab_c0::m.field_0x0, + daPy_HIO_grab_c0::m.field_0x28); + m3570 = 1; + } else { + setBlendMoveAnime(daPy_HIO_basic_c0::m.field_0xC); + setAnimeUnequip(); + m3570 = 0; + } + if (((dComIfGs_getSelectEquip(2) == dItem_POWER_BRACELETS_e) || + (!fopAcM_CheckStatus(mpAttnActorA, fopAcStts_UNK10000_e))) && + (!fopAcM_CheckStatus(mpAttnActorA, fopAcStts_CARRY_e))) { + fopAcM_setCarryNow(mpAttnActorA, 1); + mActorKeepGrab.setData(mpAttnActorA); + mActorKeepRope.clearData(); + } else { + mActorKeepRope.setData(mpAttnActorA); + freeGrabItem(); + } + if (fopAcM_GetName(mpAttnActorA) == PROC_BOKO) { + daBoko_c *boko = static_cast(mpAttnActorA); + boko->mCurrentAction = 3; + } + shape_angle.y = fopAcM_searchActorAngleY(this, mpAttnActorA); + current.angle.y = shape_angle.y; + m34D4 = shape_angle.y; + m370C = mpAttnActorA->current.pos - m3748; + return true; } /* 8013B6F4-8013B8A0 .text procGrabReady__9daPy_lk_cFv */ BOOL daPy_lk_c::procGrabReady() { - /* Nonmatching */ + fopAc_ac_c *pfVar4 = mActorKeepGrab.getActor(); + + if ((pfVar4 == NULL) && (mActorKeepRope.getActor() == NULL)) { + return checkNextMode(0); + } else { + if ((m3570 == 2) && + (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.0099999998f)) { + procGrabUp_init(); + } else if ((m3570 == 1) && + (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.0099999998f)) { + if (pfVar4 != NULL) { + if (fopAcM_GetName(pfVar4) == PROC_BOKO) { + mEquipItem = daPyItem_BOKO_e; + mActorKeepEquip = mActorKeepGrab; + mActorKeepGrab.clearData(); + setWeaponBlur(); + checkNextMode(0); + } else if (fopAcM_CheckStatus(pfVar4, fopAcStts_UNK10000_e | + fopAcStts_UNK8000000_e)) { + f32 fVar1; + if (fopAcM_CheckStatus(pfVar4, fopAcStts_UNK8000000_e)) { + fVar1 = daPy_HIO_grab_c0::m.field_0xA4; + } else { + fVar1 = daPy_HIO_grab_c0::m.field_0xA8; + } + setSingleMoveAnime(ANM_GRABNG, fVar1, daPy_HIO_grab_c0::m.field_0x40, + daPy_HIO_grab_c0::m.field_0x10, + daPy_HIO_grab_c0::m.field_0x44); + m3570 = 2; + } else { + procGrabUp_init(); + } + } else if (mActorKeepRope.getActor() != NULL) { + procGrabMiss_init(); + } else { + checkNextMode(0); + } + } else if ((m3570 == 0) && + (m_anm_heap_upper[UPPER_MOVE2_e].mIdx == 0xffff)) { + setSingleMoveAnime(ANM_GRABP, daPy_HIO_grab_c0::m.field_0x20, + daPy_HIO_grab_c0::m.field_0x24, + daPy_HIO_grab_c0::m.field_0x0, + daPy_HIO_grab_c0::m.field_0x28); + m3570 = 1; + } + return true; + } } /* 8013B8A0-8013BA50 .text procGrabUp_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procGrabUp_init() { - /* Nonmatching */ + /* Nonmatching - floats */ + commonProcInit(daPyProc_GRAB_UP_e); + fopAc_ac_c *pfVar5 = mActorKeepGrab.getActor(); + s16 sVar1; + if (fopAcM_CheckStatus(pfVar5, + fopAcStts_UNK10000_e | fopAcStts_UNK8000000_e)) { + sVar1 = daPy_HIO_grab_c0::m.field_0x12; + } else { + sVar1 = daPy_HIO_grab_c0::m.field_0x2; + } + setSingleMoveAnime(ANM_GRABUP, daPy_HIO_grab_c0::m.field_0x2C, + daPy_HIO_grab_c0::m.field_0x30, sVar1, + daPy_HIO_grab_c0::m.field_0x38); + m370C = mActorKeepGrab.getActor()->current.pos - m3748; + m35C8 = m370C.absXZ() - 47.0f; + if (fopAcM_CheckStatus(mActorKeepGrab.getActor(), fopAcStts_UNK10000_e)) { + voiceStart(16); + } else { + voiceStart(15); + } + fopAcM_setStageLayer(mActorKeepGrab.getActor()); + onResetFlg0(daPyRFlg0_GRAB_UP_START); + if (fopAcM_GetName(mActorKeepGrab.getActor()) == PROC_Stone2) { + dComIfGp_setPlayerStatus1(0, daPyStts1_UNK40000_e); + } + return true; } /* 8013BA50-8013BBBC .text procGrabUp__9daPy_lk_cFv */ BOOL daPy_lk_c::procGrabUp() { - /* Nonmatching */ + fopAc_ac_c *pfVar5 = mActorKeepGrab.getActor(); + + if (pfVar5 == NULL) { + return checkNextMode(0); + } else { + if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.0099999998f) { + onResetFlg0(daPyRFlg0_GRAB_UP_END); + if (fopAcM_CheckStatus(pfVar5, + fopAcStts_UNK10000_e | fopAcStts_UNK8000000_e)) { + procGrabRebound_init(); + } else { + initGrabNextMode(); + } + } else { + if (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() > + daPy_HIO_grab_c0::m.field_0x34) { + if (fopAcM_CheckStatus(pfVar5, + fopAcStts_UNK10000_e | fopAcStts_UNK8000000_e)) { + if (mStickDistance > 0.05f) { + onResetFlg0(daPyRFlg0_GRAB_UP_END); + procGrabRebound_init(); + } + } else { + if (!checkGrabAnime()) { + setActAnimeUpper(LKANM_BCK_GRABWAIT, UPPER_MOVE2_e, 0.0f, 0.0f, -1, + -1.0f); + m_pbCalc[PART_UPPER_e]->setRatio(2, 0.0f); + } + if (checkNextMode(1)) { + onResetFlg0(daPyRFlg0_GRAB_UP_END); + if (checkGrabAnime()) { + m_pbCalc[PART_UPPER_e]->setRatio(2, 1.0f); + } + } + } + } + } + return true; + } } /* 8013BBBC-8013BC40 .text procGrabMiss_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procGrabMiss_init() { - /* Nonmatching */ + commonProcInit(daPyProc_GRAB_MISS_e); + setSingleMoveAnime(ANM_GRABNG, daPy_HIO_grab_c0::m.field_0x3C, + daPy_HIO_grab_c0::m.field_0x40, + daPy_HIO_grab_c0::m.field_0x4, + daPy_HIO_grab_c0::m.field_0x44); + m3570 = 0; + m34D0 = daPy_HIO_grab_c0::m.field_0x6; + dComIfGs_onEventBit(0x4020); + return true; } /* 8013BC40-8013BD30 .text procGrabMiss__9daPy_lk_cFv */ BOOL daPy_lk_c::procGrabMiss() { - /* Nonmatching */ + /* Nonmatching - floats */ + if (mActorKeepRope.getActor() == NULL) { + checkNextMode(0); + } + if (m3570 == 0) { + if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.0099999998f) { + if ((int)m34D0 > 0) { + m34D0--; + } else { + setSingleMoveAnime(ANM_GRABP, daPy_HIO_grab_c0::m.field_0x48, + daPy_HIO_grab_c0::m.field_0x4C, + daPy_HIO_grab_c0::m.field_0x8, + daPy_HIO_grab_c0::m.field_0x54); + m3570 = 1; + freeGrabItem(); + } + } + } else if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() > -0.0099999998f) { + checkNextMode(0); + } else { + if (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() < + daPy_HIO_grab_c0::m.field_0x50) { + checkNextMode(1); + } + } + return true; } /* 8013BD30-8013BE10 .text procGrabThrow_init__9daPy_lk_cFi */ -BOOL daPy_lk_c::procGrabThrow_init(int) { - /* Nonmatching */ +BOOL daPy_lk_c::procGrabThrow_init(int param_0) { + if (mCurProc == daPyProc_GRAB_THROW_e) { + return false; + } else { + commonProcInit(daPyProc_GRAB_THROW_e); + if (fopAcM_CheckStatus(mActorKeepGrab.getActor(), fopAcStts_UNK10000_e)) { + setSingleMoveAnime(ANM_GRABRE, daPy_HIO_grab_c0::m.field_0x94, + daPy_HIO_grab_c0::m.field_0x98, + daPy_HIO_grab_c0::m.field_0x1C, + daPy_HIO_grab_c0::m.field_0xA0); + m3574 = 0; + } else { + setSingleMoveAnime(ANM_GRABTHROW, daPy_HIO_grab_c0::m.field_0x58, + daPy_HIO_grab_c0::m.field_0x5C, + daPy_HIO_grab_c0::m.field_0xA, + daPy_HIO_grab_c0::m.field_0x64); + m3574 = 1; + } + m35A0 = mVelocity; + dComIfGp_clearPlayerStatus1(0, daPyStts1_UNK40000_e); + m3570 = param_0; + return true; + } } /* 8013BE10-8013C020 .text procGrabThrow__9daPy_lk_cFv */ BOOL daPy_lk_c::procGrabThrow() { - /* Nonmatching */ + J3DFrameCtrl &frameCtrl = mFrameCtrlUnder[UNDER_MOVE0_e]; + fopAc_ac_c *pfVar3 = mActorKeepGrab.getActor(); + + cLib_addCalc(&mVelocity, 0.0f, daPy_HIO_move_c0::m.field_0x24, + daPy_HIO_move_c0::m.field_0x1C, daPy_HIO_move_c0::m.field_0x20); + if (m3574 == 0) { + if (frameCtrl.getRate() < 0.0099999998f) { + setSingleMoveAnime(ANM_GRABTHROW, daPy_HIO_grab_c0::m.field_0x58, + daPy_HIO_grab_c0::m.field_0x5C, + daPy_HIO_grab_c0::m.field_0xA, + daPy_HIO_grab_c0::m.field_0x64); + m3574 = 1; + } + return true; + } else { + if ((frameCtrl.checkPass(daPy_HIO_grab_c0::m.field_0x8C)) && + (pfVar3 != NULL)) { + pfVar3->current.angle.y = shape_angle.y; + pfVar3->speedF = daPy_HIO_grab_c0::m.field_0x84; + pfVar3->speed.y = daPy_HIO_grab_c0::m.field_0x88; + dComIfGp_getCamera(mCameraInfoIdx) + ->mCamera.ForceLockOn(mActorKeepGrab.getID()); + if (fopAcM_CheckStatus(pfVar3, fopAcStts_UNK10000_e)) { + voiceStart(18); + } else if ((fopAcM_GetName(pfVar3) == PROC_BOMB) || + (fopAcM_GetName(pfVar3) == PROC_Bomb2)) { + voiceStart(0); + } else { + voiceStart(17); + } + freeGrabItem(); + } + } + if (frameCtrl.getRate() < 0.0099999998f) { + if (m3570 != 0) { + m3570 = 0; + setAnimeEquipSword(0); + } + checkNextMode(0); + } else { + if (frameCtrl.getFrame() > daPy_HIO_grab_c0::m.field_0x60) { + if (m3570 != 0) { + m3570 = 0; + setAnimeEquipSword(0); + } + checkNextMode(1); + } + } + return true; } /* 8013C020-8013C124 .text procGrabPut_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procGrabPut_init() { - /* Nonmatching */ + if (mCurProc == daPyProc_GRAB_PUT_e) { + return false; + } else { + commonProcInit(daPyProc_GRAB_PUT_e); + if (field_0x2b0 < 0.0f) { + m3570 = 1; + setSingleMoveAnime(ANM_GRABWAIT, daPy_HIO_grab_c0::m.field_0x78, 0.0f, -1, + daPy_HIO_grab_c0::m.field_0x7C); + } else { + m3570 = 0; + setSingleMoveAnime(ANM_GRABUP, daPy_HIO_grab_c0::m.field_0x68, + daPy_HIO_grab_c0::m.field_0x6C, + daPy_HIO_grab_c0::m.field_0xC, + daPy_HIO_grab_c0::m.field_0x74); + } + mVelocity = 0.0f; + fopAc_ac_c *pfVar3 = mActorKeepGrab.getActor(); + if (pfVar3 != NULL) { + m370C = pfVar3->current.pos; + } else { + m370C = current.pos; + } + onResetFlg0(daPyRFlg0_GRAB_PUT_START); + return true; + } } /* 8013C124-8013C504 .text procGrabPut__9daPy_lk_cFv */ BOOL daPy_lk_c::procGrabPut() { - /* Nonmatching */ + /* Nonmatching - floats */ + fopAc_ac_c *pfVar4 = mActorKeepGrab.getActor(); + + if (pfVar4 == NULL) { + if (mDemo.getDemoMode() == 0x38) { + dComIfGp_evmng_cutEnd(mStaffIdx); + return true; + } else { + checkNextMode(0); + } + } else { + if (m3570 == 1) { + if (!(field_0x2b0 < 0.0f)) { + m3570 = 0; + setSingleMoveAnime(ANM_GRABUP, daPy_HIO_grab_c0::m.field_0x68, + daPy_HIO_grab_c0::m.field_0x6C, + daPy_HIO_grab_c0::m.field_0xC, + daPy_HIO_grab_c0::m.field_0x74); + } else { + return true; + } + } + cXyz local_2c; + local_2c.set(pfVar4->current.pos.x + m35C8 * cM_ssin(shape_angle.y), + (pfVar4->current).pos.y, + pfVar4->current.pos.z + m35C8 * cM_scos(shape_angle.y)); + mLinkLinChk.Set(&m370C, &local_2c, this); + if (dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { + cM3dGPla *triPla = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); + bool bVar1; + if ((!(triPla->GetNP()->y >= 0.5f)) && (!(triPla->GetNP()->y < -0.8f))) { + bVar1 = true; + } else { + bVar1 = false; + } + if (bVar1) { + cXyz local_44 = (local_2c - mLinkLinChk.GetCross()); + f32 dVar7 = local_44.abs(); + f32 dVar5 = local_44.absXZ(); + if (dVar5 > 0.0099999998f) { + float dVar6 = (dVar7 / dVar5); + local_44.x *= dVar6; + local_44.z *= dVar6; + } else { + local_44.x *= dVar7; + local_44.z *= dVar7; + } + current.pos.x -= local_44.x; + current.pos.z -= local_44.z; + pfVar4->current.pos.x -= local_44.x; + pfVar4->current.pos.z -= local_44.z; + } + } + m370C = pfVar4->current.pos; + if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() > -0.0099999998f) { + pfVar4->speedF = 0.0f; + freeGrabItem(); + if (mDemo.getDemoMode() == 0x38) { + dComIfGp_evmng_cutEnd(mStaffIdx); + } else { + checkNextMode(0); + } + } else { + if (((mFrameCtrlUnder[UNDER_MOVE0_e]).getFrame() < + daPy_HIO_grab_c0::m.field_0x70) && + (checkNextMode(1))) { + pfVar4->speedF = 0.0f; + freeGrabItem(); + } + } + return true; + } } /* 8013C504-8013C678 .text procGrabWait_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procGrabWait_init() { - /* Nonmatching */ + /* Nonmatching - floats */ + if (mCurProc == daPyProc_GRAB_WAIT_e) { + return false; + } else { + commonProcInit(daPyProc_GRAB_WAIT_e); + if (checkGrabSpecialHeavyState()) { + setSingleMoveAnime(ANM_GRABWAITB, daPy_HIO_grab_c0::m.field_0x90, 0.0f, + -1, daPy_HIO_grab_c0::m.field_0x7C); + if (!checkGrabAnime()) { + setActAnimeUpper(LKANM_BCK_GRABWAITB, UPPER_MOVE2_e, 0.0f, 0.0f, -1, + -1.0f); + } + } else { + setSingleMoveAnime(ANM_GRABWAIT, daPy_HIO_grab_c0::m.field_0x78, 0.0f, -1, + daPy_HIO_grab_c0::m.field_0x7C); + if (!checkGrabAnime()) { + setActAnimeUpper(LKANM_BCK_GRABWAIT, UPPER_MOVE2_e, 0.0f, 0.0f, -1, + -1.0f); + } + } + m_pbCalc[PART_UPPER_e]->setRatio(2, 0.0f); + current.angle.y = shape_angle.y; + mVelocity = 0.0f; + m35A0 = 0.0f; + if (m35D8 <= -29.0f) { + m3570 = 1; + } else { + m3570 = 0; + } + return true; + } } /* 8013C678-8013C914 .text procGrabWait__9daPy_lk_cFv */ BOOL daPy_lk_c::procGrabWait() { - /* Nonmatching */ + /* Nonmatching - floats, branching */ + if (mActorKeepGrab.getActor() == NULL) { + resetActAnimeUpper(UPPER_MOVE2_e, -1.0f); + checkNextMode(0); + } else { + if (mpAttention->Lockon()) { + setSpeedAndAngleAtn(); + } else { + setSpeedAndAngleNormal(daPy_HIO_move_c0::m.field_0x0); + } + if (m35D8 <= -29.0f) { + if (((mFrameCtrlUnder[UNDER_MOVE0_e].getRate() > 0.0f) && (m3570 == 0)) && + (m3570 = 1, + m_anm_heap_under[UNDER_MOVE0_e].mIdx == LKANM_BCK_GRABWAIT)) { + seStartMapInfo(JA_SE_LK_BARREL_PUT_ON); + } + mFrameCtrlUnder[UNDER_MOVE0_e].setRate(0.0f); + } else { + mFrameCtrlUnder[UNDER_MOVE0_e].setRate(daPy_HIO_grab_c0::m.field_0x78); + } + if (checkNextMode(0)) { + if (checkGrabAnime()) { + m_pbCalc[PART_UPPER_e]->setRatio(2, 1.0f); + } + } else { + if (shape_angle.y != m34DE) { + if (!mpAttention->Lockon()) { + float fVar2; + if (checkNoResetFlg1(daPyFlg1_UNK800000)) { + fVar2 = -1.0f; + } else { + fVar2 = daPy_HIO_basic_c0::m.field_0xC; + } + setBlendMoveAnime(fVar2); + m_pbCalc[PART_UPPER_e]->setRatio(2, 1.0f); + m35A0 = 0.0049999999f * (short)(shape_angle.y - m34DE); + onNoResetFlg1(daPyFlg1_UNK800000); + } + } else if (checkNoResetFlg1(daPyFlg1_UNK800000)) { + if (checkGrabSpecialHeavyState()) { + setSingleMoveAnime(ANM_GRABWAITB, daPy_HIO_grab_c0::m.field_0x90, + 0.0f, -1, daPy_HIO_grab_c0::m.field_0x7C); + } else { + setSingleMoveAnime(ANM_GRABWAIT, daPy_HIO_grab_c0::m.field_0x78, 0.0f, + -1, daPy_HIO_grab_c0::m.field_0x7C); + } + m_pbCalc[PART_UPPER_e]->setRatio(2, 0.0f); + m35A0 = 0.0f; + offNoResetFlg1(daPyFlg1_UNK800000); + } + } + return true; + } } /* 8013C914-8013C9AC .text procGrabHeavyWait_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procGrabHeavyWait_init() { - /* Nonmatching */ + commonProcInit(daPyProc_GRAB_HEAVY_WAIT_e); + setSingleMoveAnime(ANM_GRABWAITB, daPy_HIO_grab_c0::m.field_0x90, 0.0f, -1, + daPy_HIO_grab_c0::m.field_0x7C); + setActAnimeUpper(LKANM_BCK_GRABWAITB, UPPER_MOVE2_e, 0.0f, 0.0f, -1, -1.0f); + m_pbCalc[PART_UPPER_e]->setRatio(2, 0.0f); + current.angle.y = shape_angle.y; + mVelocity = 0.0f; + m35A0 = 0.0f; + return true; } /* 8013C9AC-8013CB78 .text procGrabHeavyWait__9daPy_lk_cFv */ BOOL daPy_lk_c::procGrabHeavyWait() { - /* Nonmatching */ + /* Nonmatching - branching, math + (HIO_grab field_0x18). */ + if (mActorKeepGrab.getActor() == NULL) { + resetActAnimeUpper(UPPER_MOVE2_e, -1.0f); + checkNextMode(0); + } else { + if ((!mpAttention->Lockon()) && (mStickDistance > 0.05f)) { + cLib_addCalcAngleS(&shape_angle.y, m34E8, daPy_HIO_grab_c0::m.field_0x16, + daPy_HIO_grab_c0::m.field_0x18, + daPy_HIO_grab_c0::m.field_0x1A); + m35A0 = (int)(short)((shape_angle.y - current.angle.y) / + daPy_HIO_grab_c0::m.field_0x18); + current.angle.y = shape_angle.y; + f32 fVar1; + if (checkNoResetFlg1(daPyFlg1_UNK800000)) { + fVar1 = -1.0f; + } else { + fVar1 = daPy_HIO_basic_c0::m.field_0xC; + } + setBlendMoveAnime(fVar1); + m_pbCalc[PART_UPPER_e]->setRatio(2, 1.0f); + onNoResetFlg1(daPyFlg1_UNK800000); + } else { + m35A0 = 0.0f; + if (checkNoResetFlg1(daPyFlg1_UNK800000)) { + setSingleMoveAnime(ANM_GRABWAITB, daPy_HIO_grab_c0::m.field_0x90, 0.0f, + -1, daPy_HIO_grab_c0::m.field_0x7C); + m_pbCalc[PART_UPPER_e]->setRatio(2, 0.0f); + offNoResetFlg1(daPyFlg1_UNK800000); + } + } + if (mActorKeepGrab.getActor() == NULL) { + checkNextMode(0); + } else { + checkNextActionGrab(); + } + } + return true; } /* 8013CB78-8013CBD0 .text procGrabRebound_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procGrabRebound_init() { - /* Nonmatching */ + commonProcInit(daPyProc_GRAB_REBOUND_e); + setSingleMoveAnime(ANM_GRABRE, daPy_HIO_grab_c0::m.field_0x94, + daPy_HIO_grab_c0::m.field_0x98, + daPy_HIO_grab_c0::m.field_0xE, + daPy_HIO_grab_c0::m.field_0xA0); + return true; } /* 8013CBD0-8013CC64 .text procGrabRebound__9daPy_lk_cFv */ BOOL daPy_lk_c::procGrabRebound() { - /* Nonmatching */ + fopAc_ac_c *pfVar2 = mActorKeepGrab.getActor(); + + if (pfVar2 == NULL) { + resetActAnimeUpper(UPPER_MOVE2_e, -1.0f); + return checkNextMode(0); + } else { + if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.0099999998f) { + initGrabNextMode(); + } else { + if ((mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() > + daPy_HIO_grab_c0::m.field_0x9C) && + (fopAcM_CheckStatus(pfVar2, fopAcStts_UNK10000_e))) { + initGrabNextMode(); + } + } + return true; + } } diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index 5299410d1..8d6d60bdf 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -1121,7 +1121,7 @@ BOOL daPy_lk_c::setTalkStatus() { } /* 80108634-801086C8 .text setHintActor__9daPy_lk_cFv */ -void daPy_lk_c::setHintActor() { +int daPy_lk_c::setHintActor() { /* Nonmatching */ }