mirror of https://github.com/zeldaret/tp.git
5027 lines
170 KiB
C++
5027 lines
170 KiB
C++
/**
|
|
* @file d_a_b_gnd.cpp
|
|
*
|
|
*/
|
|
|
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
|
|
|
#include "d/actor/d_a_b_gnd.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/actor/d_a_alink.h"
|
|
#include "d/actor/d_a_horse.h"
|
|
#include "d/d_s_play.h"
|
|
#include "f_op/f_op_msg_mng.h"
|
|
#include "m_Do/m_Do_graphic.h"
|
|
#include "d/actor/d_a_mant.h"
|
|
#include "d/actor/d_a_mg_rod.h"
|
|
|
|
#include "Z2AudioLib/Z2Instances.h"
|
|
|
|
class daB_GND_HIO_c : public JORReflexible {
|
|
public:
|
|
/* 805F4A4C */ daB_GND_HIO_c();
|
|
/* 80602230 */ virtual ~daB_GND_HIO_c() {}
|
|
|
|
void genMessage(JORMContext*);
|
|
|
|
/* 0x04 */ s8 no;
|
|
/* 0x08 */ f32 model_size;
|
|
/* 0x0C */ f32 field_0xc;
|
|
/* 0x10 */ f32 field_0x10;
|
|
/* 0x14 */ f32 field_0x14;
|
|
/* 0x18 */ f32 field_0x18;
|
|
};
|
|
|
|
enum B_GND_RES_FILE_ID { // IDs and indexes are synced
|
|
/* BCK */
|
|
B_GND_BCK_AL_EGND_TODOME=0x8,
|
|
B_GND_BCK_AL_EGND_TODOMEWAIT=0x9,
|
|
B_GND_BCK_AL_EGND_TUBAZERI_A=0xA,
|
|
B_GND_BCK_AL_EGND_TUBAZERI_B=0xB,
|
|
B_GND_BCK_AL_EGND_TUBAZERI_C=0xC,
|
|
B_GND_BCK_AL_EGND_TUBAZERI_LOSE=0xD,
|
|
B_GND_BCK_AL_EGND_TUBAZERI_WIN=0xE,
|
|
B_GND_BCK_AL_EGND_WH=0xF,
|
|
B_GND_BCK_AL_FEGND_TODOME=0x10,
|
|
B_GND_BCK_AL_FEGND_TODOMEWAIT=0x11,
|
|
B_GND_BCK_AL_FEGND_WH=0x12,
|
|
B_GND_BCK_EGND_ATTACKA=0x13,
|
|
B_GND_BCK_EGND_ATTACKB=0x14,
|
|
B_GND_BCK_EGND_ATTACKC_A=0x15,
|
|
B_GND_BCK_EGND_ATTACKC_B=0x16,
|
|
B_GND_BCK_EGND_ATTACKC_C=0x17,
|
|
B_GND_BCK_EGND_ATTACKD=0x18,
|
|
B_GND_BCK_EGND_ATTACKE_A=0x19,
|
|
B_GND_BCK_EGND_ATTACKE_B=0x1A,
|
|
B_GND_BCK_EGND_ATTACKE_C=0x1B,
|
|
B_GND_BCK_EGND_ATTACKE_C1=0x1C,
|
|
B_GND_BCK_EGND_ATTACKE_C2=0x1D,
|
|
B_GND_BCK_EGND_ATTACKF=0x1E,
|
|
B_GND_BCK_EGND_ATTACKG=0x1F,
|
|
B_GND_BCK_EGND_CHOUHATU=0x20,
|
|
B_GND_BCK_EGND_DAMAGE_A=0x21,
|
|
B_GND_BCK_EGND_DAMAGE_B=0x22,
|
|
B_GND_BCK_EGND_DEFENSE_A=0x23,
|
|
B_GND_BCK_EGND_DEFENSE_B=0x24,
|
|
B_GND_BCK_EGND_DEFENSE_C=0x25,
|
|
B_GND_BCK_EGND_DEFENSE_D=0x26,
|
|
B_GND_BCK_EGND_DEFENSE_E=0x27,
|
|
B_GND_BCK_EGND_DOWN=0x28,
|
|
B_GND_BCK_EGND_DOWNB=0x29,
|
|
B_GND_BCK_EGND_DOWNUP=0x2A,
|
|
B_GND_BCK_EGND_DOWNWAIT=0x2B,
|
|
B_GND_BCK_EGND_JUMP_A=0x2C,
|
|
B_GND_BCK_EGND_JUMP_B=0x2D,
|
|
B_GND_BCK_EGND_JUMP_C=0x2E,
|
|
B_GND_BCK_EGND_KAMAE=0x2F,
|
|
B_GND_BCK_EGND_KURUSIMI=0x30,
|
|
B_GND_BCK_EGND_KUZURE=0x31,
|
|
B_GND_BCK_EGND_LAUGH=0x32,
|
|
B_GND_BCK_EGND_LOOK=0x33,
|
|
B_GND_BCK_EGND_RATTACK01_A=0x34,
|
|
B_GND_BCK_EGND_RATTACK01_B=0x35,
|
|
B_GND_BCK_EGND_RATTACK01_C=0x36,
|
|
B_GND_BCK_EGND_RATTACK01_D=0x37,
|
|
B_GND_BCK_EGND_RATTACK02_A=0x38,
|
|
B_GND_BCK_EGND_RATTACK02_B=0x39,
|
|
B_GND_BCK_EGND_RATTACK02_C=0x3A,
|
|
B_GND_BCK_EGND_RBRAKE=0x3B,
|
|
B_GND_BCK_EGND_RDAMEGE01_A=0x3C,
|
|
B_GND_BCK_EGND_RDAMEGE01_B=0x3D,
|
|
B_GND_BCK_EGND_RDAMEGE02L=0x3E,
|
|
B_GND_BCK_EGND_RDAMEGE02R=0x3F,
|
|
B_GND_BCK_EGND_RDASH=0x40,
|
|
B_GND_BCK_EGND_RDOWN=0x41,
|
|
B_GND_BCK_EGND_RINANAKI01=0x42,
|
|
B_GND_BCK_EGND_RINANAKI02L=0x43,
|
|
B_GND_BCK_EGND_RINANAKI02R=0x44,
|
|
B_GND_BCK_EGND_RJUMP_END=0x45,
|
|
B_GND_BCK_EGND_RJUMP_MIDDLE=0x46,
|
|
B_GND_BCK_EGND_RJUMP_START=0x47,
|
|
B_GND_BCK_EGND_RRETURN=0x48,
|
|
B_GND_BCK_EGND_RRUN=0x49,
|
|
B_GND_BCK_EGND_RSPUR=0x4A,
|
|
B_GND_BCK_EGND_RWAIT=0x4B,
|
|
B_GND_BCK_EGND_RWALK=0x4C,
|
|
B_GND_BCK_EGND_SAYAOPEN=0x4D,
|
|
B_GND_BCK_EGND_SIDEJUMP_LA=0x4E,
|
|
B_GND_BCK_EGND_SIDEJUMP_LB=0x4F,
|
|
B_GND_BCK_EGND_SIDEJUMP_RA=0x50,
|
|
B_GND_BCK_EGND_SIDEJUMP_RB=0x51,
|
|
B_GND_BCK_EGND_STANDUP=0x52,
|
|
B_GND_BCK_EGND_TODOME=0x53,
|
|
B_GND_BCK_EGND_TODOME_02=0x54,
|
|
B_GND_BCK_EGND_TUBAZERI_A=0x55,
|
|
B_GND_BCK_EGND_TUBAZERI_B=0x56,
|
|
B_GND_BCK_EGND_TUBAZERI_C=0x57,
|
|
B_GND_BCK_EGND_TUBAZERI_LOSE=0x58,
|
|
B_GND_BCK_EGND_TUBAZERI_WIN=0x59,
|
|
B_GND_BCK_EGND_WAIT01=0x5A,
|
|
B_GND_BCK_EGND_WAIT02=0x5B,
|
|
B_GND_BCK_EGND_WAIT03=0x5C,
|
|
B_GND_BCK_EGND_WALK=0x5D,
|
|
B_GND_BCK_ZELDA_SURPRISE=0x5E,
|
|
|
|
/* BMDR */
|
|
B_GND_BMD_EGND_SHEATH=0x61,
|
|
B_GND_BMD_EGND_SWORD=0x62,
|
|
B_GND_BMD_MANT_SHADOW8=0x63,
|
|
B_GND_BMD_SWORD_EFFECTA=0x64,
|
|
B_GND_BMD_SWORD_EFFECTB=0x65,
|
|
B_GND_BMD_SWORD_EFFECTC=0x66,
|
|
|
|
/* BMDV */
|
|
B_GND_BMD_EGND=0x69,
|
|
B_GND_BMD_ZELDA=0x6A,
|
|
|
|
/* BRK */
|
|
B_GND_BRK_EGND_CORE_BEAT=0x6D,
|
|
|
|
/* BTK */
|
|
B_GND_BTK_AL_FEGND_TODOME=0x70,
|
|
B_GND_BTK_AL_FEGND_WH=0x71,
|
|
B_GND_BTK_EGND_KAMAE=0x72,
|
|
B_GND_BTK_EGND_LAUGH=0x73,
|
|
B_GND_BTK_EGND_LOOK=0x74,
|
|
B_GND_BTK_EGND_SAYAOPEN=0x75,
|
|
B_GND_BTK_EGND_STANDUP=0x76,
|
|
B_GND_BTK_EYE_DEFAULT=0x77,
|
|
B_GND_BTK_ZELDA_SUEPRISE=0x78,
|
|
|
|
/* BTP */
|
|
B_GND_BTP_EGND_MEPACHI=0x7B,
|
|
B_GND_BTP_ZELDA_SUEPRISE=0x7C,
|
|
};
|
|
|
|
enum B_HG_RES_FILE_ID { // IDs and indexes are synced
|
|
/* BCK */
|
|
B_HG_BCK_HG_DOWN=0x5,
|
|
B_HG_BCK_HG_JUMP_END=0x6,
|
|
B_HG_BCK_HG_JUMP_MIDDLE=0x7,
|
|
B_HG_BCK_HG_JUMP_START=0x8,
|
|
B_HG_BCK_HG_RUN=0x9,
|
|
B_HG_BCK_HG_RUN_DASH=0xA,
|
|
B_HG_BCK_HG_STAND=0xB,
|
|
B_HG_BCK_HG_STANDTURNL=0xC,
|
|
B_HG_BCK_HG_STANDTURNR=0xD,
|
|
B_HG_BCK_HG_STOP=0xE,
|
|
B_HG_BCK_HG_WAIT=0xF,
|
|
B_HG_BCK_HG_WALK=0x10,
|
|
|
|
/* BMDR */
|
|
B_HG_BMD_HG=0x13,
|
|
|
|
/* TEX */
|
|
B_HG_BTI_TAZUNA=0x16,
|
|
};
|
|
|
|
enum daB_GND_ACTION {
|
|
ACTION_HWAIT_1 = 1,
|
|
ACTION_HWAIT_2 = 2,
|
|
ACTION_HRUN_A = 3,
|
|
ACTION_HRUN_P = 4,
|
|
ACTION_HJUMP = 5,
|
|
ACTION_HEND = 6,
|
|
ACTION_WAIT = 10,
|
|
ACTION_ATTACK = 11,
|
|
ACTION_DEFENCE = 12,
|
|
ACTION_JUMP = 13,
|
|
ACTION_SIDE = 14,
|
|
ACTION_TUBA = 19,
|
|
ACTION_DAMAGE = 20,
|
|
ACTION_DOWN = 21,
|
|
ACTION_END = 22,
|
|
};
|
|
|
|
static u8 l_initHIO;
|
|
|
|
/* 805F4A4C-805F4A94 0000EC 0048+00 1/1 0/0 0/0 .text __ct__13daB_GND_HIO_cFv */
|
|
daB_GND_HIO_c::daB_GND_HIO_c() {
|
|
no = -1;
|
|
model_size = 1.0f;
|
|
field_0xc = 57.0f;
|
|
field_0x10 = 65.0f;
|
|
field_0x14 = 76.0f;
|
|
field_0x18 = 40.0f;
|
|
}
|
|
|
|
/* 805F4A94-805F4B48 000134 00B4+00 15/15 0/0 0/0 .text anm_init__FP11b_gnd_classifUcf */
|
|
static void anm_init(b_gnd_class* i_this, int i_anmID, f32 i_morf, u8 i_attr, f32 i_speed) {
|
|
i_this->mAnmID = i_anmID;
|
|
if (i_anmID == B_GND_BCK_EGND_RRUN) {
|
|
i_anmID = B_GND_BCK_EGND_RDASH;
|
|
}
|
|
i_this->mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_gnd", i_anmID), i_attr, i_morf, i_speed, 0.0f, -1.0f);
|
|
}
|
|
|
|
/* 805F4B48-805F4C00 0001E8 00B8+00 7/7 0/0 0/0 .text h_anm_init__FP11b_gnd_classifUcf */
|
|
static void h_anm_init(b_gnd_class* i_this, int i_anmID, f32 i_morf, u8 i_attr, f32 i_speed) {
|
|
i_this->mHorseAnmID = i_anmID;
|
|
if (i_anmID == B_HG_BCK_HG_RUN) {
|
|
i_anmID = B_HG_BCK_HG_RUN_DASH;
|
|
}
|
|
i_this->mpHorseMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_hg", i_anmID), i_attr, i_morf, i_speed, 0.0f, -1.0f);
|
|
}
|
|
|
|
/* 805F4C00-805F4DCC 0002A0 01CC+00 1/1 0/0 0/0 .text nodeCallBack__FP8J3DJointi */
|
|
static int nodeCallBack(J3DJoint* i_joint, int param_2) {
|
|
if (param_2 == 0) {
|
|
int jntNo = i_joint->getJntNo();
|
|
J3DModel* model = j3dSys.getModel();
|
|
b_gnd_class* a_this = (b_gnd_class*)model->getUserArea();
|
|
|
|
if (a_this != NULL) {
|
|
MTXCopy(model->getAnmMtx(jntNo), *calc_mtx);
|
|
|
|
if (jntNo == 1) {
|
|
cMtx_XrotM(*calc_mtx, a_this->mGndBodyRotX / 4);
|
|
} else if (jntNo == 4) {
|
|
cMtx_XrotM(*calc_mtx, a_this->mGndBodyRotX * 0.75f);
|
|
cMtx_ZrotM(*calc_mtx, -a_this->mGndHeadRotZ);
|
|
} else if (jntNo == 28) {
|
|
cMtx_XrotM(*calc_mtx, a_this->mGndArmRRotX);
|
|
} else if (jntNo == 17) {
|
|
cMtx_YrotM(*calc_mtx, a_this->mGndShoulderLRotY);
|
|
} else if (jntNo == 37) {
|
|
cMtx_XrotM(*calc_mtx, a_this->mGndLegRotX);
|
|
} else if (jntNo == 41) {
|
|
cMtx_XrotM(*calc_mtx, -a_this->mGndLegRotX);
|
|
}
|
|
|
|
model->setAnmMtx(jntNo, *calc_mtx);
|
|
MTXCopy(*calc_mtx, J3DSys::mCurrentMtx);
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 805F4DCC-805F4F38 00046C 016C+00 1/1 0/0 0/0 .text h_nodeCallBack__FP8J3DJointi */
|
|
static int h_nodeCallBack(J3DJoint* i_joint, int param_2) {
|
|
if (param_2 == 0) {
|
|
int jntNo = i_joint->getJntNo();
|
|
J3DModel* model = j3dSys.getModel();
|
|
b_gnd_class* a_this = (b_gnd_class*)model->getUserArea();
|
|
|
|
if (a_this != NULL) {
|
|
MTXCopy(model->getAnmMtx(jntNo), *calc_mtx);
|
|
|
|
if (jntNo == 4 || jntNo == 5) {
|
|
cMtx_ZrotM(*calc_mtx, -a_this->mHorseLegRot * 2);
|
|
} else if (jntNo == 8 || jntNo == 9) {
|
|
cMtx_YrotM(*calc_mtx, -a_this->mHorseLegRot * 2);
|
|
} else if (jntNo == 28 || jntNo == 29) {
|
|
cMtx_YrotM(*calc_mtx, a_this->mHorseLegRot << 1);
|
|
} else if (jntNo == 32 || jntNo == 33) {
|
|
cMtx_YrotM(*calc_mtx, a_this->mHorseLegRot << 1);
|
|
}
|
|
|
|
model->setAnmMtx(jntNo, *calc_mtx);
|
|
MTXCopy(*calc_mtx, J3DSys::mCurrentMtx);
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 805F4F38-805F53A4 0005D8 046C+00 1/0 0/0 0/0 .text daB_GND_Draw__FP11b_gnd_class */
|
|
static int daB_GND_Draw(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
|
|
if (i_this->mNoDrawTimer != 0) {
|
|
return 1;
|
|
}
|
|
|
|
J3DModel* model = i_this->mpModelMorf->getModel();
|
|
g_env_light.settingTevStruct(0, &a_this->current.pos, &a_this->tevStr);
|
|
|
|
i_this->mpGndEyeBtk[i_this->mGndEyeBtkNo]->entry(model->getModelData());
|
|
i_this->mpGndCoreBrk->entry(model->getModelData());
|
|
i_this->mpGndEyeBtp->entry(model->getModelData());
|
|
|
|
g_env_light.setLightTevColorType_MAJI(model, &a_this->tevStr);
|
|
|
|
i_this->mpModelMorf->entryDL();
|
|
|
|
g_env_light.settingTevStruct(5, &a_this->current.pos, &i_this->mSwordTevstr);
|
|
g_env_light.setLightTevColorType_MAJI(i_this->mpSwordModel, &i_this->mSwordTevstr);
|
|
mDoExt_modelUpdateDL(i_this->mpSwordModel);
|
|
|
|
if (i_this->mSwordBlurAlpha > 10) {
|
|
g_env_light.setLightTevColorType_MAJI(i_this->mpSwordBlurModel[i_this->mSwordBlurType], &a_this->tevStr);
|
|
|
|
J3DMaterial* material = i_this->mpSwordBlurModel[i_this->mSwordBlurType]->getModelData()->getMaterialNodePointer(0);
|
|
material->getTevKColor(3)->a = i_this->mSwordBlurAlpha;
|
|
mDoExt_modelUpdateDL(i_this->mpSwordBlurModel[i_this->mSwordBlurType]);
|
|
}
|
|
|
|
if (!i_this->mHideSheath) {
|
|
g_env_light.setLightTevColorType_MAJI(i_this->mpSheathModel, &a_this->tevStr);
|
|
mDoExt_modelUpdateDL(i_this->mpSheathModel);
|
|
}
|
|
|
|
if (i_this->mDrawZelda) {
|
|
g_env_light.setLightTevColorType_MAJI(i_this->mpZeldaModel->getModel(), &a_this->tevStr);
|
|
i_this->mpZeldaBtk->entry(i_this->mpZeldaModel->getModel()->getModelData());
|
|
i_this->mpZeldaBtp->entry(i_this->mpZeldaModel->getModel()->getModelData());
|
|
i_this->mpZeldaModel->entryDL();
|
|
}
|
|
|
|
if (i_this->mDemoCamMode >= 60) {
|
|
return 1;
|
|
}
|
|
|
|
for (int i = 0; i < 36; i++) {
|
|
g_env_light.setLightTevColorType_MAJI(i_this->mpMantShadowModel[i], &a_this->tevStr);
|
|
mDoExt_modelUpdateDL(i_this->mpMantShadowModel[i]);
|
|
}
|
|
|
|
J3DModel* horse_model = NULL;
|
|
if (i_this->mDrawHorse) {
|
|
horse_model = i_this->mpHorseMorf->getModel();
|
|
g_env_light.setLightTevColorType_MAJI(horse_model, &a_this->tevStr);
|
|
i_this->mpHorseMorf->entryDL();
|
|
}
|
|
|
|
cXyz shadowPos;
|
|
shadowPos.set(a_this->current.pos.x, a_this->current.pos.y + 100.0f, a_this->current.pos.z);
|
|
|
|
i_this->mShadowID = dComIfGd_setShadow(i_this->mShadowID, 1, model,
|
|
&shadowPos, 3000.0f, 0.0f, a_this->current.pos.y,
|
|
i_this->mAcch.GetGroundH(), i_this->mAcch.m_gnd,
|
|
&a_this->tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex());
|
|
|
|
dComIfGd_addRealShadow(i_this->mShadowID, i_this->mpSwordModel);
|
|
|
|
if (i_this->mDrawHorse) {
|
|
dComIfGd_addRealShadow(i_this->mShadowID, horse_model);
|
|
} else {
|
|
for (int i = 0; i < 36; i++) {
|
|
dComIfGd_addRealShadow(i_this->mShadowID, i_this->mpMantShadowModel[i]);
|
|
}
|
|
}
|
|
|
|
if (i_this->mDrawHorse) {
|
|
static GXColor l_color = {20, 15, 0, 255};
|
|
|
|
i_this->mHorseReins[0].update(16, l_color, &a_this->tevStr);
|
|
dComIfGd_set3DlineMat(&i_this->mHorseReins[0]);
|
|
|
|
i_this->mHorseReins[1].update(16, l_color, &a_this->tevStr);
|
|
dComIfGd_set3DlineMat(&i_this->mHorseReins[1]);
|
|
|
|
i_this->field_0x21e8.update(2, l_color, &a_this->tevStr);
|
|
dComIfGd_set3DlineMat(&i_this->field_0x21e8);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 805F53E0-805F5574 000A80 0194+00 1/1 0/0 0/0 .text shot_s_sub__FPvPv */
|
|
static void* shot_s_sub(void* i_actor, void* i_data) {
|
|
if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_ARROW &&
|
|
(fopAcM_GetParam(i_actor) == 1 || fopAcM_GetParam(i_actor) == 2))
|
|
{
|
|
cXyz vec_to_arrow = ((fopAc_ac_c*)i_data)->current.pos - ((fopAc_ac_c*)i_actor)->current.pos;
|
|
if (vec_to_arrow.abs() < 1000.0f) {
|
|
return i_actor;
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
/* 80602FB4-80602FD0 000054 001C+00 3/5 0/0 0/0 .bss l_HIO */
|
|
static daB_GND_HIO_c l_HIO;
|
|
|
|
/* 805F5574-805F5BE8 000C14 0674+00 1/1 0/0 0/0 .text gake_check__FP11b_gnd_class */
|
|
static u32 gake_check(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
dBgS_GndChk gnd_chk;
|
|
cXyz sp40;
|
|
cXyz sp34;
|
|
|
|
if (a_this->current.pos.y < -5000.0f) {
|
|
a_this->current.pos = a_this->home.pos;
|
|
a_this->old.pos = a_this->current.pos;
|
|
}
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
// check if ganondorf is near one of the field exits
|
|
// 0: Kakariko, 1: Eldin Bridge, 2: Castle Town, 3: Eldin Gorge
|
|
static f32 chk_x[] = {14167.0f, 34775.0f, -24164.0f, -11627.0f};
|
|
static f32 chk_z[] = {21775.0f, -16467.0f, 9747.0f, 22601.0f};
|
|
|
|
sp40.x = chk_x[i] - a_this->current.pos.x;
|
|
sp40.z = chk_z[i] - a_this->current.pos.z;
|
|
s16 sp12 = cM_atan2s(sp40.x, sp40.z) - a_this->shape_angle.y;
|
|
|
|
if (JMAFastSqrt(sp40.x * sp40.x + sp40.z * sp40.z) < 6000.0f && sp12 < 0x4000 && -0x4000 < sp12) {
|
|
if (sp12 > 0) {
|
|
return 4;
|
|
} else {
|
|
return 5;
|
|
}
|
|
}
|
|
}
|
|
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
BOOL sp14 = FALSE;
|
|
|
|
cXyz sp28;
|
|
sp40.x = 200.0f;
|
|
sp40.y = 1000.0f;
|
|
sp40.z = 200.0f;
|
|
MtxPosition(&sp40, &sp34);
|
|
sp34 += i_this->current.pos;
|
|
gnd_chk.SetPos(&sp34);
|
|
|
|
if (a_this->current.pos.y - dComIfG_Bgsp().GroundCross(&gnd_chk) > 2000.0f) {
|
|
sp28 = sp34;
|
|
sp14 = TRUE;
|
|
} else {
|
|
sp40.x *= -1.0f;
|
|
MtxPosition(&sp40, &sp34);
|
|
sp34 += i_this->current.pos;
|
|
gnd_chk.SetPos(&sp34);
|
|
if (i_this->current.pos.y - dComIfG_Bgsp().GroundCross(&gnd_chk) > 2000.0f) {
|
|
sp28 = sp34;
|
|
sp14 = TRUE;
|
|
} else {
|
|
sp40.x = 0.0f;
|
|
sp40.y = 1000.0f;
|
|
sp40.z = 250.0f;
|
|
MtxPosition(&sp40, &sp34);
|
|
sp34 += i_this->current.pos;
|
|
gnd_chk.SetPos(&sp34);
|
|
if (i_this->current.pos.y - dComIfG_Bgsp().GroundCross(&gnd_chk) > 2000.0f) {
|
|
sp28 = sp34;
|
|
sp14 = TRUE;
|
|
}
|
|
}
|
|
}
|
|
|
|
static cXyz k_pos(0.0f, 0.0f, 0.0f);
|
|
|
|
if (sp14) {
|
|
if (k_pos.y < -5000.0f) {
|
|
sp28.y = a_this->current.pos.y;
|
|
k_pos = sp28;
|
|
}
|
|
|
|
sp40 = a_this->current.pos - k_pos;
|
|
if (sp40.abs() < 500.0f) {
|
|
cMtx_YrotS(*calc_mtx, cM_atan2s(sp40.x, sp40.z));
|
|
sp40.x = 0.0f;
|
|
sp40.y = 0.0f;
|
|
sp40.z = 500.0f;
|
|
MtxPosition(&sp40, &sp34);
|
|
|
|
a_this->current.pos.x = sp34.x + k_pos.x;
|
|
a_this->current.pos.z = sp34.z + k_pos.z;
|
|
}
|
|
} else {
|
|
k_pos.set(0.0f, -10000.0f, 0.0f);
|
|
}
|
|
|
|
sp40.x = 700.0f;
|
|
sp40.y = 1000.0f;
|
|
sp40.z = 2000.0f;
|
|
MtxPosition(&sp40, &sp34);
|
|
sp34 += i_this->current.pos;
|
|
gnd_chk.SetPos(&sp34);
|
|
|
|
if (i_this->current.pos.y - dComIfG_Bgsp().GroundCross(&gnd_chk) > 2000.0f) {
|
|
return 2;
|
|
}
|
|
|
|
sp40.x = -700.0f;
|
|
MtxPosition(&sp40, &sp34);
|
|
sp34 += i_this->current.pos;
|
|
gnd_chk.SetPos(&sp34);
|
|
|
|
if (i_this->current.pos.y - dComIfG_Bgsp().GroundCross(&gnd_chk) > 2000.0f) {
|
|
return 3;
|
|
}
|
|
|
|
sp40.x = 0.0f;
|
|
sp40.y = 1000.0f;
|
|
sp40.z = 2500.0f;
|
|
MtxPosition(&sp40, &sp34);
|
|
sp34 += i_this->current.pos;
|
|
gnd_chk.SetPos(&sp34);
|
|
|
|
if (i_this->current.pos.y - dComIfG_Bgsp().GroundCross(&gnd_chk) > 2000.0f) {
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* 805F5BE8-805F5EF4 001288 030C+00 1/1 0/0 0/0 .text saku_jump_check__FP11b_gnd_class */
|
|
static BOOL saku_jump_check(b_gnd_class* i_this) {
|
|
if (i_this->mGakeChkType >= 4) {
|
|
return FALSE;
|
|
}
|
|
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
dBgS_LinChk lineChk;
|
|
cM3dGPla plane;
|
|
cXyz sp54, sp48, sp3C;
|
|
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
cMtx_XrotM(*calc_mtx, a_this->shape_angle.x);
|
|
|
|
sp54.x = 10.0f;
|
|
sp54.y = 150.0f;
|
|
sp54.z = 900.0f;
|
|
|
|
MtxPosition(&sp54, &sp3C);
|
|
|
|
sp3C += a_this->current.pos;
|
|
sp3C.y += 200.0f;
|
|
|
|
sp48 = a_this->current.pos;
|
|
sp48.y += 350.0f;
|
|
|
|
lineChk.Set(&sp48, &sp3C, a_this);
|
|
|
|
if (dComIfG_Bgsp().LineCross(&lineChk) && dComIfG_Bgsp().GetTriPla(lineChk, &plane) && !cBgW_CheckBGround(plane.mNormal.y)) {
|
|
return FALSE;
|
|
}
|
|
|
|
sp48.y -= 250.0f;
|
|
sp3C.y -= 200.0f;
|
|
lineChk.Set(&sp48, &sp3C, a_this);
|
|
|
|
if (dComIfG_Bgsp().LineCross(&lineChk)) {
|
|
if (dComIfG_Bgsp().GetTriPla(lineChk, &plane) && !cBgW_CheckBGround(plane.mNormal.y)) {
|
|
cXyz line_cross_pos(lineChk.GetCross());
|
|
cXyz sp24;
|
|
|
|
sp54.x *= -1.0f;
|
|
MtxPosition(&sp54, &sp3C);
|
|
sp3C += a_this->current.pos;
|
|
lineChk.Set(&sp48, &sp3C, a_this);
|
|
|
|
if (dComIfG_Bgsp().LineCross(&lineChk)) {
|
|
sp24 = lineChk.GetCross();
|
|
} else {
|
|
return FALSE;
|
|
}
|
|
|
|
sp54 = sp24 - line_cross_pos;
|
|
|
|
s16 var_r28 = cM_atan2s(sp54.x, sp54.z) + 0x4000 - a_this->shape_angle.y;
|
|
if (var_r28 > -0x3000 && var_r28 < 0x3000) {
|
|
return TRUE;
|
|
}
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
/* 805F5F3C-805F6068 0015DC 012C+00 1/1 0/0 0/0 .text b_gnd_h_wait__FP11b_gnd_class */
|
|
static void b_gnd_h_wait(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
f32 player_distxz = i_this->mPlayerDistXZ;
|
|
s16 player_angle = i_this->mPlayerAngleY;
|
|
|
|
switch (i_this->mMoveMode) {
|
|
case -1:
|
|
Z2GetAudioMgr()->bgmStart(0x200005D, 0, 0);
|
|
case 0:
|
|
anm_init(i_this, B_GND_BCK_EGND_RWAIT, 10.0f, 2, 1.0f);
|
|
h_anm_init(i_this, B_HG_BCK_HG_WAIT, 10.0f, 2, 1.0f);
|
|
i_this->mMoveMode = 1;
|
|
case 1:
|
|
if (i_this->field_0xc44[0] == 0) {
|
|
i_this->mMoveMode = 2;
|
|
}
|
|
break;
|
|
case 2:
|
|
cLib_addCalcAngleS2(&a_this->current.angle.y, player_angle, 8, 0x200);
|
|
|
|
s16 angle_diff = player_angle - a_this->current.angle.y;
|
|
if (angle_diff < 0x800 && angle_diff > -0x800) {
|
|
i_this->mActionMode = ACTION_HWAIT_2;
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
}
|
|
|
|
cLib_addCalc0(&a_this->speedF, 1.0f, 2.0f);
|
|
}
|
|
|
|
/* 805F6068-805F6290 001708 0228+00 1/1 0/0 0/0 .text b_gnd_h_wait2__FP11b_gnd_class */
|
|
static void b_gnd_h_wait2(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
|
|
|
cXyz sp18;
|
|
cXyz spC;
|
|
f32 player_distxz = i_this->mPlayerDistXZ;
|
|
s16 player_angle = i_this->mPlayerAngleY;
|
|
int h_anm_frame = i_this->mpHorseMorf->getFrame();
|
|
|
|
switch (i_this->mMoveMode) {
|
|
case 0:
|
|
if (i_this->mGakeChkType != 0) {
|
|
i_this->field_0x5cc = a_this->current.angle.y + 0x8000;
|
|
} else if (cM_rndF(1.0f) < 0.5f) {
|
|
i_this->field_0x5cc = player_angle + 0x2000;
|
|
} else {
|
|
i_this->field_0x5cc = player_angle + -0x2000;
|
|
}
|
|
|
|
if ((s16)(i_this->field_0x5cc - a_this->current.angle.y) > 0) {
|
|
anm_init(i_this, B_GND_BCK_EGND_RINANAKI02L, 3.0f, 0, 1.0f);
|
|
h_anm_init(i_this, B_HG_BCK_HG_STANDTURNL, 3.0f, 0, 1.0f);
|
|
OS_REPORT(" GND TURN L\n");
|
|
} else {
|
|
anm_init(i_this, B_GND_BCK_EGND_RINANAKI02R, 3.0f, 0, 1.0f);
|
|
h_anm_init(i_this, B_HG_BCK_HG_STANDTURNR, 3.0f, 0, 1.0f);
|
|
OS_REPORT(" GND TURN R\n");
|
|
}
|
|
|
|
i_this->mMoveMode = 1;
|
|
i_this->field_0xc68 = 0x100;
|
|
case 1:
|
|
if (h_anm_frame >= 12) {
|
|
cLib_addCalcAngleS2(&a_this->current.angle.y, i_this->field_0x5cc, 4, i_this->field_0xc68);
|
|
cLib_addCalcAngleS2(&i_this->field_0xc68, 0x400, 1, 0x80);
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
anm_init(i_this, B_GND_BCK_EGND_RWAIT, 10.0f, 2, 1.0f);
|
|
h_anm_init(i_this, B_HG_BCK_HG_WAIT, 10.0f, 2, 1.0f);
|
|
i_this->mMoveMode = 2;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (player_distxz < 4000.0f || player_distxz > 7500.0f) {
|
|
i_this->mActionMode = ACTION_HRUN_P;
|
|
i_this->mMoveMode = 0;
|
|
i_this->field_0xc44[3] = 100;
|
|
}
|
|
}
|
|
|
|
cLib_addCalc0(&a_this->speedF, 1.0f, 1.0f);
|
|
}
|
|
|
|
/* 80602FF8-8060305C 000098 0060+04 2/4 0/0 0/0 .bss b_path */
|
|
static cXyz b_path[8];
|
|
|
|
/* 805F6290-805F6FA4 001930 0D14+00 2/1 0/0 0/0 .text b_gnd_h_run_a__FP11b_gnd_class */
|
|
static void b_gnd_h_run_a(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
|
cXyz sp8C, sp80;
|
|
|
|
f32 var_f30;
|
|
f32 player_distxz = i_this->mPlayerDistXZ;
|
|
f32 speed_target = 0.0f;
|
|
f32 speed_step = 1.0f;
|
|
|
|
s8 sp9 = 0;
|
|
if (daPy_getPlayerActorClass()->checkHorseRide() && dComIfGp_getHorseActor()->speedF >= 30.0f) {
|
|
sp9 = 1;
|
|
}
|
|
|
|
s16 sp12 = a_this->current.angle.y;
|
|
f32 anm_speed_target = 1.0f;
|
|
|
|
BOOL sp2C = FALSE;
|
|
s16 sp10 = (i_this->mPlayerAngleY + 0x7FFF) - player->shape_angle.y;
|
|
if (sp10 < 0x4000 && sp10 > -0x4000) {
|
|
sp2C = TRUE;
|
|
}
|
|
|
|
s8 sp8 = false;
|
|
s16 spE = 0x80;
|
|
cXyz sp74, sp68;
|
|
|
|
switch (i_this->mMoveMode) {
|
|
case 0:
|
|
case 1: {
|
|
if (i_this->mAnmID != B_GND_BCK_EGND_RRUN) {
|
|
anm_init(i_this, B_GND_BCK_EGND_RRUN, 5.0f, 2, 1.0f);
|
|
h_anm_init(i_this, B_HG_BCK_HG_RUN, 5.0f, 2, 1.0f);
|
|
i_this->mPlaySpeed = 1.0f;
|
|
}
|
|
|
|
i_this->mMoveMode = 2;
|
|
i_this->field_0xc68 = 0;
|
|
|
|
int sp28 = 0;
|
|
|
|
for (int i = 1; i < 8; i++) {
|
|
sp74 = b_path[sp28] - a_this->current.pos;
|
|
sp68 = b_path[i] - a_this->current.pos;
|
|
|
|
if (sp74.abs() > sp68.abs()) {
|
|
sp28 = i;
|
|
}
|
|
}
|
|
|
|
i_this->field_0xc60 = sp28;
|
|
i_this->field_0xc44[2] = cM_rndF(100.0f) + 100.0f;
|
|
}
|
|
case 2:
|
|
if (i_this->field_0xc44[2] == 0 && sp9) {
|
|
i_this->mMoveMode = 3;
|
|
} else if (player_distxz > 5000.0f && i_this->field_0xc44[3] == 0) {
|
|
if (sp2C) {
|
|
i_this->mMoveMode = 20;
|
|
i_this->field_0xc44[0] = 10;
|
|
} else {
|
|
i_this->mActionMode = ACTION_HRUN_P;
|
|
i_this->mMoveMode = 0;
|
|
i_this->field_0xc44[3] = 100;
|
|
}
|
|
}
|
|
|
|
i_this->field_0xc6a = 1;
|
|
break;
|
|
case 3:
|
|
anm_init(i_this, B_GND_BCK_EGND_RATTACK02_A, 3.0f, 0, 1.0f);
|
|
i_this->mMoveMode = 4;
|
|
i_this->field_0x1e0f = 1;
|
|
i_this->field_0x1e10 = 0.0f;
|
|
case 4:
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
anm_init(i_this, B_GND_BCK_EGND_RATTACK02_B, 3.0f, 2, 1.0f);
|
|
i_this->field_0xc44[0] = 20;
|
|
i_this->mMoveMode = 5;
|
|
}
|
|
break;
|
|
case 5:
|
|
if (i_this->field_0xc44[0] == 0) {
|
|
anm_init(i_this, B_GND_BCK_EGND_RATTACK02_C, 3.0f, 0, 1.0f);
|
|
i_this->mMoveMode = 6;
|
|
i_this->field_0xc44[0] = 15;
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_ATTACK02C, -1);
|
|
}
|
|
break;
|
|
case 6:
|
|
if (i_this->field_0xc44[0] == 1) {
|
|
i_this->field_0x1e50.y = a_this->shape_angle.y + 0x4000;
|
|
i_this->field_0x1e50.x = 0;
|
|
i_this->field_0x1e0f = 2;
|
|
i_this->field_0x1e4c = 40.0f;
|
|
i_this->field_0x1e0e = 0;
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mMoveMode = 2;
|
|
i_this->field_0xc44[2] = cM_rndF(100.0f) + 100.0f;
|
|
}
|
|
break;
|
|
case 7:
|
|
if (i_this->mHorseAnmID != B_HG_BCK_HG_RUN) {
|
|
h_anm_init(i_this, B_HG_BCK_HG_RUN, 5.0f, 2, 1.0f);
|
|
}
|
|
anm_init(i_this, B_GND_BCK_EGND_RDAMEGE01_A, 1.0f, 0, 1.0f);
|
|
i_this->mMoveMode = 8;
|
|
i_this->field_0xc44[0] = 300;
|
|
case 8:
|
|
i_this->field_0x1e08 = 10;
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
anm_init(i_this, B_GND_BCK_EGND_RDAMEGE01_B, 2.0f, 2, 1.0f);
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_DAMAGE01, -1);
|
|
i_this->mMoveMode = 9;
|
|
}
|
|
break;
|
|
case 9:
|
|
i_this->field_0x1e08 = 10;
|
|
if (i_this->field_0xc44[0] == 0) {
|
|
anm_init(i_this, B_GND_BCK_EGND_RRETURN, 3.0f, 0, 1.0f);
|
|
i_this->mMoveMode = 10;
|
|
}
|
|
break;
|
|
case 10:
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
break;
|
|
case 11:
|
|
if (sp10 > 0) {
|
|
anm_init(i_this, B_GND_BCK_EGND_RDAMEGE02L, 2.0f, 0, 1.0f);
|
|
} else {
|
|
anm_init(i_this, B_GND_BCK_EGND_RDAMEGE02R, 2.0f, 0, 1.0f);
|
|
}
|
|
i_this->mMoveMode = 12;
|
|
case 12:
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
break;
|
|
case 20:
|
|
speed_target = l_HIO.field_0xc;
|
|
speed_step = 2.0f;
|
|
if (i_this->field_0xc44[0] == 0) {
|
|
i_this->mMoveMode = 21;
|
|
anm_init(i_this, B_GND_BCK_EGND_RBRAKE, 3.0f, 0, 1.0f);
|
|
h_anm_init(i_this, B_HG_BCK_HG_STOP, 3.0f, 0, 1.0f);
|
|
}
|
|
|
|
i_this->field_0xc6a = 1;
|
|
break;
|
|
case 21:
|
|
speed_step = 2.0f;
|
|
if (a_this->speedF > 15.0f) {
|
|
i_this->field_0xc6a = 2;
|
|
i_this->mGndSound.startCreatureSoundLevel(Z2SE_EN_HG_SLIP, 0, -1);
|
|
}
|
|
|
|
if (a_this->speedF < 2.0f) {
|
|
i_this->mActionMode = ACTION_HWAIT_2;
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
}
|
|
|
|
if (i_this->mMoveMode < 20) {
|
|
sp8C = b_path[i_this->field_0xc60] - a_this->current.pos;
|
|
|
|
var_f30 = JMAFastSqrt(sp8C.x * sp8C.x + sp8C.z * sp8C.z);
|
|
if (var_f30 < 800.0f) {
|
|
sp8C = b_path[(i_this->field_0xc60 + 1) & 7] - a_this->current.pos;
|
|
|
|
sp10 = a_this->current.angle.y - cM_atan2s(sp8C.x, sp8C.z);
|
|
if (sp10 < 0x4000 && sp10 > -0x4000) {
|
|
i_this->field_0xc64 = 1;
|
|
} else {
|
|
i_this->field_0xc64 = -1;
|
|
}
|
|
|
|
i_this->field_0xc60 = i_this->field_0xc60 + i_this->field_0xc64;
|
|
i_this->field_0xc60 = i_this->field_0xc60 & 7;
|
|
sp8 = true;
|
|
i_this->field_0xc68 = 0;
|
|
}
|
|
|
|
i_this->field_0x5cc = cM_atan2s(sp8C.x, sp8C.z);
|
|
if (i_this->field_0x1e0a >= 1 && i_this->mMoveMode <= 2) {
|
|
var_f30 = (var_f30 - 800.0f) * (AREG_F(8) + 2.0f);
|
|
if (var_f30 > 7000.0f) {
|
|
var_f30 = 7000.0f;
|
|
} else if (var_f30 < 0.0f) {
|
|
var_f30 = 0.0f;
|
|
}
|
|
|
|
i_this->field_0xc90 = i_this->field_0xc90 + i_this->field_0xc92;
|
|
if ((i_this->mCounter & 0x3F) == 0) {
|
|
i_this->field_0xc92 = cM_rndF(600.0f) + 300.0f;
|
|
}
|
|
|
|
i_this->field_0x5cc += (s16)(var_f30 * cM_ssin(i_this->field_0xc90));
|
|
}
|
|
|
|
if (i_this->field_0xc72 != 0) {
|
|
i_this->field_0x5cc = i_this->field_0xc74;
|
|
}
|
|
|
|
if (i_this->field_0x1e08 != 0) {
|
|
i_this->field_0xc68 = 0x80;
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&a_this->current.angle.y, i_this->field_0x5cc, 8, i_this->field_0xc68);
|
|
|
|
if (i_this->mGakeChkType != 0) {
|
|
spE = 0x100;
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&i_this->field_0xc68, 0x400, 1, spE);
|
|
|
|
if (i_this->field_0x1e08 != 0) {
|
|
speed_target = l_HIO.field_0x18;
|
|
speed_step = 0.5f;
|
|
} else if (sp9) {
|
|
speed_target = dComIfGp_getHorseActor()->speedF;
|
|
if (speed_target > l_HIO.field_0x10) {
|
|
speed_target = l_HIO.field_0x10;
|
|
} else if (speed_target < l_HIO.field_0xc) {
|
|
speed_target = l_HIO.field_0xc;
|
|
}
|
|
|
|
if (fopAcM_searchPlayerDistanceXZ(a_this) < KREG_F(0) + 2000.0f) {
|
|
speed_target *= 1.2f;
|
|
}
|
|
|
|
if (a_this->speedF < l_HIO.field_0xc) {
|
|
speed_step = 2.5f;
|
|
} else {
|
|
speed_step = 2.0f;
|
|
}
|
|
|
|
anm_speed_target = a_this->speedF / 40.0f;
|
|
} else {
|
|
speed_step = 2.0f;
|
|
speed_target = l_HIO.field_0xc;
|
|
}
|
|
}
|
|
|
|
if (anm_speed_target < 1.0f) {
|
|
anm_speed_target = 1.0f;
|
|
}
|
|
|
|
if (anm_speed_target > 1.3f) {
|
|
anm_speed_target = 1.3f;
|
|
}
|
|
|
|
cLib_addCalc2(&a_this->speedF, speed_target, 1.0f, speed_step);
|
|
if (speed_target > 10.0f) {
|
|
sp12 = (AREG_S(7) + -8) * (a_this->current.angle.y - sp12);
|
|
if (sp12 > 2000) {
|
|
sp12 = 2000;
|
|
} else if (sp12 < -2000) {
|
|
sp12 = -2000;
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&i_this->mHorseLegRot, sp12, 4, 0x300);
|
|
}
|
|
|
|
if (i_this->mAnmID == B_GND_BCK_EGND_RRUN) {
|
|
i_this->mpModelMorf->setPlaySpeed(i_this->mPlaySpeed * (JREG_F(11) + 1.0f));
|
|
i_this->mpHorseMorf->setPlaySpeed(i_this->mPlaySpeed * (JREG_F(11) + 1.0f));
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->mPlaySpeed, anm_speed_target, 1.0f, 0.1f);
|
|
|
|
if (sp8) {
|
|
sp8C.x = 0.0f;
|
|
sp8C.y = 1000.0f;
|
|
for (int i = 0; i < 8; i++) {
|
|
cMtx_YrotS(*calc_mtx, (int)(i << 13));
|
|
sp8C.z = cM_rndF(3000.0f) + 12000.0f;
|
|
MtxPosition(&sp8C, &sp80);
|
|
sp80.x += -2989.0f;
|
|
sp80.z += 1364.0f;
|
|
|
|
b_path[i] = sp80;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 805F6FA4-805F74F4 002644 0550+00 1/1 0/0 0/0 .text b_gnd_h_run_p__FP11b_gnd_class */
|
|
static void b_gnd_h_run_p(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
cXyz sp38;
|
|
cXyz sp2C;
|
|
|
|
f32 player_distxz = i_this->mPlayerDistXZ;
|
|
f32 speed_target = 0.0f;
|
|
f32 speed_step = 2.5f;
|
|
|
|
s8 sp9 = FALSE;
|
|
if (player->checkHorseRide() && dComIfGp_getHorseActor()->speedF >= 30.0f) {
|
|
sp9 = TRUE;
|
|
}
|
|
|
|
s16 spE = a_this->current.angle.y;
|
|
f32 anm_speed_target = 1.0f;
|
|
cXyz sp20;
|
|
cXyz sp14;
|
|
|
|
BOOL var_r27 = FALSE;
|
|
s16 angle_diff = i_this->mPlayerAngleY - a_this->shape_angle.y;
|
|
if (angle_diff < 0x4000 && angle_diff > -0x4000) {
|
|
var_r27 = TRUE;
|
|
}
|
|
|
|
f32 var_f28;
|
|
if (sp9) {
|
|
var_f28 = 0.0f;
|
|
} else {
|
|
var_f28 = 400.0f;
|
|
}
|
|
|
|
switch (i_this->mMoveMode) {
|
|
case 0:
|
|
case 1:
|
|
if (i_this->mAnmID != B_GND_BCK_EGND_RRUN) {
|
|
i_this->mPlaySpeed = 1.0f;
|
|
anm_init(i_this, B_GND_BCK_EGND_RRUN, 5.0f, 2, 1.0f);
|
|
h_anm_init(i_this, B_HG_BCK_HG_RUN, 5.0f, 2, 1.0f);
|
|
}
|
|
|
|
i_this->field_0xc68 = 0;
|
|
i_this->mMoveMode = 2;
|
|
break;
|
|
case 2:
|
|
var_r27 = TRUE;
|
|
if (player_distxz < var_f28 + 1700.0f) {
|
|
i_this->mMoveMode = 3;
|
|
}
|
|
break;
|
|
case 3:
|
|
anm_init(i_this, B_GND_BCK_EGND_RATTACK01_A, 3.0f, 0, 1.0f);
|
|
i_this->mMoveMode = 4;
|
|
case 4:
|
|
var_r27 = TRUE;
|
|
if (player_distxz < var_f28 + 550.0f || i_this->mpModelMorf->isStop()) {
|
|
anm_init(i_this, B_GND_BCK_EGND_RATTACK01_D, 2.0f, 2, 1.0f);
|
|
i_this->mMoveMode = 5;
|
|
}
|
|
break;
|
|
case 5:
|
|
var_r27 = TRUE;
|
|
if (player_distxz < var_f28 + 550.0f) {
|
|
if (angle_diff < 0 || !sp9) {
|
|
anm_init(i_this, B_GND_BCK_EGND_RATTACK01_C, 2.0f, 0, 1.0f);
|
|
} else {
|
|
anm_init(i_this, B_GND_BCK_EGND_RATTACK01_B, 2.0f, 0, 1.0f);
|
|
}
|
|
|
|
i_this->mMoveMode = 6;
|
|
}
|
|
break;
|
|
case 6:
|
|
var_r27 = TRUE;
|
|
i_this->field_0xc77 = 1;
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
var_r27 = FALSE;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
|
|
if (sp9) {
|
|
if (angle_diff < 0) {
|
|
sp38.x = 200.0f;
|
|
} else {
|
|
sp38.x = -200.0f;
|
|
}
|
|
} else {
|
|
sp38.x = 0.0f;
|
|
}
|
|
sp38.y = 0.0f;
|
|
sp38.z = 0.0f;
|
|
MtxPosition(&sp38, &sp2C);
|
|
|
|
sp2C += player->current.pos;
|
|
sp2C -= a_this->current.pos;
|
|
|
|
i_this->field_0x5cc = (s16)cM_atan2s(sp2C.x, sp2C.z);
|
|
|
|
cLib_addCalcAngleS2(&a_this->current.angle.y, i_this->field_0x5cc, 8, i_this->field_0xc68);
|
|
cLib_addCalcAngleS2(&i_this->field_0xc68, 0x400, 1, 0x40);
|
|
|
|
if (sp9) {
|
|
speed_target = l_HIO.field_0x14;
|
|
if (player_distxz > 2000.0f) {
|
|
speed_target *= 1.4f;
|
|
} else if (player_distxz > 1000.0f) {
|
|
speed_target *= 1.2f;
|
|
}
|
|
|
|
anm_speed_target = a_this->speedF / 40.0f;
|
|
if (anm_speed_target < 1.0f) {
|
|
anm_speed_target = 1.0f;
|
|
}
|
|
if (anm_speed_target > 1.3f) {
|
|
anm_speed_target = 1.3f;
|
|
}
|
|
} else {
|
|
speed_step = 3.0f;
|
|
speed_target = l_HIO.field_0xc;
|
|
}
|
|
|
|
if ((!var_r27 && i_this->field_0xc44[3] == 0) || i_this->mGakeChkType != 0) {
|
|
i_this->mActionMode = ACTION_HRUN_A;
|
|
|
|
if (i_this->mGakeChkType == 2) {
|
|
i_this->field_0xc72 = 40;
|
|
i_this->field_0xc74 = a_this->shape_angle.y + -0x4000;
|
|
} else if (i_this->mGakeChkType == 3) {
|
|
i_this->field_0xc72 = 40;
|
|
i_this->field_0xc74 = a_this->shape_angle.y + 0x4000;
|
|
} else if (i_this->mGakeChkType >= 4) {
|
|
i_this->field_0xc74 = a_this->shape_angle.y + 0x8000;
|
|
}
|
|
|
|
i_this->mMoveMode = 0;
|
|
i_this->field_0xc44[3] = 100;
|
|
}
|
|
|
|
i_this->field_0xc6a = 1;
|
|
cLib_addCalc2(&a_this->speedF, speed_target, 1.0f, speed_step);
|
|
|
|
if (speed_target > 10.0f) {
|
|
spE = (a_this->current.angle.y - spE) * -8;
|
|
if (spE > 2000) {
|
|
spE = 2000;
|
|
} else if (spE < -2000) {
|
|
spE = -2000;
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&i_this->mHorseLegRot, spE, 4, 0x300);
|
|
}
|
|
|
|
i_this->mpHorseMorf->setPlaySpeed(i_this->mPlaySpeed);
|
|
|
|
if (i_this->mAnmID == B_GND_BCK_EGND_RRUN) {
|
|
i_this->mpModelMorf->setPlaySpeed(i_this->mPlaySpeed);
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->mPlaySpeed, anm_speed_target, 1.0f, 0.1f);
|
|
}
|
|
|
|
/* 805F74F4-805F76C4 002B94 01D0+00 1/1 0/0 0/0 .text b_gnd_h_jump__FP11b_gnd_class */
|
|
static void b_gnd_h_jump(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
|
|
switch (i_this->mMoveMode) {
|
|
case 0:
|
|
i_this->mMoveMode = 1;
|
|
anm_init(i_this, B_GND_BCK_EGND_RJUMP_START, 2.0f, 0, 1.0f);
|
|
h_anm_init(i_this, B_HG_BCK_HG_JUMP_START, 2.0f, 0, 1.0f);
|
|
a_this->speed.y = 55.0f;
|
|
break;
|
|
case 1:
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mMoveMode = 2;
|
|
anm_init(i_this, B_GND_BCK_EGND_RJUMP_MIDDLE, 2.0f, 0, 1.0f);
|
|
h_anm_init(i_this, B_HG_BCK_HG_JUMP_MIDDLE, 2.0f, 0, 1.0f);
|
|
}
|
|
break;
|
|
case 2:
|
|
if (i_this->mAcch.ChkGroundHit()) {
|
|
i_this->mMoveMode = 3;
|
|
anm_init(i_this, B_GND_BCK_EGND_RJUMP_END, 2.0f, 0, 1.0f);
|
|
h_anm_init(i_this, B_HG_BCK_HG_JUMP_END, 2.0f, 0, 1.0f);
|
|
i_this->field_0x2699 = 1;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mActionMode = i_this->field_0xb00;
|
|
i_this->mMoveMode = 0;
|
|
i_this->mPlaySpeed = 1.5f;
|
|
anm_init(i_this, B_GND_BCK_EGND_RRUN, 2.0f, 2, 1.5f);
|
|
h_anm_init(i_this, B_HG_BCK_HG_RUN, 2.0f, 2, 1.5f);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 805F76C4-805F7A10 002D64 034C+00 1/1 0/0 0/0 .text b_gnd_h_end__FP11b_gnd_class */
|
|
static void b_gnd_h_end(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
mant_class* mant_p = (mant_class*)fopAcM_SearchByID(i_this->mMantChildID);
|
|
int h_anm_frame = i_this->mpHorseMorf->getFrame();
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
|
|
switch (i_this->mMoveMode) {
|
|
case 0:
|
|
Z2GetAudioMgr()->bgmStop(30, 0);
|
|
i_this->mMoveMode = 1;
|
|
h_anm_init(i_this, B_HG_BCK_HG_DOWN, 3.0f, 0, 1.0f);
|
|
anm_init(i_this, B_GND_BCK_EGND_RDOWN, 2.0f, 0, 1.0f);
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_DOWN, -1);
|
|
|
|
a_this->speedF = 50.0f;
|
|
a_this->current.pos.set(2.4f, 701.0f, -5920.0f);
|
|
a_this->old.pos = a_this->current.pos;
|
|
a_this->shape_angle.y = 0;
|
|
a_this->current.angle.y = 0;
|
|
i_this->field_0x1e0f = 0;
|
|
i_this->field_0x1e10 = 0.0f;
|
|
i_this->mDemoCamMode = 30;
|
|
a_this->health = 100;
|
|
i_this->field_0x1e0a = 0;
|
|
case 1:
|
|
if (i_this->mDemoCamMode < 33 && h_anm_frame == 30) {
|
|
i_this->mpModelMorf->setFrame(0.0f);
|
|
i_this->mpHorseMorf->setFrame(0.0f);
|
|
|
|
if (i_this->mDemoCamMode < 32) {
|
|
i_this->mDemoCamMode = 32;
|
|
} else {
|
|
i_this->mDemoCamMode = 34;
|
|
i_this->mDemoCamTimer = 0;
|
|
i_this->mMoveMode = 2;
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
if (i_this->mDemoCamMode < 34) {
|
|
if (h_anm_frame == 57) {
|
|
cXyz eff_size(4.0f, 4.0f, 4.0f);
|
|
dComIfGp_particle_set(0x8C21, &a_this->current.pos, &a_this->shape_angle, &eff_size);
|
|
}
|
|
|
|
if (h_anm_frame >= 62) {
|
|
cLib_addCalc0(&a_this->speedF, 1.0f, 1.2f);
|
|
cLib_addCalcAngleS2(&a_this->shape_angle.y, a_this->current.angle.y + 0x1000, 8, 130);
|
|
i_this->field_0x2688 = dComIfGp_particle_set(i_this->field_0x2688, 0x8b9a,
|
|
&i_this->current.pos, 0, 0);
|
|
if (a_this->speedF > 14.0f) {
|
|
i_this->mGndSound.startCreatureSoundLevel(Z2SE_EN_HG_SLIP, 0, -1);
|
|
}
|
|
}
|
|
|
|
if (a_this->speedF < 1.0f) {
|
|
mant_p->field_0x3965 = 1;
|
|
}
|
|
} else {
|
|
i_this->mpModelMorf->setFrame(0.0f);
|
|
i_this->mpHorseMorf->setFrame(0.0f);
|
|
a_this->speedF = 0.0f;
|
|
a_this->current.pos.x = 1000.0f;
|
|
}
|
|
case 3:
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 805F7A10-805F7E88 0030B0 0478+00 2/1 0/0 0/0 .text b_gnd_g_wait__FP11b_gnd_class */
|
|
static void b_gnd_g_wait(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
f32 speed_target = 0.0f;
|
|
f32 speed_step = 2.0f;
|
|
s16 angle_step = 0x400;
|
|
|
|
mant_class* mant_p = (mant_class*)fopAcM_SearchByID(i_this->mMantChildID);
|
|
dmg_rod_class* mgrod_p = (dmg_rod_class*)fopAcM_SearchByName(PROC_MG_ROD);
|
|
|
|
if (mgrod_p != NULL && mgrod_p->action != 0) {
|
|
if (i_this->mMoveMode < 5 && i_this->mPlayerDistXZ < 600.0f) {
|
|
i_this->mMoveMode = 5;
|
|
i_this->field_0xc44[0] = 10;
|
|
}
|
|
} else if (i_this->mMoveMode == 5) {
|
|
i_this->mMoveMode = 6;
|
|
i_this->field_0xc44[0] = 40;
|
|
}
|
|
|
|
switch (i_this->mMoveMode) {
|
|
case 0:
|
|
i_this->mMoveMode = 1;
|
|
anm_init(i_this, B_GND_BCK_EGND_WALK, 15.0f, 2, 1.0f);
|
|
i_this->field_0xc44[0] = cM_rndF(100.0f) + 200.0f;
|
|
case 1:
|
|
speed_target = 4.3f;
|
|
|
|
if (i_this->mPlayerDistXZ < 500.0f) {
|
|
i_this->mMoveMode = 2;
|
|
anm_init(i_this, B_GND_BCK_EGND_WAIT02, 10.0f, 2, 1.0f);
|
|
i_this->field_0xc44[0] = cM_rndF(50.0f) + 30.0f;
|
|
} else if (i_this->field_0xc44[0] == 1) {
|
|
if (i_this->mPlayerDistXZ < 800.0f && cM_rndF(1.0f) < 0.3f) {
|
|
i_this->mActionMode = ACTION_ATTACK;
|
|
i_this->mMoveMode = 10;
|
|
} else {
|
|
i_this->mActionMode = ACTION_JUMP;
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
if (i_this->field_0xc44[8] != 0) {
|
|
if (i_this->mPlayerDistXZ < 300.0f) {
|
|
i_this->field_0xc44[8] = 0;
|
|
}
|
|
|
|
if (i_this->field_0xc44[8] == 1) {
|
|
i_this->mActionMode = ACTION_ATTACK;
|
|
i_this->mMoveMode = 10;
|
|
}
|
|
} else {
|
|
if (i_this->mPlayerDistXZ > 650.0f) {
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
|
|
if (i_this->mPlayerDistXZ > 550.0f) {
|
|
i_this->mActionMode = ACTION_ATTACK;
|
|
if (cM_rndF(1.0f) < 0.5f) {
|
|
i_this->mMoveMode = 10;
|
|
} else {
|
|
i_this->mMoveMode = 15;
|
|
}
|
|
} else if (i_this->mPlayerDistXZ < 150.0f) {
|
|
i_this->mActionMode = ACTION_ATTACK;
|
|
i_this->mMoveMode = 4;
|
|
} else if (i_this->field_0xc44[0] == 0) {
|
|
i_this->mActionMode = ACTION_ATTACK;
|
|
if (i_this->mPlayerDistXZ < 300.0f) {
|
|
if (cM_rndF(1.0f) < 0.5f) {
|
|
i_this->mMoveMode = 0;
|
|
} else {
|
|
i_this->mMoveMode = 8;
|
|
}
|
|
} else {
|
|
i_this->mMoveMode = 2;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 3:
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
break;
|
|
case 5:
|
|
if (i_this->field_0xc44[0] == 1) {
|
|
anm_init(i_this, B_GND_BCK_EGND_WAIT02, 10.0f, 2, 1.0f);
|
|
}
|
|
|
|
if (i_this->field_0xc44[0] == 0) {
|
|
angle_step = 0;
|
|
}
|
|
|
|
i_this->field_0xc7d = 2;
|
|
i_this->field_0xc80 = mgrod_p->hook_pos;
|
|
break;
|
|
case 6:
|
|
angle_step = 0;
|
|
i_this->field_0xc5a = 10;
|
|
if (i_this->field_0xc44[0] == 0) {
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
}
|
|
|
|
cLib_addCalc2(&a_this->speedF, speed_target, 1.0f, speed_step);
|
|
if ((i_this->mCounter & 12) == 0) {
|
|
angle_step /= 2;
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&a_this->current.angle.y, i_this->mPlayerAngleY, 2, angle_step);
|
|
|
|
s16 angle_diff = a_this->current.angle.y - i_this->mPlayerAngleY;
|
|
if (angle_diff > 0x100 || angle_diff < -0x100) {
|
|
i_this->field_0x26c2 = 2500.0f * cM_ssin(i_this->mCounter * 5000);
|
|
}
|
|
|
|
if (i_this->mActionMode != ACTION_WAIT && mant_p->field_0x3969 == 2) {
|
|
mant_p->field_0x3969 = 1;
|
|
}
|
|
}
|
|
|
|
/* 805F7E88-805F878C 003528 0904+00 2/1 0/0 0/0 .text b_gnd_g_attack__FP11b_gnd_class */
|
|
static BOOL b_gnd_g_attack(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
|
|
f32 speed_target = 0.0f;
|
|
f32 speed_step = 2.0f;
|
|
int anm_frame = i_this->mpModelMorf->getFrame();
|
|
s16 angle_step = 0;
|
|
|
|
mant_class* mant_p = (mant_class*)fopAcM_SearchByID(i_this->mMantChildID);
|
|
|
|
BOOL spC = true;
|
|
switch (i_this->mMoveMode) {
|
|
case 0:
|
|
i_this->mMoveMode = 1;
|
|
anm_init(i_this, B_GND_BCK_EGND_ATTACKA, 3.0f, 0, 1.0f);
|
|
break;
|
|
case 1:
|
|
if (20 <= anm_frame && anm_frame <= 28) {
|
|
i_this->field_0xc77 = 1;
|
|
mant_p->field_0x395c = 1.0f;
|
|
spC = false;
|
|
}
|
|
|
|
if (44 <= anm_frame && anm_frame <= 50) {
|
|
mant_p->field_0x395c = 3.0f / 5.0f;
|
|
}
|
|
|
|
if (anm_frame == 25) {
|
|
i_this->field_0x2698 = 1;
|
|
}
|
|
|
|
if (20 <= anm_frame && anm_frame <= 26) {
|
|
i_this->mSwordBlurAlpha = 80;
|
|
i_this->field_0xc28 = -3000;
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mActionMode = ACTION_WAIT;
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
break;
|
|
case 2:
|
|
i_this->mMoveMode = 3;
|
|
anm_init(i_this, B_GND_BCK_EGND_ATTACKB, 3.0f, 0, 1.0f);
|
|
break;
|
|
case 3:
|
|
if (anm_frame < 25) {
|
|
spC = false;
|
|
}
|
|
|
|
if (17 <= anm_frame && anm_frame <= 23) {
|
|
i_this->field_0xc77 = 1;
|
|
}
|
|
|
|
if (17 <= anm_frame && anm_frame <= 19) {
|
|
mant_p->field_0x395c = 0.7f;
|
|
}
|
|
|
|
if (37 <= anm_frame && anm_frame <= 47) {
|
|
mant_p->field_0x395c = 0.6f;
|
|
}
|
|
|
|
if (anm_frame == 20) {
|
|
i_this->field_0x2698 = 1;
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mActionMode = ACTION_WAIT;
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
break;
|
|
case 4:
|
|
i_this->mMoveMode = 5;
|
|
anm_init(i_this, B_GND_BCK_EGND_ATTACKD, 3.0f, 0, 1.0f);
|
|
break;
|
|
case 5:
|
|
if (3 <= anm_frame && anm_frame <= 10) {
|
|
mant_p->field_0x395c = 0.6f;
|
|
}
|
|
|
|
if (3 <= anm_frame && anm_frame <= 10) {
|
|
i_this->field_0xc77 = 1;
|
|
i_this->field_0xc78 = 1;
|
|
spC = false;
|
|
}
|
|
|
|
if (anm_frame == 6) {
|
|
i_this->field_0x2698 = 1;
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mActionMode = ACTION_WAIT;
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
break;
|
|
case 6:
|
|
i_this->mMoveMode = 7;
|
|
anm_init(i_this, B_GND_BCK_EGND_ATTACKF, 5.0f, 0, 1.0f);
|
|
break;
|
|
case 7:
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
if (anm_frame < 35) {
|
|
spC = false;
|
|
}
|
|
speed_step = 3.3299999f;
|
|
|
|
if (13 <= anm_frame && anm_frame <= 33) {
|
|
speed_target = 10.0f;
|
|
}
|
|
|
|
if (15 <= anm_frame && anm_frame <= 38) {
|
|
i_this->field_0xc77 = 1;
|
|
mant_p->field_0x395c = 0.7f;
|
|
}
|
|
|
|
if (15 <= anm_frame && anm_frame <= 30) {
|
|
i_this->mSwordBlurAlpha = 80;
|
|
i_this->field_0xc28 = -3000;
|
|
}
|
|
|
|
if (anm_frame == 20 || anm_frame == 35) {
|
|
i_this->field_0x2698 = 1;
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mActionMode = ACTION_WAIT;
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
break;
|
|
case 8:
|
|
i_this->mMoveMode = 9;
|
|
anm_init(i_this, B_GND_BCK_EGND_ATTACKG, 3.0f, 0, 1.0f);
|
|
break;
|
|
case 9:
|
|
if (anm_frame < 25) {
|
|
spC = false;
|
|
}
|
|
|
|
if ((18 <= anm_frame && anm_frame <= 24) || (33 <= anm_frame && anm_frame <= 40)) {
|
|
i_this->field_0xc77 = 1;
|
|
mant_p->field_0x395c = 0.7f;
|
|
i_this->mSwordBlurAlpha = 80;
|
|
}
|
|
|
|
if (anm_frame == 20 || anm_frame == 38) {
|
|
i_this->field_0x2698 = 1;
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mActionMode = ACTION_WAIT;
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
break;
|
|
case 10:
|
|
anm_init(i_this, B_GND_BCK_EGND_ATTACKC_A, 3.0f, 0, 1.0f);
|
|
i_this->mMoveMode = 11;
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
break;
|
|
case 11:
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
angle_step = 0x800;
|
|
|
|
if (anm_frame >= 15) {
|
|
speed_target = 30.0f;
|
|
speed_step = 10.0f;
|
|
spC = false;
|
|
}
|
|
|
|
if (!i_this->mpModelMorf->isStop()) {
|
|
break;
|
|
}
|
|
|
|
anm_init(i_this, B_GND_BCK_EGND_ATTACKC_B, 0.0f, 2, 1.0f);
|
|
i_this->mMoveMode = 12;
|
|
i_this->field_0xc44[0] = 50;
|
|
case 12:
|
|
spC = false;
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
i_this->field_0xc79 = 1;
|
|
mant_p->field_0x395c = 1.0f;
|
|
speed_target = 30.0f;
|
|
speed_step = 15.0f;
|
|
angle_step = 0x800;
|
|
i_this->field_0x2698 = 2;
|
|
|
|
if (player->checkMasterSwordEquip() && i_this->mPlayerDistXZ < 600.0f) {
|
|
dComIfGp_setDoStatusForce(107, 0);
|
|
i_this->field_0x2740 = 1;
|
|
}
|
|
|
|
if (i_this->field_0xc44[0] == 0 || i_this->mPlayerDistXZ < 450.0f) {
|
|
anm_init(i_this, B_GND_BCK_EGND_ATTACKC_C, 1.0f, 0, 1.0f);
|
|
i_this->mMoveMode = 13;
|
|
}
|
|
break;
|
|
case 13:
|
|
i_this->mDamageInvulnerabilityTimer = 5;
|
|
i_this->field_0xc79 = 1;
|
|
speed_step = 10.0f;
|
|
|
|
if (anm_frame < 30) {
|
|
spC = false;
|
|
}
|
|
|
|
if (18 <= anm_frame && anm_frame <= 26) {
|
|
mant_p->field_0x395c = 1.0f;
|
|
}
|
|
|
|
if (43 <= anm_frame && anm_frame <= 53) {
|
|
mant_p->field_0x395c = 0.6f;
|
|
}
|
|
|
|
if (20 <= anm_frame && anm_frame <= 32) {
|
|
i_this->field_0xc77 = 2;
|
|
}
|
|
|
|
if (18 <= anm_frame && anm_frame <= 23) {
|
|
i_this->mSwordBlurAlpha = 80;
|
|
}
|
|
|
|
if (anm_frame == 25) {
|
|
i_this->field_0x2698 = 1;
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mActionMode = ACTION_WAIT;
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
|
|
if (anm_frame < 28 && player->checkMasterSwordEquip()) {
|
|
dComIfGp_setDoStatusForce(107, 0);
|
|
i_this->field_0x2740 = 1;
|
|
if (cc_pl_cut_bit_get() == 0x100 && player->speed.y < 0.0f) {
|
|
i_this->mActionMode = ACTION_TUBA;
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
}
|
|
break;
|
|
case 15:
|
|
anm_init(i_this, B_GND_BCK_EGND_ATTACKE_A, speed_step, 0, 1.0f);
|
|
i_this->mMoveMode = 16;
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
i_this->field_0xc44[0] = 11;
|
|
break;
|
|
case 16:
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
spC = false;
|
|
angle_step = 0x800;
|
|
|
|
if (anm_frame >= 5) {
|
|
speed_target = 60.0f;
|
|
speed_step = 30.0f;
|
|
if (anm_frame == 5) {
|
|
a_this->speed.y = 20.0f;
|
|
}
|
|
}
|
|
|
|
if (i_this->field_0xc44[0] != 0)
|
|
break;
|
|
|
|
anm_init(i_this, B_GND_BCK_EGND_ATTACKE_B, 1.0f, 0, 1.0f);
|
|
i_this->mMoveMode = 17;
|
|
case 17:
|
|
spC = false;
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
speed_step = 15.0f;
|
|
angle_step = 0x800;
|
|
|
|
if (2 <= anm_frame && anm_frame <= 12) {
|
|
i_this->field_0xc78 = 2;
|
|
i_this->field_0xc77 = 1;
|
|
}
|
|
|
|
if (anm_frame >= 5) {
|
|
mant_p->field_0x395c = 0.7f;
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
anm_init(i_this, B_GND_BCK_EGND_ATTACKE_C2, 1.0f, 0, 1.0f);
|
|
i_this->mMoveMode = 18;
|
|
}
|
|
break;
|
|
case 18:
|
|
speed_step = 15.0f;
|
|
if (10 <= anm_frame && anm_frame <= 20) {
|
|
i_this->field_0xc77 = 1;
|
|
mant_p->field_0x395c = 0.7f;
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mActionMode = ACTION_WAIT;
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
}
|
|
|
|
cLib_addCalc2(&a_this->speedF, speed_target, 1.0f, speed_step);
|
|
cLib_addCalcAngleS2(&a_this->current.angle.y, i_this->mPlayerAngleY, 4, angle_step);
|
|
return spC;
|
|
}
|
|
|
|
/* 805F878C-805F8C20 003E2C 0494+00 1/1 0/0 0/0 .text b_gnd_g_defence__FP11b_gnd_class */
|
|
static void b_gnd_g_defence(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
int anm_frame = i_this->mpModelMorf->getFrame();
|
|
s16 angle_step = 0;
|
|
mant_class* mant_p = (mant_class *)fopAcM_SearchByID(i_this->mMantChildID);
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
|
|
cc_pl_cut_bit_get();
|
|
|
|
switch (i_this->mMoveMode) {
|
|
case 0:
|
|
i_this->mMoveMode = 1;
|
|
|
|
if (cM_rndF(1.0) < 0.5f) {
|
|
if (i_this->field_0xc7b & 1) {
|
|
anm_init(i_this, B_GND_BCK_EGND_DEFENSE_A, 3.0f, 0, 1.0f);
|
|
} else {
|
|
anm_init(i_this, B_GND_BCK_EGND_DEFENSE_B, 3.0f, 0, 1.0f);
|
|
}
|
|
} else if (i_this->field_0xc7b & 1) {
|
|
anm_init(i_this, B_GND_BCK_EGND_DEFENSE_C, 3.0f, 0, 1.0f);
|
|
} else {
|
|
anm_init(i_this, B_GND_BCK_EGND_DEFENSE_D, 3.0f, 0, 1.0f);
|
|
}
|
|
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_DEFENCE, -1);
|
|
i_this->field_0xc44[0] = 20;
|
|
i_this->field_0xc7a = 0;
|
|
break;
|
|
case 1:
|
|
case 2:
|
|
if (i_this->mMoveMode == 1) {
|
|
if (i_this->field_0xc44[0] == 0 && daPy_getPlayerActorClass()->getCutAtFlg()) {
|
|
i_this->mMoveMode = 2;
|
|
i_this->field_0xc7b++;
|
|
|
|
if (cM_rndF(1.0) < 0.5f) {
|
|
if (i_this->field_0xc7b & 1) {
|
|
anm_init(i_this, B_GND_BCK_EGND_DEFENSE_A, 3.0f, 0, 1.0f);
|
|
} else {
|
|
anm_init(i_this, B_GND_BCK_EGND_DEFENSE_B, 3.0f, 0, 1.0f);
|
|
}
|
|
} else if (i_this->field_0xc7b & 1) {
|
|
anm_init(i_this, B_GND_BCK_EGND_DEFENSE_C, 3.0f, 0, 1.0f);
|
|
} else {
|
|
anm_init(i_this, B_GND_BCK_EGND_DEFENSE_D, 3.0f, 0, 1.0f);
|
|
}
|
|
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_DEFENCE, -1);
|
|
|
|
if (i_this->mAcch.ChkWallHit()) {
|
|
i_this->mActionMode = ACTION_JUMP;
|
|
i_this->mMoveMode = 0;
|
|
} else if ((i_this->field_0xc7a >= 3 || cM_rndF(0.1f)) && cM_rndF(1.0f) < 0.35f) {
|
|
i_this->mActionMode = ACTION_JUMP;
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
}
|
|
} else if (!daPy_getPlayerActorClass()->getCutAtFlg()) {
|
|
i_this->mMoveMode = 1;
|
|
}
|
|
|
|
if (anm_frame < 10) {
|
|
angle_step = 0x1000;
|
|
}
|
|
|
|
if (cc_pl_cut_bit_get() && 5 < anm_frame && anm_frame < 10) {
|
|
i_this->mpModelMorf->setFrame(anm_frame - 1);
|
|
}
|
|
|
|
if (anm_frame < 10) {
|
|
i_this->field_0xc79 = 1;
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mActionMode = ACTION_WAIT;
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
break;
|
|
case 5:
|
|
if (i_this->field_0xc44[0] != 0) {
|
|
a_this->current.angle.y += 0x1800;
|
|
i_this->field_0xeb0 = 30.0f;
|
|
mant_p->field_0x395c = 1.2f;
|
|
} else {
|
|
i_this->field_0x2698 = 1;
|
|
i_this->mActionMode = ACTION_WAIT;
|
|
i_this->mMoveMode = 3;
|
|
anm_init(i_this, B_GND_BCK_EGND_CHOUHATU, 10.0f, 0, 1.0f);
|
|
}
|
|
|
|
a_this->shape_angle.y = a_this->current.angle.y;
|
|
break;
|
|
}
|
|
|
|
cLib_addCalc2(&a_this->speedF, 0.0f, 1.0f, 10.0f);
|
|
cLib_addCalcAngleS2(&a_this->current.angle.y, i_this->mPlayerAngleY, 2, angle_step);
|
|
|
|
if (i_this->mDefSph.ChkTgHit()) {
|
|
i_this->field_0xeb0 = 25.0f;
|
|
i_this->field_0xeac = a_this->shape_angle.y;
|
|
mant_p->field_0x395c = 0.3f;
|
|
i_this->field_0xc7a++;
|
|
i_this->field_0x2698 = 1;
|
|
}
|
|
}
|
|
|
|
/* 805F8C20-805F8F88 0042C0 0368+00 1/1 0/0 0/0 .text b_gnd_g_jump__FP11b_gnd_class */
|
|
static int b_gnd_g_jump(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
f32 var_f31 = 0.0f;
|
|
f32 var_f30 = 10.0f;
|
|
int sp10 = 1;
|
|
mant_class* mant_p = (mant_class*)fopAcM_SearchByID(i_this->mMantChildID);
|
|
|
|
switch (i_this->mMoveMode) {
|
|
case 0:
|
|
anm_init(i_this, B_GND_BCK_EGND_JUMP_A, 2.0f, 0, 1.0f);
|
|
i_this->mMoveMode = 1;
|
|
i_this->mDamageInvulnerabilityTimer = 100;
|
|
break;
|
|
case 1:
|
|
if (!i_this->mpModelMorf->isStop()) {
|
|
break;
|
|
}
|
|
|
|
anm_init(i_this, B_GND_BCK_EGND_JUMP_B, 0.0f, 2, 1.0f);
|
|
i_this->mMoveMode = 2;
|
|
|
|
if (i_this->mPlayerDistXZ > 500.0f) {
|
|
a_this->speedF = cM_rndF(10.0f) + 30.0f;
|
|
a_this->current.angle.y += (int)cM_rndFX(3000.0f);
|
|
} else {
|
|
a_this->speedF = cM_rndF(10.0f) + 10.0f;
|
|
a_this->current.angle.y += (int)cM_rndFX(6000.0f);
|
|
}
|
|
|
|
a_this->speed.y = 70.0f;
|
|
i_this->field_0x2698 = 1;
|
|
break;
|
|
case 2:
|
|
sp10 = 0;
|
|
cLib_addCalcAngleS2(&a_this->shape_angle.y, i_this->mPlayerAngleY, 2, 0x600);
|
|
mant_p->field_0x3964 = 1;
|
|
|
|
if (i_this->mAcch.ChkGroundHit()) {
|
|
if (i_this->mPlayerDistXZ < 400.0f) {
|
|
i_this->mActionMode = ACTION_ATTACK;
|
|
i_this->mMoveMode = 6;
|
|
} else {
|
|
i_this->mActionMode = ACTION_ATTACK;
|
|
i_this->mMoveMode = 3;
|
|
anm_init(i_this, B_GND_BCK_EGND_ATTACKB, 3.0f, 0, 1.0f);
|
|
i_this->mpModelMorf->setFrame(10.0f);
|
|
}
|
|
|
|
a_this->current.angle.y = a_this->shape_angle.y;
|
|
a_this->speedF = 0.0f;
|
|
|
|
mant_p->field_0x395c = 1.0f;
|
|
i_this->mDamageInvulnerabilityTimer = 0;
|
|
i_this->field_0x2698 = 1;
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_LAND, 0, -1);
|
|
}
|
|
break;
|
|
case 4:
|
|
cLib_addCalcAngleS2(&a_this->shape_angle.y, i_this->mPlayerAngleY, 2, 0x600);
|
|
a_this->current.angle.y = a_this->shape_angle.y;
|
|
|
|
if (i_this->field_0xc44[0] == 0) {
|
|
i_this->mActionMode = ACTION_ATTACK;
|
|
if (i_this->mPlayerDistXZ < 150.0f) {
|
|
i_this->mMoveMode = 4;
|
|
} else if (i_this->mPlayerDistXZ < 300.0f) {
|
|
i_this->mMoveMode = 0;
|
|
} else if (cM_rndF(1.0f) < 0.5f) {
|
|
i_this->mMoveMode = 2;
|
|
} else {
|
|
i_this->mMoveMode = 10;
|
|
}
|
|
}
|
|
break;
|
|
case 5:
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
anm_init(i_this, B_GND_BCK_EGND_WAIT02, 10.0f, 2, 1.0f);
|
|
}
|
|
|
|
if (i_this->field_0xc44[0] == 0) {
|
|
i_this->mMoveMode = 4;
|
|
}
|
|
}
|
|
|
|
return sp10;
|
|
}
|
|
|
|
/* 805F8F88-805F9220 004628 0298+00 1/1 0/0 0/0 .text b_gnd_g_side__FP11b_gnd_class */
|
|
static void b_gnd_g_side(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
mant_class* mant_p = (mant_class*)fopAcM_SearchByID(i_this->mMantChildID);
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
|
|
switch (i_this->mMoveMode) {
|
|
case 0:
|
|
if (cM_rndF(1.0f) < 0.5f) {
|
|
anm_init(i_this, B_GND_BCK_EGND_SIDEJUMP_LA, 2.0f, 0, 1.0f);
|
|
a_this->current.angle.y = i_this->mPlayerAngleY + 0x3000;
|
|
} else {
|
|
anm_init(i_this, B_GND_BCK_EGND_SIDEJUMP_RA, 2.0f, 0, 1.0f);
|
|
a_this->current.angle.y = i_this->mPlayerAngleY + -0x3000;
|
|
}
|
|
|
|
a_this->speedF = 30.0f;
|
|
a_this->speed.y = 30.0f;
|
|
i_this->mMoveMode = 1;
|
|
mant_p->field_0x395c = 1.0f;
|
|
break;
|
|
case 1:
|
|
cLib_addCalcAngleS2(&a_this->shape_angle.y, i_this->mPlayerAngleY, 2, 0x600);
|
|
|
|
if (i_this->mAcch.ChkGroundHit()) {
|
|
if (i_this->mAnmID == B_GND_BCK_EGND_SIDEJUMP_LA) {
|
|
anm_init(i_this, B_GND_BCK_EGND_SIDEJUMP_LB, 1.0f, 0, 1.0f);
|
|
} else {
|
|
anm_init(i_this, B_GND_BCK_EGND_SIDEJUMP_RB, 1.0f, 0, 1.0f);
|
|
}
|
|
|
|
i_this->mMoveMode = 2;
|
|
i_this->field_0x2698 = 1;
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_LAND, 0, -1);
|
|
}
|
|
break;
|
|
case 2:
|
|
cLib_addCalc0(&a_this->speedF, 1.0f, 6.0f);
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
if (i_this->mPlayerDistXZ < 500.0f) {
|
|
i_this->mActionMode = ACTION_ATTACK;
|
|
if (i_this->mPlayerDistXZ < 300.0f) {
|
|
i_this->mMoveMode = 6;
|
|
} else {
|
|
i_this->mMoveMode = 3;
|
|
anm_init(i_this, B_GND_BCK_EGND_ATTACKB, 3.0f, 0, 1.0f);
|
|
i_this->mpModelMorf->setFrame(10.0f);
|
|
}
|
|
} else {
|
|
i_this->mActionMode = ACTION_WAIT;
|
|
if (cM_rndF(1.0f) < 0.5f) {
|
|
i_this->mMoveMode = 0;
|
|
} else {
|
|
i_this->mMoveMode = 3;
|
|
anm_init(i_this, B_GND_BCK_EGND_CHOUHATU, 10.0f, 0, 1.0f);
|
|
}
|
|
}
|
|
|
|
a_this->current.angle.y = a_this->shape_angle.y;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 805F9220-805F92FC 0048C0 00DC+00 1/1 0/0 0/0 .text b_gnd_g_tuba__FP11b_gnd_class */
|
|
static void b_gnd_g_tuba(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
mant_class* mant_p = (mant_class*)fopAcM_SearchByID(i_this->mMantChildID);
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
|
|
switch (i_this->mMoveMode) {
|
|
case 0:
|
|
anm_init(i_this, B_GND_BCK_EGND_TUBAZERI_A, 5.0f, 2, 1.0f);
|
|
i_this->mMoveMode = 1;
|
|
mant_p->field_0x395c = 1.5f;
|
|
i_this->mDemoCamMode = 50;
|
|
a_this->speedF = 0.0f;
|
|
dComIfGp_getVibration().StartShock(VIBMODE_S_POWER6, 0x1F, cXyz(0.0f, 1.0f, 0.0f));
|
|
break;
|
|
case 1:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 805F92FC-805F94A8 00499C 01AC+00 1/1 0/0 0/0 .text b_gnd_g_damage__FP11b_gnd_class */
|
|
static void b_gnd_g_damage(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
int anm_frame = i_this->mpModelMorf->getFrame();
|
|
mant_class* mant_p = (mant_class*)fopAcM_SearchByID(i_this->mMantChildID);
|
|
|
|
switch (i_this->mMoveMode) {
|
|
case 0:
|
|
i_this->mMoveMode = 1;
|
|
if (cM_rndF(1.0f) < 0.5f) {
|
|
anm_init(i_this, B_GND_BCK_EGND_DAMAGE_A, 3.0f, 0, 1.0f);
|
|
} else {
|
|
anm_init(i_this, B_GND_BCK_EGND_DAMAGE_B, 3.0f, 0, 1.0f);
|
|
}
|
|
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_DAMAGE, -1);
|
|
a_this->current.angle.y = player->shape_angle.y + 0x8000;
|
|
i_this->field_0xeb0 = 25.0f;
|
|
i_this->field_0xeac = a_this->current.angle.y;
|
|
mant_p->field_0x395c = 0.5f;
|
|
break;
|
|
case 1:
|
|
if ((i_this->mDamageInvulnerabilityTimer <= 50 || anm_frame <= 10) && !i_this->mpModelMorf->isStop()) {
|
|
break;
|
|
}
|
|
|
|
i_this->mDamageInvulnerabilityTimer = 15;
|
|
i_this->mActionMode = ACTION_WAIT;
|
|
i_this->mMoveMode = 0;
|
|
i_this->field_0x1e0a = 0;
|
|
i_this->field_0xc7c = 0;
|
|
}
|
|
|
|
cLib_addCalc2(&a_this->speedF, 0.0f, 1.0f, 10.0f);
|
|
}
|
|
|
|
/* 805F94A8-805F98A0 004B48 03F8+00 1/1 0/0 0/0 .text b_gnd_g_down__FP11b_gnd_class */
|
|
static void b_gnd_g_down(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
fopEn_enemy_c* e_this = (fopEn_enemy_c*)a_this;
|
|
|
|
f32 var_f31 = 0.0f;
|
|
f32 var_f30 = 10.0f;
|
|
int anm_frame = (int)i_this->mpModelMorf->getFrame();
|
|
|
|
mant_class* mant_p = (mant_class*)fopAcM_SearchByID(i_this->mMantChildID);
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
|
|
switch(i_this->mMoveMode) {
|
|
case 0:
|
|
i_this->field_0x1e0c++;
|
|
if (i_this->field_0x1e0c >= 3) {
|
|
anm_init(i_this, B_GND_BCK_EGND_DOWN, 3.0f, 0, 1.0f);
|
|
} else {
|
|
anm_init(i_this, B_GND_BCK_EGND_DOWNB, 3.0f, 0, 1.0f);
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_DAMAGE, -1);
|
|
}
|
|
|
|
a_this->current.angle.y = i_this->mPlayerAngleY + 0x8000;
|
|
i_this->mMoveMode = 1;
|
|
|
|
mant_p->field_0x395c = 1.0f;
|
|
|
|
a_this->speedF = 30.0f;
|
|
a_this->speed.y = 35.0f;
|
|
return;
|
|
case 1:
|
|
if (anm_frame >= 16) {
|
|
cLib_addCalc0(&a_this->speedF, 1.0f, 3.0f);
|
|
|
|
if (anm_frame == 16) {
|
|
cXyz eff_pos;
|
|
MTXCopy(i_this->mpModelMorf->getModel()->getAnmMtx(1), mDoMtx_stack_c::get());
|
|
mDoMtx_stack_c::multVecZero(&eff_pos);
|
|
|
|
fopAcM_effSmokeSet1(&i_this->field_0x25b4, &i_this->field_0x25b8, &eff_pos, &a_this->shape_angle, 2.5f, &i_this->tevStr, 1);
|
|
dComIfGp_getVibration().StartShock(VIBMODE_S_POWER6, 0x1F, cXyz(0.0f, 1.0f, 0.0f));
|
|
mant_p->field_0x3960 = 9.0f;
|
|
|
|
if (i_this->mAnmID == B_GND_BCK_EGND_DOWNB) {
|
|
mant_p->field_0x395c = 1.0f;
|
|
}
|
|
}
|
|
|
|
if (i_this->mAnmID == B_GND_BCK_EGND_DOWN && anm_frame >= 22) {
|
|
mant_p->field_0x3965 = 1;
|
|
}
|
|
} else {
|
|
mant_p->field_0x3964 = 1;
|
|
}
|
|
|
|
if (i_this->mAnmID == B_GND_BCK_EGND_DOWNB && anm_frame == 48) {
|
|
mant_p->field_0x395c = 1.0f;
|
|
}
|
|
|
|
if (!i_this->mpModelMorf->isStop()) {
|
|
return;
|
|
}
|
|
|
|
a_this->speedF = 0.0f;
|
|
|
|
if (i_this->mAnmID == B_GND_BCK_EGND_DOWN) {
|
|
anm_init(i_this, B_GND_BCK_EGND_DOWNWAIT, 3.0f, 2, 1.0f);
|
|
i_this->mMoveMode = 2;
|
|
i_this->field_0xc44[0] = 200;
|
|
|
|
if (daPy_getPlayerActorClass()->checkMasterSwordEquip()) {
|
|
e_this->onDownFlg();
|
|
}
|
|
return;
|
|
}
|
|
|
|
i_this->mActionMode = ACTION_WAIT;
|
|
i_this->mMoveMode = 0;
|
|
a_this->current.angle.y = a_this->shape_angle.y;
|
|
return;
|
|
case 2:
|
|
mant_p->field_0x3965 = 1;
|
|
if (daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_DOWN) {
|
|
i_this->mDemoCamMode = 60;
|
|
i_this->mActionMode = ACTION_END;
|
|
i_this->mMoveMode = 0;
|
|
Z2GetAudioMgr()->bgmStop(30, 0);
|
|
}
|
|
|
|
if (i_this->field_0xc44[0] != 0 && daPy_getPlayerActorClass()->checkMasterSwordEquip()) {
|
|
return;
|
|
}
|
|
|
|
anm_init(i_this, B_GND_BCK_EGND_DOWNUP, 3.0f, 0, 1.0f);
|
|
a_this->current.angle.y = a_this->shape_angle.y;
|
|
i_this->mMoveMode = 3;
|
|
e_this->offDownFlg();
|
|
case 3:
|
|
if (anm_frame <= 10) {
|
|
mant_p->field_0x3965 = 1;
|
|
if (anm_frame == 10) {
|
|
mant_p->field_0x395c = 1.0f;
|
|
}
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mActionMode = ACTION_WAIT;
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 805F98A0-805F98F8 004F40 0058+00 1/1 0/0 0/0 .text b_gnd_g_end__FP11b_gnd_class */
|
|
static void b_gnd_g_end(b_gnd_class* i_this) {
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
mant_class* mant_p = (mant_class*)fopAcM_SearchByID(i_this->mMantChildID);
|
|
mant_p->field_0x3965 = 1;
|
|
|
|
if (i_this->mMoveMode == 0) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
/* 805F98F8-805F9BE4 004F98 02EC+00 1/1 0/0 0/0 .text damage_check__FP11b_gnd_class */
|
|
static void damage_check(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
|
|
i_this->mGndCcStts.Move();
|
|
|
|
if (i_this->field_0x1e09 != 0) {
|
|
i_this->field_0x1e09--;
|
|
}
|
|
|
|
if (i_this->mDamageInvulnerabilityTimer == 0) {
|
|
mant_class* mant_p = (mant_class*)fopAcM_SearchByID(i_this->mMantChildID);
|
|
BOOL hit_down = FALSE;
|
|
|
|
for (int i = 0; i < 3; i++) {
|
|
if (i_this->mGndSph[i].ChkTgHit()) {
|
|
i_this->mAtInfo.mpCollider = i_this->mGndSph[i].GetTgHitObj();
|
|
cc_at_check(a_this, &i_this->mAtInfo);
|
|
|
|
if (i_this->mAtInfo.mpCollider->ChkAtType(AT_TYPE_BOOMERANG)) {
|
|
mant_p->field_0x395c = 1.3f;
|
|
i_this->mDamageInvulnerabilityTimer = 6;
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_MANTEAU, 0, -1);
|
|
return;
|
|
}
|
|
|
|
if (i_this->field_0x1e09 != 0) {
|
|
hit_down = TRUE;
|
|
}
|
|
|
|
if (i_this->health <= 0 || (i_this->field_0x1e0a >= 3 && daPy_getPlayerActorClass()->getCutCount() >= 4)) {
|
|
hit_down = TRUE;
|
|
} else {
|
|
i_this->mActionMode = ACTION_DAMAGE;
|
|
i_this->mMoveMode = 0;
|
|
i_this->field_0x2698 = 1;
|
|
|
|
if (i_this->mAtInfo.mHitStatus != 0) {
|
|
mant_p->field_0x3967 = 3;
|
|
} else {
|
|
mant_p->field_0x3967 = 2;
|
|
}
|
|
|
|
if (player->getCutType() == daPy_py_c::CUT_TYPE_JUMP && player->checkCutJumpCancelTurn()) {
|
|
i_this->mDamageInvulnerabilityTimer = 3;
|
|
i_this->field_0x1e09 = 10;
|
|
} else {
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
i_this->field_0x1e0a++;
|
|
|
|
if (i_this->field_0xc7c == 0 && i_this->field_0x1e0a >= 3) {
|
|
i_this->mDamageInvulnerabilityTimer = 100;
|
|
}
|
|
}
|
|
}
|
|
|
|
cXyz hitmark_size(1.0f, 1.0f, 1.0f);
|
|
u16 hitmark;
|
|
if (hit_down) {
|
|
hitmark = 3;
|
|
} else {
|
|
hitmark = 1;
|
|
}
|
|
|
|
cXyz ato;
|
|
cXyz mae;
|
|
MTXCopy(i_this->mpModelMorf->getModel()->getAnmMtx(2), *calc_mtx);
|
|
mae.x = cM_rndFX(10.0f);
|
|
mae.y = cM_rndFX(10.0f) + 50.0f;
|
|
mae.z = cM_rndFX(10.0f);
|
|
MtxPosition(&mae, &ato);
|
|
dComIfGp_setHitMark(hitmark, a_this, &ato, NULL, &hitmark_size, 0);
|
|
|
|
if (hit_down) {
|
|
i_this->mActionMode = ACTION_DOWN;
|
|
i_this->mMoveMode = 0;
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
i_this->field_0xc7c = 0;
|
|
dScnPly_c::setPauseTimer(7);
|
|
a_this->health = 100;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 805F9BE4-805FA2FC 005284 0718+00 1/1 0/0 0/0 .text eff_set_h__FP11b_gnd_class */
|
|
static void eff_set_h(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
cXyz sp44;
|
|
cXyz sp38;
|
|
|
|
if (i_this->mHorseAnmID == B_HG_BCK_HG_RUN) {
|
|
if (i_this->mpHorseMorf->checkFrame(5.0f)) {
|
|
i_this->field_0x2698 |= 3;
|
|
} else if (i_this->mpHorseMorf->checkFrame(20.0f)) {
|
|
i_this->field_0x2698 |= 12;
|
|
}
|
|
|
|
i_this->field_0xc6a = 1;
|
|
}
|
|
|
|
dBgS_GndChk spA4;
|
|
dBgS_ObjGndChk_Spl sp50;
|
|
|
|
sp44 = i_this->current.pos;
|
|
sp44.y += 100.0f;
|
|
|
|
spA4.SetPos(&sp44);
|
|
sp50.SetPos(&sp44);
|
|
|
|
s8 var_r27 = FALSE;
|
|
s8 var_r26 = FALSE;
|
|
|
|
if (dComIfG_Bgsp().GroundCross(&sp50) - dComIfG_Bgsp().GroundCross(&spA4) > 0.0f) {
|
|
var_r27 = TRUE;
|
|
}
|
|
|
|
if (i_this->field_0x2698 != 0) {
|
|
J3DModel* model = i_this->mpHorseMorf->getModel();
|
|
sp44.set(0.0f, 0.0f, 0.0f);
|
|
|
|
if (i_this->field_0x2698 & 1) {
|
|
MTXCopy(model->getAnmMtx(10), *calc_mtx);
|
|
MtxPosition(&sp44, &sp38);
|
|
|
|
if (var_r27) {
|
|
var_r26 = TRUE;
|
|
} else {
|
|
fopAcM_effSmokeSet2(&i_this->field_0x25ac[1], &i_this->field_0x25d0, &sp38, &i_this->shape_angle, i_this->scale.z * 2.0f, &i_this->tevStr);
|
|
if (i_this->field_0xc6a != 0) {
|
|
i_this->field_0x25c0 = dComIfGp_particle_set(i_this->field_0x25c0, 0x80E3, &sp38, &i_this->shape_angle, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (i_this->field_0x2698 & 2) {
|
|
MTXCopy(model->getAnmMtx(6), *calc_mtx);
|
|
MtxPosition(&sp44, &sp38);
|
|
|
|
if (var_r27) {
|
|
var_r26 = TRUE;
|
|
} else {
|
|
fopAcM_effSmokeSet2(&i_this->field_0x25ac[0], &i_this->field_0x25cc, &sp38, &i_this->shape_angle, i_this->scale.z * 2.0f, &i_this->tevStr);
|
|
if (i_this->field_0xc6a != 0) {
|
|
i_this->field_0x25bc = dComIfGp_particle_set(i_this->field_0x25bc, 0x80E3, &sp38, &i_this->shape_angle, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (i_this->field_0x2698 & 4) {
|
|
MTXCopy(model->getAnmMtx(34), *calc_mtx);
|
|
MtxPosition(&sp44, &sp38);
|
|
|
|
if (var_r27) {
|
|
var_r26 = TRUE;
|
|
} else {
|
|
fopAcM_effSmokeSet2(&i_this->field_0x25b4, &i_this->field_0x25d4, &sp38, &i_this->shape_angle, i_this->scale.z * 2.0f, &i_this->tevStr);
|
|
if (i_this->field_0xc6a != 0) {
|
|
i_this->field_0x25c4 = dComIfGp_particle_set(i_this->field_0x25c4, 0x80E3, &sp38, &i_this->shape_angle, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (i_this->field_0x2698 & 8) {
|
|
MTXCopy(model->getAnmMtx(30), *calc_mtx);
|
|
MtxPosition(&sp44, &sp38);
|
|
|
|
if (var_r27) {
|
|
var_r26 = TRUE;
|
|
} else {
|
|
fopAcM_effSmokeSet2(&i_this->field_0x25b8, &i_this->field_0x25d8, &sp38, &i_this->shape_angle, i_this->scale.z * 2.0f, &i_this->tevStr);
|
|
if (i_this->field_0xc6a != 0) {
|
|
i_this->field_0x25c8 = dComIfGp_particle_set(i_this->field_0x25c8, 0x80E3, &sp38, &i_this->shape_angle, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (i_this->field_0x2699 != 0) {
|
|
sp44.set(0.0f, 0.0f, 0.0f);
|
|
MTXCopy(i_this->mpHorseMorf->getModel()->getAnmMtx(2), *calc_mtx);
|
|
MtxPosition(&sp44, &sp38);
|
|
|
|
f32 var_f30 = 2.5f;
|
|
if (i_this->field_0x2699 == 2) {
|
|
var_f30 = 4.0f;
|
|
}
|
|
|
|
if (var_r27) {
|
|
var_r26 = TRUE;
|
|
} else {
|
|
fopAcM_effSmokeSet1(&i_this->field_0x25dc, &i_this->field_0x25e0, &sp38, NULL, var_f30, &i_this->tevStr, 1);
|
|
}
|
|
}
|
|
|
|
if (var_r26) {
|
|
cXyz sp2C(2.0f, 2.0f, 2.0f);
|
|
csXyz sp24(0, 0, 0);
|
|
|
|
sp38.y = dComIfG_Bgsp().GroundCross(&spA4);
|
|
for (int i = 0; i < 3; i++) {
|
|
static u16 w_eff_name[3] = {0x825B, 0x825C, 0x825D};
|
|
static u16 w_eff_name2[3] = {0x8258, 0x8259, 0x825A};
|
|
|
|
i_this->field_0x25e4[i] = dComIfGp_particle_set(i_this->field_0x25e4[i],
|
|
w_eff_name[i], &sp38, &i_this->tevStr,
|
|
&sp24, &sp2C, -1, NULL,
|
|
-1, NULL, NULL, NULL);
|
|
}
|
|
}
|
|
|
|
i_this->field_0x2698 = 0;
|
|
i_this->field_0xc6a = 0;
|
|
i_this->field_0x2699 = 0;
|
|
|
|
if (i_this->field_0x1e08 != 0) {
|
|
MTXCopy(i_this->mpModelMorf->getModel()->getAnmMtx(1), mDoMtx_stack_c::get());
|
|
mDoMtx_stack_c::multVecZero(&sp38);
|
|
|
|
for (int i = 0; i < 3; i++) {
|
|
static u16 e_name[3] = {0x8B95, 0x8B96, 0x8B97};
|
|
i_this->field_0x268c[i] = dComIfGp_particle_set(i_this->field_0x268c[i], e_name[i], &sp38, NULL, 0);
|
|
}
|
|
|
|
i_this->mGndSound.startCreatureSoundLevel(Z2SE_EN_GND_DENKIBIRI, 0, -1);
|
|
}
|
|
}
|
|
|
|
/* 805FA2FC-805FA3E4 00599C 00E8+00 1/1 0/0 0/0 .text eff_set__FP11b_gnd_class */
|
|
static void eff_set(b_gnd_class* i_this) {
|
|
if (i_this->field_0x2698 == 2) {
|
|
if (i_this->mCounter & 1) {
|
|
fopAcM_effSmokeSet2(&i_this->field_0x25ac[0], &i_this->field_0x25ac[1],
|
|
&i_this->field_0x26a8[(i_this->mCounter & 2) >> 1], &i_this->shape_angle,
|
|
2.0f, &i_this->tevStr);
|
|
}
|
|
} else if (i_this->field_0x2698 == 1) {
|
|
for (int i = 0; i < 2; i++) {
|
|
fopAcM_effSmokeSet2((&i_this->field_0x25ac[i]), (&i_this->field_0x25ac[i + 2]),
|
|
&i_this->field_0x26a8[i], &i_this->shape_angle, 2.5f, &i_this->tevStr);
|
|
}
|
|
}
|
|
|
|
i_this->field_0x2698 = 0;
|
|
}
|
|
|
|
/* 805FA3E4-805FA430 005A84 004C+00 2/2 0/0 0/0 .text s_fkdel_sub__FPvPv */
|
|
static void* s_fkdel_sub(void* i_actor, void* i_data) {
|
|
if (fopAc_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_FK) {
|
|
fopAcM_delete((fopAc_ac_c*)i_actor);
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
/* 805FA430-805FA47C 005AD0 004C+00 1/1 0/0 0/0 .text s_objgbdel_sub__FPvPv */
|
|
static void* s_objgbdel_sub(void* i_actor, void* i_data) {
|
|
if (fopAc_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_OBJ_GB) {
|
|
fopAcM_delete((fopAc_ac_c*)i_actor);
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
/* 805FA47C-805FA758 005B1C 02DC+00 1/1 0/0 0/0 .text h_damage_check__FP11b_gnd_class */
|
|
static void h_damage_check(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
|
|
i_this->mGndCcStts.Move();
|
|
|
|
if (i_this->mDamageInvulnerabilityTimer == 0) {
|
|
mant_class* mant_p = (mant_class*)fopAcM_SearchByID(i_this->mMantChildID);
|
|
BOOL var_r27 = FALSE;
|
|
|
|
for (int i = 0; i < 3; i++) {
|
|
if (i_this->mGndSph[i].ChkTgHit()) {
|
|
i_this->mAtInfo.mpCollider = i_this->mGndSph[i].GetTgHitObj();
|
|
cc_at_check(a_this, &i_this->mAtInfo);
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
|
|
OS_REPORT(" GND AP %d\n", i_this->mAtInfo.mAttackPower);
|
|
OS_REPORT(" GND HP2 %d\n", i_this->health);
|
|
|
|
if (i_this->field_0x1e08 != 0) {
|
|
i_this->field_0x1e0a++;
|
|
mant_p->field_0x3967 = 1;
|
|
i_this->mDamageInvulnerabilityTimer = 30;
|
|
|
|
if (i_this->health <= 0) {
|
|
i_this->mActionMode = ACTION_HEND;
|
|
i_this->mMoveMode = 0;
|
|
fpcM_Search(s_fkdel_sub, i_this);
|
|
i_this->field_0x1e0a = 0;
|
|
} else {
|
|
i_this->mMoveMode = 11;
|
|
OS_REPORT(" GND PIYO DAM %d\n", i_this->field_0x1e0a);
|
|
}
|
|
|
|
var_r27 = true;
|
|
break;
|
|
}
|
|
|
|
if (((dCcD_GObjInf*)i_this->mAtInfo.mpCollider)->GetAtMtrl() == dCcD_MTRL_LIGHT) {
|
|
OS_REPORT(" GND LIGHT HITL\n");
|
|
if (i_this->field_0x1e0f == 1) {
|
|
i_this->field_0x1e0f = 0;
|
|
i_this->field_0x1e10 = 0.0f;
|
|
}
|
|
|
|
i_this->mActionMode = ACTION_HRUN_A;
|
|
i_this->mMoveMode = 7;
|
|
var_r27 = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!var_r27) {
|
|
for (int i = 0; i < 2; i++) {
|
|
if (i_this->mHorseBodySph[i].ChkTgHit()) {
|
|
i_this->mAtInfo.mpCollider = i_this->mHorseBodySph[i].GetTgHitObj();
|
|
i_this->mHorseBodySph[i].ClrTgHit();
|
|
|
|
if (i_this->mDrawHorse && i_this->field_0x1e08 == 0 && ((dCcD_GObjInf*)i_this->mAtInfo.mpCollider)->GetAtMtrl() == dCcD_MTRL_LIGHT) {
|
|
OS_REPORT(" HGND LIGHT HITL 2\n");
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
if (i_this->field_0x1e0f == 1) {
|
|
i_this->field_0x1e0f = 0;
|
|
i_this->field_0x1e10 = 0.0f;
|
|
}
|
|
|
|
i_this->mActionMode = ACTION_HRUN_A;
|
|
i_this->mMoveMode = 7;
|
|
var_r27 = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (var_r27) {
|
|
cXyz sp34(1.0f, 1.0f, 1.0f);
|
|
u16 sp8;
|
|
if (i_this->mAtInfo.mHitStatus != 0) {
|
|
sp8 = 3;
|
|
} else {
|
|
sp8 = 1;
|
|
}
|
|
|
|
cXyz sp28;
|
|
cXyz sp1C;
|
|
MTXCopy(i_this->mpModelMorf->getModel()->getAnmMtx(2), *calc_mtx);
|
|
sp1C.x = cM_rndFX(10.0f);
|
|
sp1C.y = cM_rndFX(10.0f) + 50.0f;
|
|
sp1C.z = cM_rndFX(10.0f);
|
|
MtxPosition(&sp1C, &sp28);
|
|
dComIfGp_setHitMark(sp8, a_this, &sp28, NULL, &sp34, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 805FA758-805FAFF0 005DF8 0898+00 2/1 0/0 0/0 .text action__FP11b_gnd_class */
|
|
static void action(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
cXyz sp88;
|
|
cXyz sp7C;
|
|
|
|
i_this->mPlayerDistXZ = fopAcM_searchPlayerDistanceXZ(a_this);
|
|
i_this->mPlayerAngleY = fopAcM_searchPlayerAngleY(a_this);
|
|
|
|
if (i_this->field_0x1e08 != 0) {
|
|
i_this->field_0x1e08--;
|
|
}
|
|
|
|
BOOL attn_on = TRUE;
|
|
BOOL snd_link_search = TRUE;
|
|
BOOL can_hjump = FALSE;
|
|
BOOL sp38 = FALSE;
|
|
BOOL sp34 = TRUE;
|
|
|
|
i_this->field_0xc7d = 1;
|
|
i_this->field_0x2740 = 0;
|
|
|
|
switch (i_this->mActionMode) {
|
|
case ACTION_HWAIT_1:
|
|
b_gnd_h_wait(i_this);
|
|
break;
|
|
case ACTION_HWAIT_2:
|
|
b_gnd_h_wait2(i_this);
|
|
break;
|
|
case ACTION_HRUN_A:
|
|
b_gnd_h_run_a(i_this);
|
|
can_hjump = true;
|
|
break;
|
|
case ACTION_HRUN_P:
|
|
b_gnd_h_run_p(i_this);
|
|
can_hjump = true;
|
|
break;
|
|
case ACTION_HJUMP:
|
|
b_gnd_h_jump(i_this);
|
|
break;
|
|
case ACTION_HEND:
|
|
b_gnd_h_end(i_this);
|
|
sp34 = FALSE;
|
|
attn_on = FALSE;
|
|
i_this->field_0xc7d = 0;
|
|
break;
|
|
case ACTION_WAIT:
|
|
b_gnd_g_wait(i_this);
|
|
sp38 = TRUE;
|
|
break;
|
|
case ACTION_ATTACK:
|
|
sp38 = b_gnd_g_attack(i_this);
|
|
break;
|
|
case ACTION_DEFENCE:
|
|
b_gnd_g_defence(i_this);
|
|
break;
|
|
case ACTION_JUMP:
|
|
attn_on = b_gnd_g_jump(i_this);
|
|
sp34 = FALSE;
|
|
break;
|
|
case ACTION_SIDE:
|
|
b_gnd_g_side(i_this);
|
|
sp34 = FALSE;
|
|
break;
|
|
case ACTION_TUBA:
|
|
b_gnd_g_tuba(i_this);
|
|
break;
|
|
case ACTION_DAMAGE:
|
|
b_gnd_g_damage(i_this);
|
|
i_this->field_0xc7d = 0;
|
|
break;
|
|
case ACTION_DOWN:
|
|
b_gnd_g_down(i_this);
|
|
sp34 = FALSE;
|
|
i_this->field_0xc7d = 0;
|
|
break;
|
|
case ACTION_END:
|
|
b_gnd_g_end(i_this);
|
|
sp34 = FALSE;
|
|
i_this->field_0xc7d = 0;
|
|
}
|
|
|
|
#ifdef DEBUG
|
|
if (mDoCPd_c::getTrigR(PAD_2)) {
|
|
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
|
|
kankyo->wether = 1;
|
|
|
|
i_this->mActionMode = ACTION_WAIT;
|
|
i_this->mMoveMode = 0;
|
|
i_this->mDrawHorse = FALSE;
|
|
i_this->speedF = 0.0f;
|
|
|
|
mant_class* mant_p = (mant_class*)fopAcM_SearchByID(i_this->mMantChildID);
|
|
mant_p->field_0x3969 = 1;
|
|
|
|
h_anm_init(i_this, B_HG_BCK_HG_DOWN, 3.0f, 0, 1.0f);
|
|
if (daPy_getPlayerActorClass()->checkHorseRide()) {
|
|
i_this->mDemoCamMode = 90;
|
|
}
|
|
|
|
fpcM_Search(s_fkdel_sub, i_this);
|
|
i_this->health = 100;
|
|
i_this->field_0x1e0a = 0;
|
|
i_this->shape_angle.z = 0;
|
|
i_this->shape_angle.x = 0;
|
|
i_this->current.angle.z = 0;
|
|
i_this->current.angle.x = 0;
|
|
|
|
Z2GetAudioMgr()->bgmStart(Z2BGM_VS_GANON_04, 0, 0);
|
|
dComIfGs_onOneZoneSwitch(15, -1);
|
|
dComIfGs_onSaveDunSwitch(1);
|
|
}
|
|
|
|
if (mDoCPd_c::getTrigZ(PAD_2)) {
|
|
i_this->mActionMode = ACTION_HEND;
|
|
i_this->mMoveMode = 0;
|
|
i_this->mDrawHorse = TRUE;
|
|
fpcM_Search(s_fkdel_sub, i_this);
|
|
}
|
|
#endif
|
|
|
|
if (snd_link_search) {
|
|
i_this->mGndSound.setLinkSearch(true);
|
|
} else {
|
|
i_this->mGndSound.setLinkSearch(false);
|
|
}
|
|
|
|
if (attn_on) {
|
|
fopAcM_OnStatus(i_this, 0);
|
|
i_this->attention_info.flags = fopAc_AttnFlag_BATTLE_e;
|
|
} else {
|
|
fopAcM_OffStatus(i_this, 0);
|
|
i_this->attention_info.flags = 0;
|
|
}
|
|
|
|
if (i_this->mDrawHorse) {
|
|
if (can_hjump && saku_jump_check(i_this)) {
|
|
i_this->field_0xb00 = i_this->mActionMode;
|
|
i_this->mActionMode = ACTION_HJUMP;
|
|
i_this->mMoveMode = 0;
|
|
}
|
|
} else {
|
|
if (!daPy_py_c::checkMasterSwordEquip()) {
|
|
i_this->mDamageInvulnerabilityTimer = 10;
|
|
}
|
|
|
|
if (i_this->field_0xc5a != 0) {
|
|
sp38 = FALSE;
|
|
}
|
|
|
|
if (sp38) {
|
|
int sp28 = fpcM_Search(shot_s_sub, i_this) != NULL;
|
|
if (daPy_getPlayerActorClass()->checkHookshotShootReturnMode() && !daPy_getPlayerActorClass()->checkHookshotReturnMode()) {
|
|
sp28 = 2;
|
|
}
|
|
|
|
cXyz* ironball_pos = player->getIronBallCenterPos();
|
|
if (ironball_pos != NULL && (player->current.pos - *ironball_pos).abs() > 300.0f && (a_this->current.pos - *ironball_pos).abs() < 400.0f && !dComIfGp_checkPlayerStatus0(0, 0x400) && !daPy_getPlayerActorClass()->checkIronBallReturn() && !daPy_getPlayerActorClass()->checkIronBallGroundStop()) {
|
|
sp28 = 2;
|
|
}
|
|
|
|
f32 pl_at_check_range = 0.0f;
|
|
if (daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT || daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT) {
|
|
pl_at_check_range = 150.0f;
|
|
}
|
|
|
|
int cut_type = cc_pl_cut_bit_get();
|
|
if (cut_type == 0) {
|
|
cut_type = daPy_getPlayerActorClass()->getCutType();
|
|
}
|
|
|
|
if (cut_type == 0x400 || (cut_type == 0x100 && player->speed.y > 5.0f)) {
|
|
cut_type = 0;
|
|
}
|
|
|
|
if (!fopAcM_plAngleCheck(a_this, 0x4000)) {
|
|
cut_type = 0;
|
|
}
|
|
|
|
if (!daPy_py_c::checkMasterSwordEquip()) {
|
|
cut_type = 0;
|
|
}
|
|
|
|
if ((cut_type != 0 || sp28 != 0) && (sp28 != 0 || i_this->mPlayerDistXZ < pl_at_check_range + 380.0f)) {
|
|
if (sp28 == 2 || (sp28 == 1 && cM_rndF(1.0f) < 0.5f) || cut_type == 0x100) {
|
|
if (sp28 == 2 && i_this->mPlayerDistXZ > 700.0f && cM_rndF(1.0f) < 0.5f) {
|
|
i_this->mActionMode = ACTION_JUMP;
|
|
i_this->mMoveMode = 0;
|
|
} else {
|
|
i_this->mActionMode = ACTION_SIDE;
|
|
i_this->mMoveMode = 0;
|
|
i_this->mDamageInvulnerabilityTimer = 15;
|
|
}
|
|
} else {
|
|
i_this->mActionMode = ACTION_DEFENCE;
|
|
i_this->mMoveMode = 0;
|
|
i_this->mDamageInvulnerabilityTimer = 15;
|
|
i_this->field_0xc79 = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
s16 sp14 = 0;
|
|
s16 sp12 = 0;
|
|
s16 sp10 = 0x1000;
|
|
if (i_this->field_0xc7d != 0) {
|
|
if (i_this->field_0xc7d == 1) {
|
|
sp88 = player->eyePos - a_this->current.pos;
|
|
} else {
|
|
sp88 = i_this->field_0xc80 - a_this->current.pos;
|
|
}
|
|
|
|
if (i_this->mDrawHorse) {
|
|
sp88.y += -450.0f;
|
|
} else {
|
|
sp88.y += -200.0f;
|
|
}
|
|
|
|
sp14 = cM_atan2s(sp88.x, sp88.z) - a_this->shape_angle.y;
|
|
sp12 = a_this->shape_angle.x + cM_atan2s(sp88.y, JMAFastSqrt(sp88.x * sp88.x + sp88.z * sp88.z));
|
|
if (sp14 > 11000) {
|
|
sp14 = 11000;
|
|
} else if (sp14 < -11000) {
|
|
sp14 = -11000;
|
|
}
|
|
|
|
if (sp12 > 3000) {
|
|
sp12 = 3000;
|
|
} else if (sp12 < -3000) {
|
|
sp12 = -3000;
|
|
}
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&i_this->mGndBodyRotX, sp14, 2, sp10);
|
|
cLib_addCalcAngleS2(&i_this->mGndHeadRotZ, sp12, 2, sp10);
|
|
|
|
if (sp34) {
|
|
cLib_addCalcAngleS2(&a_this->shape_angle.y, a_this->current.angle.y, 2, 0x1000);
|
|
}
|
|
|
|
if (i_this->field_0xc70 != 0) {
|
|
i_this->field_0xc70--;
|
|
i_this->field_0xc6c = i_this->field_0xc70;
|
|
if (i_this->field_0xc6c > 7.0f) {
|
|
i_this->field_0xc6c = 0.0f;
|
|
}
|
|
} else {
|
|
i_this->field_0xc6c = 0.0f;
|
|
i_this->field_0xc70 = cM_rndF(200.0f) + 200.0f;
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&i_this->mGndLegRotX, i_this->field_0x26c2, 2, 0x600);
|
|
i_this->field_0x26c2 = 0;
|
|
}
|
|
|
|
/* 805FAFF0-805FB0F0 006690 0100+00 1/1 0/0 0/0 .text ball_bg_check__FP11b_gnd_classi */
|
|
static BOOL ball_bg_check(b_gnd_class* i_this, int i_no) {
|
|
cXyz start;
|
|
cXyz end;
|
|
cXyz sp2C;
|
|
dBgS_LinChk linChk;
|
|
|
|
start = i_this->mLightBallPos[i_no];
|
|
end = i_this->mLightBallPos[i_no] + ((i_this->mLightBallPos[i_no] - i_this->field_0x1e98[i_no]) * 2.0f);
|
|
linChk.Set(&start, &end, i_this);
|
|
|
|
if (dComIfG_Bgsp().LineCross(&linChk)) {
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
/* 805FB0F0-805FB414 006790 0324+00 1/1 0/0 0/0 .text himo_control1__FP11b_gnd_classP4cXyziSc */
|
|
static void himo_control1(b_gnd_class* i_this, cXyz* param_2, int param_3, s8 param_4) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
cXyz sp60;
|
|
cXyz sp54;
|
|
|
|
int i;
|
|
s16 sp10;
|
|
s16 spE;
|
|
|
|
cXyz* var_r30 = i_this->field_0x1ff0[param_3].field_0x0;
|
|
var_r30[0] = *param_2;
|
|
|
|
cXyz sp48;
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
cMtx_XrotM(*calc_mtx, a_this->shape_angle.x);
|
|
|
|
sp60.x = 20.0f;
|
|
if (param_3 == 0) {
|
|
sp60.x *= -1.0f;
|
|
}
|
|
sp60.y = 0.0f;
|
|
sp60.z = 0.0f;
|
|
MtxPosition(&sp60, &sp48);
|
|
|
|
cXyz sp3C;
|
|
cXyz sp30;
|
|
cXyz sp24;
|
|
|
|
sp60.x = 0.0f;
|
|
sp60.y = i_this->field_0x1fd0;
|
|
sp60.z = sp60.y;
|
|
MtxPosition(&sp60, &sp30);
|
|
|
|
if (a_this->speedF > 20.0f) {
|
|
sp60.x = i_this->field_0x1fd0 * 0.4f;
|
|
} else {
|
|
sp60.x = i_this->field_0x1fd0 * 0.1f;
|
|
}
|
|
|
|
if (param_3 == 0) {
|
|
sp60.x *= -1.0f;
|
|
}
|
|
sp60.y = 0.0f;
|
|
sp60.z = 0.0f;
|
|
MtxPosition(&sp60, &sp24);
|
|
|
|
sp60.x = 0.0f;
|
|
sp60.y = 0.0f;
|
|
if (param_4 != 0) {
|
|
sp60.z = 15.0f;
|
|
} else {
|
|
sp60.z = 20.0f;
|
|
}
|
|
|
|
i = 1;
|
|
cXyz* var_r30_2 = var_r30 + 1;
|
|
for (; i < 16; i++, var_r30_2++) {
|
|
sp3C.x = sp30.x * cM_ssin(i_this->field_0x1fd4 + i * 6000);
|
|
sp3C.y = sp30.y * cM_ssin(i_this->field_0x1fd4 + i * 6000);
|
|
sp3C.z = sp30.z * cM_ssin(i_this->field_0x1fd4 + i * 6000);
|
|
|
|
f32 var_f29 = 1.0f;
|
|
f32 var_f31 = sp24.x + (sp3C.x + ((var_r30_2[0].x - var_r30_2[-1].x) + (sp48.x * var_f29)));
|
|
f32 var_f28 = sp3C.y + ((var_r30_2[0].y - var_r30_2[-1].y) - 20.0f);
|
|
f32 var_f30 = sp24.z + (sp3C.z + ((var_r30_2[0].z - var_r30_2[-1].z) + (sp48.z * var_f29)));
|
|
|
|
spE = (s16)cM_atan2s(var_f31, var_f30);
|
|
sp10 = -cM_atan2s(var_f28, JMAFastSqrt(var_f31 * var_f31 + var_f30 * var_f30));
|
|
|
|
cMtx_YrotS(*calc_mtx, spE);
|
|
cMtx_XrotM(*calc_mtx, sp10);
|
|
MtxPosition(&sp60, &sp54);
|
|
|
|
var_r30_2[0].x = var_r30_2[-1].x + sp54.x;
|
|
var_r30_2[0].y = var_r30_2[-1].y + sp54.y;
|
|
var_r30_2[0].z = var_r30_2[-1].z + sp54.z;
|
|
}
|
|
}
|
|
|
|
/* 805FB414-805FB620 006AB4 020C+00 1/1 0/0 0/0 .text himo_control2__FP11b_gnd_classP4cXyziSc */
|
|
static void himo_control2(b_gnd_class* i_this, cXyz* param_2, int param_3, s8 param_4) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
cXyz sp30;
|
|
cXyz sp24;
|
|
|
|
int i;
|
|
s16 sp10;
|
|
s16 spE;
|
|
g_himo_s* sp1C = &i_this->field_0x1ff0[param_3];
|
|
cXyz* temp_r31 = &sp1C->field_0x0[15];
|
|
*temp_r31 = *param_2;
|
|
|
|
sp30.x = 0.0f;
|
|
sp30.y = 0.0f;
|
|
|
|
if (param_4 != 0) {
|
|
sp30.z = 15.0f;
|
|
} else {
|
|
sp30.z = 20.0f;
|
|
}
|
|
|
|
temp_r31--;
|
|
|
|
for (i = 14; i >= 1; i--, temp_r31--) {
|
|
f32 temp_f31 = temp_r31[0].x - temp_r31[1].x;
|
|
f32 temp_f29 = temp_r31[0].y - temp_r31[1].y;
|
|
f32 temp_f30 = temp_r31[0].z - temp_r31[1].z;
|
|
spE = (s16)cM_atan2s(temp_f31, temp_f30);
|
|
sp10 = -cM_atan2s(temp_f29, JMAFastSqrt((temp_f31 * temp_f31) + (temp_f30 * temp_f30)));
|
|
|
|
cMtx_YrotS(*calc_mtx, spE);
|
|
cMtx_XrotM(*calc_mtx, sp10);
|
|
MtxPosition(&sp30, &sp24);
|
|
|
|
temp_r31[0].x = temp_r31[1].x + sp24.x;
|
|
temp_r31[0].y = temp_r31[1].y + sp24.y;
|
|
temp_r31[0].z = temp_r31[1].z + sp24.z;
|
|
}
|
|
|
|
temp_r31 = sp1C->field_0x0;
|
|
cXyz* var_r29 = i_this->mHorseReins[param_3].getPos(0);
|
|
for (int i = 0; i < 16; i++, var_r29++, temp_r31++) {
|
|
*var_r29 = *temp_r31;
|
|
}
|
|
|
|
var_r29 = i_this->field_0x21e8.getPos(0);
|
|
var_r29[param_3] = i_this->field_0x1ff0[param_3].field_0x0[15];
|
|
}
|
|
|
|
/* 805FB620-805FB704 006CC0 00E4+00 1/1 0/0 0/0 .text cam_3d_morf__FP11b_gnd_classf */
|
|
static void cam_3d_morf(b_gnd_class* i_this, f32 i_scale) {
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.x, i_this->mDemoCamCenterTarget.x, i_scale, i_this->mDemoCamCenterSpd.x * i_this->field_0x2710.y);
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.y, i_this->mDemoCamCenterTarget.y, i_scale, i_this->mDemoCamCenterSpd.y * i_this->field_0x2710.y);
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.z, i_this->mDemoCamCenterTarget.z, i_scale, i_this->mDemoCamCenterSpd.z * i_this->field_0x2710.y);
|
|
|
|
cLib_addCalc2(&i_this->mDemoCamEye.x, i_this->mDemoCamEyeTarget.x, i_scale, i_this->mDemoCamEyeSpd.x * i_this->field_0x2710.y);
|
|
cLib_addCalc2(&i_this->mDemoCamEye.y, i_this->mDemoCamEyeTarget.y, i_scale, i_this->mDemoCamEyeSpd.y * i_this->field_0x2710.y);
|
|
cLib_addCalc2(&i_this->mDemoCamEye.z, i_this->mDemoCamEyeTarget.z, i_scale, i_this->mDemoCamEyeSpd.z * i_this->field_0x2710.y);
|
|
}
|
|
|
|
/* 805FB704-805FB7A4 006DA4 00A0+00 1/1 0/0 0/0 .text cam_spd_set__FP11b_gnd_class */
|
|
static void cam_spd_set(b_gnd_class* i_this) {
|
|
i_this->mDemoCamEyeSpd.x = fabsf(i_this->mDemoCamEyeTarget.x - i_this->mDemoCamEye.x);
|
|
i_this->mDemoCamEyeSpd.y = fabsf(i_this->mDemoCamEyeTarget.y - i_this->mDemoCamEye.y);
|
|
i_this->mDemoCamEyeSpd.z = fabsf(i_this->mDemoCamEyeTarget.z - i_this->mDemoCamEye.z);
|
|
|
|
i_this->mDemoCamCenterSpd.x = fabsf(i_this->mDemoCamCenterTarget.x - i_this->mDemoCamCenter.x);
|
|
i_this->mDemoCamCenterSpd.y = fabsf(i_this->mDemoCamCenterTarget.y - i_this->mDemoCamCenter.y);
|
|
i_this->mDemoCamCenterSpd.z = fabsf(i_this->mDemoCamCenterTarget.z - i_this->mDemoCamCenter.z);
|
|
|
|
i_this->field_0x2710.y = 0.0f;
|
|
}
|
|
|
|
/* 805FB7A4-805FDAE0 006E44 233C+00 2/1 0/0 0/0 .text demo_camera__FP11b_gnd_class */
|
|
static void demo_camera(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
daPy_py_c* player = (daPy_py_c *)dComIfGp_getPlayer(0);
|
|
camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0));
|
|
camera_class* camera0 = dComIfGp_getCamera(0);
|
|
mant_class* mant_p = (mant_class*)fopAcM_SearchByID(i_this->mMantChildID);
|
|
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
|
|
|
|
daHorse_c* horse;
|
|
if (i_this->mDemoCamMode != 0) {
|
|
// fakematch - dComIfGp_getHorseActor() isn't getting inlined for some reason
|
|
horse = (daHorse_c*)g_dComIfG_gameInfo.play.getPlayerPtr(1);
|
|
}
|
|
|
|
cXyz sp114;
|
|
cXyz sp108;
|
|
cXyz spFC;
|
|
cXyz spF0;
|
|
|
|
s8 sp8 = false;
|
|
switch (i_this->mDemoCamMode) {
|
|
case 0:
|
|
break;
|
|
case 30:
|
|
if (!a_this->eventInfo.checkCommandDemoAccrpt()) {
|
|
fopAcM_orderPotentialEvent(a_this, 2, 0xffff, 0);
|
|
a_this->eventInfo.onCondition(2);
|
|
return;
|
|
}
|
|
|
|
camera->mCamera.Stop();
|
|
i_this->mDemoCamMode = 31;
|
|
i_this->mDemoCamTimer = 0;
|
|
i_this->field_0x2710.x = 55.0f;
|
|
|
|
horse->changeOriginalDemo();
|
|
player->changeOriginalDemo();
|
|
camera->mCamera.SetTrimSize(3);
|
|
|
|
sp108 = a_this->current.pos;
|
|
sp108.x -= 5000.0f;
|
|
|
|
horse->setHorsePosAndAngle(&sp108, 1);
|
|
|
|
i_this->mDemoCamCenterTarget.set(0.0f, 0.0f, 0.0f);
|
|
i_this->mDemoCamCenterSpd.set(0.0f, 0.0f, 0.0f);
|
|
i_this->field_0xc44[9] = 0;
|
|
Z2GetAudioMgr()->setDemoName("force_start");
|
|
break;
|
|
case 31:
|
|
case 32:
|
|
case 33:
|
|
if (i_this->mDemoCamMode < 33) {
|
|
if (i_this->field_0xc44[9] == 0) {
|
|
i_this->field_0xc44[9] = (s16)(cM_rndF(10.0f) + 5.0f);
|
|
i_this->mDemoCamCenterSpd.x = cM_rndFX(40.0f);
|
|
i_this->mDemoCamCenterSpd.y = cM_rndFX(40.0f);
|
|
i_this->mDemoCamCenterSpd.z = cM_rndFX(40.0f);
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->mDemoCamCenterTarget.x, i_this->mDemoCamCenterSpd.x, 0.3f, 30.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamCenterTarget.y, i_this->mDemoCamCenterSpd.y, 0.3f, 30.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamCenterTarget.z, i_this->mDemoCamCenterSpd.z, 0.3f, 30.0f);
|
|
|
|
i_this->mDemoCamCenter.x = a_this->current.pos.x + i_this->mDemoCamCenterTarget.x;
|
|
i_this->mDemoCamCenter.y = a_this->current.pos.y + 300.0f + i_this->mDemoCamCenterTarget.y;
|
|
i_this->mDemoCamCenter.z = a_this->current.pos.z + i_this->mDemoCamCenterTarget.z;
|
|
} else {
|
|
i_this->mDemoCamCenter = a_this->eyePos;
|
|
}
|
|
|
|
cMtx_YrotS(*calc_mtx, a_this->current.angle.y);
|
|
if (i_this->mDemoCamMode == 31) {
|
|
sp114.x = 300.0f;
|
|
sp114.y = 300.0f;
|
|
sp114.z = -500.0f;
|
|
} else if (i_this->mDemoCamMode == 32) {
|
|
sp114.x = -300.0f;
|
|
sp114.y = 300.0f;
|
|
sp114.z = 400.0f;
|
|
} else if (i_this->mDemoCamMode == 33) {
|
|
sp114.x = i_this->field_0x2710.z;
|
|
sp114.y = 300.0f;
|
|
sp114.z = -1000.0f;
|
|
cLib_addCalc2(&i_this->field_0x2710.z, 100.0f, 0.1f, 5.0f);
|
|
}
|
|
|
|
MtxPosition(&sp114, &i_this->mDemoCamEye);
|
|
i_this->mDemoCamEye += a_this->current.pos;
|
|
|
|
if (i_this->mDemoCamMode == 33) {
|
|
if (i_this->mDemoCamTimer == 140) {
|
|
sp108.set(0.0f, 1100.0f, -2000.0f);
|
|
horse->setHorsePosAndAngle(&sp108, 0);
|
|
horse->changeDemoMode(1, 0);
|
|
player->changeDemoMode(93, 0, 0, 0);
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 160) {
|
|
i_this->mDemoCamMode = 35;
|
|
i_this->mDemoCamTimer = 0;
|
|
i_this->mMoveMode = 3;
|
|
Z2GetAudioMgr()->bgmStreamPrepare(0x2000063);
|
|
Z2GetAudioMgr()->bgmStreamPlay();
|
|
}
|
|
}
|
|
break;
|
|
case 34:
|
|
if (i_this->mDemoCamTimer == 0) {
|
|
i_this->field_0x2710.z = -400.0f;
|
|
horse->changeDemoMode(8, 0);
|
|
} else {
|
|
if (i_this->mDemoCamTimer == 1) {
|
|
i_this->mDemoCamCenter = player->current.pos;
|
|
i_this->mDemoCamEye.set(200.0f, 1318.0f, -1355.0f);
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.x, player->current.pos.x, 0.2f, 50.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.y, player->current.pos.y, 0.2f, 50.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.z, player->current.pos.z, 0.2f, 50.0f);
|
|
}
|
|
|
|
sp108.set(0.0f, 1100.0f, i_this->field_0x2710.z + -1500.0f);
|
|
horse->setHorsePosAndAngle(&sp108, 0);
|
|
cLib_addCalc0(&i_this->field_0x2710.z, 0.5f, 20.0f);
|
|
|
|
if (i_this->mDemoCamTimer == 55) {
|
|
i_this->mDemoCamMode = 33;
|
|
i_this->mDemoCamTimer = 0;
|
|
a_this->speedF = 50.0f;
|
|
i_this->field_0x2710.z = -300.0f;
|
|
a_this->current.pos.x = 0.0f;
|
|
sp108.set(0.0f, 1100.0f, -4000.0f);
|
|
horse->setHorsePosAndAngle(&sp108, 0);
|
|
}
|
|
break;
|
|
case 35:
|
|
i_this->mDemoCamCenter.set(-286.0f, 1364.0f, -1780.0f);
|
|
i_this->mDemoCamEye.set(389.0f, 1326.0f, -2356.0f);
|
|
|
|
if (i_this->mDemoCamTimer <= 1) {
|
|
i_this->field_0x2710.x = 25.0f;
|
|
} else {
|
|
cLib_addCalc2(&i_this->field_0x2710.x, 20.0f, 0.03f, 0.1f);
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 70) {
|
|
i_this->mDrawHorse = FALSE;
|
|
anm_init(i_this, B_GND_BCK_EGND_WAIT03, 0.0f, 2, 1.0f);
|
|
a_this->current.angle.y = a_this->shape_angle.y = i_this->mPlayerAngleY;
|
|
i_this->mHideSheath = FALSE;
|
|
i_this->field_0x770 = 1;
|
|
|
|
for (int i = 0; i < 2; i++) {
|
|
static u16 e_name[] = {0x8B9B, 0x8B9C};
|
|
dComIfGp_particle_set(e_name[i], &a_this->current.pos, &a_this->shape_angle, NULL);
|
|
}
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 80) {
|
|
i_this->mDemoCamMode = 40;
|
|
i_this->mDemoCamTimer = 0;
|
|
i_this->mDemoCamCenter.set(79.0f, 1305.0f, -1029.0f);
|
|
i_this->mDemoCamEye.set(86.0f, 1321.0f, -1277.0f);
|
|
i_this->field_0x2710.x = 55.0f;
|
|
sp108.set(0.0f, 1100.0f, -2000.0f);
|
|
horse->setHorsePosAndAngle(&sp108, -0x2000);
|
|
}
|
|
break;
|
|
case 40:
|
|
if (i_this->mDemoCamTimer != 110)
|
|
break;
|
|
|
|
i_this->mDemoCamMode = 41;
|
|
i_this->mDemoCamTimer = 0;
|
|
anm_init(i_this, B_GND_BCK_EGND_STANDUP, 1.0f, 0, 1.0f);
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_STANDUP, -1);
|
|
i_this->mGndEyeBtkNo = 1;
|
|
horse->changeDemoMode(1, 0);
|
|
player->changeDemoMode(1, 0, 0, 0);
|
|
case 41:
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
sp114.x = -50.0f;
|
|
sp114.y = 200.0f;
|
|
sp114.z = 300.0f;
|
|
MtxPosition(&sp114, &sp108);
|
|
i_this->mDemoCamEye.x = sp108.x + a_this->current.pos.x;
|
|
i_this->mDemoCamEye.z = sp108.z + a_this->current.pos.z;
|
|
spFC.y = a_this->current.pos.y + ((a_this->eyePos.y - a_this->current.pos.y) * 0.55f);
|
|
|
|
i_this->mDemoCamCenter.x = a_this->current.pos.x;
|
|
i_this->mDemoCamCenter.z = a_this->current.pos.z;
|
|
spF0.y = a_this->eyePos.y - 50.0f;
|
|
|
|
if (i_this->mDemoCamTimer == 0) {
|
|
i_this->mDemoCamCenter.y = spF0.y;
|
|
i_this->mDemoCamEye.y = spFC.y;
|
|
} else {
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.y, spF0.y, 0.1f, 10.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamEye.y, spFC.y, 0.1f, 10.0f);
|
|
}
|
|
|
|
if (i_this->mAnmID == B_GND_BCK_EGND_STANDUP && i_this->mpModelMorf->isStop()) {
|
|
anm_init(i_this, B_GND_BCK_EGND_LAUGH, 0.0f, 2, 1.0f);
|
|
i_this->mGndEyeBtkNo = 2;
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer != 250) {
|
|
break;
|
|
}
|
|
|
|
i_this->mDemoCamMode = 42;
|
|
i_this->mDemoCamTimer = 0;
|
|
anm_init(i_this, B_GND_BCK_EGND_LOOK, 0.0f, 0, 1.0f);
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_LOOK, -1);
|
|
i_this->mGndEyeBtkNo = 3;
|
|
player->onForceHorseGetOff();
|
|
case 42:
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
sp114.x = 80.0f;
|
|
sp114.y = 280.0f;
|
|
sp114.z = 40.0f;
|
|
MtxPosition(&sp114, &i_this->mDemoCamEye);
|
|
|
|
i_this->mDemoCamEye += a_this->current.pos;
|
|
i_this->mDemoCamCenter.x = a_this->current.pos.x;
|
|
i_this->mDemoCamCenter.z = a_this->current.pos.z - 20.0f;
|
|
i_this->mDemoCamCenter.y = a_this->eyePos.y + 10.0f;
|
|
|
|
if (i_this->mDemoCamTimer < 70) {
|
|
i_this->field_0xc70 = 8;
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
anm_init(i_this, B_GND_BCK_EGND_SAYAOPEN, 0.0f, 0, 1.0f);
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_SAYAOPEN, -1);
|
|
i_this->mGndEyeBtkNo = 4;
|
|
i_this->mDemoCamMode = 43;
|
|
i_this->mDemoCamTimer = 0;
|
|
sp108.set(0.0f, 1100.0f, -1000.0f);
|
|
player->setPlayerPosAndAngle(&sp108, 1, 0);
|
|
|
|
mant_p->field_0x3969 = 1;
|
|
} else {
|
|
break;
|
|
}
|
|
case 43:
|
|
if (i_this->mpModelMorf->checkFrame(212.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_SAYAOPEN, 0, -1);
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer >= 10) {
|
|
if (i_this->mDemoCamTimer == 10) {
|
|
i_this->mMsgFlow.init(a_this, 3018, 0, NULL);
|
|
}
|
|
i_this->mMsgFlow.doFlow(a_this, NULL, 0);
|
|
}
|
|
|
|
if (i_this->mpModelMorf->getFrame() > 340.0f) {
|
|
cLib_addCalc2(&a_this->speedF, 4.3f, 1.0f, 0.7f);
|
|
mant_p->field_0x3969 = 3;
|
|
} else {
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
sp114.x = 20.0f;
|
|
sp114.y = 180.0f;
|
|
sp114.z = 260.0f;
|
|
MtxPosition(&sp114, &i_this->mDemoCamEye);
|
|
|
|
i_this->mDemoCamEye += a_this->current.pos;
|
|
i_this->mDemoCamCenter.x = a_this->current.pos.x;
|
|
i_this->mDemoCamCenter.z = a_this->current.pos.z - 20.0f;
|
|
i_this->mDemoCamCenter.y = a_this->eyePos.y - 50.0f;
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 211) {
|
|
i_this->field_0x770 = 0;
|
|
mant_p->field_0x395c = 0.9f;
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 215) {
|
|
i_this->field_0x2739 = 1;
|
|
i_this->mKankyoBlend = 0.0f;
|
|
kankyo->mThunderEff.field_0x2 = 1;
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 278) {
|
|
i_this->field_0x772 = 1;
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 390) {
|
|
anm_init(i_this, B_GND_BCK_EGND_WALK, 0.0f, 2, 1.0f);
|
|
i_this->mpModelMorf->setFrame(20.0f);
|
|
i_this->mDemoCamMode = 44;
|
|
i_this->mDemoCamTimer = 0;
|
|
i_this->mGndEyeBtkNo = 0;
|
|
i_this->mDemoCamCenter.set(792.0f, 1595.0f, 1160.0f);
|
|
i_this->mDemoCamEye.set(938.0f, 1675.0f, 1337.0f);
|
|
sp108.set(0.0f, 1100.0f, -500.0f);
|
|
player->setPlayerPosAndAngle(&sp108, 1, 0);
|
|
}
|
|
break;
|
|
case 44:
|
|
i_this->mMsgFlow.doFlow(a_this, NULL, 0);
|
|
|
|
if (i_this->mDemoCamTimer == 125) {
|
|
kankyo->mThunderEff.field_0x2 = 1;
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer >= 100) {
|
|
if (i_this->mDemoCamTimer == 100) {
|
|
anm_init(i_this, B_GND_BCK_EGND_WAIT01, 12.0f, 2, 1.0f);
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 135) {
|
|
i_this->mDemoCamMode = 45;
|
|
i_this->mDemoCamTimer = 0;
|
|
sp108.set(0.0f, 1100.0f, 0.0f);
|
|
fopAcM_create(PROC_OBJ_GB, 0xF0069600, &sp108, fopAcM_GetRoomNo(a_this), 0, 0, -1);
|
|
}
|
|
|
|
cLib_addCalc0(&a_this->speedF, 1.0f, 0.7f);
|
|
break;
|
|
}
|
|
|
|
cLib_addCalc2(&a_this->speedF, 4.3f, 1.0f, 0.7f);
|
|
break;
|
|
case 45:
|
|
if (i_this->mDemoCamTimer == 1) {
|
|
horse->changeDemoMode(9, 0);
|
|
i_this->mDemoCamCenter.set(-81.0f, 1391.0f, -2144.0f);
|
|
i_this->mDemoCamEye.set(37.0f, 1366.0f, -1865.0f);
|
|
i_this->mDemoCamCenterTarget.set(76.0f, 1352.0f, -1866.0f);
|
|
i_this->mDemoCamEyeTarget.set(129.0f, 1358.0f, -2165.0f);
|
|
cam_spd_set(i_this);
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 15) {
|
|
kankyo->mThunderEff.field_0x2 = 1;
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer >= 25) {
|
|
cam_3d_morf(i_this, 0.2f);
|
|
cLib_addCalc2(&i_this->field_0x2710.y, 0.07f, 1.0f, 0.002f);
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 120) {
|
|
i_this->mDemoCamMode = 46;
|
|
i_this->mDemoCamTimer = 200;
|
|
i_this->mDemoCamCenter.set(101.0f, 1206.0f, -582.0f);
|
|
i_this->mDemoCamEye.set(154.0f, 1199.0f, -819.0f);
|
|
}
|
|
break;
|
|
case 46:
|
|
cLib_addCalc2(&i_this->field_0x2710.x, 30.0f, 0.1f, 0.2f);
|
|
|
|
if (i_this->mDemoCamTimer >= 305) {
|
|
mant_p->field_0x3969 = 2;
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 255) {
|
|
daPy_getPlayerActorClass()->changeDemoMode(23, 1, 2, 0);
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 290) {
|
|
anm_init(i_this, B_GND_BCK_EGND_KAMAE, 3.0f, 0, 1.0f);
|
|
i_this->mGndEyeBtkNo = 5;
|
|
Z2GetAudioMgr()->bgmStart(Z2BGM_VS_GANON_04, 0, 0);
|
|
kankyo->wether = 3;
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 320) {
|
|
fopMsgM_messageSetDemo(1159); // Dark Lord GANONDORF
|
|
}
|
|
|
|
if (i_this->mAnmID == B_GND_BCK_EGND_KAMAE && i_this->mpModelMorf->isStop()) {
|
|
anm_init(i_this, B_GND_BCK_EGND_WAIT02, 3.0f, 2, 1.0f);
|
|
kankyo->mThunderEff.field_0x2 = 1;
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 410) {
|
|
i_this->mActionMode = ACTION_WAIT;
|
|
i_this->mMoveMode = 2;
|
|
i_this->field_0xc44[0] = cM_rndF(50.0f) + 30.0f;
|
|
i_this->field_0xc44[8] = 100;
|
|
|
|
sp8 = true;
|
|
dComIfGs_onOneZoneSwitch(15, -1);
|
|
dComIfGs_onSaveDunSwitch(1);
|
|
Z2GetAudioMgr()->setDemoName("force_end");
|
|
kankyo->wether = 1;
|
|
}
|
|
break;
|
|
case 50:
|
|
if (!a_this->eventInfo.checkCommandDemoAccrpt()) {
|
|
fopAcM_orderPotentialEvent(a_this, 2, 0xFFEF, 0);
|
|
a_this->eventInfo.onCondition(2);
|
|
return;
|
|
}
|
|
|
|
camera->mCamera.Stop();
|
|
i_this->mDemoCamMode = 51;
|
|
i_this->mDemoCamTimer = 0;
|
|
i_this->field_0x2710.x = 55.0f;
|
|
i_this->field_0x2720 = player->current.pos;
|
|
i_this->field_0x272c = player->shape_angle.y;
|
|
i_this->mTubazeriPushAmount = 0.0f;
|
|
i_this->mTubazeriPushValue = 0.0f;
|
|
|
|
daPy_getPlayerActorClass()->changeOriginalDemo();
|
|
daPy_getPlayerActorClass()->changeDemoMode(89, 0, 0, 0);
|
|
Z2GetAudioMgr()->changeBgmStatus(1);
|
|
case 51:
|
|
mant_p->field_0x3966 = 1;
|
|
i_this->field_0xc70 = 20;
|
|
|
|
if (i_this->mDemoCamTimer >= 5) {
|
|
dComIfGp_getVibration().StartQuake(VIBMODE_Q_POWER2, 1, cXyz(0.0f, 1.0f, 0.0f));
|
|
}
|
|
|
|
dComIfGp_setDoStatusForce(100, 4);
|
|
cMtx_YrotS(*calc_mtx, player->shape_angle.y);
|
|
sp114.x = 0.0f;
|
|
sp114.y = 0.0f;
|
|
sp114.z = i_this->mTubazeriPushAmount * 1.3f;
|
|
MtxPosition(&sp114, &sp108);
|
|
sp108 += i_this->field_0x2720;
|
|
sp108.y = player->current.pos.y;
|
|
player->setPlayerPosAndAngle(&sp108, i_this->field_0x272c, 0);
|
|
|
|
sp114.x = 0.0f;
|
|
sp114.y = 0.0f;
|
|
sp114.z = 135.0f;
|
|
MtxPosition(&sp114, &sp108);
|
|
a_this->current.pos.x = sp108.x + player->field_0x5f8.x;
|
|
a_this->current.pos.z = sp108.z + player->field_0x5f8.z;
|
|
a_this->current.angle.y = player->shape_angle.y + 0x8000;
|
|
|
|
spF0 = a_this->current.pos + ((*player->getViewerCurrentPosP() - a_this->current.pos) * 0.5f);
|
|
spF0.y += 150.0f;
|
|
|
|
sp114.x = 200.0f;
|
|
sp114.y = 0.0f;
|
|
sp114.z = 0.0f;
|
|
MtxPosition(&sp114, &spFC);
|
|
spFC += spF0;
|
|
|
|
if (i_this->mDemoCamTimer == 0) {
|
|
i_this->mDemoCamCenter = spF0;
|
|
i_this->mDemoCamEye = spFC;
|
|
|
|
cXyz spE4(2.0f, 2.0f, 2.0f);
|
|
dComIfGp_setHitMark(2, a_this, &spF0, NULL, &spE4, 0);
|
|
i_this->mGndSound.startCollisionSE(Z2SE_HIT_SWORD, 40);
|
|
} else {
|
|
MTXCopy(i_this->mpModelMorf->getModel()->getAnmMtx(33), *calc_mtx);
|
|
sp114.set(10.0f, 20.0f, 0.0f);
|
|
MtxPosition(&sp114, &sp108);
|
|
|
|
for (int i = 0; i < 2; i++) {
|
|
static u16 e_name[] = {0x8B98, 0x8B99};
|
|
i_this->field_0x2680[i] = dComIfGp_particle_set(i_this->field_0x2680[i], e_name[i], &sp108, NULL, NULL);
|
|
}
|
|
|
|
i_this->mGndSound.startCreatureExtraSoundLevel(Z2SE_EN_GND_TUBAZERI_EFF, 0 , -1);
|
|
|
|
if (i_this->field_0xc44[3] == 0) {
|
|
i_this->field_0xc44[3] = (s16)(cM_rndF(10.0f) + 3.0f);
|
|
i_this->mDemoCamCenterTarget.x = cM_rndFX(20.0f);
|
|
i_this->mDemoCamCenterTarget.y = cM_rndFX(20.0f);
|
|
i_this->mDemoCamCenterTarget.z = cM_rndFX(20.0f);
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.x, spF0.x + i_this->mDemoCamCenterTarget.x, 0.1f, 5.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.y, spF0.y + i_this->mDemoCamCenterTarget.y, 0.1f, 5.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.z, spF0.z + i_this->mDemoCamCenterTarget.z, 0.1f, 5.0f);
|
|
}
|
|
|
|
if ((int)mDoCPd_c::getTrigA(PAD_1) != 0) {
|
|
i_this->mTubazeriPushValue += 0.1f;
|
|
if (i_this->mTubazeriPushValue > 1.0f) {
|
|
i_this->mTubazeriPushValue = 1.0f;
|
|
}
|
|
} else {
|
|
i_this->mTubazeriPushValue -= 0.02f;
|
|
if (i_this->mTubazeriPushValue < -1.0f) {
|
|
i_this->mTubazeriPushValue = -1.0f;
|
|
}
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->mTubazeriPushAmount, i_this->mTubazeriPushValue * 50.0f, 0.1f, 2.0f);
|
|
if (i_this->mTubazeriPushAmount <= -49.9f) {
|
|
i_this->mDemoCamMode = 52;
|
|
i_this->mDemoCamTimer = 0;
|
|
|
|
anm_init(i_this, B_GND_BCK_EGND_TUBAZERI_WIN, 3.0f, 0, 1.0f);
|
|
daPy_getPlayerActorClass()->changeDemoMode(89, 4, 0, 0);
|
|
dComIfGp_getVibration().StopQuake(31);
|
|
Z2GetAudioMgr()->changeBgmStatus(2);
|
|
} else if (i_this->mTubazeriPushAmount >= 48.0f) {
|
|
i_this->mDemoCamMode = 55;
|
|
i_this->mDemoCamTimer = 0;
|
|
|
|
anm_init(i_this, B_GND_BCK_EGND_TUBAZERI_LOSE, 3.0f, 0, 1.0f);
|
|
daPy_getPlayerActorClass()->changeDemoMode(89, 3, 0, 0);
|
|
dComIfGp_getVibration().StopQuake(31);
|
|
Z2GetAudioMgr()->changeBgmStatus(3);
|
|
} else if (i_this->mTubazeriPushValue < -0.4f) {
|
|
i_this->mGndSound.startCreatureVoiceLevel(Z2SE_EN_GND_V_TUBAZERI_B, -1);
|
|
if (i_this->mAnmID != B_GND_BCK_EGND_TUBAZERI_B && i_this->field_0xc44[2] == 0) {
|
|
anm_init(i_this, B_GND_BCK_EGND_TUBAZERI_B, 3.0f, 2, 1.0f);
|
|
daPy_getPlayerActorClass()->changeDemoMode(89, 1, 0, 0);
|
|
i_this->field_0xc44[2] = 30;
|
|
Z2GetAudioMgr()->changeBgmStatus(4);
|
|
}
|
|
} else if (i_this->mTubazeriPushValue > 0.4f) {
|
|
i_this->mGndSound.startCreatureVoiceLevel(Z2SE_EN_GND_V_TUBAZERI_C, -1);
|
|
if (i_this->mAnmID != B_GND_BCK_EGND_TUBAZERI_C && i_this->field_0xc44[2] == 0) {
|
|
anm_init(i_this, B_GND_BCK_EGND_TUBAZERI_C, 3.0f, 2, 1.0f);
|
|
daPy_getPlayerActorClass()->changeDemoMode(89, 2, 0, 0);
|
|
i_this->field_0xc44[2] = 30;
|
|
Z2GetAudioMgr()->changeBgmStatus(5);
|
|
}
|
|
} else {
|
|
i_this->mGndSound.startCreatureVoiceLevel(Z2SE_EN_GND_V_TUBAZERI_A, -1);
|
|
if (i_this->mAnmID != B_GND_BCK_EGND_TUBAZERI_A && i_this->field_0xc44[2] == 0) {
|
|
anm_init(i_this, B_GND_BCK_EGND_TUBAZERI_A, 3.0f, 2, 1.0f);
|
|
daPy_getPlayerActorClass()->changeDemoMode(89, 0, 0, 0);
|
|
i_this->field_0xc44[2] = 30;
|
|
Z2GetAudioMgr()->changeBgmStatus(6);
|
|
}
|
|
}
|
|
break;
|
|
case 52:
|
|
i_this->field_0xc70 = 20;
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mActionMode = ACTION_ATTACK;
|
|
i_this->mMoveMode = 2;
|
|
i_this->mDemoCamMode = 53;
|
|
i_this->mDemoCamTimer = 0;
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 20) {
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
sp114.x = -200.0f;
|
|
sp114.y = 50.0f;
|
|
sp114.z = 500.0f;
|
|
MtxPosition(&sp114, &i_this->mDemoCamEye);
|
|
i_this->mDemoCamEye += a_this->current.pos;
|
|
i_this->mDemoCamCenter = player->current.pos;
|
|
i_this->mDemoCamCenter.y += 80.0f;
|
|
mant_p->field_0x395c = 1.2f;
|
|
}
|
|
break;
|
|
case 53:
|
|
i_this->field_0xc70 = 20;
|
|
if (i_this->mDemoCamTimer >= 20) {
|
|
spF0 = player->current.pos;
|
|
spF0.y += 80.0f;
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.x, spF0.x, 0.15f, 200.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.y, spF0.y, 0.15f, 200.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.z, spF0.z, 0.15f, 200.0f);
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 18) {
|
|
daPy_getPlayerActorClass()->setThrowDamage(a_this->shape_angle.y, 50.0f, 30.0f, 8, 1, 0);
|
|
daPy_getPlayerActorClass()->changeDemoMode(1, 0, 0, 0);
|
|
|
|
cXyz spD8(player->current.pos);
|
|
spD8.y += 150.0f;
|
|
dComIfGp_setHitMark(3, NULL, &spD8, &player->shape_angle, NULL, 0);
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 92) {
|
|
sp8 = TRUE;
|
|
}
|
|
break;
|
|
case 55:
|
|
i_this->field_0xc70 = 20;
|
|
if (i_this->mDemoCamTimer == 20) {
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
sp114.x = 200.0f;
|
|
sp114.y = 50.0f;
|
|
sp114.z = 500.0f;
|
|
MtxPosition(&sp114, &i_this->mDemoCamEye);
|
|
i_this->mDemoCamEye += a_this->current.pos;
|
|
i_this->mDemoCamCenter = player->current.pos;
|
|
i_this->mDemoCamCenter.y += 80.0f;
|
|
mant_p->field_0x395c = 1.2f;
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer >= 43) {
|
|
sp8 = true;
|
|
i_this->mActionMode = ACTION_JUMP;
|
|
i_this->mMoveMode = 5;
|
|
i_this->field_0xc44[0] = 50;
|
|
i_this->field_0xc7c = 1;
|
|
}
|
|
break;
|
|
case 60:
|
|
if (!a_this->eventInfo.checkCommandDemoAccrpt()) {
|
|
fopAcM_orderPotentialEvent(a_this, 2, 0xffff, 0);
|
|
a_this->eventInfo.onCondition(2);
|
|
return;
|
|
}
|
|
|
|
camera->mCamera.Stop();
|
|
i_this->mDemoCamMode = 61;
|
|
i_this->mDemoCamTimer = 0;
|
|
i_this->field_0x2710.x = 55.0f;
|
|
|
|
daPy_getPlayerActorClass()->changeOriginalDemo();
|
|
daPy_getPlayerActorClass()->changeDemoMode(90, 0, 0, 0);
|
|
sp108.set(0.0f, 1100.0f, 0.0f);
|
|
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp108, -0x2000, 0);
|
|
|
|
a_this->current.pos.set(0.0f, 1100.0f, 0.0f);
|
|
a_this->old.pos = a_this->current.pos;
|
|
a_this->shape_angle.y = -0x2000;
|
|
a_this->current.angle.y = -0x2000;
|
|
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
sp114.x = -300.0f;
|
|
sp114.y = 150.0f;
|
|
sp114.z = 200.0f;
|
|
MtxPosition(&sp114, &i_this->mDemoCamEye);
|
|
i_this->mDemoCamEye += a_this->current.pos;
|
|
i_this->mDemoCamCenter = a_this->current.pos;
|
|
case 61:
|
|
i_this->field_0xc70 = 20;
|
|
if (i_this->mDemoCamTimer >= 1) {
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.x, player->eyePos.x, 0.3f, 50.0f);
|
|
spF0.y = player->eyePos.y;
|
|
if (spF0.y > 1400.0f) {
|
|
spF0.y = 1400.0f;
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.y, spF0.y, 0.3f, 50.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.z, player->eyePos.z, 0.3f, 50.0f);
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 31) {
|
|
i_this->mDemoCamMode = 62;
|
|
i_this->mDemoCamTimer = 0;
|
|
anm_init(i_this, B_GND_BCK_EGND_TODOME_02, 0.0f, 0, 1.0f);
|
|
dComIfGp_getVibration().StartShock(VIBMODE_S_POWER7, 1, cXyz(0.0f, 1.0f, 0.0f));
|
|
fpcM_Search(s_objgbdel_sub, i_this);
|
|
i_this->field_0x2739 = 2;
|
|
Z2GetAudioMgr()->seMoveVolumeAll(0.0f, 0);
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_END, -1);
|
|
}
|
|
break;
|
|
case 62:
|
|
i_this->field_0xc70 = 20;
|
|
i_this->field_0x2710.x = 25.0f;
|
|
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
sp114.set(55.7f, 1146.0f, -151.0f);
|
|
MtxPosition(&sp114, &i_this->mDemoCamCenter);
|
|
sp114.set(-131.0f, 1146.0f, -156.0f);
|
|
MtxPosition(&sp114, &i_this->mDemoCamEye);
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
anm_init(i_this, B_GND_BCK_EGND_KURUSIMI, 10.0f, 2, 1.0f);
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 80) {
|
|
i_this->mDemoCamMode = 63;
|
|
i_this->mDemoCamTimer = 0;
|
|
Z2GetAudioMgr()->seMoveVolumeAll(1.0f, 37);
|
|
i_this->field_0x2739 = 3;
|
|
}
|
|
|
|
sp108.set(0.0f, 1100.0f, -2000.0f);
|
|
horse->setHorsePosAndAngle(&sp108, -0x2000);
|
|
break;
|
|
case 63:
|
|
cMtx_YrotS(*calc_mtx, i_this->shape_angle.y);
|
|
sp114.set(90.0f, 1250.0f, -57.0f);
|
|
MtxPosition(&sp114, &i_this->mDemoCamCenter);
|
|
sp114.set(-80.0f, 1188.0f, -106.0f);
|
|
MtxPosition(&sp114, &i_this->mDemoCamEye);
|
|
|
|
if (i_this->mDemoCamTimer == 80) {
|
|
i_this->mDemoCamMode = 64;
|
|
i_this->mDemoCamTimer = 0;
|
|
i_this->mDrawZelda = FALSE;
|
|
i_this->field_0x2739 = 4;
|
|
}
|
|
break;
|
|
case 64:
|
|
i_this->field_0xc70 = 20;
|
|
i_this->mDrawZelda = TRUE;
|
|
|
|
mDoMtx_stack_c::transS(0.0f, 1430.0f, -2000.0f);
|
|
mDoMtx_stack_c::YrotM(-0x2000);
|
|
i_this->mpZeldaModel->getModel()->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
|
|
i_this->mpZeldaBtk->play();
|
|
i_this->mpZeldaBtp->play();
|
|
i_this->mpZeldaModel->play(NULL, 0, 0);
|
|
i_this->mpZeldaModel->modelCalc();
|
|
|
|
i_this->mDemoCamCenter.set(25.0f, 1603.0f, -2033.0f);
|
|
i_this->mDemoCamEye.set(-70.0f, 1564.0f, -1884.0f);
|
|
|
|
if (i_this->mDemoCamTimer == 88) {
|
|
i_this->mDemoCamMode = 65;
|
|
i_this->mDemoCamTimer = 0;
|
|
i_this->field_0x271c = 3000;
|
|
i_this->field_0x2710.z = 1.0f;
|
|
i_this->field_0x2710.y = 0.0f;
|
|
i_this->field_0x2739 = 5;
|
|
}
|
|
break;
|
|
case 65:
|
|
i_this->field_0xc70 = 20;
|
|
i_this->mDemoCamCenter = a_this->eyePos;
|
|
i_this->mDemoCamCenter.z += -5.0f;
|
|
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y + i_this->field_0x271c);
|
|
sp114.x = 0.0f;
|
|
sp114.y = i_this->field_0x2710.z * 150.0f;
|
|
sp114.z = i_this->field_0x2710.z * 50.0f;
|
|
MtxPosition(&sp114, &i_this->mDemoCamEye);
|
|
i_this->mDemoCamEye += i_this->mDemoCamCenter;
|
|
|
|
if (i_this->mDemoCamTimer > 80) {
|
|
cLib_addCalc2(&i_this->field_0x2710.y, 1.0f, 1.0f, 0.05f);
|
|
i_this->field_0x271c += (int)(i_this->field_0x2710.y * 200.0f);
|
|
cLib_addCalc2(&i_this->field_0x2710.z, 500.0f, 1.0f, i_this->field_0x2710.y * 0.5f);
|
|
|
|
if (i_this->mDemoCamTimer == 150) {
|
|
daPy_getPlayerActorClass()->changeDemoMode(16, 0, 0, 0);
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 230) {
|
|
mDoGph_gInf_c::fadeOut(0.01f, g_blackColor);
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 330) {
|
|
dStage_changeScene(0, 0.0f, 0, fopAcM_GetRoomNo(a_this), 0, -1);
|
|
}
|
|
}
|
|
break;
|
|
case 90:
|
|
if (!a_this->eventInfo.checkCommandDemoAccrpt()) {
|
|
fopAcM_orderPotentialEvent(a_this, 2, 0xffff, 0);
|
|
a_this->eventInfo.onCondition(2);
|
|
return;
|
|
}
|
|
|
|
camera->mCamera.Stop();
|
|
i_this->mDemoCamMode = 91;
|
|
i_this->mDemoCamTimer = 0;
|
|
i_this->field_0x2710.x = 55.0f;
|
|
|
|
daPy_getPlayerActorClass()->changeOriginalDemo();
|
|
horse->changeOriginalDemo();
|
|
|
|
i_this->mDemoCamCenter = player->current.pos;
|
|
i_this->mDemoCamEye = player->current.pos;
|
|
i_this->mDemoCamEye.x += 100.0f;
|
|
break;
|
|
case 91:
|
|
sp108.set(0.0f, 1100.0f, -2000.0f);
|
|
horse->setHorsePosAndAngle(&sp108, -0x2000);
|
|
|
|
if (i_this->mDemoCamTimer == 2) {
|
|
player->onForceHorseGetOff();
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 5) {
|
|
i_this->mDemoCamMode = 92;
|
|
i_this->mDemoCamTimer = 0;
|
|
}
|
|
break;
|
|
case 92:
|
|
if (i_this->mDemoCamTimer == 1) {
|
|
sp108.set(0.0f, 1100.0f, 0.0f);
|
|
fopAcM_create(PROC_OBJ_GB, 0xF0069600, &sp108, fopAcM_GetRoomNo(a_this), NULL, NULL, -1);
|
|
}
|
|
|
|
if (i_this->mDemoCamTimer == 5) {
|
|
sp108.set(600.0f, 1100.0f, 0.0f);
|
|
player->setPlayerPosAndAngle(&sp108, -0x4802, 0);
|
|
a_this->current.pos.set(-600.0f, 1100.0f, 0.0f);
|
|
a_this->old.pos = a_this->current.pos;
|
|
a_this->current.angle.y = 0x37FE;
|
|
a_this->shape_angle.y = 0x37FE;
|
|
sp8 = TRUE;
|
|
}
|
|
break;
|
|
case 95:
|
|
if (!a_this->eventInfo.checkCommandDemoAccrpt()) {
|
|
fopAcM_orderPotentialEvent(a_this, 2, 0xffff, 0);
|
|
a_this->eventInfo.onCondition(2);
|
|
return;
|
|
}
|
|
|
|
i_this->mDemoCamMode = 96;
|
|
i_this->mDemoCamTimer = 0;
|
|
|
|
daPy_getPlayerActorClass()->changeOriginalDemo();
|
|
horse->changeOriginalDemo();
|
|
|
|
sp108.set(0.0f, 1100.0f, -2000.0f);
|
|
horse->setHorsePosAndAngle(&sp108, -0x2000);
|
|
|
|
sp108.set(600.0f, 1100.0f, 0.0f);
|
|
player->setPlayerPosAndAngle(&sp108, -0x4802, 0);
|
|
a_this->current.pos.set(-600.0f, 1100.0f, 0.0f);
|
|
|
|
a_this->old.pos = a_this->current.pos;
|
|
a_this->current.angle.y = 0x37FE;
|
|
a_this->shape_angle.y = 0x37FE;
|
|
|
|
sp108.set(0.0f, 1100.0f, 0.0f);
|
|
fopAcM_create(PROC_OBJ_GB, 0xF0069600, &sp108, fopAcM_GetRoomNo(a_this), NULL, NULL, -1);
|
|
break;
|
|
case 96:
|
|
i_this->mDemoCamTimer++;
|
|
if (i_this->mDemoCamTimer == 2) {
|
|
dComIfGp_event_reset();
|
|
sp8 = TRUE;
|
|
break;
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (sp8) {
|
|
if (sp8 == 1) {
|
|
cMtx_YrotS(*calc_mtx, player->shape_angle.y);
|
|
sp114.x = 0.0f;
|
|
sp114.y = 100.0f;
|
|
sp114.z = -250.0f;
|
|
MtxPosition(&sp114, &i_this->mDemoCamEye);
|
|
i_this->mDemoCamEye += player->current.pos;
|
|
i_this->mDemoCamCenter = player->current.pos;
|
|
i_this->mDemoCamCenter.y += 120.0f;
|
|
}
|
|
|
|
camera->mCamera.Reset(i_this->mDemoCamCenter, i_this->mDemoCamEye);
|
|
camera->mCamera.Start();
|
|
camera->mCamera.SetTrimSize(0);
|
|
dComIfGp_event_reset();
|
|
daPy_getPlayerActorClass()->cancelOriginalDemo();
|
|
i_this->mDemoCamMode = 0;
|
|
}
|
|
|
|
if (i_this->mDemoCamMode > 0) {
|
|
cXyz center;
|
|
cXyz eye;
|
|
center = i_this->mDemoCamCenter;
|
|
eye = i_this->mDemoCamEye;
|
|
camera->mCamera.Set(center, eye, i_this->field_0x2710.x, 0);
|
|
|
|
i_this->mDemoCamTimer++;
|
|
if (i_this->mDemoCamTimer > 10000) {
|
|
i_this->mDemoCamTimer = 10000;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 805FDAE0-805FEC58 009180 1178+00 1/1 0/0 0/0 .text anm_se_set__FP11b_gnd_class */
|
|
static void anm_se_set(b_gnd_class* i_this) {
|
|
if (i_this->mAnmID == B_GND_BCK_EGND_RSPUR && i_this->mpModelMorf->checkFrame(15.0f) ||
|
|
i_this->mAnmID == B_GND_BCK_EGND_RRETURN && i_this->mpModelMorf->checkFrame(86.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_SPUR, -1);
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_RBRAKE && i_this->mpModelMorf->checkFrame(1.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_BRAKE, -1);
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_RATTACK01_A && i_this->mpModelMorf->checkFrame(1.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_ATTACK01A, -1);
|
|
} else if ((i_this->mAnmID == B_GND_BCK_EGND_RATTACK01_B || i_this->mAnmID == B_GND_BCK_EGND_RATTACK01_C) && i_this->mpModelMorf->checkFrame(1.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_ATTACK01B, -1);
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_RATTACK02_A && i_this->mpModelMorf->checkFrame(21.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_ATTACK02A, -1);
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_RJUMP_START && i_this->mpModelMorf->checkFrame(1.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_JUMP_START, -1);
|
|
} else if ((i_this->mAnmID == B_GND_BCK_EGND_RDAMEGE02L || i_this->mAnmID == B_GND_BCK_EGND_RDAMEGE02R) && i_this->mpModelMorf->checkFrame(1.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_DAMAGE02, -1);
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_RRETURN && i_this->mpModelMorf->checkFrame(1.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_RETURN, -1);
|
|
}
|
|
|
|
if (i_this->mAnmID == B_GND_BCK_EGND_WALK && (i_this->mpModelMorf->checkFrame(1.0f) || i_this->mpModelMorf->checkFrame(26.0f))) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_FOOTNOTE, 0, -1);
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_CHOUHATU && i_this->mpModelMorf->checkFrame(25.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_CHOUHATU, -1);
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_ATTACKA) {
|
|
if (i_this->mpModelMorf->checkFrame(15.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_ATTACKA, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(17.0f)) {
|
|
i_this->mGndSound.startCreatureExtraSound(Z2SE_EN_GND_ATTACKA, 0, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(21.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_MANTEAU, 0, -1);
|
|
}
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_ATTACKB) {
|
|
if (i_this->mpModelMorf->checkFrame(14.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_ATTACKB, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(16.5f)) {
|
|
i_this->mGndSound.startCreatureExtraSound(Z2SE_EN_GND_ATTACKB, 0, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(21.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_MANTEAU, 0, -1);
|
|
}
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_ATTACKC_A) {
|
|
if (i_this->mpModelMorf->checkFrame(1.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_ATTACKC_A, -1);
|
|
i_this->mGndSound.startCreatureExtraSound(Z2SE_EN_GND_ATTACKC_A, 0, -1);
|
|
}
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_ATTACKC_B && (i_this->mpModelMorf->checkFrame(2.0f) || i_this->mpModelMorf->checkFrame(9.5f))) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_FOOTNOTE, 0, -1);
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_ATTACKC_C) {
|
|
if (i_this->mpModelMorf->checkFrame(1.0f) || i_this->mpModelMorf->checkFrame(5.0f) ||
|
|
i_this->mpModelMorf->checkFrame(7.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_FOOTNOTE, 0, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(13.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_ATTACKC_C, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(19.0f)) {
|
|
i_this->mGndSound.startCreatureExtraSound(Z2SE_EN_GND_ATTACKC_C, 0, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(21.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_MANTEAU, 0, -1);
|
|
}
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_ATTACKD && i_this->mpModelMorf->checkFrame(3.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_ATTACKD, -1);
|
|
i_this->mGndSound.startCreatureExtraSound(Z2SE_EN_GND_ATTACKD, 0, -1);
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_ATTACKE_A && i_this->mpModelMorf->checkFrame(1.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_ATTACKE_A, -1);
|
|
i_this->mGndSound.startCreatureExtraSound(Z2SE_EN_GND_ATTACKE_A, 0, -1);
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_ATTACKE_B) {
|
|
if (i_this->mpModelMorf->checkFrame(2.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_FN_SLIDE, 0, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(8.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_ATTACKE_B, -1);
|
|
i_this->mGndSound.startCreatureExtraSound(Z2SE_EN_GND_ATTACKE_B, 0, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(21.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_MANTEAU, 0, -1);
|
|
}
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_ATTACKE_C2) {
|
|
if (i_this->mpModelMorf->checkFrame(8.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_FN_SLIDE, 0, -1);
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_ATTACKE_C2, -1);
|
|
i_this->mGndSound.startCreatureExtraSound(Z2SE_EN_GND_ATTACKE_C2, 0, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(17.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_MANTEAU, 0, -1);
|
|
}
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_ATTACKF) {
|
|
if (i_this->mpModelMorf->checkFrame(11.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_ATTACK_F, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(13.0f)) {
|
|
i_this->mGndSound.startCreatureExtraSound(Z2SE_EN_GND_ATTACK_F, 0, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(19.0f) || i_this->mpModelMorf->checkFrame(28.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_FN_SLIDE, 0, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(31.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_MANTEAU, 0, -1);
|
|
}
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_ATTACKG) {
|
|
if (i_this->mpModelMorf->checkFrame(17.0f)) {
|
|
i_this->mGndSound.startCreatureExtraSound(Z2SE_EN_GND_ATTACK_G1, 0, -1);
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_ATTACK_G1, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(32.0f)) {
|
|
i_this->mGndSound.startCreatureExtraSound(Z2SE_EN_GND_ATTACK_G2, 0, -1);
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_ATTACK_G2, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(26.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_MANTEAU, 0, -1);
|
|
}
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_JUMP_A) {
|
|
if (i_this->mpModelMorf->checkFrame(8.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_JUMP, 0, -1);
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_JUMP, -1);
|
|
}
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_SIDEJUMP_RA || i_this->mAnmID == B_GND_BCK_EGND_SIDEJUMP_LA) {
|
|
if (i_this->mpModelMorf->checkFrame(3.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_JUMP, 0, -1);
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_JUMP, -1);
|
|
}
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_TUBAZERI_WIN && i_this->mpModelMorf->checkFrame(14.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_TUBAZERI_WIN, -1);
|
|
i_this->mGndSound.startCreatureExtraSound(Z2SE_EN_GND_TUBAZERI_PUSH, 0, -1);
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_TUBAZERI_LOSE) {
|
|
if (i_this->mpModelMorf->checkFrame(12.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_TUBAZERI_LOSE, -1);
|
|
i_this->mGndSound.startCreatureExtraSound(Z2SE_EN_GND_TUBAZERI_PUSH, 0, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(18.0f) ||
|
|
i_this->mpModelMorf->checkFrame(24.0f) ||
|
|
i_this->mpModelMorf->checkFrame(31.0f) ||
|
|
i_this->mpModelMorf->checkFrame(55.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_FOOTNOTE, 0, -1);
|
|
}
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_DOWN && i_this->mpModelMorf->checkFrame(1.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_DAMAGE_DOWN, -1);
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_DOWNWAIT && i_this->mpModelMorf->checkFrame(1.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_DOWNWAIT, -1);
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_DOWNUP) {
|
|
if (i_this->mpModelMorf->checkFrame(12.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_DOWNUP, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(27.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_LAND, 0, -1);
|
|
}
|
|
} else if (i_this->mAnmID == B_GND_BCK_EGND_DOWNB) {
|
|
if (i_this->mpModelMorf->checkFrame(1.0f)) {
|
|
i_this->mGndSound.startCreatureVoice(Z2SE_EN_GND_V_DOWNB, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(17.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_LAND, 0, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(55.0f)) {
|
|
i_this->mGndSound.startCreatureSound(Z2SE_EN_GND_MANTEAU, 0, -1);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 805FEC58-806009F8 00A2F8 1DA0+00 2/1 0/0 0/0 .text daB_GND_Execute__FP11b_gnd_class */
|
|
static int daB_GND_Execute(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
cXyz sp118;
|
|
cXyz sp10C;
|
|
cXyz sp100;
|
|
|
|
if (i_this->mDemoCamMode == 0 && !player->checkElecDamage() && dComIfGp_event_runCheck()) {
|
|
return 1;
|
|
}
|
|
|
|
if (i_this->mNoDrawTimer != 0) {
|
|
i_this->mNoDrawTimer--;
|
|
if (i_this->mNoDrawTimer == 0) {
|
|
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
|
|
kankyo->wether = 1;
|
|
|
|
i_this->mActionMode = ACTION_WAIT;
|
|
i_this->mMoveMode = 0;
|
|
i_this->mDrawHorse = FALSE;
|
|
a_this->speedF = 0.0f;
|
|
|
|
mant_class* mant_p = (mant_class*)fopAcM_SearchByID(i_this->mMantChildID);
|
|
mant_p->field_0x3969 = 1;
|
|
|
|
h_anm_init(i_this, B_HG_BCK_HG_DOWN, 3.0f, 0, 1.0f);
|
|
|
|
i_this->mDemoCamMode = 95;
|
|
|
|
fpcM_Search(s_fkdel_sub, i_this);
|
|
a_this->health = 100;
|
|
i_this->field_0x1e0a = 0;
|
|
|
|
Z2GetAudioMgr()->bgmStart(Z2BGM_VS_GANON_04, 0, 0);
|
|
dComIfGs_onOneZoneSwitch(15, -1);
|
|
} else {
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
if (dComIfGp_event_runCheck()) {
|
|
if (fopAcM_getTalkEventPartner(daPy_getLinkPlayerActorClass()) == (fopAc_ac_c*)daPy_py_c::getMidnaActor()) {
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
i_this->mCounter++;
|
|
|
|
for (int i = 0; i < 10; i++) {
|
|
if (i_this->field_0xc44[i] != 0) {
|
|
i_this->field_0xc44[i]--;
|
|
}
|
|
}
|
|
|
|
if (i_this->mDamageInvulnerabilityTimer != 0) {
|
|
i_this->mDamageInvulnerabilityTimer--;
|
|
}
|
|
|
|
if (i_this->field_0xc5a != 0) {
|
|
i_this->field_0xc5a--;
|
|
}
|
|
|
|
if (i_this->field_0xc72 != 0) {
|
|
i_this->field_0xc72--;
|
|
}
|
|
|
|
action(i_this);
|
|
demo_camera(i_this);
|
|
|
|
if (i_this->mDrawHorse) {
|
|
h_damage_check(i_this);
|
|
i_this->mGakeChkType = gake_check(i_this);
|
|
|
|
if (a_this->speed.y <= 0.0f && i_this->mAcch.ChkGroundHit()) {
|
|
dBgS_GndChk sp124;
|
|
Vec spF4;
|
|
cXyz spE8;
|
|
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
sp118.x = 0.0f;
|
|
sp118.y = 200.0f;
|
|
sp118.z = 200.0f;
|
|
MtxPosition(&sp118, &sp10C);
|
|
sp10C += a_this->current.pos;
|
|
|
|
sp118.z = 0.0f;
|
|
MtxPosition(&sp118, &spE8);
|
|
spE8 += a_this->current.pos;
|
|
|
|
spF4.x = sp10C.x;
|
|
spF4.y = sp10C.y;
|
|
spF4.z = sp10C.z;
|
|
sp124.SetPos(&spF4);
|
|
sp10C.y = dComIfG_Bgsp().GroundCross(&sp124);
|
|
|
|
spF4.x = spE8.x;
|
|
spF4.y = spE8.y;
|
|
spF4.z = spE8.z;
|
|
sp124.SetPos(&spF4);
|
|
spE8.y = dComIfG_Bgsp().GroundCross(&sp124);
|
|
|
|
if (fabsf(sp10C.y - spE8.y) <= 200.0f) {
|
|
a_this->current.angle.x = -cM_atan2s(sp10C.y - spE8.y, 200.0f);
|
|
}
|
|
|
|
a_this->speed.y = -20.0f;
|
|
}
|
|
} else {
|
|
damage_check(i_this);
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&a_this->shape_angle.x, a_this->current.angle.x, 2, 0x1000);
|
|
cLib_addCalcAngleS2(&a_this->shape_angle.z, a_this->current.angle.z, 2, 0x1000);
|
|
a_this->gravity = -5.0f;
|
|
|
|
cMtx_YrotS(*calc_mtx, a_this->current.angle.y);
|
|
sp118.x = 0.0f;
|
|
sp118.y = 0.0f;
|
|
sp118.z = a_this->speedF;
|
|
MtxPosition(&sp118, &sp10C);
|
|
|
|
a_this->speed.x = sp10C.x;
|
|
a_this->speed.z = sp10C.z;
|
|
|
|
a_this->current.pos += a_this->speed;
|
|
|
|
a_this->speed.y += a_this->gravity;
|
|
if (a_this->speed.y < -100.0f) {
|
|
a_this->speed.y = -100.0f;
|
|
}
|
|
|
|
if (i_this->field_0xeb0 > 0.1f) {
|
|
sp118.x = 0.0f;
|
|
sp118.y = 0.0f;
|
|
sp118.z = -i_this->field_0xeb0;
|
|
cMtx_YrotS(*calc_mtx, i_this->field_0xeac);
|
|
MtxPosition(&sp118, &sp10C);
|
|
a_this->current.pos += sp10C;
|
|
cLib_addCalc0(&i_this->field_0xeb0, 1.0f, 7.5f);
|
|
}
|
|
|
|
if (i_this->mDrawHorse) {
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
sp118.set(0.0f, 0.0f, 150.0f);
|
|
MtxPosition(&sp118, &sp10C);
|
|
|
|
a_this->current.pos += sp10C;
|
|
a_this->old.pos += sp10C;
|
|
i_this->mAcch.CrrPos(dComIfG_Bgsp());
|
|
|
|
a_this->current.pos -= sp10C;
|
|
a_this->old.pos -= sp10C;
|
|
|
|
i_this->field_0xeb4 = a_this->current.pos;
|
|
i_this->field_0xec0 = a_this->shape_angle;
|
|
} else {
|
|
i_this->mAcch.CrrPos(dComIfG_Bgsp());
|
|
}
|
|
|
|
J3DModel* sp6C;
|
|
if (i_this->mDrawHorse) {
|
|
mDoMtx_stack_c::transS(i_this->field_0xeb4.x, i_this->field_0xeb4.y, i_this->field_0xeb4.z);
|
|
mDoMtx_stack_c::YrotM(i_this->field_0xec0.y);
|
|
mDoMtx_stack_c::XrotM(i_this->field_0xec0.x);
|
|
mDoMtx_stack_c::ZrotM(i_this->field_0xec0.z + i_this->mHorseLegRot);
|
|
|
|
cLib_addCalcAngleS2(&i_this->mHorseLegRot, 0, 8, 0x100);
|
|
|
|
mDoMtx_stack_c::scaleM(l_HIO.model_size * a_this->scale.x, l_HIO.model_size * a_this->scale.x, l_HIO.model_size * a_this->scale.x);
|
|
sp6C = i_this->mpHorseMorf->getModel();
|
|
sp6C->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
|
|
u32 sp68;
|
|
if (i_this->mAcch.GetGroundH() != -G_CM3D_F_INF) {
|
|
if (i_this->mAcch.ChkWaterHit() && i_this->mAcch.m_wtr.GetHeight() > a_this->current.pos.y) {
|
|
sp68 = dKy_pol_sound_get(&i_this->mAcch.m_wtr);
|
|
} else if (i_this->mAcch.ChkGroundHit()) {
|
|
sp68 = dKy_pol_sound_get(&i_this->mAcch.m_gnd);
|
|
} else {
|
|
sp68 = 0;
|
|
}
|
|
} else {
|
|
sp68 = 0;
|
|
}
|
|
|
|
i_this->mpHorseMorf->play(sp68, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)));
|
|
i_this->mpHorseMorf->modelCalc();
|
|
MTXCopy(sp6C->getAnmMtx(2), *calc_mtx);
|
|
|
|
sp118.set(70.0f, 60.0f, 0.0f);
|
|
MtxPosition(&sp118, &sp10C);
|
|
i_this->mHorseBodySph[0].SetC(sp10C);
|
|
i_this->mHorseBodySph[0].SetR(100.0f);
|
|
|
|
MTXCopy(sp6C->getAnmMtx(26), *calc_mtx);
|
|
|
|
sp118.set(10.0f, -30.0f, 0.0f);
|
|
MtxPosition(&sp118, &i_this->field_0x1fb8);
|
|
|
|
i_this->mHorseBodySph[1].SetC(i_this->field_0x1fb8);
|
|
i_this->mHorseBodySph[1].SetR(90.0f);
|
|
|
|
i_this->mHorseBodySph[0].OffAtSetBit();
|
|
i_this->mHorseBodySph[1].OffAtSetBit();
|
|
|
|
if (i_this->field_0x1e08 != 0) {
|
|
i_this->mHorseBodySph[0].OffTgSetBit();
|
|
i_this->mHorseBodySph[1].OffTgSetBit();
|
|
} else {
|
|
i_this->mHorseBodySph[0].OnTgSetBit();
|
|
i_this->mHorseBodySph[1].OnTgSetBit();
|
|
}
|
|
|
|
dComIfG_Ccsp()->Set(&i_this->mHorseBodySph[0]);
|
|
dComIfG_Ccsp()->Set(&i_this->mHorseBodySph[1]);
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
static int footJ[4] = {6, 10, 30, 34};
|
|
MTXCopy(sp6C->getAnmMtx(footJ[i]), *calc_mtx);
|
|
sp118.set(0.0f, 0.0f, 0.0f);
|
|
MtxPosition(&sp118, &sp10C);
|
|
|
|
i_this->mHorseFootSph[i].SetC(sp10C);
|
|
i_this->mHorseFootSph[i].SetR(40.0f);
|
|
|
|
if (i_this->field_0x1e08 == 0 && i < 2 && a_this->speedF > 10.0f) {
|
|
i_this->mHorseFootSph[i].OnAtSetBit();
|
|
} else {
|
|
i_this->mHorseFootSph[i].OffAtSetBit();
|
|
}
|
|
|
|
if (i_this->field_0x1e08 != 0) {
|
|
i_this->mHorseFootSph[i].OffTgSetBit();
|
|
} else {
|
|
i_this->mHorseFootSph[i].OnTgSetBit();
|
|
}
|
|
|
|
dComIfG_Ccsp()->Set(&i_this->mHorseFootSph[i]);
|
|
}
|
|
}
|
|
|
|
if (!i_this->mDrawHorse) {
|
|
MtxTrans(a_this->current.pos.x, a_this->current.pos.y, a_this->current.pos.z, 0);
|
|
cMtx_YrotM(*calc_mtx, a_this->shape_angle.y);
|
|
cMtx_XrotM(*calc_mtx, a_this->shape_angle.x);
|
|
cMtx_ZrotM(*calc_mtx, a_this->shape_angle.z);
|
|
} else {
|
|
MTXCopy(sp6C->getAnmMtx(21), *calc_mtx);
|
|
cMtx_ZrotM(*calc_mtx, -0x4000);
|
|
MtxTrans(0.0f, 55.0f, -30.0f, 1);
|
|
}
|
|
|
|
sp6C = i_this->mpModelMorf->getModel();
|
|
sp6C->setBaseTRMtx(*calc_mtx);
|
|
i_this->mpModelMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)));
|
|
|
|
if (i_this->mAnmID == B_GND_BCK_EGND_DEFENSE_C || i_this->mAnmID == B_GND_BCK_EGND_DEFENSE_D) {
|
|
cLib_addCalcAngleS2(&i_this->mGndShoulderLRotY, cM_ssin(i_this->mCounter * 4000) * 600.0f + -1200.0f, 1, 500);
|
|
|
|
if (i_this->field_0x1fc8 != 0) {
|
|
i_this->field_0x1fc8--;
|
|
i_this->mGndArmRRotX = i_this->field_0x1fc8 * (cM_ssin(i_this->mCounter * 0x5500)) * 90.0f;
|
|
}
|
|
} else {
|
|
cLib_addCalcAngleS2(&i_this->mGndShoulderLRotY, 0, 1, 100);
|
|
i_this->mGndArmRRotX = 0;
|
|
i_this->field_0x1fc8 = 0;
|
|
}
|
|
|
|
i_this->mpGndCoreBrk->play();
|
|
|
|
if (i_this->mGndEyeBtkNo == 0) {
|
|
i_this->mpGndEyeBtk[i_this->mGndEyeBtkNo]->setFrame(0.0f);
|
|
} else {
|
|
i_this->mpGndEyeBtk[i_this->mGndEyeBtkNo]->play();
|
|
}
|
|
|
|
i_this->mpGndEyeBtp->setFrame(i_this->field_0xc6c);
|
|
i_this->mpModelMorf->modelCalc();
|
|
|
|
if (!i_this->mHideSheath) {
|
|
if (i_this->field_0x772 != 0) {
|
|
i_this->field_0x772++;
|
|
MTXCopy(i_this->mpSheathModel->getBaseTRMtx(), *calc_mtx);
|
|
MtxTrans(10.0f, 0.0f, -5.0f, 1);
|
|
cMtx_YrotM(*calc_mtx, 800);
|
|
cMtx_XrotM(*calc_mtx, 0);
|
|
cMtx_ZrotM(*calc_mtx, 0);
|
|
|
|
if (i_this->field_0x772 > 20) {
|
|
i_this->mHideSheath = TRUE;
|
|
}
|
|
} else {
|
|
MTXCopy(sp6C->getAnmMtx(24), *calc_mtx);
|
|
}
|
|
|
|
i_this->mpSheathModel->setBaseTRMtx(*calc_mtx);
|
|
}
|
|
|
|
if (i_this->field_0x770 == 1) {
|
|
MtxTrans(81.81f, 2.54f, 2.9f, 1);
|
|
cMtx_XrotM(*calc_mtx, 10800);
|
|
cMtx_YrotM(*calc_mtx, 550);
|
|
cMtx_ZrotM(*calc_mtx, 20030);
|
|
i_this->mpSwordModel->setBaseTRMtx(*calc_mtx);
|
|
} else {
|
|
MTXCopy(sp6C->getAnmMtx(33), *calc_mtx);
|
|
i_this->mpSwordModel->setBaseTRMtx(*calc_mtx);
|
|
}
|
|
|
|
if (i_this->mSwordBlurAlpha >= 80) {
|
|
i_this->mSwordBlurType++;
|
|
if (i_this->mSwordBlurType > 1) {
|
|
i_this->mSwordBlurType = 1;
|
|
}
|
|
|
|
cMtx_YrotM(*calc_mtx, -0x4048);
|
|
cMtx_XrotM(*calc_mtx, 0x32DD);
|
|
cMtx_ZrotM(*calc_mtx, i_this->field_0xc28 + 0x4ECF);
|
|
MtxTrans(0.0f, 0.0f, -130.0f, 1);
|
|
i_this->mpSwordBlurModel[i_this->mSwordBlurType]->setBaseTRMtx(*calc_mtx);
|
|
MTXCopy(sp6C->getAnmMtx(33), *calc_mtx);
|
|
|
|
i_this->field_0xc28 = 0;
|
|
} else if (i_this->mSwordBlurAlpha > 10) {
|
|
i_this->mSwordBlurType = 1;
|
|
} else {
|
|
i_this->mSwordBlurType = -1;
|
|
i_this->mSwordBlurAlpha = 0;
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&i_this->mSwordBlurAlpha, 0, 1, 20);
|
|
|
|
if (i_this->field_0xc78 == 0) {
|
|
sp118.set(40.0f, 80.0f, 0.0f);
|
|
MtxPosition(&sp118, &sp10C);
|
|
i_this->field_0x269c = sp10C;
|
|
|
|
if (i_this->mDrawHorse) {
|
|
i_this->mAtSph.SetR(120.0f);
|
|
if (player->checkHorseRide()) {
|
|
i_this->mAtSph.SetAtSpl((dCcG_At_Spl)13);
|
|
} else {
|
|
i_this->mAtSph.SetAtSpl((dCcG_At_Spl)0);
|
|
}
|
|
} else {
|
|
i_this->mAtSph.SetR(100.0f);
|
|
i_this->mAtSph.SetAtSpl((dCcG_At_Spl)10);
|
|
}
|
|
} else if (i_this->field_0xc78 == 1) {
|
|
MTXCopy(sp6C->getAnmMtx(41), *calc_mtx);
|
|
sp118.set(0.0f, 0.0f, 0.0f);
|
|
MtxPosition(&sp118, &sp10C);
|
|
i_this->mAtSph.SetR(70.0f);
|
|
i_this->mAtSph.SetAtSpl((dCcG_At_Spl)10);
|
|
} else if (i_this->field_0xc78 == 2) {
|
|
MTXCopy(sp6C->getAnmMtx(19), *calc_mtx);
|
|
sp118.set(0.0f, 0.0f, 0.0f);
|
|
MtxPosition(&sp118, &sp10C);
|
|
i_this->mAtSph.SetR(70.0f);
|
|
i_this->mAtSph.SetAtSpl((dCcG_At_Spl)10);
|
|
} else {
|
|
sp118.set(40.0f, 130.0f, 0.0f);
|
|
MtxPosition(&sp118, &sp10C);
|
|
}
|
|
|
|
if (i_this->field_0xc77 == 0) {
|
|
sp10C.y -= 20000.0f;
|
|
} else {
|
|
if (i_this->field_0xc77 == 2) {
|
|
i_this->mAtSph.SetAtSpl((dCcG_At_Spl)11);
|
|
i_this->mAtSph.SetAtAtp(4);
|
|
} else {
|
|
i_this->mAtSph.SetAtAtp(2);
|
|
}
|
|
|
|
i_this->field_0xc78 = 0;
|
|
i_this->field_0xc77 = 0;
|
|
}
|
|
|
|
i_this->mAtSph.SetC(sp10C);
|
|
dComIfG_Ccsp()->Set(&i_this->mAtSph);
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
cMtx_XrotM(*calc_mtx, a_this->shape_angle.x);
|
|
|
|
sp118.set(0.0f, 130.0f, 0.0f);
|
|
MtxPosition(&sp118, &sp10C);
|
|
sp10C += i_this->current.pos;
|
|
|
|
if (i_this->field_0xc79 != 0) {
|
|
i_this->mDefSph.SetR(50.0f);
|
|
i_this->mDefSph.SetC(sp10C);
|
|
dComIfG_Ccsp()->Set(&i_this->mDefSph);
|
|
i_this->field_0xc79 = 0;
|
|
} else {
|
|
sp10C.y -= 13000.0f;
|
|
}
|
|
|
|
i_this->mDefSph.SetC(sp10C);
|
|
dComIfG_Ccsp()->Set(&i_this->mDefSph);
|
|
|
|
if (i_this->mDefSph.ChkTgHit()) {
|
|
def_se_set(&i_this->mGndSound, i_this->mDefSph.GetTgHitObj(), 40, NULL);
|
|
i_this->field_0x1fc8 = 7;
|
|
}
|
|
|
|
MTXCopy(sp6C->getAnmMtx(4), *calc_mtx);
|
|
sp118.set(0.0f, 0.0f, 0.0f);
|
|
MtxPosition(&sp118, &a_this->eyePos);
|
|
a_this->attention_info.position = a_this->eyePos;
|
|
|
|
a_this->attention_info.position.y += 50.0f;
|
|
|
|
f32 var_f29 = 50.0f;
|
|
if (i_this->mDrawHorse) {
|
|
var_f29 = 100.0f;
|
|
}
|
|
|
|
cXyz spDC;
|
|
if (i_this->mDamageInvulnerabilityTimer != 0) {
|
|
spDC.set(-20000.0f, 100000.0f, -13456.0f);
|
|
} else {
|
|
spDC.set(0.0f, 0.0f, 0.0f);
|
|
}
|
|
|
|
i_this->mGndSph[0].SetC(a_this->eyePos + spDC);
|
|
i_this->mGndSph[0].SetR(40.0f);
|
|
|
|
MTXCopy(sp6C->getAnmMtx(2), *calc_mtx);
|
|
MtxPosition(&sp118, &sp10C);
|
|
i_this->setDownPos(&sp10C);
|
|
|
|
i_this->mGndSph[1].SetC(sp10C + spDC);
|
|
i_this->mGndSph[1].SetR(var_f29);
|
|
|
|
MTXCopy(sp6C->getAnmMtx(1), *calc_mtx);
|
|
sp118.set(0.0f, 0.0f, 0.0f);
|
|
MtxPosition(&sp118, &sp10C);
|
|
|
|
i_this->mGndSph[2].SetC(sp10C + spDC);
|
|
i_this->mGndSph[2].SetR(var_f29);
|
|
|
|
for (int i = 0; i < 3; i++) {
|
|
if (i_this->mDrawHorse) {
|
|
if (i_this->field_0x1e08 != 0) {
|
|
i_this->mGndSph[i].SetTgType(2);
|
|
} else {
|
|
i_this->mGndSph[i].SetTgType(0x2000);
|
|
}
|
|
} else {
|
|
i_this->mGndSph[i].SetTgType(0x12002);
|
|
}
|
|
|
|
dComIfG_Ccsp()->Set(&i_this->mGndSph[i]);
|
|
}
|
|
|
|
MTXCopy(sp6C->getAnmMtx(37), mDoMtx_stack_c::get());
|
|
mDoMtx_stack_c::multVecZero(&i_this->field_0x26a8[0]);
|
|
|
|
MTXCopy(sp6C->getAnmMtx(42), mDoMtx_stack_c::get());
|
|
mDoMtx_stack_c::multVecZero(&i_this->field_0x26a8[1]);
|
|
|
|
sp118.set(0.0f, 0.0f, 0.0f);
|
|
MtxPosition(&sp118, &sp10C);
|
|
sp10C.y = a_this->current.pos.y;
|
|
|
|
i_this->mCoCyl.SetC(sp10C);
|
|
i_this->mCoCyl.SetR(50.0f);
|
|
i_this->mCoCyl.SetH(200.0f);
|
|
dComIfG_Ccsp()->Set(&i_this->mCoCyl);
|
|
|
|
static u16 b_id[6] = {0x8A37, 0x8A38, 0x8A39, 0x8A3A, 0x8A3B, 0x8C24};
|
|
static u16 b_id2[5] = {0x8A3D, 0x8A3E, 0x8A3F, 0x8A40, 0x8A41};
|
|
|
|
if (i_this->field_0x1e0f > 0) {
|
|
i_this->field_0x1e2c.startLevelSound(Z2SE_EN_GND_LIGHTBALL, 0, -1);
|
|
|
|
if (i_this->field_0x1e0f == 1) {
|
|
MTXCopy(sp6C->getAnmMtx(24), *calc_mtx);
|
|
sp118.set(0.0f, 0.0f, 0.0f);
|
|
MtxPosition(&sp118, &i_this->field_0x1e20);
|
|
cLib_addCalc2(&i_this->field_0x1e10, 1.0f, 1.0f, 0.02f);
|
|
} else {
|
|
i_this->field_0x1e0e++;
|
|
i_this->field_0x1e14 = i_this->field_0x1e20;
|
|
sp118 = a_this->current.pos;
|
|
sp118.y += 800.0f;
|
|
sp118 -= i_this->field_0x1e20;
|
|
|
|
if (i_this->field_0x1e0e > 10) {
|
|
cLib_addCalcAngleS2(&i_this->field_0x1e50.y,cM_atan2s(sp118.x, sp118.z), 4, 0x800);
|
|
cLib_addCalcAngleS2(&i_this->field_0x1e50.x, (s16)-cM_atan2s(sp118.y, JMAFastSqrt(sp118.x * sp118.x + sp118.z * sp118.z)), 4, 0x800);
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->field_0x1e4c, 100.0f, 1.0f, 2.0f);
|
|
cMtx_YrotS(*calc_mtx, i_this->field_0x1e50.y);
|
|
cMtx_XrotM(*calc_mtx, i_this->field_0x1e50.x);
|
|
sp118.x = 0.0f;
|
|
sp118.y = 0.0f;
|
|
sp118.z = i_this->field_0x1e4c;
|
|
MtxPosition(&sp118, &sp10C);
|
|
|
|
i_this->field_0x1e20 += sp10C;
|
|
i_this->field_0x1e20 += a_this->speed;
|
|
|
|
if (i_this->field_0x1e0e == 50) {
|
|
i_this->field_0x1e0f = -1;
|
|
i_this->field_0x1e2c.startSound(Z2SE_EN_GND_LIGHTBALL_SPLIT, 0, -1);
|
|
|
|
cMtx_YrotS(*calc_mtx, i_this->mPlayerAngleY);
|
|
sp118.y = -50.0f - cM_rndF(10.0f);
|
|
sp118.z = cM_rndF(20.0f);
|
|
|
|
for (int i = 0; i < 5; i++) {
|
|
i_this->field_0x1e56[i] = 1;
|
|
|
|
static f32 bun_xs[] = {-150.0f, -75.0f, 0.0f, 75.0f, 150.0f};
|
|
sp118.x = bun_xs[i];
|
|
MtxPosition(&sp118, &i_this->field_0x1ed4[i]);
|
|
i_this->mLightBallPos[i] = i_this->field_0x1e20;
|
|
i_this->field_0x1e98[i] = i_this->mLightBallPos[i];
|
|
}
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < 6; i++) {
|
|
i_this->field_0x25f0[i] = dComIfGp_particle_set(i_this->field_0x25f0[i], b_id[i], &i_this->field_0x1e20, NULL, NULL);
|
|
}
|
|
} else {
|
|
if (i_this->field_0x1e0f < 0) {
|
|
for (int i = 0; i < 6; i++) {
|
|
JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(i_this->field_0x25f0[i]);
|
|
if (emitter != NULL) {
|
|
emitter->deleteAllParticle();
|
|
dComIfGp_particle_levelEmitterOnEventMove(i_this->field_0x25f0[i]);
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < 5; i++) {
|
|
dComIfGp_particle_set(b_id2[i], &i_this->field_0x1e20, NULL, NULL);
|
|
}
|
|
|
|
i_this->field_0x1e0f = 0;
|
|
}
|
|
}
|
|
|
|
cXyz ball_eff_size(1.0f, 1.0f, 1.0f);
|
|
csXyz fk_angle(0, 0, 0);
|
|
for (int i = 0; i < 5; i++) {
|
|
if (i_this->field_0x1e56[i] == 1) {
|
|
i_this->mLightBallSound[i].startLevelSound(Z2SE_EN_GND_LIGHTBALL_SUB, 0, -1);
|
|
i_this->field_0x1e98[i] = i_this->mLightBallPos[i];
|
|
i_this->mLightBallPos[i] += i_this->field_0x1ed4[i];
|
|
|
|
for (int j = 0; j < 6; j++) {
|
|
i_this->field_0x2608[i][j] = dComIfGp_particle_set(i_this->field_0x2608[i][j], b_id[j], &i_this->mLightBallPos[i], NULL, &ball_eff_size);
|
|
}
|
|
|
|
if (ball_bg_check(i_this, i)) {
|
|
i_this->field_0x1e56[i] = 2;
|
|
|
|
for (int k = 0; k < 5; k++) {
|
|
dComIfGp_particle_set(b_id2[k], &i_this->mLightBallPos[i], NULL, &ball_eff_size);
|
|
}
|
|
|
|
sp118 = (player->current.pos - i_this->mLightBallPos[i]);
|
|
fk_angle.y = (s16)cM_atan2s(sp118.x, sp118.z);
|
|
|
|
fopAcM_create(PROC_E_FK, i | 0xFFFFFF00, &i_this->mLightBallPos[i], fopAcM_GetRoomNo(a_this), &fk_angle, NULL, -1);
|
|
i_this->mLightBallSound[i].startSound(Z2SE_EN_GND_LIGHTBALL_SUB_HIT, 0, -1);
|
|
}
|
|
} else if (i_this->field_0x1e56[i] == 2) {
|
|
i_this->field_0x1e56[i] = 0;
|
|
|
|
for (int j = 0; j < 6; j++) {
|
|
JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(i_this->field_0x2608[i][j]);
|
|
if (emitter != NULL) {
|
|
emitter->deleteAllParticle();
|
|
dComIfGp_particle_levelEmitterOnEventMove(i_this->field_0x2608[i][j]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
mant_class* mant_p = (mant_class*)fopAcM_SearchByID(i_this->mMantChildID);
|
|
if (mant_p != NULL) {
|
|
mant_p->current.pos = a_this->current.pos;
|
|
|
|
MTXCopy(sp6C->getAnmMtx(34), *calc_mtx);
|
|
sp118.set(10.0f, 5.0f, -17.0f);
|
|
MtxPosition(&sp118, &mant_p->field_0x3928[0]);
|
|
|
|
MTXCopy(sp6C->getAnmMtx(25), *calc_mtx);
|
|
sp118.set(10.0f, 5.0f, 17.0f);
|
|
MtxPosition(&sp118, &mant_p->field_0x3928[1]);
|
|
|
|
f32 var_f26 = 2.5f;
|
|
for (int i = 0; i < 6; i++) {
|
|
for (int j = 0; j < 6; j++) {
|
|
cXyz* sp30 = &mant_p->field_0x25a8[i * 2 + 1].field_0x0[j * 2];
|
|
cXyz* sp2C = &mant_p->field_0x25a8[i * 2 + 1].field_0x0[j * 2 + 1];
|
|
mDoMtx_stack_c::transS(sp30->x, sp30->y, sp30->z);
|
|
sp118 = *sp2C - *sp30;
|
|
|
|
f32 var_f28 = var_f26 + (f32)(j * 0.25f);
|
|
|
|
mDoMtx_stack_c::YrotM(cM_atan2s(sp118.x, sp118.z));
|
|
mDoMtx_stack_c::XrotM(-cM_atan2s(sp118.y, JMAFastSqrt(sp118.x * sp118.x + sp118.z * sp118.z)));
|
|
mDoMtx_stack_c::scaleM(var_f28, var_f28, var_f28);
|
|
i_this->mpMantShadowModel[i + j * 6]->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
}
|
|
}
|
|
|
|
if (i_this->mDrawHorse) {
|
|
i_this->field_0x1fd4 += i_this->field_0x1fd6;
|
|
|
|
cLib_addCalcAngleS2(&i_this->field_0x1fd6, (s16)(i_this->speedF * 50.0f + 1500.0f), 1, 60);
|
|
cLib_addCalc2(&i_this->field_0x1fd0, i_this->speedF * 1.5f, 1.0f, 0.9f);
|
|
|
|
sp6C = i_this->mpModelMorf->getModel();
|
|
J3DModel* horse_model = i_this->mpHorseMorf->getModel();
|
|
|
|
MTXCopy(horse_model->getAnmMtx(19), *calc_mtx);
|
|
MtxPush();
|
|
sp118.set(0.0f, 7.0f, -15.0f);
|
|
MtxPosition(&sp118, &sp10C);
|
|
himo_control1(i_this, &sp10C, 0, 0);
|
|
MtxPull();
|
|
|
|
sp118.set(0.0f, 7.0f, 15.0f);
|
|
MtxPosition(&sp118, &sp10C);
|
|
himo_control1(i_this, &sp10C, 1, 0);
|
|
|
|
MTXCopy(horse_model->getAnmMtx(21), *calc_mtx);
|
|
sp118.set(60.0f, 0.0f, 50.0f);
|
|
MtxPosition(&sp118, i_this->field_0x1fd8);
|
|
|
|
i_this->field_0x1fd8[1] = i_this->field_0x1fd8[0];
|
|
himo_control2(i_this, &i_this->field_0x1fd8[0], 0, 0);
|
|
himo_control2(i_this, &i_this->field_0x1fd8[1], 1, 0);
|
|
}
|
|
|
|
if (i_this->mDrawHorse) {
|
|
eff_set_h(i_this);
|
|
|
|
i_this->field_0x1e2c.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)));
|
|
|
|
for (int i = 0; i < 5; i++) {
|
|
i_this->mLightBallSound[i].framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)));
|
|
}
|
|
} else {
|
|
eff_set(i_this);
|
|
}
|
|
|
|
anm_se_set(i_this);
|
|
|
|
f32 target_blend = 1.0f;
|
|
f32 blend_step = 0.1f;
|
|
|
|
if (i_this->field_0x2739 == 0) {
|
|
target_blend = 0.0f;
|
|
dKy_custom_colset(0, 0, i_this->mKankyoBlend);
|
|
} else if (i_this->field_0x2739 == 1) {
|
|
blend_step = 0.05f;
|
|
dKy_custom_colset(0, 5, i_this->mKankyoBlend);
|
|
} else if (i_this->field_0x2739 == 2) {
|
|
target_blend = 0.0f;
|
|
dKy_custom_colset(1, 1, i_this->mKankyoBlend);
|
|
} else if(i_this->field_0x2739 == 3) {
|
|
target_blend = 0.0f;
|
|
dKy_custom_colset(2, 2, i_this->mKankyoBlend);
|
|
} else if (i_this->field_0x2739 == 4) {
|
|
target_blend = 0.0f;
|
|
dKy_custom_colset(3, 3, i_this->mKankyoBlend);
|
|
}else if (i_this->field_0x2739 == 5) {
|
|
target_blend = 0.0f;
|
|
dKy_custom_colset(4, 4, i_this->mKankyoBlend);
|
|
}
|
|
|
|
if (target_blend >= 0.0f) {
|
|
cLib_addCalc2(&i_this->mKankyoBlend, target_blend, 1.0f, blend_step);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80600A54-80600A5C 00C0F4 0008+00 1/0 0/0 0/0 .text daB_GND_IsDelete__FP11b_gnd_class */
|
|
static int daB_GND_IsDelete(b_gnd_class* i_this) {
|
|
return 1;
|
|
}
|
|
|
|
/* 80600A5C-80600B14 00C0FC 00B8+00 1/0 0/0 0/0 .text daB_GND_Delete__FP11b_gnd_class */
|
|
static int daB_GND_Delete(b_gnd_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
|
|
dComIfG_resDelete(&i_this->mPhaseReq, "B_gnd");
|
|
dComIfG_resDelete(&i_this->mHorsePhaseReq, "B_hg");
|
|
|
|
if (i_this->mInitHIO) {
|
|
l_initHIO = false;
|
|
}
|
|
|
|
if (a_this->heap != NULL) {
|
|
i_this->mpModelMorf->stopZelAnime();
|
|
i_this->mpHorseMorf->stopZelAnime();
|
|
i_this->field_0x1e2c.deleteObject();
|
|
|
|
for (int i = 0; i < 5; i++) {
|
|
i_this->mLightBallSound[i].deleteObject();
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80600B14-80601468 00C1B4 0954+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */
|
|
static int useHeapInit(fopAc_ac_c* a_this) {
|
|
b_gnd_class* i_this = (b_gnd_class*)a_this;
|
|
|
|
static int const blur_model[2] = {0x66, 0x65};
|
|
static int btk_d[6] = {0x77, 0x76, 0x73, 0x74, 0x75, 0x72};
|
|
|
|
i_this->mpModelMorf = new mDoExt_McaMorfSO((J3DModelData*)dComIfG_getObjectRes("B_gnd", 0x69),
|
|
NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("B_gnd", 0x4b),
|
|
2, 1.0f, 0, -1, &i_this->mGndSound, 0, 0x11020284);
|
|
|
|
if (i_this->mpModelMorf == NULL || i_this->mpModelMorf->getModel() == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
J3DModel* model = i_this->mpModelMorf->getModel();
|
|
model->setUserArea((uintptr_t)i_this);
|
|
|
|
for (u16 i = 0; i < model->getModelData()->getJointNum(); i++) {
|
|
model->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack);
|
|
}
|
|
|
|
mDoMtx_stack_c::scaleS(0.0f, 0.0f, 0.0f);
|
|
model->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
|
|
i_this->mpGndCoreBrk = new mDoExt_brkAnm();
|
|
if (i_this->mpGndCoreBrk == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
if (!i_this->mpGndCoreBrk->init(i_this->mpModelMorf->getModel()->getModelData(),
|
|
(J3DAnmTevRegKey*)dComIfG_getObjectRes("B_gnd", 0x6d),
|
|
1, 2, 1.0f, 0, -1)) {
|
|
return 0;
|
|
}
|
|
|
|
for (int i = 0; i < 6; i++) {
|
|
i_this->mpGndEyeBtk[i] = new mDoExt_btkAnm();
|
|
if (i_this->mpGndEyeBtk[i] == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
if (!i_this->mpGndEyeBtk[i]->init(i_this->mpModelMorf->getModel()->getModelData(),
|
|
(J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_gnd", btk_d[i]),
|
|
1, 0, 1.0f, 0, -1)) {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
i_this->mpGndEyeBtp = new mDoExt_btpAnm();
|
|
if (i_this->mpGndEyeBtp == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
if (!i_this->mpGndEyeBtp->init(i_this->mpModelMorf->getModel()->getModelData(),
|
|
(J3DAnmTexPattern*)dComIfG_getObjectRes("B_gnd", 0x7b), 1, 2, 1.0f, 0, -1)) {
|
|
return 0;
|
|
}
|
|
|
|
J3DModelData* modelData;
|
|
modelData = (J3DModelData*)dComIfG_getObjectRes("B_gnd", 0x62);
|
|
JUT_ASSERT(6612, modelData != NULL);
|
|
i_this->mpSwordModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
|
|
if (i_this->mpSwordModel == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
mDoMtx_stack_c::scaleS(0.0f, 0.0f, 0.0f);
|
|
i_this->mpSwordModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
|
|
modelData = (J3DModelData*)dComIfG_getObjectRes("B_gnd", 0x61);
|
|
JUT_ASSERT(6626, modelData != NULL);
|
|
i_this->mpSheathModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
|
|
if (i_this->mpSheathModel == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
mDoMtx_stack_c::scaleS(0.0f, 0.0f, 0.0f);
|
|
i_this->mpSheathModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
|
|
for (int i = 0; i < 2; i++) {
|
|
modelData = (J3DModelData*)dComIfG_getObjectRes("B_gnd", blur_model[i]);
|
|
JUT_ASSERT(6647, modelData != NULL);
|
|
i_this->mpSwordBlurModel[i] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
|
|
if (i_this->mpSwordBlurModel[i] == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
mDoMtx_stack_c::scaleS(0.0f, 0.0f, 0.0f);
|
|
i_this->mpSwordBlurModel[i]->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
|
|
modelData = (J3DModelData*)dComIfG_getObjectRes("B_gnd", 99);
|
|
JUT_ASSERT(6670, modelData != NULL);
|
|
|
|
for (int i = 0; i < 36; i++) {
|
|
i_this->mpMantShadowModel[i] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
|
|
if (i_this->mpMantShadowModel[i] == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
mDoMtx_stack_c::scaleS(0.0f, 0.0f, 0.0f);
|
|
i_this->mpMantShadowModel[i]->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
|
|
i_this->mpHorseMorf = new mDoExt_McaMorfSO((J3DModelData*)dComIfG_getObjectRes("B_hg", 19),
|
|
NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("B_hg", 15),
|
|
2, 1.0f, 0, -1, &i_this->mHorseSound, 0x80000, 0x11000084);
|
|
if (i_this->mpHorseMorf == NULL || i_this->mpHorseMorf->getModel() == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
model = i_this->mpHorseMorf->getModel();
|
|
model->setUserArea((uintptr_t)a_this);
|
|
for (u16 i = 0; i < model->getModelData()->getJointNum(); i++) {
|
|
model->getModelData()->getJointNodePointer(i)->setCallBack(h_nodeCallBack);
|
|
}
|
|
|
|
mDoMtx_stack_c::scaleS(0.0f, 0.0f, 0.0f);
|
|
model->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
|
|
for (int i = 0; i < 2; i++) {
|
|
if (!i_this->mHorseReins[i].init(1, 16, (ResTIMG *)dComIfG_getObjectRes("B_hg", 22), 1)) {
|
|
return 0;
|
|
}
|
|
|
|
f32* size = i_this->mHorseReins[i].getSize(0);
|
|
for (int j = 0; j < 16; j++) {
|
|
*size = 4.0f;
|
|
size++;
|
|
}
|
|
}
|
|
|
|
if (!i_this->field_0x21e8.init(1, 2, (ResTIMG *)dComIfG_getObjectRes("B_hg", 22), 1)) {
|
|
return 0;
|
|
}
|
|
|
|
f32* size = i_this->field_0x21e8.getSize(0);
|
|
for (int i = 0; i < 2; i++) {
|
|
*size = 4.0f;
|
|
size++;
|
|
}
|
|
|
|
i_this->mpZeldaModel = new mDoExt_McaMorf((J3DModelData*)dComIfG_getObjectRes("B_gnd", 0x6a),
|
|
NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("B_gnd", 0x5e),
|
|
0, 1.0f, 0, -1, 1, NULL, 0, 0x11020284);
|
|
if (i_this->mpZeldaModel == NULL || i_this->mpZeldaModel->getModel() == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
i_this->mpZeldaBtk = new mDoExt_btkAnm();
|
|
if (i_this->mpZeldaBtk == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
if (!i_this->mpZeldaBtk->init(i_this->mpZeldaModel->getModel()->getModelData(),
|
|
(J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_gnd", 0x78),
|
|
1, 0, 1.0f, 0, -1)) {
|
|
return 0;
|
|
}
|
|
|
|
i_this->mpZeldaBtp = new mDoExt_btpAnm();
|
|
if (i_this->mpZeldaBtp == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
J3DAnmTexPattern* texPattern = (J3DAnmTexPattern*)dComIfG_getObjectRes("B_gnd", 0x7c);
|
|
if (!i_this->mpZeldaBtp->init(i_this->mpZeldaModel->getModel()->getModelData(),
|
|
texPattern,
|
|
1, 0, 1.0f, 0, -1)) {
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 806014B0-80601960 00CB50 04B0+00 1/0 0/0 0/0 .text daB_GND_Create__FP10fopAc_ac_c */
|
|
static int daB_GND_Create(fopAc_ac_c* a_this) {
|
|
b_gnd_class* i_this = (b_gnd_class*)a_this;
|
|
fopAcM_ct(i_this, b_gnd_class);
|
|
|
|
int phase_state = dComIfG_resLoad(&i_this->mPhaseReq, "B_gnd");
|
|
int h_phase_state = dComIfG_resLoad(&i_this->mHorsePhaseReq, "B_hg");
|
|
i_this->field_0x5be = fopAcM_GetParam(a_this);
|
|
|
|
if (h_phase_state != cPhs_COMPLEATE_e) {
|
|
phase_state = h_phase_state;
|
|
}
|
|
|
|
if (phase_state == cPhs_COMPLEATE_e) {
|
|
OS_REPORT("b_gnd PARAM %x\n", fopAcM_GetParam(a_this));
|
|
|
|
if (!fopAcM_entrySolidHeap(a_this, useHeapInit, 0x2B1A0)) {
|
|
OS_REPORT("//////////////B_GND SET NON !!\n");
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
if (!l_initHIO) {
|
|
i_this->mInitHIO = true;
|
|
l_initHIO = true;
|
|
l_HIO.no = mDoHIO_CREATE_CHILD("ガノンドãƒãƒ•", &l_HIO);
|
|
}
|
|
|
|
a_this->attention_info.distances[2] = 36;
|
|
|
|
fopAcM_SetMtx(a_this, i_this->mpModelMorf->getModel()->getBaseTRMtx());
|
|
fopAcM_SetMin(a_this, -400.0f, -200.0f, -400.0f);
|
|
fopAcM_SetMax(a_this, 400.0f, 200.0f, 400.0f);
|
|
|
|
i_this->mAcch.Set(fopAcM_GetPosition_p(a_this), fopAcM_GetOldPosition_p(a_this), a_this, 1, &i_this->mAcchCir, fopAcM_GetSpeed_p(a_this), NULL, NULL);
|
|
i_this->mAcchCir.SetWall(50.0f, 150.0f);
|
|
i_this->mAcch.ClrWaterNone();
|
|
|
|
cXyz sp3C;
|
|
cXyz sp30;
|
|
sp3C.y = 0.0f;
|
|
sp3C.x = 0.0f;
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
cMtx_YrotS(*calc_mtx, i << 13);
|
|
sp3C.z = cM_rndF(3000.0f) + 12000.0f;
|
|
MtxPosition(&sp3C, &sp30);
|
|
|
|
b_path[i].x = sp30.x;
|
|
b_path[i].z = sp30.z;
|
|
}
|
|
|
|
i_this->mMantChildID = fopAcM_createChild(PROC_MANT, fopAcM_GetID(a_this),
|
|
0, &a_this->current.pos, fopAcM_GetRoomNo(a_this), NULL, NULL, -1, 0);
|
|
a_this->health = 24;
|
|
i_this->field_0x560 = 24;
|
|
|
|
i_this->mGndCcStts.Init(0xFE, 0, a_this);
|
|
i_this->mHorseCcStts.Init(150, 0, a_this);
|
|
|
|
static dCcD_SrcSph h_cc_sph_src = {
|
|
{
|
|
{0x0, {{AT_TYPE_CSTATUE_SWING, 0x2, 0x1f}, {0x4006020, 0x3}, 0x75}}, // mObj
|
|
{dCcD_SE_HARD_BODY, 0x0, 0x7, 0x0, 0x0}, // mGObjAt
|
|
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg
|
|
{0x0}, // mGObjCo
|
|
}, // mObjInf
|
|
{
|
|
{{0.0f, 0.0f, 0.0f}, 40.0f} // mSph
|
|
} // mSphAttr
|
|
};
|
|
|
|
static dCcD_SrcSph cc_sph_src = {
|
|
{
|
|
{0x00, {{AT_TYPE_0, 0x0, 0x00}, {0x4012000, 0x3}, 0x75}}, // mObj
|
|
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
|
|
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg
|
|
{0x0}, // mGObjCo
|
|
}, // mObjInf
|
|
{
|
|
{{0.0f, 0.0f, 0.0f}, 40.0f} // mSph
|
|
} // mSphAttr
|
|
};
|
|
|
|
static dCcD_SrcSph at_sph_src = {
|
|
{
|
|
{0x0, {{AT_TYPE_CSTATUE_SWING, 0x2, 0x1f}, {0x0, 0x0}, 0x0}}, // mObj
|
|
{dCcD_SE_HARD_BODY, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
|
|
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg
|
|
{0x0}, // mGObjCo
|
|
}, // mObjInf
|
|
{
|
|
{{0.0f, 0.0f, 0.0f}, 35.0f} // mSph
|
|
} // mSphAttr
|
|
};
|
|
|
|
static dCcD_SrcSph def_sph_src = {
|
|
{
|
|
{0x0, {{0x0, 0x0, 0x0}, {0xdcfbfdfd, 0x3}, 0x0}}, // mObj
|
|
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
|
|
{dCcD_SE_METAL, 0x5, 0x0, 0x0, 0x2}, // mGObjTg
|
|
{0x0}, // mGObjCo
|
|
}, // mObjInf
|
|
{
|
|
{{0.0f, 0.0f, 0.0f}, 100.0f} // mSph
|
|
} // mSphAttr
|
|
};
|
|
|
|
static dCcD_SrcCyl co_cyl_src = {
|
|
{
|
|
{0x0, {{0x0, 0x0, 0x0}, {0x0, 0x0}, 0x75}}, // mObj
|
|
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
|
|
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg
|
|
{0x0}, // mGObjCo
|
|
}, // mObjInf
|
|
{
|
|
{0.0f, 0.0f, 0.0f}, // mCenter
|
|
100.0f, // mRadius
|
|
200.0f // mHeight
|
|
} // mCyl
|
|
};
|
|
|
|
for (int i = 0; i < 2; i++) {
|
|
i_this->mHorseBodySph[i].Set(h_cc_sph_src);
|
|
i_this->mHorseBodySph[i].SetStts(&i_this->mHorseCcStts);
|
|
i_this->mHorseBodySph[i].OnTgShield();
|
|
i_this->mHorseBodySph[i].SetTgHitMark(CcG_Tg_UNK_MARK_2);
|
|
}
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
i_this->mHorseFootSph[i].Set(h_cc_sph_src);
|
|
i_this->mHorseFootSph[i].SetStts(&i_this->mHorseCcStts);
|
|
i_this->mHorseFootSph[i].OnTgShield();
|
|
i_this->mHorseFootSph[i].SetTgHitMark(CcG_Tg_UNK_MARK_2);
|
|
}
|
|
|
|
for (int i = 0; i < 3; i++) {
|
|
i_this->mGndSph[i].Set(cc_sph_src);
|
|
i_this->mGndSph[i].SetStts(&i_this->mGndCcStts);
|
|
i_this->mGndSph[i].OnTgNoHitMark();
|
|
}
|
|
|
|
i_this->mAtSph.Set(at_sph_src);
|
|
i_this->mAtSph.SetStts(&i_this->mGndCcStts);
|
|
|
|
i_this->mAtInfo.mpSound = &i_this->mGndSound;
|
|
i_this->mAtInfo.mPowerType = 5;
|
|
|
|
i_this->mGndSound.init(&a_this->current.pos, &a_this->eyePos, &i_this->field_0x269c, 3, 1, 1);
|
|
i_this->mGndSound.setEnemyName("B_gnd");
|
|
|
|
i_this->mHorseSound.init(&a_this->current.pos, &a_this->eyePos, 3, 1);
|
|
i_this->mGndSound.setEnemyName("B_gnd");
|
|
|
|
i_this->mDefSph.Set(def_sph_src);
|
|
i_this->mDefSph.SetStts(&i_this->mGndCcStts);
|
|
|
|
i_this->mCoCyl.Set(co_cyl_src);
|
|
i_this->mCoCyl.SetStts(&i_this->mGndCcStts);
|
|
|
|
i_this->mActionMode = ACTION_HWAIT_1;
|
|
i_this->mMoveMode = -1;
|
|
i_this->mDrawHorse = TRUE;
|
|
|
|
dKy_tevstr_init(&i_this->mSwordTevstr, fopAcM_GetRoomNo(a_this), -1);
|
|
|
|
i_this->field_0x770 = 0;
|
|
i_this->mHideSheath = TRUE;
|
|
|
|
if (dComIfGs_isSaveDunSwitch(1)) {
|
|
i_this->mNoDrawTimer = 2;
|
|
}
|
|
|
|
i_this->field_0x1e2c.init(&i_this->field_0x1e20, 1);
|
|
|
|
for (int i = 0; i < 5; i++) {
|
|
i_this->mLightBallSound[i].init(&i_this->mLightBallPos[i], 1);
|
|
}
|
|
|
|
daB_GND_Execute(i_this);
|
|
}
|
|
|
|
return phase_state;
|
|
}
|
|
|
|
/* 80601960-80601D24 00D000 03C4+00 1/1 0/0 0/0 .text __ct__11b_gnd_classFv */
|
|
b_gnd_class::b_gnd_class() {}
|
|
|
|
/* 80602E6C-80602E8C -00001 0020+00 1/0 0/0 0/0 .data l_daB_GND_Method */
|
|
static actor_method_class l_daB_GND_Method = {
|
|
(process_method_func)daB_GND_Create,
|
|
(process_method_func)daB_GND_Delete,
|
|
(process_method_func)daB_GND_Execute,
|
|
(process_method_func)daB_GND_IsDelete,
|
|
(process_method_func)daB_GND_Draw,
|
|
};
|
|
|
|
/* 80602E8C-80602EBC -00001 0030+00 0/0 0/0 1/0 .data g_profile_B_GND */
|
|
extern actor_process_profile_definition g_profile_B_GND = {
|
|
fpcLy_CURRENT_e, // mLayerID
|
|
7, // mListID
|
|
fpcPi_CURRENT_e, // mListPrio
|
|
PROC_B_GND, // mProcName
|
|
&g_fpcLf_Method.base, // sub_method
|
|
sizeof(b_gnd_class), // mSize
|
|
0, // mSizeOther
|
|
0, // mParameters
|
|
&g_fopAc_Method.base, // sub_method
|
|
214, // mPriority
|
|
&l_daB_GND_Method, // sub_method
|
|
0x00044000, // mStatus
|
|
fopAc_ENEMY_e, // mActorType
|
|
fopAc_CULLBOX_CUSTOM_e, // cullType
|
|
};
|
|
|
|
static int unk_bss_0xF0;
|
|
|
|
AUDIO_INSTANCES;
|