mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-08-14 03:52:13 -04:00
8140 lines
254 KiB
C++
8140 lines
254 KiB
C++
/**
|
|
* d_a_alink_wolf.inc
|
|
* General Player Wolf action handling
|
|
*/
|
|
|
|
#include "JSystem/J3DGraphBase/J3DMaterial.h"
|
|
#include "d/a/d_a_alink.h"
|
|
#include "d/com/d_com_inf_game.h"
|
|
#include "d/msg/d_msg_object.h"
|
|
#include "f_op/f_op_kankyo_mng.h"
|
|
#include "m_Do/m_Do_controller_pad.h"
|
|
#include "rel/d/a/d_a_horse/d_a_horse.h"
|
|
#include "rel/d/a/d_a_kago/d_a_kago.h"
|
|
#include "rel/d/a/e/d_a_e_pm/d_a_e_pm.h"
|
|
#include "rel/d/a/e/d_a_e_yc/d_a_e_yc.h"
|
|
#include "rel/d/a/kytag/d_a_kytag03/d_a_kytag03.h"
|
|
#include "rel/d/a/npc/d_a_npc_gwolf/d_a_npc_gwolf.h"
|
|
#include "rel/d/a/npc/d_a_npc_tk/d_a_npc_tk.h"
|
|
#include "rel/d/a/obj/d_a_obj_crope/d_a_obj_crope.h"
|
|
#include "rel/d/a/obj/d_a_obj_smw_stone/d_a_obj_smw_stone.h"
|
|
#include "rel/d/a/obj/d_a_obj_wchain/d_a_obj_wchain.h"
|
|
#include "rel/d/a/obj/d_a_obj_wind_stone/d_a_obj_wind_stone.h"
|
|
#include "rel/d/a/obj/d_a_obj_yobikusa/d_a_obj_yobikusa.h"
|
|
#include "rel/d/a/tag/d_a_tag_howl/d_a_tag_howl.h"
|
|
#include "rel/d/a/tag/d_a_tag_wara_howl/d_a_tag_wara_howl.h"
|
|
#include "rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.h"
|
|
|
|
/* 80126740-80126928 121080 01E8+00 2/2 0/0 0/0 .text changeCommon__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
void daAlink_c::changeCommon() {
|
|
fopAcM_SetMtx(this, mpLinkModel->getBaseTRMtx());
|
|
model = mpLinkModel;
|
|
|
|
field_0x2060->offOldFrameFlg();
|
|
field_0x2f8c = 0;
|
|
resetUpperAnime(UPPER_2, -1.0f);
|
|
|
|
i_offNoResetFlg1(FLG1_UNK_20000000);
|
|
offKandelaarModel();
|
|
|
|
int i;
|
|
for (i = 0; i < 2; i++) {
|
|
mFootData1[i].field_0x2 = 0;
|
|
mFootData1[i].field_0x4 = 0;
|
|
mFootData1[i].field_0x6 = 0;
|
|
mFootData2[i].field_0x2 = 0;
|
|
mFootData2[i].field_0x4 = 0;
|
|
mFootData2[i].field_0x6 = 0;
|
|
}
|
|
|
|
for (i = 0; i < 10; i++) {
|
|
field_0x302c[i] = 0;
|
|
field_0x3040[i] = 0;
|
|
}
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
field_0x3054[i] = 0;
|
|
field_0x305a[i] = 0;
|
|
}
|
|
|
|
shape_angle.z = 0;
|
|
field_0x2fec = 0;
|
|
field_0x2fee = 0;
|
|
|
|
mBodyAngle.set(0, 0, 0);
|
|
field_0x3080 = 0;
|
|
field_0x3082 = 0;
|
|
|
|
i_offNoResetFlg1(0x600080);
|
|
i_offNoResetFlg2(FLG2_UNK_8000000);
|
|
|
|
field_0x2180[0]->init();
|
|
field_0x2180[1]->init();
|
|
|
|
mWolfEyeUpTimer = 0;
|
|
resetCombo(1);
|
|
|
|
i = 0;
|
|
mItemTrigger = 0;
|
|
mItemButton = 0;
|
|
field_0x2ba4 = 0.0f;
|
|
field_0x33a0 = 0.0f;
|
|
field_0x2fcc = 0;
|
|
|
|
field_0x32a0[0].r = 0;
|
|
field_0x32a0[0].g = 0;
|
|
field_0x32a0[0].b = 0;
|
|
field_0x32a0[1].r = 0;
|
|
field_0x32a0[1].g = 0;
|
|
field_0x32a0[1].b = 0;
|
|
|
|
field_0x2fc4 = 0;
|
|
mHotspringRecoverTimer = daAlinkHIO_basic_c0::m.mHotspringRecoverTime;
|
|
field_0x2fc9 = 0x10;
|
|
|
|
for (; i < 4; i++) {
|
|
clearFirePointDamageEffect(i);
|
|
}
|
|
|
|
field_0x30d0 = 0;
|
|
field_0x30d2 = 0;
|
|
field_0x2fc3 = 10;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::changeCommon() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/changeCommon__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80126928-80126F3C 121268 0614+00 2/2 0/0 0/0 .text changeWolf__9daAlink_cFv */
|
|
// small regalloc, equivalent?
|
|
#ifdef NONMATCHING
|
|
void daAlink_c::changeWolf() {
|
|
JKRHeap* current_heap = mAnmHeap3.setAnimeHeap();
|
|
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_wArcName, 14);
|
|
mpLinkModel = initModel(modelData, 0x80000, 0x20200);
|
|
|
|
J3DModelData* chainModelData = (J3DModelData*)dComIfG_getObjectRes(l_wArcName, 15);
|
|
for (u16 i = 0; i < 4; i++) {
|
|
mpWlChainModels[i] = initModel(chainModelData, 0x80000, 0);
|
|
}
|
|
|
|
J3DModelData* midnaModelData = (J3DModelData*)dComIfG_getObjectRes(l_wArcName, 10);
|
|
mpWlMidnaModel = initModel(midnaModelData, 0, 0x1020200);
|
|
|
|
J3DModelData* midnaMaskModelData = (J3DModelData*)dComIfG_getObjectRes(l_wArcName, 7);
|
|
mpWlMidnaMaskModel = initModel(midnaMaskModelData, 0x80000, 0x1000000);
|
|
|
|
J3DModelData* midnaHandModelData = (J3DModelData*)dComIfG_getObjectRes(l_wArcName, 6);
|
|
mpWlMidnaHandModel = initModel(midnaHandModelData, 0x80000, 0x1000000);
|
|
|
|
J3DModelData* midnaHairModelData = (J3DModelData*)dComIfG_getObjectRes(l_wArcName, 11);
|
|
mpWlMidnaHairModel = initModel(midnaHairModelData, 0, 0x1000000);
|
|
|
|
mpDMidnaBrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_wArcName, 18);
|
|
mpDMidnaBrk->searchUpdateMaterialID(mpWlMidnaModel->getModelData());
|
|
mpWlMidnaModel->getModelData()->entryTevRegAnimator(mpDMidnaBrk);
|
|
mpDMidnaBrk->setFrame(1.0f);
|
|
|
|
mpDMidnaMaskBrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_wArcName, 21);
|
|
mpDMidnaMaskBrk->searchUpdateMaterialID(mpWlMidnaMaskModel->getModelData());
|
|
mpWlMidnaMaskModel->getModelData()->entryTevRegAnimator(mpDMidnaMaskBrk);
|
|
mpDMidnaMaskBrk->setFrame(1.0f);
|
|
|
|
mpDMidnaHandBrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_wArcName, 20);
|
|
mpDMidnaHandBrk->searchUpdateMaterialID(mpWlMidnaHandModel->getModelData());
|
|
mpWlMidnaHandModel->getModelData()->entryTevRegAnimator(mpDMidnaHandBrk);
|
|
mpDMidnaHandBrk->setFrame(1.0f);
|
|
|
|
mpDMidnaHairHandBrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_wArcName, 19);
|
|
mpDMidnaHairHandBrk->searchUpdateMaterialID(mpWlMidnaHairModel->getModelData());
|
|
mpWlMidnaHairModel->getModelData()->entryTevRegAnimator(mpDMidnaHairHandBrk);
|
|
mpDMidnaHairHandBrk->setFrame(1.0f);
|
|
|
|
mDoExt_setCurrentHeap(current_heap);
|
|
|
|
dComIfGs_setTransformStatus(1);
|
|
mpLinkModel->setUserArea((u32)this);
|
|
changeModelDataDirectWolf(0);
|
|
mEyeHL1.entry(field_0x064C, "wl_eye_Hilight");
|
|
mEyeHL2.entry(mpWlMidnaModel->getModelData(), "midona_eye_Hlight");
|
|
field_0x064C->getMaterialNodePointer(4)->setMaterialAnm(field_0x2180[0]);
|
|
field_0x064C->getMaterialNodePointer(5)->setMaterialAnm(field_0x2180[1]);
|
|
field_0x06e8 = field_0x064C->getMaterialNodePointer(1)->getShape();
|
|
|
|
changeCommon();
|
|
i_onNoResetFlg1(FLG1_IS_WOLF);
|
|
deleteEquipItem(FALSE, FALSE);
|
|
field_0x2e44.init(this, l_wolfJntColData, mpLinkModel, 18);
|
|
i_offNoResetFlg1(FLG1_UNK_800000);
|
|
|
|
field_0x598 = 115.0f;
|
|
mLinkAcch.SetRoofCrrHeight(field_0x598);
|
|
field_0x594 = daAlinkHIO_wlMove_c0::m.field_0x64;
|
|
|
|
l_autoUpHeight = daAlinkHIO_wlWallHang_c0::m.field_0x78 + 0.01f;
|
|
l_autoDownHeight = -l_autoUpHeight;
|
|
field_0x3470 = cM_scos(cM_deg2s(daAlinkHIO_wlSlide_c0::m.field_0x5C));
|
|
field_0x3122 = cM_deg2s(daAlinkHIO_wlSlide_c0::m.field_0x60);
|
|
field_0x3458 = -60.0f;
|
|
field_0x345c = -130.0f;
|
|
|
|
field_0x2e44.offPassNum(16);
|
|
field_0x2e44.offPassNum(15);
|
|
|
|
i_offNoResetFlg0(FLG0_UNDERWATER);
|
|
setHeavyBoots(0);
|
|
|
|
for (int i = 0; i < 3; i++) {
|
|
field_0x3094[i] = 0;
|
|
field_0x309a[i] = 0;
|
|
}
|
|
|
|
mZ2Link.i_setLinkState(1);
|
|
field_0x30d6 = 0;
|
|
field_0x2fa6 = 0;
|
|
field_0x2e54.changeWaterOffset(daAlinkHIO_basic_c0::m.mWolfWaterSurfaceEffectHeight);
|
|
field_0x2e54.changeRippleOffset(field_0x598);
|
|
mWoodSwordModel = NULL;
|
|
field_0x3420 = 1.25f;
|
|
field_0x30c6 = 40;
|
|
field_0x30a8 = 3;
|
|
field_0x30aa = 15;
|
|
field_0x30ae = 0x1000;
|
|
field_0x3424 = 8.0f;
|
|
field_0x3428 = 50.0f;
|
|
field_0x2f50 = &l_wolfLieSideOffset;
|
|
field_0x2f54 = &l_wolfLieTopUpOffset;
|
|
m_swordBlur.field_0x14 = 0;
|
|
resetAtCollision(0);
|
|
field_0x30b8 = 19;
|
|
field_0x30ba = 24;
|
|
field_0x30c0 = 19;
|
|
field_0x30c2 = 24;
|
|
field_0x30c4 = 3;
|
|
field_0x30b4 = 4;
|
|
field_0x30bc = 31;
|
|
field_0x30be = 36;
|
|
field_0x32c4 = 1;
|
|
field_0x32c6 = 2;
|
|
field_0x30b6 = 2;
|
|
attention_info.field_0xa = 50;
|
|
|
|
dCcD_Cyl* cyl_p = field_0x850;
|
|
for (int i = 0; i < 3; i++) {
|
|
cyl_p->OffTgShieldFrontRange();
|
|
cyl_p->OffTgSmallShield();
|
|
cyl_p->OffTgSpShield();
|
|
cyl_p->OffTgShield();
|
|
cyl_p++;
|
|
}
|
|
|
|
field_0xFB8.StartCAt(current.pos);
|
|
field_0xFB8.OffAtSetBit();
|
|
field_0xFB8.OnTgSetBit();
|
|
field_0xFB8.OnCoSetBit();
|
|
field_0xFB8.SetR(40.0f);
|
|
|
|
mpKanteraModel = NULL;
|
|
mpLinkHatModel = NULL;
|
|
mpLinkFaceModel = NULL;
|
|
mpLinkHandModel = NULL;
|
|
mMagicArmorBodyBrk = NULL;
|
|
mMagicArmorHeadBrk = NULL;
|
|
|
|
field_0x2fc7 = dStage_stagInfo_GetWolfDashType(i_dComIfGp_getStage()->getStagInfo());
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::changeWolf() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/changeWolf__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80126F3C-80127C54 12187C 0D18+00 2/2 0/0 0/0 .text changeLink__9daAlink_cFi */
|
|
// almost, small regalloc
|
|
#ifdef NONMATCHING
|
|
void daAlink_c::changeLink(int param_0) {
|
|
JKRHeap* current_heap = mAnmHeap3.setAnimeHeap();
|
|
i_offNoResetFlg2(0x180000);
|
|
mMagicArmorBodyBrk = NULL;
|
|
mMagicArmorHeadBrk = NULL;
|
|
|
|
if (i_checkNoResetFlg2(FLG2_UNK_200000)) {
|
|
i_offNoResetFlg2(FLG2_UNK_200000);
|
|
i_onNoResetFlg2(FLG2_UNK_80000);
|
|
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("alSumou", 0x31);
|
|
mpLinkModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
|
|
|
|
J3DModelData* headModelData = (J3DModelData*)dComIfG_getObjectRes("alSumou", 0x33);
|
|
mpLinkHatModel = initModel(headModelData, 0);
|
|
|
|
J3DModelData* handModelData = (J3DModelData*)dComIfG_getObjectRes("alSumou", 0x32);
|
|
mpLinkHandModel = initModel(handModelData, 0);
|
|
} else if (checkCasualWearFlg()) {
|
|
i_onNoResetFlg2(FLG2_UNK_100000);
|
|
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_bArcName, "bl.bmd");
|
|
mpLinkModel = initModel(modelData, 0);
|
|
|
|
J3DModelData* headModelData =
|
|
(J3DModelData*)dComIfG_getObjectRes(l_bArcName, "bl_head.bmd");
|
|
mpLinkHatModel = initModel(headModelData, 0);
|
|
|
|
J3DModelData* handModelData =
|
|
(J3DModelData*)dComIfG_getObjectRes(l_bArcName, "bl_hands.bmd");
|
|
mpLinkHandModel = initModel(handModelData, 0);
|
|
} else if (checkZoraWearFlg()) {
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_zArcName, "zl.bmd");
|
|
mpLinkModel = initModel(modelData, 0);
|
|
|
|
J3DModelData* headModelData =
|
|
(J3DModelData*)dComIfG_getObjectRes(l_zArcName, "zl_head.bmd");
|
|
mpLinkHatModel = initModel(headModelData, 0);
|
|
|
|
J3DModelData* handModelData =
|
|
(J3DModelData*)dComIfG_getObjectRes(l_zArcName, "al_hands.bmd");
|
|
mpLinkHandModel = initModel(handModelData, 0);
|
|
} else if (checkMagicArmorWearFlg()) {
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_mArcName, "ml.bmd");
|
|
mpLinkModel = initModel(modelData, 0x1000000);
|
|
|
|
J3DModelData* headModelData =
|
|
(J3DModelData*)dComIfG_getObjectRes(l_mArcName, "ml_head.bmd");
|
|
mpLinkHatModel = initModel(headModelData, 0x1000000);
|
|
|
|
J3DModelData* handModelData =
|
|
(J3DModelData*)dComIfG_getObjectRes(l_mArcName, "al_hands.bmd");
|
|
mpLinkHandModel = initModel(handModelData, 0);
|
|
|
|
if (i_dComIfGs_getRupee() != 0) {
|
|
setMagicArmorBrk(1);
|
|
} else {
|
|
setMagicArmorBrk(0);
|
|
}
|
|
|
|
mMagicArmorBodyBrk->setFrame(mMagicArmorBodyBrk->getFrameMax());
|
|
mMagicArmorHeadBrk->setFrame(mMagicArmorHeadBrk->getFrameMax());
|
|
} else {
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_kArcName, "al.bmd");
|
|
mpLinkModel = initModel(modelData, 0);
|
|
|
|
J3DModelData* headModelData =
|
|
(J3DModelData*)dComIfG_getObjectRes(l_kArcName, "al_head.bmd");
|
|
mpLinkHatModel = initModel(headModelData, 0);
|
|
|
|
J3DModelData* handModelData =
|
|
(J3DModelData*)dComIfG_getObjectRes(l_kArcName, "al_hands.bmd");
|
|
mpLinkHandModel = initModel(handModelData, 0);
|
|
}
|
|
|
|
if (i_checkNoResetFlg2(FLG2_UNK_200000) || !checkZoraWearFlg()) {
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(mArcName, "al_face.bmd");
|
|
mpLinkFaceModel = initModel(modelData, 0x20200);
|
|
} else {
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(mArcName, "zl_face.bmd");
|
|
mpLinkFaceModel = initModel(modelData, 0x20200);
|
|
}
|
|
|
|
J3DModelData* bootsModelData = (J3DModelData*)dComIfG_getObjectRes(mArcName, "al_bootsH.bmd");
|
|
for (u16 i = 0; i < 2; i++) {
|
|
mpLinkBootModels[i] = initModel(bootsModelData, 0);
|
|
}
|
|
|
|
J3DModelData* kanteraModelData =
|
|
(J3DModelData*)dComIfG_getObjectRes(mArcName, "al_kantera.bmd");
|
|
mpKanteraModel = initModelEnv(kanteraModelData, 0);
|
|
|
|
J3DModelData* kanteraGlowModelData =
|
|
(J3DModelData*)dComIfG_getObjectRes(mArcName, "ef_ktGlow.bmd");
|
|
mpKanteraGlowModel = initModel(kanteraGlowModelData, 0x200);
|
|
|
|
mpKanteraGlowBtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(mArcName, "ef_ktGlow.btk");
|
|
mpKanteraGlowBtk->setFrame(0.0f);
|
|
mpKanteraGlowBtk->searchUpdateMaterialID(kanteraGlowModelData);
|
|
kanteraGlowModelData->entryTexMtxAnimator(mpKanteraGlowBtk);
|
|
|
|
J3DModelData* woodSwordModelData = (J3DModelData*)dComIfG_getObjectRes(mArcName, "al_SWB.bmd");
|
|
mWoodSwordModel = initModel(woodSwordModelData, 0);
|
|
|
|
mDoExt_setCurrentHeap(current_heap);
|
|
|
|
dComIfGs_setTransformStatus(0);
|
|
mpLinkModel->setUserArea((u32)this);
|
|
mpLinkHatModel->setUserArea((u32)this);
|
|
changeModelDataDirect(param_0);
|
|
field_0x06e4 = NULL;
|
|
|
|
u8 var_r27;
|
|
if (i_checkNoResetFlg2(FLG2_UNK_80000)) {
|
|
field_0x06d8 = field_0x064C->getMaterialNodePointer(4)->getShape();
|
|
field_0x06dc = field_0x064C->getMaterialNodePointer(5)->getShape();
|
|
field_0x06e0 = NULL;
|
|
field_0x06e8 = field_0x064C->getMaterialNodePointer(3)->getShape();
|
|
field_0x06ec = NULL;
|
|
field_0x06f0 = field_0x064C->getMaterialNodePointer(2)->getShape();
|
|
var_r27 = 2;
|
|
} else if (checkCasualWearFlg()) {
|
|
field_0x06d8 = field_0x064C->getMaterialNodePointer(3)->getShape();
|
|
field_0x06dc = field_0x064C->getMaterialNodePointer(4)->getShape();
|
|
field_0x06e0 = NULL;
|
|
field_0x06e8 = field_0x064C->getMaterialNodePointer(2)->getShape();
|
|
field_0x06ec = field_0x064C->getMaterialNodePointer(0)->getShape();
|
|
field_0x06f0 = field_0x064C->getMaterialNodePointer(1)->getShape();
|
|
var_r27 = 2;
|
|
} else if (checkZoraWearFlg()) {
|
|
field_0x06d8 = field_0x064C->getMaterialNodePointer(4)->getShape();
|
|
field_0x06dc = field_0x064C->getMaterialNodePointer(5)->getShape();
|
|
field_0x06e0 = field_0x064C->getMaterialNodePointer(8)->getShape();
|
|
field_0x06e4 = field_0x064C->getMaterialNodePointer(9)->getShape();
|
|
field_0x06e4->hide();
|
|
field_0x06e8 = NULL;
|
|
field_0x06ec = field_0x064C->getMaterialNodePointer(2)->getShape();
|
|
field_0x06f0 = field_0x064C->getMaterialNodePointer(11)->getShape();
|
|
var_r27 = 3;
|
|
} else if (checkMagicArmorWearFlg()) {
|
|
field_0x06d8 = field_0x064C->getMaterialNodePointer(4)->getShape();
|
|
field_0x06dc = field_0x064C->getMaterialNodePointer(5)->getShape();
|
|
field_0x06e0 = field_0x064C->getMaterialNodePointer(10)->getShape();
|
|
field_0x06e8 = field_0x064C->getMaterialNodePointer(3)->getShape();
|
|
field_0x06ec = field_0x064C->getMaterialNodePointer(1)->getShape();
|
|
field_0x06f0 = field_0x064C->getMaterialNodePointer(2)->getShape();
|
|
|
|
if (i_dComIfGs_getRupee() != 0) {
|
|
var_r27 = 4;
|
|
} else {
|
|
var_r27 = 5;
|
|
}
|
|
} else {
|
|
field_0x064C->getMaterialNodePointer(16)->getShape()->hide();
|
|
field_0x06d8 = field_0x064C->getMaterialNodePointer(11)->getShape();
|
|
field_0x06dc = field_0x064C->getMaterialNodePointer(12)->getShape();
|
|
field_0x06e0 = field_0x064C->getMaterialNodePointer(6)->getShape();
|
|
field_0x06e8 = field_0x064C->getMaterialNodePointer(8)->getShape();
|
|
field_0x06ec = field_0x064C->getMaterialNodePointer(4)->getShape();
|
|
field_0x06f0 = field_0x064C->getMaterialNodePointer(7)->getShape();
|
|
var_r27 = 0;
|
|
}
|
|
|
|
if (field_0x06e0 != NULL) {
|
|
if (i_checkEquipHeavyBoots()) {
|
|
field_0x06e0->hide();
|
|
} else {
|
|
field_0x06e0->show();
|
|
|
|
if (checkZoraWearMaskDraw()) {
|
|
field_0x06e4->show();
|
|
}
|
|
}
|
|
}
|
|
|
|
field_0x06d0 = field_0x06d8;
|
|
field_0x06d4 = field_0x06dc;
|
|
|
|
J3DModelData* hand_modeldata = mpLinkHandModel->getModelData();
|
|
for (u16 i = 0; i < 11; i++) {
|
|
hand_modeldata->getMaterialNodePointer(i)->getShape()->hide();
|
|
}
|
|
|
|
J3DModelData* face_modeldata = mpLinkFaceModel->getModelData();
|
|
face_modeldata->getMaterialNodePointer(2)->setMaterialAnm(field_0x2180[0]);
|
|
face_modeldata->getMaterialNodePointer(3)->setMaterialAnm(field_0x2180[1]);
|
|
mEyeHL1.entry(face_modeldata, "highlight02");
|
|
|
|
mpKanteraModel->setUserArea((u32)this);
|
|
mpKanteraModel->getModelData()->getJointNodePointer(1)->setCallBack(
|
|
daAlink_kandelaarModelCallBack);
|
|
mZ2Link.i_setLinkState(var_r27);
|
|
|
|
if (checkHookshotReadyMaterialOffMode()) {
|
|
setHookshotReadyMaterial();
|
|
}
|
|
|
|
if (param_0) {
|
|
fopAcM_SetMtx(this, mpLinkModel->getBaseTRMtx());
|
|
model = mpLinkModel;
|
|
field_0x2060->offOldFrameFlg();
|
|
} else {
|
|
changeCommon();
|
|
i_offNoResetFlg1(FLG1_IS_WOLF);
|
|
field_0x2e44.init(this, l_jntColData, mpLinkModel, 18);
|
|
field_0x3088 = 0;
|
|
field_0x302c[7] = -0x3800;
|
|
field_0x3060 = 0;
|
|
field_0x3062 = shape_angle.y;
|
|
|
|
field_0x598 = 180.0f;
|
|
mLinkAcch.SetRoofCrrHeight(field_0x598);
|
|
field_0x594 = daAlinkHIO_move_c0::m.mMaxSpeed;
|
|
|
|
l_autoUpHeight = daAlinkHIO_wallHang_c0::m.field_0x4 + 0.01f;
|
|
l_autoDownHeight = -l_autoUpHeight;
|
|
field_0x3470 = cM_scos(cM_deg2s(daAlinkHIO_slide_c0::m.mSlideAngle));
|
|
field_0x3122 = cM_deg2s(daAlinkHIO_slide_c0::m.mClimbAngle);
|
|
field_0x3458 = -120.0f;
|
|
field_0x345c = -200.0f;
|
|
|
|
field_0x2e54.changeWaterOffset(daAlinkHIO_basic_c0::m.mWaterSurfaceEffectHeight);
|
|
field_0x2e54.changeRippleOffset(field_0x598);
|
|
offWolfEyeUp();
|
|
|
|
field_0x3420 = 1.0f;
|
|
field_0x30c6 = 35;
|
|
field_0x30a8 = 1;
|
|
field_0x30aa = 16;
|
|
field_0x30ae = 0x2000;
|
|
field_0x3424 = 4.0f;
|
|
field_0x3428 = 35.0f;
|
|
field_0x2f50 = &l_crawlSideOffset;
|
|
field_0x2f54 = &l_crawlTopUpOffset;
|
|
|
|
resetWolfAtCollision();
|
|
resetWolfBallGrab();
|
|
deleteEquipItem(FALSE, FALSE);
|
|
field_0x2fb0 = 0;
|
|
|
|
for (int i = 0; i < 10; i++) {
|
|
mWolfLockAcKeep[i].clearData();
|
|
}
|
|
|
|
mWolfLockNum = 0;
|
|
field_0x30b8 = 9;
|
|
field_0x30ba = 14;
|
|
field_0x30c0 = 10;
|
|
field_0x30c2 = 15;
|
|
field_0x30c4 = 3;
|
|
field_0x30b4 = 4;
|
|
field_0x30bc = 21;
|
|
field_0x30be = 26;
|
|
field_0x30b6 = 5;
|
|
field_0x32c4 = 2;
|
|
field_0x32c6 = 16;
|
|
attention_info.field_0xa = 10;
|
|
|
|
dCcD_Cyl* cyl_p = field_0x850;
|
|
for (int i = 0; i < 3; i++) {
|
|
cyl_p->OnTgShieldFrontRange();
|
|
cyl_p->OnTgSmallShield();
|
|
cyl_p++;
|
|
}
|
|
|
|
mMagneBootsTopVec = cXyz::BaseY;
|
|
|
|
field_0xFB8.OnAtSetBit();
|
|
field_0xFB8.OffTgSetBit();
|
|
field_0xFB8.OffCoSetBit();
|
|
|
|
mpWlMidnaModel = NULL;
|
|
mpWlMidnaMaskModel = NULL;
|
|
mpWlMidnaHandModel = NULL;
|
|
mpWlMidnaHairModel = NULL;
|
|
}
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::changeLink(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/changeLink__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80127C54-80127CAC 122594 0058+00 2/2 0/0 0/0 .text onWolfEyeUp__9daAlink_cFv */
|
|
void daAlink_c::onWolfEyeUp() {
|
|
if (mWolfEyeUp == 0) {
|
|
mZ2Link.setWolfEyeOpen(true);
|
|
mWolfEyeUp = daAlinkHIO_wolf_c0::m.mSensesLingerTime;
|
|
field_0x2fd2 = 20;
|
|
}
|
|
}
|
|
|
|
/* 80127CAC-80127CF0 1225EC 0044+00 5/5 0/0 0/0 .text offWolfEyeUp__9daAlink_cFv */
|
|
void daAlink_c::offWolfEyeUp() {
|
|
if (mWolfEyeUp != 0) {
|
|
mWolfEyeUp = 0;
|
|
field_0x2fd2 = 20;
|
|
mZ2Link.setWolfEyeOpen(false);
|
|
}
|
|
}
|
|
|
|
/* 80127CF0-80127D14 122630 0024+00 1/1 0/0 0/0 .text wolfSenseTrigger__9daAlink_cFv */
|
|
BOOL daAlink_c::wolfSenseTrigger() {
|
|
return itemTriggerCheck(BTN_X);
|
|
}
|
|
|
|
/* 80127D14-80127D2C 122654 0018+00 1/1 0/0 0/0 .text setWolfSenceStatus__9daAlink_cFUc
|
|
*/
|
|
void daAlink_c::setWolfSenceStatus(u8 status) {
|
|
dComIfGp_setXStatus(status, 0);
|
|
}
|
|
|
|
/* 80127D2C-80127D50 12266C 0024+00 1/1 0/0 0/0 .text wolfClawTrigger__9daAlink_cFv */
|
|
void daAlink_c::wolfClawTrigger() {
|
|
itemTriggerCheck(BTN_Y);
|
|
}
|
|
|
|
/* 80127D50-80127D68 122690 0018+00 2/2 0/0 0/0 .text setWolfDigStatus__9daAlink_cFUc */
|
|
void daAlink_c::setWolfDigStatus(u8 flag) {
|
|
dComIfGp_setYStatus(13, flag);
|
|
}
|
|
|
|
/* 80127D68-80127DC4 1226A8 005C+00 4/4 0/0 0/0 .text checkWolfShapeReverse__9daAlink_cCFv */
|
|
BOOL daAlink_c::checkWolfShapeReverse() const {
|
|
return ((mProcID == PROC_WOLF_SLIDE_READY || mProcID == PROC_WOLF_LOCK_ATTACK_TURN ||
|
|
mProcID == PROC_WOLF_JUMP_AT_SLIDE_LAND) &&
|
|
mProcVar2.field_0x300c != 0) ||
|
|
mProcID == PROC_WOLF_SLIP_TURN_LAND ||
|
|
(mProcID == PROC_WOLF_LARGE_DAMAGE_UP && field_0x3198 != 0) ||
|
|
mProcID == PROC_WOLF_ROPE_TURN;
|
|
}
|
|
|
|
/* 80127DC4-80127E08 122704 0044+00 1/1 0/0 0/0 .text checkWolfSideStep__9daAlink_cCFv */
|
|
BOOL daAlink_c::checkWolfSideStep() const {
|
|
return field_0x2f98 != 0 &&
|
|
((mProcID == PROC_WOLF_ATN_AC_MOVE && !i_checkModeFlg(1)) ||
|
|
mProcID == PROC_WOLF_SIDESTEP_LAND || mProcID == PROC_WOLF_BACKJUMP_LAND);
|
|
}
|
|
|
|
/* 80127E08-80127F20 122748 0118+00 1/1 0/0 0/0 .text setWolfTailAngle__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::setWolfTailAngle() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setWolfTailAngle__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80127F20-80127F50 122860 0030+00 5/5 0/0 0/0 .text checkWolfSlowDash__9daAlink_cFv */
|
|
BOOL daAlink_c::checkWolfSlowDash() {
|
|
return field_0x2fc7 == 1 || field_0x2fc7 == 3 || field_0x3174 == 11;
|
|
}
|
|
|
|
/* 80127F50-80128478 122890 0528+00 1/1 0/0 0/0 .text setSpeedAndAngleWolf__9daAlink_cFv
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
void daAlink_c::setSpeedAndAngleWolf() {
|
|
f32 var_f31 = 0.0f;
|
|
|
|
f32 var_f30;
|
|
f32 var_f29;
|
|
s16 var_r30;
|
|
s16 var_r29;
|
|
s16 var_r28;
|
|
if (checkWolfDashMode()) {
|
|
var_r30 = daAlinkHIO_wlMove_c0::m.field_0x54;
|
|
var_r29 = daAlinkHIO_wlMove_c0::m.field_0x50;
|
|
var_r28 = daAlinkHIO_wlMove_c0::m.field_0x52;
|
|
if (checkWolfSlowDash()) {
|
|
var_f30 = daAlinkHIO_wlMove_c0::m.field_0xEC;
|
|
} else if (field_0x2fc7 == 2) {
|
|
var_f30 = daAlinkHIO_wlMove_c0::m.field_0xFC;
|
|
} else {
|
|
var_f30 = daAlinkHIO_wlMove_c0::m.field_0xD0;
|
|
}
|
|
var_f29 = daAlinkHIO_wlMove_c0::m.field_0x6C;
|
|
} else {
|
|
var_r30 = daAlinkHIO_wlMoveNoP_c0::m.field_0x4;
|
|
var_r29 = daAlinkHIO_wlMoveNoP_c0::m.field_0x0;
|
|
var_r28 = daAlinkHIO_wlMoveNoP_c0::m.field_0x2;
|
|
var_f30 = daAlinkHIO_wlMoveNoP_c0::m.field_0xC;
|
|
var_f29 = daAlinkHIO_wlMoveNoP_c0::m.field_0x10;
|
|
}
|
|
|
|
BOOL temp_r31 = checkEventRun();
|
|
if (checkInputOnR()) {
|
|
s16 temp_r4 = current.angle.y;
|
|
BOOL var_r26 = 0;
|
|
f32 temp_f28 = field_0x33a8 * field_0x33a8;
|
|
f32 temp_f27 = speedF / field_0x594;
|
|
|
|
if (cLib_distanceAngleS(field_0x2fe2, current.angle.y) > 0x7000 &&
|
|
abs(field_0x3180) < 0x5000 &&
|
|
((!i_checkModeFlg(1) && !(speedF < 0.001f)) || field_0x33a8 > 0.85f))
|
|
{
|
|
if ((i_checkModeFlg(1) || speedF < 0.001f) && !temp_r31 &&
|
|
(mProcID == PROC_WOLF_WAIT || mProcID == PROC_WOLF_MOVE))
|
|
{
|
|
cLib_addCalcAngleS(¤t.angle.y, field_0x2fe2, var_r30, var_r29, var_r28);
|
|
if (mProcID == PROC_WOLF_MOVE && temp_f27 > 0.85f) {
|
|
var_r26 = 1;
|
|
}
|
|
} else if (mProcID == PROC_WOLF_MOVE &&
|
|
((checkWolfDashMode() && temp_f27 > daAlinkHIO_wlMove_c0::m.field_0xA0) ||
|
|
(!checkWolfDashMode() && temp_f27 > daAlinkHIO_wlMoveNoP_c0::m.field_0x38)))
|
|
{
|
|
return;
|
|
} else {
|
|
cLib_addCalcAngleS(¤t.angle.y, field_0x2fe2, var_r30, var_r29, var_r28);
|
|
if (mProcID == PROC_WOLF_MOVE && temp_f27 > 0.85f) {
|
|
var_r26 = 1;
|
|
}
|
|
}
|
|
} else {
|
|
s16 var_r6;
|
|
s16 var_r7;
|
|
if (temp_r31 != 0) {
|
|
var_r6 = var_r29;
|
|
var_r7 = var_r28;
|
|
} else {
|
|
var_r6 = var_r29 * temp_f28;
|
|
if (var_r6 < 10) {
|
|
var_r6 = 10;
|
|
}
|
|
|
|
var_r7 = var_r28 * temp_f28;
|
|
if (var_r7 < 1) {
|
|
var_r7 = 1;
|
|
}
|
|
}
|
|
|
|
cLib_addCalcAngleS(¤t.angle.y, field_0x2fe2, var_r30, var_r6, var_r7);
|
|
}
|
|
|
|
if (wolfSideBgCheck(temp_r4)) {
|
|
current.angle.y = temp_r4;
|
|
i_onEndResetFlg1(ERFLG1_UNK_200000);
|
|
|
|
if (cLib_distanceAngleS(field_0x2fe2, current.angle.y) > 0x7000) {
|
|
var_r26 = 1;
|
|
}
|
|
}
|
|
|
|
if (!var_r26) {
|
|
f32 temp_f27_2 = getStickAngleDistanceRate();
|
|
if (temp_r31) {
|
|
var_f31 = temp_f27_2 * (var_f30 * field_0x33a8);
|
|
} else {
|
|
f32 var_f26 = (1.0f - fabsf(mNormalSpeed / field_0x594)) * 0.3f;
|
|
if (checkHeavyStateOn(1, 1) != 0) {
|
|
var_f26 *= mHeavySpeedMultiplier;
|
|
}
|
|
|
|
if ((!i_checkNoResetFlg1(FLG1_UNK_20000000) ||
|
|
cLib_distanceAngleS(current.angle.y + 0x8000, field_0x3092) >= 0xC00) &&
|
|
field_0x33a8 > var_f26)
|
|
{
|
|
var_f31 = temp_f27_2 * (var_f30 * temp_f28);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (checkInputOnR() || (mProcID == PROC_WOLF_ROLL_ATTACK_MOVE)) {
|
|
s16 temp_r26 = shape_angle.y;
|
|
s16 var_r4;
|
|
if (checkWolfShapeReverse()) {
|
|
var_r4 = field_0x2fe2 + 0x8000;
|
|
} else {
|
|
var_r4 = field_0x2fe2;
|
|
}
|
|
|
|
cLib_addCalcAngleS(&shape_angle.y, var_r4, var_r30, var_r29 * 2, var_r28 * 2);
|
|
|
|
int temp_r3 = (s16)(temp_r26 - current.angle.y) * (s16)(shape_angle.y - current.angle.y);
|
|
if (temp_r3 <= 0 && temp_r3 >= -0x1000000) {
|
|
shape_angle.y = current.angle.y;
|
|
}
|
|
} else if (temp_r31 == 0 && !checkInputOnR() && checkAttentionState() &&
|
|
mProcID == PROC_WOLF_WAIT)
|
|
{
|
|
cLib_addCalcAngleS(&shape_angle.y, field_0x2fe4, 2, 0x2000, 0x800);
|
|
current.angle.y = shape_angle.y;
|
|
}
|
|
|
|
setNormalSpeedF(var_f31, var_f29);
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::setSpeedAndAngleWolf() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setSpeedAndAngleWolf__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80128478-80128798 122DB8 0320+00 2/2 0/0 0/0 .text setSpeedAndAngleWolfAtn__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::setSpeedAndAngleWolfAtn() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setSpeedAndAngleWolfAtn__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80128798-8012880C 1230D8 0074+00 4/4 0/0 0/0 .text checkWolfAtnWait__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm BOOL daAlink_c::checkWolfAtnWait() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/checkWolfAtnWait__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* void daAlink_c::checkWolfAtnWait() {
|
|
return checkEnemyGroup(mTargetedActor) && mDemo.getDemoMode() == 0x17 || mTargetedActor != NULL
|
|
|| fopAcM_GetName(mTargetedActor) == 0x262 ||
|
|
} */
|
|
|
|
/* 8012880C-80128844 12314C 0038+00 27/27 0/0 0/0 .text
|
|
* checkUnderMove0BckNoArcWolf__9daAlink_cCFQ29daAlink_c12daAlink_WANM */
|
|
BOOL daAlink_c::checkUnderMove0BckNoArcWolf(daAlink_c::daAlink_WANM anm_id) const {
|
|
return mUnderAnmHeap[0].checkNoSetArcNo() &&
|
|
m_wlAnmDataTable[anm_id].field_0x0 == mUnderAnmHeap[0].getIdx();
|
|
}
|
|
|
|
/* 80128844-80128F0C 123184 06C8+00 11/11 0/0 0/0 .text setBlendWolfMoveAnime__9daAlink_cFf */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::setBlendWolfMoveAnime(f32 param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setBlendWolfMoveAnime__9daAlink_cFf.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80128F0C-80128F5C 12384C 0050+00 2/2 0/0 0/0 .text checkWolfAtnMoveBack__9daAlink_cFs
|
|
*/
|
|
BOOL daAlink_c::checkWolfAtnMoveBack(s16 param_0) {
|
|
f32 cos = cM_scos(param_0);
|
|
return (field_0x2f98 != 1 && cos < lit_44003) || (field_0x2f98 == 1 && cos < lit_44004);
|
|
}
|
|
|
|
/* 80128F5C-80129114 12389C 01B8+00 5/5 0/0 0/0 .text setWolfAtnMoveDirection__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::setWolfAtnMoveDirection() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setWolfAtnMoveDirection__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80129114-8012933C 123A54 0228+00 2/2 0/0 0/0 .text setBlendWolfAtnMoveAnime__9daAlink_cFf */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::setBlendWolfAtnMoveAnime(f32 param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setBlendWolfAtnMoveAnime__9daAlink_cFf.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 8012933C-8012948C 123C7C 0150+00 1/1 0/0 0/0 .text setBlendWolfAtnBackMoveAnime__9daAlink_cFf
|
|
*/
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::setBlendWolfAtnBackMoveAnime(f32 param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setBlendWolfAtnBackMoveAnime__9daAlink_cFf.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 8012948C-80129678 123DCC 01EC+00 3/3 0/0 0/0 .text
|
|
* setDoubleAnimeWolf__9daAlink_cFfffQ29daAlink_c12daAlink_WANMQ29daAlink_c12daAlink_WANMif */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::setDoubleAnimeWolf(f32 param_0, f32 param_1, f32 param_2,
|
|
daAlink_c::daAlink_WANM param_3,
|
|
daAlink_c::daAlink_WANM param_4, int param_5, f32 param_6) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setDoubleAnimeWolf__9daAlink_cFfffQ29daAlink_c12daAlink_WANMQ29daAlink_c12daAlink_WANMif.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80129678-801296A8 123FB8 0030+00 35/35 0/0 0/0 .text
|
|
* setSingleAnimeWolfBase__9daAlink_cFQ29daAlink_c12daAlink_WANM */
|
|
void daAlink_c::setSingleAnimeWolfBase(daAlink_c::daAlink_WANM i_anmID) {
|
|
setSingleAnimeWolf(i_anmID, lit_6040, FLOAT_LABEL(lit_6108), -1, lit_6109);
|
|
}
|
|
|
|
/* 801296A8-801296D8 123FE8 0030+00 3/3 0/0 0/0 .text
|
|
* setSingleAnimeWolfBaseMorf__9daAlink_cFQ29daAlink_c12daAlink_WANMf */
|
|
void daAlink_c::setSingleAnimeWolfBaseMorf(daAlink_c::daAlink_WANM i_anmID, f32 i_morf) {
|
|
setSingleAnimeWolf(i_anmID, lit_6040, FLOAT_LABEL(lit_6108), -1, i_morf);
|
|
}
|
|
|
|
/* 801296D8-80129704 124018 002C+00 44/44 0/0 0/0 .text
|
|
* setSingleAnimeWolfBaseSpeed__9daAlink_cFQ29daAlink_c12daAlink_WANMff */
|
|
void daAlink_c::setSingleAnimeWolfBaseSpeed(daAlink_c::daAlink_WANM i_anmID, f32 i_speed,
|
|
f32 i_morf) {
|
|
setSingleAnimeWolf(i_anmID, i_speed, FLOAT_LABEL(lit_6108), -1, i_morf);
|
|
}
|
|
|
|
/* 80129704-80129848 124044 0144+00 29/29 0/0 0/0 .text
|
|
* setSingleAnimeWolf__9daAlink_cFQ29daAlink_c12daAlink_WANMffsf */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::setSingleAnimeWolf(daAlink_c::daAlink_WANM i_anmID, f32 i_speed, f32 i_start,
|
|
s16 i_endFrame, f32 i_morf) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setSingleAnimeWolf__9daAlink_cFQ29daAlink_c12daAlink_WANMffsf.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80129848-8012987C 124188 0034+00 53/53 0/0 0/0 .text
|
|
* setSingleAnimeWolfParam__9daAlink_cFQ29daAlink_c12daAlink_WANMPC16daAlinkHIO_anm_c */
|
|
void daAlink_c::setSingleAnimeWolfParam(daAlink_c::daAlink_WANM i_anmID,
|
|
daAlinkHIO_anm_c const* i_anmData) {
|
|
setSingleAnimeWolf(i_anmID, i_anmData->mSpeed, i_anmData->mStartFrame, i_anmData->mEndFrame,
|
|
i_anmData->mInterpolation);
|
|
}
|
|
|
|
/* 8012987C-80129958 1241BC 00DC+00 5/5 0/0 0/0 .text checkWolfLandAction__9daAlink_cFi
|
|
*/
|
|
int daAlink_c::checkWolfLandAction(int param_0) {
|
|
f32 temp_f31 = lit_8782 * (mFallHeight - current.pos.y);
|
|
|
|
if (checkNoLandDamageSlidePolygon() || temp_f31 < daAlinkHIO_wlDamFall_c0::m.field_0x2C) {
|
|
if (param_0 != 0) {
|
|
procWolfLandDamageInit(0);
|
|
} else if (mProcID == PROC_WOLF_JUMP_ATTACK || mProcID == PROC_WOLF_DASH_REVERSE) {
|
|
return 0;
|
|
} else {
|
|
procWolfLandInit();
|
|
}
|
|
} else {
|
|
int var_r4;
|
|
if (temp_f31 < daAlinkHIO_wlDamFall_c0::m.field_0x30) {
|
|
var_r4 = 1;
|
|
} else {
|
|
var_r4 = 2;
|
|
}
|
|
|
|
procWolfLandDamageInit(var_r4);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80129958-801299A8 124298 0050+00 1/1 0/0 1/1 .text checkMidnaUseAbility__9daAlink_cCFv
|
|
*/
|
|
BOOL daAlink_c::checkMidnaUseAbility() const {
|
|
return i_dComIfGp_checkPlayerStatus1(0, 0x800000) || dKy_withwarp_capture_check();
|
|
}
|
|
|
|
/* 801299A8-80129A80 1242E8 00D8+00 1/1 0/0 0/0 .text checkWolfUseAbility__9daAlink_cFv
|
|
*/
|
|
void daAlink_c::checkWolfUseAbility() {
|
|
if (mProcID == PROC_WOLF_GIANT_PUZZLE) {
|
|
return;
|
|
}
|
|
|
|
if (checkMidnaLockJumpPoint() != NULL && !i_checkMidnaRide()) {
|
|
offWolfEyeUp();
|
|
} else {
|
|
// event flag 0x4308: senses ability unlocked
|
|
if (i_dComIfGs_isEventBit(0x4308) && field_0x2fd2 == 0 && !checkEventRun() &&
|
|
mWolfEyeUp < daAlinkHIO_wolf_c0::m.mSensesLingerTime && wolfSenseTrigger())
|
|
{
|
|
if (mWolfEyeUp == 0) {
|
|
onWolfEyeUp();
|
|
} else {
|
|
offWolfEyeUp();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80129A80-80129B44 1243C0 00C4+00 13/13 0/0 0/0 .text checkWolfGroundSpecialMode__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::checkWolfGroundSpecialMode() {
|
|
if (mLinkAcch.ChkGroundHit() && !i_checkModeFlg(MODE_PLAYER_FLY) &&
|
|
i_checkEndResetFlg0(ERFLG0_UNK_1))
|
|
{
|
|
return procCoMetamorphoseInit();
|
|
} else if (mSpecialMode == SMODE_WOLF_PUZZLE || mSpecialMode == 0x28) {
|
|
return procWolfGiantPuzzleInit();
|
|
} else if (checkCargoCarry()) {
|
|
return procWolfCargoCarryInit();
|
|
} else if (checkSlideAction()) {
|
|
return 1;
|
|
} else if (i_checkEndResetFlg1(ERFLG1_UNK_1)) {
|
|
return procWolfScreamWaitInit();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 80129B44-8012A02C 124484 04E8+00 46/46 0/0 0/0 .text checkNextActionWolf__9daAlink_cFi
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::checkNextActionWolf(int param_0) {
|
|
if (checkDeadAction(1)) {
|
|
return 1;
|
|
}
|
|
|
|
if (i_checkEndResetFlg1(ERFLG1_UNK_40) &&
|
|
(mProcID == PROC_WOLF_WAIT || mProcID == PROC_WOLF_SERVICE_WAIT ||
|
|
mProcID == PROC_WOLF_TIRED_WAIT || (!checkInputOnR() && mProcID == PROC_WOLF_MOVE) ||
|
|
mProcID == PROC_WOLF_LIE_START || mProcID == PROC_WOLF_LIE_MOVE ||
|
|
mProcID == PROC_WOLF_ATN_AC_MOVE))
|
|
{
|
|
return procWolfMidnaRideShockInit();
|
|
}
|
|
|
|
if ((!checkAttentionState() ||
|
|
(mProcID != PROC_WOLF_WAIT_ATTACK && mProcID != PROC_WOLF_JUMP_AT_NORMAL_LAND)) &&
|
|
((mProcID != PROC_WOLF_WAIT_SLIP && !param_0) || checkInputOnR()))
|
|
{
|
|
if (checkAttentionState()) {
|
|
setSpeedAndAngleWolfAtn();
|
|
} else {
|
|
setSpeedAndAngleWolf();
|
|
}
|
|
}
|
|
|
|
setFrontWallType();
|
|
|
|
if (checkSlope()) {
|
|
if (checkWolfDashMode()) {
|
|
field_0x594 = daAlinkHIO_wlSlide_c0::m.field_0x68;
|
|
} else {
|
|
field_0x594 = daAlinkHIO_wlSlide_c0::m.field_0x70;
|
|
}
|
|
} else if (i_checkFmChainGrabAnime()) {
|
|
field_0x594 = 13.0f;
|
|
} else if (mTargetedActor != NULL) {
|
|
field_0x594 = daAlinkHIO_wlAtnMove_c0::m.field_0x18;
|
|
} else if (checkAttentionState()) {
|
|
field_0x594 = daAlinkHIO_wlMove_c0::m.field_0xB4;
|
|
} else if (i_checkNoResetFlg1(FLG1_DASH_MODE)) {
|
|
if (checkWolfSlowDash()) {
|
|
field_0x594 = daAlinkHIO_wlMove_c0::m.field_0xE0;
|
|
} else if (field_0x2fc7 == 2) {
|
|
field_0x594 = daAlinkHIO_wlMove_c0::m.field_0xF0;
|
|
} else {
|
|
field_0x594 = daAlinkHIO_wlMove_c0::m.field_0xC8;
|
|
}
|
|
} else if (checkWolfDashMode()) {
|
|
field_0x594 = daAlinkHIO_wlMove_c0::m.field_0x64;
|
|
} else {
|
|
field_0x594 = daAlinkHIO_wlMoveNoP_c0::m.field_0x8;
|
|
}
|
|
|
|
if (checkWolfGroundSpecialMode()) {
|
|
return 1;
|
|
}
|
|
|
|
if (checkWolfLieContinue(0)) {
|
|
return procWolfLieStartInit(0);
|
|
}
|
|
|
|
if (checkNextActionFromButton()) {
|
|
return 1;
|
|
}
|
|
|
|
fopAc_ac_c* var_r4 = checkWolfRopeHit(&field_0x850[0], field_0x850[0].GetCP(), FALSE);
|
|
if (var_r4 == NULL) {
|
|
var_r4 = checkWolfRopeHit(&field_0x850[1], ¤t.pos, FALSE);
|
|
}
|
|
|
|
if (var_r4 != NULL) {
|
|
field_0x280c.setData(var_r4);
|
|
return procWolfRopeMoveInit(0, 1);
|
|
}
|
|
|
|
if (param_0 && !checkInputOnR()) {
|
|
return 0;
|
|
}
|
|
|
|
BOOL var_r30;
|
|
if (!checkInputOnR() && mProcID == PROC_WOLF_WAIT_SLIP && checkWolfWaitSlipPolygon()) {
|
|
var_r30 = 0;
|
|
} else if (checkAttentionState()) {
|
|
var_r30 = procWolfAtnActorMoveInit();
|
|
} else {
|
|
field_0x2f98 = 4;
|
|
|
|
if (checkZeroSpeedF()) {
|
|
if (!checkEventRun() && field_0x33a8 > 0.85f && abs(field_0x3180) < 0x5000 &&
|
|
(mProcID == PROC_WOLF_WAIT || mProcID == PROC_WOLF_MOVE) &&
|
|
cLib_distanceAngleS(field_0x2fe2, current.angle.y) > 0x7000)
|
|
{
|
|
if (i_checkEndResetFlg1(ERFLG1_UNK_200000)) {
|
|
var_r30 = procWolfSlipTurnInit(0);
|
|
} else {
|
|
var_r30 = 0;
|
|
}
|
|
|
|
if (var_r30 == 0 && !checkEventRun()) {
|
|
var_r30 = checkWaitAction();
|
|
}
|
|
} else {
|
|
var_r30 = checkWaitAction();
|
|
}
|
|
} else if (checkInputOnR() && field_0x2fa8 != 8 && abs(field_0x3180) < 0x5000 &&
|
|
cLib_distanceAngleS(field_0x2fe2, current.angle.y) > 0x7000 &&
|
|
((checkWolfDashMode() &&
|
|
speedF / field_0x594 > daAlinkHIO_wlMove_c0::m.field_0xA0) ||
|
|
(!checkWolfDashMode() &&
|
|
speedF / field_0x594 > daAlinkHIO_wlMoveNoP_c0::m.field_0x38)))
|
|
{
|
|
var_r30 = procWolfSlipInit();
|
|
} else {
|
|
var_r30 = procWolfMoveInit();
|
|
}
|
|
}
|
|
|
|
return var_r30;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::checkNextActionWolf(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/checkNextActionWolf__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012A02C-8012A228 12496C 01FC+00 3/3 0/0 0/0 .text wolfSideBgCheck__9daAlink_cFs */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
BOOL daAlink_c::wolfSideBgCheck(s16 param_0) {
|
|
s16 var_r31 = current.angle.y - param_0;
|
|
if (var_r31 == 0) {
|
|
return 0;
|
|
}
|
|
|
|
f32 temp_f31 = cM_scos(param_0);
|
|
f32 temp_f30 = cM_ssin(param_0);
|
|
f32 temp_f29 = cM_scos(current.angle.y);
|
|
f32 temp_f28 = cM_ssin(current.angle.y);
|
|
|
|
cXyz sp14(current.pos.x + temp_f30 * 90.0f, current.pos.y + field_0x18B0[2].GetWallH(),
|
|
current.pos.z + temp_f31 * 90.0f);
|
|
cXyz sp8(current.pos.x + temp_f28 * 90.0f, sp14.y, current.pos.z + temp_f29 * 90.0f);
|
|
|
|
if (var_r31 > 0) {
|
|
sp8.x += temp_f29 * 35.0f;
|
|
sp8.z -= temp_f28 * 35.0f;
|
|
} else {
|
|
sp8.x -= temp_f29 * 35.0f;
|
|
sp8.z += temp_f28 * 35.0f;
|
|
}
|
|
|
|
if (commonLineCheck(&sp14, &sp8)) {
|
|
sp14.x = current.pos.x - temp_f30 * 50.0f;
|
|
sp14.z = current.pos.z - temp_f31 * 50.0f;
|
|
sp8.x = current.pos.x - temp_f28 * 50.0f;
|
|
sp8.z = current.pos.z - temp_f29 * 50.0f;
|
|
|
|
if (var_r31 > 0) {
|
|
sp8.x -= temp_f29 * 35.0f;
|
|
sp8.z += temp_f28 * 35.0f;
|
|
} else {
|
|
sp8.x += temp_f29 * 35.0f;
|
|
sp8.z -= temp_f28 * 35.0f;
|
|
}
|
|
|
|
if (commonLineCheck(&sp14, &sp8)) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm BOOL daAlink_c::wolfSideBgCheck(s16 param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/wolfSideBgCheck__9daAlink_cFs.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012A228-8012A330 124B68 0108+00 4/4 0/0 0/0 .text checkWolfAttackReverse__9daAlink_cFi */
|
|
BOOL daAlink_c::checkWolfAttackReverse(int param_0) {
|
|
if (mProcID != PROC_WOLF_LOCK_ATTACK && checkAtShieldHit(mAtCyl)) {
|
|
return procWolfAttackReverseInit();
|
|
}
|
|
|
|
if ((i_checkNoResetFlg0(FLG0_UNK_18) && mProcID == PROC_WOLF_DASH) ||
|
|
(param_0 && !i_checkNoResetFlg3(FLG3_UNK_400) && i_checkNoResetFlg1(FLG1_UNK_20000000) &&
|
|
cLib_distanceAngleS(field_0x3092, current.angle.y) > 0x6000))
|
|
{
|
|
if (mProcID == PROC_WOLF_DASH) {
|
|
return procWolfDashReverseInit(0);
|
|
} else {
|
|
if (i_checkNoResetFlg3(FLG3_UNK_800000)) {
|
|
i_dComIfGp_setHitMark(2, NULL, &field_0x378c, &field_0x3166, NULL, 0);
|
|
}
|
|
|
|
return procWolfAttackReverseInit();
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 8012A330-8012A41C 124C70 00EC+00 1/1 0/0 0/0 .text checkWolfBarrierHitReverse__9daAlink_cFv */
|
|
int daAlink_c::checkWolfBarrierHitReverse() {
|
|
if (field_0x3100 != 0 && mProcID != PROC_FRONT_ROLL_SUCCESS && mProcID != PROC_DAMAGE &&
|
|
mProcID != PROC_WOLF_ATTACK_REVERSE && mProcID != PROC_WOLF_DASH_REVERSE)
|
|
{
|
|
if (i_checkWolf()) {
|
|
return procWolfDashReverseInit(1);
|
|
} else if (mLinkAcch.ChkGroundHit()) {
|
|
if (cLib_distanceAngleS(shape_angle.y, field_0x3102) >= 0x4000) {
|
|
setFrontRollCrashShock(0);
|
|
return procDamageInit(NULL, 1);
|
|
} else {
|
|
return procFrontRollSuccessInit();
|
|
}
|
|
} else {
|
|
setFrontRollCrashShock(0);
|
|
return procCoLargeDamageInit(-6, 1, 0, 0, NULL, 0);
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* 8012A41C-8012A498 124D5C 007C+00 2/2 0/0 0/0 .text
|
|
* checkWolfBarrierWallHit__9daAlink_cFR13cBgS_PolyInfo */
|
|
bool daAlink_c::checkWolfBarrierWallHit(cBgS_PolyInfo& i_poly) {
|
|
if (field_0x3100 != 0 || checkZeroSpeedF()) {
|
|
return false;
|
|
}
|
|
|
|
s16 bg_name = getMoveBGActorName(i_poly, 1);
|
|
if (bg_name == PROC_OBJ_TP || bg_name == PROC_OBJ_GB || bg_name == PROC_Obj_GanonWall2) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 8012A498-8012ACCC 124DD8 0834+00 1/1 0/0 0/0 .text wolfBgCheck__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::wolfBgCheck() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/wolfBgCheck__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 8012ACCC-8012AD1C 12560C 0050+00 1/1 0/0 0/0 .text changeWolfBlendRate__9daAlink_cFi
|
|
*/
|
|
void daAlink_c::changeWolfBlendRate(int param_0) {
|
|
if (checkWolfGrabAnime()) {
|
|
if (param_0 == 7) {
|
|
mNowAnmPackUpper[2].setRatio(FLOAT_LABEL(lit_6108));
|
|
} else if (param_0 == 3) {
|
|
mNowAnmPackUpper[2].setRatio(lit_6040);
|
|
}
|
|
} else if (checkBarkAnime()) {
|
|
if (param_0 == 2) {
|
|
mNowAnmPackUpper[2].setRatio(FLOAT_LABEL(lit_6108));
|
|
} else if (param_0 == 3) {
|
|
mNowAnmPackUpper[2].setRatio(lit_6040);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 8012AD1C-8012B724 12565C 0A08+00 1/1 0/0 0/0 .text setWolfFootMatrix__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::setWolfFootMatrix() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setWolfFootMatrix__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 8012B724-8012BFA8 126064 0884+00 1/1 0/0 0/0 .text wolfFootBgCheck__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::wolfFootBgCheck() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/wolfFootBgCheck__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 8012BFA8-8012C1F4 1268E8 024C+00 6/6 0/0 0/0 .text checkWolfWaitSlipPolygon__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm BOOL daAlink_c::checkWolfWaitSlipPolygon() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/checkWolfWaitSlipPolygon__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 8012C1F4-8012C308 126B34 0114+00 2/2 0/0 0/0 .text setWolfWaitSlip__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm f32 daAlink_c::setWolfWaitSlip() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setWolfWaitSlip__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 8012C308-8012C30C 126C48 0004+00 4/4 0/0 0/0 .text checkWolfAtnDoCharge__9daAlink_cFv
|
|
*/
|
|
void daAlink_c::checkWolfAtnDoCharge() {}
|
|
|
|
/* 8012C30C-8012CB0C 126C4C 0800+00 1/1 0/0 0/0 .text setWolfChainPos__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::setWolfChainPos() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setWolfChainPos__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 8012CB0C-8012CBE4 12744C 00D8+00 1/1 0/0 0/0 .text setWolfAnmVoice__9daAlink_cFv */
|
|
#ifdef NONMATCHING
|
|
void daAlink_c::setWolfAnmVoice() {
|
|
s8* var_r30 = field_0x2160;
|
|
|
|
if (field_0x2fd8 >= 12 || field_0x215c == NULL) {
|
|
return;
|
|
}
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
f32 temp_f31 = *var_r30;
|
|
if (*var_r30 != -1 && field_0x215c->checkPass(temp_f31)) {
|
|
voiceStart(label[field_0x2fd8]);
|
|
}
|
|
var_r30++;
|
|
}
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::setWolfAnmVoice() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setWolfAnmVoice__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012CBE4-8012CD28 127524 0144+00 4/4 0/0 0/0 .text procWolfServiceWaitInit__9daAlink_cFi */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfServiceWaitInit(int param_0) {
|
|
commonProcInit(PROC_WOLF_SERVICE_WAIT);
|
|
mProcVar3.field_0x300e.z = 0;
|
|
|
|
if (param_0 == 2) {
|
|
setSingleAnimeWolfBase(WANM_SERVICE_WAIT_D);
|
|
field_0x3198 = 0;
|
|
mProcVar2.field_0x300c = 0;
|
|
mProcVar3.field_0x300e.z = 1;
|
|
} else if (param_0 == 1) {
|
|
if (cM_rnd() < 0.5f) {
|
|
setSingleAnimeWolfBase(WANM_SERVICE_WAIT_A);
|
|
setFaceBasicTexture(FTANM_UNK_8D);
|
|
field_0x3198 = 0;
|
|
mProcVar2.field_0x300c = 0;
|
|
} else {
|
|
setSingleAnimeWolf(WANM_SIT, 1.0f, daAlinkHIO_wlLie_c0::m.field_0x0.mStartFrame,
|
|
daAlinkHIO_wlLie_c0::m.field_0x0.mEndFrame,
|
|
daAlinkHIO_wlLie_c0::m.field_0x0.mInterpolation);
|
|
field_0x3198 = 0;
|
|
mProcVar2.field_0x300c = 1;
|
|
}
|
|
} else {
|
|
setSingleAnimeWolfBase(WANM_WAIT_A_TO_S);
|
|
field_0x3198 = 0;
|
|
mProcVar2.field_0x300c = 0;
|
|
}
|
|
|
|
mProcVar3.field_0x300e.y = 0;
|
|
mProcVar0.field_0x3008 = cM_rndF(150.0f) + 150.0f;
|
|
mNormalSpeed = 0.0f;
|
|
current.angle.y = shape_angle.y;
|
|
field_0x2f98 = 4;
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfServiceWaitInit(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfServiceWaitInit__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012CD28-8012CF68 127668 0240+00 1/0 0/0 0/0 .text procWolfServiceWait__9daAlink_cFv
|
|
*/
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfServiceWait() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfServiceWait__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 8012CF68-8012CFEC 1278A8 0084+00 1/1 0/0 0/0 .text procWolfTiredWaitInit__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfTiredWaitInit() {
|
|
if (checkWolfWaitSlipPolygon() && !checkInputOnR()) {
|
|
return procWolfWaitSlipInit();
|
|
}
|
|
|
|
if (!commonProcInitNotSameProc(PROC_WOLF_TIRED_WAIT)) {
|
|
return 0;
|
|
}
|
|
|
|
mNormalSpeed = FLOAT_LABEL(lit_6108);
|
|
setSingleAnimeWolfBase(WANM_WAIT_TO_TIRED);
|
|
return 1;
|
|
}
|
|
|
|
/* 8012CFEC-8012D050 12792C 0064+00 1/0 0/0 0/0 .text procWolfTiredWait__9daAlink_cFv */
|
|
int daAlink_c::procWolfTiredWait() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
if (!checkNextActionWolf(0) && frameCtrl->checkAnmEnd()) {
|
|
setSingleAnimeWolfBase(WANM_WAIT_TIRED);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012D050-8012D104 127990 00B4+00 3/2 0/0 0/0 .text procWolfMidnaRideShockInit__9daAlink_cFv */
|
|
int daAlink_c::procWolfMidnaRideShockInit() {
|
|
if (!i_checkWolf()) {
|
|
dComIfGp_evmng_cutEnd(field_0x3184);
|
|
return procWaitInit();
|
|
}
|
|
|
|
if (!commonProcInitNotSameProc(PROC_WOLF_MIDNA_RIDE_SHOCK)) {
|
|
return 0;
|
|
}
|
|
|
|
setSingleAnimeWolfBase(WANM_MIDNA_SHOCK);
|
|
setFaceBasicTexture(FTANM_UNK_9F);
|
|
|
|
voiceStart(Z2SE_WL_V_MD_SHOCK);
|
|
mNormalSpeed = FLOAT_LABEL(lit_6108);
|
|
current.angle.y = shape_angle.y;
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012D104-8012D1A8 127A44 00A4+00 1/0 0/0 0/0 .text procWolfMidnaRideShock__9daAlink_cFv */
|
|
int daAlink_c::procWolfMidnaRideShock() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
if (frameCtrl->checkAnmEnd()) {
|
|
if (mDemo.getDemoMode() == 0x32) {
|
|
dComIfGp_evmng_cutEnd(field_0x3184);
|
|
} else {
|
|
checkNextActionWolf(0);
|
|
}
|
|
} else if (frameCtrl->getFrame() > lit_17382 && mDemo.getDemoMode() != 0x32) {
|
|
checkNextActionWolf(1);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012D1A8-8012D2A8 127AE8 0100+00 13/13 0/0 0/0 .text procWolfWaitInit__9daAlink_cFv */
|
|
int daAlink_c::procWolfWaitInit() {
|
|
if (checkWolfWaitSlipPolygon() && !checkInputOnR()) {
|
|
return procWolfWaitSlipInit();
|
|
}
|
|
|
|
if (mProcID == PROC_WOLF_WAIT) {
|
|
return 0;
|
|
}
|
|
|
|
if (mProcID == PROC_WOLF_SERVICE_WAIT && (!checkEventRun() || mProcVar3.field_0x300e.z != 0) &&
|
|
(field_0x3198 == 0 || !checkAnmEnd(mUnderFrameCtrl)) && checkNoUpperAnime())
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
commonProcInit(PROC_WOLF_WAIT);
|
|
setBlendWolfMoveAnime(daAlinkHIO_wlMove_c0::m.field_0xBC);
|
|
current.angle.y = shape_angle.y;
|
|
field_0x2f98 = 4;
|
|
mNormalSpeed = FLOAT_LABEL(lit_6108);
|
|
initServiceWaitTime();
|
|
return 1;
|
|
}
|
|
|
|
/* 8012D2A8-8012D380 127BE8 00D8+00 1/0 0/0 0/0 .text procWolfWait__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfWait() {
|
|
s16 old_shapeangle = shape_angle.y;
|
|
|
|
if (!checkNextActionWolf(0) && !checkFrontWallTypeAction()) {
|
|
field_0x33f0 = (s16)(shape_angle.y - old_shapeangle) * lit_15460;
|
|
setBlendWolfMoveAnime(lit_6041);
|
|
|
|
if (checkServiceWaitMode()) {
|
|
field_0x30ca--;
|
|
|
|
if (field_0x30ca == 0) {
|
|
procWolfServiceWaitInit(0);
|
|
}
|
|
} else {
|
|
initServiceWaitTime();
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfWait() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfWait__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012D380-8012D3E4 127CC0 0064+00 2/2 0/0 0/0 .text procWolfMoveInit__9daAlink_cFv */
|
|
int daAlink_c::procWolfMoveInit() {
|
|
if (!commonProcInitNotSameProc(PROC_WOLF_MOVE)) {
|
|
return 0;
|
|
}
|
|
|
|
setBlendWolfMoveAnime(daAlinkHIO_wlMove_c0::m.field_0x94);
|
|
setFootEffectProcType(3);
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012D3E4-8012D474 127D24 0090+00 1/0 0/0 0/0 .text procWolfMove__9daAlink_cFv */
|
|
int daAlink_c::procWolfMove() {
|
|
if (!checkNextActionWolf(0) && !checkFrontWallTypeAction()) {
|
|
if (mDemo.getDemoMode() == 2) {
|
|
if (mNormalSpeed > field_0x594 * daAlinkHIO_wlMoveNoP_c0::m.field_0x28) {
|
|
mNormalSpeed = field_0x594 * daAlinkHIO_wlMoveNoP_c0::m.field_0x28;
|
|
}
|
|
}
|
|
|
|
setBlendWolfMoveAnime(lit_6041);
|
|
field_0x30a2 = field_0x2fec;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012D474-8012D590 127DB4 011C+00 1/1 0/0 0/0 .text procWolfDashInit__9daAlink_cFv */
|
|
int daAlink_c::procWolfDashInit() {
|
|
commonProcInit(PROC_WOLF_DASH);
|
|
setSingleAnimeWolfParam(WANM_DASH_START, &daAlinkHIO_wlMove_c0::m.field_0x28);
|
|
setFootEffectProcType(3);
|
|
current.angle.y = shape_angle.y;
|
|
|
|
i_onNoResetFlg1(FLG1_DASH_MODE);
|
|
mProcVar2.field_0x300c = 0;
|
|
mProcVar3.field_0x300e.x = 0;
|
|
|
|
if (checkWolfSlowDash()) {
|
|
field_0x30d0 = daAlinkHIO_wlMove_c0::m.field_0x5A;
|
|
field_0x594 = daAlinkHIO_wlMove_c0::m.field_0xE0;
|
|
|
|
if (mNormalSpeed < daAlinkHIO_wlMove_c0::m.field_0xE4) {
|
|
mNormalSpeed = daAlinkHIO_wlMove_c0::m.field_0xE4;
|
|
}
|
|
} else if (field_0x2fc7 == 2) {
|
|
field_0x594 = daAlinkHIO_wlMove_c0::m.field_0xF0;
|
|
field_0x594 = daAlinkHIO_wlMove_c0::m.field_0xF0;
|
|
|
|
if (mNormalSpeed < daAlinkHIO_wlMove_c0::m.field_0xF4) {
|
|
mNormalSpeed = daAlinkHIO_wlMove_c0::m.field_0xF4;
|
|
}
|
|
} else {
|
|
field_0x30d0 = daAlinkHIO_wlMove_c0::m.field_0x56;
|
|
field_0x594 = daAlinkHIO_wlMove_c0::m.field_0xC8;
|
|
|
|
if (mNormalSpeed < daAlinkHIO_wlMove_c0::m.field_0xD4) {
|
|
mNormalSpeed = daAlinkHIO_wlMove_c0::m.field_0xD4;
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012D590-8012D8C0 127ED0 0330+00 1/0 0/0 0/0 .text procWolfDash__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfDash() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
cM3dGPla poly;
|
|
|
|
if (getSlidePolygon(&poly)) {
|
|
return checkNextActionWolf(0);
|
|
}
|
|
|
|
f32 step_amount;
|
|
if (checkWolfSlowDash()) {
|
|
step_amount = daAlinkHIO_wlMove_c0::m.field_0xEC;
|
|
} else if (field_0x2fc7 == 2) {
|
|
step_amount = daAlinkHIO_wlMove_c0::m.field_0xFC;
|
|
} else {
|
|
step_amount = daAlinkHIO_wlMove_c0::m.field_0xD0;
|
|
}
|
|
cLib_chaseF(&mNormalSpeed, field_0x594, step_amount);
|
|
|
|
if (checkInputOnR()) {
|
|
cLib_addCalcAngleS(¤t.angle.y, field_0x2fe2, daAlinkHIO_wlMove_c0::m.field_0x54,
|
|
daAlinkHIO_wlMove_c0::m.field_0x50, daAlinkHIO_wlMove_c0::m.field_0x52);
|
|
shape_angle.y = current.angle.y;
|
|
}
|
|
|
|
if (frameCtrl_p->getFrame() > 3.0f && checkWolfAttackReverse(1)) {
|
|
return 1;
|
|
}
|
|
|
|
if (swordSwingTrigger()) {
|
|
mProcVar3.field_0x300e.x = 1;
|
|
}
|
|
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
if (mProcVar3.field_0x300e.x != 0) {
|
|
return checkWolfAttackAction();
|
|
}
|
|
|
|
if (checkWolfSlowDash()) {
|
|
field_0x30d2 = daAlinkHIO_wlMove_c0::m.field_0x5C;
|
|
} else if (field_0x2fc7 == 2) {
|
|
field_0x30d2 = daAlinkHIO_wlMove_c0::m.field_0x60;
|
|
} else {
|
|
field_0x30d2 = daAlinkHIO_wlMove_c0::m.field_0x58;
|
|
}
|
|
|
|
return checkNextActionWolf(0);
|
|
} else if (frameCtrl_p->getFrame() > daAlinkHIO_wlMove_c0::m.field_0x28.mCheckFrame) {
|
|
if (mProcVar3.field_0x300e.x != 0) {
|
|
return checkWolfAttackAction();
|
|
}
|
|
|
|
if (checkWolfSlowDash()) {
|
|
field_0x30d2 = daAlinkHIO_wlMove_c0::m.field_0x5C;
|
|
} else if (field_0x2fc7 == 2) {
|
|
field_0x30d2 = daAlinkHIO_wlMove_c0::m.field_0x60;
|
|
} else {
|
|
field_0x30d2 = daAlinkHIO_wlMove_c0::m.field_0x58;
|
|
}
|
|
|
|
checkNextActionWolf(1);
|
|
return 1;
|
|
} else if (frameCtrl_p->checkPass(2.5f) || frameCtrl_p->checkPass(14.0f)) {
|
|
field_0x2f9d = 0x60;
|
|
i_onResetFlg1(RFLG1_UNK_30);
|
|
} else if (frameCtrl_p->checkPass(8.0f) || frameCtrl_p->checkPass(16.5f)) {
|
|
field_0x2f9d = 0x18;
|
|
i_onResetFlg1(RFLG1_UNK_C);
|
|
}
|
|
|
|
field_0x30a2 = field_0x2fec;
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfDash() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfDash__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012D8C0-8012DA5C 128200 019C+00 2/2 0/0 0/0 .text procWolfDashReverseInit__9daAlink_cFi */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfDashReverseInit(int param_0) {
|
|
commonProcInit(PROC_WOLF_DASH_REVERSE);
|
|
setSingleAnimeWolf(WANM_ATTACK_RECOIL_GROUND, daAlinkHIO_wlMove_c0::m.field_0x3C.mSpeed,
|
|
daAlinkHIO_wlMove_c0::m.field_0x3C.mStartFrame, 5,
|
|
daAlinkHIO_wlMove_c0::m.field_0x3C.mInterpolation);
|
|
|
|
if (param_0) {
|
|
current.angle.y = field_0x3102 + 0x8000;
|
|
if (cLib_distanceAngleS(current.angle.y, shape_angle.y) > 0x6000) {
|
|
mNormalSpeed = 10.0f;
|
|
speed.y = 10.0f;
|
|
} else {
|
|
mNormalSpeed = 20.0f;
|
|
speed.y = 15.0f;
|
|
}
|
|
|
|
mProcVar2.field_0x300c = 1;
|
|
} else {
|
|
mNormalSpeed = daAlinkHIO_wlMove_c0::m.field_0xD8;
|
|
speed.y = daAlinkHIO_wlMove_c0::m.field_0xDC;
|
|
current.angle.y += 0x8000;
|
|
mProcVar2.field_0x300c = 0;
|
|
}
|
|
|
|
dComIfGp_getVibration().StartShock(5, 15, cXyz(0.0f, 1.0f, 0.0f));
|
|
dKy_Sound_set(current.pos, 100, fopAcM_GetID(this), 5);
|
|
seStartOnlyReverb(Z2SE_WOLF_BODYATTACK);
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
i_onResetFlg0(RFLG0_FRONT_ROLL_CRASH);
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfDashReverseInit(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfDashReverseInit__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012DA5C-8012DBA8 12839C 014C+00 1/0 0/0 0/0 .text procWolfDashReverse__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfDashReverse() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
|
|
if (mProcVar2.field_0x300c == 0) {
|
|
field_0x2f99 = 4;
|
|
}
|
|
|
|
if (!i_checkModeFlg(0x2)) {
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
checkNextActionWolf(0);
|
|
} else if (frameCtrl_p->getFrame() > daAlinkHIO_wlMove_c0::m.field_0x3C.mCheckFrame) {
|
|
checkNextActionWolf(1);
|
|
}
|
|
} else if (mProcVar2.field_0x300c != 0) {
|
|
mProcVar2.field_0x300c = 0;
|
|
} else if (((mLinkAcch.ChkGroundHit() || i_checkEndResetFlg2(ERFLG2_UNK_100)) &&
|
|
i_checkModeFlg(0x2)))
|
|
{
|
|
if (checkWolfLandAction(0)) {
|
|
return 1;
|
|
}
|
|
|
|
mNormalSpeed = FLOAT_LABEL(lit_6108);
|
|
frameCtrl_p->setFrame(daAlinkHIO_wlMove_c0::m.field_0x3C.mSpeed + frameCtrl_p->getFrame());
|
|
getNowAnmPackUnder(UNDER_0)->setFrame(frameCtrl_p->getFrame());
|
|
frameCtrl_p->setRate(daAlinkHIO_wlMove_c0::m.field_0x3C.mSpeed);
|
|
frameCtrl_p->setEnd(daAlinkHIO_wlMove_c0::m.field_0x3C.mEndFrame);
|
|
|
|
current.angle.y = shape_angle.y;
|
|
offModeFlg(0x2);
|
|
onModeFlg(0x8000);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012DBA8-8012DC44 1284E8 009C+00 1/1 0/0 0/0 .text procWolfAtnActorMoveInit__9daAlink_cFv */
|
|
int daAlink_c::procWolfAtnActorMoveInit() {
|
|
if (!commonProcInitNotSameProc(PROC_WOLF_ATN_AC_MOVE)) {
|
|
return 0;
|
|
}
|
|
|
|
if (checkZeroSpeedF()) {
|
|
onModeFlg(1);
|
|
}
|
|
|
|
setWolfAtnMoveDirection();
|
|
setBlendWolfAtnMoveAnime(daAlinkHIO_wlMove_c0::m.field_0x94);
|
|
|
|
if (checkWolfAtnWait()) {
|
|
voiceStartLevel(Z2SE_WL_V_ROAR);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012DC44-8012DD08 128584 00C4+00 1/0 0/0 0/0 .text procWolfAtnActorMove__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfAtnActorMove() {
|
|
setWolfAtnMoveDirection();
|
|
|
|
if (!checkNextActionWolf(0)) {
|
|
if (checkZeroSpeedF()) {
|
|
onModeFlg(1);
|
|
|
|
if (checkWolfWaitSlipPolygon() && !checkInputOnR()) {
|
|
return procWolfWaitSlipInit();
|
|
}
|
|
} else {
|
|
offModeFlg(1);
|
|
}
|
|
|
|
setBlendWolfAtnMoveAnime(lit_6041);
|
|
|
|
if (checkWolfAtnWait()) {
|
|
voiceStartLevel(Z2SE_WL_V_ROAR);
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012DD08-8012DDB4 128648 00AC+00 1/1 0/0 0/0 .text procWolfWaitTurnInit__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfWaitTurnInit() {
|
|
if (!commonProcInitNotSameProc(PROC_WOLF_WAIT_TURN)) {
|
|
return 0;
|
|
}
|
|
|
|
f32 anm_speed;
|
|
if (checkWolfDashMode()) {
|
|
anm_speed = daAlinkHIO_wlMove_c0::m.field_0x74;
|
|
} else {
|
|
anm_speed = daAlinkHIO_wlMoveNoP_c0::m.field_0x18;
|
|
}
|
|
|
|
setSingleAnimeWolfBaseSpeed(WANM_WALK_A, anm_speed, daAlinkHIO_wlMove_c0::m.field_0x94);
|
|
|
|
if (checkEventRun()) {
|
|
mNormalSpeed = FLOAT_LABEL(lit_6108);
|
|
}
|
|
|
|
mProcVar3.field_0x300e.x = field_0x2fe2;
|
|
current.angle.y = shape_angle.y;
|
|
return 1;
|
|
}
|
|
|
|
/* 8012DDB4-8012DEC8 1286F4 0114+00 1/0 0/0 0/0 .text procWolfWaitTurn__9daAlink_cFv */
|
|
int daAlink_c::procWolfWaitTurn() {
|
|
f32 step_amount;
|
|
if (checkWolfDashMode()) {
|
|
step_amount = daAlinkHIO_wlMove_c0::m.field_0x6C;
|
|
} else {
|
|
step_amount = daAlinkHIO_wlMoveNoP_c0::m.field_0x10;
|
|
}
|
|
cLib_chaseF(&mNormalSpeed, FLOAT_LABEL(lit_6108), step_amount);
|
|
|
|
if (checkWolfGroundSpecialMode()) {
|
|
return 1;
|
|
}
|
|
|
|
s16 var_r31 = cLib_addCalcAngleS(&shape_angle.y, mProcVar3.field_0x300e.x, 30, 0x3CDF, 8000);
|
|
current.angle.y = shape_angle.y;
|
|
|
|
if (checkNextActionFromButton()) {
|
|
return 1;
|
|
}
|
|
|
|
if (var_r31 == 0) {
|
|
if (checkEventRun()) {
|
|
if (mDemo.getDemoMode() == 5) {
|
|
dComIfGp_evmng_cutEnd(field_0x3184);
|
|
} else {
|
|
checkNextActionWolf(0);
|
|
}
|
|
} else {
|
|
checkNextActionWolf(0);
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012DEC8-8012E0AC 128808 01E4+00 2/2 0/0 0/0 .text procWolfSideStepInit__9daAlink_cFi
|
|
*/
|
|
int daAlink_c::procWolfSideStepInit(int param_0) {
|
|
if (field_0x2f98 == 1 && !param_0 && i_checkFirstMidnaDemo() && !checkWolfGrabAnime() &&
|
|
field_0x2fcc != 0)
|
|
{
|
|
return procWolfBackJumpInit(0);
|
|
}
|
|
|
|
commonProcInit(PROC_WOLF_SIDESTEP);
|
|
|
|
if (field_0x2f98 == 0 || param_0) {
|
|
field_0x2f98 = 1;
|
|
}
|
|
|
|
if (field_0x2f98 == 1) {
|
|
if (mTargetedActor != NULL) {
|
|
mProcVar2.field_0x300c = cLib_targetAngleY(¤t.pos, &mTargetedActor->eyePos);
|
|
} else {
|
|
mProcVar2.field_0x300c = shape_angle.y;
|
|
}
|
|
|
|
current.angle.y = shape_angle.y + 0x8000;
|
|
setSingleAnimeWolfParam(WANM_BACK_JUMP_START, &daAlinkHIO_wlSideStep_c0::m.field_0x28);
|
|
mNormalSpeed = daAlinkHIO_wlSideStep_c0::m.field_0x58;
|
|
speed.y = daAlinkHIO_wlSideStep_c0::m.field_0x5C;
|
|
mProcVar1.field_0x300a = 0;
|
|
} else {
|
|
shape_angle.y = field_0x2fe4;
|
|
|
|
daAlink_WANM jump_anm;
|
|
if (field_0x2f98 == 2) {
|
|
jump_anm = WANM_SIDE_JUMP_LEFT_START;
|
|
current.angle.y = shape_angle.y + 0x4000;
|
|
} else {
|
|
jump_anm = WANM_SIDE_JUMP_RIGHT_START;
|
|
current.angle.y = shape_angle.y - 0x4000;
|
|
}
|
|
|
|
setSingleAnimeWolfParam(jump_anm, &daAlinkHIO_wlSideStep_c0::m.field_0x0);
|
|
mNormalSpeed = daAlinkHIO_wlSideStep_c0::m.field_0x50;
|
|
speed.y = daAlinkHIO_wlSideStep_c0::m.field_0x54;
|
|
mProcVar1.field_0x300a = 1;
|
|
}
|
|
|
|
mProcVar3.field_0x300e.z = 0;
|
|
mProcVar3.field_0x300e.x = 0;
|
|
voiceStart(Z2SE_WL_V_BREATH_JUMP);
|
|
return 1;
|
|
}
|
|
|
|
/* 8012E0AC-8012E1E8 1289EC 013C+00 1/0 0/0 0/0 .text procWolfSideStep__9daAlink_cFv */
|
|
int daAlink_c::procWolfSideStep() {
|
|
if (mProcVar1.field_0x300a == 0) {
|
|
cLib_addCalcAngleS(
|
|
&shape_angle.y, mProcVar2.field_0x300c, daAlinkHIO_wlAtnMove_c0::m.field_0x4,
|
|
daAlinkHIO_wlAtnMove_c0::m.field_0x0, daAlinkHIO_wlAtnMove_c0::m.field_0x2);
|
|
current.angle.y = shape_angle.y + 0x8000;
|
|
} else if (mTargetedActor != NULL) {
|
|
cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchActorAngleY(this, mTargetedActor), 5, 0x5E8,
|
|
0x13C);
|
|
|
|
if (field_0x2f98 == 2) {
|
|
current.angle.y = shape_angle.y + 0x4000;
|
|
} else {
|
|
current.angle.y = shape_angle.y - 0x4000;
|
|
}
|
|
}
|
|
|
|
checkWolfAtnDoCharge();
|
|
|
|
if (mLinkAcch.ChkGroundHit() && mProcVar3.field_0x300e.x != 0) {
|
|
return procWolfSideStepLandInit(mProcVar3.field_0x300e.z);
|
|
}
|
|
|
|
if (mDemo.getDemoMode() != 0x10 &&
|
|
current.pos.y < mLastJumpPos.y - daAlinkHIO_wlSideStep_c0::m.field_0x60)
|
|
{
|
|
field_0x2f98 = 0;
|
|
return procWolfFallInit(2, daAlinkHIO_wlSideStep_c0::m.field_0x64);
|
|
}
|
|
|
|
mProcVar3.field_0x300e.x = 1;
|
|
return 1;
|
|
}
|
|
|
|
/* 8012E1E8-8012E2DC 128B28 00F4+00 1/1 0/0 0/0 .text procWolfSideStepLandInit__9daAlink_cFs */
|
|
int daAlink_c::procWolfSideStepLandInit(s16 param_0) {
|
|
commonProcInit(PROC_WOLF_SIDESTEP_LAND);
|
|
|
|
if (field_0x2f98 == 1) {
|
|
setSingleAnimeWolfParam(WANM_BACK_JUMP_END, &daAlinkHIO_wlSideStep_c0::m.field_0x3C);
|
|
field_0x3478 = daAlinkHIO_wlSideStep_c0::m.field_0x3C.mCheckFrame;
|
|
field_0x2fcc = 10;
|
|
} else {
|
|
field_0x2fcc = 0;
|
|
setSingleAnimeWolfParam(field_0x2f98 == 2 ? WANM_SIDE_JUMP_LEFT_END :
|
|
WANM_SIDE_JUMP_RIGHT_END,
|
|
&daAlinkHIO_wlSideStep_c0::m.field_0x14);
|
|
field_0x3478 = daAlinkHIO_wlSideStep_c0::m.field_0x14.mCheckFrame;
|
|
}
|
|
|
|
mProcVar3.field_0x300e.z = param_0;
|
|
field_0x2f9d = 4;
|
|
setFootEffectProcType(2);
|
|
i_onResetFlg1(0xC);
|
|
mNormalSpeed = FLOAT_LABEL(lit_6108);
|
|
setStepLandVibration();
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012E2DC-8012E398 128C1C 00BC+00 1/0 0/0 0/0 .text procWolfSideStepLand__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfSideStepLand() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
if (field_0x2fcc != 0) {
|
|
field_0x2fcc = 10;
|
|
}
|
|
|
|
setWolfAtnMoveDirection();
|
|
checkWolfAtnDoCharge();
|
|
|
|
if (frameCtrl->checkAnmEnd()) {
|
|
if (mDemo.getDemoMode() == 0x10) {
|
|
dComIfGp_evmng_cutEnd(field_0x3184);
|
|
} else {
|
|
checkNextActionWolf(0);
|
|
}
|
|
} else if (frameCtrl->getFrame() > field_0x3478) {
|
|
checkNextActionWolf(1);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012E398-8012E508 128CD8 0170+00 3/3 0/0 0/0 .text procWolfBackJumpInit__9daAlink_cFi
|
|
*/
|
|
int daAlink_c::procWolfBackJumpInit(int param_0) {
|
|
commonProcInit(PROC_WOLF_BACKJUMP);
|
|
|
|
if (param_0 == 1) {
|
|
setSingleAnimeWolfParam(WANM_BACKFLIP_START, &daAlinkHIO_wlAtDown_c0::m.field_0x50);
|
|
mNormalSpeed = daAlinkHIO_wlAtDown_c0::m.field_0x94;
|
|
speed.y = daAlinkHIO_wlAtDown_c0::m.field_0x98;
|
|
voiceStart(Z2SE_WL_V_BREATH_JUMP);
|
|
} else {
|
|
if (param_0 == 2) {
|
|
setSingleAnimeWolf(WANM_BACKFLIP_START, daAlinkHIO_wlAtCjump_c0::m.field_0x44,
|
|
daAlinkHIO_wlAtCjump_c0::m.field_0x40,
|
|
daAlinkHIO_wlBackJump_c0::m.field_0x0.mEndFrame,
|
|
daAlinkHIO_wlBackJump_c0::m.field_0x0.mInterpolation);
|
|
} else {
|
|
setSingleAnimeWolfParam(WANM_BACKFLIP_START, &daAlinkHIO_wlBackJump_c0::m.field_0x0);
|
|
voiceStart(Z2SE_WL_V_BREATH_JUMP);
|
|
}
|
|
|
|
mNormalSpeed = daAlinkHIO_wlBackJump_c0::m.field_0x28;
|
|
speed.y = daAlinkHIO_wlBackJump_c0::m.field_0x2C;
|
|
}
|
|
|
|
if (mTargetedActor != NULL && param_0 == 0) {
|
|
mProcVar2.field_0x300c = cLib_targetAngleY(¤t.pos, &mTargetedActor->eyePos);
|
|
} else {
|
|
mProcVar2.field_0x300c = shape_angle.y;
|
|
}
|
|
|
|
current.angle.y = shape_angle.y + 0x8000;
|
|
field_0x3478 = mNormalSpeed;
|
|
mProcVar3.field_0x300e.z = 0;
|
|
|
|
if (param_0 == 0) {
|
|
mProcVar3.field_0x300e.y = 1;
|
|
} else {
|
|
mProcVar3.field_0x300e.y = 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012E508-8012E5F4 128E48 00EC+00 1/0 0/0 0/0 .text procWolfBackJump__9daAlink_cFv */
|
|
int daAlink_c::procWolfBackJump() {
|
|
cLib_addCalcAngleS(&shape_angle.y, mProcVar2.field_0x300c, daAlinkHIO_wlAtnMove_c0::m.field_0x4,
|
|
daAlinkHIO_wlAtnMove_c0::m.field_0x0, daAlinkHIO_wlAtnMove_c0::m.field_0x2);
|
|
current.angle.y = shape_angle.y - -0x8000;
|
|
|
|
if (mProcVar3.field_0x300e.y != 0) {
|
|
checkWolfAtnDoCharge();
|
|
}
|
|
|
|
backJumpSpeedDec();
|
|
|
|
if (mUnderFrameCtrl[0].checkAnmEnd() && mLinkAcch.ChkGroundHit()) {
|
|
procWolfBackJumpLandInit(mProcVar3.field_0x300e.z, mProcVar3.field_0x300e.y);
|
|
} else if (mDemo.getDemoMode() != 0x10 &&
|
|
current.pos.y < mLastJumpPos.y - daAlinkHIO_wlBackJump_c0::m.field_0x30)
|
|
{
|
|
field_0x2f98 = 0;
|
|
procWolfFallInit(2, daAlinkHIO_wlBackJump_c0::m.field_0x34);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012E5F4-8012E684 128F34 0090+00 1/1 0/0 0/0 .text procWolfBackJumpLandInit__9daAlink_cFss */
|
|
int daAlink_c::procWolfBackJumpLandInit(s16 param_0, s16 param_1) {
|
|
commonProcInit(PROC_WOLF_BACKJUMP_LAND);
|
|
setSingleAnimeWolfParam(WANM_BACKFLIP_END, &daAlinkHIO_wlBackJump_c0::m.field_0x14);
|
|
mNormalSpeed = FLOAT_LABEL(lit_6108);
|
|
field_0x2f9d = 4;
|
|
setFootEffectProcType(2);
|
|
field_0x2fcc = 10;
|
|
mProcVar3.field_0x300e.z = param_0;
|
|
mProcVar3.field_0x300e.y = param_1;
|
|
setStepLandVibration();
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012E684-8012E754 128FC4 00D0+00 1/0 0/0 0/0 .text procWolfBackJumpLand__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfBackJumpLand() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
if (field_0x2fcc != 0) {
|
|
field_0x2fcc = 10;
|
|
}
|
|
|
|
setWolfAtnMoveDirection();
|
|
|
|
if (mProcVar3.field_0x300e.y != 0) {
|
|
checkWolfAtnDoCharge();
|
|
}
|
|
|
|
if (frameCtrl->checkAnmEnd()) {
|
|
if (mDemo.getDemoMode() == 0x10) {
|
|
dComIfGp_evmng_cutEnd(field_0x3184);
|
|
} else {
|
|
checkNextActionWolf(0);
|
|
}
|
|
} else if (frameCtrl->getFrame() > daAlinkHIO_wlBackJump_c0::m.field_0x14.mCheckFrame) {
|
|
checkNextActionWolf(1);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012E754-8012E83C 129094 00E8+00 2/2 0/0 0/0 .text procWolfHowlInit__9daAlink_cFi */
|
|
int daAlink_c::procWolfHowlInit(int param_0) {
|
|
if (checkEventRun() && mProcID == PROC_WOLF_HOWL) {
|
|
return 0;
|
|
}
|
|
|
|
commonProcInit(PROC_WOLF_HOWL);
|
|
|
|
if (param_0 != 0) {
|
|
setSingleAnimeWolfParam(WANM_HOWL_SIT, &daAlinkHIO_wlHowl_c0::m.field_0x14);
|
|
onModeFlg(0x800000);
|
|
field_0x3478 = daAlinkHIO_wlHowl_c0::m.field_0x14.mCheckFrame;
|
|
mProcVar3.field_0x300e.x = 1;
|
|
} else {
|
|
setSingleAnimeWolfParam(WANM_HOWL, &daAlinkHIO_wlHowl_c0::m.field_0x0);
|
|
field_0x3478 = daAlinkHIO_wlHowl_c0::m.field_0x0.mCheckFrame;
|
|
mProcVar3.field_0x300e.x = 0;
|
|
}
|
|
|
|
mNormalSpeed = FLOAT_LABEL(lit_6108);
|
|
mProcVar2.field_0x300c = 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012E83C-8012E9C8 12917C 018C+00 1/0 0/0 0/0 .text procWolfHowl__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfHowl() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
if (doButton()) {
|
|
procWolfHowlInit(mProcVar3.field_0x300e.x);
|
|
} else {
|
|
checkNextActionWolf(0);
|
|
}
|
|
} else if (frameCtrl_p->getFrame() > field_0x3478) {
|
|
if (doButton()) {
|
|
procWolfHowlInit(mProcVar3.field_0x300e.x);
|
|
} else {
|
|
checkNextActionWolf(1);
|
|
}
|
|
} else {
|
|
if ((!doButton() || mProcVar2.field_0x300c != 0) && mDemo.getDemoMode() != 0x15 &&
|
|
mDemo.getDemoMode() != 0x16)
|
|
{
|
|
if (!(frameCtrl_p->getFrame() < 38.0f)) {
|
|
mProcVar2.field_0x300c = 1;
|
|
}
|
|
} else if (frameCtrl_p->getFrame() > 56.0f) {
|
|
frameCtrl_p->setFrame((frameCtrl_p->getFrame() - 56.0f) + 38.0f);
|
|
}
|
|
|
|
if (frameCtrl_p->getFrame() >= 38.0f && frameCtrl_p->getFrame() <= 56.0f) {
|
|
i_onResetFlg0(RFLG0_UNK_40000000);
|
|
voiceStartLevel(Z2SE_WL_V_HOWL);
|
|
dKy_Sound_set(current.pos, 100, fopAcM_GetID(this), 1);
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfHowl() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfHowl__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012E9C8-8012EB94 129308 01CC+00 2/2 0/0 0/0 .text procWolfAutoJumpInit__9daAlink_cFi
|
|
*/
|
|
int daAlink_c::procWolfAutoJumpInit(int param_0) {
|
|
commonProcInit(PROC_WOLF_AUTO_JUMP);
|
|
|
|
f32 var_f1;
|
|
f32 var_f31;
|
|
f32 var_f30;
|
|
s16 var_r30;
|
|
|
|
if (checkWolfDashMode() && field_0x2fc7 != 3) {
|
|
var_f1 = daAlinkHIO_wlAutoJump_c0::m.field_0x00.mSpeed;
|
|
field_0x594 = daAlinkHIO_wlAutoJump_c0::m.field_0x70;
|
|
var_f31 = daAlinkHIO_wlAutoJump_c0::m.field_0x48;
|
|
var_f30 = daAlinkHIO_wlAutoJump_c0::m.field_0x4c;
|
|
var_r30 = daAlinkHIO_wlAutoJump_c0::m.field_0x40;
|
|
i_onNoResetFlg2(FLG2_UNK_10000);
|
|
} else {
|
|
var_f1 = daAlinkHIO_wlAutoJump_c0::m.field_0x60;
|
|
field_0x594 = daAlinkHIO_wlAutoJump_c0::m.field_0x74;
|
|
var_f31 = daAlinkHIO_wlAutoJump_c0::m.field_0x68;
|
|
var_f30 = daAlinkHIO_wlAutoJump_c0::m.field_0x6c;
|
|
var_r30 = daAlinkHIO_wlAutoJump_c0::m.field_0x42;
|
|
}
|
|
|
|
setSingleAnimeWolf(WANM_JUMP_ATTACK_START, var_f1,
|
|
daAlinkHIO_wlAutoJump_c0::m.field_0x00.mStartFrame,
|
|
daAlinkHIO_wlAutoJump_c0::m.field_0x00.mEndFrame,
|
|
daAlinkHIO_wlAutoJump_c0::m.field_0x00.mInterpolation);
|
|
if (speedF > field_0x594 || param_0 || daAlinkHIO_wlAutoJump_c0::m.field_0x3c == true) {
|
|
speedF = field_0x594;
|
|
} else if (speedF < var_f31) {
|
|
speedF = var_f31;
|
|
}
|
|
|
|
mNormalSpeed = speedF * var_f30;
|
|
speed.y = mNormalSpeed * cM_ssin(var_r30);
|
|
mNormalSpeed *= cM_scos(var_r30);
|
|
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
field_0x33b0 = l_wolfBaseAnime.y;
|
|
current.angle.y = shape_angle.y;
|
|
|
|
i_offNoResetFlg0(FLG0_UNK_40000);
|
|
i_onResetFlg0(RFLG0_UNK_100);
|
|
voiceStart(Z2SE_WL_V_BREATH_JUMP);
|
|
mProcVar2.field_0x300c = 1;
|
|
return 1;
|
|
}
|
|
|
|
/* 8012EB94-8012EDD0 1294D4 023C+00 1/0 0/0 0/0 .text procWolfAutoJump__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfAutoJump() {
|
|
if (mSpecialMode != 0x27) {
|
|
if (checkInputOnR() && getDirectionFromCurrentAngle() == DIR_BACKWARD) {
|
|
cLib_chaseF(&mNormalSpeed, 0.0f, field_0x33a8 * 0.2f);
|
|
} else if (!checkInputOnR()) {
|
|
cLib_chaseF(&mNormalSpeed, 0.0f, 0.1f);
|
|
}
|
|
}
|
|
|
|
field_0x2f99 = 7;
|
|
|
|
if (mLinkAcch.ChkGroundHit()) {
|
|
return checkWolfLandAction(0);
|
|
}
|
|
|
|
if (checkFrontWallTypeAction()) {
|
|
return 1;
|
|
}
|
|
|
|
if (checkWolfRopeJumpHang()) {
|
|
return 1;
|
|
}
|
|
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
|
|
if (!checkUnderMove0BckNoArcWolf(WANM_FALL_LAND) &&
|
|
(mFallHeight - current.pos.y) * 0.01f > daAlinkHIO_wlDamFall_c0::m.field_0x38)
|
|
{
|
|
field_0x2f99 = 12;
|
|
setSingleAnimeWolfBaseSpeed(WANM_FALL_LAND, 0.0f, daAlinkHIO_wlDamFall_c0::m.field_0x3C);
|
|
} else if (checkUnderMove0BckNoArcWolf(WANM_JUMP_ATTACK_START)) {
|
|
if (speed.y < -gravity) {
|
|
field_0x2f99 = 12;
|
|
setSingleAnimeWolfParam(WANM_JUMP_ATTACK, &daAlinkHIO_wlAutoJump_c0::m.field_0x28);
|
|
} else if (checkAnmEnd(frameCtrl_p)) {
|
|
field_0x2f99 = 12;
|
|
setSingleAnimeWolf(WANM_JUMP_ATTACK, 0.0f,
|
|
daAlinkHIO_wlAutoJump_c0::m.field_0x28.mStartFrame,
|
|
daAlinkHIO_wlAutoJump_c0::m.field_0x28.mEndFrame,
|
|
daAlinkHIO_wlAutoJump_c0::m.field_0x28.mInterpolation);
|
|
mProcVar2.field_0x300c = 0;
|
|
}
|
|
} else if (mProcVar2.field_0x300c == 0 && checkUnderMove0BckNoArcWolf(WANM_JUMP_ATTACK) &&
|
|
speed.y < -gravity)
|
|
{
|
|
mProcVar2.field_0x300c = 1;
|
|
frameCtrl_p->setRate(daAlinkHIO_wlAutoJump_c0::m.field_0x28.mSpeed);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfAutoJump() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfAutoJump__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012EDD0-8012EFB8 129710 01E8+00 12/12 0/0 0/0 .text procWolfFallInit__9daAlink_cFif
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfFallInit(int param_0, f32 i_morf) {
|
|
if (!commonProcInitNotSameProc(PROC_WOLF_FALL)) {
|
|
return 0;
|
|
}
|
|
|
|
mProcVar3.field_0x300e.z = 0;
|
|
|
|
if (param_0 == 1) {
|
|
mNormalSpeed = 0.0f;
|
|
speed.y = 0.0f;
|
|
current.angle.y = shape_angle.y;
|
|
} else if (param_0 == 4) {
|
|
current.angle.y = field_0x2ffe;
|
|
dComIfGp_getVibration().StartShock(6, 31, cXyz(0.0f, 1.0f, 0.0f));
|
|
setDamagePointNormal(field_0x318c);
|
|
i_onNoResetFlg1(FLG1_THROW_DAMAGE);
|
|
|
|
if (mDamageTimer != 0) {
|
|
onModeFlg(8);
|
|
}
|
|
|
|
mNormalSpeed = field_0x3408;
|
|
speed.y = field_0x340c;
|
|
mProcVar3.field_0x300e.z = 1;
|
|
}
|
|
|
|
setSingleAnimeWolfBaseSpeed(WANM_JUMP_ATTACK, 0.0f, i_morf);
|
|
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
frameCtrl_p->setFrame(frameCtrl_p->getEnd() - 0.001f);
|
|
getNowAnmPackUnder(UNDER_0)->setFrame(frameCtrl_p->getFrame());
|
|
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
field_0x2f99 = 12;
|
|
resetBasAnime();
|
|
|
|
i_offNoResetFlg0(FLG0_UNK_40000);
|
|
if (param_0 != 4 && current.angle.y == shape_angle.y) {
|
|
if (mNormalSpeed > 1.0f) {
|
|
mProcVar0.field_0x3008 = 2;
|
|
} else {
|
|
mProcVar0.field_0x3008 = 1;
|
|
}
|
|
} else {
|
|
mProcVar0.field_0x3008 = 0;
|
|
}
|
|
|
|
mProcVar1.field_0x300a = 7;
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfFallInit(int param_0, f32 param_1) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfFallInit__9daAlink_cFif.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012EFB8-8012F138 1298F8 0180+00 1/0 0/0 0/0 .text procWolfFall__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfFall() {
|
|
if (mProcVar3.field_0x300e.z == 0) {
|
|
cLib_chaseF(&mNormalSpeed, 0.0f, 0.1f);
|
|
} else if (mProcVar3.field_0x300e.z > 0) {
|
|
mProcVar3.field_0x300e.z = -1;
|
|
return 1;
|
|
}
|
|
|
|
field_0x2f99 = 4;
|
|
|
|
if (mLinkAcch.ChkGroundHit()) {
|
|
return checkWolfLandAction(0);
|
|
}
|
|
|
|
if (mProcVar0.field_0x3008 == 1) {
|
|
if (mProcVar1.field_0x300a > 0) {
|
|
mProcVar1.field_0x300a--;
|
|
} else if (checkInputOnR() && getDirectionFromShapeAngle() == DIR_FORWARD &&
|
|
checkFrontWallTypeAction())
|
|
{
|
|
return 1;
|
|
}
|
|
} else if (mProcVar0.field_0x3008 == 2 && checkFrontWallTypeAction()) {
|
|
return 1;
|
|
}
|
|
|
|
if (checkWolfRopeJumpHang()) {
|
|
return 1;
|
|
}
|
|
|
|
if (!checkUnderMove0BckNoArcWolf(WANM_FALL_LAND) &&
|
|
(mFallHeight - current.pos.y) * 0.01f > daAlinkHIO_wlDamFall_c0::m.field_0x38)
|
|
{
|
|
field_0x2f99 = 12;
|
|
setSingleAnimeWolfBaseSpeed(WANM_FALL_LAND, 0.0f, daAlinkHIO_wlDamFall_c0::m.field_0x3C);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfFall() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfFall__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012F138-8012F1F0 129A78 00B8+00 2/2 0/0 0/0 .text procWolfLandInit__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfLandInit() {
|
|
commonProcInit(PROC_WOLF_LAND);
|
|
mNormalSpeed = FLOAT_LABEL(lit_6108);
|
|
field_02f99 = 12;
|
|
|
|
setSingleWolfAnimeParam(WANM_JUMP_ATTACK_END, &daAlinkHIO_wlAutoJump_c0::m.field_0x14);
|
|
field_0x3478 = daAlinkHIO_wlAutoJump_c0::m.field_0x14.mCheckFrame;
|
|
mProcVar2.field_0x300c = 1;
|
|
|
|
field_0x2f9d = 4;
|
|
setFootEffectProcType(4);
|
|
|
|
dComIfGp_getVibration().StartShock(cXyz(0.0f, 1.0f, 0.0f));
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfLandInit() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfLandInit__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012F1F0-8012F278 129B30 0088+00 1/0 0/0 0/0 .text procWolfLand__9daAlink_cFv */
|
|
int daAlink_c::procWolfLand() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
if (mProcVar2.field_0x300c != 0) {
|
|
field_0x2f99 = 4;
|
|
}
|
|
|
|
if (frameCtrl->checkAnmEnd()) {
|
|
checkNextActionWolf(0);
|
|
} else if (frameCtrl->getFrame() > field_0x3478) {
|
|
checkNextActionWolf(1);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012F278-8012F358 129BB8 00E0+00 1/1 0/0 0/0 .text procWolfSitInit__9daAlink_cFi */
|
|
int daAlink_c::procWolfSitInit(int param_0) {
|
|
if (!commonProcInitNotSameProc(PROC_WOLF_SIT)) {
|
|
return 0;
|
|
}
|
|
|
|
if (param_0 != 0 && !checkUnderMove0BckNoArcWolf(WANM_WAIT_SIT) &&
|
|
!checkUnderMove0BckNoArcWolf(WANM_HOWL_SIT))
|
|
{
|
|
setSingleAnimeWolfParam(WANM_SIT, &daAlinkHIO_wlLie_c0::m.field_0x0);
|
|
field_0x3198 = 0;
|
|
} else {
|
|
field_0x3198 = 1;
|
|
|
|
if (!checkUnderMove0BckNoArcWolf(WANM_WAIT_SIT)) {
|
|
setSingleAnimeWolfBaseSpeed(WANM_WAIT_SIT, daAlinkHIO_wlLie_c0::m.field_0x44,
|
|
daAlinkHIO_wlLie_c0::m.field_0x48);
|
|
}
|
|
}
|
|
|
|
current.angle.y = shape_angle.y;
|
|
return 1;
|
|
}
|
|
|
|
/* 8012F358-8012F41C 129C98 00C4+00 1/0 0/0 0/0 .text procWolfSit__9daAlink_cFv */
|
|
int daAlink_c::procWolfSit() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
cLib_chaseF(&mNormalSpeed, FLOAT_LABEL(lit_6108),
|
|
checkWolfDashMode() ? daAlinkHIO_wlMove_c0::m.field_0x6C :
|
|
daAlinkHIO_wlMoveNoP_c0::m.field_0x10);
|
|
|
|
if (!spActionButton() && mDemo.getDemoMode() != 0xF) {
|
|
checkNextActionWolfFromLie();
|
|
} else if (frameCtrl->checkAnmEnd()) {
|
|
setSingleAnimeWolfBaseSpeed(WANM_WAIT_SIT, daAlinkHIO_wlLie_c0::m.field_0x44,
|
|
daAlinkHIO_wlLie_c0::m.field_0x48);
|
|
field_0x3198 = 1;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012F41C-8012F500 129D5C 00E4+00 1/1 0/0 0/0 .text procWolfStepMoveInit__9daAlink_cFv
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfStepMoveInit() {
|
|
commonProcInit(PROC_WOLF_STEP_MOVE);
|
|
setSingleAnimeWolfParam(WANM_BUMP_START, &daAlinkHIO_wlWallHang_c0::m.field_0x50);
|
|
field_0x3478 = 0.5f * mNormalSpeed;
|
|
mNormalSpeed = 0.0f;
|
|
mProcVar2.field_0x300c = 0;
|
|
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
current.pos.x -= cM_ssin(shape_angle.y) * 10.0f;
|
|
current.pos.z -= cM_scos(shape_angle.y) * 10.0f;
|
|
|
|
field_0x2060->getOldFrameTransInfo(0)->mTranslate.z += 10.0f;
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfStepMoveInit() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfStepMoveInit__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012F500-8012F634 129E40 0134+00 1/0 0/0 0/0 .text procWolfStepMove__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfStepMove() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
|
|
if (mProcVar2.field_0x300c != 0) {
|
|
field_0x2f99 = 4;
|
|
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
return checkNextActionWolf(0);
|
|
}
|
|
|
|
if (frameCtrl_p->getFrame() > daAlinkHIO_wlWallHang_c0::m.field_0x64.mCheckFrame) {
|
|
mNormalSpeed = field_0x3478;
|
|
|
|
if (checkNextActionWolf(1)) {
|
|
return 1;
|
|
}
|
|
|
|
mNormalSpeed = 0.0f;
|
|
}
|
|
} else if (checkAnmEnd(frameCtrl_p)) {
|
|
setSingleAnimeWolfParam(WANM_BUMP_END, &daAlinkHIO_wlWallHang_c0::m.field_0x64);
|
|
current.pos.set(field_0x34ec.x + cM_ssin(shape_angle.y) * 2.0f, field_0x34ec.y,
|
|
field_0x34ec.z + cM_scos(shape_angle.y) * 2.0f);
|
|
field_0x2f99 = 0x50;
|
|
mProcVar2.field_0x300c = 1;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfStepMove() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfStepMove__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012F634-8012F6EC 129F74 00B8+00 1/1 0/0 0/0 .text procWolfSlipInit__9daAlink_cFv */
|
|
int daAlink_c::procWolfSlipInit() {
|
|
commonProcInit(PROC_WOLF_SLIP);
|
|
setSingleAnimeWolfParam(WANM_SLIP, &daAlinkHIO_wlMove_c0::m.field_0x0);
|
|
|
|
if (checkWolfDashMode()) {
|
|
mNormalSpeed = speedF * daAlinkHIO_wlMove_c0::m.field_0xA4;
|
|
} else {
|
|
mNormalSpeed = speedF * daAlinkHIO_wlMoveNoP_c0::m.field_0x3C;
|
|
}
|
|
|
|
current.angle.y = shape_angle.y;
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
setFootEffectProcType(1);
|
|
return 1;
|
|
}
|
|
|
|
/* 8012F6EC-8012F840 12A02C 0154+00 1/0 0/0 0/0 .text procWolfSlip__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfSlip() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
|
|
field_0x2f99 = 5;
|
|
|
|
f32 var_f2;
|
|
if (checkWolfDashMode()) {
|
|
var_f2 = daAlinkHIO_wlMove_c0::m.field_0xA8;
|
|
} else {
|
|
var_f2 = daAlinkHIO_wlMoveNoP_c0::m.field_0x40;
|
|
}
|
|
cLib_chaseF(&mNormalSpeed, 0.0f, var_f2);
|
|
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
mNormalSpeed = 0.0f;
|
|
|
|
if (checkInputOnR()) {
|
|
procWolfSlipTurnInit(1);
|
|
} else {
|
|
current.pos.x += cM_scos(shape_angle.y) * 30.0f;
|
|
current.pos.z -= cM_ssin(shape_angle.y) * 30.0f;
|
|
|
|
field_0x2060->getOldFrameTransInfo(0)->mTranslate.x -= 30.0f;
|
|
checkNextActionWolf(0);
|
|
}
|
|
} else {
|
|
if (mNormalSpeed > 2.5f && frameCtrl_p->getFrame() >= 5.0f) {
|
|
field_0x2f9d = 0x78;
|
|
}
|
|
|
|
seStartMapInfoLevel(Z2SE_FN_WOLF_SLIP);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfSlip() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfSlip__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012F840-8012F9C0 12A180 0180+00 2/2 0/0 0/0 .text procWolfSlipTurnInit__9daAlink_cFi
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfSlipTurnInit(int param_0) {
|
|
if (!commonProcInitNotSameProc(PROC_WOLF_SLIP_TURN)) {
|
|
return 0;
|
|
}
|
|
|
|
f32 var_f31;
|
|
if (param_0) {
|
|
var_f31 = daAlinkHIO_wlMove_c0::m.field_0x14.mStartFrame;
|
|
current.angle.y = shape_angle.y + 0x8000;
|
|
|
|
if (checkWolfDashMode()) {
|
|
field_0x347c = daAlinkHIO_wlMove_c0::m.field_0xAC;
|
|
} else {
|
|
field_0x347c = daAlinkHIO_wlMoveNoP_c0::m.field_0x44;
|
|
}
|
|
} else {
|
|
var_f31 = daAlinkHIO_wlMove_c0::m.field_0xB0;
|
|
current.angle.y = field_0x2fe2;
|
|
setOldRootQuaternion(0, (shape_angle.y - current.angle.y) - 0x8000, 0);
|
|
shape_angle.y = current.angle.y + 0x8000;
|
|
field_0x347c = 10.0f;
|
|
}
|
|
|
|
setSingleAnimeWolf(WANM_TURN, daAlinkHIO_wlMove_c0::m.field_0x14.mSpeed, var_f31, 12,
|
|
daAlinkHIO_wlMove_c0::m.field_0x14.mInterpolation);
|
|
voiceStart(Z2SE_WL_V_BREATH_JUMP);
|
|
|
|
mNormalSpeed = 0.0f;
|
|
field_0x2f99 = 5;
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
field_0x3478 = 1.0f / (12.0f - var_f31);
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfSlipTurnInit(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfSlipTurnInit__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012F9C0-8012FB18 12A300 0158+00 1/0 0/0 0/0 .text procWolfSlipTurn__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfSlipTurn() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
field_0x2f99 = 5;
|
|
|
|
f32 var_f31 =
|
|
(0.5f - field_0x3478 * (frameCtrl_p->getFrame() - frameCtrl_p->getStart())) * 2.0f;
|
|
field_0x3588.x = l_wolfBaseAnime.x * var_f31;
|
|
field_0x3588.z = l_wolfBaseAnime.z * var_f31;
|
|
|
|
if (checkAnmEnd(frameCtrl_p) && mLinkAcch.ChkGroundHit()) {
|
|
return procWolfSlipTurnLandInit();
|
|
}
|
|
|
|
if (!i_checkModeFlg(2) && frameCtrl_p->getFrame() > 4.5f) {
|
|
mNormalSpeed = field_0x347c;
|
|
setJumpMode();
|
|
} else if (i_checkModeFlg(2) &&
|
|
current.pos.y < mLastJumpPos.y - daAlinkHIO_wlMove_c0::m.field_0xC0)
|
|
{
|
|
setOldRootQuaternion(0, -0x8000, 0);
|
|
shape_angle.y = current.angle.y;
|
|
field_0x2fe6 = shape_angle.y;
|
|
procWolfFallInit(2, daAlinkHIO_wlMove_c0::m.field_0xC4);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfSlipTurn() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfSlipTurn__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012FB18-8012FBB4 12A458 009C+00 1/1 0/0 0/0 .text procWolfSlipTurnLandInit__9daAlink_cFv */
|
|
int daAlink_c::procWolfSlipTurnLandInit() {
|
|
commonProcInit(PROC_WOLF_SLIP_TURN_LAND);
|
|
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
setFrameCtrl(frameCtrl, 0, 0, daAlinkHIO_wlMove_c0::m.field_0x14.mEndFrame,
|
|
daAlinkHIO_wlMove_c0::m.field_0x14.mSpeed,
|
|
frameCtrl->getFrame() + daAlinkHIO_wlMove_c0::m.field_0x14.mSpeed);
|
|
|
|
mNormalSpeed = lit_19379 * daAlinkHIO_wlMoveNoP_c0::m.field_0x8;
|
|
field_0x2f99 = 5;
|
|
setFootEffectProcType(2);
|
|
field_0x2f9d = 8;
|
|
field_0x2f98 = 0;
|
|
return 1;
|
|
}
|
|
|
|
/* 8012FBB4-8012FC38 12A4F4 0084+00 1/0 0/0 0/0 .text procWolfSlipTurnLand__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfSlipTurnLand() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
field_0x2f99 = 5;
|
|
|
|
if (frameCtrl->checkAnmEnd()) {
|
|
checkNextActionWolf(0);
|
|
} else if (frameCtrl->getFrame() > daAlinkHIO_wlMove_c0::m.field_0x14.mCheckFrame) {
|
|
checkNextActionWolf(1);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8012FC38-8012FD2C 12A578 00F4+00 2/2 0/0 0/0 .text procWolfSlideReadyInit__9daAlink_cFsi */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfSlideReadyInit(s16 i_angle, int param_1) {
|
|
commonProcInit(PROC_WOLF_SLIDE_READY);
|
|
field_0x3090 = 8;
|
|
current.angle.y = i_angle;
|
|
setSingleAnimeWolfParam(WANM_SLIDE_FORWARD_START, &daAlinkHIO_wlSlide_c0::m.field_0x0);
|
|
voiceStart(Z2SE_WL_V_SLIP_ROLL);
|
|
|
|
mNormalSpeed = 0.0f;
|
|
field_0x594 = daAlinkHIO_wlSlide_c0::m.field_0x54;
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
field_0x3478 = 1.0f / mUnderFrameCtrl[0].getEnd();
|
|
mProcVar2.field_0x300c = 0;
|
|
mProcVar3.field_0x300e.x = param_1;
|
|
field_0x814.SetWeight(0xFF);
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfSlideReadyInit(s16 param_0, int param_1) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfSlideReadyInit__9daAlink_cFsi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012FD2C-8012FE80 12A66C 0154+00 1/0 0/0 0/0 .text procWolfSlideReady__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfSlideReady() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
field_0x2f99 = 5;
|
|
|
|
f32 var_f31 = (0.5f - field_0x3478 * frameCtrl_p->getFrame()) * 2.0f;
|
|
field_0x3588.x = l_wolfBaseAnime.x * var_f31;
|
|
field_0x3588.z = l_wolfBaseAnime.z * var_f31;
|
|
|
|
cM3dGPla slide_poly;
|
|
if (getSlidePolygon(&slide_poly)) {
|
|
cLib_addCalcAngleS(¤t.angle.y, slide_poly.mNormal.atan2sX_Z(), 4, 0x1000, 0x400);
|
|
cLib_addCalcAngleS(&shape_angle.y, current.angle.y, 4, 0x1000, 0x400);
|
|
}
|
|
|
|
if (frameCtrl_p->checkPass(5.0f)) {
|
|
mProcVar2.field_0x300c = 1;
|
|
}
|
|
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
if (mProcVar3.field_0x300e.x != 0) {
|
|
procWolfSlideInit(current.angle.y, 1);
|
|
} else {
|
|
procWolfSlopeStartInit(1);
|
|
}
|
|
} else if (frameCtrl_p->checkPass(18.0f)) {
|
|
offModeFlg(0x8000);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfSlideReady() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfSlideReady__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012FE80-8012FFA4 12A7C0 0124+00 2/2 0/0 0/0 .text procWolfSlideInit__9daAlink_cFsi */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfSlideInit(s16 i_angle, int param_1) {
|
|
if (cLib_distanceAngleS(i_angle, shape_angle.y) < 0x3800 && !param_1) {
|
|
return procWolfSlideReadyInit(i_angle, 1);
|
|
}
|
|
|
|
commonProcInit(PROC_WOLF_SLIDE);
|
|
field_0x814.SetWeight(0xFF);
|
|
field_0x3090 = 8;
|
|
current.angle.y = i_angle;
|
|
setSingleAnimeWolfParam(WANM_SLIDE_BACKWARD, &daAlinkHIO_wlSlide_c0::m.field_0x14);
|
|
|
|
if (param_1) {
|
|
mUnderFrameCtrl[0].setFrame(daAlinkHIO_wlSlide_c0::m.field_0x14.mEndFrame);
|
|
getNowAnmPackUnder(UNDER_0)->setFrame(daAlinkHIO_wlSlide_c0::m.field_0x14.mEndFrame);
|
|
}
|
|
|
|
dComIfGp_setPlayerStatus1(0, 0x200);
|
|
field_0x2f9d = 0x78;
|
|
setFootEffectProcType(1);
|
|
field_0x594 = daAlinkHIO_wlSlide_c0::m.field_0x54;
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfSlideInit(s16 param_0, int param_1) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfSlideInit__9daAlink_cFsi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8012FFA4-801300D4 12A8E4 0130+00 1/0 0/0 0/0 .text procWolfSlide__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfSlide() {
|
|
cM3dGPla slide_poly;
|
|
|
|
if (getSlidePolygon(&slide_poly)) {
|
|
s16 var_r30 = slide_poly.mNormal.atan2sX_Z();
|
|
cLib_addCalcAngleS(¤t.angle.y, var_r30, 4, 0x1000, 0x400);
|
|
cLib_addCalcAngleS(&shape_angle.y, current.angle.y + 0x8000, 4, 0x1000, 0x400);
|
|
|
|
mNormalSpeed += daAlinkHIO_wlSlide_c0::m.field_0x58 *
|
|
((1.0f - slide_poly.mNormal.y) * 0.5f + 1.0f) *
|
|
cM_scos(current.angle.y - var_r30);
|
|
if (mNormalSpeed > field_0x594) {
|
|
mNormalSpeed = field_0x594;
|
|
}
|
|
|
|
field_0x2f9d = 0x78;
|
|
seStartMapInfoLevel(Z2SE_FN_WOLF_SLIP);
|
|
} else {
|
|
procWolfSlideLandInit();
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfSlide() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfSlide__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 801300D4-80130138 12AA14 0064+00 1/1 0/0 0/0 .text procWolfSlideLandInit__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfSlideLandInit() {
|
|
commonProcInit(PROC_WOLF_SLIDE_LAND);
|
|
setSingleAnimeWolfParam(WANM_SLIDE_BACKWARD_END, &daAlinkHIO_wlSlide_c0::m.field_0x28);
|
|
mNormalSpeed *= lit_5943;
|
|
field_0x814.SetWeight(0xFF);
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80130138-801301E4 12AA78 00AC+00 1/0 0/0 0/0 .text procWolfSlideLand__9daAlink_cFv */
|
|
int daAlink_c::procWolfSlideLand() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
cLib_chaseF(&mNormalSpeed, FLOAT_LABEL(lit_6108), lit_7450);
|
|
|
|
if (frameCtrl->checkAnmEnd()) {
|
|
current.angle.y = shape_angle.y;
|
|
checkNextActionWolf(0);
|
|
} else if (frameCtrl->getFrame() > daAlinkHIO_wlSlide_c0::m.field_0x28.mCheckFrame) {
|
|
s16 old_angle = current.angle.y;
|
|
current.angle.y = shape_angle.y;
|
|
|
|
if (!checkNextActionWolf(1)) {
|
|
current.angle.y = old_angle;
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 801301E4-80130268 12AB24 0084+00 3/3 0/0 0/0 .text procWolfWaitSlipInit__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfWaitSlipInit() {
|
|
if (!commonProcInitNotSameProc(PROC_WOLF_WAIT_SLIP)) {
|
|
return 0;
|
|
}
|
|
|
|
setSingleAnimeWolfBaseSpeed(WANM_ATN, daAlinkHIO_wlMove_c0::m.field_0xB8,
|
|
daAlinkHIO_wlMove_c0::m.field_0xBC);
|
|
mNormalSpeed = FLOAT_LABEL(lit_6108);
|
|
setWolfWaitSlip();
|
|
field_0x2f9d = 120;
|
|
setFootEffectProcType(1);
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80130268-80130440 12ABA8 01D8+00 1/0 0/0 0/0 .text procWolfWaitSlip__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfWaitSlip() {
|
|
f32 var_f31 = mNormalSpeed;
|
|
mNormalSpeed = 0.0f;
|
|
current.angle.y = shape_angle.y;
|
|
|
|
if (checkInputOnR() && checkWolfWaitSlipPolygon()) {
|
|
cM3dGPla tri;
|
|
dComIfG_Bgsp().GetTriPla(mLinkAcch.m_gnd, &tri);
|
|
s16 var_r30 = tri.mNormal.atan2sX_Z();
|
|
|
|
if (getGroundAngle(&mLinkAcch.m_gnd, field_0x2fe2) < -field_0x3122) {
|
|
int var_r3 = abs((s16)(var_r30 - shape_angle.y));
|
|
|
|
if (var_r3 >= 0x6000) {
|
|
return procWolfSlopeStartInit(0);
|
|
} else if (var_r3 <= 0x2000) {
|
|
return procWolfSlideReadyInit(current.angle.y, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!checkNextActionWolf(0)) {
|
|
f32 temp_f1 = setWolfWaitSlip();
|
|
mNormalSpeed = var_f31 + (daAlinkHIO_wlSlide_c0::m.field_0x74 * (temp_f1 + 1.0f));
|
|
if (mNormalSpeed > daAlinkHIO_wlSlide_c0::m.field_0x78) {
|
|
mNormalSpeed = daAlinkHIO_wlSlide_c0::m.field_0x78;
|
|
}
|
|
|
|
field_0x2f9d = 0x78;
|
|
|
|
s16 var_r4;
|
|
if (mProcVar2.field_0x300c != 0) {
|
|
var_r4 = current.angle.y + 0x8000;
|
|
} else {
|
|
var_r4 = current.angle.y;
|
|
}
|
|
|
|
cLib_addCalcAngleS(&shape_angle.y, var_r4, 4, daAlinkHIO_wlSlide_c0::m.field_0x50,
|
|
daAlinkHIO_wlSlide_c0::m.field_0x52);
|
|
seStartMapInfoLevel(Z2SE_FN_WOLF_SLIP);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfWaitSlip() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfWaitSlip__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80130440-801304D4 12AD80 0094+00 2/2 0/0 0/0 .text procWolfSlopeStartInit__9daAlink_cFi */
|
|
int daAlink_c::procWolfSlopeStartInit(int param_0) {
|
|
commonProcInit(PROC_WOLF_SLOPE_START);
|
|
setSingleAnimeWolfParam(WANM_SLIDE_W, &daAlinkHIO_wlSlide_c0::m.field_0x3C);
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
mNormalSpeed = FLOAT_LABEL(lit_6108);
|
|
current.angle.y = shape_angle.y;
|
|
|
|
if (param_0) {
|
|
field_0x2f99 = 13;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 801304D4-8013056C 12AE14 0098+00 1/0 0/0 0/0 .text procWolfSlopeStart__9daAlink_cFv */
|
|
int daAlink_c::procWolfSlopeStart() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
if (frameCtrl->checkAnmEnd()) {
|
|
checkNextActionWolf(0);
|
|
} else if (frameCtrl->getFrame() > daAlinkHIO_wlSlide_c0::m.field_0x3C.mCheckFrame) {
|
|
if (!checkNextActionWolf(1)) {
|
|
field_0x2f99 = 5;
|
|
}
|
|
} else {
|
|
field_0x2f99 = 5;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013056C-80130580 12AEAC 0014+00 1/1 0/0 0/0 .text daAlink_searchGoldWolf__FP10fopAc_ac_cPv */
|
|
static fopAc_ac_c* daAlink_searchGoldWolf(fopAc_ac_c* i_actor, void*) {
|
|
if (fopAcM_GetName(i_actor) == PROC_NPC_GWOLF) {
|
|
return i_actor;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
/* 80130580-80130654 12AEC0 00D4+00 1/1 0/0 0/0 .text daAlink_searchWolfHowl__FP10fopAc_ac_cPv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
static void* daAlink_searchWolfHowl(fopAc_ac_c* i_actor, void* i_data) {
|
|
s16 actor_name = fopAcM_GetName(i_actor);
|
|
daAlink_c* player_p = daAlink_getAlinkActorClass();
|
|
|
|
if ((actor_name == PROC_KAGO && i_dComIfGs_isEventBit(0xA10)) ||
|
|
(actor_name == PROC_E_PM &&
|
|
player_p->current.pos.abs2XZ(i_actor->current.pos) < 9000000.0f) ||
|
|
actor_name == PROC_OBJ_SEKIZOA ||
|
|
(*(fopAc_ac_c**)i_data == NULL && actor_name == player_p->getGrassHowlEventActor()))
|
|
{
|
|
*(fopAc_ac_c**)i_data = i_actor;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
static asm void* daAlink_searchWolfHowl(fopAc_ac_c* param_0, void* param_1) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/daAlink_searchWolfHowl__FP10fopAc_ac_cPv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80130654-80130700 12AF94 00AC+00 1/1 0/0 0/0 .text setWolfHowlNotHappen__9daAlink_cFi
|
|
*/
|
|
void daAlink_c::setWolfHowlNotHappen(int param_0) {
|
|
mMsgClassID = -1;
|
|
|
|
if (field_0x3198 == 0xEE) {
|
|
field_0x32cc = 0x532;
|
|
} else {
|
|
field_0x32cc = 0x535;
|
|
}
|
|
|
|
mProcVar2.field_0x300c = 0;
|
|
|
|
if (!checkUnderMove0BckNoArcWolf(WANM_HOWL_END)) {
|
|
if (param_0 != 0) {
|
|
setSingleAnimeWolfBaseSpeed(WANM_WAIT_SIT, daAlinkHIO_wlLie_c0::m.field_0x44,
|
|
daAlinkHIO_wlLie_c0::m.field_0x48);
|
|
} else {
|
|
setSingleAnimeWolfBase(WANM_SERVICE_WAIT_D);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80130700-80130BC4 12B040 04C4+00 1/1 0/0 0/0 .text procWolfHowlDemoInit__9daAlink_cFv
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfHowlDemoInit() {
|
|
if (!dComIfGp_event_compulsory(this, 0, 0xFFFF)) {
|
|
return 0;
|
|
}
|
|
|
|
mDemo.i_setSpecialDemoType();
|
|
|
|
s16 name;
|
|
if (field_0x27f4 != NULL) {
|
|
name = fopAcM_GetName(field_0x27f4);
|
|
} else {
|
|
name = PROC_ALINK;
|
|
}
|
|
|
|
if (name == PROC_Tag_WaraHowl) {
|
|
shape_angle.y = field_0x27f4->shape_angle.y;
|
|
current.angle.y = shape_angle.y;
|
|
} else {
|
|
f32 var_f31 = cM_ssin(shape_angle.y) * 200.0f;
|
|
f32 var_f30 = cM_scos(shape_angle.y) * 200.0f;
|
|
|
|
cXyz sp14;
|
|
cXyz sp8;
|
|
sp14.set(attention_info.position.x, attention_info.position.y - 50.0f,
|
|
attention_info.position.z);
|
|
sp8.set(sp14.x + var_f31, sp14.y, sp14.z + var_f30);
|
|
|
|
if (commonLineCheck(&sp14, &sp8)) {
|
|
sp8.x = sp14.x - var_f31;
|
|
sp8.z = sp14.z - var_f30;
|
|
|
|
if (!commonLineCheck(&sp14, &sp8)) {
|
|
shape_angle.y += 0x8000;
|
|
} else {
|
|
sp8.x = sp14.x + var_f30;
|
|
sp8.z = sp14.z - var_f31;
|
|
|
|
if (!commonLineCheck(&sp14, &sp8)) {
|
|
shape_angle.y += 0x4000;
|
|
} else {
|
|
sp8.x = sp14.x - var_f30;
|
|
sp8.z = sp14.z + var_f31;
|
|
|
|
if (!commonLineCheck(&sp14, &sp8)) {
|
|
shape_angle.y -= 0x4000;
|
|
}
|
|
}
|
|
}
|
|
current.angle.y = shape_angle.y;
|
|
}
|
|
}
|
|
|
|
commonProcInit(PROC_WOLF_HOWL_DEMO);
|
|
field_0x3198 = -1;
|
|
mProcVar3.field_0x300e.z = -1;
|
|
mProcVar3.field_0x300e.y = 0;
|
|
mProcVar0.field_0x3008 = -1;
|
|
|
|
if (name != PROC_ALINK) {
|
|
if (name == PROC_Obj_Yobikusa) {
|
|
daObjYobikusa_c* yobikusa_p = (daObjYobikusa_c*)field_0x27f4;
|
|
|
|
mZ2WolfHowlMgr.setCorrectCurve(yobikusa_p->getType());
|
|
mProcVar3.field_0x300e.z = yobikusa_p->getPathID();
|
|
shape_angle.y = yobikusa_p->shape_angle.y;
|
|
current.angle.y = shape_angle.y;
|
|
|
|
if (yobikusa_p->getType() == 0) {
|
|
field_0x3198 = 0x100;
|
|
} else if (yobikusa_p->getType() == 1) {
|
|
field_0x3198 = 0xEE;
|
|
}
|
|
} else if (name == PROC_TAG_HOWL) {
|
|
mZ2WolfHowlMgr.setCorrectCurve(static_cast<daTag_Howl_c*>(field_0x27f4)->getCurveID());
|
|
} else if (name == PROC_Obj_WindStone) {
|
|
mZ2WolfHowlMgr.setCorrectCurve(static_cast<daWindStone_c*>(field_0x27f4)->getTuneId());
|
|
mProcVar0.field_0x3008 = static_cast<daWindStone_c*>(field_0x27f4)->getNextSceneId();
|
|
mProcVar3.field_0x300e.y = 1;
|
|
} else if (name == PROC_Obj_SmWStone) {
|
|
mZ2WolfHowlMgr.setCorrectCurve(static_cast<daSmWStone_c*>(field_0x27f4)->getTuneId());
|
|
mProcVar3.field_0x300e.y = 1;
|
|
} else if (name == PROC_Tag_WaraHowl) {
|
|
mZ2WolfHowlMgr.setCorrectCurve(static_cast<daTagWrHowl_c*>(field_0x27f4)->getTuneId());
|
|
} else {
|
|
mZ2WolfHowlMgr.setCorrectCurve(-1);
|
|
}
|
|
} else {
|
|
mZ2WolfHowlMgr.setCorrectCurve(-1);
|
|
}
|
|
|
|
mNormalSpeed = 0.0f;
|
|
|
|
if (!checkUnderMove0BckNoArcWolf(WANM_WAIT_SIT) && !checkUnderMove0BckNoArcWolf(WANM_LISTEN) &&
|
|
!checkUnderMove0BckNoArcWolf(WANM_HOWL_SIT))
|
|
{
|
|
setSingleAnimeWolfParam(WANM_SIT, &daAlinkHIO_wlLie_c0::m.field_0x0);
|
|
field_0x347c = -1.0f;
|
|
} else {
|
|
field_0x347c = 10.0f;
|
|
|
|
if (mProcVar3.field_0x300e.y == 0) {
|
|
setSingleAnimeWolfBaseSpeed(WANM_WAIT_SIT, daAlinkHIO_wlLie_c0::m.field_0x44,
|
|
daAlinkHIO_wlLie_c0::m.field_0x48);
|
|
} else {
|
|
setSingleAnimeWolfBase(WANM_LISTEN);
|
|
setFaceBasicTexture(FTANM_UNK_A2);
|
|
}
|
|
}
|
|
|
|
dCam_getBody()->StartEventCamera(12, fopAcM_GetID(this), 0);
|
|
mProcVar1.field_0x300a = 0;
|
|
mMsgClassID = -1;
|
|
field_0x32cc = 0x5DD;
|
|
mProcVar2.field_0x300c = 0;
|
|
mProcVar3.field_0x300e.x = -1;
|
|
mDoAud_taktModeMute();
|
|
|
|
if (checkStageName("F_SP200")) {
|
|
fopAc_ac_c* gwolf_p =
|
|
(fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchGoldWolf, NULL);
|
|
field_0x280c.setData(gwolf_p);
|
|
} else {
|
|
field_0x280c.clearData();
|
|
}
|
|
|
|
dComIfGp_setPlayerStatus1(0, 0x4000000);
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfHowlDemoInit() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfHowlDemoInit__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80130BC4-801312C8 12B504 0704+00 1/0 0/0 0/0 .text procWolfHowlDemo__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfHowlDemo() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
daNpc_GWolf_c* gwolf_p = (daNpc_GWolf_c*)field_0x280c.getActor();
|
|
|
|
BOOL skip_edge = i_dComIfGp_getEvent().i_checkSkipEdge();
|
|
if (skip_edge) {
|
|
mZ2WolfHowlMgr.skipCorrectDemo();
|
|
}
|
|
|
|
if (checkEndMessage(field_0x32cc) ||
|
|
(skip_edge && (field_0x32cc == 0x535 || field_0x32cc == 0x532)))
|
|
{
|
|
if (mProcVar2.field_0x300c == 0) {
|
|
resetSpecialEvent();
|
|
field_0x30b2 = 0;
|
|
field_0x30b0 = 0;
|
|
mDoAud_taktModeMuteOff();
|
|
return 1;
|
|
}
|
|
} else if (field_0x32cc == 0x535 || field_0x32cc == 0x532) {
|
|
if (checkUnderMove0BckNoArcWolf(WANM_HOWL_END) && checkAnmEnd(frameCtrl_p)) {
|
|
setSingleAnimeWolfBase(WANM_SERVICE_WAIT_D);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
if (field_0x347c < 0.0f) {
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
if (mProcVar3.field_0x300e.y != 0) {
|
|
setSingleAnimeWolfBase(WANM_LISTEN);
|
|
setFaceBasicTexture(FTANM_UNK_A2);
|
|
} else {
|
|
setSingleAnimeWolfBaseSpeed(WANM_WAIT_SIT, daAlinkHIO_wlLie_c0::m.field_0x44,
|
|
daAlinkHIO_wlLie_c0::m.field_0x48);
|
|
}
|
|
|
|
field_0x347c = 1.0f;
|
|
}
|
|
} else if (field_0x347c > 1.5f) {
|
|
field_0x347c -= 1.0f;
|
|
} else {
|
|
bool var_r26 = mDoCPd_c::getHoldA(PAD_1) != false;
|
|
if (mProcVar3.field_0x300e.y != 0 && mProcVar2.field_0x300c != 0) {
|
|
var_r26 = false;
|
|
}
|
|
|
|
if (checkUnderMove0BckNoArcWolf(WANM_HOWL_SUCCESS)) {
|
|
if (gwolf_p == NULL) {
|
|
i_dComIfGp_getEvent().i_startCheckSkipEdge(this);
|
|
}
|
|
} else if (checkUnderMove0BckNoArcWolf(WANM_HOWL_END)) {
|
|
if (gwolf_p == NULL) {
|
|
i_dComIfGp_getEvent().i_startCheckSkipEdge(this);
|
|
}
|
|
} else if ((var_r26 || mZ2WolfHowlMgr.getTimer() != 0) &&
|
|
mZ2WolfHowlMgr.getReleaseTimer() != 30)
|
|
{
|
|
if (!checkUnderMove0BckNoArcWolf(WANM_HOWL_SIT) || mProcVar1.field_0x300a == 0) {
|
|
mProcVar1.field_0x300a = 1;
|
|
setSingleAnimeWolfParam(WANM_HOWL_SIT, &daAlinkHIO_wlHowl_c0::m.field_0x14);
|
|
} else {
|
|
if (frameCtrl_p->getFrame() > 56.0f) {
|
|
frameCtrl_p->setFrame((frameCtrl_p->getFrame() - 56.0f) + 38.0f);
|
|
}
|
|
|
|
if (frameCtrl_p->getFrame() >= 38.0f && frameCtrl_p->getFrame() <= 56.0f) {
|
|
i_onResetFlg0(RFLG0_UNK_40000000);
|
|
}
|
|
}
|
|
} else {
|
|
if (mZ2WolfHowlMgr.getReleaseTimer() == 30) {
|
|
frameCtrl_p->setFrame(56.0f);
|
|
field_0x2060->initOldFrameMorf(3.0f, 0, 40);
|
|
}
|
|
|
|
mProcVar1.field_0x300a = 0;
|
|
|
|
if (dMsgObject_isHowlHearingMode() &&
|
|
(checkAnmEnd(frameCtrl_p) || checkUnderMove0BckNoArcWolf(WANM_WAIT_SIT)))
|
|
{
|
|
setSingleAnimeWolfBase(WANM_LISTEN);
|
|
setFaceBasicTexture(FTANM_UNK_A2);
|
|
} else if (checkAnmEnd(frameCtrl_p)) {
|
|
setSingleAnimeWolfBaseSpeed(WANM_WAIT_SIT, daAlinkHIO_wlLie_c0::m.field_0x44,
|
|
daAlinkHIO_wlLie_c0::m.field_0x48);
|
|
}
|
|
}
|
|
|
|
s16 var_r25 = mProcVar3.field_0x300e.x;
|
|
f32 stick_y = mDoCPd_c::getStickY(PAD_1);
|
|
mProcVar3.field_0x300e.x = mZ2WolfHowlMgr.startWolfHowlSound(0.0f, stick_y, var_r26, 0.0f);
|
|
s16 var_r26_2 = 0;
|
|
|
|
if (mProcVar3.field_0x300e.x == -1 || skip_edge) {
|
|
if (checkUnderMove0BckNoArcWolf(WANM_HOWL_END) || skip_edge) {
|
|
if (checkAnmEnd(frameCtrl_p) || skip_edge) {
|
|
if (mProcVar0.mHowlExitID >= 0) {
|
|
dStage_changeScene(mProcVar0.mHowlExitID, 0.0f, 0, fopAcM_GetRoomNo(this),
|
|
shape_angle.y, -1);
|
|
} else {
|
|
fopAc_ac_c* actor_p = NULL;
|
|
if (gwolf_p == NULL) {
|
|
fopAcIt_Executor((fopAcIt_ExecutorFunc)daAlink_searchWolfHowl,
|
|
&actor_p);
|
|
} else {
|
|
actor_p = gwolf_p;
|
|
}
|
|
|
|
field_0x30b2 = 0;
|
|
field_0x30b0 = 0;
|
|
|
|
if (actor_p != NULL) {
|
|
fopAcM_OnStatus(actor_p, 0x800);
|
|
|
|
if (fopAcM_GetName(actor_p) == PROC_KAGO) {
|
|
static_cast<daKago_c*>(actor_p)->setEvent();
|
|
static_cast<daKago_c*>(actor_p)->setKagoPath(
|
|
mProcVar3.field_0x300e.z);
|
|
} else if (fopAcM_GetName(actor_p) == PROC_OBJ_SEKIZOA) {
|
|
static_cast<daObj_Sekizoa_c*>(actor_p)->setWolfHowling();
|
|
} else if (fopAcM_GetName(actor_p) == PROC_E_PM) {
|
|
static_cast<daE_PM_c*>(actor_p)->AppearSet();
|
|
} else if (fopAcM_GetName(actor_p) == PROC_HORSE) {
|
|
int ret = static_cast<daHorse_c*>(actor_p)->callHorse(¤t.pos);
|
|
|
|
if (ret == 1 || ret == 2) {
|
|
mDoAud_taktModeMuteOff();
|
|
return procCoHorseCallWaitInit(ret);
|
|
}
|
|
|
|
if (ret != 3) {
|
|
setWolfHowlNotHappen(skip_edge);
|
|
return 1;
|
|
}
|
|
} else if (fopAcM_GetName(actor_p) == PROC_NPC_TK) {
|
|
static_cast<daNPC_TK_c*>(actor_p)->setEventWolf();
|
|
static_cast<daNPC_TK_c*>(actor_p)->setHawkPath(
|
|
mProcVar3.field_0x300e.z);
|
|
}
|
|
} else if (mProcVar3.field_0x300e.y == 0) {
|
|
setWolfHowlNotHappen(skip_edge);
|
|
return 1;
|
|
}
|
|
|
|
if (gwolf_p == NULL) {
|
|
resetSpecialEvent();
|
|
} else {
|
|
endDemoMode();
|
|
}
|
|
|
|
mDoAud_taktModeMuteOff();
|
|
}
|
|
|
|
procWolfServiceWaitInit(2);
|
|
return 1;
|
|
}
|
|
} else if (var_r25 != -1) {
|
|
setSingleAnimeWolfBase(WANM_HOWL_END);
|
|
if (gwolf_p != NULL) {
|
|
gwolf_p->setHowlingEndFlag();
|
|
}
|
|
} else {
|
|
var_r26_2 = (s16)(stick_y * -6144.0f);
|
|
}
|
|
} else if (mProcVar2.field_0x300c == 0) {
|
|
mProcVar2.field_0x300c = 1;
|
|
dMsgObject_onMsgSend();
|
|
setSingleAnimeWolfBase(WANM_HOWL_SUCCESS);
|
|
mUnderFrameCtrl[0].setLoop(27);
|
|
mUnderFrameCtrl[0].setAttribute(2);
|
|
setFaceBasicTexture(FTANM_UNK_A1);
|
|
|
|
if (gwolf_p != NULL) {
|
|
fopAcM_OnStatus(gwolf_p, 0x800);
|
|
gwolf_p->setHowlingFlag();
|
|
i_dComIfGp_event_reset();
|
|
|
|
dCam_getBody()->EndEventCamera(fopAcM_GetID(this));
|
|
} else {
|
|
i_dComIfGp_getEvent().i_startCheckSkipEdge(this);
|
|
}
|
|
}
|
|
|
|
cLib_addCalcAngleS(&field_0x30b2, var_r26_2, 5, 0x800, 0x100);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfHowlDemo() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfHowlDemo__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 801312C8-80131408 12BC08 0140+00 1/1 0/0 0/0 .text setWolfHowling__15daObj_Sekizoa_cFv
|
|
*/
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daObj_Sekizoa_c::setWolfHowling() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setWolfHowling__15daObj_Sekizoa_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80131408-80131450 12BD48 0048+00 1/0 0/0 0/0 .text checkWolfRope__9daAlink_cFv */
|
|
BOOL daAlink_c::checkWolfRope() {
|
|
return i_checkModeFlg(0x20000) && field_0x280c.getActor() != NULL &&
|
|
fopAcM_GetName(field_0x280c.getActor()) == PROC_Obj_Crope;
|
|
}
|
|
|
|
/* 80131450-80131628 12BD90 01D8+00 2/2 0/0 0/0 .text
|
|
* checkWolfRopeHit__9daAlink_cCFP12dCcD_GObjInfPC4cXyzi */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
fopAc_ac_c* daAlink_c::checkWolfRopeHit(dCcD_GObjInf* i_collider, cXyz const* param_1,
|
|
int param_2) const {
|
|
daObjCrope_c* rope_p = (daObjCrope_c*)i_collider->GetCoHitAc();
|
|
|
|
if (i_collider->ChkCoHit() && rope_p != NULL && fopAcM_GetName(rope_p) == PROC_Obj_Crope) {
|
|
if (param_2) {
|
|
if (rope_p->getRopeStartPos()->abs2XZ(*param_1) > 10000.0f) {
|
|
if (rope_p->getRopeEndPos()->abs2XZ(*param_1) > 10000.0f) {
|
|
return rope_p;
|
|
}
|
|
}
|
|
} else if (checkInputOnR()) {
|
|
mDoMtx_stack_c::YrotS(-rope_p->shape_angle.y);
|
|
mDoMtx_stack_c::transM(-rope_p->getRopeStartPos()->x, -rope_p->getRopeStartPos()->y,
|
|
-rope_p->getRopeStartPos()->z);
|
|
|
|
cXyz sp44;
|
|
cXyz sp38;
|
|
mDoMtx_stack_c::multVec(param_1, &sp44);
|
|
mDoMtx_stack_c::multVec(rope_p->getRopeEndPos(), &sp38);
|
|
|
|
if (fabsf(sp44.x) < 40.0f && (sp44.z > -10.0f || sp44.z - sp38.z < 10.0f)) {
|
|
return rope_p;
|
|
}
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm fopAc_ac_c* daAlink_c::checkWolfRopeHit(dCcD_GObjInf* param_0, cXyz const* param_1,
|
|
int param_2) const {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/checkWolfRopeHit__9daAlink_cCFP12dCcD_GObjInfPC4cXyzi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80131628-801316A4 12BF68 007C+00 2/2 0/0 0/0 .text checkWolfRopeJumpHang__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::checkWolfRopeJumpHang() {
|
|
fopAc_ac_c* hit_actor = checkWolfRopeHit(&field_0x850[0], ¤t.pos, TRUE);
|
|
if (hit_actor == NULL) {
|
|
hit_actor = checkWolfRopeHit(&field_0xFB8, ¤t.pos, TRUE);
|
|
}
|
|
|
|
if (hit_actor != NULL) {
|
|
field_0x280c.setData(hit_actor);
|
|
return procWolfRopeHangInit(4);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* 801316A4-80131718 12BFE4 0074+00 1/1 0/0 0/0 .text getWolfRopeMoveSpeed__9daAlink_cFv
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
f32 daAlink_c::getWolfRopeMoveSpeed() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
f32 frame = frameCtrl->getFrame();
|
|
|
|
if (frame >= 13.5f) {
|
|
frame -= 13.5f;
|
|
}
|
|
|
|
return daAlinkHIO_wlRope_c0::m.field_0x24 * frameCtrl->getRate() * cM_fsin(0.2327106f * frame);
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm f32 daAlink_c::getWolfRopeMoveSpeed() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/getWolfRopeMoveSpeed__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80131718-801319F0 12C058 02D8+00 6/6 0/0 0/0 .text setWolfRopePosY__9daAlink_cFv */
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::setWolfRopePosY() {
|
|
daObjCrope_c* temp_r3 = (daObjCrope_c*)field_0x280c.getActor();
|
|
cXyz* temp_r28 = temp_r3->getRopeStartPos();
|
|
cXyz* temp_r27 = temp_r3->getRopeEndPos();
|
|
cXyz* temp_r26 = temp_r3->getRopeVec();
|
|
f32 temp_f30 = temp_r3->getStartRate(¤t.pos);
|
|
|
|
if (mProcID == PROC_WOLF_ROPE_MOVE && (temp_r3->getStartRate(&mLeftHandPos) < 0.0f ||
|
|
temp_r3->getStartRate(&mLeftHandPos) > 1.0f ||
|
|
temp_r3->getStartRate(&mRightHandPos) < 0.0f ||
|
|
temp_r3->getStartRate(&mRightHandPos) > 1.0f ||
|
|
temp_r3->getStartRate(&mLeftFootPos) < 0.0f ||
|
|
temp_r3->getStartRate(&mLeftFootPos) > 1.0f ||
|
|
temp_r3->getStartRate(&mRightFootPos) < 0.0f ||
|
|
temp_r3->getStartRate(&mRightFootPos) > 1.0f))
|
|
{
|
|
if (temp_r28->abs2XZ(current.pos) > temp_r27->abs2XZ(current.pos)) {
|
|
current.pos.y = temp_r27->y;
|
|
} else {
|
|
current.pos.y = temp_r28->y;
|
|
}
|
|
temp_r3->onOutFlg();
|
|
return 1;
|
|
} else {
|
|
if (temp_f30 < 0.0f) {
|
|
current.pos.y = temp_r28->y;
|
|
} else if (temp_f30 > 1.0f) {
|
|
current.pos.y = temp_r27->y;
|
|
} else {
|
|
current.pos.y = ((temp_r28->y + (temp_f30 * temp_r26->y)) - 40.0f) -
|
|
(10.0f * cM_fsin(M_PI * temp_f30));
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::setWolfRopePosY() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setWolfRopePosY__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 801319F0-80131A6C 12C330 007C+00 5/5 0/0 0/0 .text initWolfRopeShapeAngle__9daAlink_cFv */
|
|
s16 daAlink_c::initWolfRopeShapeAngle() {
|
|
fopAc_ac_c* actor = field_0x280c.getActor();
|
|
int a = abs((s16)(actor->shape_angle.y - shape_angle.y));
|
|
|
|
s16 angle;
|
|
if (a < 0x4000) {
|
|
shape_angle.y = actor->shape_angle.y;
|
|
angle = actor->shape_angle.x;
|
|
} else {
|
|
shape_angle.y = actor->shape_angle.y - -0x8000;
|
|
angle = -actor->shape_angle.x;
|
|
}
|
|
|
|
return angle;
|
|
}
|
|
|
|
/* 80131A6C-80131AFC 12C3AC 0090+00 5/5 0/0 0/0 .text wolfRopeSwingInc__9daAlink_cFf */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
void daAlink_c::wolfRopeSwingInc(f32 param_0) {
|
|
field_0x3478 += param_0;
|
|
|
|
u32 var_r6 = (u32)((field_0x3478 * 127.0f) / 100.0f);
|
|
if (var_r6 > 127) {
|
|
var_r6 = 127;
|
|
}
|
|
|
|
mDoAud_seStart(Z2SE_FN_ROPE_CREAK_ADD, ¤t.pos, var_r6, mVoiceReverbIntensity);
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::wolfRopeSwingInc(f32 param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/wolfRopeSwingInc__9daAlink_cFf.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80131AFC-80131C00 12C43C 0104+00 8/8 0/0 0/0 .text setWolfRopeOffsetY__9daAlink_cFi */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
void daAlink_c::setWolfRopeOffsetY(int param_0) {
|
|
if (param_0) {
|
|
field_0x3478 = 0.0f;
|
|
field_0x2b98 = 0.0f;
|
|
mProcVar0.field_0x3008 = 0;
|
|
} else {
|
|
if (field_0x3478 > 100.0f) {
|
|
field_0x3478 = 100.0f;
|
|
}
|
|
|
|
cLib_addCalc(&field_0x3478, 2.0f, 0.05f, 1.0f, 0.05f);
|
|
field_0x2b98 = field_0x3478 * (cM_scos(mProcVar0.field_0x3008) - 1.0f) * 0.5f;
|
|
|
|
f32 var_f3 = field_0x3478 - 2.0f;
|
|
if (var_f3 > 2.0f) {
|
|
var_f3 = 2.0f;
|
|
}
|
|
|
|
mProcVar0.field_0x3008 += var_f3 * (f32)0x600 + (f32)0xC00;
|
|
}
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::setWolfRopeOffsetY(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setWolfRopeOffsetY__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80131C00-80131C74 12C540 0074+00 2/2 0/0 0/0 .text getDirectionRopeMove__9daAlink_cCFv
|
|
*/
|
|
int daAlink_c::getDirectionRopeMove() const {
|
|
s16 angle = field_0x2fe2 - shape_angle.y;
|
|
|
|
if (abs(angle) > 0x5000) {
|
|
return DIR_BACKWARD;
|
|
}
|
|
|
|
if (angle >= 0x3000) {
|
|
return DIR_LEFT;
|
|
}
|
|
|
|
if (angle <= -0x3000) {
|
|
return DIR_RIGHT;
|
|
}
|
|
|
|
return DIR_FORWARD;
|
|
}
|
|
|
|
/* 80131C74-80131DA0 12C5B4 012C+00 5/5 0/0 0/0 .text procWolfRopeMoveInit__9daAlink_cFii
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfRopeMoveInit(int param_0, int param_1) {
|
|
daObjCrope_c* rope_p = (daObjCrope_c*)field_0x280c.getActor();
|
|
commonProcInit(PROC_WOLF_ROPE_MOVE);
|
|
mProcVar2.field_0x300c = initWolfRopeShapeAngle();
|
|
current.angle.y = shape_angle.y;
|
|
|
|
setSingleAnimeWolfBaseSpeed(WANM_ROPE_WALK, 0.0f, daAlinkHIO_wlRope_c0::m.field_0x20);
|
|
if (param_0) {
|
|
mUnderFrameCtrl[0].setFrame(13.5f);
|
|
getNowAnmPackUnder(UNDER_0)->setFrame(13.5f);
|
|
}
|
|
|
|
setSpecialGravity(0.0f, maxFallSpeed, 0);
|
|
speed.y = 0.0f;
|
|
|
|
if (param_1) {
|
|
current.pos = rope_p->getPlayerNearPos();
|
|
field_0x3478 = 0.0f;
|
|
mProcVar0.field_0x3008 = 0;
|
|
}
|
|
|
|
setWolfRopeOffsetY(setWolfRopePosY());
|
|
if (checkWolfGrabAnime()) {
|
|
field_0x30a0 = -0x1800;
|
|
}
|
|
|
|
mProcVar3.field_0x300e.x = 0;
|
|
initServiceWaitTime();
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfRopeMoveInit(int param_0, int param_1) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfRopeMoveInit__9daAlink_cFii.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80131DA0-80132738 12C6E0 0998+00 1/0 0/0 0/0 .text procWolfRopeMove__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfRopeMove() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfRopeMove__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80132738-80132914 12D078 01DC+00 5/5 0/0 0/0 .text procWolfRopeHangInit__9daAlink_cFi
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfRopeHangInit(int param_0) {
|
|
daObjCrope_c* rope_p = (daObjCrope_c*)field_0x280c.getActor();
|
|
commonProcInit(PROC_WOLF_ROPE_HANG);
|
|
|
|
if (param_0 != 4) {
|
|
mProcVar3.field_0x300e.x = 0;
|
|
setSingleAnimeWolf(WANM_HANG, daAlinkHIO_wlRope_c0::m.field_0x28, 0.0f, 16,
|
|
daAlinkHIO_wlRope_c0::m.field_0x2C);
|
|
rope_p->rideKeep();
|
|
} else {
|
|
mProcVar3.field_0x300e.x = 1;
|
|
|
|
daAlink_WANM climb_anm;
|
|
s16 temp_r0 = shape_angle.y - rope_p->shape_angle.y;
|
|
if ((temp_r0 >= 0 && temp_r0 < 0x4000) || temp_r0 <= -0x4000) {
|
|
param_0 = 3;
|
|
climb_anm = WANM_ROPE_CLIMB_RIGHT;
|
|
} else {
|
|
param_0 = 2;
|
|
climb_anm = WANM_ROPE_CLIMB_LEFT;
|
|
}
|
|
|
|
setSingleAnimeWolfBaseSpeed(climb_anm, daAlinkHIO_wlRope_c0::m.field_0x28,
|
|
daAlinkHIO_wlRope_c0::m.field_0x30);
|
|
rope_p->setFrontJoint(19);
|
|
rope_p->setBackJoint(23);
|
|
current.pos = rope_p->getPlayerNearPos();
|
|
|
|
field_0x2f99 = 0;
|
|
dComIfGp_getVibration().StartShock(2, 15, cXyz(0.0f, 1.0f, 0.0f));
|
|
}
|
|
|
|
field_0x3198 = param_0;
|
|
mProcVar3.field_0x300e.y = initWolfRopeShapeAngle();
|
|
mProcVar2.field_0x300c = 0;
|
|
|
|
if (param_0 == 2) {
|
|
shape_angle.y -= 0x4000;
|
|
mProcVar3.field_0x300e.y = -mProcVar3.field_0x300e.y;
|
|
} else {
|
|
shape_angle.y += 0x4000;
|
|
}
|
|
|
|
wolfRopeSwingInc(50.0f);
|
|
mProcVar0.field_0x3008 = 0;
|
|
setWolfRopePosY();
|
|
setWolfRopeOffsetY(0);
|
|
setSpecialGravity(0.0f, maxFallSpeed, 0);
|
|
speed.y = 0.0f;
|
|
mNormalSpeed = 0.0f;
|
|
shape_angle.x = 0;
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfRopeHangInit(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfRopeHangInit__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80132914-80132D68 12D254 0454+00 1/0 0/0 0/0 .text procWolfRopeHang__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfRopeHang() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfRopeHang__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80132D68-80132E88 12D6A8 0120+00 1/1 0/0 0/0 .text procWolfRopeTurnInit__9daAlink_cFv
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfRopeTurnInit() {
|
|
commonProcInit(PROC_WOLF_ROPE_TURN);
|
|
setSingleAnimeWolfParam(WANM_ROPE_TURN, &daAlinkHIO_wlRope_c0::m.field_0x0);
|
|
voiceStart(Z2SE_WL_V_BREATH_JUMP);
|
|
setSpecialGravity(0.0f, maxFallSpeed, 0);
|
|
speed.y = 0.0f;
|
|
mNormalSpeed = 0.0f;
|
|
|
|
mProcVar3.field_0x300e.x = initWolfRopeShapeAngle();
|
|
current.angle.y = shape_angle.y + 0x8000;
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
shape_angle.x = 0;
|
|
field_0x37c8 = current.pos;
|
|
mProcVar2.field_0x300c = 0;
|
|
field_0x347c = 1.0f / mUnderFrameCtrl[0].getEnd();
|
|
static_cast<daObjCrope_c*>(field_0x280c.getActor())->rideKeep();
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfRopeTurnInit() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfRopeTurnInit__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80132E88-80133054 12D7C8 01CC+00 1/0 0/0 0/0 .text procWolfRopeTurn__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfRopeTurn() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfRopeTurn__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80133054-80133164 12D994 0110+00 1/1 0/0 0/0 .text procWolfRopeStaggerInit__9daAlink_cFi */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfRopeStaggerInit(int param_0) {
|
|
commonProcInit(PROC_WOLF_ROPE_STAGGER);
|
|
|
|
if (param_0 == 4) {
|
|
setSingleAnimeWolfBase(WANM_ROPE_WAIT);
|
|
mNormalSpeed = 0.0f;
|
|
mProcVar3.field_0x300e.x = 1;
|
|
} else {
|
|
setSingleAnimeWolfBase(WANM_ROPE_FALTER);
|
|
field_0x3588 = l_wolfRopeBaseAnime;
|
|
mProcVar3.field_0x300e.x = 0;
|
|
}
|
|
|
|
mProcVar3.field_0x300e.y = param_0;
|
|
mProcVar2.field_0x300c = initWolfRopeShapeAngle();
|
|
setSpecialGravity(0.0f, maxFallSpeed, 0);
|
|
speed.y = 0.0f;
|
|
current.angle.y = shape_angle.y;
|
|
|
|
if (checkWolfGrabAnime()) {
|
|
field_0x30a0 = -0x1800;
|
|
}
|
|
|
|
daObjCrope_c* rope_p = (daObjCrope_c*)field_0x280c.getActor();
|
|
rope_p->setFrontJoint(19);
|
|
rope_p->setBackJoint(31);
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfRopeStaggerInit(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfRopeStaggerInit__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80133164-8013384C 12DAA4 06E8+00 1/0 0/0 0/0 .text procWolfRopeStagger__9daAlink_cFv
|
|
*/
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfRopeStagger() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfRopeStagger__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 8013384C-80133930 12E18C 00E4+00 1/1 0/0 0/0 .text procWolfRopeSubjectivityInit__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfRopeSubjectivityInit() {
|
|
commonProcInit(PROC_WOLF_ROPE_SUBJECTIVITY);
|
|
|
|
if (!checkUnderMove0BckNoArcWolf(WANM_ROPE_WALK)) {
|
|
setSingleAnimeWolfBaseSpeed(WANM_ROPE_WALK, FLOAT_LABEL(lit_6108),
|
|
daAlinkHIO_wlRope_c0::m.field_0x20);
|
|
}
|
|
|
|
mProcVar2.field_0x300c = initWolfRopeShapeAngle();
|
|
current.angle.y = shape_angle.y;
|
|
|
|
setSpecialGravity(FLOAT_LABEL(lit_6108), maxFallSpeed, 0);
|
|
|
|
f32 tmp_0 = FLOAT_LABEL(lit_6108);
|
|
speed.y = tmp_0;
|
|
mNormalSpeed = tmp_0;
|
|
|
|
setWolfRopeOffsetY(setWolfRopePosY());
|
|
|
|
if (checkWolfGrabAnime()) {
|
|
field_0x30a0 = -0x1800;
|
|
}
|
|
|
|
setSubjectMode();
|
|
return 1;
|
|
}
|
|
|
|
/* 80133930-80133D6C 12E270 043C+00 1/0 0/0 0/0 .text procWolfRopeSubjectivity__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfRopeSubjectivity() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfRopeSubjectivity__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80133D6C-80133EF0 12E6AC 0184+00 0/0 0/0 1/1 .text getWolfTagJumpTime__9daAlink_cCFv
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::getWolfTagJumpTime() const {
|
|
int time;
|
|
if (mProcID == PROC_WOLF_TAG_JUMP) {
|
|
time = mProcVar0.field_0x3008 + (int)((daAlinkHIO_wlPoint_c0::m.field_0x28.mCheckFrame -
|
|
daAlinkHIO_wlPoint_c0::m.field_0x28.mStartFrame) /
|
|
daAlinkHIO_wlPoint_c0::m.field_0x28.mSpeed);
|
|
} else {
|
|
time = (int)(checkMidnaLockJumpPoint()->abs(current.pos) /
|
|
daAlinkHIO_wlPoint_c0::m.field_0x68);
|
|
}
|
|
|
|
time -= 2;
|
|
if (time < 1) {
|
|
time = 1;
|
|
}
|
|
|
|
return time;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::getWolfTagJumpTime() const {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/getWolfTagJumpTime__9daAlink_cCFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80133EF0-80134000 12E830 0110+00 3/3 1/1 1/1 .text checkMidnaLockJumpPoint__9daAlink_cCFv */
|
|
const cXyz* daAlink_c::checkMidnaLockJumpPoint() const {
|
|
if ((!mLinkAcch.i_ChkGroundHit() && mProcID != PROC_WOLF_TAG_JUMP) || checkMidnaUseAbility() ||
|
|
getMidnaActor()->eventInfo.checkCommandTalk())
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
daPy_py_c* player_p = daPy_getLinkPlayerActorClass();
|
|
fopAc_ac_c* partner_p = fopAcM_getTalkEventPartner(player_p);
|
|
fopAc_ac_c* wljump_p = NULL;
|
|
|
|
if (checkWolfTagLockJumpReady()) {
|
|
return &field_0x3738;
|
|
}
|
|
|
|
if (mProcID == PROC_WOLF_TAG_JUMP && field_0x280c.getActorConst() != NULL) {
|
|
wljump_p = field_0x280c.getActorConst();
|
|
} else if (field_0x27f4 != NULL && fopAcM_GetName(field_0x27f4) == PROC_Tag_Wljump) {
|
|
wljump_p = field_0x27f4;
|
|
} else if (partner_p != NULL && fopAcM_GetName(partner_p) == PROC_Tag_Wljump) {
|
|
wljump_p = partner_p;
|
|
}
|
|
|
|
if (wljump_p != NULL) {
|
|
return static_cast<daTagWljump_c*>(wljump_p)->getLockPos();
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
/* 80134000-80134838 12E940 0838+00 4/4 0/0 0/0 .text
|
|
* procWolfTagJumpInit__9daAlink_cFP10fopAc_ac_c */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfTagJumpInit(fopAc_ac_c* param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfTagJumpInit__9daAlink_cFP10fopAc_ac_c.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80134838-80134DB8 12F178 0580+00 1/0 0/0 0/0 .text procWolfTagJump__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfTagJump() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfTagJump__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80134DB8-80134EBC 12F6F8 0104+00 1/1 0/0 0/0 .text
|
|
* procWolfTagJumpLandInit__9daAlink_cFP10fopAc_ac_c */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfTagJumpLandInit(fopAc_ac_c* param_0) {
|
|
commonProcInit(PROC_WOLF_TAG_JUMP_LAND);
|
|
setSingleAnimeWolfParam(WANM_ATTACK_A_END_FRONT, &daAlinkHIO_wlPoint_c0::m.field_0x3C);
|
|
|
|
if (field_0x2fa8 == 8) {
|
|
mNormalSpeed = daAlinkHIO_wlPoint_c0::m.field_0x6C;
|
|
} else {
|
|
mNormalSpeed = 0.0f;
|
|
}
|
|
|
|
speed.y = 0.0f;
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
|
|
if (param_0 != NULL) {
|
|
field_0x280c.setData(param_0);
|
|
}
|
|
|
|
field_0x2f9d = 0x78;
|
|
setFootEffectProcType(1);
|
|
field_0x2f99 = 12;
|
|
|
|
dComIfGp_getVibration().StartShock(2, 15, cXyz(0.0f, 1.0f, 0.0f));
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfTagJumpLandInit(fopAc_ac_c* param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfTagJumpLandInit__9daAlink_cFP10fopAc_ac_c.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80134EBC-80135050 12F7FC 0194+00 1/0 0/0 0/0 .text procWolfTagJumpLand__9daAlink_cFv
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfTagJumpLand() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
|
|
daTagWljump_c* wljump_p = (daTagWljump_c*)field_0x280c.getActor();
|
|
if (wljump_p != NULL && wljump_p->getLockPos() != NULL) {
|
|
i_onResetFlg0(RFLG0_UNK_20000);
|
|
field_0x3738 = *wljump_p->getLockPos();
|
|
|
|
if (frameCtrl_p->getFrame() > daAlinkHIO_wlPoint_c0::m.field_0x3C.mCheckFrame) {
|
|
setDoStatus(0x93);
|
|
|
|
if (doTrigger()) {
|
|
return procWolfTagJumpInit(field_0x280c.getActor());
|
|
}
|
|
}
|
|
}
|
|
|
|
field_0x2f99 = 4;
|
|
if (cLib_addCalc(&mNormalSpeed, 0.0f, daAlinkHIO_wlPoint_c0::m.field_0x70,
|
|
daAlinkHIO_wlPoint_c0::m.field_0x74,
|
|
daAlinkHIO_wlPoint_c0::m.field_0x78) < 3.0f)
|
|
{
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
checkNextActionWolf(0);
|
|
} else if (!(frameCtrl_p->getFrame() > daAlinkHIO_wlPoint_c0::m.field_0x3C.mCheckFrame) ||
|
|
!checkNextActionWolf(1))
|
|
{
|
|
field_0x2f9d = 0x78;
|
|
seStartMapInfoLevel(Z2SE_FN_WOLF_SLIP);
|
|
}
|
|
} else {
|
|
field_0x2f9d = 0x78;
|
|
seStartMapInfoLevel(Z2SE_FN_WOLF_SLIP);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfTagJumpLand() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfTagJumpLand__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80135050-801350A4 12F990 0054+00 1/1 0/0 0/0 .text daAlink_searchGiant__FP10fopAc_ac_cPv */
|
|
static fopAc_ac_c* daAlink_searchGiant(fopAc_ac_c* i_actor, void* i_data) {
|
|
cXyz* gnd_chk_pos = static_cast<cXyz*>(i_data);
|
|
|
|
if (fopAcM_GetName(i_actor) == PROC_OBJ_SEKIZOA &&
|
|
i_actor->current.pos.abs2(*gnd_chk_pos) < lit_49124)
|
|
{
|
|
return i_actor;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
/* 801350A4-80135160 12F9E4 00BC+00 1/1 0/0 0/0 .text daAlink_searchGiantTalk__FP10fopAc_ac_cPv */
|
|
static void* daAlink_searchGiantTalk(fopAc_ac_c* i_actor, void* i_data) {
|
|
if (fopAcM_GetName(i_actor) == PROC_OBJ_SEKIZOA &&
|
|
static_cast<daObj_Sekizoa_c*>(i_actor)->getType() == 0)
|
|
{
|
|
return i_actor;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
/* 80135160-801351F8 12FAA0 0098+00 1/1 0/0 0/0 .text procWolfGiantPuzzleInit__9daAlink_cFv */
|
|
int daAlink_c::procWolfGiantPuzzleInit() {
|
|
if (!commonProcInitNotSameProc(PROC_WOLF_GIANT_PUZZLE)) {
|
|
return 0;
|
|
}
|
|
|
|
setBlendWolfMoveAnime(daAlinkHIO_wlMove_c0::m.field_0xBC);
|
|
current.angle.y = shape_angle.y;
|
|
|
|
field_0x2f98 = 4;
|
|
mProcVar2.mPuzzleAimAngle = shape_angle.y;
|
|
field_0x3478 = FLOAT_LABEL(lit_6108);
|
|
field_0x347c = daAlinkHIO_wlMoveNoP_c0::m.field_0x10;
|
|
field_0x594 = daAlinkHIO_wlMoveNoP_c0::m.field_0x8;
|
|
offWolfEyeUp();
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 801351F8-80135458 12FB38 0260+00 1/0 0/0 0/0 .text procWolfGiantPuzzle__9daAlink_cFv
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfGiantPuzzle() {
|
|
if (mSpecialMode == 0) {
|
|
return checkNextActionWolf(0);
|
|
}
|
|
|
|
if (!i_checkNoResetFlg0(FLG0_UNK_4000) && mProcVar2.field_0x300c == shape_angle.y &&
|
|
mSpecialMode != 0x28 && checkZeroSpeedF())
|
|
{
|
|
setDoStatusEmphasys(0x1C);
|
|
|
|
if (doTrigger()) {
|
|
fopAc_ac_c* giant_p =
|
|
(fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchGiantTalk, NULL);
|
|
if (giant_p != NULL) {
|
|
fopAcM_orderTalkEvent(this, giant_p, 0, 0);
|
|
}
|
|
} else if (checkInputOnR()) {
|
|
int direction = getDirectionFromShapeAngle();
|
|
if (direction == DIR_FORWARD) {
|
|
cXyz gnd_chk_pos(current.pos.x + cM_ssin(shape_angle.y) * 600.0f,
|
|
current.pos.y + 10.0f,
|
|
current.pos.z + cM_scos(shape_angle.y) * 600.0f);
|
|
mLinkGndChk.SetPos(&gnd_chk_pos);
|
|
|
|
if (fabsf(dComIfG_Bgsp().GroundCross(&mLinkGndChk) - current.pos.y) < 0.1f &&
|
|
fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchGiant, &gnd_chk_pos) == NULL)
|
|
{
|
|
field_0x347c = daAlinkHIO_wlMoveNoP_c0::m.field_0xC;
|
|
field_0x3478 = field_0x594;
|
|
}
|
|
} else if (direction == DIR_LEFT) {
|
|
mProcVar2.mPuzzleAimAngle += 0x4000;
|
|
} else if (direction == DIR_RIGHT) {
|
|
mProcVar2.mPuzzleAimAngle -= 0x4000;
|
|
} else {
|
|
mProcVar2.mPuzzleAimAngle += 0x8000;
|
|
}
|
|
}
|
|
}
|
|
|
|
cLib_chaseF(&mNormalSpeed, field_0x3478, field_0x347c);
|
|
|
|
if (mProcVar2.mPuzzleAimAngle != shape_angle.y) {
|
|
cLib_addCalcAngleS(
|
|
&shape_angle.y, mProcVar2.mPuzzleAimAngle, daAlinkHIO_wlMoveNoP_c0::m.field_0x4,
|
|
daAlinkHIO_wlMoveNoP_c0::m.field_0x0, daAlinkHIO_wlMoveNoP_c0::m.field_0x2);
|
|
current.angle.y = shape_angle.y;
|
|
}
|
|
|
|
if (checkZeroSpeedF()) {
|
|
onModeFlg(1);
|
|
} else {
|
|
offModeFlg(1);
|
|
}
|
|
|
|
setBlendWolfMoveAnime(-1.0f);
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfGiantPuzzle() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfGiantPuzzle__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80135458-801354C8 12FD98 0070+00 2/2 0/0 0/0 .text setWolfHangGroundY__9daAlink_cFv */
|
|
void daAlink_c::setWolfHangGroundY() {
|
|
cXyz pos;
|
|
mDoMtx_multVecZero(mpLinkModel->i_getAnmMtx(0), &pos);
|
|
|
|
mLinkGndChk.SetPos(&pos);
|
|
field_0x33d8 = dComIfG_Bgsp().GroundCross(&mLinkGndChk);
|
|
}
|
|
|
|
/* 801354C8-801355EC 12FE08 0124+00 2/2 0/0 0/0 .text changeWolfHangEndProc__9daAlink_cFv
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::changeWolfHangEndProc() {
|
|
setWolfHangGroundY();
|
|
|
|
f32 var_f1;
|
|
if (i_checkNoResetFlg0(FLG0_UNK_80) && mWaterY > field_0x33d8) {
|
|
var_f1 = daAlinkHIO_wlSwim_c0::m.field_0x48 + daAlinkHIO_wlSwim_c0::m.field_0x94;
|
|
} else {
|
|
var_f1 = daAlinkHIO_wlWallHang_c0::m.field_0x88;
|
|
}
|
|
|
|
if (current.pos.y < (field_0x33d8 + var_f1) - 1.0f) {
|
|
return procWolfLandInit();
|
|
} else {
|
|
setDoStatus(0x33);
|
|
|
|
if (doTrigger()) {
|
|
current.pos.x -= cM_ssin(shape_angle.y) * 50.0f;
|
|
current.pos.z -= cM_scos(shape_angle.y) * 50.0f;
|
|
|
|
i_onNoResetFlg2(FLG2_UNK_200);
|
|
procWolfFallInit(2, daAlinkHIO_wlWallHang_c0::m.field_0x98);
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::changeWolfHangEndProc() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/changeWolfHangEndProc__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 801355EC-80135668 12FF2C 007C+00 2/2 0/0 0/0 .text procWolfHangReadyInit__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfHangReadyInit() {
|
|
commonProcInit(PROC_WOLF_HANG_READY);
|
|
setSingleAnimeWolf(WANM_VJMP_START, daAlinkHIO_wlWallHang_c0::m.field_0x0.mSpeed,
|
|
daAlinkHIO_wlWallHang_c0::m.field_0x0.mStartFrame, 12,
|
|
daAlinkHIO_wlWallHang_c0::m.field_0x0.mInterpolation);
|
|
field_0x3198 = field_0x2f91;
|
|
mProcVar2.field_0x300c = field_0x306e + 0x8000;
|
|
|
|
f32 tmp_0 = FLOAT_LABEL(lit_6108);
|
|
mNormalSpeed = tmp_0;
|
|
speed.y = tmp_0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80135668-801356F0 12FFA8 0088+00 1/0 0/0 0/0 .text procWolfHangReady__9daAlink_cFv */
|
|
int daAlink_c::procWolfHangReady() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
cLib_addCalcAngleS(&shape_angle.y, mProcVar2.field_0x300c, 2, 0x1000, 0x400);
|
|
current.angle.y = shape_angle.y;
|
|
|
|
if (frameCtrl->checkAnmEnd()) {
|
|
shape_angle.y = mProcVar2.field_0x300c;
|
|
current.angle.y = shape_angle.y;
|
|
|
|
if (!procWolfHangWallCatchInit(field_0x3198)) {
|
|
checkWaitAction();
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 801356F0-80135AF4 130030 0404+00 3/3 0/0 0/0 .text procWolfHangWallCatchInit__9daAlink_cFi */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfHangWallCatchInit(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfHangWallCatchInit__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80135AF4-80135CD8 130434 01E4+00 1/0 0/0 0/0 .text procWolfHangWallCatch__9daAlink_cFv
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfHangWallCatch() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
|
|
if (mProcVar3.field_0x300e.x != 0 && frameCtrl_p->getFrame() >= 23.0f) {
|
|
field_0x2f99 = 4;
|
|
offModeFlg(0x4000);
|
|
} else if (changeWolfHangEndProc()) {
|
|
return 1;
|
|
}
|
|
|
|
f32 temp_f2 = field_0x3478;
|
|
field_0x3478 = mpLinkModel->i_getAnmMtx(0)[1][3];
|
|
if (temp_f2 < field_0x33b8 && field_0x3478 >= field_0x33b8) {
|
|
seStartMapInfo(Z2SE_WL_OUTOF_WATER);
|
|
}
|
|
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
if (mProcVar3.field_0x300e.x == 0) {
|
|
if (field_0x3174 == 6) {
|
|
if (mProcVar3.field_0x300e.y == 0) {
|
|
setSingleAnimeWolf(WANM_HANG, daAlinkHIO_wlWallHang_c0::m.field_0x28.mSpeed,
|
|
35.0f, daAlinkHIO_wlWallHang_c0::m.field_0x28.mEndFrame,
|
|
5.0f);
|
|
mProcVar3.field_0x300e.y = 1;
|
|
}
|
|
} else {
|
|
setSingleAnimeWolf(WANM_VJMP_CLIMB, daAlinkHIO_wlWallHang_c0::m.field_0x14.mSpeed,
|
|
17.0f, daAlinkHIO_wlWallHang_c0::m.field_0x14.mEndFrame, 2.0f);
|
|
mProcVar3.field_0x300e.x = 1;
|
|
}
|
|
} else {
|
|
checkNextActionWolf(0);
|
|
int temp_r3 = mProcVar2.field_0x300c;
|
|
|
|
if (mProcID == PROC_WOLF_WAIT && temp_r3 != 0) {
|
|
procWolfSwimEndWaitInit(0);
|
|
}
|
|
|
|
i_onNoResetFlg1(FLG1_UNK_20);
|
|
}
|
|
} else if (mProcVar3.field_0x300e.x != 0 &&
|
|
frameCtrl_p->getFrame() > daAlinkHIO_wlWallHang_c0::m.field_0x14.mCheckFrame &&
|
|
checkNextActionWolf(1))
|
|
{
|
|
i_onNoResetFlg1(FLG1_UNK_20);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfHangWallCatch() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfHangWallCatch__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80135CD8-80135F00 130618 0228+00 1/1 0/0 0/0 .text
|
|
* procWolfHangFallStartInit__9daAlink_cFP8cM3dGPla */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfHangFallStartInit(cM3dGPla* param_0) {
|
|
if (mProcID == PROC_WOLF_HANG_WALL_CATCH || i_checkNoResetFlg1(FLG1_UNK_20)) {
|
|
return 0;
|
|
}
|
|
|
|
s16 var_r30 = param_0->mNormal.atan2sX_Z();
|
|
current.pos.x -= param_0->mNormal.x * 1.5f;
|
|
current.pos.z -= param_0->mNormal.z * 1.5f;
|
|
|
|
checkHangStartSideWall(var_r30);
|
|
|
|
cXyz gnd_chk_pos(current.pos.x, current.pos.y + 50.0f, current.pos.z);
|
|
mLinkGndChk.SetPos(&gnd_chk_pos);
|
|
gnd_chk_pos.y = dComIfG_Bgsp().GroundCross(&mLinkGndChk);
|
|
|
|
if (gnd_chk_pos.y != -1000000000.0f) {
|
|
if (gnd_chk_pos.y < current.pos.y + l_autoDownHeight) {
|
|
return 0;
|
|
}
|
|
|
|
current.pos.y = gnd_chk_pos.y;
|
|
}
|
|
|
|
commonProcInit(PROC_WOLF_HANG_FALL_START);
|
|
setOldRootQuaternion(0, shape_angle.y - (var_r30 + 0x8000), 0);
|
|
shape_angle.y = var_r30 + 0x8000;
|
|
current.angle.y = shape_angle.y;
|
|
|
|
setSingleAnimeWolfParam(WANM_HANG, &daAlinkHIO_wlWallHang_c0::m.field_0x28);
|
|
|
|
f32 sin = cM_ssin(shape_angle.y);
|
|
f32 cos = cM_scos(shape_angle.y);
|
|
cXyz line_start(current.pos.x - sin * 50.0f, current.pos.y - 120.0f,
|
|
current.pos.z - cos * 50.0f);
|
|
cXyz line_end(current.pos.x + sin, line_start.y, current.pos.z + cos);
|
|
|
|
if (commonLineCheck(&line_start, &line_end)) {
|
|
mProcVar2.field_0x300c = 1;
|
|
} else {
|
|
mProcVar2.field_0x300c = 0;
|
|
}
|
|
|
|
mProcVar3.field_0x300e.x = 0;
|
|
mNormalSpeed = 0.0f;
|
|
speed.y = 0.0f;
|
|
dComIfGp_setPlayerStatus0(0, 0x100);
|
|
field_0x33d8 = mLinkAcch.GetGroundH();
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfHangFallStartInit(cM3dGPla* param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfHangFallStartInit__9daAlink_cFP8cM3dGPla.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80135F00-80136064 130840 0164+00 1/0 0/0 0/0 .text procWolfHangFallStart__9daAlink_cFv
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfHangFallStart() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
|
|
if (field_0x2060->getOldFrameRate() < 0.1f && changeWolfHangEndProc()) {
|
|
return 1;
|
|
}
|
|
|
|
if (frameCtrl_p->checkPass(6.0f)) {
|
|
dComIfGp_getVibration().StartShock(1, 1, cXyz(0.0f, 1.0f, 0.0f));
|
|
}
|
|
|
|
if (mProcVar2.field_0x300c == 0 && mProcVar3.field_0x300e.x == 0) {
|
|
if (frameCtrl_p->getFrame() > 22.0f) {
|
|
frameCtrl_p->setFrame(22.0f);
|
|
getNowAnmPackUnder(UNDER_0)->setFrame(22.0f);
|
|
|
|
if (checkInputOnR() && getDirectionFromShapeAngle() == DIR_FORWARD) {
|
|
mProcVar3.field_0x300e.x = 1;
|
|
}
|
|
}
|
|
} else if (checkAnmEnd(mUnderFrameCtrl) &&
|
|
((checkInputOnR() && getDirectionFromShapeAngle() == DIR_FORWARD) ||
|
|
mProcVar3.field_0x300e.x != 0))
|
|
{
|
|
procWolfHangWallCatchInit(8);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfHangFallStart() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfHangFallStart__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80136064-801360EC 1309A4 0088+00 1/1 0/0 0/0 .text setWolfHeadDamage__9daAlink_cFv */
|
|
void daAlink_c::setWolfHeadDamage() {
|
|
setUpperAnimeParam(0x2A7, UPPER_2, &daAlinkHIO_wlDamage_c0::m.field_0x0);
|
|
seStartOnlyReverb(Z2SE_AL_DAMAGE_NORMAL);
|
|
freeGrabItem();
|
|
setFacePriTexture(FTANM_UNK_90);
|
|
voiceStart(Z2SE_WL_V_DAMAGE);
|
|
}
|
|
|
|
/* 801360EC-80136508 130A2C 041C+00 1/1 0/0 0/0 .text
|
|
* procWolfDamageInit__9daAlink_cFP12dCcD_GObjInf */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfDamageInit(dCcD_GObjInf* param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfDamageInit__9daAlink_cFP12dCcD_GObjInf.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80136508-80136624 130E48 011C+00 1/0 0/0 0/0 .text procWolfDamage__9daAlink_cFv */
|
|
int daAlink_c::procWolfDamage() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
|
|
cLib_chaseF(&mNormalSpeed, FLOAT_LABEL(lit_6108), daAlinkHIO_wlDamNormal_c0::m.field_0x58);
|
|
field_0x2f99 = 5;
|
|
|
|
if (checkFreezeDamage()) {
|
|
freezeTimerDamage();
|
|
}
|
|
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
current.angle.y = shape_angle.y;
|
|
|
|
if (!checkFreezeDamage()) {
|
|
checkNextActionWolf(0);
|
|
} else if (mProcVar0.field_0x3008 == 0) {
|
|
seStartOnlyReverb(Z2SE_AL_FREEZE_RECOVER);
|
|
procWolfRollAttackInit(1, 2);
|
|
onModeFlg(8);
|
|
}
|
|
} else if (frameCtrl_p->getFrame() > field_0x3478) {
|
|
current.angle.y = shape_angle.y;
|
|
|
|
if (!checkNextActionWolf(1)) {
|
|
current.angle.y = mProcVar3.field_0x300e.y;
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80136624-801369E4 130F64 03C0+00 2/2 0/0 0/0 .text procWolfLargeDamageUpInit__9daAlink_cFiiss
|
|
*/
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfLargeDamageUpInit(int param_0, int param_1, s16 param_2, s16 param_3) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfLargeDamageUpInit__9daAlink_cFiiss.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 801369E4-80136C18 131324 0234+00 1/0 0/0 0/0 .text procWolfLargeDamageUp__9daAlink_cFv
|
|
*/
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfLargeDamageUp() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfLargeDamageUp__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80136C18-80136DE4 131558 01CC+00 1/1 0/0 0/0 .text procWolfLandDamageInit__9daAlink_cFi */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfLandDamageInit(int param_0) {
|
|
f32 var_f31;
|
|
|
|
if (param_0 == 2) {
|
|
if (!checkEventRun()) {
|
|
setLandDamagePoint(8);
|
|
}
|
|
|
|
var_f31 = daAlinkHIO_wlDamFall_c0::m.field_0x0.mStartFrame;
|
|
mProcVar0.field_0x3008 = daAlinkHIO_damFall_c0::m.mBigStopTime;
|
|
dComIfGp_getVibration().StartShock(5, 31, cXyz(0.0f, 1.0f, 0.0f));
|
|
} else {
|
|
var_f31 = daAlinkHIO_wlDamFall_c0::m.field_0x34;
|
|
mProcVar0.field_0x3008 = daAlinkHIO_wlDamFall_c0::m.field_0x28;
|
|
|
|
if (param_0 == 1) {
|
|
if (!checkEventRun()) {
|
|
setLandDamagePoint(4);
|
|
}
|
|
|
|
dComIfGp_getVibration().StartShock(4, 31, cXyz(0.0f, 1.0f, 0.0f));
|
|
}
|
|
}
|
|
|
|
commonProcInit(PROC_WOLF_LAND_DAMAGE);
|
|
mNormalSpeed = 0.0f;
|
|
|
|
if (param_0 == 0) {
|
|
offModeFlg(8);
|
|
} else {
|
|
seStartOnlyReverb(JA_SE_LK_FALL_DAMAGE);
|
|
voiceStart(Z2SE_WL_V_LAND_DAMAGE);
|
|
}
|
|
|
|
setSingleAnimeWolf(WANM_FALL_LAND, daAlinkHIO_wlDamFall_c0::m.field_0x0.mSpeed, var_f31,
|
|
daAlinkHIO_wlDamFall_c0::m.field_0x0.mEndFrame,
|
|
daAlinkHIO_wlDamFall_c0::m.field_0x0.mInterpolation);
|
|
setFaceBasicTexture(FTANM_UNK_95);
|
|
field_0x3198 = 0;
|
|
field_0x2f9d = 4;
|
|
setFootEffectProcType(4);
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfLandDamageInit(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfLandDamageInit__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80136DE4-80136EC4 131724 00E0+00 1/0 0/0 0/0 .text procWolfLandDamage__9daAlink_cFv */
|
|
int daAlink_c::procWolfLandDamage() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
if (field_0x3198 != 0) {
|
|
if (frameCtrl->checkAnmEnd()) {
|
|
checkNextActionWolf(0);
|
|
} else if (frameCtrl->getFrame() > daAlinkHIO_wlDamFall_c0::m.field_0x14.mCheckFrame) {
|
|
checkNextActionWolf(1);
|
|
}
|
|
} else if (frameCtrl->checkAnmEnd()) {
|
|
if (mProcVar0.field_0x3008 > 0) {
|
|
mProcVar0.field_0x3008--;
|
|
} else {
|
|
setSingleAnimeWolfParam(WANM_FALL_LAND_START, &daAlinkHIO_wlDamFall_c0::m.field_0x14);
|
|
setFaceBasicTexture(FTANM_UNK_96);
|
|
field_0x3198 = 1;
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80136EC4-80136F54 131804 0090+00 2/2 0/0 0/0 .text setWolfScreamWaitAnime__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
void daAlink_c::setWolfScreamWaitAnime() {
|
|
setSingleAnimeWolfBase(WANM_WAIT_STUNNED);
|
|
setFaceBasicTexture(FTANM_UNK_91);
|
|
voiceStart(Z2SE_WL_V_TERRORED);
|
|
|
|
mProcVar2.field_0x300c = 1;
|
|
dComIfGp_getVibration().StartQuake(5, 1, cXyz(0.0f, 1.0f, 0.0f));
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::setWolfScreamWaitAnime() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setWolfScreamWaitAnime__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80136F54-80136FF8 131894 00A4+00 1/1 0/0 0/0 .text procWolfScreamWaitInit__9daAlink_cFv */
|
|
int daAlink_c::procWolfScreamWaitInit() {
|
|
commonProcInit(PROC_WOLF_SCREAM_WAIT);
|
|
if (i_checkEndResetFlg1(ERFLG1_UNK_2)) {
|
|
setWolfScreamWaitAnime();
|
|
} else {
|
|
setSingleAnimeWolfBaseSpeed(WANM_WAIT, daAlinkHIO_wlMoveNoP_c0::m.field_0x14,
|
|
daAlinkHIO_wlMove_c0::m.field_0xBC);
|
|
mProcVar2.field_0x300c = 0;
|
|
}
|
|
|
|
mNormalSpeed = FLOAT_LABEL(lit_6108);
|
|
mProcVar3.field_0x300e.x = 0;
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80136FF8-801370E4 131938 00EC+00 1/0 0/0 0/0 .text procWolfScreamWait__9daAlink_cFv */
|
|
int daAlink_c::procWolfScreamWait() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
if (!i_checkEndResetFlg1(ERFLG1_UNK_1)) {
|
|
if (mProcVar3.field_0x300e.x != 0) {
|
|
field_0x2f99 = 5;
|
|
|
|
if (frameCtrl->checkAnmEnd()) {
|
|
checkNextActionWolf(0);
|
|
} else if (frameCtrl->getFrame() > daAlinkHIO_wlDamLarge_c0::m.field_0x0.mCheckFrame) {
|
|
checkNextActionWolf(1);
|
|
}
|
|
} else {
|
|
mProcVar3.field_0x300e.x = 1;
|
|
setSingleAnimeWolf(WANM_DMG_AIR_FRONT_GETUP,
|
|
daAlinkHIO_wlDamLarge_c0::m.field_0x0.mSpeed, lit_8676,
|
|
daAlinkHIO_wlDamLarge_c0::m.field_0x0.mEndFrame,
|
|
daAlinkHIO_wlDamLarge_c0::m.field_0x0.mInterpolation);
|
|
field_0x2f99 = 13;
|
|
}
|
|
} else if (mProcVar2.field_0x300c == 0 && i_checkEndResetFlg1(ERFLG1_UNK_2)) {
|
|
setWolfScreamWaitAnime();
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 801370E4-8013712C 131A24 0048+00 3/3 0/0 0/0 .text getWolfLieMoveAnmSpeed__9daAlink_cFv */
|
|
f32 daAlink_c::getWolfLieMoveAnmSpeed() {
|
|
if (field_0x3198 != 0) {
|
|
// return getAnmSpeedStickRate(lit_5943, lit_7624); inline doesnt match here?
|
|
return lit_5943 + (field_0x33a8 * lit_7624);
|
|
}
|
|
|
|
return getAnmSpeedStickRate(daAlinkHIO_wlLie_c0::m.field_0x3C,
|
|
daAlinkHIO_wlLie_c0::m.field_0x38);
|
|
}
|
|
|
|
/* 8013712C-801371A0 131A6C 0074+00 3/3 0/0 0/0 .text getWolfLieMoveSpeed__9daAlink_cFv
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
f32 daAlink_c::getWolfLieMoveSpeed() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
|
|
f32 var_f1;
|
|
if (frameCtrl_p->getFrame() >= 15.0f) {
|
|
var_f1 = frameCtrl_p->getFrame() - 15.0f;
|
|
} else {
|
|
var_f1 = frameCtrl_p->getFrame();
|
|
}
|
|
|
|
return daAlinkHIO_wlLie_c0::m.field_0x34 * frameCtrl_p->getRate() *
|
|
cM_fsin(var_f1 * 0.2094395f);
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm f32 daAlink_c::getWolfLieMoveSpeed() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/getWolfLieMoveSpeed__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 801371A0-801371FC 131AE0 005C+00 0/0 0/0 2/2 .text checkMidnaDisappearMode__9daAlink_cCFv */
|
|
BOOL daAlink_c::checkMidnaDisappearMode() const {
|
|
return mProcID == PROC_WOLF_DIG_THROUGH ||
|
|
(i_checkWolf() && i_dComIfGp_checkPlayerStatus0(0, 0x8000000) &&
|
|
!i_dComIfGp_checkPlayerStatus0(0, 0x10) &&
|
|
(mTargetedActor == NULL || !(mTargetedActor->attention_info.flags & 0x800000)));
|
|
}
|
|
|
|
/* 801371FC-801372B4 131B3C 00B8+00 3/3 0/0 0/0 .text checkWolfLieContinue__9daAlink_cFi
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
BOOL daAlink_c::checkWolfLieContinue(int param_0) {
|
|
cM3dGPla slide_poly;
|
|
|
|
if ((param_0 ||
|
|
((mTargetedActor != NULL && (mTargetedActor->attention_info.flags & 0x800000)) &&
|
|
(fopAcM_GetName(mTargetedActor) == PROC_NPC_JAGAR ||
|
|
fopAcM_GetName(mTargetedActor) == PROC_NPC_BOU))) &&
|
|
!getSlidePolygon(&slide_poly) && !checkWolfLieWaterIn())
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm BOOL daAlink_c::checkWolfLieContinue(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/checkWolfLieContinue__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 801372B4-80137330 131BF4 007C+00 3/3 0/0 0/0 .text checkNextActionWolfFromLie__9daAlink_cFv */
|
|
int daAlink_c::checkNextActionWolfFromLie() {
|
|
if (checkNextActionWolf(0)) {
|
|
if (field_0x2f8c == 1 || field_0x2f8c == 2 || field_0x2f8c == 3) {
|
|
field_0x2060->initOldFrameMorf(daAlinkHIO_wlLie_c0::m.field_0x30, 0, 40);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 80137330-801373F8 131C70 00C8+00 3/3 0/0 0/0 .text setWolfLieMoveVoice__9daAlink_cFi
|
|
*/
|
|
void daAlink_c::setWolfLieMoveVoice(int param_0) {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
if (frameCtrl->getRate() == FLOAT_LABEL(lit_6108) && mProcVar3.field_0x300e.z != 0) {
|
|
mProcVar3.field_0x300e.z--;
|
|
}
|
|
|
|
if ((param_0 != 0 && (frameCtrl->checkPass(lit_17382) || frameCtrl->checkPass(lit_7451))) ||
|
|
(frameCtrl->getRate() == FLOAT_LABEL(lit_6108) && mProcVar3.field_0x300e.z == 0))
|
|
{
|
|
voiceStart(Z2SE_WL_V_BREATH_WALK);
|
|
mProcVar3.field_0x300e.z = 30;
|
|
}
|
|
}
|
|
|
|
/* 801373F8-80137420 131D38 0028+00 2/2 0/0 0/0 .text checkWolfLieCode__9daAlink_cFv */
|
|
bool daAlink_c::checkWolfLieCode() {
|
|
if (mLinkAcch.ChkGroundHit() && field_0x2fa8 == 4) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 80137420-8013753C 131D60 011C+00 2/2 0/0 0/0 .text procWolfLieStartInit__9daAlink_cFi
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfLieStartInit(int param_0) {
|
|
commonProcInit(PROC_WOLF_LIE_START);
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
setSingleAnimeWolfParam(WANM_CROUCH, &daAlinkHIO_wlLie_c0::m.field_0x14);
|
|
|
|
if (param_0) {
|
|
shape_angle.y = field_0x306e + 0x8000;
|
|
current.pos.x = field_0x34ec.x + cM_ssin(field_0x306e) * 90.0f;
|
|
current.pos.z = field_0x34ec.z + cM_scos(field_0x306e) * 90.0f;
|
|
mProcVar3.field_0x300e.y = 1;
|
|
} else {
|
|
mProcVar3.field_0x300e.y = 0;
|
|
}
|
|
|
|
mNormalSpeed = 0.0f;
|
|
current.angle.y = shape_angle.y;
|
|
field_0x2f99 = 0;
|
|
mProcVar3.field_0x300e.z = 30;
|
|
dComIfGp_setPlayerStatus0(0, 0x8000000);
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfLieStartInit(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfLieStartInit__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013753C-80137634 131E7C 00F8+00 1/0 0/0 0/0 .text procWolfLieStart__9daAlink_cFv */
|
|
int daAlink_c::procWolfLieStart() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
decideCrawlDoStatus();
|
|
|
|
if (mProcVar3.field_0x300e.y != 0) {
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
procWolfLieMoveInit(1);
|
|
}
|
|
} else if (!checkWolfLieContinue(0)) {
|
|
checkNextActionWolfFromLie();
|
|
} else if (checkInputOnR() &&
|
|
(checkAnmEnd(frameCtrl_p) ||
|
|
frameCtrl_p->getFrame() > daAlinkHIO_wlLie_c0::m.field_0x14.mCheckFrame))
|
|
{
|
|
procWolfLieMoveInit(0);
|
|
} else {
|
|
field_0x2f99 = 4;
|
|
setWolfLieMoveVoice(0);
|
|
setTalkStatus();
|
|
orderTalk(1);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80137634-801377F0 131F74 01BC+00 5/5 0/0 0/0 .text procWolfLieMoveInit__9daAlink_cFi
|
|
*/
|
|
// regalloc
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfLieMoveInit(int param_0) {
|
|
BOOL var_r30 = mProcID == PROC_TALK;
|
|
BOOL var_r29 = checkUnderMove0BckNoArcWolf(WANM_CROUCH_WALK) == FALSE;
|
|
BOOL var_r28 = i_dComIfGp_checkPlayerStatus0(0, 0x2000);
|
|
|
|
if (!commonProcInitNotSameProc(PROC_WOLF_LIE_MOVE)) {
|
|
return 0;
|
|
}
|
|
|
|
mProcVar3.field_0x300e.x = 0;
|
|
|
|
if (!var_r29) {
|
|
if (var_r30) {
|
|
var_r29 = true;
|
|
} else {
|
|
onModeFlg(0x6000);
|
|
}
|
|
} else {
|
|
f32 anm_speed = getWolfLieMoveAnmSpeed();
|
|
|
|
if (mDemo.getDemoMode() == 0x2C) {
|
|
anm_speed = 0.0f;
|
|
} else if (param_0) {
|
|
mProcVar3.field_0x300e.x = 1;
|
|
onModeFlg(0x6000);
|
|
} else if (getDirectionFromShapeAngle() == DIR_BACKWARD) {
|
|
anm_speed *= -1.0f;
|
|
}
|
|
|
|
current.angle.y = shape_angle.y;
|
|
setSingleAnimeWolfBaseSpeed(WANM_CROUCH_WALK, anm_speed, daAlinkHIO_wlLie_c0::m.field_0x40);
|
|
}
|
|
|
|
field_0x3198 = var_r29 ^ 1;
|
|
mProcVar3.field_0x300e.y = var_r30;
|
|
field_0x2f99 = 0xD;
|
|
|
|
dComIfGp_setPlayerStatus0(0, 0x8000000);
|
|
if (var_r28) {
|
|
dComIfGp_setPlayerStatus0(0, 0x2000);
|
|
}
|
|
|
|
mProcVar3.field_0x300e.z = 30;
|
|
|
|
if (i_checkAttentionLock()) {
|
|
field_0x2fe4 = shape_angle.y;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfLieMoveInit(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfLieMoveInit__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 801377F0-80137C90 132130 04A0+00 1/0 0/0 0/0 .text procWolfLieMove__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfLieMove() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfLieMove__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80137C90-80137D4C 1325D0 00BC+00 1/1 0/0 0/0 .text procWolfLieAutoMoveInit__9daAlink_cFiP4cXyz
|
|
*/
|
|
// regalloc
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfLieAutoMoveInit(int param_0, cXyz* param_1) {
|
|
BOOL var_r30 = i_dComIfGp_checkPlayerStatus0(0, 0x2000);
|
|
commonProcInit(PROC_WOLF_LIE_AUTO_MOVE);
|
|
|
|
field_0x37c8 = *param_1;
|
|
field_0x3198 = param_0;
|
|
mProcVar0.field_0x3008 = 20;
|
|
mProcVar1.field_0x300a = 300;
|
|
|
|
setCrawlMoveDirectionArrow();
|
|
mNormalSpeed = FLOAT_LABEL(lit_6108);
|
|
field_0x2f99 = 13;
|
|
|
|
dComIfGp_setPlayerStatus0(0, 0x8000000);
|
|
if (var_r30) {
|
|
dComIfGp_setPlayerStatus0(0, 0x2000);
|
|
}
|
|
|
|
mProcVar3.field_0x300e.z = 30;
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfLieAutoMoveInit(int param_0, cXyz* param_1) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfLieAutoMoveInit__9daAlink_cFiP4cXyz.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80137D4C-80138000 13268C 02B4+00 1/0 0/0 0/0 .text procWolfLieAutoMove__9daAlink_cFv
|
|
*/
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfLieAutoMove() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfLieAutoMove__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80138000-80138188 132940 0188+00 2/2 0/0 0/0 .text setSpeedAndAngleSwimWolf__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
void daAlink_c::setSpeedAndAngleSwimWolf() {
|
|
if (checkWolfDashMode()) {
|
|
field_0x594 = daAlinkHIO_wlSwim_c0::m.field_0x50;
|
|
} else {
|
|
field_0x594 = daAlinkHIO_wlSwim_c0::m.field_0x80;
|
|
}
|
|
|
|
f32 var_f31;
|
|
if (checkInputOnR()) {
|
|
s16 prev_angle = current.angle.y;
|
|
cLib_addCalcAngleS(¤t.angle.y, field_0x2fe2, daAlinkHIO_wlSwim_c0::m.field_0x3C,
|
|
daAlinkHIO_wlSwim_c0::m.field_0x40, daAlinkHIO_wlSwim_c0::m.field_0x3E);
|
|
|
|
var_f31 = field_0x33a8 * 3.0f * cM_scos(current.angle.y - prev_angle);
|
|
shape_angle.y = current.angle.y;
|
|
} else {
|
|
var_f31 = 0.0f;
|
|
}
|
|
|
|
if (checkWolfSwimDashAnime()) {
|
|
var_f31 = 3.0f;
|
|
}
|
|
|
|
if (checkAttentionState() && mProcID == PROC_WOLF_SWIM_WAIT) {
|
|
if (mTargetedActor != NULL) {
|
|
setShapeAngleToAtnActor(0);
|
|
} else {
|
|
cLib_addCalcAngleS(&shape_angle.y, field_0x2fe4, daAlinkHIO_wlSwim_c0::m.field_0x42,
|
|
daAlinkHIO_wlSwim_c0::m.field_0x46,
|
|
daAlinkHIO_wlSwim_c0::m.field_0x44);
|
|
}
|
|
|
|
current.angle.y = shape_angle.y;
|
|
}
|
|
|
|
setNormalSpeedF(var_f31, daAlinkHIO_wlSwim_c0::m.field_0x54);
|
|
|
|
if (i_dComIfGp_checkPlayerStatus0(0, 0x10)) {
|
|
mNormalSpeed = 0.0f;
|
|
}
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::setSpeedAndAngleSwimWolf() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setSpeedAndAngleSwimWolf__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80138188-801381F8 132AC8 0070+00 2/2 0/0 0/0 .text getWolfSwimMoveAnmSpeed__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
f32 daAlink_c::getWolfSwimMoveAnmSpeed() {
|
|
f32 anm_speed = fabsf(mNormalSpeed) / field_0x594;
|
|
if (anm_speed > 1.0f) {
|
|
anm_speed = 1.0f;
|
|
}
|
|
|
|
if (checkWolfDashMode()) {
|
|
anm_speed =
|
|
daAlinkHIO_wlSwim_c0::m.field_0x70 +
|
|
anm_speed * (daAlinkHIO_wlSwim_c0::m.field_0x74 - daAlinkHIO_wlSwim_c0::m.field_0x70);
|
|
} else {
|
|
anm_speed =
|
|
daAlinkHIO_wlSwim_c0::m.field_0x8C +
|
|
anm_speed * (daAlinkHIO_wlSwim_c0::m.field_0x90 - daAlinkHIO_wlSwim_c0::m.field_0x8C);
|
|
}
|
|
|
|
return anm_speed;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm f32 daAlink_c::getWolfSwimMoveAnmSpeed() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/getWolfSwimMoveAnmSpeed__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 801381F8-801383D8 132B38 01E0+00 2/2 0/0 0/0 .text decideDoStatusSwimWolf__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::decideDoStatusSwimWolf() {
|
|
setTalkStatus();
|
|
|
|
if (orderTalk(1)) {
|
|
return 1;
|
|
}
|
|
|
|
if (field_0x27f4 != NULL && fopAcM_GetName(field_0x27f4) == PROC_Obj_Drop) {
|
|
setDoStatus(0x39);
|
|
if (doTrigger()) {
|
|
fopAcM_setCarryNow(field_0x27f4, 0);
|
|
i_onResetFlg0(RFLG0_UNK_8000);
|
|
}
|
|
} else if (i_checkNoResetFlg0(FLG0_UNK_100) && field_0x30d2 == 0 && !checkWolfSwimDashAnime() &&
|
|
mProcID == PROC_WOLF_SWIM_MOVE)
|
|
{
|
|
setDoStatus(9);
|
|
|
|
if (doTrigger()) {
|
|
i_onNoResetFlg1(FLG1_DASH_MODE);
|
|
|
|
if (field_0x2fc7 == 1 || field_0x2fc7 == 3) {
|
|
field_0x30d0 = daAlinkHIO_wlMove_c0::m.field_0x5A;
|
|
} else if (field_0x2fc7 == 2) {
|
|
field_0x30d0 = daAlinkHIO_wlMove_c0::m.field_0x5E;
|
|
} else {
|
|
field_0x30d0 = daAlinkHIO_wlMove_c0::m.field_0x56;
|
|
}
|
|
|
|
setSingleAnimeWolfParam(WANM_SWIM_DASH, &daAlinkHIO_wlSwim_c0::m.field_0x28);
|
|
}
|
|
}
|
|
|
|
if (checkWolfSwimDashAnime() && mUnderFrameCtrl[0].checkPass(7.0f)) {
|
|
cXyz pillar_pos(current.pos.x + cM_ssin(shape_angle.y) * 60.0f, current.pos.y,
|
|
current.pos.z + cM_scos(shape_angle.y) * 60.0f);
|
|
fopKyM_createWpillar(&pillar_pos, 0.75f, 0);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::decideDoStatusSwimWolf() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/decideDoStatusSwimWolf__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 801383D8-80138484 132D18 00AC+00 2/2 0/0 0/0 .text procWolfSwimUpInit__9daAlink_cFv */
|
|
int daAlink_c::procWolfSwimUpInit() {
|
|
commonProcInit(PROC_WOLF_SWIM_UP);
|
|
speed.y = FLOAT_LABEL(lit_6108);
|
|
current.pos.y = mWaterY;
|
|
i_onNoResetFlg0(FLG0_UNK_100);
|
|
|
|
mZ2Link.setInWater(false);
|
|
setSingleAnimeWolfParam(WANM_SWIM_RESURFACE, &daAlinkHIO_wlSwim_c0::m.field_0x0);
|
|
setFaceBasicTexture(FTANM_UNK_8E);
|
|
dComIfGp_setPlayerStatus0(0, 0x100000);
|
|
seStartMapInfo(Z2SE_WL_OUTOF_WATER);
|
|
mProcVar3.field_0x300e.z = 1;
|
|
return 1;
|
|
}
|
|
|
|
/* 80138484-8013852C 132DC4 00A8+00 1/0 0/0 0/0 .text procWolfSwimUp__9daAlink_cFv */
|
|
int daAlink_c::procWolfSwimUp() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
setNormalSpeedF(FLOAT_LABEL(lit_6108), daAlinkHIO_wlSwim_c0::m.field_0x54);
|
|
|
|
if (frameCtrl->checkAnmEnd()) {
|
|
procWolfSwimWaitInit(0);
|
|
} else if (checkInputOnR() &&
|
|
frameCtrl->getFrame() > daAlinkHIO_wlSwim_c0::m.field_0x0.mCheckFrame)
|
|
{
|
|
procWolfSwimMoveInit();
|
|
} else {
|
|
current.pos.y = mWaterY;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013852C-80138644 132E6C 0118+00 7/7 0/0 0/0 .text procWolfSwimWaitInit__9daAlink_cFi
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfSwimWaitInit(int param_0) {
|
|
f32 morf;
|
|
if (mProcID == PROC_WOLF_SWIM_UP) {
|
|
morf = 0.0f;
|
|
} else {
|
|
morf = daAlinkHIO_wlSwim_c0::m.field_0x68;
|
|
}
|
|
|
|
commonProcInit(PROC_WOLF_SWIM_WAIT);
|
|
|
|
if (param_0) {
|
|
seStartMapInfo(Z2SE_WL_INTO_WATER);
|
|
mProcVar3.field_0x300e.y = 0;
|
|
mProcVar3.field_0x300e.z = 1;
|
|
} else {
|
|
mProcVar3.field_0x300e.z = 0;
|
|
}
|
|
|
|
f32 anm_speed;
|
|
if (checkWolfDashMode()) {
|
|
anm_speed = daAlinkHIO_wlSwim_c0::m.field_0x64;
|
|
} else {
|
|
anm_speed = daAlinkHIO_wlSwim_c0::m.field_0x88;
|
|
}
|
|
|
|
setSingleAnimeWolfBaseSpeed(WANM_SWIM_WAIT, anm_speed, morf);
|
|
dComIfGp_setPlayerStatus0(0, 0x100000);
|
|
|
|
if (i_checkNoResetFlg0(FLG0_UNK_100)) {
|
|
current.pos.y = mWaterY;
|
|
speed.y = 0.0f;
|
|
}
|
|
|
|
mProcVar2.field_0x300c = 0;
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfSwimWaitInit(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfSwimWaitInit__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80138644-8013871C 132F84 00D8+00 1/0 0/0 0/0 .text procWolfSwimWait__9daAlink_cFv */
|
|
int daAlink_c::procWolfSwimWait() {
|
|
if (mDemo.getDemoMode() == 6 || mDemo.getDemoMode() == 8) {
|
|
setShapeAngleToTalkActor();
|
|
current.angle.y = shape_angle.y;
|
|
}
|
|
|
|
setSpeedAndAngleSwimWolf();
|
|
setSwimUpDownOffset();
|
|
|
|
if (checkWolfDashMode()) {
|
|
mUnderFrameCtrl[0].setRate(daAlinkHIO_wlSwim_c0::m.field_0x64);
|
|
} else {
|
|
mUnderFrameCtrl[0].setRate(daAlinkHIO_wlSwim_c0::m.field_0x88);
|
|
}
|
|
|
|
if (checkSwimUpAction()) {
|
|
return 1;
|
|
}
|
|
|
|
if (decideDoStatusSwimWolf()) {
|
|
return 1;
|
|
}
|
|
|
|
if (checkInputOnR()) {
|
|
procWolfSwimMoveInit();
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013871C-801387A0 13305C 0084+00 4/4 0/0 0/0 .text procWolfSwimMoveInit__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfSwimMoveInit() {
|
|
commonProcInit(PROC_WOLF_SWIM_MOVE);
|
|
setSingleAnimeWolfBaseSpeed(WANM_SWIM, getWolfSwimMoveAnmSpeed(),
|
|
daAlinkHIO_wlSwim_c0::m.field_0x78);
|
|
|
|
if (i_checkNoResetFlg0(FLG0_UNK_100)) {
|
|
current.pos.y = mWaterY;
|
|
speed.y = FLOAT_LABEL(lit_6108);
|
|
}
|
|
|
|
dComIfGp_setPlayerStatus0(0, 0x100000);
|
|
return 1;
|
|
}
|
|
|
|
/* 801387A0-8013890C 1330E0 016C+00 1/0 0/0 0/0 .text procWolfSwimMove__9daAlink_cFv */
|
|
int daAlink_c::procWolfSwimMove() {
|
|
setSpeedAndAngleSwimWolf();
|
|
|
|
if (!checkWolfSwimDashAnime()) {
|
|
mUnderFrameCtrl[0].setRate(getWolfSwimMoveAnmSpeed());
|
|
}
|
|
|
|
if (checkSwimUpAction()) {
|
|
return 1;
|
|
}
|
|
|
|
if (decideDoStatusSwimWolf()) {
|
|
return 1;
|
|
}
|
|
|
|
if (checkAnmEnd(mUnderFrameCtrl) && checkWolfSwimDashAnime()) {
|
|
setSingleAnimeWolfBaseSpeed(WANM_SWIM, getWolfSwimMoveAnmSpeed(),
|
|
daAlinkHIO_wlSwim_c0::m.field_0x78);
|
|
|
|
if (field_0x2fc7 == 1 || field_0x2fc7 == 3) {
|
|
field_0x30d2 = daAlinkHIO_wlMove_c0::m.field_0x5C;
|
|
} else if (field_0x2fc7 == 2) {
|
|
field_0x30d2 = daAlinkHIO_wlMove_c0::m.field_0x60;
|
|
} else {
|
|
field_0x30d2 = daAlinkHIO_wlMove_c0::m.field_0x58;
|
|
}
|
|
}
|
|
|
|
if (checkFrontWallTypeAction()) {
|
|
swimOutAfter(1);
|
|
return 1;
|
|
}
|
|
|
|
if (!checkInputOnR() && !checkWolfSwimDashAnime()) {
|
|
procWolfSwimWaitInit(0);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013890C-80138A18 13324C 010C+00 2/2 0/0 0/0 .text procWolfSwimEndWaitInit__9daAlink_cFi */
|
|
int daAlink_c::procWolfSwimEndWaitInit(int param_0) {
|
|
commonProcInit(PROC_WOLF_SWIM_END_WAIT);
|
|
setSingleAnimeWolfParam(WANM_WAIT_SHAKE, &daAlinkHIO_wlSwim_c0::m.field_0x14);
|
|
setFaceBasicTexture(FTANM_UNK_8F);
|
|
|
|
mDoMtx_multVecZero(mpLinkModel->i_getAnmMtx(3), &field_0x37c8);
|
|
|
|
if (param_0 == 0) {
|
|
mProcVar3.field_0x300e.x = 0;
|
|
} else if (field_0x2fbb == 13) {
|
|
mProcVar3.field_0x300e.x = 2;
|
|
} else {
|
|
mProcVar3.field_0x300e.x = 1;
|
|
}
|
|
|
|
JPABaseEmitter* spC = NULL;
|
|
JPABaseEmitter* sp8 = NULL;
|
|
|
|
field_0x32cc = 0;
|
|
if (param_0 != 0) {
|
|
field_0x31bc = 0;
|
|
} else {
|
|
for (int i = 0; i < 2; i++) {
|
|
field_0x32c0[i] = 0;
|
|
}
|
|
}
|
|
|
|
setWolfSwimEndEffect(&spC, &sp8);
|
|
mProcVar2.field_0x300c = param_0;
|
|
return 1;
|
|
}
|
|
|
|
/* 80138A18-80138B6C 133358 0154+00 1/0 0/0 0/0 .text procWolfSwimEndWait__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfSwimEndWait() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
mDoMtx_multVecZero(mpLinkModel->i_getAnmMtx(3), &field_0x37c8);
|
|
|
|
if (frameCtrl_p->checkPass(lit_7977)) {
|
|
if (mProcVar2.field_0x300c == 0) {
|
|
seStartOnlyReverb(Z2SE_WOLF_WIPE_OFF_WATER);
|
|
} else {
|
|
seStartOnlyReverb(Z2SE_WOLF_WIPE_OFF_DUST);
|
|
}
|
|
}
|
|
|
|
JPABaseEmitter* spC = NULL;
|
|
JPABaseEmitter* sp8 = NULL;
|
|
setWolfSwimEndEffect(&spC, &sp8);
|
|
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
checkNextActionWolf(0);
|
|
} else if (frameCtrl_p->getFrame() > daAlinkHIO_wlSwim_c0::m.field_0x14.mCheckFrame) {
|
|
checkNextActionWolf(1);
|
|
}
|
|
|
|
if (mProcID != PROC_WOLF_SWIM_END_WAIT) {
|
|
if (spC != NULL) {
|
|
spC->stopDrawParticle();
|
|
}
|
|
|
|
if (sp8 != NULL) {
|
|
sp8->stopDrawParticle();
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80138B6C-80138C04 1334AC 0098+00 1/0 0/0 0/0 .text
|
|
* onWolfEnemyBiteAll__9daAlink_cFP10fopAc_ac_cQ29daPy_py_c9daPy_FLG2 */
|
|
bool daAlink_c::onWolfEnemyBiteAll(fopAc_ac_c* param_0, daPy_py_c::daPy_FLG2 param_1) {
|
|
if (field_0x281c.getActor() != NULL) {
|
|
return 0;
|
|
}
|
|
|
|
if (param_1 == 8) {
|
|
if (mCutType != 0x2C && mCutType != 0x2D && mCutType != 0x31 && mCutType != 0x39 &&
|
|
mCutType != 0x32)
|
|
{
|
|
return 0;
|
|
}
|
|
} else if (mCutType != 0x39) {
|
|
return 0;
|
|
}
|
|
|
|
i_onNoResetFlg2(param_1);
|
|
field_0x281c.setData(param_0);
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80138C04-80138C44 133544 0040+00 4/4 0/0 0/0 .text resetWolfEnemyBiteAll__9daAlink_cFv
|
|
*/
|
|
void daAlink_c::resetWolfEnemyBiteAll() {
|
|
field_0x281c.clearData();
|
|
i_offNoResetFlg2(0x58);
|
|
}
|
|
|
|
/* 80138C44-80138CB8 133584 0074+00 1/1 0/0 0/0 .text checkWolfEnemyThrowAction__9daAlink_cFv */
|
|
void daAlink_c::checkWolfEnemyThrowAction() {
|
|
daPy_frameCtrl_c* frameCtrl = &mUpperFrameCtrl[2];
|
|
|
|
if (frameCtrl->checkAnmEnd()) {
|
|
resetUpperAnime(UPPER_2, lit_6109);
|
|
} else if (frameCtrl->checkPass(lit_16210)) {
|
|
resetWolfEnemyBiteAll();
|
|
}
|
|
}
|
|
|
|
/* 80138CB8-80138DC0 1335F8 0108+00 1/1 0/0 0/0 .text setWolfLockDomeModel__9daAlink_cFv
|
|
*/
|
|
void daAlink_c::setWolfLockDomeModel() {
|
|
JKRHeap* prev_heap = setItemHeap();
|
|
|
|
mHeldItemModel = initModel(loadAramBmd(799, 0x1C00), 0x200);
|
|
field_0x0718 = loadAramItemBtk(0x3A6, mHeldItemModel);
|
|
field_0x0724 = loadAramItemBrk(0x324, mHeldItemModel);
|
|
mDoExt_setCurrentHeap(prev_heap);
|
|
|
|
mEquipItem = 0x109;
|
|
mItemVar0.field_0x3018 = 0;
|
|
mSearchBallScale = daAlinkHIO_wlAtLock_c0::m.field_0x28.mSpeed;
|
|
|
|
dComIfGp_setPlayerStatus1(0, 0x800000);
|
|
seStartOnlyReverb(Z2SE_MIDNA_BIND_AREA_OPEN);
|
|
|
|
if (dKy_darkworld_check()) {
|
|
field_0x0724->setFrame(lit_6040);
|
|
} else {
|
|
field_0x0724->setFrame(FLOAT_LABEL(lit_6108));
|
|
}
|
|
}
|
|
|
|
/* 80138DC0-80138F18 133700 0158+00 1/1 0/0 0/0 .text setWolfBallModel__9daAlink_cFv */
|
|
void daAlink_c::setWolfBallModel() {
|
|
JKRHeap* prev_heap = setItemHeap();
|
|
|
|
mHeldItemModel = initModel((J3DModelData*)dComIfG_getObjectRes(l_arcName, 0x25), 0x200);
|
|
field_0x0718 = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 0x49);
|
|
field_0x0718->searchUpdateMaterialID(mHeldItemModel->getModelData());
|
|
|
|
mpHookSound = new Z2SoundObjSimple();
|
|
mDoExt_setCurrentHeap(prev_heap);
|
|
|
|
mEquipItem = 0x10A;
|
|
field_0x33dc = FLOAT_LABEL(lit_6108);
|
|
mDoMtx_multVecZero(mpLinkModel->i_getAnmMtx(6), &mHeldItemRootPos);
|
|
mIronBallCenterPos = mHeldItemRootPos;
|
|
mHookshotTopPos = mHeldItemRootPos;
|
|
|
|
field_0x2f38.setOldPosP(&mHookshotTopPos, &mIronBallCenterPos);
|
|
field_0x32d4 = 0;
|
|
mpHookSound->init(&mHeldItemRootPos, 1);
|
|
}
|
|
|
|
/* 80138F18-80139048 133858 0130+00 2/2 0/0 0/0 .text resetWolfBallGrab__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
void daAlink_c::resetWolfBallGrab() {
|
|
if (mEquipItem == 0x10A) {
|
|
seStartOnlyReverb(Z2SE_OBJ_POU_SOUL_BREAK);
|
|
deleteEquipItem(FALSE, FALSE);
|
|
|
|
if (checkWolfGrabAnimeObj()) {
|
|
resetUpperAnime(UPPER_2, 3.0f);
|
|
}
|
|
|
|
dComIfGp_particle_setColor(0x86CE, &mHeldItemRootPos, &tevStr, NULL, NULL, 0.0f, 0xFF);
|
|
dComIfGp_particle_setColor(0x86CF, &mHeldItemRootPos, &tevStr, NULL, NULL, 0.0f, 0xFF);
|
|
i_onEndResetFlg0(ERFLG0_UNK_20000000);
|
|
i_offNoResetFlg3(FLG3_UNK_200000);
|
|
}
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::resetWolfBallGrab() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/resetWolfBallGrab__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80139048-8013911C 133988 00D4+00 1/1 0/0 0/0 .text checkWolfLockData__9daAlink_cFv */
|
|
#ifdef NONMATCHING
|
|
void daAlink_c::checkWolfLockData() {
|
|
for (int i = 0; i < 10; i++) {
|
|
mWolfLockAcKeep[i].setActor();
|
|
}
|
|
|
|
for (int i = 0; i < mWolfLockNum; i++) {
|
|
if (mWolfLockAcKeep[i].getActor() == NULL) {
|
|
int var_r29 = i;
|
|
|
|
for (; var_r29 < mWolfLockNum - 1; var_r29++) {
|
|
mWolfLockAcKeep[i].setData(mWolfLockAcKeep[i + 1].getActor());
|
|
}
|
|
|
|
mWolfLockAcKeep[var_r29].clearData();
|
|
mWolfLockNum--;
|
|
i--;
|
|
}
|
|
}
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::checkWolfLockData() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/checkWolfLockData__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013911C-8013916C 133A5C 0050+00 1/0 0/0 0/0 .text checkWolfLock__9daAlink_cCFP10fopAc_ac_c */
|
|
bool daAlink_c::checkWolfLock(fopAc_ac_c* i_actor) const {
|
|
u32 actor_id = fopAcM_GetID(i_actor);
|
|
|
|
for (int i = 0; i < mWolfLockNum; i++) {
|
|
if (actor_id == mWolfLockAcKeep[i].getID()) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/* 8013916C-801391DC 133AAC 0070+00 1/0 0/0 0/0 .text cancelWolfLock__9daAlink_cFP10fopAc_ac_c */
|
|
bool daAlink_c::cancelWolfLock(fopAc_ac_c* i_actor) {
|
|
u32 actor_id = fopAcM_GetID(i_actor);
|
|
|
|
for (int i = 0; i < mWolfLockNum; i++) {
|
|
if (actor_id == mWolfLockAcKeep[i].getID()) {
|
|
mWolfLockAcKeep[i].clearData();
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/* 801391DC-801391E4 133B1C 0008+00 0/0 0/0 1/1 .text getWolfLockActorEnd__9daAlink_cFv
|
|
*/
|
|
fopAc_ac_c* daAlink_c::getWolfLockActorEnd() {
|
|
return mWolfLockAcKeep[0].getActor();
|
|
}
|
|
|
|
/* 801391E4-801392A8 133B24 00C4+00 1/1 0/0 0/0 .text
|
|
* searchWolfLockEnemy__9daAlink_cFP10fopAc_ac_cPv */
|
|
void daAlink_c::searchWolfLockEnemy(fopAc_ac_c* i_actor, void* i_data) {
|
|
fopAc_ac_c** lock_actor_pp = (fopAc_ac_c**)i_data;
|
|
|
|
for (int i = 0; i < mWolfLockNum; i++) {
|
|
if (mWolfLockAcKeep[i].getActor() == i_actor) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
fopEn_enemy_c* enemy_p = static_cast<fopEn_enemy_c*>(i_actor);
|
|
if (fopAcM_GetGroup(enemy_p) == 2 && enemy_p->attention_info.flags & 5 &&
|
|
!enemy_p->checkWolfNoLock())
|
|
{
|
|
f32 dist_to_enemy = current.pos.abs2(enemy_p->eyePos);
|
|
|
|
if (enemy_p->eyePos.y >= current.pos.y - lit_6895 && dist_to_enemy < field_0x3478) {
|
|
field_0x3478 = dist_to_enemy;
|
|
*lock_actor_pp = i_actor;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 801392A8-801392E4 133BE8 003C+00 1/1 0/0 0/0 .text
|
|
* daAlink_searchWolfLockEnemy__FP10fopAc_ac_cPv */
|
|
static int daAlink_searchWolfLockEnemy(fopAc_ac_c* i_actor, void* i_data) {
|
|
daAlink_getAlinkActorClass()->searchWolfLockEnemy(i_actor, i_data);
|
|
return 0;
|
|
}
|
|
|
|
/* 801392E4-801393A4 133C24 00C0+00 1/1 0/0 0/0 .text checkWolfComboCnt__9daAlink_cFv */
|
|
void daAlink_c::checkWolfComboCnt() {
|
|
if (!i_dComIfGp_checkPlayerStatus1(0, 0x1000000)) {
|
|
if (mComboCutCount == 2 && i_checkAttentionLock() && mAtCyl.ChkAtHit()) {
|
|
i_onNoResetFlg0(FLG0_UNK_8000);
|
|
}
|
|
|
|
if (field_0x307e > 0) {
|
|
field_0x307e--;
|
|
} else {
|
|
resetCombo(1);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 801393A4-801395B4 133CE4 0210+00 4/4 0/0 0/0 .text checkWolfAttackAction__9daAlink_cFv
|
|
*/
|
|
BOOL daAlink_c::checkWolfAttackAction() {
|
|
if (mComboCutCount == 4) {
|
|
resetCombo(1);
|
|
}
|
|
|
|
mComboCutCount++;
|
|
int atk_direction = getCutDirection();
|
|
|
|
if (checkWolfDashMode()) {
|
|
mComboCutCount = 4;
|
|
return procWolfJumpAttackInit(0);
|
|
} else if (i_checkNoResetFlg0(FLG0_UNK_8000)) {
|
|
if (mComboCutCount == 4) {
|
|
if (atk_direction == DIR_NONE) {
|
|
return procWolfWaitAttackInit(2);
|
|
} else if (atk_direction == DIR_FORWARD || atk_direction == DIR_LEFT) {
|
|
return procWolfJumpAttackInit(0);
|
|
} else {
|
|
return procWolfRollAttackInit(1, 0);
|
|
}
|
|
} else if (atk_direction == DIR_RIGHT || atk_direction == DIR_BACKWARD) {
|
|
return procWolfWaitAttackInit(2);
|
|
} else {
|
|
return procWolfJumpAttackInit(2);
|
|
}
|
|
} else if (mComboCutCount == 4) {
|
|
if (mTargetedActor == NULL) {
|
|
if (atk_direction == DIR_LEFT || atk_direction == DIR_NONE) {
|
|
return procWolfWaitAttackInit(2);
|
|
} else {
|
|
return procWolfJumpAttackInit(0);
|
|
}
|
|
} else if (atk_direction == DIR_LEFT) {
|
|
return procWolfRollAttackInit(0, 0);
|
|
} else if (atk_direction == DIR_RIGHT) {
|
|
return procWolfRollAttackInit(1, 0);
|
|
} else if (atk_direction == DIR_FORWARD) {
|
|
return procWolfJumpAttackInit(0);
|
|
} else {
|
|
return procWolfJumpAttackInit(2);
|
|
}
|
|
} else if (mComboCutCount == 2) {
|
|
return procWolfWaitAttackInit(normalType0[atk_direction]);
|
|
} else if (mComboCutCount == 1 && atk_direction == DIR_FORWARD) {
|
|
return procWolfJumpAttackInit(0);
|
|
} else {
|
|
return procWolfWaitAttackInit(normalType1_50860[atk_direction]);
|
|
}
|
|
}
|
|
|
|
/* 801395B4-80139600 133EF4 004C+00 2/2 0/0 0/0 .text
|
|
* setWolfEnemyThrowUpperAnime__9daAlink_cFQ29daAlink_c12daAlink_WANMf */
|
|
void daAlink_c::setWolfEnemyThrowUpperAnime(daAlink_c::daAlink_WANM i_anmID, f32 param_1) {
|
|
setUpperAnime(i_anmID == WANM_FLING_LEFT ? (u16)0x2BD : (u16)0x2BE, UPPER_2,
|
|
daAlinkHIO_wlAtBite_c0::m.field_0x2C, param_1, -1, lit_6041);
|
|
}
|
|
|
|
/* 80139600-801396F8 133F40 00F8+00 2/2 0/0 0/0 .text
|
|
* setWolfEnemyHangBitePos__9daAlink_cFP13fopEn_enemy_c */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
BOOL daAlink_c::setWolfEnemyHangBitePos(fopEn_enemy_c* i_enemy) {
|
|
if (i_enemy != NULL) {
|
|
current.pos = i_enemy->getDownPos();
|
|
cXyz old_pos = current.pos;
|
|
|
|
current.pos.x -= 60.0f * cM_ssin(shape_angle.y);
|
|
current.pos.x -= 135.0f;
|
|
current.pos.x -= 60.0f * cM_scos(shape_angle.y);
|
|
|
|
if (commonLineCheck(&field_0x3540, ¤t.pos)) {
|
|
current.pos = old_pos;
|
|
return 0;
|
|
} else {
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm BOOL daAlink_c::setWolfEnemyHangBitePos(fopEn_enemy_c* param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setWolfEnemyHangBitePos__9daAlink_cFP13fopEn_enemy_c.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* ############################################################################################## */
|
|
/* 804256EC-804256F8 05240C 000C+00 0/1 0/0 0/0 .bss @50952 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 lit_50952[12];
|
|
#pragma pop
|
|
|
|
/* 804256F8-80425708 052418 000C+04 1/2 0/0 0/0 .bss l_wolfBiteHitMarkScale */
|
|
static Vec l_wolfBiteHitMarkScale;
|
|
|
|
/* 801396F8-801397A4 134038 00AC+00 1/1 0/0 0/0 .text
|
|
* setWolfBiteDamage__9daAlink_cFP13fopEn_enemy_c */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
void daAlink_c::setWolfBiteDamage(fopEn_enemy_c* i_enemy) {
|
|
i_enemy->onWolfBiteDamage();
|
|
|
|
cXyz pos;
|
|
mDoMtx_multVecZero(mpLinkModel->i_getAnmMtx(13), &pos);
|
|
i_dComIfGp_setHitMark(1, i_enemy, &pos, &shape_angle, (cXyz*)&l_wolfBiteHitMarkScale, 0);
|
|
dComIfGp_getVibration().StartShock(3, 31, cXyz(0.0f, 1.0f, 0.0f));
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void daAlink_c::setWolfBiteDamage(fopEn_enemy_c* param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/setWolfBiteDamage__9daAlink_cFP13fopEn_enemy_c.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 801397A4-801398A8 1340E4 0104+00 1/1 0/0 0/0 .text checkWolfLockAttackChargeState__9daAlink_cFv
|
|
*/
|
|
BOOL daAlink_c::checkWolfLockAttackChargeState() {
|
|
return i_checkMidnaRide() && checkMidnaChargeAttack() && !daMidna_c::i_checkMidnaTired() &&
|
|
daMidna_c::checkMidnaRealBody();
|
|
}
|
|
|
|
/* 801398A8-80139908 1341E8 0060+00 1/1 0/0 0/0 .text procWolfRollAttackChargeInit__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfRollAttackChargeInit() {
|
|
commonProcInit(PROC_WOLF_ROLL_ATTACK_CHARGE);
|
|
setSingleAnimeWolfBaseSpeed(WANM_CUT_TURN_CHARGE, FLOAT_LABEL(lit_6108),
|
|
daAlinkHIO_wlAttack_c0::m.mReadyInterpolation);
|
|
voiceStartLevel(Z2SE_WL_V_ROAR);
|
|
return 1;
|
|
}
|
|
|
|
/* 80139908-801399C4 134248 00BC+00 1/0 0/0 0/0 .text procWolfRollAttackCharge__9daAlink_cFv */
|
|
int daAlink_c::procWolfRollAttackCharge() {
|
|
if (checkWolfGroundSpecialMode()) {
|
|
return 1;
|
|
}
|
|
|
|
if (!itemButtonCheck(BTN_B)) {
|
|
checkWolfAttackAction();
|
|
} else if (field_0x2060->getOldFrameRate() < lit_9054) {
|
|
procWolfRollAttackMoveInit();
|
|
} else {
|
|
cLib_chaseF(&mNormalSpeed, FLOAT_LABEL(lit_6108), daAlinkHIO_wlMoveNoP_c0::m.field_0x10);
|
|
setShapeAngleToAtnActor(0);
|
|
current.angle.y = shape_angle.y;
|
|
voiceStartLevel(Z2SE_WL_V_ROAR);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 801399C4-80139A70 134304 00AC+00 1/1 0/0 0/0 .text procWolfRollAttackMoveInit__9daAlink_cFv */
|
|
int daAlink_c::procWolfRollAttackMoveInit() {
|
|
commonProcInit(PROC_WOLF_ROLL_ATTACK_MOVE);
|
|
if (checkZeroSpeedF()) {
|
|
onModeFlg(1);
|
|
}
|
|
|
|
mProcVar0.field_0x3008 = daAlinkHIO_wlAttack_c0::m.mUnkTime;
|
|
mProcVar1.field_0x300a = daAlinkHIO_wlAtLock_c0::m.field_0x28.mEndFrame;
|
|
mProcVar3.field_0x300e.z = 30;
|
|
field_0x3198 = 0;
|
|
field_0x2fe4 = shape_angle.y;
|
|
voiceStartLevel(Z2SE_WL_V_ROAR);
|
|
dComIfGp_setPlayerStatus0(0, 0x40000000);
|
|
return 1;
|
|
}
|
|
|
|
/* 80139A70-80139DE0 1343B0 0370+00 1/0 0/0 0/0 .text procWolfRollAttackMove__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfRollAttackMove() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
|
|
if (checkWolfGroundSpecialMode()) {
|
|
return 1;
|
|
}
|
|
|
|
if (!swordButton() || mProcVar1.field_0x300a == 0) {
|
|
if (mTargetedActor != NULL) {
|
|
shape_angle.y = cLib_targetAngleY(¤t.pos, &mTargetedActor->eyePos);
|
|
current.angle.y = shape_angle.y;
|
|
}
|
|
|
|
if (mProcVar0.field_0x3008 == 0) {
|
|
if (mWolfLockNum != 0) {
|
|
resetCombo(1);
|
|
return procWolfLockAttackInit(0);
|
|
} else {
|
|
return procWolfRollAttackInit(1, 0);
|
|
}
|
|
}
|
|
|
|
return checkWolfAttackAction();
|
|
}
|
|
|
|
if (mProcVar0.field_0x3008 != 0) {
|
|
mProcVar0.field_0x3008--;
|
|
|
|
if (mProcVar0.field_0x3008 == 0 && checkWolfLockAttackChargeState()) {
|
|
setWolfLockDomeModel();
|
|
}
|
|
} else {
|
|
i_onResetFlg0(RFLG0_UNK_10);
|
|
|
|
if (mEquipItem == 0x109) {
|
|
seStartOnlyReverbLevel(Z2SE_MIDNA_BIND_AREA_SUS);
|
|
mProcVar1.field_0x300a--;
|
|
|
|
if (mSearchBallScale < daAlinkHIO_wlAtLock_c0::m.field_0x28.mStartFrame &&
|
|
cLib_chaseF(&mSearchBallScale, daAlinkHIO_wlAtLock_c0::m.field_0x28.mStartFrame,
|
|
daAlinkHIO_wlAtLock_c0::m.field_0x28.mInterpolation))
|
|
{
|
|
mItemVar0.field_0x3018 = 1;
|
|
}
|
|
|
|
if (mWolfLockNum < 10) {
|
|
field_0x3478 = mSearchBallScale * mSearchBallScale;
|
|
|
|
fopAc_ac_c* lock_actor_p = NULL;
|
|
fopAcIt_Executor((fopAcIt_ExecutorFunc)daAlink_searchWolfLockEnemy, &lock_actor_p);
|
|
|
|
if (lock_actor_p != NULL) {
|
|
for (int i = mWolfLockNum - 1; i >= 0; i--) {
|
|
mWolfLockAcKeep[i + 1].setData(mWolfLockAcKeep[i].getActor());
|
|
}
|
|
|
|
mWolfLockAcKeep[0].setData(lock_actor_p);
|
|
mWolfLockNum++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
voiceStartLevel(Z2SE_WL_V_ROAR);
|
|
|
|
BOOL var_r28 = 0;
|
|
f32 anm_speed = getWolfLieMoveAnmSpeed();
|
|
|
|
if (frameCtrl_p->getRate() > 0.0f) {
|
|
frameCtrl_p->setRate(anm_speed);
|
|
} else if (frameCtrl_p->getRate() < 0.0f) {
|
|
frameCtrl_p->setRate(-anm_speed);
|
|
} else {
|
|
var_r28 = 1;
|
|
}
|
|
|
|
setWolfAtnMoveDirection();
|
|
|
|
if (var_r28 == true || frameCtrl_p->checkPass(0.0f) || frameCtrl_p->checkPass(15.0f)) {
|
|
if (checkInputOnR()) {
|
|
if (field_0x2f98 != 1) {
|
|
frameCtrl_p->setRate(anm_speed);
|
|
frameCtrl_p->setLoop(0);
|
|
} else {
|
|
frameCtrl_p->setRate(-anm_speed);
|
|
frameCtrl_p->setLoop(frameCtrl_p->getEnd());
|
|
}
|
|
|
|
initBasAnime();
|
|
} else if (!var_r28) {
|
|
stopHalfMoveAnime(15.0f);
|
|
}
|
|
}
|
|
|
|
setSpeedAndAngleWolfAtn();
|
|
mNormalSpeed = getWolfLieMoveSpeed();
|
|
if (mNormalSpeed < 0.0f) {
|
|
mNormalSpeed *= -1.0f;
|
|
}
|
|
|
|
if (checkZeroSpeedF()) {
|
|
onModeFlg(1);
|
|
} else {
|
|
offModeFlg(1);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfRollAttackMove() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfRollAttackMove__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80139DE0-8013A4F8 134720 0718+00 5/5 0/0 0/0 .text procWolfJumpAttackInit__9daAlink_cFi */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfJumpAttackInit(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfJumpAttackInit__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 8013A4F8-8013A7EC 134E38 02F4+00 1/0 0/0 0/0 .text procWolfJumpAttack__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfJumpAttack() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
|
|
if (mProcVar3.field_0x300e.x != 0 && mNormalSpeed > daAlinkHIO_wlAtCjump_c0::m.field_0x5C) {
|
|
cLib_chaseF(&mNormalSpeed, daAlinkHIO_wlAtCjump_c0::m.field_0x5C,
|
|
daAlinkHIO_wlAtCjump_c0::m.field_0x60);
|
|
}
|
|
|
|
if (mAtCyl.ChkAtHit()) {
|
|
field_0x3198 = 1;
|
|
|
|
if (mProcVar3.field_0x300e.y != 0 && mProcVar3.field_0x300e.x == 0) {
|
|
mNormalSpeed *= daAlinkHIO_wlAtCjump_c0::m.field_0x58;
|
|
mProcVar3.field_0x300e.x = 1;
|
|
}
|
|
}
|
|
|
|
if (checkWolfAttackReverse(field_0x32cc)) {
|
|
return 1;
|
|
}
|
|
|
|
if (mLinkAcch.ChkGroundHit() && checkWolfLandAction(0)) {
|
|
return 1;
|
|
}
|
|
|
|
if (mLinkAcch.ChkGroundHit() && checkSlideAction()) {
|
|
dComIfGp_getVibration().StartShock(1, 15, cXyz(0.0f, 1.0f, 0.0f));
|
|
return 1;
|
|
}
|
|
|
|
field_0x32cc = 1;
|
|
|
|
if (mProcVar1.field_0x300a != 1) {
|
|
field_0x307e = daAlinkHIO_wlAttack_c0::m.mComboDuration;
|
|
}
|
|
|
|
if (mProcVar0.field_0x3008 != 0 && checkFrontWallTypeAction()) {
|
|
return 1;
|
|
}
|
|
|
|
field_0x2f99 = 7;
|
|
|
|
if (mLinkAcch.ChkGroundHit()) {
|
|
dComIfGp_getVibration().StartShock(1, 15, cXyz(0.0f, 1.0f, 0.0f));
|
|
|
|
if (i_checkNoResetFlg2(FLG2_UNK_8)) {
|
|
procWolfEnemyThrowInit(4);
|
|
} else if (mProcVar3.field_0x300e.z != 0 || mProcVar1.field_0x300a == 2 ||
|
|
mProcVar1.field_0x300a == 3)
|
|
{
|
|
procWolfJumpAttackSlideLandInit(field_0x3198, 1, mProcVar1.field_0x300a == 2);
|
|
} else {
|
|
procWolfJumpAttackNormalLandInit(0);
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
if (i_checkNoResetFlg2(FLG2_UNK_40)) {
|
|
return procWolfEnemyHangBiteInit();
|
|
}
|
|
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
if (mProcVar2.field_0x300c == 0) {
|
|
mProcVar2.field_0x300c = 1;
|
|
setSingleAnimeWolfBaseSpeed(WANM_ATTACK_A, daAlinkHIO_wlAtNjump_c0::m.field_0x24,
|
|
daAlinkHIO_wlAtNjump_c0::m.field_0x28);
|
|
i_onResetFlg0(RFLG0_UNK_2);
|
|
} else {
|
|
i_onResetFlg0(RFLG0_UNK_2);
|
|
}
|
|
} else {
|
|
i_onResetFlg0(RFLG0_UNK_2);
|
|
|
|
if (current.pos.y < mLastJumpPos.y - daAlinkHIO_wlAttack_c0::m.mFallHeight) {
|
|
procWolfFallInit(2, daAlinkHIO_wlAttack_c0::m.mFallInterpolation);
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfJumpAttack() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfJumpAttack__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013A7EC-8013A8A0 13512C 00B4+00 2/2 0/0 0/0 .text procWolfJumpAttackKickInit__9daAlink_cFv */
|
|
int daAlink_c::procWolfJumpAttackKickInit() {
|
|
commonProcInit(PROC_WOLF_JUMP_AT_KICK);
|
|
setSingleAnimeWolfParam(WANM_JUMP_KICK, &daAlinkHIO_wlAtCjump_c0::m.field_0x14);
|
|
|
|
f32 tmp_0 = FLOAT_LABEL(lit_6108);
|
|
speed.y = tmp_0;
|
|
mNormalSpeed = tmp_0;
|
|
setSpecialGravity(tmp_0, maxFallSpeed, 0);
|
|
|
|
voiceStart(Z2SE_WL_V_ATTACK_S);
|
|
seStartOnlyReverb(Z2SE_WOLFATTACK_WIND_S);
|
|
dComIfGp_setPlayerStatus1(0, 0x200000);
|
|
return 1;
|
|
}
|
|
|
|
/* 8013A8A0-8013A8FC 1351E0 005C+00 1/0 0/0 0/0 .text procWolfJumpAttackKick__9daAlink_cFv */
|
|
int daAlink_c::procWolfJumpAttackKick() {
|
|
if (mUnderFrameCtrl[0].checkAnmEnd()) {
|
|
procWolfBackJumpInit(2);
|
|
dComIfGp_setPlayerStatus1(0, 0x200000);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013A8FC-8013AAC4 13523C 01C8+00 2/2 0/0 0/0 .text
|
|
* procWolfJumpAttackSlideLandInit__9daAlink_cFiii */
|
|
int daAlink_c::procWolfJumpAttackSlideLandInit(int param_0, int param_1, int param_2) {
|
|
commonProcInit(PROC_WOLF_JUMP_AT_SLIDE_LAND);
|
|
|
|
if (mTargetedActor == NULL || !param_0 ||
|
|
(fopAcM_GetGroup(mTargetedActor) == 2 &&
|
|
static_cast<fopEn_enemy_c*>(mTargetedActor)->checkDeadFlg()))
|
|
{
|
|
mProcVar3.field_0x300e.y = 0;
|
|
} else {
|
|
mProcVar3.field_0x300e.y = 1;
|
|
}
|
|
|
|
if ((mTargetedActor != NULL && fopAcM_GetGroup(mTargetedActor) == 2 && param_0 &&
|
|
!static_cast<fopEn_enemy_c*>(mTargetedActor)->checkDeadFlg() &&
|
|
fopAcM_seenActorAngleY(this, mTargetedActor) > 0x5000) ||
|
|
param_2)
|
|
{
|
|
setSingleAnimeWolfParam(WANM_ATTACK_A_END_BACK, &daAlinkHIO_wlAtLand_c0::m.field_0x28);
|
|
mProcVar2.field_0x300c = 1;
|
|
field_0x3588.set(-l_wolfBaseAnime.x, l_wolfBaseAnime.y, -l_wolfBaseAnime.z);
|
|
field_0x3478 = daAlinkHIO_wlAtLand_c0::m.field_0x28.mCheckFrame;
|
|
} else {
|
|
setSingleAnimeWolfParam(WANM_ATTACK_A_END_FRONT, &daAlinkHIO_wlAtLand_c0::m.field_0x14);
|
|
mProcVar2.field_0x300c = 0;
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
field_0x3478 = daAlinkHIO_wlAtLand_c0::m.field_0x14.mCheckFrame;
|
|
}
|
|
|
|
field_0x2f9d = 4;
|
|
setFootEffectProcType(1);
|
|
mProcVar0.field_0x3008 = param_2;
|
|
|
|
mNormalSpeed *= lit_5943;
|
|
if (param_1) {
|
|
field_0x2f99 = 4;
|
|
}
|
|
|
|
mProcVar3.field_0x300e.z = 0;
|
|
field_0x307e = daAlinkHIO_wlAttack_c0::m.mComboDuration;
|
|
field_0x2f98 = 0;
|
|
return 1;
|
|
}
|
|
|
|
/* 8013AAC4-8013AC44 135404 0180+00 1/0 0/0 0/0 .text procWolfJumpAttackSlideLand__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfJumpAttackSlideLand() {
|
|
if (checkWolfGroundSpecialMode()) {
|
|
return 1;
|
|
}
|
|
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
|
|
field_0x2f99 = 4;
|
|
cLib_addCalc(&mNormalSpeed, 0.0f, 0.3f, daAlinkHIO_wlAtLand_c0::m.field_0x3C, 0.5f);
|
|
|
|
if (mProcVar3.field_0x300e.y != 0) {
|
|
setShapeAngleToAtnActor(0);
|
|
}
|
|
|
|
setComboReserb();
|
|
checkCutTurnCharge();
|
|
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
if (checkZeroSpeedF()) {
|
|
current.angle.y = shape_angle.y;
|
|
|
|
if (mProcVar0.field_0x3008 != 0) {
|
|
procWolfJumpAttackInit(3);
|
|
} else {
|
|
checkNextActionWolf(0);
|
|
}
|
|
}
|
|
} else if (frameCtrl_p->getFrame() > field_0x3478 && mNormalSpeed <= 5.0f) {
|
|
s16 prev_angle = current.angle.y;
|
|
current.angle.y = shape_angle.y;
|
|
|
|
if (mProcVar0.field_0x3008 != 0) {
|
|
procWolfJumpAttackInit(3);
|
|
} else if (!checkNextActionWolf(1)) {
|
|
current.angle.y = prev_angle;
|
|
}
|
|
} else if (mNormalSpeed > 5.0f) {
|
|
field_0x2f9d = 4;
|
|
seStartMapInfoLevel(Z2SE_FN_WOLF_SLIP);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfJumpAttackSlideLand() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfJumpAttackSlideLand__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013AC44-8013ACF4 135584 00B0+00 1/1 0/0 0/0 .text
|
|
* procWolfJumpAttackNormalLandInit__9daAlink_cFi */
|
|
int daAlink_c::procWolfJumpAttackNormalLandInit(int param_0) {
|
|
commonProcInit(PROC_WOLF_JUMP_AT_NORMAL_LAND);
|
|
setSingleAnimeWolfParam(WANM_ATTACK_A_END, &daAlinkHIO_wlAtLand_c0::m.field_0x0);
|
|
|
|
setFootEffectProcType(2);
|
|
field_0x2f9d = 0x18;
|
|
mNormalSpeed = FLOAT_LABEL(lit_6108);
|
|
mProcVar3.field_0x300e.z = 0;
|
|
mProcVar2.field_0x300c = param_0;
|
|
field_0x2f99 = 12;
|
|
field_0x307e = daAlinkHIO_wlAttack_c0::m.mComboDuration;
|
|
|
|
if (param_0 != 0) {
|
|
dComIfGp_setPlayerStatus1(0, 0x200000);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013ACF4-8013ADF0 135634 00FC+00 1/0 0/0 0/0 .text procWolfJumpAttackNormalLand__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfJumpAttackNormalLand() {
|
|
if (checkWolfGroundSpecialMode()) {
|
|
return 1;
|
|
}
|
|
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
field_0x2f99 = 4;
|
|
cLib_chaseF(&mNormalSpeed, FLOAT_LABEL(lit_6108), daAlinkHIO_wlMoveNoP_c0::m.field_0x10);
|
|
setComboReserb();
|
|
checkCutTurnCharge();
|
|
|
|
if (frameCtrl->checkAnmEnd()) {
|
|
checkNextActionWolf(0);
|
|
} else if (frameCtrl->getFrame() > daAlinkHIO_wlAtLand_c0::m.field_0x0.mCheckFrame) {
|
|
if (mProcVar2.field_0x300c != 0) {
|
|
shape_angle.y -= -0x8000;
|
|
return procWolfJumpAttackInit(3);
|
|
}
|
|
|
|
if (checkNextActionWolf(1)) {
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013ADF0-8013AFC0 135730 01D0+00 2/2 0/0 0/0 .text procWolfWaitAttackInit__9daAlink_cFi */
|
|
int daAlink_c::procWolfWaitAttackInit(int i_attackType) {
|
|
const daAlinkHIO_wlAtWait_c1* atk_hio;
|
|
const daAlink_WCutParamTbl* atk_params = &dataTabl[i_attackType];
|
|
|
|
commonProcInit(PROC_WOLF_WAIT_ATTACK);
|
|
setCutType(atk_params->m_cutType);
|
|
mProcVar2.field_0x300c = 0;
|
|
|
|
if (i_attackType == 2) {
|
|
atk_hio = &daAlinkHIO_wlAtWaTl_c0::m;
|
|
mProcVar3.field_0x300e.x = 0;
|
|
} else if (i_attackType == 1) {
|
|
atk_hio = &daAlinkHIO_wlAtWaSc_c0::m;
|
|
mProcVar3.field_0x300e.x = 1;
|
|
} else {
|
|
atk_hio = &daAlinkHIO_wlAtWaLr_c0::m;
|
|
mProcVar3.field_0x300e.x = 1;
|
|
}
|
|
|
|
f32 var_f2;
|
|
if (mComboCutCount == 4) {
|
|
setCylAtParam(0x80000000, dCcG_At_Spl_UNK_1, 3, 4, 3, atk_hio->field_0x34,
|
|
atk_hio->field_0x38);
|
|
field_0x3478 = atk_hio->field_0x0.mCheckFrame;
|
|
mProcVar0.field_0x3008 = atk_hio->field_0x14;
|
|
var_f2 = atk_hio->field_0x0.mStartFrame;
|
|
} else {
|
|
setCylAtParam(0x80000000, dCcG_At_Spl_UNK_0, 1, 4, 2, atk_hio->field_0x34,
|
|
atk_hio->field_0x38);
|
|
field_0x3478 = atk_hio->field_0x28;
|
|
mProcVar0.field_0x3008 = atk_hio->field_0x16;
|
|
var_f2 = atk_hio->field_0x2C;
|
|
}
|
|
|
|
setSingleAnimeWolf(atk_params->m_anmID, atk_hio->field_0x0.mSpeed, var_f2,
|
|
atk_hio->field_0x0.mEndFrame, atk_hio->field_0x0.mInterpolation);
|
|
|
|
if (mTargetedActor != NULL) {
|
|
shape_angle.y = cLib_targetAngleY(¤t.pos, &mTargetedActor->eyePos);
|
|
}
|
|
|
|
current.angle.y = shape_angle.y;
|
|
mProcVar3.field_0x300e.z = 0;
|
|
mProcVar1.field_0x300a = 2;
|
|
field_0x347c = atk_hio->field_0x20;
|
|
field_0x3480 = atk_hio->field_0x24;
|
|
field_0x3484 = atk_hio->field_0x1C;
|
|
field_0x3488 = atk_hio->field_0x18;
|
|
field_0x3438 = atk_hio->field_0x30;
|
|
field_0x307e = daAlinkHIO_wlAttack_c0::m.mComboDuration;
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
|
|
if (mComboCutCount != 1) {
|
|
field_0x2f99 = 13;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013AFC0-8013B2A0 135900 02E0+00 1/0 0/0 0/0 .text procWolfWaitAttack__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfWaitAttack() {
|
|
if (checkWolfGroundSpecialMode()) {
|
|
return 1;
|
|
}
|
|
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
|
|
field_0x2f99 = 5;
|
|
cLib_chaseF(&mNormalSpeed, 0.0f, daAlinkHIO_wlMoveNoP_c0::m.field_0x10);
|
|
setComboReserb();
|
|
checkCutTurnCharge();
|
|
|
|
if (mCutType != CUT_TYPE_WOLF_B_BACK && checkWolfAttackReverse(mProcVar1.field_0x300a == 0)) {
|
|
return 1;
|
|
}
|
|
|
|
if (i_checkNoResetFlg2(FLG2_UNK_8) && frameCtrl_p->getFrame() >= 14.0f) {
|
|
return procWolfEnemyThrowInit(mCutType == CUT_TYPE_WOLF_B_LEFT ? 2 : 3);
|
|
}
|
|
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
resetCombo(1);
|
|
|
|
if (mDemo.getDemoMode() == 0x2B) {
|
|
dComIfGp_evmng_cutEnd(field_0x3184);
|
|
} else if (mProcVar0.field_0x3008 > 0) {
|
|
if (!(frameCtrl_p->getFrame() > field_0x3478) || !checkNextActionWolf(1)) {
|
|
mProcVar0.field_0x3008--;
|
|
}
|
|
} else {
|
|
mNormalSpeed = 0.0f;
|
|
checkNextActionWolf(0);
|
|
}
|
|
} else if (frameCtrl_p->getFrame() > field_0x3478) {
|
|
if (!checkNextActionWolf(1)) {
|
|
resetCombo(1);
|
|
}
|
|
} else {
|
|
setShapeAngleToAtnActor(1);
|
|
current.angle.y = shape_angle.y;
|
|
|
|
if (frameCtrl_p->checkPass(field_0x3484)) {
|
|
mNormalSpeed = field_0x3488;
|
|
}
|
|
|
|
if (mProcVar2.field_0x300c == 0 && frameCtrl_p->getFrame() >= 3.0f) {
|
|
if (mComboCutCount == 4) {
|
|
voiceStart(Z2SE_WL_V_ATTACK_L);
|
|
} else {
|
|
voiceStart(Z2SE_WL_V_ATTACK_S);
|
|
}
|
|
|
|
if (mProcVar3.field_0x300e.x == 0) {
|
|
seStartOnlyReverb(Z2SE_WOLFATTACK_WIND_TAIL);
|
|
} else {
|
|
seStartOnlyReverb(Z2SE_WOLFATTACK_WIND_S);
|
|
}
|
|
|
|
mProcVar2.field_0x300c = 1;
|
|
}
|
|
|
|
if (frameCtrl_p->getFrame() >= field_0x347c && frameCtrl_p->getFrame() < field_0x3480) {
|
|
i_onResetFlg0(RFLG0_UNK_2);
|
|
|
|
if (mProcVar1.field_0x300a != 0) {
|
|
mProcVar1.field_0x300a--;
|
|
}
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfWaitAttack() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfWaitAttack__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013B2A0-8013B424 135BE0 0184+00 5/5 0/0 0/0 .text procWolfRollAttackInit__9daAlink_cFii */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfRollAttackInit(int param_0, int param_1) {
|
|
commonProcInit(PROC_WOLF_ROLL_ATTACK);
|
|
|
|
if (param_0 == 2) {
|
|
param_0 = getCutTurnDirection();
|
|
}
|
|
|
|
daAlink_WANM anm;
|
|
if (param_0 == 1) {
|
|
anm = WANM_CUT_TURN_RIGHT;
|
|
mProcVar2.field_0x300c = 1;
|
|
setCutType(CUT_TYPE_WOLF_TURN_RIGHT);
|
|
} else {
|
|
anm = WANM_CUT_TURN_LEFT;
|
|
mProcVar2.field_0x300c = 0;
|
|
setCutType(CUT_TYPE_WOLF_TURN_LEFT);
|
|
}
|
|
|
|
setSingleAnimeWolfParam(anm, &daAlinkHIO_wlAtRoll_c0::m.field_0x0);
|
|
field_0x3478 = daAlinkHIO_wlAtRoll_c0::m.field_0x14;
|
|
setCylAtParam(0x40000000, dCcG_At_Spl_UNK_1, 3, 4, 3, field_0x3478 * 0.5f, 155.0f);
|
|
mNormalSpeed = 0.0f;
|
|
mProcVar3.field_0x300e.x = param_1;
|
|
|
|
if (param_1 != 0) {
|
|
mUnderFrameCtrl[0].setStart(daAlinkHIO_wlAtRoll_c0::m.field_0x1C);
|
|
} else {
|
|
seStartOnlyReverb(Z2SE_WOLFATTACK_WIND_L);
|
|
voiceStart(Z2SE_WL_V_ATTACK_SPIN);
|
|
}
|
|
|
|
current.angle.y = shape_angle.y;
|
|
field_0x3180 = 0;
|
|
|
|
if (getMidnaActor() != NULL) {
|
|
// NOTE: this call does nothing
|
|
getMidnaActor()->resetRatBody();
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfRollAttackInit(int param_0, int param_1) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfRollAttackInit__9daAlink_cFii.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013B424-8013B528 135D64 0104+00 1/0 0/0 0/0 .text procWolfRollAttack__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfRollAttack() {
|
|
if (checkWolfGroundSpecialMode()) {
|
|
return 1;
|
|
}
|
|
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
cLib_chaseF(&mNormalSpeed, 0.0f, daAlinkHIO_wlMoveNoP_c0::m.field_0x10);
|
|
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
checkNextActionWolf(0);
|
|
} else if (frameCtrl_p->getFrame() > daAlinkHIO_wlAtRoll_c0::m.field_0x0.mCheckFrame) {
|
|
checkNextActionWolf(1);
|
|
} else if (mProcVar3.field_0x300e.x == 0 && frameCtrl_p->getFrame() >= 4.0f &&
|
|
frameCtrl_p->getFrame() < 13.0f)
|
|
{
|
|
if (!i_checkNoResetFlg0(FLG0_UNK_40)) {
|
|
mNormalSpeed = daAlinkHIO_wlAtRoll_c0::m.field_0x18;
|
|
}
|
|
|
|
i_onResetFlg0(RFLG0_UNK_2);
|
|
cLib_chaseF(mAtCyl.GetRP(), field_0x3478, 20.0f);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfRollAttack() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfRollAttack__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013B528-8013B808 135E68 02E0+00 1/1 0/0 0/0 .text procWolfDownAttackInit__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfDownAttackInit() {
|
|
commonProcInit(PROC_WOLF_DOWN_ATTACK);
|
|
setSingleAnimeWolfParam(WANM_ATTACK_POE_START, &daAlinkHIO_wlAtDown_c0::m.field_0x0);
|
|
|
|
cXyz sp24(static_cast<fopEn_enemy_c*>(mTargetedActor)->getDownPos());
|
|
sp24.y += 50.0f;
|
|
|
|
if (fopAcM_gc_c::gndCheck(&sp24)) {
|
|
sp24.y = fopAcM_gc_c::getGroundY();
|
|
} else {
|
|
sp24.y -= 50.0f;
|
|
}
|
|
|
|
current.angle.y = cLib_targetAngleY(¤t.pos, &sp24);
|
|
|
|
sp24.x -= cM_ssin(current.angle.y) * 80.0f;
|
|
sp24.z -= cM_scos(current.angle.y) * 80.0f;
|
|
|
|
f32 var_f1 = current.pos.absXZ(sp24);
|
|
if (var_f1 > 800.0f) {
|
|
var_f1 = 800.0f;
|
|
}
|
|
|
|
speed.y = daAlinkHIO_wlAtDown_c0::m.field_0x90;
|
|
|
|
f32 temp_f3 = speed.y + gravity;
|
|
f32 var_f0 = temp_f3 * temp_f3 + gravity * 2.0f * (sp24.y - current.pos.y);
|
|
if (var_f0 < 0.0f) {
|
|
mNormalSpeed = (var_f1 * gravity) / -temp_f3;
|
|
} else {
|
|
mNormalSpeed = (var_f1 * gravity) / (-JMAFastSqrt(var_f0) - temp_f3);
|
|
}
|
|
|
|
mProcVar2.field_0x300c = 0;
|
|
field_0x280c.setData(mTargetedActor);
|
|
voiceStart(Z2SE_WL_V_ATTACK_POU_ST);
|
|
seStartOnlyReverb(Z2SE_WOLFATTACK_WIND_S);
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfDownAttackInit() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfDownAttackInit__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013B808-8013B964 136148 015C+00 1/0 0/0 0/0 .text procWolfDownAttack__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfDownAttack() {
|
|
if (mLinkAcch.ChkGroundHit() && speed.y <= 0.0f) {
|
|
fopEn_enemy_c* enemy_p = (fopEn_enemy_c*)field_0x280c.getActor();
|
|
|
|
if (enemy_p != NULL && enemy_p->checkDownFlg() &&
|
|
eyePos.abs2XZ(enemy_p->getDownPos()) < 10000.0f &&
|
|
fabsf(enemy_p->current.pos.y - current.pos.y) < 50.0f)
|
|
{
|
|
procWolfDownAtLandInit(enemy_p);
|
|
} else {
|
|
procWolfDownAtMissLandInit();
|
|
}
|
|
} else if (checkAnmEnd(mUnderFrameCtrl)) {
|
|
if (checkUnderMove0BckNoArcWolf(WANM_ATTACK_POE_START)) {
|
|
setSingleAnimeWolfParam(WANM_ATTACK_POE, &daAlinkHIO_wlAtDown_c0::m.field_0x14);
|
|
shape_angle.y = current.angle.y;
|
|
}
|
|
} else if (checkUnderMove0BckNoArcWolf(WANM_ATTACK_POE_START)) {
|
|
cLib_addCalcAngleS(&shape_angle.y, current.angle.y, 2, 0x2000, 0x800);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfDownAttack() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfDownAttack__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013B964-8013BA44 1362A4 00E0+00 1/1 0/0 0/0 .text
|
|
* procWolfDownAtLandInit__9daAlink_cFP13fopEn_enemy_c */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfDownAtLandInit(fopEn_enemy_c* i_enemy) {
|
|
commonProcInit(PROC_WOLF_DOWN_AT_LAND);
|
|
field_0x280c.setData(i_enemy);
|
|
setSingleAnimeWolfParam(WANM_ATTACK_POE_END, &daAlinkHIO_wlAtDown_c0::m.field_0x28);
|
|
|
|
field_0x2f9d = 4;
|
|
setFootEffectProcType(2);
|
|
i_enemy->onWolfDownStartFlg();
|
|
mNormalSpeed = 0.0f;
|
|
setWolfBallModel();
|
|
|
|
voiceStart(Z2SE_WL_V_ATTACK_POU_BITE);
|
|
dComIfGp_getVibration().StartShock(2, 15, cXyz(0.0f, 1.0f, 0.0f));
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfDownAtLandInit(fopEn_enemy_c* param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfDownAtLandInit__9daAlink_cFP13fopEn_enemy_c.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013BA44-8013BC94 136384 0250+00 1/0 0/0 0/0 .text procWolfDownAtLand__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfDownAtLand() {
|
|
if (checkWolfGroundSpecialMode()) {
|
|
return 1;
|
|
}
|
|
|
|
fopEn_enemy_c* enemy_p = (fopEn_enemy_c*)field_0x280c.getActor();
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
if (checkUnderMove0BckNoArcWolf(WANM_PULL_OUT)) {
|
|
setUpperAnime(0x2DA, UPPER_2, 0.0f, 20.0f, -1, -1.0f);
|
|
|
|
if (enemy_p != NULL) {
|
|
enemy_p->onWolfDownPullEndFlg();
|
|
|
|
dComIfGp_particle_setColor(0x86CA, &enemy_p->getDownPos(), &tevStr, NULL, NULL,
|
|
0.0f, 0xFF);
|
|
dComIfGp_particle_setColor(0x86CB, &enemy_p->getDownPos(), &tevStr, NULL, NULL,
|
|
0.0f, 0xFF);
|
|
dComIfGp_particle_setColor(0x86CC, &enemy_p->getDownPos(), &tevStr, NULL, NULL,
|
|
0.0f, 0xFF);
|
|
}
|
|
|
|
return procWolfBackJumpInit(1);
|
|
}
|
|
|
|
setSingleAnimeWolfParam(WANM_PULL_OUT, &daAlinkHIO_wlAtDown_c0::m.field_0x78);
|
|
dComIfGp_getVibration().StartShock(2, 15, cXyz(0.0f, 1.0f, 0.0f));
|
|
} else if (checkUnderMove0BckNoArcWolf(WANM_ATTACK_POE_END) &&
|
|
(frameCtrl_p->checkPass(9.0f) || frameCtrl_p->checkPass(16.0f)))
|
|
{
|
|
dComIfGp_getVibration().StartShock(2, 15, cXyz(0.0f, 1.0f, 0.0f));
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfDownAtLand() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfDownAtLand__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013BC94-8013BD54 1365D4 00C0+00 1/1 0/0 0/0 .text procWolfDownAtMissLandInit__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfDownAtMissLandInit() {
|
|
commonProcInit(PROC_WOLF_DOWN_AT_MISS_LAND);
|
|
setSingleAnimeWolfParam(WANM_ATTACK_POE_MISS, &daAlinkHIO_wlAtDown_c0::m.field_0x64);
|
|
setFaceBasicTexture(FTANM_UNK_97);
|
|
|
|
mNormalSpeed = 0.0f;
|
|
setFootEffectProcType(1);
|
|
field_0x2f9d = 0x18;
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
|
|
dComIfGp_getVibration().StartShock(1, 15, cXyz(0.0f, 1.0f, 0.0f));
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfDownAtMissLandInit() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfDownAtMissLandInit__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013BD54-8013BE24 136694 00D0+00 1/0 0/0 0/0 .text procWolfDownAtMissLand__9daAlink_cFv */
|
|
int daAlink_c::procWolfDownAtMissLand() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
if (checkWolfGroundSpecialMode()) {
|
|
return 1;
|
|
}
|
|
|
|
field_0x2f99 = 4;
|
|
|
|
if (frameCtrl->checkAnmEnd()) {
|
|
checkNextActionWolf(0);
|
|
} else if (frameCtrl->getFrame() > daAlinkHIO_wlAtDown_c0::m.field_0x64.mCheckFrame) {
|
|
checkNextActionWolf(1);
|
|
} else if (frameCtrl->getFrame() >= lit_6109 && frameCtrl->getFrame() < lit_8783) {
|
|
seStartMapInfoLevel(Z2SE_FN_WOLF_SLIP);
|
|
field_0x2f9d = 0x18;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013BE24-8013C3E4 136764 05C0+00 2/2 0/0 0/0 .text procWolfLockAttackInit__9daAlink_cFi */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfLockAttackInit(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfLockAttackInit__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 8013C3E4-8013C630 136D24 024C+00 1/0 0/0 0/0 .text procWolfLockAttack__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfLockAttack() {
|
|
BOOL var_r29 = false;
|
|
for (int i = 0; i < 3; i++) {
|
|
if (checkAtShieldHit(field_0x850[i])) {
|
|
var_r29 = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (var_r29 || (checkAtShieldHit(mAtCyl) && (mAtCyl.GetAtHitAc() == NULL ||
|
|
fopAcM_GetName(mAtCyl.GetAtHitAc()) != PROC_E_FB)))
|
|
{
|
|
return procCoLargeDamageInit(-4, 1, 0, 0, NULL, 2);
|
|
}
|
|
|
|
if (checkWolfAttackReverse(1)) {
|
|
return 1;
|
|
}
|
|
|
|
if (mProcVar0.field_0x3008 != 0) {
|
|
mProcVar0.field_0x3008--;
|
|
|
|
if (mProcVar0.field_0x3008 == 0) {
|
|
setSpecialGravity(daAlinkHIO_wlAtLock_c0::m.field_0x48, maxFallSpeed, 0);
|
|
}
|
|
} else if (mNormalSpeed > 30.0f) {
|
|
cLib_addCalc(&mNormalSpeed, 30.0f, 0.3f, 5.0f, 1.0f);
|
|
}
|
|
|
|
if (checkAnmEnd(mUnderFrameCtrl) && checkUnderMove0BckNoArcWolf(WANM_ATTACK_A_START)) {
|
|
setSingleAnimeWolfBaseSpeed(WANM_ATTACK_A, daAlinkHIO_wlAtNjump_c0::m.field_0x24,
|
|
daAlinkHIO_wlAtNjump_c0::m.field_0x28);
|
|
}
|
|
|
|
if (mLinkAcch.ChkGroundHit() || (mProcVar3.field_0x300e.z != 0 && current.pos.y < mWaterY)) {
|
|
if (!mLinkAcch.ChkGroundHit()) {
|
|
current.pos.y = mWaterY;
|
|
}
|
|
|
|
if (mWolfLockNum != 0) {
|
|
procWolfLockAttackTurnInit(mProcVar1.field_0x300a);
|
|
} else {
|
|
if (mNormalSpeed > daAlinkHIO_wlAtNjump_c0::m.field_0x18) {
|
|
mNormalSpeed = daAlinkHIO_wlAtNjump_c0::m.field_0x18;
|
|
}
|
|
|
|
procWolfJumpAttackSlideLandInit(0, 0, 0);
|
|
}
|
|
} else {
|
|
mZ2Link.startLinkSoundLevel(Z2SE_WOLFATTACK_WIND_RUSH, mComboCutCount,
|
|
mVoiceReverbIntensity);
|
|
i_onResetFlg0(RFLG0_UNK_2);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfLockAttack() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfLockAttack__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013C630-8013C7A4 136F70 0174+00 1/1 0/0 0/0 .text procWolfLockAttackTurnInit__9daAlink_cFi */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfLockAttackTurnInit(int param_0) {
|
|
commonProcInit(PROC_WOLF_LOCK_ATTACK_TURN);
|
|
|
|
if (abs((s16)(cLib_targetAngleY(¤t.pos, &mWolfLockAcKeep[0].getActor()->eyePos) -
|
|
shape_angle.y)) > 0x4000)
|
|
{
|
|
setSingleAnimeWolfParam(WANM_ATTACK_A_END_BACK, &daAlinkHIO_wlAtLock_c0::m.field_0x14);
|
|
mProcVar2.field_0x300c = 1;
|
|
field_0x3588.set(-l_wolfBaseAnime.x, l_wolfBaseAnime.y, -l_wolfBaseAnime.z);
|
|
} else {
|
|
setSingleAnimeWolfParam(WANM_ATTACK_A_END_FRONT, &daAlinkHIO_wlAtLock_c0::m.field_0x0);
|
|
mProcVar2.field_0x300c = 0;
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
}
|
|
|
|
if (mWolfLockAcKeep[0].getActor() != NULL &&
|
|
fopAcM_GetName(mWolfLockAcKeep[0].getActor()) == PROC_E_YMB)
|
|
{
|
|
mProcVar3.field_0x300e.z = 1;
|
|
} else {
|
|
mProcVar3.field_0x300e.z = 0;
|
|
}
|
|
|
|
field_0x2f9d = 4;
|
|
setFootEffectProcType(1);
|
|
mNormalSpeed *= 0.5f;
|
|
field_0x2f99 = 4;
|
|
dComIfGp_setPlayerStatus1(0, 0x1000000);
|
|
i_offResetFlg0(RFLG0_UNK_8000000);
|
|
mComboCutCount++;
|
|
mProcVar1.field_0x300a = param_0;
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfLockAttackTurnInit(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfLockAttackTurnInit__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013C7A4-8013C8C8 1370E4 0124+00 1/0 0/0 0/0 .text procWolfLockAttackTurn__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfLockAttackTurn() {
|
|
field_0x2f99 = 4;
|
|
|
|
if (mProcVar3.field_0x300e.z != 0 && current.pos.y < mWaterY) {
|
|
current.pos.y = mWaterY;
|
|
}
|
|
|
|
if (mWolfLockNum != 0) {
|
|
s16 target_angle = cLib_targetAngleY(¤t.pos, &mWolfLockAcKeep[0].getActor()->eyePos);
|
|
if (mProcVar2.field_0x300c != 0) {
|
|
target_angle += 0x8000;
|
|
}
|
|
|
|
cLib_addCalcAngleS(&shape_angle.y, target_angle, 2, 0x2000, 0x800);
|
|
}
|
|
|
|
cLib_addCalc(&mNormalSpeed, 0.0f, 0.3f, 5.0f, 1.0f);
|
|
|
|
if (checkAnmEnd(mUnderFrameCtrl)) {
|
|
if (mWolfLockNum != 0) {
|
|
procWolfLockAttackInit(mProcVar1.field_0x300a);
|
|
} else if (checkZeroSpeedF()) {
|
|
current.angle.y = shape_angle.y;
|
|
checkNextActionWolf(0);
|
|
} else {
|
|
field_0x2f9d = 4;
|
|
seStartMapInfoLevel(Z2SE_FN_WOLF_SLIP);
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfLockAttackTurn() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfLockAttackTurn__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013C8C8-8013C9EC 137208 0124+00 1/1 0/0 0/0 .text procWolfAttackReverseInit__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfAttackReverseInit() {
|
|
commonProcInit(PROC_WOLF_ATTACK_REVERSE);
|
|
setSingleAnimeWolfBase(WANM_ATTACK_RECOIL_START);
|
|
setFaceBasicTexture(FTANM_UNK_9A);
|
|
|
|
mNormalSpeed = daAlinkHIO_wlAttack_c0::m.mJumpBackSpeedH;
|
|
speed.y = daAlinkHIO_wlAttack_c0::m.mJumpBackSpeedV;
|
|
current.angle.y += 0x8000;
|
|
|
|
dComIfGp_getVibration().StartShock(5, 15, cXyz(0.0f, 1.0f, 0.0f));
|
|
dKy_Sound_set(current.pos, 100, fopAcM_GetID(this), 5);
|
|
seStartOnlyReverb(Z2SE_WOLF_BODYATTACK);
|
|
|
|
i_onResetFlg1(RFLG1_WOLF_ATTACK_REVERSE);
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfAttackReverseInit() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfAttackReverseInit__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013C9EC-8013CB48 13732C 015C+00 1/0 0/0 0/0 .text procWolfAttackReverse__9daAlink_cFv
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfAttackReverse() {
|
|
if (checkWolfGroundSpecialMode()) {
|
|
return 1;
|
|
}
|
|
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
field_0x2f99 = 4;
|
|
|
|
if (!i_checkModeFlg(2)) {
|
|
if (frameCtrl_p->checkPass(30.0f)) {
|
|
voiceStart(Z2SE_WL_V_NOSE);
|
|
}
|
|
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
checkNextActionWolf(0);
|
|
} else if (frameCtrl_p->getFrame() > daAlinkHIO_wlAttack_c0::m.mLandAnm.mCheckFrame) {
|
|
checkNextActionWolf(1);
|
|
}
|
|
} else if ((mLinkAcch.ChkGroundHit() || i_checkEndResetFlg2(ERFLG2_UNK_100)) &&
|
|
i_checkModeFlg(2))
|
|
{
|
|
if (checkWolfLandAction(0)) {
|
|
return 1;
|
|
}
|
|
|
|
mNormalSpeed = 0.0f;
|
|
setSingleAnimeWolfParam(WANM_ATTACK_RECOIL_END, &daAlinkHIO_wlAttack_c0::m.mLandAnm);
|
|
setFaceBasicTexture(FTANM_UNK_9B);
|
|
current.angle.y = shape_angle.y;
|
|
offModeFlg(2);
|
|
onModeFlg(1);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfAttackReverse() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfAttackReverse__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013CB48-8013CC5C 137488 0114+00 2/2 0/0 0/0 .text procWolfEnemyThrowInit__9daAlink_cFi */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfEnemyThrowInit(int param_0) {
|
|
commonProcInit(PROC_WOLF_ENEMY_THROW);
|
|
|
|
daAlink_WANM anm;
|
|
if (param_0 == 2 || (param_0 == 4 && cM_rnd() < 0.5f)) {
|
|
anm = WANM_FLING_LEFT;
|
|
i_onNoResetFlg2(FLG2_WOLF_ENEMY_LEFT_THROW);
|
|
} else {
|
|
anm = WANM_FLING_RIGHT;
|
|
i_offNoResetFlg2(FLG2_WOLF_ENEMY_LEFT_THROW);
|
|
}
|
|
|
|
f32 var_f31;
|
|
if (param_0 == 4) {
|
|
var_f31 = 0.0f;
|
|
} else {
|
|
var_f31 = 3.0f;
|
|
}
|
|
|
|
setSingleAnimeWolf(anm, daAlinkHIO_wlAtBite_c0::m.field_0x2C, var_f31, -1,
|
|
daAlinkHIO_wlAtBite_c0::m.field_0x30);
|
|
setWolfEnemyThrowUpperAnime(anm, var_f31);
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
mNormalSpeed = 0.0f;
|
|
speed.y = 0.0f;
|
|
field_0x2f99 = 13;
|
|
current.angle.y = shape_angle.y;
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfEnemyThrowInit(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfEnemyThrowInit__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013CC5C-8013CCF4 13759C 0098+00 1/0 0/0 0/0 .text procWolfEnemyThrow__9daAlink_cFv */
|
|
int daAlink_c::procWolfEnemyThrow() {
|
|
if (checkWolfGroundSpecialMode()) {
|
|
return 1;
|
|
}
|
|
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
field_0x2f99 = 5;
|
|
|
|
if (frameCtrl->checkAnmEnd()) {
|
|
checkNextActionWolf(0);
|
|
} else if (frameCtrl->getFrame() > daAlinkHIO_wlAtBite_c0::m.field_0x34) {
|
|
checkNextActionWolf(1);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013CCF4-8013CDEC 137634 00F8+00 1/1 0/0 0/0 .text procWolfEnemyHangBiteInit__9daAlink_cFv */
|
|
int daAlink_c::procWolfEnemyHangBiteInit() {
|
|
commonProcInit(PROC_WOLF_ENEMY_HANG_BITE);
|
|
setSingleAnimeWolfParam(WANM_CATCH_START, &daAlinkHIO_wlAtBite_c0::m.field_0x14);
|
|
|
|
f32 tmp_0 = FLOAT_LABEL(lit_6108);
|
|
mNormalSpeed = tmp_0;
|
|
speed.y = tmp_0;
|
|
setSpecialGravity(tmp_0, maxFallSpeed, 0);
|
|
|
|
if (!setWolfEnemyHangBitePos((fopEn_enemy_c*)field_0x281c.getActor())) {
|
|
return procWolfJumpAttackKickInit();
|
|
} else {
|
|
current.angle.y = shape_angle.y;
|
|
field_0x2f99 = 0x50;
|
|
mProcVar0.field_0x3008 = daAlinkHIO_wlAtBite_c0::m.field_0x28;
|
|
mProcVar1.field_0x300a = 0;
|
|
mProcVar2.field_0x300c = 0;
|
|
mProcVar3.field_0x300e.x = 0;
|
|
field_0x3478 = daAlinkHIO_wlAtBite_c0::m.field_0x40;
|
|
mProcVar3.field_0x300e.y = shape_angle.y;
|
|
voiceStart(Z2SE_WL_V_BITE_ATTACK);
|
|
dComIfGp_setPlayerStatus1(0, 0x200000);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013CDEC-8013D0D4 13772C 02E8+00 1/0 0/0 0/0 .text procWolfEnemyHangBite__9daAlink_cFv
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfEnemyHangBite() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
|
|
fopEn_enemy_c* enemy_p = (fopEn_enemy_c*)field_0x281c.getActor();
|
|
if (!setWolfEnemyHangBitePos(enemy_p)) {
|
|
return procWolfJumpAttackKickInit();
|
|
}
|
|
|
|
cLib_addCalcAngleS(&shape_angle.y, mProcVar3.field_0x300e.y, 2, 0x2000, 0x800);
|
|
current.angle.y = shape_angle.y;
|
|
setDoStatusContinuation(3);
|
|
|
|
if (doTrigger()) {
|
|
mProcVar3.field_0x300e.x = 1;
|
|
mProcVar0.field_0x3008 = daAlinkHIO_wlAtBite_c0::m.field_0x28;
|
|
} else if (mProcVar0.field_0x3008 != 0) {
|
|
mProcVar0.field_0x3008--;
|
|
}
|
|
|
|
if (mProcVar2.field_0x300c == 0) {
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
if (mProcVar3.field_0x300e.x != 0) {
|
|
setSingleAnimeWolfBaseSpeed(WANM_CATCH, field_0x3478, 3.0f);
|
|
mProcVar3.field_0x300e.x = 0;
|
|
mProcVar2.field_0x300c = 1;
|
|
} else if (mProcVar0.field_0x3008 == 0) {
|
|
return procWolfJumpAttackKickInit();
|
|
}
|
|
}
|
|
} else {
|
|
if (mProcVar0.field_0x3008 == 0) {
|
|
return procWolfJumpAttackKickInit();
|
|
}
|
|
|
|
if (doTrigger()) {
|
|
cLib_chaseF(&field_0x3478, daAlinkHIO_wlAtBite_c0::m.field_0x48,
|
|
daAlinkHIO_wlAtBite_c0::m.field_0x50);
|
|
} else {
|
|
cLib_chaseF(&field_0x3478, daAlinkHIO_wlAtBite_c0::m.field_0x40,
|
|
daAlinkHIO_wlAtBite_c0::m.field_0x58);
|
|
}
|
|
|
|
if (frameCtrl_p->getRate() < 0.1f) {
|
|
if (mProcVar3.field_0x300e.x != 0) {
|
|
mProcVar3.field_0x300e.x = 0;
|
|
frameCtrl_p->setRate(field_0x3478);
|
|
}
|
|
} else {
|
|
frameCtrl_p->setRate(field_0x3478);
|
|
|
|
if (frameCtrl_p->checkPass(0.0f) || frameCtrl_p->checkPass(17.0f)) {
|
|
if (mProcVar3.field_0x300e.x == 0) {
|
|
if (frameCtrl_p->checkPass(0.0f)) {
|
|
frameCtrl_p->setFrame(0.0f);
|
|
} else {
|
|
frameCtrl_p->setFrame(17.0f);
|
|
}
|
|
|
|
getNowAnmPackUnder(UNDER_0)->setFrame(frameCtrl_p->getFrame());
|
|
frameCtrl_p->setRate(0.0f);
|
|
} else {
|
|
mProcVar3.field_0x300e.x = 0;
|
|
}
|
|
} else if (frameCtrl_p->checkPass(14.0f) || frameCtrl_p->checkPass(36.0f)) {
|
|
setWolfBiteDamage(enemy_p);
|
|
} else if (frameCtrl_p->checkPass(7.5f) || frameCtrl_p->checkPass(30.0f)) {
|
|
voiceStart(Z2SE_WL_V_BITE_ATTACK);
|
|
} else if (frameCtrl_p->checkPass(20.0f)) {
|
|
voiceStart(Z2SE_WL_V_BITE_THROAT);
|
|
}
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfEnemyHangBite() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfEnemyHangBite__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013D0D4-8013D3FC 137A14 0328+00 1/1 0/0 0/0 .text procWolfGrabUpInit__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfGrabUpInit() {
|
|
if (fopAcM_checkCarryNow(field_0x27f4)) {
|
|
return checkNextActionWolf(0);
|
|
}
|
|
|
|
if (fopAcM_GetName(field_0x27f4) == PROC_Obj_MasterSword) {
|
|
setGrabItemActor(field_0x27f4);
|
|
return 1;
|
|
}
|
|
|
|
commonProcInit(PROC_WOLF_GRAB_UP);
|
|
|
|
f32 var_f31;
|
|
if (!fopAcM_CheckCarryType(field_0x27f4, fopAcM_CARRY_ITEM)) {
|
|
setSingleAnimeWolfParam(WANM_PICKUP_A, &daAlinkHIO_wlGrab_c0::m.field_0x0);
|
|
var_f31 = 120.0f;
|
|
field_0x3478 = 10.0f;
|
|
field_0x347c = daAlinkHIO_wlGrab_c0::m.field_0x0.mCheckFrame;
|
|
} else {
|
|
setSingleAnimeWolfParam(WANM_PICKUP_B, &daAlinkHIO_wlGrab_c0::m.field_0x28);
|
|
var_f31 = 80.0f;
|
|
field_0x3478 = 7.0f;
|
|
field_0x347c = daAlinkHIO_wlGrab_c0::m.field_0x28.mCheckFrame;
|
|
}
|
|
|
|
setGrabItemActor(field_0x27f4);
|
|
shape_angle.y = fopAcM_searchActorAngleY(this, field_0x27f4);
|
|
current.angle.y = shape_angle.y;
|
|
mProcVar2.field_0x300c = shape_angle.y;
|
|
field_0x37c8 = field_0x27f4->current.pos - field_0x3510;
|
|
mProcVar3.field_0x300e.x = 0;
|
|
|
|
if (fopAcM_GetName(field_0x27f4) != PROC_Obj_Drop &&
|
|
fopAcM_GetName(field_0x27f4) != PROC_Obj_Sword)
|
|
{
|
|
f32 prev_x = current.pos.x;
|
|
f32 prev_z = current.pos.z;
|
|
|
|
current.pos.x = field_0x27f4->current.pos.x - var_f31 * cM_ssin(shape_angle.y);
|
|
current.pos.z = field_0x27f4->current.pos.z - var_f31 * cM_scos(shape_angle.y);
|
|
field_0x37c8.x -= current.pos.x - prev_x;
|
|
field_0x37c8.z -= current.pos.z - prev_z;
|
|
}
|
|
|
|
field_0x33e4 = field_0x27f4->current.pos.absXZ(current.pos) - 100.0f;
|
|
if (field_0x33e4 < 0.0f) {
|
|
field_0x33e4 = 0.0f;
|
|
}
|
|
|
|
mNormalSpeed = 0.0f;
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfGrabUpInit() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfGrabUpInit__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013D3FC-8013D588 137D3C 018C+00 1/0 0/0 0/0 .text procWolfGrabUp__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfGrabUp() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
fopAc_ac_c* item_p = mGrabItemAcKeep.getActor();
|
|
|
|
if (item_p == NULL) {
|
|
return checkNextActionWolf(0);
|
|
}
|
|
|
|
if (frameCtrl_p->checkPass(field_0x3478)) {
|
|
i_onResetFlg0(RFLG0_UNK_8000);
|
|
fopAcM_setStageLayer(item_p);
|
|
voiceStart(Z2SE_WL_V_HOLD_MOUTH);
|
|
}
|
|
|
|
if (frameCtrl_p->getFrame() >= field_0x3478) {
|
|
mProcVar3.field_0x300e.x = 1;
|
|
}
|
|
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
setUpperAnime(mUnderAnmHeap[0].getIdx(), UPPER_2, 0.0f, frameCtrl_p->getEnd() - 0.001f, -1,
|
|
-1.0f);
|
|
checkNextActionWolf(0);
|
|
} else if (frameCtrl_p->getFrame() > field_0x347c) {
|
|
setUpperAnime(mUnderAnmHeap[0].getIdx(), UPPER_2, 0.0f, frameCtrl_p->getEnd() - 0.001f, -1,
|
|
-1.0f);
|
|
|
|
if (!checkNextActionWolf(1)) {
|
|
resetUpperAnime(UPPER_2, -1.0f);
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfGrabUp() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfGrabUp__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013D588-8013D65C 137EC8 00D4+00 2/2 0/0 0/0 .text procWolfGrabPutInit__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfGrabPutInit() {
|
|
if (mProcID == PROC_WOLF_GRAB_PUT) {
|
|
return 0;
|
|
}
|
|
|
|
BOOL grab_obj = checkWolfGrabAnimeObj();
|
|
commonProcInit(PROC_WOLF_GRAB_PUT);
|
|
|
|
if (grab_obj) {
|
|
setSingleAnimeWolfParam(WANM_PICKUP_A, &daAlinkHIO_wlGrab_c0::m.field_0x14);
|
|
field_0x3478 = lit_7625;
|
|
field_0x347c = daAlinkHIO_wlGrab_c0::m.field_0x14.mCheckFrame;
|
|
} else {
|
|
setSingleAnimeWolfParam(WANM_PICKUP_B, &daAlinkHIO_wlGrab_c0::m.field_0x3C);
|
|
field_0x3478 = lit_8502;
|
|
field_0x347c = daAlinkHIO_wlGrab_c0::m.field_0x3C.mCheckFrame;
|
|
}
|
|
|
|
mNormalSpeed = FLOAT_LABEL(lit_6108);
|
|
return 1;
|
|
}
|
|
|
|
/* 8013D65C-8013D818 137F9C 01BC+00 1/0 0/0 0/0 .text procWolfGrabPut__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfGrabPut() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
fopAc_ac_c* actor_p = mGrabItemAcKeep.getActor();
|
|
|
|
if (frameCtrl_p->getFrame() < field_0x3478) {
|
|
if (actor_p != NULL) {
|
|
actor_p->speedF = 0.0f;
|
|
actor_p->current.pos.x += field_0x33e4 * cM_ssin(shape_angle.y);
|
|
actor_p->current.pos.z += field_0x33e4 * cM_scos(shape_angle.y);
|
|
freeGrabItem();
|
|
}
|
|
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
if (mDemo.getDemoMode() == 13) {
|
|
dComIfGp_evmng_cutEnd(field_0x3184);
|
|
} else {
|
|
checkNextActionWolf(0);
|
|
}
|
|
} else if (frameCtrl_p->getFrame() < field_0x347c) {
|
|
checkNextActionWolf(1);
|
|
}
|
|
} else {
|
|
if (actor_p == NULL) {
|
|
if (mDemo.getDemoMode() == 13) {
|
|
dComIfGp_evmng_cutEnd(field_0x3184);
|
|
return 1;
|
|
} else {
|
|
return checkNextActionWolf(0);
|
|
}
|
|
}
|
|
|
|
if (grabLineCheck(&field_0x34e0, &actor_p->current.pos) && dBgS_CheckBWallPoly(mObjLinChk))
|
|
{
|
|
cXyz sp8 = actor_p->current.pos - mObjLinChk.i_GetCross();
|
|
current.pos.x -= sp8.x * 1.5f;
|
|
current.pos.z -= sp8.z * 1.5f;
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfGrabPut() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfGrabPut__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013D818-8013D86C 138158 0054+00 1/1 0/0 0/0 .text procWolfGrabThrowInit__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfGrabThrowInit() {
|
|
commonProcInit(PROC_WOLF_GRAB_THROW);
|
|
setSingleAnimeWolfParam(WANM_PICKUP_THROW, &daAlinkHIO_wlGrab_c0::m.field_0x50);
|
|
current.angle.y = shape_angle.y;
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013D86C-8013D930 1381AC 00C4+00 1/0 0/0 0/0 .text procWolfGrabThrow__9daAlink_cFv */
|
|
int daAlink_c::procWolfGrabThrow() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
cLib_chaseF(&mNormalSpeed, FLOAT_LABEL(lit_6108), daAlinkHIO_wlMoveNoP_c0::m.field_0x10);
|
|
setShapeAngleToAtnActor(0);
|
|
current.angle.y = shape_angle.y;
|
|
|
|
if (frameCtrl->checkPass(lit_7625)) {
|
|
setGrabItemThrow();
|
|
}
|
|
|
|
if (frameCtrl->checkAnmEnd()) {
|
|
checkNextActionWolf(0);
|
|
} else if (frameCtrl->getFrame() > daAlinkHIO_wlGrab_c0::m.field_0x50.mCheckFrame) {
|
|
checkNextActionWolf(1);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013D930-8013DA8C 138270 015C+00 1/1 0/0 0/0 .text procWolfPushInit__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfPushInit() {
|
|
commonProcInit(PROC_WOLF_PUSH);
|
|
mProcVar3.field_0x300e.x = 18;
|
|
|
|
s16 var_r5;
|
|
if (fopAcM_CheckCarryType(field_0x27f4, fopAcM_CARRY_TYPE_1)) {
|
|
mProcVar2.field_0x300c = 1;
|
|
var_r5 = 24;
|
|
} else {
|
|
mProcVar2.field_0x300c = 0;
|
|
var_r5 = mProcVar3.field_0x300e.x;
|
|
}
|
|
setSingleAnimeWolf(WANM_PUSH_LIGHT, 1.0f, 0.0f, var_r5, 3.0f);
|
|
mUnderFrameCtrl[0].setAttribute(0);
|
|
|
|
mNormalSpeed = 0.0f;
|
|
shape_angle.y = fopAcM_searchActorAngleY(this, field_0x27f4);
|
|
current.angle.y = shape_angle.y;
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
field_0x2f99 = 12;
|
|
field_0x34d4 = l_wolfBaseAnime;
|
|
|
|
current.pos.x += cM_ssin(shape_angle.y) * 50.0f;
|
|
current.pos.z += cM_scos(shape_angle.y) * 50.0f;
|
|
|
|
if (fopAcM_CheckCarryType(field_0x27f4, fopAcM_CARRY_TYPE_1)) {
|
|
mProcVar2.field_0x300c = 1;
|
|
} else {
|
|
mProcVar2.field_0x300c = 0;
|
|
}
|
|
|
|
field_0x280c.setData(field_0x27f4);
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfPushInit() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfPushInit__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013DA8C-8013DB58 1383CC 00CC+00 1/0 0/0 0/0 .text procWolfPush__9daAlink_cFv */
|
|
int daAlink_c::procWolfPush() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
field_0x2f99 = 4;
|
|
|
|
if (frameCtrl->checkAnmEnd()) {
|
|
if (mProcVar2.field_0x300c != 0) {
|
|
setSingleAnimeWolf(WANM_PUSH_LIGHT, lit_6040, FLOAT_LABEL(lit_6108),
|
|
mProcVar3.field_0x300e.x, lit_6109);
|
|
mUnderFrameCtrl[0].setAttribute(0);
|
|
mProcVar2.field_0x300c = 0;
|
|
} else {
|
|
checkNextActionWolf(0);
|
|
}
|
|
} else if (mProcVar2.field_0x300c == 0 && frameCtrl->checkPass(lit_52470)) {
|
|
if (field_0x280c.getActor() != NULL) {
|
|
fopAcM_setCarryNow(field_0x280c.getActor(), 0);
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013DB58-8013DB6C 138498 0014+00 1/1 0/0 0/0 .text daAlink_searchEnemyCargo__FP10fopAc_ac_cPv
|
|
*/
|
|
static fopAc_ac_c* daAlink_searchEnemyCargo(fopAc_ac_c* i_actor, void*) {
|
|
if (fopAcM_GetName(i_actor) == PROC_E_YC) {
|
|
return i_actor;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
/* 8013DB6C-8013DC5C 1384AC 00F0+00 3/2 0/0 0/0 .text procWolfCargoCarryInit__9daAlink_cFv */
|
|
int daAlink_c::procWolfCargoCarryInit() {
|
|
if (!commonProcInitNotSameProc(PROC_WOLF_CARGO_CARRY)) {
|
|
return 1;
|
|
}
|
|
|
|
f32 tmp_0 = FLOAT_LABEL(lit_6108);
|
|
mNormalSpeed = tmp_0;
|
|
speed.y = tmp_0;
|
|
setSpecialGravity(tmp_0, maxFallSpeed, 0);
|
|
|
|
daAlink_WANM anm;
|
|
if (checkCargoCarry()) {
|
|
mProcVar2.field_0x300c = 1;
|
|
anm = WANM_WAIT_KARGOROK;
|
|
} else {
|
|
mProcVar2.field_0x300c = 0;
|
|
|
|
fopAc_ac_c* cargo_actor =
|
|
(fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchEnemyCargo, NULL);
|
|
if (cargo_actor != NULL) {
|
|
field_0x280c.setData(cargo_actor);
|
|
}
|
|
|
|
anm = WANM_CATCH_KARGOROK;
|
|
}
|
|
|
|
if (!dComIfGp_evmng_checkStartDemo()) {
|
|
voiceStart(Z2SE_WL_V_CATCHED);
|
|
}
|
|
|
|
setSingleAnimeWolfBase(anm);
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013DC5C-8013DDF8 13859C 019C+00 1/0 0/0 0/0 .text procWolfCargoCarry__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfCargoCarry() {
|
|
setJumpMode();
|
|
|
|
if (mProcVar2.field_0x300c != 0) {
|
|
mCargoCarryAcKeep.setActor();
|
|
if (mCargoCarryAcKeep.getActor() == NULL || !checkCargoCarry()) {
|
|
offCargoCarry();
|
|
return checkNextActionWolf(0);
|
|
}
|
|
|
|
daKago_c* kago_p = (daKago_c*)mCargoCarryAcKeep.getActor();
|
|
mDoMtx_stack_c::copy(kago_p->getLegR3Mtx());
|
|
mDoMtx_stack_c::transM(-9.0f, -17.0f, -30.0f);
|
|
mDoMtx_stack_c::multVecZero(¤t.pos);
|
|
mDoMtx_stack_c::ZXYrotM(-0x1928, 0x3FFF, 0);
|
|
mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &shape_angle);
|
|
current.angle.y = shape_angle.y;
|
|
|
|
checkSubjectAction();
|
|
} else {
|
|
if (i_checkEndResetFlg1(ERFLG1_UNK_10000)) {
|
|
return checkNextActionWolf(0);
|
|
}
|
|
|
|
e_yc_class* yc_p = (e_yc_class*)field_0x280c.getActor();
|
|
mDoMtx_stack_c::copy(yc_p->getLegR3Mtx());
|
|
mDoMtx_stack_c::transM(-9.0f, -7.0f, -30.0f);
|
|
mDoMtx_stack_c::multVecZero(¤t.pos);
|
|
mDoMtx_stack_c::ZXYrotM(0x770C, 0, -0x4C94);
|
|
mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &shape_angle);
|
|
current.angle.y = shape_angle.y;
|
|
|
|
voiceStartLevel(Z2SE_WL_V_CATCHED_LOOP);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfCargoCarry() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfCargoCarry__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013DDF8-8013DE70 138738 0078+00 1/1 0/0 0/0 .text procWolfChainUpInit__9daAlink_cFv
|
|
*/
|
|
int daAlink_c::procWolfChainUpInit() {
|
|
field_0x2fa3 = searchFmChainPos();
|
|
|
|
if (field_0x2fa3 == 0) {
|
|
return procWolfWaitInit();
|
|
}
|
|
|
|
commonProcInit(PROC_WOLF_CHAIN_UP);
|
|
setSingleAnimeWolfParam(WANM_PICKUP_B, &daAlinkHIO_wlGrab_c0::m.field_0x28);
|
|
mNormalSpeed = FLOAT_LABEL(lit_6108);
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013DE70-8013DF30 1387B0 00C0+00 1/0 0/0 0/0 .text procWolfChainUp__9daAlink_cFv */
|
|
int daAlink_c::procWolfChainUp() {
|
|
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
|
|
|
|
setWallGrabStatus(0x96, 2);
|
|
|
|
if (frameCtrl->checkAnmEnd() ||
|
|
(checkInputOnR() && frameCtrl->getFrame() > daAlinkHIO_wlGrab_c0::m.field_0x28.mCheckFrame))
|
|
{
|
|
u8 old_2fa3 = field_0x2fa3;
|
|
fopAc_ac_c* old_actor = field_0x2844.getActor();
|
|
|
|
procWolfWaitInit();
|
|
setUpperAnimeBaseSpeed(m_wlAnmDataTable[WANM_CHAIN_PULL].field_0x0, FLOAT_LABEL(lit_6108),
|
|
lit_6109);
|
|
|
|
if (old_actor != NULL) {
|
|
field_0x2fa3 = old_2fa3;
|
|
field_0x2844.setData(old_actor);
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013DF30-8013E034 138870 0104+00 1/1 0/0 0/0 .text procWolfGanonCatchInit__9daAlink_cFv */
|
|
int daAlink_c::procWolfGanonCatchInit() {
|
|
if (!dComIfGp_event_compulsory(this, 0, 0xFFEF)) {
|
|
return 0;
|
|
}
|
|
|
|
mDemo.i_setSpecialDemoType();
|
|
field_0x27f4->actor_status |= 0x800;
|
|
|
|
commonProcInit(PROC_WOLF_GANON_CATCH);
|
|
field_0x280c.setData(field_0x27f4);
|
|
static_cast<fopEn_enemy_c*>(field_0x27f4)->setThrowModeCatch();
|
|
setSingleAnimeWolfBase(WANM_PIG_GANON_CATCH_ST);
|
|
|
|
shape_angle.y = cLib_targetAngleY(¤t.pos, &field_0x27f4->current.pos);
|
|
current.angle.y = shape_angle.y + 0x8000;
|
|
|
|
mNormalSpeed = lit_6895;
|
|
mProcVar3.field_0x300e.z = 30;
|
|
mProcVar2.field_0x300c = 0;
|
|
mProcVar3.field_0x300e.x = 0;
|
|
setFootEffectProcType(0);
|
|
field_0x2f9d = 0x60;
|
|
mProcVar3.field_0x300e.y = 4;
|
|
return 1;
|
|
}
|
|
|
|
/* 8013E034-8013E240 138974 020C+00 1/0 0/0 0/0 .text procWolfGanonCatch__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfGanonCatch() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
|
|
if (mProcVar2.field_0x300c == 0) {
|
|
fopEn_enemy_c* ganon_p = (fopEn_enemy_c*)field_0x280c.getActor();
|
|
if (ganon_p == NULL) {
|
|
resetSpecialEvent();
|
|
procWolfWaitInit();
|
|
return 1;
|
|
}
|
|
|
|
if (!doButton() || !mLinkAcch.ChkGroundHit()) {
|
|
resetSpecialEvent();
|
|
ganon_p->setThrowModeDash();
|
|
procWolfWaitInit();
|
|
return 1;
|
|
}
|
|
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
setSingleAnimeWolfBase(WANM_PIG_GANON_CATCH_END);
|
|
}
|
|
|
|
if (checkInputOnR()) {
|
|
int direction = getDirectionFromAngle(mStickAngle);
|
|
if (direction == DIR_LEFT || direction == DIR_RIGHT) {
|
|
mProcVar3.field_0x300e.y = direction;
|
|
}
|
|
}
|
|
|
|
if (cLib_chaseF(&mNormalSpeed, 0.0f, 1.0f)) {
|
|
if (mProcVar3.field_0x300e.z != 0) {
|
|
mProcVar3.field_0x300e.z--;
|
|
} else {
|
|
if (mProcVar3.field_0x300e.y == DIR_LEFT) {
|
|
setSingleAnimeWolfBase(WANM_PIG_GANON_THROW_LEFT_START);
|
|
ganon_p->setThrowModeThrowLeft();
|
|
} else if (mProcVar3.field_0x300e.y == DIR_RIGHT) {
|
|
setSingleAnimeWolfBase(WANM_PIG_GANON_THROW_RIGHT_START);
|
|
ganon_p->setThrowModeThrowRight();
|
|
} else {
|
|
resetSpecialEvent();
|
|
ganon_p->setThrowModeDash();
|
|
procWolfWaitInit();
|
|
return 1;
|
|
}
|
|
|
|
mProcVar2.field_0x300c = 1;
|
|
current.angle.y = shape_angle.y;
|
|
}
|
|
} else if (mNormalSpeed > 5.0f) {
|
|
field_0x2f9d = 0x60;
|
|
}
|
|
} else {
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
if (mProcVar3.field_0x300e.y == DIR_LEFT) {
|
|
setSingleAnimeWolfBase(WANM_PIG_GANON_THROW_LEFT_END);
|
|
} else {
|
|
setSingleAnimeWolfBase(WANM_PIG_GANON_THROW_RIGHT_END);
|
|
}
|
|
}
|
|
|
|
if (mProcVar3.field_0x300e.x != 0) {
|
|
resetSpecialEvent();
|
|
procWolfWaitInit();
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfGanonCatch() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfGanonCatch__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013E240-8013E2A8 138B80 0068+00 1/1 0/0 0/0 .text procWolfChainReadyInit__9daAlink_cFv */
|
|
int daAlink_c::procWolfChainReadyInit() {
|
|
commonProcInit(PROC_WOLF_CHAIN_READY);
|
|
field_0x280c.setData(field_0x27f4);
|
|
setSingleAnimeWolfParam(WANM_ATTACK_A_START, &daAlinkHIO_wlAtNjump_c0::m.field_0x0);
|
|
mNormalSpeed = FLOAT_LABEL(lit_6108);
|
|
mProcVar2.field_0x300c = 0;
|
|
mProcVar3.field_0x300e.x = 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8013E2A8-8013E6C0 138BE8 0418+00 1/0 0/0 0/0 .text procWolfChainReady__9daAlink_cFv */
|
|
#ifdef NONMATCHING
|
|
// matches with literals
|
|
int daAlink_c::procWolfChainReady() {
|
|
daObjWchain_c* chain = static_cast<daObjWchain_c*>(field_0x280c.getActor());
|
|
if (chain == NULL || mLinkAcch.ChkWallHit()) {
|
|
return procWolfFallInit(2, daAlinkHIO_wlAutoJump_c0::m.field_0x54);
|
|
} else if (mUnderFrameCtrl[0].getFrame() < 3.0f) {
|
|
s16 target_angle_y = cLib_targetAngleY(¤t.pos, &chain->getJumpAimPos());
|
|
cLib_addCalcAngleS(&shape_angle.y, target_angle_y, 2, 0x2000, 0x800);
|
|
current.angle.y = shape_angle.y;
|
|
} else if (mProcVar3.field_0x300e.x == 0) {
|
|
shape_angle.y = cLib_targetAngleY(¤t.pos, &chain->getJumpAimPos());
|
|
current.angle.y = shape_angle.y;
|
|
mProcVar3.field_0x300e.x = 1;
|
|
cXyz vec1 = chain->getJumpAimPos() - field_0x34e0;
|
|
f32 dist_xz = vec1.absXZ();
|
|
f32 dist = vec1.abs();
|
|
s16 angle = vec1.atan2sY_XZ();
|
|
mProcVar2.field_0x300c = angle >> 1;
|
|
mNormalSpeed = dist_xz * 40.0f / dist + 1.0f;
|
|
mProcVar0.field_0x3008 = dist_xz / mNormalSpeed + 1.0f;
|
|
speed.y = (vec1.y - gravity * 0.5f * mProcVar0.field_0x3008 * mProcVar0.field_0x3008)
|
|
/ mProcVar0.field_0x3008;
|
|
} else {
|
|
mProcVar0.field_0x3008--;
|
|
if (chain->getJumpAimPos().abs2(field_0x34e0) < 10000.0f) {
|
|
procWolfChainWaitInit();
|
|
} else if (mProcVar0.field_0x3008 == 0) {
|
|
procWolfFallInit(2, daAlinkHIO_wlAutoJump_c0::m.field_0x54);
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfChainReady() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfChainReady__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013E6C0-8013E80C 139000 014C+00 1/1 0/0 0/0 .text procWolfChainWaitInit__9daAlink_cFv
|
|
*/
|
|
#ifdef NONMATCHING
|
|
// matches with literals
|
|
int daAlink_c::procWolfChainWaitInit() {
|
|
daObjWchain_c* chain = static_cast<daObjWchain_c*>(field_0x280c.getActor());
|
|
commonProcInit(PROC_WOLF_CHAIN_WAIT);
|
|
setSingleAnimeWolfParam(WANM_HANDLE_HANG, &daAlinkHIO_wlChain_c0::m.field_0x0);
|
|
mProcVar1.field_0x300a = 0;
|
|
chain->onRide();
|
|
field_0x2f99 = 0x50;
|
|
current.pos = chain->getTopPos();
|
|
setSpecialGravity(0.0f, maxFallSpeed, 0);
|
|
speed.y = 0.0f;
|
|
mProcVar3.field_0x300e.y = 0;
|
|
mProcVar0.field_0x3008 = daAlinkHIO_wlChain_c0::m.field_0x3C + 20;
|
|
field_0x3478 = chain->getPullLength();
|
|
current.angle.y = shape_angle.y;
|
|
if (mNormalSpeed > 30.0f) {
|
|
mNormalSpeed = 15.0f;
|
|
} else {
|
|
mNormalSpeed *= 0.5f;
|
|
}
|
|
field_0x37c8.set(
|
|
mNormalSpeed * cM_ssin(shape_angle.y),
|
|
0.0f,
|
|
mNormalSpeed * cM_scos(shape_angle.y)
|
|
);
|
|
mNormalSpeed = 0.0f;
|
|
voiceStart(Z2SE_WL_V_BITE_HANG);
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfChainWaitInit() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfChainWaitInit__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013E80C-8013ED44 13914C 0538+00 1/0 0/0 0/0 .text procWolfChainWait__9daAlink_cFv */
|
|
#ifdef NONMATCHING
|
|
// matches with literals
|
|
int daAlink_c::procWolfChainWait() {
|
|
daObjWchain_c* chain = static_cast<daObjWchain_c*>(field_0x280c.getActor());
|
|
if (chain == NULL || mProcVar0.field_0x3008 <= -daAlinkHIO_wlChain_c0::m.field_0x3E) {
|
|
mNormalSpeed = field_0x37c8.absXZ();
|
|
current.angle.y = field_0x37c8.atan2sX_Z();
|
|
i_onNoResetFlg2(FLG2_UNK_200);
|
|
return procWolfFallInit(2, daAlinkHIO_wlWallHang_c0::m.field_0x98);
|
|
}
|
|
|
|
if (mProcVar3.field_0x300e.y == 0) {
|
|
if (mProcVar0.field_0x3008 > 20) {
|
|
mProcVar0.field_0x3008--;
|
|
} else {
|
|
field_0x3478 += daAlinkHIO_wlChain_c0::m.field_0x50;
|
|
if (field_0x3478 > chain->getSwitchOffset()) {
|
|
chain->onNowSwitchFlg();
|
|
mProcVar3.field_0x300e.y = 1;
|
|
dComIfGp_getVibration().StartShock(7, 3, cXyz(0.0f, 1.0f, 0.0f));
|
|
}
|
|
}
|
|
} else {
|
|
mProcVar0.field_0x3008--;
|
|
if (mProcVar0.field_0x3008 < 0) {
|
|
field_0x3478 = chain->getDownOffset();
|
|
} else {
|
|
field_0x3478 = (chain->getSwitchOffset() + chain->getLastOffset() * 0.5f)
|
|
+ (mProcVar0.field_0x3008 * 0.5f * 0.05f + 0.5f)
|
|
* chain->getLastOffset() * cM_scos(mProcVar0.field_0x3008 * 0x3000);
|
|
if (mProcVar0.field_0x3008 == 0) {
|
|
chain->onEndFlg();
|
|
}
|
|
}
|
|
}
|
|
|
|
cXyz vec1 = current.pos - chain->getRoofPos();
|
|
if (checkInputOnR()) {
|
|
vec1.x += field_0x33a8 * cM_ssin(field_0x2fe2);
|
|
vec1.z += field_0x33a8 * cM_scos(field_0x2fe2);
|
|
}
|
|
vec1.y -= 15.0f;
|
|
vec1 += field_0x37c8;
|
|
vec1.normalizeZP();
|
|
current.pos = chain->getRoofPos() + vec1 * (field_0x3478 + chain->getInitOutLength());
|
|
field_0x37c8 = (current.pos - field_0x3798) * 0.95f;
|
|
mDoMtx_stack_c::YrotS(-shape_angle.y);
|
|
mDoMtx_stack_c::multVec(&vec1, &vec1);
|
|
shape_angle.x = cM_atan2s(-vec1.z, -vec1.y);
|
|
shape_angle.z = cM_atan2s(vec1.x, JMAFastSqrt(vec1.y * vec1.y + vec1.z * vec1.z));
|
|
mProcVar2.field_0x300c = shape_angle.x;
|
|
|
|
daPy_frameCtrl_c* frame_ctrl = &mUnderFrameCtrl[0];
|
|
if (mProcVar1.field_0x300a != 0 || frame_ctrl->checkAnmEnd()) {
|
|
daAlink_WANM anm;
|
|
f32 f1, f2, f3;
|
|
if (checkInputOnR()) {
|
|
anm = WANM_HANDLE_HANG_SW;
|
|
f1 = daAlinkHIO_wlChain_c0::m.field_0x40;
|
|
f2 = daAlinkHIO_wlChain_c0::m.field_0x44;
|
|
} else {
|
|
anm = WANM_HANDLE_HANG_WAIT;
|
|
f1 = daAlinkHIO_wlChain_c0::m.field_0x48;
|
|
f2 = daAlinkHIO_wlChain_c0::m.field_0x4C;
|
|
}
|
|
if (anm != mUnderAnmHeap[0].getIdx()) {
|
|
if (mProcVar1.field_0x300a == 0) {
|
|
mProcVar1.field_0x300a = 1;
|
|
f3 = 0.0f;
|
|
} else {
|
|
f3 = frame_ctrl->getFrame() / frame_ctrl->getEnd();
|
|
}
|
|
setSingleAnimeWolfBaseSpeed(anm, f1, f2);
|
|
frame_ctrl->setFrame(f3 * frame_ctrl->getEnd());
|
|
}
|
|
}
|
|
|
|
chain->setPullLength(field_0x3478);
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfChainWait() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfChainWait__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013ED44-8013F1F0 139684 04AC+00 1/1 0/0 0/0 .text procWolfDigInit__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfDigInit() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfDigInit__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 8013F1F0-8013F4A8 139B30 02B8+00 1/0 0/0 0/0 .text procWolfDig__9daAlink_cFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfDig() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfDig__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 8013F4A8-8013F7C4 139DE8 031C+00 2/2 0/0 0/0 .text procWolfDigThroughInit__9daAlink_cFi */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfDigThroughInit(int param_0) {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfDigThroughInit__9daAlink_cFi.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 8013F7C4-8013F90C 13A104 0148+00 1/0 0/0 0/0 .text procWolfDigThrough__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfDigThrough() {
|
|
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
|
field_0x2f99 = 4;
|
|
|
|
if (mProcVar3.field_0x300e.x != 0) {
|
|
onSceneChangeArea(mProcVar3.field_0x300e.y, 0xFF, NULL);
|
|
} else {
|
|
if (checkAnmEnd(frameCtrl_p)) {
|
|
if (mProcVar3.field_0x300e.z != 0) {
|
|
dComIfGs_setRestartRoom(current.pos, shape_angle.y, getStartRoomNo());
|
|
}
|
|
|
|
resetSpecialEvent();
|
|
|
|
if (checkInputOnR()) {
|
|
checkNextActionWolf(0);
|
|
} else {
|
|
field_0x2f99 = 4;
|
|
procWolfSwimEndWaitInit(1);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
if (mProcVar3.field_0x300e.y >= 0 && frameCtrl_p->checkPass(21.0f)) {
|
|
mProcVar3.field_0x300e.x = 1;
|
|
}
|
|
}
|
|
|
|
if (frameCtrl_p->checkPass(100.0f)) {
|
|
voiceStart(Z2SE_WL_V_BREATH_RUN);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfDigThrough() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfDigThrough__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013F90C-8013FA14 13A24C 0108+00 1/1 0/0 0/0 .text setSmellSave__9daAlink_cFv */
|
|
void daAlink_c::setSmellSave() {
|
|
if (dComIfGs_getCollectSmell() == SMELL_MEDICINE) {
|
|
dComIfGs_offEventBit(0x2F04); // OFF: Got Medicine Scent
|
|
}
|
|
|
|
dMsgObject_setSmellType(mProcVar3.field_0x300e.z);
|
|
|
|
if (mProcVar3.field_0x300e.z == SMELL_MEDICINE) {
|
|
dComIfGs_onEventBit(0x2F04); // ON: Got Medicine Scent
|
|
} else if (mProcVar3.field_0x300e.z == SMELL_CHILDREN) {
|
|
i_fopAcM_onSwitch(this, 102);
|
|
} else if (mProcVar3.field_0x300e.z == SMELL_YELIA_POUCH) {
|
|
i_fopAcM_onSwitch(this, 103);
|
|
} else if (mProcVar3.field_0x300e.z == SMELL_FISH) {
|
|
dComIfGs_onEventBit(0x6120); // ON: Got Reekfish scent
|
|
} else if (mProcVar3.field_0x300e.z == SMELL_POH) {
|
|
dComIfGs_onEventBit(0x6210); // ON: Got Poe scent
|
|
}
|
|
|
|
setGetSubBgm(mProcVar3.field_0x300e.z);
|
|
}
|
|
|
|
/* 8013FA14-8013FC24 13A354 0210+00 1/1 0/0 0/0 .text procWolfGetSmellInit__9daAlink_cFv
|
|
*/
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfGetSmellInit() {
|
|
if (!dComIfGp_event_compulsory(this, 0, 0xFFFF)) {
|
|
return 0;
|
|
}
|
|
|
|
mDemo.i_setSpecialDemoType();
|
|
commonProcInit(PROC_WOLF_GET_SMELL);
|
|
setSingleAnimeWolfBaseSpeed(WANM_SMELL, daAlinkHIO_wlChain_c0::m.field_0x54,
|
|
daAlinkHIO_wlChain_c0::m.field_0x58);
|
|
voiceStartLevel(Z2SE_WL_V_SNIFF);
|
|
|
|
shape_angle.y = fopAcM_searchActorAngleY(this, field_0x27f4);
|
|
current.angle.y = shape_angle.y;
|
|
|
|
current.pos.x = field_0x27f4->current.pos.x - cM_ssin(shape_angle.y) * 100.0f;
|
|
current.pos.z = field_0x27f4->current.pos.z - cM_scos(shape_angle.y) * 100.0f;
|
|
|
|
field_0x280c.setData(field_0x27f4);
|
|
static_cast<kytag03_class*>(field_0x27f4)->field_0x588 = 1;
|
|
static_cast<kytag03_class*>(field_0x27f4)->field_0x587 = 0;
|
|
mProcVar3.field_0x300e.z = static_cast<kytag03_class*>(field_0x27f4)->field_0x589;
|
|
fopAcM_OnStatus(field_0x27f4, 0x800);
|
|
|
|
dComIfGp_setPlayerStatus1(0, 0x4000000);
|
|
mProcVar2.field_0x300c = 0;
|
|
|
|
if (dComIfGs_getCollectSmell() == NO_ITEM) {
|
|
field_0x3198 = 0xBBC;
|
|
} else {
|
|
field_0x3198 = 0xBBB;
|
|
}
|
|
|
|
field_0x319c = -1;
|
|
|
|
if (mProcVar3.field_0x300e.z == SMELL_YELIA_POUCH) {
|
|
field_0x319c = 0x2220;
|
|
} else if (mProcVar3.field_0x300e.z == SMELL_CHILDREN) {
|
|
field_0x319c = 0x2240;
|
|
}
|
|
|
|
if (field_0x319c < 0 || i_dComIfGs_isEventBit(field_0x319c)) {
|
|
field_0x319c = -1;
|
|
}
|
|
|
|
mProcVar3.field_0x300e.y = 0;
|
|
mNormalSpeed = 0.0f;
|
|
field_0x3588 = l_wolfBaseAnime;
|
|
onWolfEyeUp();
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfGetSmellInit() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfGetSmellInit__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8013FC24-8013FF28 13A564 0304+00 1/0 0/0 0/0 .text procWolfGetSmell__9daAlink_cFv */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
int daAlink_c::procWolfGetSmell() {
|
|
kytag03_class* kytag3_p = (kytag03_class*)field_0x280c.getActor();
|
|
|
|
if (field_0x319c >= 0) {
|
|
if (i_checkSpecialDemoMode()) {
|
|
i_dComIfGp_getEvent().reset(this);
|
|
dComIfGp_clearPlayerStatus1(0, 0x4000000);
|
|
|
|
if (mProcVar3.field_0x300e.z == SMELL_YELIA_POUCH) {
|
|
fopAcM_orderOtherEvent(this, "SMELL_1st", 0xFFFF, 0x400, 1);
|
|
} else {
|
|
fopAcM_orderOtherEvent(this, "SMELL_Child", 0xFFFF, 0x400, 1);
|
|
}
|
|
|
|
mDemo.setSystemDemoType();
|
|
} else if (mDemo.getParam0() == 0) {
|
|
dComIfGs_onEventBit(field_0x319c);
|
|
dComIfGp_evmng_cutEnd(field_0x3184);
|
|
|
|
if (kytag3_p != NULL) {
|
|
kytag3_p->field_0x588 = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (checkUnderMove0BckNoArcWolf(WANM_SMELL)) {
|
|
voiceStartLevel(Z2SE_WL_V_SNIFF);
|
|
}
|
|
|
|
if (mProcVar3.field_0x300e.y != 0) {
|
|
field_0x2f99 = 4;
|
|
}
|
|
|
|
if (mProcVar2.field_0x300c != 0) {
|
|
if (mMsgFlow.doFlow(this, NULL, 0)) {
|
|
if (kytag3_p != NULL) {
|
|
kytag3_p->field_0x588 = 0;
|
|
}
|
|
resetSpecialEvent();
|
|
} else if (mMsgFlow.getChoiceNo() == 0 &&
|
|
mProcVar3.field_0x300e.z != dComIfGs_getCollectSmell())
|
|
{
|
|
setSmellSave();
|
|
}
|
|
} else if (mProcVar3.field_0x300e.y == 0) {
|
|
if ((kytag3_p == NULL || (field_0x319c < 0 && kytag3_p->field_0x588 == 2)) ||
|
|
(mDemo.getDemoMode() == 0x37 && mDemo.getParam0() == 1))
|
|
{
|
|
setSingleAnimeWolf(WANM_GET_A, 1.0f, 10.0f, -1, 3.0f);
|
|
dComIfGp_setPlayerStatus1(0, 0x4000000);
|
|
|
|
if (kytag3_p != NULL) {
|
|
fopAcM_OnStatus(kytag3_p, 0x800);
|
|
}
|
|
|
|
mProcVar3.field_0x300e.y = 1;
|
|
|
|
dCam_getBody()->StartEventCamera(8, fopAcM_GetID(this), 0);
|
|
field_0x2f99 = 12;
|
|
|
|
if (field_0x3198 == 0xBBC) {
|
|
setSmellSave();
|
|
}
|
|
} else if (mProcVar0.field_0x3008 != 0) {
|
|
mProcVar0.field_0x3008--;
|
|
}
|
|
} else if (checkAnmEnd(mUnderFrameCtrl)) {
|
|
setSingleAnimeWolfBase(WANM_GET);
|
|
field_0x2f99 = 12;
|
|
mProcVar2.field_0x300c = 1;
|
|
mMsgFlow.init(this, field_0x3198, 0, NULL);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int daAlink_c::procWolfGetSmell() {
|
|
nofralloc
|
|
#include "asm/d/a/d_a_alink/procWolfGetSmell__9daAlink_cFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|