mirror of https://github.com/zeldaret/tp.git
2828 lines
86 KiB
C++
2828 lines
86 KiB
C++
/**
|
|
* d_a_do.cpp
|
|
* Dog
|
|
*/
|
|
|
|
// Every function matches, but a Z2SoundObjSimple dtor is generated that should not exist
|
|
|
|
#include "d/actor/d_a_do.h"
|
|
#include "JSystem/JGeometry.h"
|
|
#include "SSystem/SComponent/c_math.h"
|
|
#include "m_Do/m_Do_controller_pad.h"
|
|
#include "c/c_damagereaction.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "d/d_a_item_static.h"
|
|
#include "d/d_procname.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
#include "d/actor/d_a_canoe.h"
|
|
#include "d/actor/d_a_obj_food.h"
|
|
|
|
/* 8066F278-8066F27C 000008 0001+03 3/3 0/0 0/0 .bss @1109 */
|
|
static u8 lit_1109[1 + 3 /* padding */];
|
|
|
|
/* 8066F27C-8066F280 00000C 0001+03 0/0 0/0 0/0 .bss @1107 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 lit_1107[1 + 3 /* padding */];
|
|
#pragma pop
|
|
|
|
/* 8066F280-8066F284 000010 0001+03 0/0 0/0 0/0 .bss @1105 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 lit_1105[1 + 3 /* padding */];
|
|
#pragma pop
|
|
|
|
/* 8066F284-8066F288 000014 0001+03 0/0 0/0 0/0 .bss @1104 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 lit_1104[1 + 3 /* padding */];
|
|
#pragma pop
|
|
|
|
/* 8066F288-8066F28C 000018 0001+03 0/0 0/0 0/0 .bss @1099 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 lit_1099[1 + 3 /* padding */];
|
|
#pragma pop
|
|
|
|
/* 8066F28C-8066F290 00001C 0001+03 0/0 0/0 0/0 .bss @1097 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 lit_1097[1 + 3 /* padding */];
|
|
#pragma pop
|
|
|
|
/* 8066F290-8066F294 000020 0001+03 0/0 0/0 0/0 .bss @1095 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 lit_1095[1 + 3 /* padding */];
|
|
#pragma pop
|
|
|
|
/* 8066F294-8066F298 000024 0001+03 0/0 0/0 0/0 .bss @1094 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 lit_1094[1 + 3 /* padding */];
|
|
#pragma pop
|
|
|
|
/* 8066F298-8066F29C 000028 0001+03 0/0 0/0 0/0 .bss @1057 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 lit_1057[1 + 3 /* padding */];
|
|
#pragma pop
|
|
|
|
/* 8066F29C-8066F2A0 00002C 0001+03 0/0 0/0 0/0 .bss @1055 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 lit_1055[1 + 3 /* padding */];
|
|
#pragma pop
|
|
|
|
/* 8066F2A0-8066F2A4 000030 0001+03 0/0 0/0 0/0 .bss @1053 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 lit_1053[1 + 3 /* padding */];
|
|
#pragma pop
|
|
|
|
/* 8066F2A4-8066F2A8 000034 0001+03 0/0 0/0 0/0 .bss @1052 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 lit_1052[1 + 3 /* padding */];
|
|
#pragma pop
|
|
|
|
/* 8066F2A8-8066F2AC 000038 0001+03 0/0 0/0 0/0 .bss @1014 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 lit_1014[1 + 3 /* padding */];
|
|
#pragma pop
|
|
|
|
/* 8066F2AC-8066F2B0 00003C 0001+03 0/0 0/0 0/0 .bss @1012 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 lit_1012[1 + 3 /* padding */];
|
|
#pragma pop
|
|
|
|
/* 8066F2B0-8066F2B4 000040 0001+03 0/0 0/0 0/0 .bss @1010 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 lit_1010[1 + 3 /* padding */];
|
|
#pragma pop
|
|
|
|
/* 8066F2B4-8066F2B8 -00001 0004+00 1/2 0/0 0/0 .bss None */
|
|
/* 8066F2B4 0001+01 data_8066F2B4 @1009 */
|
|
/* 8066F2B6 0002+00 data_8066F2B6 None */
|
|
static u8 data_8066F2B4;
|
|
static bool noFallCheck;
|
|
static bool hioInit;
|
|
|
|
/* 8066F2C4-8066F2E4 000054 0020+00 11/12 0/0 0/0 .bss l_HIO */
|
|
static daDo_HIO_c l_HIO;
|
|
|
|
/* 80667D4C-80667DA8 0000EC 005C+00 1/1 0/0 0/0 .text __ct__10daDo_HIO_cFv */
|
|
daDo_HIO_c::daDo_HIO_c() {
|
|
field_0x04 = -1;
|
|
mBaseSize = 1.0f;
|
|
mWalkSpeed = 2.5f;
|
|
mRunSpeed = 12.0f;
|
|
mSwimSpeed = 2.0f;
|
|
mPlayerRecognitionDist = 600.0f;
|
|
mWaitType = 0;
|
|
mSwimming = 1;
|
|
mWaterHuntAnimType = 0;
|
|
}
|
|
|
|
/* 80667DA8-80667E68 000148 00C0+00 16/16 0/0 0/0 .text anm_init__FP8do_classifUcf */
|
|
static void anm_init(do_class* i_this, int i_resIdx, f32 i_morf, u8 i_mode, f32 i_speed) {
|
|
if (!(i_this->field_0x608 > 1.0f)) {
|
|
i_this->mpMorf->setAnm(static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Do", i_resIdx)),
|
|
i_mode, i_morf, i_speed, 0.0f, -1.0f, 0);
|
|
i_this->mAnmID = i_resIdx;
|
|
}
|
|
}
|
|
|
|
/* 80667E68-80667FE4 000208 017C+00 1/1 0/0 0/0 .text nodeCallBack__FP8J3DJointi */
|
|
static int nodeCallBack(J3DJoint* i_jntP, int param_1) {
|
|
if (param_1 == 0) {
|
|
int joint_num = i_jntP->getJntNo();
|
|
J3DModel* model = j3dSys.getModel();
|
|
do_class* _this = (do_class*)model->getUserArea();
|
|
|
|
if (_this != NULL) {
|
|
MTXCopy(model->getAnmMtx(joint_num), *calc_mtx);
|
|
|
|
if (joint_num == 9 || joint_num == 10) {
|
|
cMtx_YrotM(*calc_mtx, _this->mHeadAngle.y + _this->mHeadBob.y);
|
|
cMtx_XrotM(*calc_mtx, _this->mHeadAngle.z + _this->mHeadBob.z);
|
|
cMtx_ZrotM(*calc_mtx, _this->mHeadAngle.x);
|
|
} else if (joint_num == 22) {
|
|
cMtx_YrotM(*calc_mtx, _this->mTailAngle.y << 1);
|
|
cMtx_ZrotM(*calc_mtx, _this->mTailAngle.x << 1);
|
|
} else {
|
|
cMtx_YrotM(*calc_mtx, _this->mTailAngle.y);
|
|
cMtx_ZrotM(*calc_mtx, _this->mTailAngle.x);
|
|
}
|
|
|
|
model->setAnmMtx(joint_num, *calc_mtx);
|
|
MTXCopy(*calc_mtx, j3dSys.mCurrentMtx);
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/* 80667FE4-80668134 000384 0150+00 1/0 0/0 0/0 .text daDo_Draw__FP8do_class */
|
|
static int daDo_Draw(do_class* i_this) {
|
|
if (i_this->mNoDraw != 0) {
|
|
i_this->mNoDraw = 0;
|
|
return 1;
|
|
}
|
|
|
|
if (daPy_py_c::linkGrabSubjectNoDraw(i_this)) {
|
|
return 1;
|
|
}
|
|
|
|
J3DModel* model = i_this->mpMorf->getModel();
|
|
g_env_light.settingTevStruct(0, &i_this->current.pos, &i_this->tevStr);
|
|
g_env_light.setLightTevColorType_MAJI(model, &i_this->tevStr);
|
|
i_this->mpBtk->entry(model->getModelData());
|
|
i_this->mpBtp->entry(model->getModelData());
|
|
i_this->mpMorf->entryDL();
|
|
|
|
if (!fopAcM_checkCarryNow(i_this) && i_this->mAction != ACT_BOAT) {
|
|
cXyz pos;
|
|
pos.set(i_this->current.pos.x, i_this->current.pos.y + 100.0f, i_this->current.pos.z);
|
|
i_this->mShadowKey =
|
|
dComIfGd_setShadow(i_this->mShadowKey, 1, model, &pos, 400.0f, 0.0f,
|
|
i_this->current.pos.y, i_this->mBgS_Acch.GetGroundH(),
|
|
i_this->mBgS_Acch.m_gnd, &i_this->tevStr, 0, 1.0f,
|
|
dDlst_shadowControl_c::getSimpleTex());
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80668170-80668264 000510 00F4+00 1/1 0/0 0/0 .text
|
|
* daDo_other_bg_check__FP8do_classP10fopAc_ac_c */
|
|
static BOOL daDo_other_bg_check(do_class* i_this, fopAc_ac_c* i_actor) {
|
|
fopAc_ac_c* _this = static_cast<fopAc_ac_c*>(i_this);
|
|
cXyz dog_pos;
|
|
cXyz actor_pos;
|
|
dBgS_LinChk lin_chk;
|
|
|
|
if (i_actor != NULL) {
|
|
actor_pos = i_actor->current.pos;
|
|
actor_pos.y += 50.0f;
|
|
|
|
dog_pos = _this->current.pos;
|
|
dog_pos.y = _this->eyePos.y;
|
|
|
|
lin_chk.Set(&dog_pos, &actor_pos, _this);
|
|
if (dComIfG_Bgsp().LineCross(&lin_chk)) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
/* 80668264-8066833C 000604 00D8+00 1/1 0/0 0/0 .text daDo_other_bg_check2__FP8do_classP4cXyz */
|
|
static BOOL daDo_other_bg_check2(do_class* i_this, cXyz* i_pos) {
|
|
fopAc_ac_c* _this = static_cast<fopAc_ac_c*>(i_this);
|
|
cXyz dog_pos;
|
|
cXyz pos;
|
|
dBgS_LinChk lin_chk;
|
|
|
|
pos = *i_pos;
|
|
pos.y += 30.0f;
|
|
|
|
dog_pos = _this->current.pos;
|
|
dog_pos.y += 30.0f;
|
|
|
|
lin_chk.Set(&dog_pos, &pos, _this);
|
|
if (dComIfG_Bgsp().LineCross(&lin_chk)) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/* 8066F2E4-8066F2F8 000074 0014+00 1/2 0/0 0/0 .bss target_info */
|
|
static fopAc_ac_c* target_info[5];
|
|
|
|
/* 8066F2F8-8066F2FC 000088 0004+00 1/2 0/0 0/0 .bss target_info_count */
|
|
static int target_info_count;
|
|
|
|
/* 8066F2FC-8066F310 00008C 0014+00 0/1 0/0 0/0 .bss target_bgc */
|
|
static BOOL target_bgc[5];
|
|
|
|
/* 8066833C-806683C0 0006DC 0084+00 1/1 0/0 0/0 .text s_w_sub__FPvPv */
|
|
static void* s_w_sub(void* i_proc, void* i_this) {
|
|
if (fopAcM_IsActor(i_proc) &&
|
|
(fopAcM_GetName(i_proc) == PROC_OBJ_FOOD || fopAcM_GetName(i_proc) == PROC_OBJ_KANBAN2) &&
|
|
fopAcM_checkCarryNow(static_cast<fopAc_ac_c*>(i_proc)) && target_info_count < 5)
|
|
{
|
|
target_info[target_info_count] = static_cast<fopAc_ac_c*>(i_proc);
|
|
target_info_count++;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* 806683C0-8066858C 000760 01CC+00 1/1 0/0 0/0 .text search_food__FP8do_class */
|
|
static u32 search_food(do_class* i_this) {
|
|
target_info_count = 0;
|
|
|
|
for (int i = 0; i < 5; i++) {
|
|
target_info[i] = NULL;
|
|
target_bgc[i] = false;
|
|
}
|
|
|
|
fpcM_Search(s_w_sub, i_this);
|
|
f32 pos_check = 200.0f;
|
|
|
|
if (target_info_count != 0) {
|
|
fopAc_ac_c* actor;
|
|
int i = 0;
|
|
while (i < target_info_count) {
|
|
actor = target_info[i];
|
|
cXyz delta;
|
|
delta.x = actor->current.pos.x - i_this->eyePos.x;
|
|
delta.y = actor->current.pos.y + 50.0f - i_this->eyePos.y;
|
|
delta.z = actor->current.pos.z - i_this->eyePos.z;
|
|
f32 dist_xz = JMAFastSqrt(delta.x * delta.x + delta.z * delta.z);
|
|
|
|
if (dist_xz < pos_check) {
|
|
if (target_bgc[i] || daDo_other_bg_check(i_this, actor)) {
|
|
target_bgc[i] = true;
|
|
} else {
|
|
return fopAcM_GetID(actor);
|
|
}
|
|
}
|
|
|
|
i++;
|
|
if (i == target_info_count) {
|
|
i = 0;
|
|
pos_check += 100.0f;
|
|
if (pos_check > i_this->mScale.z * 240.0f) {
|
|
return -1;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
return -1;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/* 8066858C-806685EC 00092C 0060+00 1/1 0/0 0/0 .text food_check__FP8do_class */
|
|
static void food_check(do_class* i_this) {
|
|
i_this->mFoodActorID = search_food(i_this);
|
|
|
|
if (fopAcM_SearchByID(i_this->mFoodActorID)) {
|
|
i_this->mAction = ACT_FOOD;
|
|
i_this->mMode = 0;
|
|
}
|
|
}
|
|
|
|
/* 806685EC-80668624 00098C 0038+00 1/1 0/0 0/0 .text do_carry_check__FP8do_class */
|
|
static BOOL do_carry_check(do_class* i_this) {
|
|
if (i_this->mAction != ACT_CARRY && fopAcM_checkCarryNow(i_this)) {
|
|
i_this->mAction = ACT_CARRY;
|
|
i_this->mMode = 0;
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 80668624-80668754 0009C4 0130+00 1/1 0/0 0/0 .text depth_check__FP8do_class4cXyzf */
|
|
static BOOL depth_check(do_class* i_this, cXyz i_pos, f32 param_2) {
|
|
dBgS_GndChk gnd_chk;
|
|
Vec pos;
|
|
f32 f_gnd_chk;
|
|
f32 f_gnd_chk_spl;
|
|
|
|
pos.x = i_pos.x;
|
|
pos.y = i_pos.y + 200.0f;
|
|
pos.z = i_pos.z;
|
|
|
|
gnd_chk.SetPos(&pos);
|
|
f_gnd_chk = dComIfG_Bgsp().GroundCross(&gnd_chk);
|
|
|
|
dBgS_ObjGndChk_Spl gnd_chk_spl;
|
|
gnd_chk_spl.SetPos(&pos);
|
|
f_gnd_chk_spl = dComIfG_Bgsp().GroundCross(&gnd_chk_spl);
|
|
|
|
if (f_gnd_chk_spl - f_gnd_chk > 2.0f * param_2 * 0.8f * i_this->mScale.z) {
|
|
return 1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/* 80668754-8066886C 000AF4 0118+00 1/1 0/0 0/0 .text water_check__FP8do_class */
|
|
static bool water_check(do_class* i_this) {
|
|
dBgS_GndChk gnd_chk;
|
|
Vec pos;
|
|
|
|
pos = i_this->current.pos;
|
|
pos.y += 200.0f;
|
|
|
|
gnd_chk.SetPos(&pos);
|
|
f32 f_gnd_chk = dComIfG_Bgsp().GroundCross(&gnd_chk);
|
|
|
|
dBgS_ObjGndChk_Spl gnd_chk_spl;
|
|
gnd_chk_spl.SetPos(&pos);
|
|
i_this->mWaterY = dComIfG_Bgsp().GroundCross(&gnd_chk_spl);
|
|
|
|
if (i_this->mWaterY - f_gnd_chk > 8.0f * i_this->mScale.z) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/* 8066886C-80668A30 000C0C 01C4+00 4/4 0/0 0/0 .text dansa_check__FP8do_class4cXyzf */
|
|
static int dansa_check(do_class* i_this, cXyz i_pos, f32 param_2) {
|
|
fopAc_ac_c* _this = static_cast<fopAc_ac_c*>(i_this);
|
|
i_pos.y += 25.0f;
|
|
dBgS_GndChk gnd_chk;
|
|
|
|
Vec pos;
|
|
pos.x = i_pos.x;
|
|
pos.y = i_pos.y + 25.0f;
|
|
pos.z = i_pos.z;
|
|
|
|
gnd_chk.SetPos(&pos);
|
|
f32 f_gnd_chk = dComIfG_Bgsp().GroundCross(&gnd_chk);
|
|
|
|
if (i_this->current.pos.y - f_gnd_chk > param_2) {
|
|
return 1;
|
|
} else {
|
|
dBgS_LinChk lin_chk;
|
|
cXyz pos2;
|
|
|
|
pos2 = _this->current.pos;
|
|
pos2.y += 60.0f;
|
|
|
|
lin_chk.Set(&pos2, &i_pos, _this);
|
|
|
|
if (dComIfG_Bgsp().LineCross(&lin_chk) != 0) {
|
|
return -1;
|
|
} else if (depth_check(i_this, i_pos, 5.0f) && l_HIO.mSwimming == 0) {
|
|
return -100;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80668A30-80668B18 000DD0 00E8+00 3/3 0/0 0/0 .text dansa_check2__FP8do_classf */
|
|
static BOOL dansa_check2(do_class* i_this, f32 param_1) {
|
|
cXyz pos, pos2;
|
|
|
|
cMtx_YrotS(*calc_mtx, i_this->current.angle.y);
|
|
pos.x = 0.0f;
|
|
pos.y = 70.0f;
|
|
pos.z = 0.8f * param_1 * i_this->mScale.z +
|
|
0.8f * i_this->speedF * i_this->mScale.z * 9.0f;
|
|
|
|
MtxPosition(&pos, &pos2);
|
|
pos2 += i_this->current.pos;
|
|
return dansa_check(i_this, pos2, 100.0f) != 0 ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 80668B18-80668BA0 000EB8 0088+00 4/4 0/0 0/0 .text move_dansa_check__FP8do_classf */
|
|
static BOOL move_dansa_check(do_class* i_this, f32 i_speed) {
|
|
if (dansa_check2(i_this, 130.0f)) {
|
|
i_this->mAction = ACT_WAIT_1;
|
|
|
|
if (i_speed > 15.0f) {
|
|
i_this->mMode = 10;
|
|
} else {
|
|
i_this->mMode = 0;
|
|
}
|
|
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/* 80668BA0-80668D5C 000F40 01BC+00 5/5 0/0 0/0 .text area_check__FP8do_class */
|
|
static void area_check(do_class* i_this) {
|
|
cXyz pos_delta = i_this->home.pos - i_this->current.pos;
|
|
|
|
if (i_this->mParam2 != 0xff) {
|
|
if (pos_delta.abs() > i_this->mParam2 * 100.0f * 2.0f) {
|
|
i_this->mAction = ACT_WALK;
|
|
i_this->mMode = -1;
|
|
i_this->mTimer[2] = cM_rndF(100.0f) + 100.0f;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80668D5C-80669050 0010FC 02F4+00 2/1 0/0 0/0 .text do_stay__FP8do_class */
|
|
static void do_stay(do_class* i_this) {
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
if (i_this->mParam0 == 0) {
|
|
anm_init(i_this, ANM_DOWN_WT, 15.0f, 2, 1.0f);
|
|
i_this->mMode++;
|
|
i_this->mTimer[0] = 10;
|
|
} else {
|
|
i_this->mAction = ACT_WALK;
|
|
i_this->mMode = 0;
|
|
return;
|
|
}
|
|
// fallthrough
|
|
|
|
case 1:
|
|
if (i_this->mTimer[0] == 0 && i_this->mDistFromPlayer < l_HIO.mPlayerRecognitionDist) {
|
|
i_this->mMode++;
|
|
i_this->mTimer[0] = cM_rndF(50.0f) + 20.0f;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
i_this->field_0x616 = 1;
|
|
i_this->mHeadTilt = -6300;
|
|
i_this->mTailWagTarget = 1000.0f;
|
|
if (i_this->mTimer[0] == 0) {
|
|
anm_init(i_this, ANM_DOWN, 5.0f, 0, 1.0f);
|
|
i_this->mMode++;
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
i_this->field_0x616 = 1;
|
|
i_this->mTailWagTarget = 2000.0f;
|
|
|
|
if (i_this->mpMorf->isStop()) {
|
|
i_this->mAction = ACT_WALK_RUN;
|
|
i_this->mMode = 0;
|
|
}
|
|
break;
|
|
|
|
case 10:
|
|
anm_init(i_this, ANM_DOWN_WT, 15.0f, 2, 1.0f);
|
|
i_this->mMode++;
|
|
// fallthrough
|
|
|
|
case 11:
|
|
i_this->field_0x616 = 1;
|
|
i_this->mHeadTilt = -6300;
|
|
i_this->mTailWagTarget = 1000.0f;
|
|
|
|
if (i_this->field_0x658 > 30.0f) {
|
|
i_this->mMode++;
|
|
i_this->mTimer[0] = cM_rndF(10.0f) + 10.0f;
|
|
}
|
|
|
|
if (i_this->mDistFromPlayer > 100.0f + l_HIO.mPlayerRecognitionDist) {
|
|
i_this->field_0x5f4 = 0;
|
|
i_this->mMode = 0;
|
|
}
|
|
break;
|
|
|
|
case 12:
|
|
i_this->field_0x616 = 1;
|
|
i_this->mHeadTilt = -6300;
|
|
i_this->mTailWagTarget = 1500.0f;
|
|
|
|
if (i_this->field_0x658 > 30.0f) {
|
|
if (i_this->mTimer[0] == 0) {
|
|
anm_init(i_this, ANM_DOWN, 3.0f, 0, 1.0f);
|
|
i_this->mMode = 13;
|
|
}
|
|
} else {
|
|
i_this->mMode = 11;
|
|
}
|
|
break;
|
|
|
|
case 13:
|
|
i_this->field_0x616 = 1;
|
|
i_this->mTailWagTarget = 1500.0f;
|
|
|
|
if (i_this->mpMorf->isStop()) {
|
|
i_this->mAction = ACT_WAIT_1;
|
|
i_this->mMode = 0;
|
|
}
|
|
break;
|
|
}
|
|
|
|
cLib_addCalc0(&i_this->speedF, 1.0f, 1.0f);
|
|
}
|
|
|
|
/* 80669050-8066973C 0013F0 06EC+00 2/1 0/0 0/0 .text do_walk__FP8do_class */
|
|
static void do_walk(do_class* i_this) {
|
|
cXyz local_5c;
|
|
s16 angle_diff;
|
|
i_this->mTailWagTarget = 1000.0f;
|
|
|
|
switch (i_this->mMode) {
|
|
case -1:
|
|
i_this->mTargetPos = i_this->home.pos;
|
|
if (i_this->speedF >= l_HIO.mRunSpeed) {
|
|
i_this->mAnmSpeed = 4.0f;
|
|
} else {
|
|
i_this->mAnmSpeed = 1.7f;
|
|
}
|
|
|
|
i_this->mTargetAnmSpeed = 1.7f;
|
|
anm_init(i_this, ANM_WALK, 3.0f, 2, i_this->mAnmSpeed);
|
|
i_this->mMode = 3;
|
|
break;
|
|
|
|
case 0:
|
|
if (i_this->field_0x5f4 == 8) {
|
|
anm_init(i_this, ANM_SIT, 5.0f, 0, 1.0f);
|
|
} else {
|
|
anm_init(i_this, ANM_DOWN, 5.0f, 0, 1.0f);
|
|
}
|
|
|
|
i_this->mMode++;
|
|
break;
|
|
|
|
case 1:
|
|
if (i_this->mpMorf->isStop()) {
|
|
i_this->mMode++;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
local_5c.x = 0.0f;
|
|
local_5c.y = 20.0f;
|
|
|
|
for (int i = 0; i < 100; i++) {
|
|
cMtx_YrotS(*calc_mtx, cM_rndF(65536.0f));
|
|
|
|
local_5c.z = cM_rndF(100.0f * i_this->mParam2);
|
|
MtxPosition(&local_5c, &i_this->mTargetPos);
|
|
|
|
i_this->mTargetPos += i_this->home.pos;
|
|
|
|
if (dansa_check(i_this, i_this->mTargetPos, 100.0f) == 0) {
|
|
local_5c = i_this->mTargetPos - i_this->current.pos;
|
|
|
|
if (local_5c.abs() > 300.0f)
|
|
break;
|
|
}
|
|
}
|
|
|
|
i_this->mAnmSpeed = i_this->mTargetAnmSpeed = 1.3f + cM_rndF(0.6f);
|
|
anm_init(i_this, ANM_WALK, 5.0f, 2, i_this->mAnmSpeed);
|
|
i_this->mMode++;
|
|
|
|
case 3:
|
|
local_5c = i_this->mTargetPos - i_this->current.pos;
|
|
|
|
cLib_addCalcAngleS2(&i_this->current.angle.y, (s16)cM_atan2s(local_5c.x, local_5c.z), 0x10,
|
|
0x100);
|
|
cLib_addCalc2(&i_this->speedF, i_this->mAnmSpeed * l_HIO.mWalkSpeed, 1.0f,
|
|
l_HIO.mWalkSpeed * 0.2f);
|
|
|
|
if (local_5c.abs() < 150.0f) {
|
|
if (i_this->mParam0 == 0) {
|
|
i_this->mAction = ACT_STAY;
|
|
i_this->mMode = 0;
|
|
} else {
|
|
anm_init(i_this, ANM_WAIT, 5.0f, 2, 1.0f);
|
|
i_this->mTimer[0] = cM_rndF(50.0f) + 20.0f;
|
|
i_this->mTargetAnmSpeed = 1.0f;
|
|
i_this->mMode++;
|
|
}
|
|
}
|
|
|
|
break;
|
|
|
|
case 4:
|
|
cLib_addCalc0(&i_this->speedF, 1.0f, 1.0f);
|
|
|
|
if (i_this->mTimer[0] == 0) {
|
|
i_this->mMode = 2;
|
|
}
|
|
|
|
break;
|
|
|
|
case 10:
|
|
cLib_addCalc0(&i_this->speedF, 1.0f, 1.0f);
|
|
cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->mTargetAngleY, 4, 0x400);
|
|
|
|
i_this->field_0x616 = 1;
|
|
i_this->mTailWagTarget = 2000.0f;
|
|
|
|
angle_diff = i_this->current.angle.y - i_this->mTargetAngleY;
|
|
|
|
if (angle_diff < 0) {
|
|
angle_diff *= -1;
|
|
}
|
|
|
|
if (angle_diff < 0x800) {
|
|
i_this->mMode++;
|
|
anm_init(i_this, ANM_WAIT, 5.0f, 2, 1.0f);
|
|
i_this->mTargetAnmSpeed = 1.0f;
|
|
i_this->mTimer[0] = cM_rndF(10.0f) + 10.0f;
|
|
}
|
|
|
|
break;
|
|
|
|
case 11:
|
|
i_this->field_0x616 = 1;
|
|
i_this->mTailWagTarget = 3000.0f;
|
|
if (i_this->mTimer[0] == 0) {
|
|
i_this->mAction = ACT_WALK_RUN;
|
|
i_this->mMode = 0;
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->mAnmSpeed, i_this->mTargetAnmSpeed, 1.0f, 0.05f);
|
|
i_this->mpMorf->setPlaySpeed(i_this->mAnmSpeed);
|
|
|
|
if (i_this->mTimer[2] == 0 && i_this->mMode < 10 &&
|
|
i_this->mDistFromPlayer < l_HIO.mPlayerRecognitionDist)
|
|
{
|
|
anm_init(i_this, ANM_STEP_2, 2.0f, 2, 3.0f);
|
|
i_this->mMode = 10;
|
|
}
|
|
|
|
move_dansa_check(i_this, i_this->speedF);
|
|
}
|
|
|
|
/* 8066973C-806698D0 001ADC 0194+00 1/1 0/0 0/0 .text do_walk_run__FP8do_class */
|
|
static void do_walk_run(do_class* i_this) {
|
|
i_this->field_0x616 = 1;
|
|
i_this->mTailWagTarget = 3000.0f;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
i_this->mAnmSpeed = 0.25f;
|
|
anm_init(i_this, 22, 10.0f, 2, i_this->mAnmSpeed);
|
|
i_this->mMode++;
|
|
// fallthrough
|
|
|
|
case 1:
|
|
cLib_addCalc2(&i_this->mAnmSpeed, 2.0f, 1.0f, 0.05f);
|
|
i_this->mpMorf->setPlaySpeed(i_this->mAnmSpeed);
|
|
|
|
if (i_this->mAnmSpeed >= 2.0f) {
|
|
i_this->mAction = ACT_RUN;
|
|
i_this->mMode = 0;
|
|
i_this->mSound.startSound(Z2SE_DOG_BARK, 0, -1);
|
|
}
|
|
// fallthrough
|
|
|
|
default:
|
|
cLib_addCalc2(&i_this->speedF, i_this->mAnmSpeed * l_HIO.mWalkSpeed,
|
|
1.0f, 0.2f * l_HIO.mWalkSpeed);
|
|
cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->mTargetAngleY, 8, 0x400);
|
|
|
|
if (i_this->mDistFromPlayer < 160.0f * i_this->mScale.z) {
|
|
if (l_HIO.mWaitType != 0) {
|
|
i_this->mAction = ACT_WAIT_2;
|
|
} else {
|
|
i_this->mAction = ACT_WAIT_1;
|
|
}
|
|
i_this->mMode = 0;
|
|
}
|
|
|
|
area_check(i_this);
|
|
move_dansa_check(i_this, i_this->speedF);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 806698D0-80669A1C 001C70 014C+00 1/1 0/0 0/0 .text do_run__FP8do_class */
|
|
static void do_run(do_class* i_this) {
|
|
i_this->field_0x616 = 1;
|
|
i_this->mTailWagTarget = 4000.0f;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
i_this->mAnmSpeed = 1.0f;
|
|
i_this->mTargetAnmSpeed = cM_rndF(0.1f) + 1.5f;
|
|
anm_init(i_this, 14, 2.0f, 2, 1.2f * i_this->mAnmSpeed);
|
|
i_this->mMode++;
|
|
// fallthrough
|
|
|
|
case 1:
|
|
cLib_addCalc2(&i_this->mAnmSpeed, i_this->mTargetAnmSpeed, 1.0f, 0.02f);
|
|
i_this->mpMorf->setPlaySpeed(i_this->mAnmSpeed);
|
|
|
|
if (i_this->mDistFromPlayer < 320.0f * i_this->mScale.z) {
|
|
i_this->mAction = ACT_RUN_WALK;
|
|
i_this->mMode = 0;
|
|
}
|
|
// fallthrough
|
|
|
|
default:
|
|
cLib_addCalc2(&i_this->speedF, i_this->mAnmSpeed * l_HIO.mRunSpeed * 1.4f,
|
|
1.0f, 0.2f * l_HIO.mRunSpeed);
|
|
cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->mTargetAngleY, 8, 0x800);
|
|
area_check(i_this);
|
|
move_dansa_check(i_this, i_this->speedF);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 80669A1C-80669B80 001DBC 0164+00 1/1 0/0 0/0 .text do_run_walk__FP8do_class */
|
|
static void do_run_walk(do_class* i_this) {
|
|
i_this->field_0x616 = 1;
|
|
i_this->mTailWagTarget = 3000.0f;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
i_this->mAnmSpeed = 4.0f;
|
|
anm_init(i_this, 22, 3.0f, 2, i_this->mAnmSpeed);
|
|
i_this->mMode++;
|
|
// fallthrough
|
|
|
|
case 1:
|
|
cLib_addCalc2(&i_this->mAnmSpeed, 1.5f, 1.0f, 0.05f);
|
|
i_this->mpMorf->setPlaySpeed(i_this->mAnmSpeed);
|
|
// fallthrough
|
|
|
|
default:
|
|
cLib_addCalc2(&i_this->speedF, i_this->mAnmSpeed * l_HIO.mWalkSpeed, 1.0f, 5.0f);
|
|
cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->mTargetAngleY, 8, 0x400);
|
|
|
|
if (i_this->mDistFromPlayer < 160.0f * i_this->mScale.z) {
|
|
if (l_HIO.mWaitType != 0) {
|
|
i_this->mAction = ACT_WAIT_2;
|
|
} else {
|
|
i_this->mAction = ACT_WAIT_1;
|
|
}
|
|
i_this->mMode = 0;
|
|
} else {
|
|
if (i_this->mDistFromPlayer > 360.0f * i_this->mScale.z) {
|
|
i_this->mAction = ACT_RUN;
|
|
i_this->mMode = 0;
|
|
}
|
|
}
|
|
|
|
area_check(i_this);
|
|
move_dansa_check(i_this, i_this->speedF);
|
|
}
|
|
}
|
|
|
|
/* 80669B80-8066A1C4 001F20 0644+00 2/1 0/0 0/0 .text do_wait_1__FP8do_class */
|
|
static void do_wait_1(do_class* i_this) {
|
|
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
|
i_this->field_0x616 = 1;
|
|
i_this->mTailWagTarget = 2000.0f;
|
|
|
|
s16 angle_diff = i_this->current.angle.y - i_this->mTargetAngleY;
|
|
|
|
if (angle_diff < 0) {
|
|
angle_diff *= -1;
|
|
}
|
|
|
|
s16 angle_check = 0x3000;
|
|
if ((i_this->mCounter & 0x7fU) == 0) {
|
|
angle_check = 0x1000;
|
|
}
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
if (i_this->mDistFromPlayer > i_this->mScale.z * 320.0f) {
|
|
anm_init(i_this, ANM_JOYFUL, 5.0f, 2, cM_rndFX(0.1f) + 0.6f);
|
|
i_this->mMode = -1;
|
|
} else {
|
|
anm_init(i_this, ANM_WAIT, 10.0f, 2, 1.0f);
|
|
i_this->mMode++;
|
|
}
|
|
// fallthrough
|
|
|
|
case -1:
|
|
case 1:
|
|
case1:
|
|
if (angle_diff > angle_check) {
|
|
anm_init(i_this, ANM_STEP_2, 2.0f, 2, 3.0f);
|
|
i_this->mMode = 2;
|
|
} else if (i_this->field_0x658 < 75.0f) {
|
|
i_this->mMode = 3;
|
|
i_this->mTimer[0] = cM_rndF(10.0f) + 10.0f;
|
|
} else {
|
|
if (i_this->mDistFromPlayer < i_this->mScale.z * 96.0f) {
|
|
cXyz local_68;
|
|
local_68.x = 0.0f;
|
|
local_68.y = 20.0f;
|
|
|
|
for (int i = 0; i < 20; i++) {
|
|
if (i < 10) {
|
|
cMtx_YrotS(*calc_mtx, i_this->mTargetAngleY + (s16)cM_rndFX(5000.0f));
|
|
} else {
|
|
cMtx_YrotS(*calc_mtx, cM_rndF(65536.0f));
|
|
}
|
|
|
|
local_68.z = -176.0f * i_this->mScale.z;
|
|
|
|
MtxPosition(&local_68, &i_this->mTargetPos);
|
|
i_this->mTargetPos += player->current.pos;
|
|
|
|
if (cM_rndF(1.0f) < 0.2f)
|
|
break;
|
|
|
|
if (dansa_check(i_this, i_this->mTargetPos, 100.0f) == 0)
|
|
break;
|
|
|
|
i_this->mLookPos = i_this->mTargetPos;
|
|
i_this->mLookTimer = 20.0f + cM_rndF(10.0f);
|
|
}
|
|
|
|
i_this->mMode = 5;
|
|
i_this->mRandomTargetAngleY = cM_rndFX(10000.0f);
|
|
|
|
anm_init(i_this, ANM_WALK, 2.0f, 2, -3.0f);
|
|
i_this->mTimer[0] = cM_rndF(10.0f) + 15.0f;
|
|
} else {
|
|
if (i_this->mMode != 6 && i_this->mDistFromPlayer < i_this->mScale.z * 120.0f)
|
|
{
|
|
anm_init(i_this, ANM_JOYFUL, 3.0f, 2, cM_rndFX(0.1f) + 1.0f);
|
|
i_this->mMode = 6;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->mTargetAngleY, 4, 0x400);
|
|
|
|
if (angle_diff < 0x800) {
|
|
i_this->mMode = 0;
|
|
}
|
|
|
|
break;
|
|
|
|
case 3:
|
|
if (i_this->field_0x658 < 75.0f) {
|
|
if (i_this->mTimer[0] == 0) {
|
|
if (i_this->field_0x658 < 30.0f) {
|
|
i_this->mAction = ACT_STAY;
|
|
i_this->mMode = 10;
|
|
} else {
|
|
i_this->mAction = ACT_SIT;
|
|
i_this->mMode = 0;
|
|
}
|
|
}
|
|
} else {
|
|
i_this->mMode = 1;
|
|
}
|
|
break;
|
|
|
|
case 5:
|
|
cLib_addCalcAngleS2(&i_this->current.angle.y,
|
|
i_this->mTargetAngleY + i_this->mRandomAngleY, 4, 0x800);
|
|
cLib_addCalcAngleS2(&i_this->mRandomAngleY, i_this->mRandomTargetAngleY, 4, 0x1000);
|
|
cLib_addCalc2(&i_this->current.pos.x, i_this->mTargetPos.x, 0.2f, 3.5f);
|
|
cLib_addCalc2(&i_this->current.pos.z, i_this->mTargetPos.z, 0.2f, 3.5f);
|
|
|
|
if (i_this->mTimer[0] == 0) {
|
|
i_this->mMode = 0;
|
|
}
|
|
break;
|
|
|
|
case 6:
|
|
i_this->mTailWagTarget = 4000.0f;
|
|
|
|
if (i_this->mDistFromPlayer > i_this->mScale.z * 176.0f) {
|
|
i_this->mMode = 0;
|
|
}
|
|
goto case1;
|
|
|
|
case 10:
|
|
i_this->mAnmSpeed = 5.0f;
|
|
anm_init(i_this, ANM_WALK, 2.0f, 2, i_this->mAnmSpeed);
|
|
|
|
i_this->mMode++;
|
|
// fallthrough
|
|
|
|
case 11:
|
|
cLib_addCalc2(&i_this->mAnmSpeed, 2.0f, 1.0f, 0.2f);
|
|
i_this->mpMorf->setPlaySpeed(i_this->mAnmSpeed);
|
|
|
|
if (i_this->mAnmSpeed <= 2.2f) {
|
|
i_this->mMode = 0;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
cLib_addCalc0(&i_this->speedF, 1.0f, 1.0f);
|
|
|
|
if (i_this->mDistFromPlayer > i_this->mScale.z * 240.0f && !dansa_check2(i_this, 130.0f) &&
|
|
i_this->mMode < 10)
|
|
{
|
|
i_this->mAction = ACT_WALK_RUN;
|
|
i_this->mAnmSpeed = 1.5f;
|
|
anm_init(i_this, ANM_WALK, 5.0f, 2, i_this->mAnmSpeed);
|
|
i_this->mMode = 1;
|
|
}
|
|
|
|
if (daPy_getLinkPlayerActorClass()->checkCanoeRide() && i_this->mDistFromPlayer < 1000.0f) {
|
|
i_this->mAction = ACT_HELP;
|
|
i_this->mMode = 0;
|
|
}
|
|
|
|
if (i_this->mParam0 == 2) {
|
|
f32 distance = i_this->mDistFromPlayer * 0.0215f;
|
|
|
|
if (distance > 127.0f) {
|
|
distance = 127.0f;
|
|
}
|
|
|
|
i_this->mSound.startLevelSound(Z2SE_DOG_V_CALL_HELP, (u8)distance, -1);
|
|
}
|
|
}
|
|
|
|
/* 8066A1C4-8066A3D0 002564 020C+00 1/1 0/0 0/0 .text do_wait_2__FP8do_class */
|
|
static void do_wait_2(do_class* i_this) {
|
|
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
|
|
|
i_this->field_0x616 = 1;
|
|
i_this->mTailWagTarget = 4000.0f;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
i_this->mMode++;
|
|
// fallthrough
|
|
|
|
case 1:
|
|
if (i_this->mTimer[0] == 0) {
|
|
i_this->mTimer[0] = cM_rndF(20.0f) + 10.0f;
|
|
i_this->mRandomTargetAngleY = cM_rndFX(15000.0f);
|
|
|
|
if (cM_rndF(1.0f) < 0.5f) {
|
|
i_this->mAnmSpeed = cM_rndF(0.2f) + 2.0f;
|
|
} else {
|
|
i_this->mAnmSpeed = -(cM_rndF(0.2f) + 2.0f);
|
|
}
|
|
|
|
anm_init(i_this, ANM_STEP, 3.0f, 2, i_this->mAnmSpeed);
|
|
cMtx_YrotS(*calc_mtx, player->shape_angle.y);
|
|
|
|
cXyz local_38;
|
|
|
|
local_38.x = cM_rndFX(100.0f);
|
|
local_38.y = 0.0f;
|
|
local_38.z = cM_rndF(50.0f) + 120.0f;
|
|
|
|
MtxPosition(&local_38, &i_this->mTargetPos);
|
|
i_this->mTargetPos += player->current.pos;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->current.pos.x, i_this->mTargetPos.x, 0.2f, 2.0f);
|
|
cLib_addCalc2(&i_this->current.pos.z, i_this->mTargetPos.z, 0.2f, 2.0f);
|
|
cLib_addCalc0(&i_this->speedF, 1.0f, 2.0f);
|
|
cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->mTargetAngleY + i_this->mRandomAngleY,
|
|
4, 0x800);
|
|
cLib_addCalcAngleS2(&i_this->mRandomAngleY, i_this->mRandomTargetAngleY, 4, 0x1000);
|
|
|
|
if (i_this->mDistFromPlayer > 240.0f * i_this->mScale.z) {
|
|
i_this->mAction = ACT_RUN;
|
|
i_this->mMode = 0;
|
|
}
|
|
|
|
area_check(i_this);
|
|
}
|
|
|
|
/* 8066A3D0-8066A5DC 002770 020C+00 1/1 0/0 0/0 .text do_sit__FP8do_class */
|
|
static void do_sit(do_class* i_this) {
|
|
i_this->field_0x616 = 1;
|
|
i_this->mTailWagTarget = 1000.0f;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
anm_init(i_this, ANM_SIT_WAIT, 10.0f, 2, 1.0f);
|
|
i_this->mMode++;
|
|
// fallthrough
|
|
|
|
case 1:
|
|
if (i_this->field_0x658 > 75.0f) {
|
|
i_this->mMode = 3;
|
|
i_this->mTimer[0] = cM_rndF(10.0f) + 10.0f;
|
|
} else {
|
|
if (i_this->field_0x658 < 30.0f) {
|
|
i_this->mMode = 2;
|
|
i_this->mTimer[0] = cM_rndF(10.0f) + 10.0f;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (i_this->field_0x658 < 30.0f) {
|
|
if (i_this->mTimer[0] == 0) {
|
|
i_this->mAction = ACT_STAY;
|
|
i_this->mMode = 10;
|
|
}
|
|
} else {
|
|
i_this->mMode = 1;
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
if (i_this->field_0x658 > 75.0f) {
|
|
if (i_this->mTimer[0] == 0) {
|
|
anm_init(i_this, ANM_SIT, 3.0f, 0, 1.0f);
|
|
i_this->mMode++;
|
|
}
|
|
} else {
|
|
i_this->mMode = 1;
|
|
}
|
|
|
|
break;
|
|
|
|
case 4:
|
|
if (i_this->mpMorf->isStop()) {
|
|
i_this->mAction = ACT_WAIT_1;
|
|
i_this->mMode = 0;
|
|
}
|
|
break;
|
|
}
|
|
|
|
cLib_addCalc0(&i_this->speedF, 1.0f, 2.0f);
|
|
|
|
if (i_this->mDistFromPlayer > 400.0f * i_this->mScale.z) {
|
|
i_this->mAction = ACT_STAY;
|
|
i_this->field_0x5f4 = 8;
|
|
i_this->mMode = 0;
|
|
}
|
|
|
|
area_check(i_this);
|
|
}
|
|
|
|
/* 8066A5DC-8066A80C 00297C 0230+00 1/1 0/0 0/0 .text hang_set__FP8do_class */
|
|
static s16 hang_set(do_class* i_this) {
|
|
fopAc_ac_c* _this = static_cast<fopAc_ac_c*>(i_this);
|
|
dBgS_LinChk lin_chk;
|
|
cXyz vec1, vec2, vec3[2];
|
|
vec1 = _this->old.pos - _this->current.pos;
|
|
cMtx_YrotS(*calc_mtx, cM_atan2s(vec1.x, vec1.z));
|
|
|
|
vec1.x = 0.0f;
|
|
vec1.y = 0.0f;
|
|
vec1.z = -100.0f;
|
|
MtxPosition(&vec1, &vec2);
|
|
vec2 += _this->current.pos;
|
|
vec2.y = _this->old.pos.y - 5.0f;
|
|
|
|
vec1.x = 10.0f;
|
|
vec1.y = 0.0f;
|
|
vec1.z = 250.0f;
|
|
|
|
for (int i = 0; i < 2; i++) {
|
|
MtxPosition(&vec1, &vec3[i]);
|
|
vec1.x *= -1.0f;
|
|
vec3[i] += vec2;
|
|
lin_chk.Set(&vec2, &vec3[i], _this);
|
|
if (dComIfG_Bgsp().LineCross(&lin_chk)) {
|
|
vec3[i] = lin_chk.GetCross();
|
|
} else {
|
|
return 0xDCF;
|
|
}
|
|
}
|
|
|
|
i_this->mHangPos = vec3[0] + (vec3[1] - vec3[0]) * 0.5f;
|
|
i_this->mHangPos.y = _this->old.pos.y;
|
|
|
|
vec1 = vec3[1] - vec3[0];
|
|
return cM_atan2s(vec1.x, vec1.z) + 0x4000;
|
|
}
|
|
|
|
/* 8066A80C-8066AB78 002BAC 036C+00 1/1 0/0 0/0 .text do_hang__FP8do_class */
|
|
static void do_hang(do_class* i_this) {
|
|
i_this->mTailWagTarget = 3000.0f;
|
|
i_this->field_0x616 = 2;
|
|
cXyz vec1, vec2;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
anm_init(i_this, ANM_CLIFF_WT, 3.0f, 2, 1.0f);
|
|
i_this->mMode++;
|
|
i_this->speedF = 0.0f;
|
|
i_this->mHangSpeed = 0.0f;
|
|
i_this->mTimer[0] = cM_rndF(30.0f) + 30.0f;
|
|
// fallthrough
|
|
|
|
case 1:
|
|
cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->mHangAngleY, 1, 0x1000);
|
|
|
|
if (i_this->mTimer[0] == 0) {
|
|
if (cM_rndF(1.0f) < 0.5f) {
|
|
i_this->speed.y = 0.0f;
|
|
i_this->mMode = 5;
|
|
i_this->mTimer[0] = 3;
|
|
anm_init(i_this, ANM_RUN, 5.0f, 2, 3.0f);
|
|
} else {
|
|
anm_init(i_this, ANM_CLIFF, 2.0f, 0, 1.0f);
|
|
i_this->mMode = 2;
|
|
}
|
|
}
|
|
|
|
cMtx_YrotS(*calc_mtx, i_this->mHangAngleY);
|
|
vec1.x = 0.0f;
|
|
vec1.y = 0.0f;
|
|
vec1.z = i_this->mScale.z * 28.0f;
|
|
MtxPosition(&vec1, &vec2);
|
|
cLib_addCalc2(&i_this->current.pos.x, i_this->mHangPos.x + vec2.x, 1.0f,
|
|
i_this->mHangSpeed);
|
|
cLib_addCalc2(&i_this->current.pos.y, i_this->mHangPos.y + vec2.y, 1.0f,
|
|
i_this->mHangSpeed);
|
|
cLib_addCalc2(&i_this->current.pos.z, i_this->mHangPos.z + vec2.z, 1.0f,
|
|
i_this->mHangSpeed);
|
|
cLib_addCalc2(&i_this->mHangSpeed, 100.0f, 1.0f, 20.0f);
|
|
break;
|
|
|
|
case 2:
|
|
if (i_this->mpMorf->isStop()) {
|
|
i_this->mAction = ACT_STAY;
|
|
i_this->mMode = 13;
|
|
}
|
|
break;
|
|
|
|
case 5:
|
|
cMtx_YrotS(*calc_mtx, i_this->mHangAngleY);
|
|
vec1.x = 0.0f;
|
|
vec1.y = 0.0f;
|
|
vec1.z = i_this->mScale.z * -60.0f;
|
|
MtxPosition(&vec1, &vec2);
|
|
cLib_addCalc2(&i_this->current.pos.x, i_this->mHangPos.x + vec2.x, 1.0f, 15.0f);
|
|
cLib_addCalc2(&i_this->current.pos.z, i_this->mHangPos.z + vec2.z, 1.0f, 15.0f);
|
|
i_this->current.pos.y += i_this->speed.y;
|
|
i_this->speed.y += i_this->gravity;
|
|
|
|
if (i_this->mTimer[0] == 0) {
|
|
i_this->mBgS_Acch.CrrPos(dComIfG_Bgsp());
|
|
if (i_this->mBgS_Acch.ChkGroundHit()) {
|
|
i_this->current.angle.x = 0;
|
|
anm_init(i_this, ANM_DOWN, 2.0f, 0, 2.0f);
|
|
i_this->mMode = 6;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 6:
|
|
if (i_this->mpMorf->isStop()) {
|
|
i_this->mAction = ACT_WAIT_1;
|
|
i_this->mMode = 0;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 8066AB78-8066B650 002F18 0AD8+00 2/1 0/0 0/0 .text do_food__FP8do_class */
|
|
static void do_food(do_class* i_this) {
|
|
fopAc_ac_c* food = fopAcM_SearchByID(i_this->mFoodActorID);
|
|
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
|
cXyz vec;
|
|
s16 angle_step;
|
|
|
|
BOOL end = false;
|
|
if (food == NULL) {
|
|
end = true;
|
|
}
|
|
|
|
if (i_this->mBgS_Acch.ChkWallHit()) {
|
|
i_this->mFoodEndTimer += 2;
|
|
if (i_this->mFoodEndTimer >= 60) {
|
|
end = true;
|
|
}
|
|
} else if (i_this->mFoodEndTimer != 0) {
|
|
i_this->mFoodEndTimer--;
|
|
}
|
|
|
|
if (end) {
|
|
i_this->mAction = ACT_WAIT_1;
|
|
i_this->mMode = 0;
|
|
return;
|
|
}
|
|
|
|
i_this->mTailWagTarget = 4000.0f;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
i_this->mMode++;
|
|
i_this->mTimer[1] = cM_rndF(10.0f) + 10.0f;
|
|
i_this->mTimer[0] = 0;
|
|
// fallthrough
|
|
|
|
case 1:
|
|
i_this->speedF = 0.0f;
|
|
|
|
if (i_this->mTimer[1] == 0) {
|
|
if (i_this->mTimer[0] == 0) {
|
|
if (cM_rndF(1.0f) < 0.5f) {
|
|
anm_init(i_this, ANM_JOYFUL, 3.0f, 2, 1.0f + cM_rndFX(0.1f));
|
|
i_this->mMode = 2;
|
|
i_this->mTimer[0] = cM_rndF(20.0f) + 10.0f;
|
|
} else {
|
|
i_this->mTimer[0] = cM_rndF(20.0f) + 10.0f;
|
|
i_this->mRandomTargetAngleY = cM_rndFX(15000.0f);
|
|
i_this->mAnmSpeed = cM_rndF(0.2f) + 2.0f;
|
|
anm_init(i_this, ANM_STEP, 3.0f, 2, i_this->mAnmSpeed);
|
|
|
|
cMtx_YrotS(*calc_mtx, player->shape_angle.y);
|
|
vec.x = cM_rndFX(100.0f);
|
|
vec.y = 0.0f;
|
|
vec.z = cM_rndF(50.0f) + 120.0f;
|
|
MtxPosition(&vec, &i_this->mTargetPos);
|
|
i_this->mTargetPos += player->current.pos;
|
|
}
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->current.pos.x, i_this->mTargetPos.x, 0.2f, 1.5f);
|
|
cLib_addCalc2(&i_this->current.pos.z, i_this->mTargetPos.z, 0.2f, 1.5f);
|
|
cLib_addCalcAngleS2(&i_this->current.angle.y,
|
|
i_this->mTargetAngleY + i_this->mRandomAngleY, 4, 0x800);
|
|
cLib_addCalcAngleS2(&i_this->mRandomAngleY, i_this->mRandomTargetAngleY, 4, 0x1000);
|
|
}
|
|
|
|
case1and2:
|
|
i_this->field_0x616 = 1;
|
|
|
|
if (fopAcM_CheckFoodStatus(food, fopAcM_FOOD_1)) {
|
|
i_this->mMode = 10;
|
|
i_this->mTimer[0] = cM_rndF(20.0f);
|
|
i_this->mTimer[2] = cM_rndF(50.0f) + 70.0f;
|
|
} else if (fopAcM_CheckFoodStatus(food, fopAcM_FOOD_0)) {
|
|
i_this->mAction = ACT_WAIT_1;
|
|
i_this->mMode = 0;
|
|
} else if (i_this->mDistFromPlayer > 240.0f * i_this->mScale.z) {
|
|
i_this->mAction = ACT_RUN;
|
|
i_this->mMode = 0;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (i_this->mTimer[0] == 0) {
|
|
i_this->mMode = 1;
|
|
}
|
|
goto case1and2;
|
|
|
|
case 10:
|
|
if (i_this->mTimer[0] == 0) {
|
|
i_this->mAnmSpeed = 1.0f;
|
|
i_this->mTargetAnmSpeed = cM_rndF(0.1f) + 1.5f;
|
|
anm_init(i_this, ANM_RUN, 2.0f, 2, 1.2f * i_this->mAnmSpeed);
|
|
i_this->mMode++;
|
|
} else {
|
|
i_this->mLookPos = food->current.pos;
|
|
i_this->mLookTimer = 10;
|
|
break;
|
|
}
|
|
// fallthrough
|
|
|
|
case 11:
|
|
i_this->mLookPos = food->current.pos;
|
|
i_this->mLookTimer = 10;
|
|
|
|
cLib_addCalc2(&i_this->mAnmSpeed, i_this->mTargetAnmSpeed, 1.0f, 0.02f);
|
|
i_this->mpMorf->setPlaySpeed(i_this->mAnmSpeed);
|
|
cLib_addCalc2(&i_this->speedF, i_this->mAnmSpeed * l_HIO.mRunSpeed, 1.0f,
|
|
0.2f * l_HIO.mRunSpeed);
|
|
|
|
vec = food->current.pos - i_this->current.pos;
|
|
angle_step = 0x1000;
|
|
if (vec.abs() < 120.0f * i_this->mScale.z) {
|
|
angle_step = 0x2000;
|
|
cLib_addCalc2(&i_this->speedF, i_this->mAnmSpeed * l_HIO.mRunSpeed * 0.75f, 1.0f,
|
|
0.2f * l_HIO.mRunSpeed * 1.5f);
|
|
}
|
|
cLib_addCalcAngleS2(&i_this->current.angle.y, cM_atan2s(vec.x, vec.z), 8, angle_step);
|
|
|
|
if (fopAcM_CheckFoodStatus(food, fopAcM_FOOD_2)
|
|
|| fopAcM_CheckFoodStatus(food, fopAcM_FOOD_3)
|
|
|| fopAcM_CheckFoodStatus(food, fopAcM_FOOD_4))
|
|
{
|
|
i_this->mMode = 25;
|
|
i_this->mTimer[0] = cM_rndF(20.0f) + 5.0f;
|
|
} else if (vec.abs() < 50.0f * i_this->mScale.z) {
|
|
bool get_item = false;
|
|
if (i_this->mDistFromPlayer > 400.0f
|
|
&& !strcmp(dComIfGp_getStartStageName(), "F_SP116"))
|
|
{
|
|
if (fopAcM_GetRoomNo(i_this) == 4) {
|
|
if (i_this->current.pos.z < -1050.f) {
|
|
get_item = true;
|
|
}
|
|
} else if (fopAcM_GetRoomNo(i_this) == 2) {
|
|
vec.x = -4314.0f - i_this->current.pos.x;
|
|
vec.z = 728.0f - i_this->current.pos.z;
|
|
if (JMAFastSqrt(vec.x * vec.x + vec.z * vec.z) < 300.0f) {
|
|
get_item = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (get_item) {
|
|
int item_no;
|
|
if (dComIfGs_getLife() <= 4) {
|
|
item_no = fpcNm_ITEM_HEART;
|
|
} else {
|
|
int rnd = cM_rndF(11.0f);
|
|
if (rnd <= 5) {
|
|
item_no = fpcNm_ITEM_HEART;
|
|
} else if (rnd <= 9) {
|
|
item_no = fpcNm_ITEM_GREEN_RUPEE;
|
|
} else {
|
|
item_no = fpcNm_ITEM_BLUE_RUPEE;
|
|
}
|
|
}
|
|
|
|
i_this->mItemActorID =
|
|
fopAcM_createItem(&i_this->eyePos, item_no, -1, -1, NULL, NULL, 0);
|
|
i_this->mMode = 25;
|
|
i_this->mTimer[0] = cM_rndF(10.0f) + 5.0f;
|
|
} else {
|
|
i_this->mMode = 20;
|
|
i_this->mFoodInMouth = 1;
|
|
i_this->mAnmSpeed = 4.0f;
|
|
anm_init(i_this, ANM_JOYFUL, 3.0f, 2, 0.3f);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 20:
|
|
i_this->mLookPos = player->current.pos;
|
|
i_this->mLookTimer = 10;
|
|
cLib_addCalc2(&i_this->mAnmSpeed, 1.5f, 1.0f, 0.2f);
|
|
cLib_addCalc2(&i_this->speedF, i_this->mAnmSpeed * l_HIO.mWalkSpeed, 1.0f, 5.0f);
|
|
|
|
if (i_this->mAnmSpeed <= 1.6f) {
|
|
i_this->mTargetAnmSpeed = cM_rndF(0.1f) + 1.5f;
|
|
anm_init(i_this, ANM_RUN, 2.0f, 2, 1.2f * i_this->mAnmSpeed);
|
|
i_this->mMode++;
|
|
}
|
|
|
|
i_this->mFoodInMouth = 1;
|
|
break;
|
|
|
|
case 21:
|
|
i_this->field_0x616 = 1;
|
|
cLib_addCalc2(&i_this->mAnmSpeed, i_this->mTargetAnmSpeed, 1.0f, 0.02f);
|
|
i_this->mpMorf->setPlaySpeed(i_this->mAnmSpeed);
|
|
cLib_addCalc2(&i_this->speedF, i_this->mAnmSpeed * l_HIO.mRunSpeed, 1.0f,
|
|
0.2f * l_HIO.mRunSpeed);
|
|
cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->mTargetAngleY, 8, 0x1000);
|
|
i_this->mFoodInMouth = 1;
|
|
|
|
if (i_this->mDistFromPlayer < 120.0f * i_this->mScale.z) {
|
|
i_this->mAction = ACT_RUN_WALK;
|
|
i_this->mMode = 0;
|
|
food->speedF = 0.0f;
|
|
}
|
|
break;
|
|
|
|
case 25:
|
|
if (i_this->mTimer[0] != 0) {
|
|
if (i_this->mTimer[0] == 1) {
|
|
i_this->mAnmSpeed = cM_rndFX(1.0f) + 3.0f;
|
|
anm_init(i_this, ANM_JOYFUL, 3.0f, 2, 0.3f);
|
|
}
|
|
} else {
|
|
i_this->mLookPos = player->current.pos;
|
|
i_this->mLookTimer = 10;
|
|
cLib_addCalc2(&i_this->mAnmSpeed, 1.5f, 1.0f, 0.1f);
|
|
cLib_addCalc2(&i_this->speedF, i_this->mAnmSpeed * l_HIO.mWalkSpeed, 1.0f, 5.0f);
|
|
|
|
if (i_this->mAnmSpeed <= 1.6f) {
|
|
i_this->mAction = ACT_RUN;
|
|
i_this->mMode = 0;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 8066B650-8066B774 0039F0 0124+00 1/1 0/0 0/0 .text do_swim__FP8do_class */
|
|
static void do_swim(do_class* i_this) {
|
|
cXyz pos;
|
|
i_this->field_0x616 = 1;
|
|
i_this->mTailWagTarget = 2000.0f;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
anm_init(i_this, 19, 5.0f, 2, cM_rndF(0.15f) + 1.3f);
|
|
i_this->mMode++;
|
|
break;
|
|
|
|
case 1:
|
|
break;
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->speedF, l_HIO.mSwimSpeed, 1.0f, 0.5f * l_HIO.mSwimSpeed);
|
|
cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->mTargetAngleY, 16, 0x100);
|
|
|
|
i_this->speed.y = 0.0f;
|
|
i_this->gravity = 0.0f;
|
|
|
|
cLib_addCalc2(&i_this->current.pos.y, i_this->mWaterY - 45.0f, 1.0f, 5.0f);
|
|
|
|
pos = i_this->eyePos;
|
|
pos.y = i_this->mWaterY;
|
|
|
|
fopAcM_effHamonSet(&i_this->mRippleKey, &pos, 0.7f, 0.1f);
|
|
}
|
|
|
|
/* 8066B774-8066B7C0 003B14 004C+00 2/2 0/0 0/0 .text s_c_sub__FPvPv */
|
|
static void* s_c_sub(void* param_0, void* param_1) {
|
|
if (fopAcM_IsActor(param_0) && fopAcM_GetName(param_0) == PROC_CANOE) {
|
|
return param_0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8066B7C0-8066BD3C 003B60 057C+00 1/1 0/0 0/0 .text do_help__FP8do_class */
|
|
static void do_help(do_class* i_this) {
|
|
f32 target_speed = 0.0f;
|
|
i_this->field_0x616 = 1;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
anm_init(i_this, ANM_WALK, 3.0f, 2, 2.0f);
|
|
i_this->mMode++;
|
|
break;
|
|
|
|
case 1:
|
|
target_speed = 5.0f;
|
|
cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->mTargetAngleY, 2, 0x800);
|
|
if (dansa_check2(i_this, 50.0f)) {
|
|
anm_init(i_this, ANM_WAIT, 5.0f, 2, 1.0f);
|
|
i_this->mMode++;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (i_this->mDistFromPlayer < 800.0f) {
|
|
i_this->mTailWagTarget = 1000.0f;
|
|
}
|
|
if (i_this->mDistFromPlayer < 500.0f) {
|
|
i_this->mMode++;
|
|
anm_init(i_this, ANM_JOYFUL, 3.0f, 2, 1.0f);
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
i_this->mTailWagTarget = 2000.0f;
|
|
if (i_this->mDistFromPlayer > 550.0f) {
|
|
anm_init(i_this, ANM_WAIT, 5.0f, 2, 1.0f);
|
|
i_this->mMode = 2;
|
|
}
|
|
|
|
if (i_this->mTimer[2] == 0 && daPy_getLinkPlayerActorClass()->checkCanoeRide()) {
|
|
cXyz vec1, vec2, vec3;
|
|
daCanoe_c* canoe = (daCanoe_c*)fpcM_Search(s_c_sub, i_this);
|
|
if (canoe != NULL) {
|
|
vec3 = i_this->field_0x68c;
|
|
MTXCopy(canoe->getModelMtx(), *calc_mtx);
|
|
vec1.set(0.0f, 52.0f, 150.0f);
|
|
MtxPosition(&vec1, &i_this->field_0x68c);
|
|
i_this->mLookPos = i_this->field_0x68c;
|
|
i_this->mLookTimer = 20;
|
|
vec2 = i_this->field_0x68c - i_this->current.pos;
|
|
vec2.y = 0.0f;
|
|
if ((i_this->field_0x68c - vec3).abs() <= 5.0f && vec2.abs() < 230.0f) {
|
|
i_this->mParam0 = 0;
|
|
i_this->mAction = ACT_BOAT;
|
|
i_this->mMode = 0;
|
|
anm_init(i_this, ANM_DEFEND, 10.0f, 0, 1.0f);
|
|
i_this->mTimer[0] = 20;
|
|
}
|
|
}
|
|
i_this->mTargetAngleY = cM_atan2s(vec2.x, vec2.z);
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->mTargetAngleY, 4, 0x400);
|
|
break;
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->speedF, target_speed, 1.0f, 2.0f);
|
|
|
|
if (!daPy_getLinkPlayerActorClass()->checkCanoeRide() && i_this->mDistFromPlayer < 200.0f) {
|
|
i_this->mAction = ACT_WAIT_1;
|
|
i_this->mMode = 0;
|
|
}
|
|
|
|
if (i_this->mParam0 == 2) {
|
|
f32 fvar2 = i_this->mDistFromPlayer * 0.0215f;
|
|
if (fvar2 > 127.0f) {
|
|
fvar2 = 127.0f;
|
|
}
|
|
i_this->mSound.startLevelSound(Z2SE_DOG_V_CALL_HELP, (u8)fvar2, -1);
|
|
}
|
|
}
|
|
|
|
/* 8066BD3C-8066C894 0040DC 0B58+00 2/1 0/0 0/0 .text do_boat__FP8do_class */
|
|
static s8 do_boat(do_class* i_this) {
|
|
fopAc_ac_c* _this = static_cast<fopAc_ac_c*>(i_this);
|
|
s8 ret = 1;
|
|
i_this->mCcDisableTimer = 10;
|
|
f32 fvar3;
|
|
|
|
daCanoe_c* canoe = (daCanoe_c*)fpcM_Search(s_c_sub, i_this);
|
|
if (canoe == NULL) {
|
|
return 1;
|
|
}
|
|
|
|
cXyz vec1, vec2;
|
|
s16 canoe_angle = canoe->shape_angle.y;
|
|
vec2 = i_this->field_0x68c;
|
|
MTXCopy(canoe->getModelMtx(), *calc_mtx);
|
|
vec1.set(0.0f, 52.0f, 150.0f);
|
|
MtxPosition(&vec1, &i_this->field_0x68c);
|
|
f32 fvar4 = (i_this->field_0x68c - vec2).abs();
|
|
if (!daPy_getLinkPlayerActorClass()->checkCanoeRide() && (i_this->mCounter & 0x200) != 0) {
|
|
fvar4 = 5.0f;
|
|
}
|
|
s8 bvar2 = false;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
if (daDo_other_bg_check2(i_this, &i_this->field_0x68c)) {
|
|
i_this->mAction = ACT_HELP;
|
|
i_this->mMode = 0;
|
|
_this->speedF = 0.0f;
|
|
i_this->mTimer[2] = 50;
|
|
break;
|
|
}
|
|
|
|
if (i_this->mTimer[0] == 2) {
|
|
anm_init(i_this, ANM_RUN, 2.0f, 0, 2.0f);
|
|
}
|
|
|
|
if (i_this->mTimer[0] != 0) {
|
|
break;
|
|
}
|
|
|
|
i_this->mMode++;
|
|
_this->speed.y = 30.0f;
|
|
_this->speedF = 0.0f;
|
|
i_this->mSound.startSound(Z2SE_DOG_V_JUMP, 0, -1);
|
|
i_this->mTimer[1] = 7;
|
|
// fallthrough
|
|
|
|
case 1:
|
|
if (i_this->mTimer[1] != 0) {
|
|
ret = 0;
|
|
}
|
|
|
|
vec1 = i_this->field_0x68c - _this->current.pos;
|
|
fvar3 = vec1.abs();
|
|
cMtx_YrotS(*calc_mtx, cM_atan2s(vec1.x, vec1.z));
|
|
vec1.x = 0.0f;
|
|
vec1.y = 0.0f;
|
|
vec1.z = fvar3 * 0.075f + 10.0f;
|
|
MtxPosition(&vec1, &i_this->field_0x698);
|
|
|
|
cLib_addCalc2(&i_this->current.pos.x, i_this->field_0x68c.x, 1.0f,
|
|
fabsf(i_this->field_0x698.x) + 2.0f);
|
|
cLib_addCalc2(&i_this->current.pos.z, i_this->field_0x68c.z, 1.0f,
|
|
fabsf(i_this->field_0x698.z) + 2.0f);
|
|
|
|
if (_this->speed.y <= -80.0f) {
|
|
_this->speed.y = -80.0f;
|
|
}
|
|
|
|
if (_this->current.pos.y <= i_this->field_0x68c.y) {
|
|
_this->current.pos.y = i_this->field_0x68c.y;
|
|
_this->speed.y = 0.0f;
|
|
}
|
|
|
|
if ((i_this->field_0x68c - _this->current.pos).abs() <= 5.0f) {
|
|
i_this->mMode = 2;
|
|
anm_init(i_this, ANM_STEP_2, 3.0f, 2, 3.0f);
|
|
} else {
|
|
break;
|
|
}
|
|
// fallthrough
|
|
|
|
case 2:
|
|
ret = 0;
|
|
|
|
i_this->field_0x616 = 1;
|
|
_this->speed.y = 0.0f;
|
|
_this->gravity = 0.0f;
|
|
_this->current.pos = i_this->field_0x68c;
|
|
cLib_addCalcAngleS2(&_this->current.angle.y, i_this->mTargetAngleY, 2, 0x800);
|
|
_this->current.angle.x = 2700;
|
|
|
|
if (i_this->mAnmID == ANM_STEP_2) {
|
|
s16 angle = i_this->mTargetAngleY - _this->current.angle.y;
|
|
if (angle < 0x800 && angle > -0x800) {
|
|
anm_init(i_this, ANM_JOYFUL, 3.0f, 2, 1.0f);
|
|
}
|
|
} else if (i_this->mAnmID == ANM_JOYFUL && fvar4 > 3.0f) {
|
|
i_this->mMode = 3;
|
|
anm_init(i_this, ANM_STEP_2, 3.0f, 2, 4.0f);
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
ret = 0;
|
|
|
|
if (i_this->mTimer[0] == 0) {
|
|
i_this->mTimer[0] = cM_rndF(70.0f) + 50.0f;
|
|
cMtx_YrotS(*calc_mtx, _this->shape_angle.y);
|
|
vec1.x = cM_rndFX(2000.0f);
|
|
vec1.y = cM_rndF(50.0f) + 50.0f;
|
|
vec1.z = 2000.0f;
|
|
MtxPosition(&vec1, &i_this->mLookPos);
|
|
i_this->mLookPos += _this->current.pos;
|
|
}
|
|
|
|
i_this->mLookTimer = 2;
|
|
_this->speed.y = 0.0f;
|
|
_this->gravity = 0.0f;
|
|
_this->current.pos = i_this->field_0x68c;
|
|
cLib_addCalcAngleS2(&_this->current.angle.y, canoe_angle, 2, 0x800);
|
|
_this->current.angle.x = -2700;
|
|
|
|
if (i_this->mAnmID == ANM_STEP_2) {
|
|
s16 angle = canoe_angle - _this->current.angle.y;
|
|
if (angle < 0x800 && angle > -0x800) {
|
|
anm_init(i_this, ANM_WAIT, 3.0f, 2, 1.0f);
|
|
}
|
|
} else if (i_this->mAnmID == ANM_WAIT && fvar4 < 10.0f) {
|
|
bvar2 = 1;
|
|
if (fvar4 < 1.0f) {
|
|
i_this->mMode = 2;
|
|
anm_init(i_this, ANM_STEP_2, 3.0f, 2, 4.0f);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 5:
|
|
anm_init(i_this, ANM_DEFEND, 10.0f, 0, 1.0f);
|
|
i_this->mTimer[0] = 20;
|
|
i_this->mMode++;
|
|
// fallthrough
|
|
|
|
case 6:
|
|
ret = 0;
|
|
i_this->mLookPos = i_this->mTargetPos;
|
|
i_this->mLookTimer = 2;
|
|
_this->speed.y = 0.0f;
|
|
_this->gravity = 0.0f;
|
|
_this->current.pos = i_this->field_0x68c;
|
|
vec1 = i_this->mTargetPos - _this->current.pos;
|
|
cLib_addCalcAngleS2(&_this->current.angle.y, cM_atan2s(vec1.x, vec1.z), 2, 0x800);
|
|
|
|
if (i_this->mTimer[0] == 2) {
|
|
anm_init(i_this, ANM_RUN, 2.0f, 0, 2.0f);
|
|
}
|
|
|
|
if (i_this->mTimer[0] == 0) {
|
|
i_this->mMode++;
|
|
_this->speed.y = 30.0f;
|
|
_this->speedF = 30.0f;
|
|
_this->current.angle.x = 0;
|
|
i_this->mSound.startSound(Z2SE_DOG_V_JUMP, 0, -1);
|
|
}
|
|
break;
|
|
|
|
case 7:
|
|
if (i_this->mBgS_Acch.ChkGroundHit()) {
|
|
i_this->mAction = ACT_HELP;
|
|
i_this->mMode = 0;
|
|
_this->speedF = 0.0f;
|
|
i_this->mTimer[2] = 100;
|
|
}
|
|
break;
|
|
}
|
|
|
|
if (bvar2) {
|
|
i_this->field_0xc84 = _this->current.pos;
|
|
i_this->field_0xc84.y += 40.0f;
|
|
cMtx_YrotS(*calc_mtx, canoe->shape_angle.y);
|
|
vec1.x = 0.0f;
|
|
vec1.y = 0.0f;
|
|
vec1.z = 250.0f;
|
|
MtxPosition(&vec1, &i_this->field_0xc90);
|
|
i_this->field_0xc90 += i_this->field_0xc84;
|
|
i_this->field_0xc9c = i_this->field_0xc90;
|
|
i_this->field_0xc9c.y += -100.0f;
|
|
vec1.x = 0.0f;
|
|
vec1.y = 0.0f;
|
|
vec1.z = 180.0f;
|
|
MtxPosition(&vec1, &i_this->field_0xca8);
|
|
i_this->field_0xca8 += i_this->field_0xc84;
|
|
i_this->field_0xcb4 = i_this->field_0xca8;
|
|
i_this->field_0xcb4.y += -100.0f;
|
|
|
|
dBgS_LinChk lin_chk;
|
|
lin_chk.Set(&i_this->field_0xc84, &i_this->field_0xc90, _this);
|
|
i_this->field_0xc80 = true;
|
|
if (!dComIfG_Bgsp().LineCross(&lin_chk)) {
|
|
lin_chk.Set(&i_this->field_0xca8, &i_this->field_0xcb4, _this);
|
|
if (dComIfG_Bgsp().LineCross(&lin_chk)) {
|
|
lin_chk.Set(&i_this->field_0xc90, &i_this->field_0xc9c, _this);
|
|
if (dComIfG_Bgsp().LineCross(&lin_chk)) {
|
|
i_this->field_0xc80 = false;
|
|
i_this->mTargetPos = lin_chk.GetCross();
|
|
i_this->mMode = 5;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 8066C894-8066CAA8 004C34 0214+00 1/1 0/0 0/0 .text do_a_swim__FP8do_class */
|
|
static void do_a_swim(do_class* i_this) {
|
|
i_this->mTailWagTarget = 2000.0f;
|
|
cLib_addCalc0(&i_this->speedF, 1.0f, 1.0f);
|
|
JPABaseEmitter* emitter;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
if (l_HIO.mWaterHuntAnimType == 1) {
|
|
anm_init(i_this, ANM_JOYFUL, 5.0f, 2, 1.0f);
|
|
} else {
|
|
anm_init(i_this, ANM_BULBUL, 5.0f, 2, 1.0f);
|
|
}
|
|
|
|
i_this->mMode = 1;
|
|
i_this->mTimer[0] = 20;
|
|
|
|
emitter = dComIfGp_particle_set(0x2a3, &i_this->current.pos, 0, 0);
|
|
|
|
if (emitter) {
|
|
emitter->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(2));
|
|
cXyz _pos(0.6f, 0.6f, 0.6f);
|
|
JGeometry::TVec3<f32> pos;
|
|
JGeometry::setTVec3f(&_pos.x, &pos.x);
|
|
emitter->setGlobalScale(pos);
|
|
}
|
|
// fallthrough
|
|
|
|
case 1:
|
|
if (i_this->mTimer[0] == 0) {
|
|
i_this->mMode = 2;
|
|
i_this->mShakeSpeed = 0.1f;
|
|
i_this->mShakeTargetSpeed = 1.0f;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (l_HIO.mWaterHuntAnimType == 1) {
|
|
i_this->mpMorf->setPlaySpeed(i_this->mShakeSpeed * 5.0f);
|
|
} else {
|
|
i_this->mpMorf->setPlaySpeed(i_this->mShakeSpeed * 5.0f);
|
|
}
|
|
|
|
if (i_this->mShakeSpeed <= 0.025f) {
|
|
i_this->mShakeSpeed = 0.0f;
|
|
i_this->mAction = ACT_WAIT_1;
|
|
i_this->mMode = 0;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 8066CAA8-8066CDEC 004E48 0344+00 1/1 0/0 0/0 .text do_carry__FP8do_class */
|
|
static s8 do_carry(do_class* i_this) {
|
|
fopAc_ac_c* _this = static_cast<fopAc_ac_c*>(i_this);
|
|
s8 ret = 0;
|
|
i_this->mCcDisableTimer = 5;
|
|
_this->speed.y = 0.0f;
|
|
_this->speedF = 0.0f;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
anm_init(i_this, ANM_TO_CARRY_B, 1.0f, 0,
|
|
daPy_getLinkPlayerActorClass()->getBaseAnimeFrameRate());
|
|
i_this->mpMorf->setFrame(daPy_getLinkPlayerActorClass()->getBaseAnimeFrame());
|
|
i_this->mTimer[0] = 20;
|
|
i_this->mMode++;
|
|
break;
|
|
|
|
case 1:
|
|
if (i_this->mpMorf->checkFrame(10.0f)) {
|
|
i_this->mSound.startSound(Z2SE_DOG_CARRIED, 0, -1);
|
|
}
|
|
|
|
if (daPy_getLinkPlayerActorClass()->getGrabPutStart()) {
|
|
anm_init(i_this, ANM_TO_CARRY_B, 1.0f, 0,
|
|
daPy_getLinkPlayerActorClass()->getBaseAnimeFrameRate());
|
|
i_this->mpMorf->setFrame(daPy_getLinkPlayerActorClass()->getBaseAnimeFrame());
|
|
i_this->mMode++;
|
|
}
|
|
break;
|
|
}
|
|
|
|
if (!fopAcM_checkCarryNow(_this)) {
|
|
i_this->mAction = ACT_WAIT_1;
|
|
i_this->mMode = 0;
|
|
|
|
dBgS_GndChk gnd_chk;
|
|
cXyz vec = _this->current.pos;
|
|
vec.y += 50.0f;
|
|
gnd_chk.SetPos(&vec);
|
|
if (fabsf(_this->current.pos.y - dComIfG_Bgsp().GroundCross(&gnd_chk)) < 30.0f) {
|
|
_this->current.pos.y = dComIfG_Bgsp().GroundCross(&gnd_chk);
|
|
_this->gravity = 0.0f;
|
|
}
|
|
}
|
|
|
|
i_this->mTailWagTarget = 1000.0f;
|
|
_this->speedF = 0.0f;
|
|
|
|
if (i_this->mTimer[0] != 0) {
|
|
ret = 1;
|
|
_this->speed.y = -0.1f;
|
|
} else {
|
|
_this->speed.y = 0.0f;
|
|
}
|
|
|
|
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
|
dBgS_LinChk lin_chk;
|
|
cXyz vec = _this->current.pos;
|
|
vec.y += 2.0f;
|
|
lin_chk.Set(&player->eyePos, &vec, _this);
|
|
if (dComIfG_Bgsp().LineCross(&lin_chk)) {
|
|
_this->current.pos = lin_chk.GetCross();
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 8066CDEC-8066CEC4 00518C 00D8+00 1/1 0/0 0/0 .text do_message__FP8do_class */
|
|
static void do_message(do_class* i_this) {
|
|
i_this->mTailWagTarget = 2000.0f;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
anm_init(i_this, 21, 5.0f, 2, 1.0f);
|
|
i_this->mMode++;
|
|
break;
|
|
|
|
case 1:
|
|
break;
|
|
}
|
|
|
|
cLib_addCalc0(&i_this->speedF, 1.0f, 2.0f);
|
|
i_this->field_0x616 = 1;
|
|
cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->mTargetAngleY, 2, 0x1000);
|
|
|
|
if (!dComIfGp_event_runCheck() && i_this->mDistFromPlayer > 400.0f) {
|
|
i_this->mAction = ACT_STAY;
|
|
i_this->mMode = 0;
|
|
}
|
|
}
|
|
|
|
/* 8066CEC4-8066DD48 005264 0E84+00 2/1 0/0 0/0 .text action__FP8do_class */
|
|
static void action(do_class* i_this) {
|
|
fopAc_ac_c* _this = static_cast<fopAc_ac_c*>(i_this);
|
|
cXyz vec1, vec2;
|
|
daPy_py_c* player = static_cast<daPy_py_c*>(dComIfGp_getPlayer(0));
|
|
|
|
_this->gravity = -7.0f;
|
|
|
|
i_this->mDistFromPlayer = fopAcM_searchPlayerDistance(_this);
|
|
if (daPy_getPlayerActorClass()->checkHorseRide()) {
|
|
i_this->mDistFromPlayer -= 100.0f;
|
|
}
|
|
|
|
i_this->mTargetAngleY = fopAcM_searchPlayerAngleY(_this);
|
|
|
|
i_this->field_0x658 = fabsf(player->eyePos.y - player->current.pos.y);
|
|
if (!mDoCPd_c::getHoldR(PAD_1) || fabsf(_this->current.pos.y - player->current.pos.y) > 50.0f) {
|
|
i_this->field_0x658 = 300.0f;
|
|
}
|
|
i_this->field_0x658 *= 0.6f;
|
|
|
|
s8 ground_check = 1;
|
|
s8 carry_check = 1;
|
|
s8 swim_check = 1;
|
|
|
|
i_this->mCcSph.OnCoSetBit();
|
|
|
|
if (i_this->field_0x608 < 1.0f) {
|
|
i_this->mMessageState = 0;
|
|
|
|
switch (i_this->mAction) {
|
|
case ACT_STAY:
|
|
do_stay(i_this);
|
|
food_check(i_this);
|
|
i_this->mMessageState = 1;
|
|
break;
|
|
case ACT_WALK:
|
|
do_walk(i_this);
|
|
food_check(i_this);
|
|
i_this->mMessageState = 1;
|
|
break;
|
|
case ACT_WALK_RUN:
|
|
do_walk_run(i_this);
|
|
food_check(i_this);
|
|
i_this->mMessageState = 1;
|
|
break;
|
|
case ACT_RUN:
|
|
do_run(i_this);
|
|
food_check(i_this);
|
|
i_this->mMessageState = 1;
|
|
break;
|
|
case ACT_RUN_WALK:
|
|
do_run_walk(i_this);
|
|
food_check(i_this);
|
|
i_this->mMessageState = 1;
|
|
break;
|
|
case ACT_FOOD:
|
|
do_food(i_this);
|
|
i_this->mMessageState = 1;
|
|
break;
|
|
case ACT_WAIT_1:
|
|
do_wait_1(i_this);
|
|
food_check(i_this);
|
|
i_this->mMessageState = 1;
|
|
break;
|
|
case ACT_WAIT_2:
|
|
do_wait_2(i_this);
|
|
food_check(i_this);
|
|
i_this->mMessageState = 1;
|
|
break;
|
|
case ACT_SIT:
|
|
do_sit(i_this);
|
|
food_check(i_this);
|
|
i_this->mMessageState = 1;
|
|
break;
|
|
case ACT_A_SWIM:
|
|
do_a_swim(i_this);
|
|
break;
|
|
case ACT_SWIM:
|
|
do_swim(i_this);
|
|
swim_check = 0;
|
|
fopAcM_riverStream(&_this->current.pos, &i_this->field_0x6b0, &i_this->field_0x6b4,
|
|
0.5f);
|
|
break;
|
|
case ACT_HELP:
|
|
do_help(i_this);
|
|
break;
|
|
case ACT_BOAT:
|
|
ground_check = do_boat(i_this);
|
|
break;
|
|
case ACT_HANG:
|
|
do_hang(i_this);
|
|
break;
|
|
case ACT_CARRY:
|
|
ground_check = do_carry(i_this);
|
|
i_this->mCcSph.OffCoSetBit();
|
|
carry_check = 0;
|
|
break;
|
|
case ACT_MESSAGE:
|
|
do_message(i_this);
|
|
i_this->mMessageState = 2;
|
|
}
|
|
}
|
|
|
|
if (i_this->mItemActorID != -1 && i_this->mDistFromPlayer < 160.0f * i_this->mScale.z) {
|
|
daItem_c* item = static_cast<daItem_c*>(fopAcM_SearchByID(i_this->mItemActorID));
|
|
|
|
if (item) {
|
|
item->endControl();
|
|
}
|
|
|
|
i_this->mItemControlTimer = 0;
|
|
i_this->mItemActorID = -1;
|
|
}
|
|
|
|
if (i_this->mRunningSoundTimer != 0) {
|
|
i_this->mRunningSoundTimer--;
|
|
if (i_this->mRunningSoundTimer == 0) {
|
|
i_this->mSound.startSound(Z2SE_M007_DOG_COME_RUNNING, 0, -1);
|
|
}
|
|
}
|
|
|
|
if (i_this->mMessageState == 1 && daPy_py_c::checkNowWolf()
|
|
&& i_this->mDistFromPlayer < 300.0f)
|
|
{
|
|
i_this->mAction = ACT_MESSAGE;
|
|
i_this->mMode = 0;
|
|
}
|
|
|
|
if (carry_check && player->speedF < 2.0f) {
|
|
cLib_onBit<u32>(_this->attention_info.flags, 0x10);
|
|
|
|
if (do_carry_check(i_this)) {
|
|
return;
|
|
}
|
|
} else {
|
|
cLib_offBit<u32>(_this->attention_info.flags, 0x10);
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&_this->current.angle.x, 0, 1, 0x400);
|
|
|
|
if (i_this->mAction != ACT_HANG) {
|
|
cMtx_YrotS(*calc_mtx, _this->current.angle.y);
|
|
|
|
vec1.x = 0.0f;
|
|
vec1.y = 0.0f;
|
|
vec1.z = _this->speedF * 0.8f * i_this->mScale.z * l_HIO.mBaseSize;
|
|
|
|
MtxPosition(&vec1, &vec2);
|
|
|
|
_this->speed.x = vec2.x;
|
|
_this->speed.z = vec2.z;
|
|
_this->speed.y += _this->gravity;
|
|
|
|
_this->current.pos += _this->speed;
|
|
|
|
if (_this->speed.y < -80.0f) {
|
|
_this->speed.y = -80.0f;
|
|
}
|
|
|
|
if (!fopAcM_checkCarryNow(_this)) {
|
|
cXyz* cc_move = i_this->mStts.GetCCMoveP();
|
|
if (cc_move != NULL) {
|
|
_this->current.pos.x += 0.3f * cc_move->x;
|
|
_this->current.pos.z += 0.3f * cc_move->z;
|
|
}
|
|
}
|
|
|
|
if (i_this->field_0x608 > 1.0f) {
|
|
vec1.x = 0.0f;
|
|
vec1.y = 0.0f;
|
|
vec1.z = -i_this->field_0x608;
|
|
|
|
cMtx_YrotS(*calc_mtx, i_this->field_0x60c);
|
|
MtxPosition(&vec1, &vec2);
|
|
|
|
_this->current.pos += vec2;
|
|
cLib_addCalc0(&i_this->field_0x608, 1.0f, 6.0f);
|
|
|
|
_this->speedF = 0.0f;
|
|
ground_check = 1;
|
|
}
|
|
|
|
if (ground_check) {
|
|
i_this->mBgS_AcchCir.SetWall(30.0f,
|
|
fabsf(_this->speedF) + fabsf(i_this->field_0x608) + 30.0f);
|
|
i_this->mBgS_Acch.CrrPos(dComIfG_Bgsp());
|
|
|
|
if (i_this->mBgS_Acch.ChkGroundHit() && !noFallCheck && !fopAcM_checkCarryNow(_this))
|
|
{
|
|
dBgS_GndChk gnd_chk;
|
|
|
|
cMtx_YrotS(*calc_mtx, _this->shape_angle.y);
|
|
|
|
vec1.x = 0.0f;
|
|
vec1.y = 0.0f;
|
|
vec1.z = -25.0f * i_this->mScale.z;
|
|
|
|
MtxPosition(&vec1, &vec2);
|
|
vec2 += _this->current.pos;
|
|
|
|
Vec pos;
|
|
pos.x = vec2.x;
|
|
pos.y = vec2.y + 100.0f;
|
|
pos.z = vec2.z;
|
|
|
|
gnd_chk.SetPos(&pos);
|
|
vec2.y = dComIfG_Bgsp().GroundCross(&gnd_chk);
|
|
|
|
vec1 = vec2 - _this->current.pos;
|
|
|
|
if (fabsf(vec1.y) < 50.0f) {
|
|
_this->current.angle.x =
|
|
cM_atan2s(vec1.y, JMAFastSqrt(vec1.x * vec1.x + vec1.z * vec1.z));
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (i_this->field_0x608 < 1.0f && dansa_check(i_this, _this->current.pos, 100.0f) > 0) {
|
|
i_this->mHangAngleY = hang_set(i_this);
|
|
|
|
if (i_this->mHangAngleY != 0xdcf) {
|
|
i_this->mAction = ACT_HANG;
|
|
i_this->mMode = 0;
|
|
i_this->mASwimTimer = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
water_check(i_this);
|
|
|
|
if (swim_check) {
|
|
if (i_this->mAction != ACT_CARRY) {
|
|
if (i_this->mASwimTimer != 0) {
|
|
i_this->mASwimTimer--;
|
|
if (i_this->mASwimTimer == 0) {
|
|
i_this->mAction = ACT_A_SWIM;
|
|
i_this->mMode = 0;
|
|
}
|
|
}
|
|
|
|
if (i_this->mWaterY - _this->current.pos.y > 45.0f) {
|
|
i_this->mAction = ACT_SWIM;
|
|
i_this->mMode = 0;
|
|
i_this->field_0x608 = 0.0f;
|
|
|
|
if (i_this->mSwimEffectTimer == 0) {
|
|
i_this->mSwimEffectTimer = 20;
|
|
cXyz pos = _this->current.pos;
|
|
pos.y = i_this->mWaterY;
|
|
|
|
static cXyz scc(0.7f, 0.7f, 0.7f);
|
|
static u16 w_eff_id[4] = {0x1B8, 0x1B9, 0x1BA, 0x1BB};
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
i_this->mParticleKey[i] =
|
|
dComIfGp_particle_set(i_this->mParticleKey[i], w_eff_id[i], &pos,
|
|
&_this->tevStr, NULL, &scc, 0xff, NULL, -1,
|
|
NULL, NULL, NULL);
|
|
}
|
|
|
|
i_this->mSound.startSound(Z2SE_CM_BODYFALL_WATER_S, 0, -1);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
i_this->mASwimTimer = cM_rndF(25.0f) + 30.0f;
|
|
|
|
if (i_this->mWaterY - _this->current.pos.y < 35.0f) {
|
|
i_this->mAction = ACT_WAIT_1;
|
|
i_this->mMode = 0;
|
|
}
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&_this->shape_angle.y, _this->current.angle.y, 2, 0x2000);
|
|
cLib_addCalcAngleS2(&_this->shape_angle.x, _this->current.angle.x, 4, 0x1000);
|
|
_this->shape_angle.z = _this->current.angle.z;
|
|
|
|
s16 head_angle_y = 0;
|
|
s16 head_angle_x = 0;
|
|
|
|
if (i_this->field_0x616 != 0 || i_this->mLookTimer != 0) {
|
|
if (i_this->field_0x616 == 2) {
|
|
if (i_this->mCounter & 8) {
|
|
head_angle_y = 10000;
|
|
} else {
|
|
head_angle_y = -10000;
|
|
}
|
|
} else {
|
|
if (i_this->mLookTimer != 0) {
|
|
i_this->mLookTimer--;
|
|
vec1 = i_this->mLookPos - _this->eyePos;
|
|
} else {
|
|
vec1 = player->eyePos - _this->eyePos;
|
|
}
|
|
|
|
vec1.y += i_this->mScale.z * -16.0f;
|
|
|
|
head_angle_y = cM_atan2s(vec1.x, vec1.z) - _this->shape_angle.y;
|
|
head_angle_x = _this->shape_angle.x +
|
|
cM_atan2s(vec1.y, JMAFastSqrt(vec1.x * vec1.x + vec1.z * vec1.z));
|
|
|
|
if (i_this->mLookTimer == 0 && (head_angle_y > 24000 || head_angle_y < -24000)) {
|
|
head_angle_y = 0;
|
|
}
|
|
|
|
if (head_angle_y > 12000) {
|
|
head_angle_y = 12000;
|
|
} else if (head_angle_y < -12000) {
|
|
head_angle_y = -12000;
|
|
}
|
|
|
|
if (head_angle_x > 12000) {
|
|
head_angle_x = 12000;
|
|
} else if (head_angle_x < -12000) {
|
|
head_angle_x = -12000;
|
|
}
|
|
|
|
head_angle_y += i_this->mHeadTilt;
|
|
}
|
|
|
|
i_this->field_0x616 = 0;
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&i_this->mHeadAngle.y, head_angle_y / 2, 4, 0x2000);
|
|
cLib_addCalcAngleS2(&i_this->mHeadAngle.x, head_angle_x / 2, 4, 0x2000);
|
|
cLib_addCalcAngleS2(&i_this->mHeadTilt, 0, 2, 0x300);
|
|
cLib_addCalcAngleS2(&i_this->mHeadBob.y, i_this->mHeadBobTarget.y, 4, 0x400);
|
|
cLib_addCalcAngleS2(&i_this->mHeadBob.z, i_this->mHeadBobTarget.z, 4, 0x400);
|
|
|
|
if (fabsf(player->speedF) < 2.0f && fabsf(_this->speedF) < 2.0f) {
|
|
if (i_this->mHeadBobTimer != 0) {
|
|
i_this->mHeadBobTimer--;
|
|
if (i_this->mHeadBobTimer == 0) {
|
|
i_this->mHeadBobTimer = cM_rndF(100.0f) + 20.0f;
|
|
|
|
if (cM_rndF(1.0f) < 0.5f) {
|
|
i_this->mHeadBobTarget.y = cM_rndFX(2000.0f);
|
|
}
|
|
|
|
if (cM_rndF(1.0f) < 0.5f) {
|
|
i_this->mHeadBobTarget.z = cM_rndFX(2000.0f);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
i_this->mHeadBobTarget.z = 0;
|
|
i_this->mHeadBobTarget.y = 0;
|
|
i_this->mHeadBobTimer = cM_rndF(60.0f) + 80.0f;
|
|
}
|
|
|
|
if (i_this->mShakeSpeed >= 0.025f) {
|
|
if (l_HIO.mWaterHuntAnimType != 0) {
|
|
f32 fvar17 = i_this->mShakeSpeed * 3000.0f;
|
|
i_this->mHeadAngle.y = fvar17 * cM_ssin(i_this->mCounter * 22000) * 0.5f;
|
|
i_this->mHeadAngle.z = fvar17 * cM_ssin(i_this->mCounter * 25000);
|
|
} else {
|
|
i_this->mHeadAngle.z = 0;
|
|
i_this->mHeadAngle.y = 0;
|
|
}
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->mShakeSpeed, i_this->mShakeTargetSpeed, 1.0f, 0.15f);
|
|
cLib_addCalc0(&i_this->mShakeTargetSpeed, 1.0f, 0.04f);
|
|
|
|
i_this->mTailAngle.y = i_this->mTailWag * cM_ssin(i_this->mTailPhaseY);
|
|
i_this->mTailAngle.x = i_this->mTailWag * cM_ssin(i_this->mTailPhaseX) * 0.5f;
|
|
|
|
i_this->mTailPhaseY += i_this->mTailWag * 2.0f;
|
|
if (i_this->mTailPhaseY > 65536.0f) {
|
|
i_this->mTailPhaseY -= 65536.0f;
|
|
}
|
|
|
|
i_this->mTailPhaseX += i_this->mTailWag * 1.5f;
|
|
if (i_this->mTailPhaseX > 65536.0f) {
|
|
i_this->mTailPhaseX -= 65536.0f;
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->mTailWag, i_this->mTailWagTarget, 1.0f, 100.0f);
|
|
i_this->mTailWagTarget = 0.0f;
|
|
|
|
if (i_this->mBtpReset != 0) {
|
|
cLib_addCalcAngleS2(&i_this->mBtpFrame, 3, 1, 1);
|
|
i_this->mBtpReset = 0;
|
|
i_this->mBtpTimer = 60;
|
|
} else {
|
|
if (i_this->mBtpTimer == 0) {
|
|
i_this->mBtpTimer = cM_rndF(100.0f) + 30.0f;
|
|
} else {
|
|
i_this->mBtpTimer--;
|
|
if (i_this->mBtpTimer <= 5) {
|
|
i_this->mBtpFrame = 5 - i_this->mBtpTimer;
|
|
} else {
|
|
i_this->mBtpFrame = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 8066DD48-8066DE64 0060E8 011C+00 1/1 0/0 0/0 .text message__FP8do_class */
|
|
static void message(do_class* i_this) {
|
|
if (i_this->mIsTalking) {
|
|
i_this->mCcDisableTimer = 10;
|
|
|
|
if (i_this->mMsg.doFlow(i_this, 0, 0)) {
|
|
dComIfGp_event_reset();
|
|
i_this->mIsTalking = 0;
|
|
}
|
|
|
|
} else {
|
|
if (dComIfGp_event_runCheck() && i_this->eventInfo.checkCommandTalk()) {
|
|
i_this->mMsg.init(i_this, i_this->mFlowID, 0, 0);
|
|
i_this->mIsTalking = 1;
|
|
}
|
|
|
|
if (i_this->mMessageState == 2 && i_this->mFlowID != -1 && daPy_py_c::checkNowWolf()) {
|
|
fopAcM_OnStatus(i_this, 0);
|
|
cLib_onBit<u32>(i_this->attention_info.flags, 0xa);
|
|
i_this->eventInfo.onCondition(dEvtCnd_CANTALK_e);
|
|
} else {
|
|
fopAcM_OffStatus(i_this, 0);
|
|
cLib_offBit<u32>(i_this->attention_info.flags, 0xa);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 8066DE64-8066E494 006204 0630+00 2/1 0/0 0/0 .text daDo_Execute__FP8do_class */
|
|
static int daDo_Execute(do_class* i_this) {
|
|
if (cDmrNowMidnaTalk() && !fopAcM_checkCarryNow(i_this)) {
|
|
return 1;
|
|
}
|
|
|
|
i_this->mCounter++;
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
if (i_this->mTimer[i] != 0) {
|
|
i_this->mTimer[i]--;
|
|
}
|
|
}
|
|
|
|
if (i_this->mCcDisableTimer != 0) {
|
|
i_this->mCcDisableTimer--;
|
|
}
|
|
|
|
if (i_this->mSwimEffectTimer != 0) {
|
|
i_this->mSwimEffectTimer--;
|
|
}
|
|
|
|
action(i_this);
|
|
|
|
mDoMtx_stack_c::transS(i_this->current.pos.x, i_this->current.pos.y, i_this->current.pos.z);
|
|
mDoMtx_stack_c::YrotM(i_this->shape_angle.y);
|
|
mDoMtx_stack_c::XrotM(i_this->shape_angle.x);
|
|
mDoMtx_stack_c::ZrotM(i_this->shape_angle.z);
|
|
i_this->scale.set(i_this->mScale.x * l_HIO.mBaseSize,
|
|
i_this->mScale.y * l_HIO.mBaseSize,
|
|
i_this->mScale.z * l_HIO.mBaseSize);
|
|
mDoMtx_stack_c::scaleM(i_this->scale.x, i_this->scale.y, i_this->scale.z);
|
|
J3DModel* model = i_this->mpMorf->getModel();
|
|
model->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
i_this->mpMorf->play(&i_this->eyePos, 0, 0);
|
|
|
|
if (i_this->mAnmID == ANM_JOYFUL) {
|
|
if (i_this->mpMorf->checkFrame(16.0f)) {
|
|
i_this->mpMorf->setFrame(0.0f);
|
|
}
|
|
} else if (i_this->mAnmID == ANM_RUN) {
|
|
if (i_this->mpMorf->checkFrame(15.0f)) {
|
|
i_this->mpMorf->setFrame(0.0f);
|
|
}
|
|
}
|
|
|
|
if ((i_this->mAnmID == ANM_JOYFUL || i_this->mAnmID == ANM_STEP) && i_this->mTimer[3] == 0) {
|
|
i_this->mTimer[3] = cM_rndF(4.0f) + 13.0f;
|
|
i_this->mSound.startSound(Z2SE_DOG_BREATH, 0, -1);
|
|
}
|
|
|
|
i_this->mpBtk->setFrame(i_this->mBtkFrame);
|
|
i_this->mpBtp->setFrame(i_this->mBtpFrame);
|
|
i_this->mpMorf->modelCalc();
|
|
|
|
cXyz vec, center;
|
|
MTXCopy(model->getAnmMtx(10), *calc_mtx);
|
|
vec.set(5.0f, 5.0f, 0.0f);
|
|
MtxPosition(&vec, &i_this->eyePos);
|
|
i_this->attention_info.position = i_this->eyePos;
|
|
i_this->attention_info.position.y += i_this->mScale.y * 16.0f;
|
|
|
|
vec.set(-15.0f, -15.0f, 0.0f);
|
|
MtxPosition(&vec, ¢er);
|
|
if (i_this->mCcDisableTimer != 0) {
|
|
center.y += 13000.0f;
|
|
}
|
|
i_this->mCcSph.SetC(center);
|
|
|
|
if (i_this->mAction == ACT_A_SWIM) {
|
|
i_this->mCcSph.SetR(i_this->mScale.z * 45.0f);
|
|
} else {
|
|
i_this->mCcSph.SetR(i_this->mScale.z * 30.0f);
|
|
}
|
|
|
|
dComIfG_Ccsp()->Set(&i_this->mCcSph);
|
|
|
|
if (i_this->mItemActorID != -1) {
|
|
daItem_c* item = static_cast<daItem_c*>(fopAcM_SearchByID(i_this->mItemActorID));
|
|
if (item != NULL) {
|
|
if (i_this->mItemControlTimer < 10) {
|
|
i_this->mItemControlTimer++;
|
|
if (i_this->mItemControlTimer == 10) {
|
|
item->startControl();
|
|
i_this->mItemControlTimer = 20;
|
|
}
|
|
}
|
|
|
|
MTXCopy(i_this->mpMorf->getModel()->getAnmMtx(10), *calc_mtx);
|
|
cMtx_YrotM(*calc_mtx, 0);
|
|
cMtx_XrotM(*calc_mtx, 0);
|
|
cMtx_ZrotM(*calc_mtx, 0);
|
|
MtxTrans(20.0f, -24.0f, 0.0f, 1);
|
|
vec.set(0.0f, 0.0f, 0.0f);
|
|
MtxPosition(&vec, &item->current.pos);
|
|
|
|
item->shape_angle = i_this->shape_angle;
|
|
item->current.angle = item->shape_angle;
|
|
item->speed.zero();
|
|
item->speedF = 0.0f;
|
|
}
|
|
}
|
|
|
|
if (i_this->mFoodInMouth) {
|
|
obj_food_class* food =
|
|
static_cast<obj_food_class*>(fopAcM_SearchByID(i_this->mFoodActorID));
|
|
if (food != NULL) {
|
|
if (fopAcM_GetName(food) == PROC_OBJ_FOOD) {
|
|
MTXCopy(i_this->mpMorf->getModel()->getAnmMtx(10), *calc_mtx);
|
|
cMtx_YrotM(*calc_mtx, 0x4000);
|
|
MtxTrans(0.0f, -7.0f, 25.0f, 1);
|
|
food->mpModel->setBaseTRMtx(*calc_mtx);
|
|
vec.set(0.0f, 0.0f, 0.0f);
|
|
MtxPosition(&vec, &food->current.pos);
|
|
fopAcM_SetFoodStatus(food, fopAcM_FOOD_3);
|
|
}
|
|
} else {
|
|
//!@bug: the last two lines will fail because this path only executes if food is null
|
|
MTXCopy(i_this->mpMorf->getModel()->getAnmMtx(10), *calc_mtx);
|
|
cMtx_YrotM(*calc_mtx, 0x4000);
|
|
MtxTrans(0.0f, -7.0f, 25.0f, 1);
|
|
vec.set(0.0f, 0.0f, 0.0f);
|
|
MtxPosition(&vec, &food->current.pos);
|
|
fopAcM_SetFoodStatus(food, fopAcM_FOOD_3);
|
|
}
|
|
i_this->mFoodInMouth = 0;
|
|
}
|
|
|
|
i_this->mSound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(i_this)));
|
|
message(i_this);
|
|
return 1;
|
|
}
|
|
|
|
/* 8066E494-8066E49C 006834 0008+00 1/0 0/0 0/0 .text daDo_IsDelete__FP8do_class */
|
|
static int daDo_IsDelete(do_class* i_this) {
|
|
return 1;
|
|
}
|
|
|
|
/* 8066E49C-8066E504 00683C 0068+00 1/0 0/0 0/0 .text daDo_Delete__FP8do_class */
|
|
static int daDo_Delete(do_class* i_this) {
|
|
u32 actor_id = fopAcM_GetID(i_this);
|
|
dComIfG_resDelete(&i_this->mPhase, "Do");
|
|
if (i_this->mHIOInit) {
|
|
hioInit = false;
|
|
}
|
|
if (i_this->heap) {
|
|
i_this->mSound.deleteObject();
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/* 8066E504-8066E7D4 0068A4 02D0+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */
|
|
static int useHeapInit(fopAc_ac_c* i_this) {
|
|
do_class* _this = (do_class*)i_this;
|
|
|
|
_this->mpMorf = new mDoExt_McaMorf((J3DModelData*)dComIfG_getObjectRes("Do", 25), NULL, NULL,
|
|
(J3DAnmTransform*)dComIfG_getObjectRes("Do", 14), 2,
|
|
1.0f, 0, -1, 1, NULL, 0x80000, 0x11020284);
|
|
|
|
if (_this->mpMorf == NULL || _this->mpMorf->getModel() == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
J3DModel* model = _this->mpMorf->getModel();
|
|
_this->model = model;
|
|
model->setUserArea((u32)i_this);
|
|
|
|
for (u16 jnt_no = 0; jnt_no < model->getModelData()->getJointNum(); jnt_no++) {
|
|
if (jnt_no == 9 || jnt_no == 10 || jnt_no == 22 || jnt_no == 23) {
|
|
model->getModelData()->getJointNodePointer(jnt_no)->setCallBack(nodeCallBack);
|
|
}
|
|
}
|
|
|
|
_this->mpBtk = new mDoExt_btkAnm();
|
|
if (_this->mpBtk == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
if (!_this->mpBtk->init(_this->mpMorf->getModel()->getModelData(),
|
|
(J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Do", 29), TRUE, 0,
|
|
1.0f, 0, -1))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
_this->mpBtp = new mDoExt_btpAnm();
|
|
if (_this->mpBtp == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
if (!_this->mpBtp->init(_this->mpMorf->getModel()->getModelData(),
|
|
(J3DAnmTexPattern*)dComIfG_getObjectRes("Do", 32), TRUE, 0,
|
|
1.0f, 0, -1))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
_this->mSound.init(&_this->current.pos, 1);
|
|
return 1;
|
|
}
|
|
|
|
/* 8066E81C-8066EAE4 006BBC 02C8+00 1/0 0/0 0/0 .text daDo_Create__FP10fopAc_ac_c */
|
|
static cPhs__Step daDo_Create(fopAc_ac_c* i_this) {
|
|
do_class* _this = static_cast<do_class*>(i_this);
|
|
fopAcM_SetupActor(i_this, do_class);
|
|
|
|
cPhs__Step step = (cPhs__Step)dComIfG_resLoad(&_this->mPhase, "Do");
|
|
|
|
if (step == cPhs_COMPLEATE_e) {
|
|
_this->mParam0 = fopAcM_GetParam(i_this) & 7;
|
|
_this->mParam1 = fopAcM_GetParam(i_this) >> 4 & 0xf;
|
|
_this->mParam2 = (u8)(fopAcM_GetParam(i_this) >> 8);
|
|
if (_this->mParam0 != 2) {
|
|
_this->mParam0 = 0;
|
|
}
|
|
|
|
_this->mFlowID = i_this->current.angle.x;
|
|
i_this->shape_angle.x = 0;
|
|
i_this->current.angle.x = 0;
|
|
|
|
if (!fopAcM_entrySolidHeap(i_this, useHeapInit, 0x2120)) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
if (!hioInit) {
|
|
_this->mHIOInit = true;
|
|
hioInit = 1;
|
|
l_HIO.field_0x04 = -1;
|
|
}
|
|
|
|
fopAcM_OnStatus(i_this, fopAcStts_CULL_e);
|
|
fopAcM_OnCarryType(i_this, fopAcM_CARRY_TYPE_8);
|
|
i_this->attention_info.flags = 0;
|
|
i_this->attention_info.distances[fopAc_attn_CARRY_e] = 7;
|
|
fopAcM_SetMtx(i_this, _this->mpMorf->getModel()->getBaseTRMtx());
|
|
_this->mBgS_Acch.Set(fopAcM_GetPosition_p(i_this), fopAcM_GetOldPosition_p(i_this), i_this,
|
|
1, &_this->mBgS_AcchCir, fopAcM_GetSpeed_p(i_this), NULL, NULL);
|
|
_this->mBgS_AcchCir.SetWall(30.0f, 30.0f);
|
|
i_this->health = 1;
|
|
_this->field_0x560 = 1;
|
|
_this->mStts.Init(100, 0, i_this);
|
|
|
|
static dCcD_SrcSph cc_sph_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}, 20.0f} // mSph
|
|
} // mSphAttr
|
|
};
|
|
_this->mCcSph.Set(cc_sph_src);
|
|
_this->mCcSph.SetStts(&_this->mStts);
|
|
_this->mCcSph.OnTgNoHitMark();
|
|
|
|
if (_this->mParam1 == 0xff) {
|
|
_this->mBtkFrame = cM_rndF(3.999f);
|
|
} else {
|
|
_this->mBtkFrame = _this->mParam1;
|
|
if (_this->mBtkFrame > 3) {
|
|
_this->mBtkFrame = 3;
|
|
}
|
|
}
|
|
|
|
_this->mTailPhaseY = cM_rndF(0x10000);
|
|
_this->mTailPhaseX = cM_rndF(0x10000);
|
|
_this->mCounter = cM_rndF(0x10000);
|
|
_this->mScale.set(1.0f, 1.0f, 1.0f);
|
|
|
|
if (_this->mParam0 == 2) {
|
|
_this->mAction = ACT_HELP;
|
|
i_this->current.pos.set(7216.0f, 220.0f, -4808.0f);
|
|
}
|
|
|
|
noFallCheck = false;
|
|
if (dStage_stagInfo_GetSTType(dComIfGp_getStage()->getStagInfo()) != ST_FIELD) {
|
|
noFallCheck = true;
|
|
_this->mParam2 = 200;
|
|
}
|
|
|
|
_this->mItemActorID = -1;
|
|
daDo_Execute(_this);
|
|
}
|
|
|
|
return step;
|
|
}
|
|
|
|
/* 8066F32C-8066F330 0000BC 0004+00 0/0 0/0 0/0 .bss
|
|
* sInstance__40JASGlobalInstance<19JASDefaultBankTable> */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F32C[4];
|
|
#pragma pop
|
|
|
|
/* 8066F330-8066F334 0000C0 0004+00 0/0 0/0 0/0 .bss
|
|
* sInstance__35JASGlobalInstance<14JASAudioThread> */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F330[4];
|
|
#pragma pop
|
|
|
|
/* 8066F334-8066F338 0000C4 0004+00 0/0 0/0 0/0 .bss sInstance__27JASGlobalInstance<7Z2SeMgr> */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F334[4];
|
|
#pragma pop
|
|
|
|
/* 8066F338-8066F33C 0000C8 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8Z2SeqMgr> */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F338[4];
|
|
#pragma pop
|
|
|
|
/* 8066F33C-8066F340 0000CC 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr>
|
|
*/
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F33C[4];
|
|
#pragma pop
|
|
|
|
/* 8066F340-8066F344 0000D0 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2StatusMgr>
|
|
*/
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F340[4];
|
|
#pragma pop
|
|
|
|
/* 8066F344-8066F348 0000D4 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2DebugSys>
|
|
*/
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F344[4];
|
|
#pragma pop
|
|
|
|
/* 8066F348-8066F34C 0000D8 0004+00 0/0 0/0 0/0 .bss
|
|
* sInstance__36JASGlobalInstance<15JAISoundStarter> */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F348[4];
|
|
#pragma pop
|
|
|
|
/* 8066F34C-8066F350 0000DC 0004+00 0/0 0/0 0/0 .bss
|
|
* sInstance__35JASGlobalInstance<14Z2SoundStarter> */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F34C[4];
|
|
#pragma pop
|
|
|
|
/* 8066F350-8066F354 0000E0 0004+00 0/0 0/0 0/0 .bss
|
|
* sInstance__33JASGlobalInstance<12Z2SpeechMgr2> */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F350[4];
|
|
#pragma pop
|
|
|
|
/* 8066F354-8066F358 0000E4 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8JAISeMgr> */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F354[4];
|
|
#pragma pop
|
|
|
|
/* 8066F358-8066F35C 0000E8 0004+00 0/0 0/0 0/0 .bss sInstance__29JASGlobalInstance<9JAISeqMgr> */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F358[4];
|
|
#pragma pop
|
|
|
|
/* 8066F35C-8066F360 0000EC 0004+00 0/0 0/0 0/0 .bss
|
|
* sInstance__33JASGlobalInstance<12JAIStreamMgr> */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F35C[4];
|
|
#pragma pop
|
|
|
|
/* 8066F360-8066F364 0000F0 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SoundMgr>
|
|
*/
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F360[4];
|
|
#pragma pop
|
|
|
|
/* 8066F364-8066F368 0000F4 0004+00 0/0 0/0 0/0 .bss
|
|
* sInstance__33JASGlobalInstance<12JAISoundInfo> */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F364[4];
|
|
#pragma pop
|
|
|
|
/* 8066F368-8066F36C 0000F8 0004+00 0/0 0/0 0/0 .bss
|
|
* sInstance__34JASGlobalInstance<13JAUSoundTable> */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F368[4];
|
|
#pragma pop
|
|
|
|
/* 8066F36C-8066F370 0000FC 0004+00 0/0 0/0 0/0 .bss
|
|
* sInstance__38JASGlobalInstance<17JAUSoundNameTable> */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F36C[4];
|
|
#pragma pop
|
|
|
|
/* 8066F370-8066F374 000100 0004+00 0/0 0/0 0/0 .bss
|
|
* sInstance__33JASGlobalInstance<12JAUSoundInfo> */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F370[4];
|
|
#pragma pop
|
|
|
|
/* 8066F374-8066F378 000104 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SoundInfo>
|
|
*/
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F374[4];
|
|
#pragma pop
|
|
|
|
/* 8066F378-8066F37C 000108 0004+00 0/0 0/0 0/0 .bss
|
|
* sInstance__34JASGlobalInstance<13Z2SoundObjMgr> */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F378[4];
|
|
#pragma pop
|
|
|
|
/* 8066F37C-8066F380 00010C 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2Audience>
|
|
*/
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F37C[4];
|
|
#pragma pop
|
|
|
|
/* 8066F380-8066F384 000110 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2FxLineMgr>
|
|
*/
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F380[4];
|
|
#pragma pop
|
|
|
|
/* 8066F384-8066F388 000114 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2EnvSeMgr>
|
|
*/
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F384[4];
|
|
#pragma pop
|
|
|
|
/* 8066F388-8066F38C 000118 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SpeechMgr>
|
|
*/
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F388[4];
|
|
#pragma pop
|
|
|
|
/* 8066F38C-8066F390 00011C 0004+00 0/0 0/0 0/0 .bss
|
|
* sInstance__34JASGlobalInstance<13Z2WolfHowlMgr> */
|
|
#pragma push
|
|
#pragma force_active on
|
|
static u8 data_8066F38C[4];
|
|
#pragma pop
|
|
|
|
/* 8066F1CC-8066F1EC -00001 0020+00 1/0 0/0 0/0 .data l_daDo_Method */
|
|
static actor_method_class l_daDo_Method = {
|
|
(process_method_func)daDo_Create,
|
|
(process_method_func)daDo_Delete,
|
|
(process_method_func)daDo_Execute,
|
|
(process_method_func)daDo_IsDelete,
|
|
(process_method_func)daDo_Draw,
|
|
};
|
|
|
|
/* 8066F1EC-8066F21C -00001 0030+00 0/0 0/0 1/0 .data g_profile_DO */
|
|
extern actor_process_profile_definition g_profile_DO = {
|
|
fpcLy_CURRENT_e,
|
|
7,
|
|
fpcPi_CURRENT_e,
|
|
PROC_DO,
|
|
&g_fpcLf_Method.base,
|
|
sizeof(do_class),
|
|
0,
|
|
0,
|
|
&g_fopAc_Method.base,
|
|
0x2BB,
|
|
&l_daDo_Method,
|
|
0x8044000,
|
|
fopAc_NPC_e,
|
|
fopAc_CULLBOX_0_e,
|
|
};
|