mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-11 14:38:38 -04:00
d_a_player_bow.inc - Almost all matching with only minor issues. (#723)
Co-authored-by: < >
This commit is contained in:
@@ -1519,7 +1519,7 @@ public:
|
||||
BOOL procBoomerangMove();
|
||||
BOOL procBoomerangCatch_init();
|
||||
BOOL procBoomerangCatch();
|
||||
void bowJointCB(int);
|
||||
BOOL bowJointCB(int);
|
||||
BOOL bowButton() const;
|
||||
BOOL checkBowReadyAnime() const;
|
||||
BOOL checkBowAnime() const;
|
||||
|
||||
+231
-26
@@ -2,25 +2,49 @@
|
||||
* d_a_player_bow.inc
|
||||
*
|
||||
* Code relating to the Bow 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_arrow.h"
|
||||
#include "d/actor/d_a_player_HIO.h"
|
||||
#include "d/actor/d_a_player_main.h"
|
||||
#include "d/d_procname.h"
|
||||
|
||||
/* 80149ECC-80149F88 .text bowJointCB__9daPy_lk_cFi */
|
||||
void daPy_lk_c::bowJointCB(int) {
|
||||
/* Nonmatching */
|
||||
BOOL daPy_lk_c::bowJointCB(int param_0) {
|
||||
/* Nonmatching - floats */
|
||||
if (checkBowReadyAnime()) {
|
||||
return true;
|
||||
} else {
|
||||
if (param_0 == 6) {
|
||||
mDoMtx_trans(mDoMtx_stack_c::now, 0.0f, 4.5f, 4.5f);
|
||||
mDoMtx_concat(mpEquipItemModel->getAnmMtx(6), mDoMtx_stack_c::now,
|
||||
mDoMtx_stack_c::now);
|
||||
mpEquipItemModel->setAnmMtx(param_0, mDoMtx_stack_c::now);
|
||||
} else {
|
||||
mpEquipItemModel->setAnmMtx(11, mpEquipItemModel->getAnmMtx(6));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 80149F88-80149FD0 .text daPy_bowJointCB__FP7J3DNodei */
|
||||
static BOOL daPy_bowJointCB(J3DNode*, int) {
|
||||
/* Nonmatching */
|
||||
static BOOL daPy_bowJointCB(J3DNode *node, int calcTiming) {
|
||||
if (calcTiming == J3DNodeCBCalcTiming_In) {
|
||||
J3DJoint *joint = static_cast<J3DJoint *>(node);
|
||||
s32 jntNo = joint->getJntNo();
|
||||
J3DModel *model = j3dSys.getModel();
|
||||
daPy_lk_c *i_this = reinterpret_cast<daPy_lk_c *>(model->getUserArea());
|
||||
if (i_this != 0) {
|
||||
i_this->bowJointCB(jntNo);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 80149FD0-8014A008 .text bowButton__9daPy_lk_cCFv */
|
||||
@@ -34,66 +58,206 @@ BOOL daPy_lk_c::bowButton() const {
|
||||
|
||||
/* 8014A008-8014A02C .text checkBowReadyAnime__9daPy_lk_cCFv */
|
||||
BOOL daPy_lk_c::checkBowReadyAnime() const {
|
||||
/* Nonmatching */
|
||||
return (m_anm_heap_upper[UPPER_MOVE2_e].mIdx == LKANM_BCK_ARROWRELORD) ||
|
||||
(m_anm_heap_upper[UPPER_MOVE2_e].mIdx == LKANM_BCK_BOWWAIT);
|
||||
}
|
||||
|
||||
/* 8014A02C-8014A080 .text checkBowAnime__9daPy_lk_cCFv */
|
||||
BOOL daPy_lk_c::checkBowAnime() const {
|
||||
/* Nonmatching */
|
||||
return (checkBowReadyAnime()) ||
|
||||
(m_anm_heap_upper[UPPER_MOVE2_e].mIdx == LKANM_BCK_ARROWSHOOT);
|
||||
}
|
||||
|
||||
/* 8014A080-8014A180 .text makeArrow__9daPy_lk_cFv */
|
||||
void daPy_lk_c::makeArrow() {
|
||||
/* Nonmatching */
|
||||
void daPy_lk_c::makeArrow() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 8014A180-8014A1CC .text deleteArrow__9daPy_lk_cFv */
|
||||
void daPy_lk_c::deleteArrow() {
|
||||
/* Nonmatching */
|
||||
fopAc_ac_c *pfVar1 = mActorKeepEquip.getActor();
|
||||
|
||||
if ((pfVar1 != NULL) && (fopAcM_GetName(pfVar1) == PROC_ARROW)) {
|
||||
fopAcM_delete(pfVar1);
|
||||
mActorKeepEquip.clearData();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/* 8014A1CC-8014A2A0 .text setBowReadyAnime__9daPy_lk_cFv */
|
||||
void daPy_lk_c::setBowReadyAnime() {
|
||||
/* Nonmatching */
|
||||
setActAnimeUpper(LKANM_BCK_ARROWSHOOT, UPPER_MOVE2_e, 1.0f,
|
||||
daPy_HIO_bow_c0::m.field_0x0 - 0.001f,
|
||||
daPy_HIO_bow_c0::m.field_0x0, 10.0f);
|
||||
mSwordAnim.changeBckOnly(getItemAnimeResource(LKANM_BCK_ARROWSHOOTA));
|
||||
m35EC = daPy_HIO_bow_c0::m.field_0x0 - 0.001f;
|
||||
setPriTextureAnime(0x70, 0);
|
||||
m355E = 10;
|
||||
seStartOnlyReverb(JA_SE_LK_ITEM_TAKEOUT);
|
||||
return;
|
||||
}
|
||||
|
||||
/* 8014A2A0-8014A328 .text setBowReloadAnime__9daPy_lk_cFv */
|
||||
void daPy_lk_c::setBowReloadAnime() {
|
||||
/* Nonmatching */
|
||||
setActAnimeUpper(
|
||||
LKANM_BCK_ARROWRELORD, UPPER_MOVE2_e, daPy_HIO_bow_c0::m.field_0x10,
|
||||
daPy_HIO_bow_c0::m.field_0x14, daPy_HIO_bow_c0::m.field_0x2,
|
||||
daPy_HIO_bow_c0::m.field_0x18);
|
||||
setPriTextureAnime(0x8d, 0);
|
||||
mSwordAnim.changeBckOnly(getItemAnimeResource(LKANM_BCK_ARROWRELORDA));
|
||||
m35EC = 0.0f;
|
||||
seStartOnlyReverb(JA_SE_LK_DRAW_BOW);
|
||||
return;
|
||||
}
|
||||
|
||||
/* 8014A328-8014A60C .text checkNextActionBowReady__9daPy_lk_cFv */
|
||||
BOOL daPy_lk_c::checkNextActionBowReady() {
|
||||
/* Nonmatching */
|
||||
/* Nonmatching - branching, regalloc */
|
||||
u16 uVar1 = m_anm_heap_upper[UPPER_MOVE2_e].mIdx;
|
||||
if (uVar1 == LKANM_BCK_BOWWAIT) {
|
||||
daArrow_c *bow = (daArrow_c *)mActorKeepEquip.getActor();
|
||||
if (m355C != 0) {
|
||||
setActAnimeUpper(
|
||||
LKANM_BCK_ARROWSHOOT, UPPER_MOVE2_e,
|
||||
daPy_HIO_bow_c0::m.field_0x4, daPy_HIO_bow_c0::m.field_0x8,
|
||||
daPy_HIO_bow_c0::m.field_0x0, daPy_HIO_bow_c0::m.field_0xC);
|
||||
setPriTextureAnime(0x70, 0);
|
||||
mSwordAnim.changeBckOnly(
|
||||
getItemAnimeResource(LKANM_BCK_ARROWSHOOTA));
|
||||
m35EC = 0.0f;
|
||||
} else {
|
||||
if (bowButton() == NULL) {
|
||||
if (bow != NULL) {
|
||||
fopAcM_SetParam(bow, 1);
|
||||
if (mDemo.getDemoMode() != 0x44) {
|
||||
dComIfGp_setItemArrowNumCount(-1);
|
||||
}
|
||||
mActorKeepEquip.clearData();
|
||||
seStartOnlyReverb(JA_SE_LK_SHOOT_ARROW);
|
||||
voiceStart(41);
|
||||
onResetFlg0(daPyRFlg0_ARROW_SHOOT);
|
||||
}
|
||||
m355C = 1;
|
||||
} else {
|
||||
if (bow->changeArrowMp()) {
|
||||
if (((mEquipItem != dItem_BOW_e) &&
|
||||
(dComIfGp_setRStatus(0x22), spActionTrigger())) &&
|
||||
(bow != NULL)) {
|
||||
bow = bow->changeArrowType();
|
||||
mActorKeepEquip.setData(bow);
|
||||
setBowReloadAnime();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
goto LAB_8014a5ec;
|
||||
}
|
||||
if (uVar1 == LKANM_BCK_ARROWRELORD) {
|
||||
if (mFrameCtrlUpper[UPPER_MOVE2_e].getRate() < 0.01f) {
|
||||
setActAnimeUpper(LKANM_BCK_BOWWAIT, UPPER_MOVE2_e, 1.0f, 0.0f, -1,
|
||||
-1.0f);
|
||||
mSwordAnim.changeBckOnly(getItemAnimeResource(LKANM_BCK_BOWWAITA));
|
||||
m35EC = 0.0f;
|
||||
setPriTextureAnime(0x70, 0);
|
||||
}
|
||||
goto LAB_8014a5ec;
|
||||
}
|
||||
if (uVar1 != LKANM_BCK_ARROWSHOOT)
|
||||
goto LAB_8014a5ec;
|
||||
if (mFrameCtrlUpper[UPPER_MOVE2_e].getRate() < 0.01f) {
|
||||
if ((m355E == 0) && (bowButton())) {
|
||||
if (mDemo.getDemoMode() != 0x44) {
|
||||
if (mEquipItem != getReadyItem())
|
||||
goto LAB_8014a5a0;
|
||||
}
|
||||
if (!checkNoResetFlg1(daPyFlg1_USE_ARROW_EFFECT)) {
|
||||
setBowReloadAnime();
|
||||
makeArrow();
|
||||
if (mActorKeepEquip.getActor() == NULL) {
|
||||
mDoAud_seStart(JA_SE_ITEM_TARGET_OUT);
|
||||
}
|
||||
goto LAB_8014a5d8;
|
||||
}
|
||||
}
|
||||
LAB_8014a5a0:
|
||||
daArrow_c *bow;
|
||||
if (bow->changeArrowMp()) {
|
||||
if ((mEquipItem != dItem_BOW_e) &&
|
||||
(dComIfGp_setRStatus(0x22), spActionTrigger())) {
|
||||
bow->changeArrowTypeNotReady();
|
||||
}
|
||||
}
|
||||
}
|
||||
LAB_8014a5d8:
|
||||
if (m355E != 0) {
|
||||
m355E--;
|
||||
}
|
||||
LAB_8014a5ec:
|
||||
cancelItemUpperReadyAnime();
|
||||
return;
|
||||
}
|
||||
|
||||
/* 8014A60C-8014A680 .text checkNextActionBowFly__9daPy_lk_cFv */
|
||||
BOOL daPy_lk_c::checkNextActionBowFly() {
|
||||
/* Nonmatching */
|
||||
if (checkBowAnime()) {
|
||||
checkNextActionBowReady();
|
||||
} else {
|
||||
if ((itemTrigger()) && (mEquipItem == getReadyItem())) {
|
||||
setBowReadyAnime();
|
||||
m355E = 0;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/* 8014A680-8014A6F4 .text checkNextBowMode__9daPy_lk_cFv */
|
||||
BOOL daPy_lk_c::checkNextBowMode() {
|
||||
/* Nonmatching */
|
||||
if (mpAttention->Lockon()) {
|
||||
procBowMove_init();
|
||||
} else {
|
||||
procBowSubject_init();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/* 8014A6F4-8014A834 .text setBowModel__9daPy_lk_cFv */
|
||||
void daPy_lk_c::setBowModel() {
|
||||
/* Nonmatching */
|
||||
/* Nonmatching - regalloc */
|
||||
J3DAnmTransform *bck = getItemAnimeResource(LKANM_BCK_ARROWRELORDA);
|
||||
JKRHeap *oldHeap = setItemHeap();
|
||||
J3DModelData *tmp_modelData =
|
||||
initModel(&mpEquipItemModel, LINK_BDL_BOW, 0x37221222);
|
||||
int ret = mSwordAnim.init(tmp_modelData, bck, false,
|
||||
J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false);
|
||||
if (!ret) {
|
||||
JUT_ASSERT(394, FALSE);
|
||||
}
|
||||
mDoExt_setCurrentHeap(oldHeap);
|
||||
m35EC = 0.0f;
|
||||
J3DMaterial *mesh = mpEquipItemModel->getModelData()
|
||||
->getJointNodePointer(0x00)
|
||||
->getMesh()
|
||||
->getNext();
|
||||
mesh->getNext()->getShape()->show();
|
||||
mesh->getShape()->hide();
|
||||
tmp_modelData->getJointNodePointer(6)->setCallBack(daPy_bowJointCB);
|
||||
tmp_modelData->getJointNodePointer(11)->setCallBack(daPy_bowJointCB);
|
||||
mpEquipItemModel->setUserArea(reinterpret_cast<u32>(this));
|
||||
}
|
||||
|
||||
/* 8014A834-8014A8D4 .text procBowSubject_init__9daPy_lk_cFv */
|
||||
BOOL daPy_lk_c::procBowSubject_init() {
|
||||
if(mCurProc == daPyProc_BOW_SUBJECT_e) {
|
||||
if (mCurProc == daPyProc_BOW_SUBJECT_e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
commonProcInit(daPyProc_BOW_SUBJECT_e);
|
||||
|
||||
if(!checkBowAnime()) {
|
||||
if (!checkBowAnime()) {
|
||||
setBowReadyAnime();
|
||||
}
|
||||
setSingleMoveAnime(ANM_ATNRS, 0.0f, 0.0f, -1, daPy_HIO_basic_c0::m.field_0xC);
|
||||
setSingleMoveAnime(ANM_ATNRS, 0.0f, 0.0f, -1,
|
||||
daPy_HIO_basic_c0::m.field_0xC);
|
||||
|
||||
mVelocity = 0.0f;
|
||||
|
||||
@@ -106,11 +270,11 @@ BOOL daPy_lk_c::procBowSubject_init() {
|
||||
BOOL daPy_lk_c::procBowSubject() {
|
||||
dComIfGp_setDoStatus(7);
|
||||
|
||||
if(mpAttention->Lockon()) {
|
||||
if (mpAttention->Lockon()) {
|
||||
setSpeedAndAngleAtn();
|
||||
}
|
||||
|
||||
if(checkNextMode(0) == 0) {
|
||||
if (!checkNextMode(0)) {
|
||||
setBodyAngleToCamera();
|
||||
m35EC = mFrameCtrlUpper[UPPER_MOVE2_e].getFrame();
|
||||
}
|
||||
@@ -120,10 +284,51 @@ BOOL daPy_lk_c::procBowSubject() {
|
||||
|
||||
/* 8014A974-8014AA2C .text procBowMove_init__9daPy_lk_cFv */
|
||||
BOOL daPy_lk_c::procBowMove_init() {
|
||||
/* Nonmatching */
|
||||
if (mCurProc == daPyProc_BOW_MOVE_e) {
|
||||
return false;
|
||||
} else {
|
||||
commonProcInit(daPyProc_BOW_MOVE_e);
|
||||
if (m34B8 == 2) {
|
||||
current.angle.y = shape_angle.y + 0x4000;
|
||||
} else {
|
||||
m34B8 = 3;
|
||||
current.angle.y = shape_angle.y + -0x4000;
|
||||
}
|
||||
if (!checkBowAnime()) {
|
||||
setBowReadyAnime();
|
||||
}
|
||||
setBlendAtnMoveAnime(daPy_HIO_basic_c0::m.field_0xC);
|
||||
dComIfGp_setPlayerStatus0(0, daPyStts0_BOW_AIM_e);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8014AA2C-8014AB5C .text procBowMove__9daPy_lk_cFv */
|
||||
BOOL daPy_lk_c::procBowMove() {
|
||||
/* Nonmatching */
|
||||
if (mpAttnActorLockOn != NULL) {
|
||||
setSpeedAndAngleAtnActor();
|
||||
} else {
|
||||
if ((!mpAttention->Lockon()) && (mActorKeepEquip.getActor() == NULL)) {
|
||||
resetActAnimeUpper(UPPER_MOVE2_e, -1.0f);
|
||||
} else {
|
||||
setSpeedAndAngleAtn();
|
||||
}
|
||||
}
|
||||
if (!checkNextMode(0)) {
|
||||
f32 fVar1 = -1.0f;
|
||||
if (std::fabsf(mVelocity) < 0.001f) {
|
||||
onModeFlg(ModeFlg_00000001);
|
||||
if (m34B8 != 3) {
|
||||
m34B8 = 3;
|
||||
fVar1 = daPy_HIO_basic_c0::m.field_0xC;
|
||||
}
|
||||
current.angle.y = shape_angle.y + -0x4000;
|
||||
} else {
|
||||
offModeFlg(ModeFlg_00000001);
|
||||
}
|
||||
setBlendAtnMoveAnime(fVar1);
|
||||
setBodyAngleXReadyAnime();
|
||||
m35EC = mFrameCtrlUpper[UPPER_MOVE2_e].getFrame();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user