diff --git a/configure.py b/configure.py index bd1891bbbb2..8513152f1f3 100755 --- a/configure.py +++ b/configure.py @@ -2016,10 +2016,10 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_gb"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_geyser"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_glowSphere"), - ActorRel(NonMatching, "d_a_obj_gm"), + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_gm"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_goGate"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_gomikabe"), - ActorRel(Equivalent, "d_a_obj_gra2"), # weak function order + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_gra2"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_graWall"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_gra_rock"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_grave_stone"), diff --git a/include/d/actor/d_a_npc.h b/include/d/actor/d_a_npc.h index 9dd14737b03..8e579a9336f 100644 --- a/include/d/actor/d_a_npc.h +++ b/include/d/actor/d_a_npc.h @@ -972,6 +972,10 @@ public: /* 8014F60C */ int MoveBGCreate(char const*, int, MoveBGActor_SetFunc, u32); /* 8014F6FC */ int MoveBGDelete(); /* 8014F770 */ int MoveBGExecute(); + int MoveBGDraw() { + int ret = Draw(); + return ret; + } /* 80155FB0 */ virtual ~daBaseNpc_moveBgActor_c() {} /* 801503BC */ virtual int CreateHeap() { return 1; } diff --git a/include/d/actor/d_a_obj_gm.h b/include/d/actor/d_a_obj_gm.h index 67d1eb599ad..a03b5b5fe53 100644 --- a/include/d/actor/d_a_obj_gm.h +++ b/include/d/actor/d_a_obj_gm.h @@ -58,7 +58,7 @@ public: /* 0x94C */ dCcD_Stts mStts; /* 0x988 */ dCcD_Sph mSph; /* 0xAC0 */ dCcU_AtInfo mAtInfo; - /* 0xAE4 */ u8 field_0xae4; + /* 0xAE4 */ s8 field_0xae4; /* 0xAE8 */ u32 field_0xae8; /* 0xAEC */ u32 field_0xaec; /* 0xAF0 */ bool mIsFirstSpawn; diff --git a/include/d/actor/d_a_obj_gra2.h b/include/d/actor/d_a_obj_gra2.h index 634a2fc3681..c437cf198cf 100644 --- a/include/d/actor/d_a_obj_gra2.h +++ b/include/d/actor/d_a_obj_gra2.h @@ -4,6 +4,74 @@ #include "d/actor/d_a_npc.h" #include "f_op/f_op_actor_mng.h" + +struct daObj_GrA_HIO_Param_c { + /* 0x00 */ f32 field_0x00; + /* 0x04 */ f32 mGravity; + /* 0x08 */ f32 field_0x08; + /* 0x0C */ f32 field_0x0c; + /* 0x10 */ s16 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 mWallR; + /* 0x1C */ f32 mWallH; + /* 0x20 */ f32 mWeight; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2c; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3c; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4c; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ s16 field_0x54; + /* 0x56 */ s16 field_0x56; + /* 0x58 */ s16 field_0x58; + /* 0x5A */ s16 field_0x5a; + /* 0x5C */ s16 field_0x5c; + /* 0x60 */ f32 field_0x60; + /* 0x64 */ f32 field_0x64; + /* 0x68 */ s16 field_0x68; + /* 0x6C */ f32 field_0x6c; + /* 0x70 */ f32 field_0x70; + /* 0x74 */ f32 field_0x74; + /* 0x78 */ f32 field_0x78; + /* 0x7C */ f32 field_0x7c; + /* 0x80 */ f32 field_0x80; + /* 0x84 */ f32 field_0x84; + /* 0x88 */ s16 field_0x88; + /* 0x8A */ u8 field_0x8a; + /* 0x8C */ f32 field_0x8c; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ f32 field_0x94; + /* 0x98 */ s16 field_0x98; + /* 0x9A */ s16 field_0x9a; + /* 0x9C */ s16 field_0x9c; + /* 0xA0 */ f32 field_0xa0; + /* 0xA4 */ s16 field_0xa4; + /* 0xA8 */ f32 field_0xa8; + /* 0xAC */ s16 field_0xac; + /* 0xAE */ s16 field_0xae; + /* 0xB0 */ s16 field_0xb0; + /* 0xB2 */ s16 field_0xb2; + /* 0xB4 */ s16 field_0xb4; + /* 0xB8 */ f32 field_0xb8; + /* 0xBC */ f32 field_0xbc; +}; + +#if DEBUG +class daObj_GrA_HIO_c; + +#define OBJ_GRA_HIO_CLASS daObj_GrA_HIO_c +#else +class daObj_GrA_Param_c; + +#define OBJ_GRA_HIO_CLASS daObj_GrA_Param_c +#endif + /** * @ingroup actors-objects * @class daObj_GrA_c @@ -12,75 +80,6 @@ * @details * */ - -class daObj_GrA_Param_c { -public: - /* 80C04B1C */ virtual ~daObj_GrA_Param_c() {} - - struct Data { - /* 0x00 */ f32 field_0x00; - /* 0x04 */ f32 mGravity; - /* 0x08 */ f32 field_0x08; - /* 0x0C */ f32 field_0x0c; - /* 0x10 */ s16 field_0x10; - /* 0x12 */ s16 field_0x12; - /* 0x14 */ f32 field_0x14; - /* 0x18 */ f32 mWallR; - /* 0x1C */ f32 mWallH; - /* 0x20 */ f32 mWeight; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 field_0x2c; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ f32 field_0x34; - /* 0x38 */ f32 field_0x38; - /* 0x3C */ f32 field_0x3c; - /* 0x40 */ f32 field_0x40; - /* 0x44 */ f32 field_0x44; - /* 0x48 */ f32 field_0x48; - /* 0x4C */ f32 field_0x4c; - /* 0x50 */ f32 field_0x50; - /* 0x54 */ s16 field_0x54; - /* 0x56 */ s16 field_0x56; - /* 0x58 */ s16 field_0x58; - /* 0x5A */ s16 field_0x5a; - /* 0x5C */ s16 field_0x5c; - /* 0x5E */ s16 field_0x5e; - /* 0x60 */ f32 field_0x60; - /* 0x64 */ f32 field_0x64; - /* 0x68 */ s16 field_0x68; - /* 0x6A */ s16 field_0x6a; - /* 0x6C */ f32 field_0x6c; - /* 0x70 */ f32 field_0x70; - /* 0x74 */ f32 field_0x74; - /* 0x78 */ f32 field_0x78; - /* 0x7C */ f32 field_0x7c; - /* 0x80 */ f32 field_0x80; - /* 0x84 */ f32 field_0x84; - /* 0x88 */ s16 field_0x88; - /* 0x8A */ s16 field_0x8a; - /* 0x8C */ f32 field_0x8c; - /* 0x90 */ f32 field_0x90; - /* 0x94 */ f32 field_0x94; - /* 0x98 */ s16 field_0x98; - /* 0x9A */ s16 field_0x9a; - /* 0x9C */ f32 field_0x9c; - /* 0xA0 */ f32 field_0xa0; - /* 0xA4 */ s16 field_0xa4; - /* 0xA6 */ s16 field_0xa6; - /* 0xA8 */ f32 field_0xa8; - /* 0xAC */ s16 field_0xac; - /* 0xAE */ s16 field_0xae; - /* 0xB0 */ s16 field_0xb0; - /* 0xB2 */ s16 field_0xb2; - /* 0xB4 */ s16 field_0xb4; - /* 0xB6 */ s16 field_0xb6; - /* 0xB8 */ f32 field_0xb8; - /* 0xBC */ f32 field_0xbc; - }; - static const Data m; -}; - class daObj_GrA_c : public daBaseNpc_moveBgActor_c { public: typedef int (daObj_GrA_c::*MotionFunc)(int); @@ -237,14 +236,15 @@ public: static MotionFunc mBaseMotionList[22]; static MotionFunc mFaceMotionList[14]; - bool isFirstGra() { return field_0x1fe8 == 0; } + bool isFirstGra() { return isFisrtGra(); } + bool isFisrtGra() { return field_0x1fe8 == 0; } void setDemoMode(s16 mDemoMode) { mDemoCamMode = mDemoMode; } s16 getDemoMode() { return mDemoCamMode; } private: /* 0x0A48 */ u16 field_0xa48; - /* 0x0A4C */ daObj_GrA_Param_c* field_0xa4c; + /* 0x0A4C */ OBJ_GRA_HIO_CLASS* mpHIO; /* 0x0A50 */ Process field_0xa50; /* 0x0A5C */ request_of_phase_process_class mPhases[4]; /* 0x0A7C */ u16 field_0xa7c; diff --git a/src/d/actor/d_a_obj_gm.cpp b/src/d/actor/d_a_obj_gm.cpp index 917f3afd00d..5c1645c7163 100644 --- a/src/d/actor/d_a_obj_gm.cpp +++ b/src/d/actor/d_a_obj_gm.cpp @@ -241,7 +241,7 @@ static void bg_fix(obj_gm_class* i_this) { } if ((i_this->field_0xae4 & 4) != 0) { - i_this->field_0xae4 &= -5; + i_this->field_0xae4 &= (s8) -5; i_this->field_0x630 = TREG_F(14) + 10.0f; i_this->field_0x648 = TREG_F(16) + 5000.0f; } @@ -255,7 +255,7 @@ static void bg_fix(obj_gm_class* i_this) { } if ((i_this->field_0xae4 & 1) != 0) { - i_this->field_0xae4 &= ~1; + i_this->field_0xae4 &= (s8) ~1; i_this->mAction = 1; i_this->mActionMode = 0; } @@ -264,7 +264,7 @@ static void bg_fix(obj_gm_class* i_this) { if (i_this->mType >= 5) { fopAcM_delete(a_this); } else { - i_this->field_0xae4 &= ~2; + i_this->field_0xae4 &= (s8) ~2; i_this->mAction = 2; i_this->mActionMode = 0; diff --git a/src/d/actor/d_a_obj_gra2.cpp b/src/d/actor/d_a_obj_gra2.cpp index 04496e19362..876989986ec 100644 --- a/src/d/actor/d_a_obj_gra2.cpp +++ b/src/d/actor/d_a_obj_gra2.cpp @@ -15,31 +15,113 @@ #ifdef DEBUG #include "d/d_debug_viewer.h" #endif -#include "dol2asm.h" #include "d/d_msg_object.h" #include "d/d_attention.h" #include "f_op/f_op_camera_mng.h" #include -/* 80BFFF0C-80BFFF58 0000EC 004C+00 2/2 0/0 0/0 .text jointCtrlCallBack__FP8J3DJointi */ -static int jointCtrlCallBack(J3DJoint* i_joint, int param_2) { - if (param_2 == 0) { - J3DModel* model = j3dSys.getModel(); - daObj_GrA_c* i_this = (daObj_GrA_c*)model->getUserArea(); - if (i_this != NULL) { - i_this->jointCtrl(i_joint, model); - } +class daObj_GrA_Param_c { +public: + /* 80C04B1C */ virtual ~daObj_GrA_Param_c() {} + + static const daObj_GrA_HIO_Param_c m; +}; + +#if DEBUG +class daObj_GrA_HIO_c : public fOpAcm_HIO_entry_c { +public: + daObj_GrA_HIO_c() { + m = daObj_GrA_Param_c::m; } - return 1; -} + void genMessage(JORMContext* ctext) { + // featured offset + ctext->genSlider("注目オフセット ", &m.field_0x00, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // gravity + ctext->genSlider("重力 ", &m.mGravity, -99.0f, 99.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // scale + ctext->genSlider("スケ-ル ", &m.field_0x08, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // interpolated frames + ctext->genSlider("補間フレ-ム ", &m.field_0x0c, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // height + ctext->genSlider("高さ ", &m.field_0x14, 0.0f, 999.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // knee-length + ctext->genSlider("ひざ丈 ", &m.mWallR, 0.0f, 999.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // width + ctext->genSlider("幅 ", &m.mWallH, 0.0f, 999.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // weight + ctext->genSlider("体重 ", &m.mWeight, 0.0f, 255.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // back upper x angle + ctext->genSlider("背のX角上限 ", &m.field_0x24, -90.0f, 90.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // back lower x angle + ctext->genSlider("背のX角下限 ", &m.field_0x28, -90.0f, 90.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // back upper y angle + ctext->genSlider("背のY角上限 ", &m.field_0x2c, -180.0f, 179.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // --- TODO --- + ctext->genSlider("", &m.field_0x30, -180.0f, 179.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x34, -90.0f, 90.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x38, -90.0f, 90.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x3c, -180.0f, 179.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x40, -180.0f, 179.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x44, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x48, 0.0f, 999.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x4c, 0.0f, 180.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x50, 0.0f, 999.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x54, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x56, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x58, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x5a, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x5c, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x60, 0.0f, 999.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x64, 0.0f, 999.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x68, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // Goron Soldier Guard + ctext->genLabel("\n-----------------------【見張りゴロン兵】", 0, 0, NULL, -1, -1, 0x200, 0x18); + ctext->genSlider("", &m.field_0x70, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x74, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x84, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0xa8, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x78, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x9c, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0x9a, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // Rolling attack start demo parameters + ctext->genLabel("\n○転がり攻撃開始デモ用パラメータ", 0, 0, NULL, -1, -1, 0x200, 0x18); + ctext->genSlider("", &m.field_0xac, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0xae, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0xb0, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0xb2, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0xb4, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0xb8, 0.0f, 999.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("", &m.field_0xbc, 0.0f, 999.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // Goron Regular Soldier + ctext->genLabel("\n-----------------------【ゴロン一般兵】", 0, 0, NULL, -1, -1, 0x200, 0x18); + // search radius (10) + ctext->genSlider("サ-チ半径(10) ", &m.field_0x6c, 0.0f, 9999.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // turning speed + ctext->genSlider("旋回速度 ", &m.field_0x88, 0, 0x4000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // walking speed + ctext->genSlider("歩く速度 ", &m.field_0x90, 0.0f, 999.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // punch start distance + ctext->genSlider("パンチ開始距離 ", &m.field_0x94, 0.0f, 999.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // post attack wait time + ctext->genSlider("攻撃後待ち時間 ", &m.field_0x98, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // attack hand radius + ctext->genSlider("攻撃時の手の半径", &m.field_0x8c, 0.0f, 999.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // return speed + ctext->genSlider("戻る速度 ", &m.field_0xa0, 0.0f, 9999.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genLabel("\n", 0, 0, NULL, -1, -1, 0x200, 0x18); + // debug draw ON + ctext->genCheckBox("デバグ描画ON ", &m.field_0x8a, true, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + // Export File + ctext->genButton("ファイル書き出し", 0x40000002, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + } -/* 80BFFF58-80BFFF70 000138 0018+00 1/1 0/0 0/0 .text rideCallBack__11daObj_GrA_cFP4dBgWP10fopAc_ac_cP10fopAc_ac_c */ -void daObj_GrA_c::rideCallBack(dBgW* param_1, fopAc_ac_c* aActor_p, fopAc_ac_c* param_3) { - ((daObj_GrA_c*)aActor_p)->field_0x10c4 = fopAcM_GetProfName(param_3) == PROC_ALINK; -} + void listenPropertyEvent(const JORPropertyEvent*) { + // TODO + } -#if VERSION != VERSION_SHIELD_DEBUG + daObj_GrA_HIO_Param_c m; +}; #endif /* 80C0FE88-80C0FE98 -00001 0010+00 1/1 0/0 0/0 .data l_resFileNameList */ @@ -138,6 +220,26 @@ static u16 l_entryJntNoList[4] = { 5, 6, 7, -1, }; +/* 80BFFF0C-80BFFF58 0000EC 004C+00 2/2 0/0 0/0 .text jointCtrlCallBack__FP8J3DJointi */ +static int jointCtrlCallBack(J3DJoint* i_joint, int param_2) { + if (param_2 == 0) { + J3DModel* model = j3dSys.getModel(); + daObj_GrA_c* i_this = (daObj_GrA_c*)model->getUserArea(); + if (i_this != NULL) { + i_this->jointCtrl(i_joint, model); + } + } + + return 1; +} + +/* 80BFFF58-80BFFF70 000138 0018+00 1/1 0/0 0/0 .text rideCallBack__11daObj_GrA_cFP4dBgWP10fopAc_ac_cP10fopAc_ac_c */ +void daObj_GrA_c::rideCallBack(dBgW* param_1, fopAc_ac_c* actor_p, fopAc_ac_c* param_3) { + daObj_GrA_c* aActor_p = (daObj_GrA_c*) actor_p; + JUT_ASSERT(684, NULL != aActor_p); + aActor_p->field_0x10c4 = fopAcM_GetProfName(param_3) == PROC_ALINK; +} + /* 80BFFF70-80C0011C 000150 01AC+00 1/1 0/0 0/0 .text __ct__11daObj_GrA_cFv */ daObj_GrA_c::daObj_GrA_c() {} @@ -153,10 +255,17 @@ daObj_GrA_c::~daObj_GrA_c() { } if (mpBgw != NULL && mpBgw->ChkUsed()) { - if (dComIfG_Bgsp().Release(mpBgw)) { + bool rel_ret = dComIfG_Bgsp().Release(mpBgw); + if (rel_ret) { OS_REPORT("Release Error\n"); } } + +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(this); + } +#endif } /* 80C003CC-80C00614 0005AC 0248+00 1/1 0/0 0/0 .text create__11daObj_GrA_cFv */ @@ -214,13 +323,12 @@ cPhs__Step daObj_GrA_c::create() { } /* 80C0FA7C-80C0FB3C 000000 00C0+00 54/54 0/0 0/0 .rodata m__17daObj_GrA_Param_c */ -daObj_GrA_Param_c::Data const daObj_GrA_Param_c::m = { +daObj_GrA_HIO_Param_c const daObj_GrA_Param_c::m = { 85.0f, -4.0f, 1.0f, 12.0f, 1, - 0, 280.0f, 40.0f, 100.0f, @@ -242,11 +350,9 @@ daObj_GrA_Param_c::Data const daObj_GrA_Param_c::m = { 60, 4, 30, - 0, 140.0f, 150.0f, 100, - 0, 100.0f, 15.0f, 20.0f, @@ -261,50 +367,40 @@ daObj_GrA_Param_c::Data const daObj_GrA_Param_c::m = { 230.0f, 60, 1, - 0.0f, + 0, 25.0f, 100, - 0, 0.5f, 10, 10, 30, 40, 20, - 0, 60.0f, 30.0f, }; /* 80C0FB3C-80C0FB8C 0000C0 0050+00 0/0 0/0 0/0 .rodata l_bgcParam */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_bgcParam[80] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xBF, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, - 0xBF, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, +static const f32 l_bgcParam[20] = { + 0.0f, 0.0f, 0.0f, 0.0f, + -0.5f, 1.0f, -0.5f, 1.0f, + 0.5f, -1.0f, -0.5f, 1.0f, + 0.5f, -1.0f, 0.5f, -1.0f, + -0.5f, 1.0f, 0.5f, -1.0f, }; -COMPILER_STRIP_GATE(0x80C0FB3C, &l_bgcParam); -#pragma pop /* 80C0FB8C-80C0FB94 000110 0008+00 0/0 0/0 0/0 .rodata l_dirToAngleTBL */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_dirToAngleTBL[8] = { - 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0xC0, 0x00, -}; -COMPILER_STRIP_GATE(0x80C0FB8C, &l_dirToAngleTBL); -#pragma pop +const s16 l_dirToAngleTBL[4] = {0, 0x4000, 0x8000, 0xC000}; /* 80C00614-80C00790 0007F4 017C+00 1/0 0/0 0/0 .text CreateHeap__11daObj_GrA_cFv */ int daObj_GrA_c::CreateHeap() { + J3DModelData* aMdlData_p = NULL; field_0x844 = dKy_darkworld_check(); - J3DModelData* aMdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_resNames[l_bmdGetParamList[1]], l_bmdGetParamList[0]); + aMdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_resNames[l_bmdGetParamList[1]], l_bmdGetParamList[0]); JUT_ASSERT(854, NULL != aMdlData_p); - mpModelMorf = new mDoExt_McaMorfSO(aMdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, 0x11020284); + u32 reg_r25 = 0x11020284; + mpModelMorf = new mDoExt_McaMorfSO(aMdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, reg_r25); if (mpModelMorf != NULL && mpModelMorf->getModel() == NULL) { mpModelMorf->stopZelAnime(); mpModelMorf = NULL; @@ -329,6 +425,7 @@ int daObj_GrA_c::CreateHeap() { /* 80C00790-80C00804 000970 0074+00 1/0 0/0 0/0 .text Delete__11daObj_GrA_cFv */ int daObj_GrA_c::Delete() { + fopAcM_RegisterDeleteID(this, "OBJ_GRA"); if (dComIfGp_getVibration().CheckQuake()) { dComIfGp_getVibration().StopQuake(31); } @@ -409,9 +506,9 @@ int daObj_GrA_c::jointCtrl(J3DJoint* i_joint, J3DModel* param_2) { spb4.set(MStack_78[0][3], MStack_78[1][3], MStack_78[2][3]); MStack_78[0][3] = MStack_78[1][3] = MStack_78[2][3] = 0.0f; mDoMtx_stack_c::ZXYrotS(shape_angle); - field_0x9c2.x = field_0x9c8.x * daObj_GrA_Param_c::m.field_0x44; - field_0x9c2.y = field_0x9c8.y * daObj_GrA_Param_c::m.field_0x44; - field_0x9c2.z = field_0x9c8.z * daObj_GrA_Param_c::m.field_0x44; + field_0x9c2.x = field_0x9c8.x * mpHIO->m.field_0x44; + field_0x9c2.y = field_0x9c8.y * mpHIO->m.field_0x44; + field_0x9c2.z = field_0x9c8.z * mpHIO->m.field_0x44; switch (jointNo) { case 1: @@ -550,7 +647,7 @@ void daObj_GrA_c::restart() { setProcess(&daObj_GrA_c::wait); field_0xa94 = 0.0f; field_0xa98 = 0.0f; - health = daObj_GrA_Param_c::m.field_0x10; + health = mpHIO->m.field_0x10; ppMoveInit(); field_0x1fbc = ~field_0x109c; field_0xaac = 0; @@ -581,7 +678,7 @@ void daObj_GrA_c::restart() { field_0x2032 = 0; mGraMode = 0; - setBaseMotion(0, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(0, mpHIO->m.field_0x0c); setFaceMotion(0, -1.0f); field_0x204c.entry(NULL); field_0x209c = 0; @@ -591,20 +688,24 @@ void daObj_GrA_c::restart() { static cXyz l_centerOfst(0.0f, 67.0f, 26.0f); /* 80C10904-80C10908 00006C 0004+00 1/2 0/0 0/0 .bss l_HIO */ -static daObj_GrA_Param_c l_HIO; +static OBJ_GRA_HIO_CLASS l_HIO; /* 80C010D4-80C013B0 0012B4 02DC+00 1/1 0/0 0/0 .text init__11daObj_GrA_cFv */ int daObj_GrA_c::init() { fopAcM_SetMtx(this, mpModelMorf->getModel()->getBaseTRMtx()); mSound.init(¤t.pos, &eyePos, 3, 1); eventInfo.setArchiveName((char*)getResName()); - field_0xa4c = &l_HIO; - attention_info.distances[4] = 40; - attention_info.distances[2] = 22; - mAcchCir.SetWall(daObj_GrA_Param_c::m.mWallH, daObj_GrA_Param_c::m.mWallR); + mpHIO = &l_HIO; +#if DEBUG + // "Goron" + mpHIO->entryHIO("ゴロン"); +#endif + attention_info.distances[fopAc_attn_CARRY_e] = 40; + attention_info.distances[fopAc_attn_BATTLE_e] = 22; + mAcchCir.SetWall(mpHIO->m.mWallH, mpHIO->m.mWallR); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daObj_GrA_Param_c::m.mWeight, 0, this); + mCcStts.Init(mpHIO->m.mWeight, 0, this); field_0xf50.Set(mCcDCyl); field_0xf50.SetStts(&mCcStts); field_0xce0[0].Set(mCcDSph); @@ -833,7 +934,7 @@ void daObj_GrA_c::setFaceMotion(int param_1, f32 param_2) { field_0xa8e = 1; if (param_2 < 0.0f) { - field_0xa98 = daObj_GrA_Param_c::m.field_0x0c; + field_0xa98 = mpHIO->m.field_0x0c; return; } @@ -919,28 +1020,33 @@ void daObj_GrA_c::setParam() { } } - scale.set(daObj_GrA_Param_c::m.field_0x08, daObj_GrA_Param_c::m.field_0x08, daObj_GrA_Param_c::m.field_0x08); - mCcStts.SetWeight(daObj_GrA_Param_c::m.mWeight); - gravity = daObj_GrA_Param_c::m.mGravity; + scale.set(mpHIO->m.field_0x08, mpHIO->m.field_0x08, mpHIO->m.field_0x08); + mCcStts.SetWeight(mpHIO->m.mWeight); + gravity = mpHIO->m.mGravity; } /* 80C01C18-80C01D7C 001DF8 0164+00 1/1 0/0 0/0 .text checkEvent__11daObj_GrA_cFv */ BOOL daObj_GrA_c::checkEvent() { BOOL rv = TRUE; - // TODO: fake match to force reuse of pointer +#if VERSION != VERSION_SHIELD_DEBUG + // TODO: gameInfo fake match to force reuse of pointer dComIfG_play_c* play = &g_dComIfG_gameInfo.play; +#endif if (dComIfGp_event_runCheck()) { rv = FALSE; if (eventInfo.checkCommandTalk()) { if (checkProcess(&daObj_GrA_c::talk)) { rv = (this->*field_0xa50)(NULL); - } else if (!g_dComIfG_gameInfo.play.mEvent.chkTalkXY() || dComIfGp_evmng_ChkPresentEnd()) { - // FIXME: Condition uses fakematch to get GCN to match... + } else if (dComIfGp_event_chkTalkXY() == FALSE || dComIfGp_evmng_ChkPresentEnd()) { setProcess(&daObj_GrA_c::talk); } } else if (eventInfo.checkCommandDemoAccrpt()) { if (dComIfGp_getEventManager().endCheck(mEvtIdx) != 0) { +#if VERSION != VERSION_SHIELD_DEBUG play->getEvent().reset(); +#else + dComIfGp_event_reset(); +#endif field_0x1520 = 0; mEvtIdx = -1; rv = TRUE; @@ -1021,7 +1127,7 @@ void daObj_GrA_c::setMtx(int param_1) { } if (field_0x109c != 0) { - cXyz sp30(l_centerOfst); + cXyz sp30(l_centerOfst.x, l_centerOfst.y, l_centerOfst.z); mDoMtx_stack_c::transS(0.0f, 0.0f, 0.0f); mDoMtx_stack_c::ZXYrotM(field_0x91a); sp30.x += aTrembleTrans[field_0x10a0 % 15].x; @@ -1059,7 +1165,7 @@ void daObj_GrA_c::setMtx(int param_1) { model->setUserArea(0); } - if (cLib_checkBit(field_0x840, 0x20) != 0) { + if (cLib_checkBit(u16(field_0x840), 0x20) != 0) { mBck.getBckAnm()->setFrame(mBck.getFrame()); mpModelMorf->modelCalc(); } else { @@ -1108,13 +1214,13 @@ void daObj_GrA_c::setCollisions() { if (field_0xa90 == 10 || field_0xa90 == 4) { field_0xf50.SetH(200.0f); } else { - field_0xf50.SetH(daObj_GrA_Param_c::m.field_0x14); + field_0xf50.SetH(mpHIO->m.field_0x14); } - field_0xf50.SetR(daObj_GrA_Param_c::m.mWallH); + field_0xf50.SetR(mpHIO->m.mWallH); if (field_0xf50.ChkAtSet()) { - field_0xf50.SetR(daObj_GrA_Param_c::m.mWallH + 40.0f); + field_0xf50.SetR(mpHIO->m.mWallH + 40.0f); } if (cLib_calcTimer(&field_0x1fd8) == 0) { @@ -1131,14 +1237,14 @@ void daObj_GrA_c::setCollisions() { mDoMtx_stack_c::scaleM(scale); mDoMtx_stack_c::multVecZero(&sp1c); field_0xce0[1].SetC(sp1c); - field_0xce0[1].SetR(daObj_GrA_Param_c::m.field_0x8c); + field_0xce0[1].SetR(mpHIO->m.field_0x8c); dComIfG_Ccsp()->Set(&field_0xce0[1]); mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(17)); mDoMtx_stack_c::scaleM(scale); mDoMtx_stack_c::multVecZero(&sp1c); field_0xce0[0].SetC(sp1c); - field_0xce0[0].SetR(daObj_GrA_Param_c::m.field_0x8c); + field_0xce0[0].SetR(mpHIO->m.field_0x8c); dComIfG_Ccsp()->Set(&field_0xce0[0]); } } @@ -1154,9 +1260,21 @@ void daObj_GrA_c::setAttnPos() { mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(4)); mDoMtx_stack_c::multVec(&aEyeOfst, &eyePos); mDoMtx_stack_c::multVecZero(&sp18); - attention_info.position.set(sp18.x, sp18.y + daObj_GrA_Param_c::m.field_0x00, sp18.z); + attention_info.position.set(sp18.x, sp18.y + mpHIO->m.field_0x00, sp18.z); } +#if DEBUG +static s16 dummy_lit_124881(int sel) { + const s16 arr[2] = {0x00C8, 0x0040}; + return arr[sel]; +} + +static s16 dummy_lit_124886(int sel) { + const s16 arr[2] = {0x8000, 0x00A0}; + return arr[sel]; +} +#endif + /* 80C02A5C-80C02A60 002C3C 0004+00 1/0 0/0 0/0 .text drawOtherMdls__11daObj_GrA_cFv */ void daObj_GrA_c::drawOtherMdls() { /* empty function */ @@ -1234,13 +1352,13 @@ int daObj_GrA_c::lookat() { csXyz acStack_60[4]; csXyz acStack_78[4]; - acStack_60[0].set(cM_deg2s(-daObj_GrA_Param_c::m.field_0x28) - 0x4000, cM_deg2s(daObj_GrA_Param_c::m.field_0x2c), 0); + acStack_60[0].set(cM_deg2s(-mpHIO->m.field_0x28) - 0x4000, cM_deg2s(mpHIO->m.field_0x2c), 0); acStack_60[1].set(-0x4000, 0, 0); - acStack_60[2].set(cM_deg2s(-daObj_GrA_Param_c::m.field_0x38), cM_deg2s(daObj_GrA_Param_c::m.field_0x3c), 0); + acStack_60[2].set(cM_deg2s(-mpHIO->m.field_0x38), cM_deg2s(mpHIO->m.field_0x3c), 0); acStack_60[3].set(0, 0, 0); - acStack_78[0].set(cM_deg2s(-daObj_GrA_Param_c::m.field_0x24) - 0x4000, cM_deg2s(daObj_GrA_Param_c::m.field_0x30), 0); + acStack_78[0].set(cM_deg2s(-mpHIO->m.field_0x24) - 0x4000, cM_deg2s(mpHIO->m.field_0x30), 0); acStack_78[1].set(-0x4000, 0, 0); - acStack_78[2].set(cM_deg2s(-daObj_GrA_Param_c::m.field_0x34), cM_deg2s(daObj_GrA_Param_c::m.field_0x40), 0); + acStack_78[2].set(cM_deg2s(-mpHIO->m.field_0x34), cM_deg2s(mpHIO->m.field_0x40), 0); acStack_78[3].set(0, 0, 0); cXyz sp48[4]; @@ -1322,7 +1440,7 @@ int daObj_GrA_c::hitChk() { field_0xab0.entry(field_0xf50.GetTgHitAc()); if (field_0x1528.field_0xa18 != 0) { - field_0xaa4 = daObj_GrA_Param_c::m.field_0x54; + field_0xaa4 = mpHIO->m.field_0x54; def_se_set(&mSound, field_0xf50.GetTgHitObj(), 0x2C, NULL); setProcess(&daObj_GrA_c::rollReturn); health = 0; @@ -1351,13 +1469,13 @@ int daObj_GrA_c::wait(void* param_1) { switch (mMode) { case 0: - setBaseMotion(0, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(0, mpHIO->m.field_0x0c); setFaceMotion(0, -1.0f); setProcess(&daObj_GrA_c::standWait); break; case 1: - setBaseMotion(0, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(0, mpHIO->m.field_0x0c); setFaceMotion(0, -1.0f); setProcess(&daObj_GrA_c::standWaitJump); setLookMode(1); @@ -1400,7 +1518,7 @@ int daObj_GrA_c::talk(void* param_1) { if (sVar1 != field_0x91a.y) { if (field_0x1fcc < 2) { if (turn_step(sVar1, 0, 19, 20)) { - setBaseMotion(0, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(0, mpHIO->m.field_0x0c); setFaceMotion(0, -1.0f); } @@ -1434,7 +1552,7 @@ int daObj_GrA_c::talk(void* param_1) { iVar3 = field_0xaa0; if (ctrlMsgAnm(iVar1, iVar2, this) != 0) { if (iVar2 != -1) { - setBaseMotion(l_eventMotionChangeTable[iVar2], daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(l_eventMotionChangeTable[iVar2], mpHIO->m.field_0x0c); } if (iVar1 != -1) { @@ -1617,6 +1735,7 @@ int daObj_GrA_c::setPrtcl() { } #include "d/actor/d_a_obj_gra2_soldier.inc" +#include "d/actor/d_a_obj_gra2_base.inc" /* 80C03B14-80C03B48 003CF4 0034+00 1/0 0/0 0/0 .text base000__11daObj_GrA_cFi */ int daObj_GrA_c::base000(int param_1) { @@ -1641,7 +1760,7 @@ int daObj_GrA_c::base003(int param_1) { if (param_1 != 0) { setBaseAnm(4, field_0xa94); } else if (mpModelMorf->isStop()) { - setBaseMotion(0, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(0, mpHIO->m.field_0x0c); setBaseAnm(0, field_0xa94); } @@ -1653,7 +1772,7 @@ int daObj_GrA_c::base004(int param_1) { if (param_1 != 0) { setBaseAnm(5, field_0xa94); } else if (mpModelMorf->isStop()) { - setBaseMotion(0, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(0, mpHIO->m.field_0x0c); setBaseAnm(0, field_0xa94); } @@ -1994,7 +2113,8 @@ int daObj_GrA_c::face017(int param_1) { /* 80C048B8-80C048F8 004A98 0040+00 1/0 0/0 0/0 .text face999__11daObj_GrA_cFi */ int daObj_GrA_c::face999(int param_1) { if (param_1 != 0) { - cLib_offBit(field_0x840, 0x22); + int reg_r30 = 0x22; + cLib_offBit(field_0x840, reg_r30); setFaceBtp(0); } @@ -2017,7 +2137,7 @@ int daObj_GrA_c::evtcutTalk(int param_1, int param_2) { int iVar3 = field_0xaa0; if (ctrlMsgAnm(iVar1, iVar2, this) != 0) { if (iVar2 != -1) { - setBaseMotion(l_eventMotionChangeTable[iVar2], daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(l_eventMotionChangeTable[iVar2], mpHIO->m.field_0x0c); } if (iVar1 != -1) { @@ -2036,44 +2156,40 @@ int daObj_GrA_c::evtcutTalk(int param_1, int param_2) { void daObj_GrA_c::setFaceTalkAfter() { switch (field_0xa92) { case 6: - setFaceMotion(4, daObj_GrA_Param_c::m.field_0x0c); + setFaceMotion(4, mpHIO->m.field_0x0c); break; case 7: - setFaceMotion(5, daObj_GrA_Param_c::m.field_0x0c); + setFaceMotion(5, mpHIO->m.field_0x0c); break; default: - setFaceMotion(0, daObj_GrA_Param_c::m.field_0x0c); + setFaceMotion(0, mpHIO->m.field_0x0c); } } /* 80C04A88-80C04AA8 004C68 0020+00 1/0 0/0 0/0 .text daObj_GrA_Create__FPv */ -static int daObj_GrA_Create(void* param_1) { - daObj_GrA_c* i_this = (daObj_GrA_c*)param_1; - return i_this->create(); +static int daObj_GrA_Create(void* i_this) { + return ((daObj_GrA_c*)i_this)->create(); } /* 80C04AA8-80C04AC8 004C88 0020+00 1/0 0/0 0/0 .text daObj_GrA_Delete__FPv */ -static int daObj_GrA_Delete(void* param_1) { - daObj_GrA_c* i_this = (daObj_GrA_c*)param_1; - return i_this->MoveBGDelete(); +static int daObj_GrA_Delete(void* i_this) { + return ((daObj_GrA_c*)i_this)->MoveBGDelete(); } /* 80C04AC8-80C04AE8 004CA8 0020+00 1/0 0/0 0/0 .text daObj_GrA_Execute__FPv */ -static int daObj_GrA_Execute(void* param_1) { - daObj_GrA_c* i_this = (daObj_GrA_c*)param_1; - return i_this->MoveBGExecute(); +static int daObj_GrA_Execute(void* i_this) { + return ((daObj_GrA_c*)i_this)->MoveBGExecute(); } /* 80C04AE8-80C04B14 004CC8 002C+00 1/0 0/0 0/0 .text daObj_GrA_Draw__FPv */ -static int daObj_GrA_Draw(void* param_1) { - daObj_GrA_c* i_this = (daObj_GrA_c*)param_1; - return i_this->Draw(); +static int daObj_GrA_Draw(void* i_this) { + return ((daObj_GrA_c*)i_this)->MoveBGDraw(); } /* 80C04B14-80C04B1C 004CF4 0008+00 1/0 0/0 0/0 .text daObj_GrA_IsDelete__FPv */ -static int daObj_GrA_IsDelete(void* param_1) { +static int daObj_GrA_IsDelete(void* i_this) { return 1; } diff --git a/src/d/actor/d_a_obj_gra2_base.inc b/src/d/actor/d_a_obj_gra2_base.inc new file mode 100644 index 00000000000..ca0bf5430af --- /dev/null +++ b/src/d/actor/d_a_obj_gra2_base.inc @@ -0,0 +1,682 @@ +// NOTE: This filename is a complete conjecture. + +#include "d/actor/d_a_obj_gra2.h" + +/* 80C0CF2C-80C0CF98 00D10C 006C+00 1/1 0/0 0/0 .text s_sub2__FPvPv */ +static void* s_sub2(void* i_actor, void* i_data) { + daObj_GrA_c* i_this = (daObj_GrA_c*)i_data; + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_OBJ_GRA && (u8)i_this->checkGraSub((fopAc_ac_c*)i_actor)) { + return i_actor; + } + return NULL; +} + +/* 80C0CF98-80C0D000 00D178 0068+00 1/1 0/0 0/0 .text checkGraSub__11daObj_GrA_cFP10fopAc_ac_c */ +BOOL daObj_GrA_c::checkGraSub(fopAc_ac_c* a_this) { + daObj_GrA_c* i_this = (daObj_GrA_c*)a_this; + + if (i_this->mMode != 0) { + return FALSE; + } + + if (getTagNo() == i_this->getTagNo()) { + return TRUE; + } + + return FALSE; +} + +/* 80C0D000-80C0D2FC 00D1E0 02FC+00 1/0 0/0 0/0 .text waitDemo__11daObj_GrA_cFPv */ +int daObj_GrA_c::waitDemo(void* param_1) { + cXyz sp34; + daPy_py_c* player = daPy_getPlayerActorClass(); + + switch (field_0xa7c) { + case 0: + setBaseMotion(0, mpHIO->m.field_0x0c); + setFaceMotion(13, -1.0f); + setLookMode(0); + break; + + case 1: + if (getTagNo() != 0) { + bool has_actor = field_0x204c.getActor() == NULL; + + if (field_0x2032 == 0 || has_actor) { + if (field_0x2032 == 0) { + fopAc_ac_c* actor_p = (fopAc_ac_c*) fpcM_Search(s_sub, this); + if (actor_p != NULL) { + daTagGra_c* graTag_p = (daTagGra_c*) actor_p; + if (graTag_p->getMode() == 2) { + mGraPos = graTag_p->getGraPos(); + mGraExtent = graTag_p->getGraExtent(); + mGraHeight = graTag_p->getGraHeight(); + mGraMode = graTag_p->getMode(); + field_0x2032 = 1; + fopAcM_delete(actor_p); + } + } + } + + if (has_actor) { + fopAc_ac_c* o_actor_p = (fopAc_ac_c*)fpcM_Search(s_sub2, this); + if (o_actor_p != NULL) { + field_0x204c.entry(o_actor_p); + } + } + } else { + #ifdef DEBUG + if (mpHIO->m.field_0x8a) { + fopAcM_OffStatus(this, fopAcM_STATUS_UNK_0x100); + } else { + fopAcM_OnStatus(this, fopAcM_STATUS_UNK_0x100); + } + #endif + + sp34 = player->current.pos - mGraPos; + if (sp34.absXZ() < mGraExtent && sp34.z > -30.0f && sp34.z < mGraHeight) { + setProcess(&daObj_GrA_c::startDemo); + } + } + } + break; + + case 2: + #ifdef DEBUG + fopAcM_OnStatus(this, fopAcM_STATUS_UNK_0x100); + #endif + break; + } + + return 1; +} + +/* 80C0D2FC-80C0D3A8 00D4DC 00AC+00 1/1 0/0 0/0 .text skipDemoGra__11daObj_GrA_cFv */ +int daObj_GrA_c::skipDemoGra() { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + daObj_GrA_c* gra_p = (daObj_GrA_c*)field_0x204c.getActor(); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + gra_p->soldierDemoSkip(); + gra_p->field_0x204c.entry(NULL); + dComIfGs_onSwitch(field_0xa7f, fopAcM_GetRoomNo(this)); + return 1; +} + +/* 80C0D3A8-80C0D3E0 00D588 0038+00 1/1 0/0 0/0 .text skipCallBack__FPvi */ +static int skipCallBack(void* param_1, int param_2) { + daObj_GrA_c* i_this = (daObj_GrA_c*)param_1; + i_this->skipDemoGra(); + fopAcM_delete(i_this); + return 1; +} + +/* 80C0D3E0-80C0EFC4 00D5C0 1BE4+00 2/0 0/0 0/0 .text startDemo__11daObj_GrA_cFPv */ +int daObj_GrA_c::startDemo(void* param_1) { + daPy_py_c* player = daPy_getPlayerActorClass(); + daObj_GrA_c* gra_p = (daObj_GrA_c *)field_0x204c.getActor(); + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + dCamera_c* camBody = dCam_getBody(); + + switch (field_0xa7c) { + case 0: + setBaseMotion(0, mpHIO->m.field_0x0c); + setFaceMotion(13, -1.0f); + setLookMode(0); + mDemoCamMode = 1; + field_0x209c = 1; + break; + + case 1: { + switch (mDemoCamMode) { + case 0: + break; + + case 1: { + if (!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xFFEF, 0); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); + return 1; + } + + camera->mCamera.Stop(); + mDemoCamMode = 2; + field_0x2056 = 0; + mDemoCamFovy = field_0x208c = camBody->Fovy(); + mDemoCamCenter = mGraPos; + mDemoCamCenter.y += 150.0f; + mDemoCamEye = mDemoCamCenter; + mDemoCamEye.z += 700.0f; + mDemoCamCenter.x += 50.0f; + field_0x2080 = mDemoCamCenter; + field_0x2074 = mDemoCamEye; + + camera->mCamera.SetTrimSize(2); + player->changeOriginalDemo(); + gra_p->field_0x204c.entry(this); + gra_p->setProcess(&daObj_GrA_c::soldierDemo); + fopAcM_OnStatus(gra_p, fopAcM_STATUS_UNK_0x8000); + field_0x2056 = 0; + dComIfGp_getEvent().setSkipProc(this, skipCallBack, 0); + dComIfGp_getEvent().onSkipFade(); + } + // fallthrough + case 2: { + cXyz player_pos = player->current.pos; + if ((player_pos - mGraPos).abs() < 50.0f) { + if (field_0x2056 >= 60) { + mDemoCamMode = 3; + field_0x2056 = 0; + } else { + csXyz player_angle = player->current.angle; + s16 tgt_ang = cLib_targetAngleY(&player->current.pos, ¤t.pos) + 0x800; + cLib_addCalcAngleS2(&player_angle.y, tgt_ang, 2, field_0x1528.field_0xa14); + player->setPlayerPosAndAngle(&player->current.pos, &player_angle); + field_0x2056++; + break; + } + } else { + player->changeDemoMode(3, 0, 0, 0); + player->changeDemoPos0(&mGraPos); + break; + } + } + // fallthrough + case 3: { + if (field_0x2056 >= 180) { + mDemoCamMode = 4; + field_0x2056 = 0; + field_0x2080 = mDemoCamCenter; + field_0x2074 = mDemoCamEye; + } else { + csXyz player_angle = player->current.angle; + s16 sVar1 = cLib_targetAngleY(&player->current.pos, ¤t.pos) - 0x2800; + cLib_addCalcAngleS2(&player_angle.y, sVar1, 4, field_0x1528.field_0xa14); + player->setPlayerPosAndAngle(&player->current.pos, &player_angle); + + mDoMtx_stack_c::YrotS(sVar1); + cXyz sp3c(0.0f, 150.0f, 100.0f); + mDoMtx_stack_c::multVec(&sp3c, &sp3c); + sp3c += player->current.pos; + cLib_addCalcPos2(&mDemoCamEye, sp3c, 0.05f, (field_0x2074 - sp3c).abs() / 40.0f); + + mDoMtx_stack_c::YrotS(sVar1); + cXyz sp48(0.0f, 100.0f, 300.0f); + mDoMtx_stack_c::multVec(&sp48, &sp48); + sp48 += player->current.pos; + cLib_addCalcPos2(&mDemoCamCenter, sp48, 0.05f, (sp48 - field_0x2080).abs() / 25.0f); + field_0x2056++; + break; + } + } + // fallthrough + case 4: { + if (field_0x2056 >= 180) { + mDemoCamMode = 5; + field_0x2056 = 0; + field_0x2080 = mDemoCamCenter; + field_0x2074 = mDemoCamEye; + } else { + csXyz player_angle = player->current.angle; + s16 sVar1 = cLib_targetAngleY(&player->current.pos, ¤t.pos) + 0x800; + cLib_addCalcAngleS2(&player_angle.y, sVar1, 1, field_0x1528.field_0xa14); + player->setPlayerPosAndAngle(&player->current.pos, &player_angle); + + mDoMtx_stack_c::YrotS(sVar1); + cXyz sp54(0.0f, 150.0f, 100.0f); + mDoMtx_stack_c::multVec(&sp54, &sp54); + sp54 += player->current.pos; + cLib_addCalcPos2(&mDemoCamEye, sp54, 0.06f, (field_0x2074 - sp54).abs() / 70.0f); + + mDoMtx_stack_c::YrotS(sVar1); + cXyz sp60(0.0f, 230.0f, 300.0f); + mDoMtx_stack_c::multVec(&sp60, &sp60); + sp60 += player->current.pos; + cLib_addCalcPos2(&mDemoCamCenter, sp60, 0.06f, (sp60 - field_0x2080).abs() / 70.0f); + + if (field_0x2056 == 150) { + setBaseMotion(16, 0.0f); + setFaceMotion(11, 0.0f); + setLookMode(0); + gra_p->setBaseMotion(17, mpHIO->m.field_0x0c); + gra_p->setFaceMotion(12, -1.0f); + gra_p->setLookMode(0); + + current.angle.y += (s16) 0x4000; + field_0x91a.y = shape_angle.y = current.angle.y; + } + + field_0x2056++; + break; + } + } + // fallthrough + case 5: { + if (field_0x2056 >= 40) { + mDemoCamMode = 6; + field_0x2056 = 0; + } else { + mDoMtx_stack_c::YrotS(cLib_targetAngleY(&player->current.pos, ¤t.pos)); + cXyz sp6c(0.0f, 150.0f, 100.0f); + mDoMtx_stack_c::multVec(&sp6c, &sp6c); + sp6c += player->current.pos; + cLib_addCalcPos2(&mDemoCamEye, sp6c, 0.01f, (field_0x2074 - sp6c).abs() / 60.0f); + + cXyz player_pos = current.pos; + player_pos.y += 280.0f; + cLib_addCalcPos2(&mDemoCamCenter, player_pos, 0.5f, + (player_pos - field_0x2080).abs() / (200.0f - field_0x2056 * 3)); + field_0x2056++; + break; + } + } + // fallthrough + case 6: { + if (field_0x2056 >= 90) { + mDemoCamMode = 7; + field_0x2056 = 0; + } else { + mDoMtx_stack_c::YrotS(cLib_targetAngleY(&player->current.pos, ¤t.pos)); + cXyz sp84(100.0f, -50.0f, -800.0f); + mDoMtx_stack_c::multVec(&sp84, &sp84); + sp84 += current.pos; + cLib_addCalcPos2(&mDemoCamEye, sp84, 0.5f, (field_0x2074 - sp84).abs() / 35.0f); + + cXyz player_pos = current.pos; + player_pos.y += 280.0f; + cLib_addCalcPos2(&mDemoCamCenter, player_pos, 0.35f, (player_pos - field_0x2080).abs() / 20.0f); + field_0x2056++; + break; + } + } + // fallthrough + case 7: { + if (mpModelMorf->isStop()) { + gra_p->setDemoMode(1); + setDemoMode(8); + field_0x2056 = 0; + setBaseMotion(0, mpHIO->m.field_0x0c); + setFaceMotion(13, -1.0f); + setLookMode(2); + } + break; + } + + case 8: { + if (gra_p->field_0xa90 != 20 || !gra_p->mpModelMorf->isStop()) break; + + setDemoMode(9); + setBaseMotion(1, mpHIO->m.field_0x0c); + setFaceMotion(13, -1.0f); + field_0x2080 = mDemoCamCenter; + } + // fallthrough + case 9: { + cXyz sp9c(0.0f, 0.0f, 80.0f); + mDoMtx_stack_c::YrotS(gra_p->current.angle.y); + mDoMtx_stack_c::multVec(&sp9c, &sp9c); + sp9c += gra_p->current.pos; + if (field_0xa90 != 15) { + if (mAcchCir.ChkWallHit() && gra_p == dComIfG_Bgsp().GetActorPointer(mAcchCir)) { + if (field_0xa90 != 15) { + setBaseMotion(15, mpHIO->m.field_0x0c); + setFaceMotion(13, -1.0f); + setLookMode(0); + current.angle.y = cLib_targetAngleY(¤t.pos, &sp9c); + shape_angle.y = current.angle.y; + field_0x91a.y = current.angle.y; + mAcch.SetGrndNone(); + mAcch.SetWallNone(); + gravity = 0.0f; + speed.setall(0.0f); + speedF = 0.0f; + } + } else { + s16 tgt_ang = cLib_targetAngleY(¤t.pos, &sp9c); + cLib_addCalcAngleS2(¤t.angle.y, tgt_ang, 4, mpHIO->m.field_0x88); + shape_angle.y = current.angle.y; + field_0x91a.y = current.angle.y; + cLib_chasePosXZ(¤t.pos, sp9c, mpHIO->m.field_0x90); + } + } else { + if (!mpModelMorf->isStop()) { + mAcch.SetGrndNone(); + mAcch.SetWallNone(); + gravity = 0.0f; + } else { + cXyz spa8(0.0f, 146.09f, 161.97f); + mDoMtx_stack_c::YrotS(field_0x91a.y); + mDoMtx_stack_c::multVec(&spa8, &spa8); + current.pos += spa8; + old.pos = current.pos; + gravity = 0.0f; + setLookMode(0); + setDemoMode(10); + gra_p->setDemoMode(3); + setBaseMotion(18, 0.0f); + setFaceMotion(13, 0.0f); + } + + cXyz player_pos = gra_p->current.pos; + cLib_addCalcPosXZ2(&mDemoCamCenter, player_pos, 0.1f, (player_pos - field_0x2080).abs() / 30.0f); + break; + } + } + // fallthrough + case 10: { + if (gra_p->getDemoMode() == 4) { + setBaseMotion(10, 6.0f); + setFaceMotion(13, 6.0f); + calcMotion(); + mpModelMorf->setPlaySpeed(3.0f); + setDemoMode(11); + mAcch.ClrGrndNone(); + mAcch.ClrWallNone(); + gravity = mpHIO->m.mGravity; + speedF = 13.0f; + speed.y = 70.0f; + field_0x2056 = 0; + } else { + cLib_addCalcAngleS2(¤t.angle.y, gra_p->home.angle.y + 0x8000, 16, mpHIO->m.field_0x88); + shape_angle.y = current.angle.y; + field_0x91a.y = current.angle.y; + cXyz player_pos = gra_p->current.pos; + cLib_addCalcPosXZ2(&mDemoCamCenter, player_pos, 0.1f, (player_pos - field_0x2080).abs() / 30.0f); + gravity = 0.0f; + } + + break; + } + + case 11: { + if (field_0x2056 >= 250) { + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + fopAcM_OffStatus(gra_p, 0x8000); + gra_p->setProcess(&daObj_GrA_c::wait); + dComIfGs_onSwitch(field_0xa7f, fopAcM_GetRoomNo(this)); + fopAcM_delete(this); + break; + } + + if (mAcch.ChkGroundLanding()) { + cXyz spcc(0.0f, 0.0f, 20.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(field_0x91a.y); + mDoMtx_stack_c::multVec(&spcc, &field_0xab8[2].field_0x4); + field_0xab8[2].field_0x10 = field_0x91a; + field_0xab8[2].field_0x0 = 1; + + mSound.startCreatureSound(Z2SE_GORON_ROLL_BOUND, 0, -1); + speedF = 20.0f; + } else if (mAcch.ChkGroundHit()) { + cXyz spd8(-1482.0f, 3650.0f, -4459.0f); + if ((current.pos - spd8).absXZ() > 50.0f) { + cLib_addCalcAngleS2(¤t.angle.y, cLib_targetAngleY(¤t.pos, &spd8), + 24, mpHIO->m.field_0x88); + shape_angle.y = current.angle.y; + field_0x91a.y = current.angle.y; + } else { + speedF = 0.0f; + } + + field_0x2056++; + } + + if (speed.y > 0.0f) { + cXyz spe4 = mDemoCamCenter; + mDemoCamEye += (current.pos - spe4); + } + + mDemoCamCenter = current.pos; + } + } + + break; + } + + case 2: + field_0x209c = 0; + break; + + default: + break; + } + + if (mDemoCamMode != 0) { + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); + field_0x2056++; + } + + return 1; +} + +/* 80C0EFC4-80C0F17C 00F1A4 01B8+00 1/1 0/0 0/0 .text turn__11daObj_GrA_cFsfi */ +BOOL daObj_GrA_c::turn(s16 param_1, f32 param_2, int param_3) { + int o_prm_1 = param_1; + if (field_0x1fc8 == 0) { + field_0x1fd0 = fabsf(cM_sht2d((s16)(current.angle.y - param_1))); + field_0x1fd0 = field_0x1fd0 / 180.0f * param_2; + field_0x1fd0 = (int)field_0x1fd0 + 1; + + if (field_0x1fd0 < 8.0f) { + field_0x1fd0 = 8.0f; + } + + field_0x1fd4 = current.angle.y; + } + + s16 sVar1 = field_0x1fd4; + if (param_3 == 0) { + param_3 = ((s16) (param_1 - field_0x1fd4) >= 0) ? 1 : -1; + } + + int var_r30 = (u16) (o_prm_1 - sVar1); + if (param_3 < 0) { + var_r30 = -(u16)(0xFFFF - var_r30); + } + + var_r30 *= cM_ssin(field_0x1fc8); + field_0x1fc8 = field_0x1fc8 + 16384.0f / field_0x1fd0; + if ((u16)field_0x1fc8 >= 0x4000) { + current.angle.y = param_1; + field_0x1fc8 = 0x4000; + } else { + current.angle.y = field_0x1fd4 + var_r30; + } + + return param_1 == current.angle.y; +} + +/* 80C0F17C-80C0F330 00F35C 01B4+00 2/2 0/0 0/0 .text turn_step__11daObj_GrA_cFsiii */ +BOOL daObj_GrA_c::turn_step(s16 param_1, int param_2, int param_3, int param_4) { + if (field_0x1fcc == 0) { + if ((int)fabsf(cM_sht2d((s16)(param_1 - field_0x91a.y))) > 20) { + if (param_2 >= 0 && field_0xa92 != param_2) { + setFaceMotion(param_2, 3.0f); + } + + if (param_3 >= 0 && field_0xa90 != param_3) { + setBaseMotion(param_3, 3.0f); + } + } + + field_0x1fd6 = param_1; + field_0x1fc8 = 0; + + if (field_0x91a.y == field_0x1fd6) { + field_0x1fcc++; + } + + current.angle.y = field_0x91a.y; + shape_angle.y = current.angle.y; + field_0x1fcc++; + } else if (field_0x1fcc == 1) { + if (turn(field_0x1fd6, param_4, 0) != 0) { + shape_angle.y = current.angle.y; + field_0x91a.y = current.angle.y; + field_0x1fcc++; + } else { + shape_angle.y = current.angle.y; + field_0x91a.y = current.angle.y; + } + } + + return (field_0x1fcc > 1) ? 1 : 0; +} + +/* 80C0F330-80C0F590 00F510 0260+00 1/1 0/0 0/0 .text chkFindPlayer2__11daObj_GrA_cFis */ +BOOL daObj_GrA_c::chkFindPlayer2(int param_1, s16 param_2) { + cXyz sp80 = getAttentionPos(daPy_getPlayerActorClass()); + s16 angle_diff = fopAcM_searchPlayerAngleY(this) - current.angle.y; + + int dist_tbl_idx; + if (abs(angle_diff) < 0x3C00) { + dist_tbl_idx = (param_1 == 0) ? getDistTableIdx(10, 6) : getDistTableIdx(12, 6); + } else { + dist_tbl_idx = (param_1 == 0) ? getDistTableIdx(4, 6) : getDistTableIdx(6, 6); + } + + f32 fVar1 = (param_1 == 0) ? dComIfGp_getAttention()->getDistTable(dist_tbl_idx).mDistMax + : dComIfGp_getAttention()->getDistTable(dist_tbl_idx).mDistMaxRelease; + f32 fVar2 = dComIfGp_getAttention()->getDistTable(dist_tbl_idx).mLowerY * -1.0f; + f32 fVar3 = dComIfGp_getAttention()->getDistTable(dist_tbl_idx).mUpperY * -1.0f; + u32 uVar2 = dComIfGp_getAttention()->getDistTable(dist_tbl_idx).mAngleSelect; + + f32 fVar4 = 180.0f; + if ((uVar2 & 8) != 0) { + fVar4 = 30.0f; + } else if ((uVar2 & 16) != 0) { + fVar4 = 45.0f; + } else if ((uVar2 & 32) != 0) { + fVar4 = 60.0f; + } else if ((uVar2 & 64) != 0) { + fVar4 = 90.0f; + } else if ((uVar2 & 128) != 0) { + fVar4 = 110.0f; + } else if ((uVar2 & 256) != 0) { + fVar4 = 135.0f; + } + + if (chkPointInArea(sp80, attention_info.position, fVar1, fVar2, fVar3, 0)) { + if (chkActorInSight2(daPy_getPlayerActorClass(), fVar4, param_2)) { + return TRUE; + } + } + + return FALSE; +} + +/* 80C0F5A4-80C0F668 00F784 00C4+00 1/1 0/0 0/0 .text chkPointInArea__11daObj_GrA_cF4cXyz4cXyzfffs */ +BOOL daObj_GrA_c::chkPointInArea(cXyz param_1, cXyz param_2, f32 param_3, f32 param_4, f32 param_5, s16 param_6) { + cXyz sp68, sp74; + f32 var_f30 = param_4; + f32 var_f31 = param_5; + + if (var_f30 < var_f31) { + var_f31 = param_4; + var_f30 = param_5; + } + + sp68.set(param_3, fabsf(var_f30 - var_f31) / 2, param_3); + sp74 = param_2; + sp74.y += var_f31; + sp74.y += sp68.y; + + return chkPointInArea(param_1, sp74, sp68, param_6); +} + +/* 80C0F668-80C0F6E0 00F848 0078+00 1/1 0/0 0/0 .text chkPointInArea__11daObj_GrA_cF4cXyz4cXyz4cXyzs */ +BOOL daObj_GrA_c::chkPointInArea(cXyz param_1, cXyz param_2, cXyz param_3, s16 param_4) { + return daNpcF_chkPointInArea(param_1, param_2, param_3, param_4); +} + +/* 80C0F6E0-80C0F7EC 00F8C0 010C+00 1/1 0/0 0/0 .text chkActorInSight2__11daObj_GrA_cFP10fopAc_ac_cfs */ +BOOL daObj_GrA_c::chkActorInSight2(fopAc_ac_c* actor, f32 param_2, s16 param_3) { + if (param_2 < 180.0f) { + s16 sVar1 = cM_deg2s(param_2); + cXyz sp34 = getAttentionPos(actor); + cSGlobe cStack_48(attention_info.position - sp34); + cSAngle acStack_4c(cSAngle(cStack_48.U().Inv()) - param_3); + s16 sVar2 = acStack_4c.Val(); + if (sVar2 < 0) { + sVar2 = -sVar2; + } + + return (sVar2 > sVar1) == 0; + } + + return 1; +} + +/* 80C0F7EC-80C0F860 00F9CC 0074+00 2/2 0/0 0/0 .text getAttentionPos__11daObj_GrA_cFP10fopAc_ac_c */ +cXyz daObj_GrA_c::getAttentionPos(fopAc_ac_c* i_actor_p) { + cXyz pos = i_actor_p->attention_info.position; + + if (fopAcM_GetName(i_actor_p) == PROC_ALINK) { + pos.y -= daPy_py_c::getAttentionOffsetY(); + } + + return pos; +} + +/* 80C0F860-80C0FA68 00FA40 0208+00 2/0 0/0 0/0 .text standWaitJump__11daObj_GrA_cFPv */ +int daObj_GrA_c::standWaitJump(void* param_1) { + switch (field_0xa7c) { + case 0: + field_0x1fcc = 0; + break; + + case 1: + if (getJumpType() == 1) { + setLookMode(0); + if (home.angle.y != field_0x91a.y) { + if (turn_step(home.angle.y, 0, 19, 20) != 0) { + field_0x1fcc = 0; + setBaseMotion(21, mpHIO->m.field_0x0c); + setFaceMotion(0, -1.0f); + } + } else if (field_0xa90 != 21) { + setBaseMotion(21, mpHIO->m.field_0x0c); + setFaceMotion(0, -1.0f); + } + } else { + BOOL bVar1 = field_0x14f8.getActor() != NULL; + if (chkFindPlayer2(bVar1, shape_angle.y) != 0) { + if (!bVar1) { + field_0x14f8.entry(daPy_getPlayerActorClass()); + } + } else if (bVar1) { + field_0x14f8.entry(NULL); + } + + if (field_0x14f8.getActor() != NULL) { + setLookMode(1); + } else { + setLookMode(0); + if ((home.angle.y != field_0x91a.y) && (turn_step(home.angle.y, 0, 19, 20) != 0)) { + field_0x1fcc = 0; + setBaseMotion(0, mpHIO->m.field_0x0c); + setFaceMotion(0, -1.0f); + } + } + } + break; + + case 2: + break; + } + + return 1; +} + +void dummy_aVec(daObj_GrA_c* a_this) { + static cXyz aVec[4] = { + cXyz(0.0f, 0.0f, 0.0f), + cXyz(0.0f, 0.0f, 0.0f), + cXyz(0.0f, 0.0f, 0.0f), + cXyz(0.0f, 0.0f, 0.0f), + }; +} diff --git a/src/d/actor/d_a_obj_gra2_soldier.inc b/src/d/actor/d_a_obj_gra2_soldier.inc index dd250c44d63..927dccb1909 100644 --- a/src/d/actor/d_a_obj_gra2_soldier.inc +++ b/src/d/actor/d_a_obj_gra2_soldier.inc @@ -8,7 +8,7 @@ f32 daObj_GrA_c::getSrchCircleR() { f32 srchCircleR; u8 uVar1 = fopAcM_GetParam(this) & 0x7F; if (uVar1 == 0) { - srchCircleR = daObj_GrA_Param_c::m.field_0x6c * 10.0f; + srchCircleR = mpHIO->m.field_0x6c * 10.0f; } else { srchCircleR = uVar1 * 10; } @@ -45,7 +45,7 @@ int daObj_GrA_c::standWait(void* param_1) { cLib_offsetPos(¤t.pos, ¤t.pos, shape_angle.y, &sp68); if (mpModelMorf->isStop()) { - setBaseMotion(8, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(8, mpHIO->m.field_0x0c); setFaceMotion(13, -1.0f); setLookMode(1); } @@ -69,15 +69,15 @@ int daObj_GrA_c::standWait(void* param_1) { if (field_0x150c != 0) { setProcess(&daObj_GrA_c::walk); - setBaseMotion(1, field_0xa4c->m.field_0x0c); + setBaseMotion(1, mpHIO->m.field_0x0c); setFaceMotion(13, -1.0f); } else if (current.angle.y != home.angle.y) { - cLib_addCalcAngleS2(¤t.angle.y, home.angle.y, 1, daObj_GrA_Param_c::m.field_0x88); + cLib_addCalcAngleS2(¤t.angle.y, home.angle.y, 1, mpHIO->m.field_0x88); shape_angle.y = current.angle.y; field_0x91a.y = current.angle.y; if (current.angle.y == home.angle.y) { - setBaseMotion(0, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(0, mpHIO->m.field_0x0c); setFaceMotion(13, -1.0f); } } @@ -100,7 +100,7 @@ int daObj_GrA_c::walk(void* param_1) { switch (field_0xa7c) { case 0: - setBaseMotion(1, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(1, mpHIO->m.field_0x0c); setFaceMotion(13, -1.0f); break; @@ -129,10 +129,10 @@ int daObj_GrA_c::walk(void* param_1) { if (field_0x150c) { setLookMode(1); sp6c = player_pos; - if (fVar1 < daObj_GrA_Param_c::m.field_0x94) { - if (abs(sVar1) < cM_deg2s(daObj_GrA_Param_c::m.field_0x80)) { + if (fVar1 < mpHIO->m.field_0x94) { + if (abs(sVar1) < cM_deg2s(mpHIO->m.field_0x80)) { setProcess(&daObj_GrA_c::step); - field_0x1098 = daObj_GrA_Param_c::m.field_0x50; + field_0x1098 = mpHIO->m.field_0x50; field_0x108c = current.pos; break; } @@ -144,9 +144,9 @@ int daObj_GrA_c::walk(void* param_1) { break; } - cLib_addCalc2(&speedF, daObj_GrA_Param_c::m.field_0x90, 0.25f, 3.5f); + cLib_addCalc2(&speedF, mpHIO->m.field_0x90, 0.25f, 3.5f); cLib_addCalcAngleS2(¤t.angle.y, cLib_targetAngleY(¤t.pos, &sp6c), - 1, daObj_GrA_Param_c::m.field_0x88); + 1, mpHIO->m.field_0x88); shape_angle.y = current.angle.y; field_0x91a.y = current.angle.y; break; @@ -186,7 +186,7 @@ int daObj_GrA_c::defence(void* param_1) { if (field_0x842 != 0) { setProcess(&daObj_GrA_c::walk); } else { - cLib_addCalc2(&field_0x1098, daObj_GrA_Param_c::m.field_0x50, 0.25f, 20.0f); + cLib_addCalc2(&field_0x1098, mpHIO->m.field_0x50, 0.25f, 20.0f); cXyz sp2c(field_0x108c); sp2c.x -= field_0x1098 * cM_ssin(current.angle.y); sp2c.z -= field_0x1098 * cM_scos(current.angle.y); @@ -205,7 +205,7 @@ int daObj_GrA_c::defence(void* param_1) { field_0xab8[1].field_0x10 = current.angle; field_0xab8[1].field_0x10.y -= 0x8000; field_0xab8[1].field_0x0 = 1; - field_0xaa4 = daObj_GrA_Param_c::m.field_0x54; + field_0xaa4 = mpHIO->m.field_0x54; } break; @@ -253,8 +253,8 @@ int daObj_GrA_c::toStone(void* param_1) { field_0xaa8 = 30; } } else if (mpModelMorf->checkFrame(0.0f)) { - setBaseMotion(4, daObj_GrA_Param_c::m.field_0x0c / 2); - setFaceMotion(13, daObj_GrA_Param_c::m.field_0x0c / 2); + setBaseMotion(4, mpHIO->m.field_0x0c / 2); + setFaceMotion(13, mpHIO->m.field_0x0c / 2); calcMotion(); mpModelMorf->setFrame(mpModelMorf->getEndFrame()); mpModelMorf->setPlaySpeed(1.0f); @@ -274,12 +274,12 @@ int daObj_GrA_c::toStone(void* param_1) { field_0x10a0--; } else { if (field_0x10c4 != 0 && daPy_py_c::checkNowWolf() == 0) { - sVar1 = cM_deg2s(daObj_GrA_Param_c::m.field_0x4c); + sVar1 = cM_deg2s(mpHIO->m.field_0x4c); if (strcmp(dComIfGp_getStartStageName(), "F_SP109") == 0) { var_f31 = 95.0f; } else { - var_f31 = daObj_GrA_Param_c::m.field_0x48; + var_f31 = mpHIO->m.field_0x48; } // reversed in debug?! @@ -305,7 +305,7 @@ int daObj_GrA_c::toStone(void* param_1) { setLookMode(1); field_0x1528.field_0xa18 = 0; field_0xaac = 0; - health = daObj_GrA_Param_c::m.field_0x10; + health = mpHIO->m.field_0x10; field_0x109c = 0; } else if (mpModelMorf->checkFrame(12.0f)) { field_0xab8[3].field_0x4 = current.pos; @@ -331,7 +331,7 @@ int daObj_GrA_c::toStone(void* param_1) { int daObj_GrA_c::step(void* param_1) { switch (field_0xa7c) { case 0: - setBaseMotion(9, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(9, mpHIO->m.field_0x0c); setFaceMotion(9, -1.0f); field_0x1098 = 0.0f; field_0x1fe0 = 0; @@ -340,14 +340,14 @@ int daObj_GrA_c::step(void* param_1) { case 1: if (field_0x842 != 0) { - field_0x1528.field_0xa18 = daObj_GrA_Param_c::m.field_0x98; + field_0x1528.field_0xa18 = mpHIO->m.field_0x98; setProcess(&daObj_GrA_c::wait); - setBaseMotion(8, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(8, mpHIO->m.field_0x0c); setFaceMotion(8, -1.0f); } else if (mpModelMorf->getFrame() >= 25.0f && field_0x1fe0 == 0) { - field_0x1528.field_0xa18 = daObj_GrA_Param_c::m.field_0x98; + field_0x1528.field_0xa18 = mpHIO->m.field_0x98; setProcess(&daObj_GrA_c::wait); - setBaseMotion(13, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(13, mpHIO->m.field_0x0c); setFaceMotion(8, -1.0f); setLookMode(0); field_0xce0[0].OffAtSetBit(); @@ -355,9 +355,9 @@ int daObj_GrA_c::step(void* param_1) { field_0xce0[1].OffAtSetBit(); field_0xce0[1].ClrAtHit(); } else { - cLib_addCalc2(&speedF, daObj_GrA_Param_c::m.field_0x90 / 3.0f, 0.25f, 3.5f); + cLib_addCalc2(&speedF, mpHIO->m.field_0x90 / 3.0f, 0.25f, 3.5f); cLib_addCalcAngleS2(¤t.angle.y, cLib_targetAngleY(¤t.pos, &daPy_getPlayerActorClass()->current.pos), - 4, daObj_GrA_Param_c::m.field_0x88 / 4); + 4, mpHIO->m.field_0x88 / 4); shape_angle.y = current.angle.y; field_0x91a.y = current.angle.y; @@ -380,10 +380,10 @@ int daObj_GrA_c::step(void* param_1) { if (field_0xce0[1].ChkAtShieldHit()) { field_0xce0[1].ClrAtHit(); field_0xab0.entry(field_0xce0[1].GetAtHitAc()); - field_0x1528.field_0xa18 = daObj_GrA_Param_c::m.field_0x98; + field_0x1528.field_0xa18 = mpHIO->m.field_0x98; setProcess(&daObj_GrA_c::wait); - setBaseMotion(11, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(11, mpHIO->m.field_0x0c); setFaceMotion(8, -1.0f); setLookMode(0); @@ -400,10 +400,10 @@ int daObj_GrA_c::step(void* param_1) { if (field_0xce0[0].ChkAtShieldHit()) { field_0xab0.entry(field_0xce0[0].GetAtHitAc()); - field_0x1528.field_0xa18 = daObj_GrA_Param_c::m.field_0x98; + field_0x1528.field_0xa18 = mpHIO->m.field_0x98; setProcess(&daObj_GrA_c::wait); - setBaseMotion(12, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(12, mpHIO->m.field_0x0c); setFaceMotion(8, -1.0f); setLookMode(0); @@ -445,8 +445,8 @@ int daObj_GrA_c::rollReturn(void* param_1) { speedF = 0.0f; if (mMode == 1) { - setBaseMotion(20, daObj_GrA_Param_c::m.field_0x0c / 2); - setFaceMotion(13, daObj_GrA_Param_c::m.field_0x0c / 2); + setBaseMotion(20, mpHIO->m.field_0x0c / 2); + setFaceMotion(13, mpHIO->m.field_0x0c / 2); } else { if ((home.pos - current.pos).absXZ() < 150.0f) { setBaseMotion(4, 0.0f); @@ -501,7 +501,7 @@ int daObj_GrA_c::rollReturn(void* param_1) { } } else { cXyz sp60(home.pos); - cLib_addCalc2(&field_0x2008, daObj_GrA_Param_c::m.field_0xa0, 0.05f, 1.0f); + cLib_addCalc2(&field_0x2008, mpHIO->m.field_0xa0, 0.05f, 1.0f); cLib_chasePos(¤t.pos, sp60, field_0x2008); f32 var_f30 = field_0x2008 * 0.1f; @@ -514,8 +514,8 @@ int daObj_GrA_c::rollReturn(void* param_1) { if (mpModelMorf->isStop()) { if ((home.pos - current.pos).absXZ() < 40.0f) { setProcess(&daObj_GrA_c::toStone); - setBaseMotion(4, daObj_GrA_Param_c::m.field_0x0c / 2); - setFaceMotion(13, daObj_GrA_Param_c::m.field_0x0c / 2); + setBaseMotion(4, mpHIO->m.field_0x0c / 2); + setFaceMotion(13, mpHIO->m.field_0x0c / 2); calcMotion(); mpModelMorf->setFrame(mpModelMorf->getEndFrame()); mpModelMorf->setPlaySpeed(1.0f); @@ -537,7 +537,7 @@ int daObj_GrA_c::rollReturn(void* param_1) { case 1: { cXyz sp6c(home.pos); - cLib_addCalc2(&field_0x2008, daObj_GrA_Param_c::m.field_0xa0, 0.25f, 3.5f); + cLib_addCalc2(&field_0x2008, mpHIO->m.field_0xa0, 0.25f, 3.5f); cLib_chasePos(¤t.pos, sp6c, field_0x2008); fVar1 = field_0x2008 * 0.1f; @@ -590,7 +590,7 @@ int daObj_GrA_c::soldierDemo(void* param_1) { switch (field_0xa7c) { case 0: - setBaseMotion(0, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(0, mpHIO->m.field_0x0c); setFaceMotion(13, -1.0f); setLookMode(2); mDemoCamMode = 0; @@ -601,8 +601,8 @@ int daObj_GrA_c::soldierDemo(void* param_1) { switch (mDemoCamMode) { case 1: if (field_0xa90 == 17) { - setBaseMotion(20, daObj_GrA_Param_c::m.field_0x0c / 2); - setFaceMotion(13, daObj_GrA_Param_c::m.field_0x0c / 2); + setBaseMotion(20, mpHIO->m.field_0x0c / 2); + setFaceMotion(13, mpHIO->m.field_0x0c / 2); setLookMode(0); } else if (mpModelMorf->isStop()) { field_0x109c = 1; @@ -644,7 +644,7 @@ int daObj_GrA_c::soldierDemo(void* param_1) { case 4: if (mpModelMorf->isStop() && field_0xa90 != 0) { setLookMode(1); - setBaseMotion(0, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(0, mpHIO->m.field_0x0c); setFaceMotion(13, -1.0f); } else if (mpModelMorf->checkFrame(12.0f)) { field_0xab8[3].field_0x4 = current.pos; @@ -666,7 +666,7 @@ int daObj_GrA_c::soldierDemo(void* param_1) { f32 daObj_GrA_c::getSrchLinkR() { int iVar1 = fopAcM_GetParam(this) & 0x7F; if (iVar1 == 0) { - return daObj_GrA_Param_c::m.field_0x70 * 100.0f; + return mpHIO->m.field_0x70 * 100.0f; } return iVar1 * 100; @@ -675,7 +675,7 @@ f32 daObj_GrA_c::getSrchLinkR() { /* 80C07C98-80C07CF0 007E78 0058+00 1/1 0/0 0/0 .text getSrchGraR__11daObj_GrA_cFv */ f32 daObj_GrA_c::getSrchGraR() { if (field_0x200c == 0) { - return daObj_GrA_Param_c::m.field_0x74 * 100.0f; + return mpHIO->m.field_0x74 * 100.0f; } return field_0x200c * 100; @@ -685,7 +685,7 @@ f32 daObj_GrA_c::getSrchGraR() { f32 daObj_GrA_c::getSpeed() { u32 uVar1 = fopAcM_GetParam(this) >> 14 & 63; if (uVar1 == 63) { - return daObj_GrA_Param_c::m.field_0x84; + return mpHIO->m.field_0x84; } return uVar1; @@ -698,7 +698,7 @@ int daObj_GrA_c::standRoll(void* param_1) { switch (field_0xa7c) { case 0: - setBaseMotion(0, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(0, mpHIO->m.field_0x0c); setFaceMotion(13, -1.0f); setLookMode(1); field_0x2014 = 0; @@ -774,8 +774,9 @@ int daObj_GrA_c::rollDemo(void* param_1) { if (isFirstGra()) { switch (field_0x2000) { case -1: - cLib_addCalcAngleS2(¤t.angle.y, cLib_targetAngleY(¤t.pos, &daPy_getPlayerActorClass()->current.pos), - 4, daObj_GrA_Param_c::m.field_0x88); + cLib_addCalcAngleS2(¤t.angle.y, cLib_targetAngleY(¤t.pos, + &daPy_getPlayerActorClass()->current.pos), + 4, mpHIO->m.field_0x88); shape_angle.y = current.angle.y; field_0x91a.y = current.angle.y; @@ -788,7 +789,7 @@ int daObj_GrA_c::rollDemo(void* param_1) { case 0: if (evtcutTalk(-1, 0) != 0) { - setBaseMotion(20, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(20, mpHIO->m.field_0x0c); setFaceMotion(13, -1.0f); setLookMode(0); field_0x2000 = 1; @@ -807,7 +808,7 @@ int daObj_GrA_c::rollDemo(void* param_1) { field_0xab8[2].field_0x0 = 1; setLookMode(0); - setBaseMotion(10, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(10, mpHIO->m.field_0x0c); setFaceMotion(13, -1.0f); calcMotion(); @@ -825,12 +826,14 @@ int daObj_GrA_c::rollDemo(void* param_1) { mpModelMorf->setPlaySpeed(playSpeed); } - if (mDemoCamMode == 0) { - setProcess(&daObj_GrA_c::rollAttack); + if (mDemoCamMode) { + break; } + + setProcess(&daObj_GrA_c::rollAttack); } } else if (field_0xa90 != 4) { - setBaseMotion(4, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(4, mpHIO->m.field_0x0c); setFaceMotion(13, -1.0f); setLookMode(1); } else if (mpModelMorf->checkFrame(14.0f)) { @@ -842,7 +845,7 @@ int daObj_GrA_c::rollDemo(void* param_1) { field_0xab8[2].field_0x0 = 1; setLookMode(0); - setBaseMotion(10, daObj_GrA_Param_c::m.field_0x0c); + setBaseMotion(10, mpHIO->m.field_0x0c); setFaceMotion(13, -1.0f); calcMotion(); @@ -962,11 +965,11 @@ int daObj_GrA_c::rollAttack(void* param_1) { if (field_0x1fe9 == 0) { cXyz sp6c(sp48); s16 dbg_0x10 = current.angle.y; - cLib_chaseF(&speedF, getSpeed(), daObj_GrA_Param_c::m.field_0xa8); + cLib_chaseF(&speedF, getSpeed(), mpHIO->m.field_0xa8); if (field_0x201c < 10) { cLib_addCalcAngleS2(¤t.angle.y, cLib_targetAngleY(¤t.pos, &sp6c), - 1, daObj_GrA_Param_c::m.field_0x88); + 1, mpHIO->m.field_0x88); shape_angle.y = current.angle.y; field_0x91a.y = current.angle.y; } @@ -1018,14 +1021,14 @@ int daObj_GrA_c::rollAttack(void* param_1) { if (!o_bool) { cXyz sp78(field_0x1528.getPntPos(field_0x1528.getIdx() & 0xFFFF)); s16 cur_ang = current.angle.y; - cLib_chaseF(&speedF, getSpeed(), daObj_GrA_Param_c::m.field_0xa8); + cLib_chaseF(&speedF, getSpeed(), mpHIO->m.field_0xa8); if (field_0x201c < 10) { cLib_addCalcAngleS2(¤t.angle.y, cLib_targetAngleY(¤t.pos, &sp78), 8, field_0x1528.field_0xa14); field_0x1528.field_0xa14 = abs(current.angle.y - cur_ang); - cLib_addCalcAngleS2(&field_0x1528.field_0xa14, daObj_GrA_Param_c::m.field_0x88, 8, 0x40); + cLib_addCalcAngleS2(&field_0x1528.field_0xa14, mpHIO->m.field_0x88, 8, 0x40); shape_angle.y = current.angle.y; field_0x91a.y = current.angle.y; } @@ -1075,8 +1078,8 @@ int daObj_GrA_c::rollAttack(void* param_1) { if (player->checkEquipHeavyBoots() != 0) { player->setThrowDamage(sVar1, 30.0f, 40.0f, 1, 0, 0); } else { - player->setThrowDamage(sVar1, daObj_GrA_Param_c::m.field_0xb8, - daObj_GrA_Param_c::m.field_0xbc, 2, 0, 0); + player->setThrowDamage(sVar1, mpHIO->m.field_0xb8, + mpHIO->m.field_0xbc, 2, 0, 0); } setProcess(&daObj_GrA_c::rollAttacked); @@ -1085,8 +1088,8 @@ int daObj_GrA_c::rollAttack(void* param_1) { if (player->checkEquipHeavyBoots() != 0) { player->setThrowDamage(sVar1, 30.0f, 40.0f, 1, 0, 0); } else { - player->setThrowDamage(sVar1, daObj_GrA_Param_c::m.field_0xb8, - daObj_GrA_Param_c::m.field_0xbc, 2, 0, 0); + player->setThrowDamage(sVar1, mpHIO->m.field_0xb8, + mpHIO->m.field_0xbc, 2, 0, 0); } field_0x1fd8 = 60; @@ -1200,9 +1203,9 @@ int daObj_GrA_c::rollAttacked(void* param_1) { case 4: if (mDemoCamMode != 0) { - cLib_addCalc2(&speedF, daObj_GrA_Param_c::m.field_0x90 / 2, 0.25f, 3.5f); + cLib_addCalc2(&speedF, mpHIO->m.field_0x90 / 2, 0.25f, 3.5f); cLib_addCalcAngleS2(¤t.angle.y, cLib_targetAngleY(¤t.pos, &home.pos), - 1, daObj_GrA_Param_c::m.field_0x88); + 1, mpHIO->m.field_0x88); shape_angle.y = current.angle.y; field_0x91a.y = current.angle.y; } else { @@ -1241,11 +1244,11 @@ int daObj_GrA_c::rollAttacked(void* param_1) { if (!bVar1) { cXyz sp3c = field_0x1528.getPntPos(field_0x1528.getIdx() & 0xFFFF); sVar1 = current.angle.y; - cLib_chaseF(&speedF, getSpeed(), daObj_GrA_Param_c::m.field_0xa8); + cLib_chaseF(&speedF, getSpeed(), mpHIO->m.field_0xa8); cLib_addCalcAngleS2(¤t.angle.y, cLib_targetAngleY(¤t.pos, &sp3c), 8, field_0x1528.field_0xa14); field_0x1528.field_0xa14 = abs(current.angle.y - sVar1); - cLib_addCalcAngleS2(&field_0x1528.field_0xa14, daObj_GrA_Param_c::m.field_0x88, + cLib_addCalcAngleS2(&field_0x1528.field_0xa14, mpHIO->m.field_0x88, 8, 0x40); shape_angle.y = current.angle.y + 0x8000; field_0x91a.y = current.angle.y + 0x8000; @@ -1253,7 +1256,8 @@ int daObj_GrA_c::rollAttacked(void* param_1) { cLib_addCalc2(&speedF, 0.0f, 0.25f, 3.5f); } - mpModelMorf->setPlaySpeed(-(speedF * 0.1f)); + f32 play_speed = speedF * 0.1f; + mpModelMorf->setPlaySpeed(-play_speed); } } break; @@ -1340,11 +1344,11 @@ int daObj_GrA_c::rollEscape(void* param_1) { if (!bVar1) { cXyz vec_0x48 = field_0x1528.getPntPos(field_0x1528.getIdx() & 0xFFFF); sVar1 = current.angle.y; - cLib_chaseF(&speedF, getSpeed(), daObj_GrA_Param_c::m.field_0xa8); + cLib_chaseF(&speedF, getSpeed(), mpHIO->m.field_0xa8); cLib_addCalcAngleS2(¤t.angle.y, cLib_targetAngleY(¤t.pos, &vec_0x48), 8, field_0x1528.field_0xa14); field_0x1528.field_0xa14 = abs(current.angle.y - sVar1); - cLib_addCalcAngleS2(&field_0x1528.field_0xa14, daObj_GrA_Param_c::m.field_0x88, 8, 0x40); + cLib_addCalcAngleS2(&field_0x1528.field_0xa14, mpHIO->m.field_0x88, 8, 0x40); cLib_addCalcAngleS2(&shape_angle.y, current.angle.y + 0x8000, 8, 0x1000); field_0x91a.y = shape_angle.y; } else if (cM3d_IsZero(speedF)) { @@ -1480,7 +1484,7 @@ void daObj_GrA_c::demo_camera() { } // fallthrough intentional case 2: { - prm_short = daObj_GrA_Param_c::m.field_0xac; + prm_short = mpHIO->m.field_0xac; if (field_0x2056 >= prm_short) { mDemoCamMode++; field_0x2056 = 0; @@ -1493,7 +1497,7 @@ void daObj_GrA_c::demo_camera() { } // fallthrough intentional case 3: { - prm_short = daObj_GrA_Param_c::m.field_0xae; + prm_short = mpHIO->m.field_0xae; if (field_0x2056 >= prm_short) { mDemoCamMode++; field_0x2056 = 0; @@ -1506,7 +1510,7 @@ void daObj_GrA_c::demo_camera() { } // fallthrough intentional case 4: { - prm_short = daObj_GrA_Param_c::m.field_0xb0; + prm_short = mpHIO->m.field_0xb0; if (field_0x2056 >= prm_short) { mDemoCamMode++; field_0x2056 = 0; @@ -1530,7 +1534,7 @@ void daObj_GrA_c::demo_camera() { } // fallthrough intentional case 5: { - prm_short = daObj_GrA_Param_c::m.field_0xb2; + prm_short = mpHIO->m.field_0xb2; if (field_0x2056 >= prm_short) { mDemoCamMode++; field_0x2056 = 0; @@ -1557,7 +1561,7 @@ void daObj_GrA_c::demo_camera() { } // fallthrough intentional case 6: { - prm_short = daObj_GrA_Param_c::m.field_0xb4; + prm_short = mpHIO->m.field_0xb4; if (field_0x2056 >= prm_short) { camera->mCamera.Reset(mDemoCamCenter, mDemoCamEye); camera->mCamera.Start(); @@ -1656,7 +1660,7 @@ void daObj_GrA_c::rollAttackedDemo() { } // fallthrough case 5: { - cmp_val = daObj_GrA_Param_c::m.field_0xb2; + cmp_val = mpHIO->m.field_0xb2; if (field_0x2056 >= cmp_val) { ++mDemoCamMode; field_0x2056 = 0; @@ -1868,7 +1872,7 @@ void daObj_GrA_c::calcCatchPos(f32 param_1, int param_2) { if (param_2 != 0) { cXyz spb4; - sp9c.y -= daObj_GrA_Param_c::m.field_0x60 / 2; + sp9c.y -= mpHIO->m.field_0x60 / 2; cLib_offsetPos(&spb4, &sp9c, player->shape_angle.y + 0x8000, &sp6c); if (param_2 == 1) { @@ -1884,7 +1888,7 @@ void daObj_GrA_c::calcCatchPos(f32 param_1, int param_2) { #endif cXyz spc0; - sp9c.y -= daObj_GrA_Param_c::m.field_0x60 / 2; + sp9c.y -= mpHIO->m.field_0x60 / 2; cXyz spcc(0.0f, 0.0f, param_1); cLib_offsetPos(&spc0, &sp9c, HandsHeight, &spcc); @@ -2153,8 +2157,8 @@ BOOL daObj_GrA_c::modeChangeCheck() { field_0xf50.OffAtSetBit(); setProcess(&daObj_GrA_c::toStone); field_0x109c = 1; - setBaseMotion(4, daObj_GrA_Param_c::m.field_0x0c / 2); - setFaceMotion(13, daObj_GrA_Param_c::m.field_0x0c / 2); + setBaseMotion(4, mpHIO->m.field_0x0c / 2); + setFaceMotion(13, mpHIO->m.field_0x0c / 2); calcMotion(); mpModelMorf->setFrame(mpModelMorf->getEndFrame()); mpModelMorf->setPlaySpeed(1.0f); @@ -2163,679 +2167,3 @@ BOOL daObj_GrA_c::modeChangeCheck() { return FALSE; } - -/* 80C0CF2C-80C0CF98 00D10C 006C+00 1/1 0/0 0/0 .text s_sub2__FPvPv */ -static void* s_sub2(void* i_actor, void* i_data) { - daObj_GrA_c* i_this = (daObj_GrA_c*)i_data; - if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_OBJ_GRA && (u8)i_this->checkGraSub((fopAc_ac_c*)i_actor)) { - return i_actor; - } - return NULL; -} - -/* 80C0CF98-80C0D000 00D178 0068+00 1/1 0/0 0/0 .text checkGraSub__11daObj_GrA_cFP10fopAc_ac_c */ -BOOL daObj_GrA_c::checkGraSub(fopAc_ac_c* a_this) { - daObj_GrA_c* i_this = (daObj_GrA_c*)a_this; - - if (i_this->mMode != 0) { - return FALSE; - } - - if (getTagNo() == i_this->getTagNo()) { - return TRUE; - } - - return FALSE; -} - -/* 80C0D000-80C0D2FC 00D1E0 02FC+00 1/0 0/0 0/0 .text waitDemo__11daObj_GrA_cFPv */ -int daObj_GrA_c::waitDemo(void* param_1) { - cXyz sp34; - daPy_py_c* player = daPy_getPlayerActorClass(); - - switch (field_0xa7c) { - case 0: - setBaseMotion(0, daObj_GrA_Param_c::m.field_0x0c); - setFaceMotion(13, -1.0f); - setLookMode(0); - break; - - case 1: - if (getTagNo() != 0) { - bool has_actor = field_0x204c.getActor() == NULL; - - if (field_0x2032 == 0 || has_actor) { - if (field_0x2032 == 0) { - fopAc_ac_c* actor_p = (fopAc_ac_c*) fpcM_Search(s_sub, this); - if (actor_p != NULL) { - daTagGra_c* graTag_p = (daTagGra_c*) actor_p; - if (graTag_p->getMode() == 2) { - mGraPos = graTag_p->getGraPos(); - mGraExtent = graTag_p->getGraExtent(); - mGraHeight = graTag_p->getGraHeight(); - mGraMode = graTag_p->getMode(); - field_0x2032 = 1; - fopAcM_delete(actor_p); - } - } - } - - if (has_actor) { - fopAc_ac_c* o_actor_p = (fopAc_ac_c*)fpcM_Search(s_sub2, this); - if (o_actor_p != NULL) { - field_0x204c.entry(o_actor_p); - } - } - } else { - #ifdef DEBUG - if (daObj_GrA_Param_c::m.field_0x8a) { - fopAcM_OffStatus(this, fopAcM_STATUS_UNK_0x100); - } else { - fopAcM_OnStatus(this, fopAcM_STATUS_UNK_0x100); - } - #endif - - sp34 = player->current.pos - mGraPos; - if (sp34.absXZ() < mGraExtent && sp34.z > -30.0f && sp34.z < mGraHeight) { - setProcess(&daObj_GrA_c::startDemo); - } - } - } - break; - - case 2: - #ifdef DEBUG - fopAcM_OnStatus(this, fopAcM_STATUS_UNK_0x100); - #endif - break; - } - - return 1; -} - -/* 80C0D2FC-80C0D3A8 00D4DC 00AC+00 1/1 0/0 0/0 .text skipDemoGra__11daObj_GrA_cFv */ -int daObj_GrA_c::skipDemoGra() { - camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); - daObj_GrA_c* gra_p = (daObj_GrA_c*)field_0x204c.getActor(); - camera->mCamera.Start(); - camera->mCamera.SetTrimSize(0); - dComIfGp_event_reset(); - gra_p->soldierDemoSkip(); - gra_p->field_0x204c.entry(NULL); - dComIfGs_onSwitch(field_0xa7f, fopAcM_GetRoomNo(this)); - return 1; -} - -/* 80C0D3A8-80C0D3E0 00D588 0038+00 1/1 0/0 0/0 .text skipCallBack__FPvi */ -static int skipCallBack(void* param_1, int param_2) { - daObj_GrA_c* i_this = (daObj_GrA_c*)param_1; - i_this->skipDemoGra(); - fopAcM_delete(i_this); - return 1; -} - -/* 80C0D3E0-80C0EFC4 00D5C0 1BE4+00 2/0 0/0 0/0 .text startDemo__11daObj_GrA_cFPv */ -int daObj_GrA_c::startDemo(void* param_1) { - daPy_py_c* player = daPy_getPlayerActorClass(); - daObj_GrA_c* gra_p = (daObj_GrA_c *)field_0x204c.getActor(); - camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); - dCamera_c* camBody = dCam_getBody(); - - switch (field_0xa7c) { - case 0: - setBaseMotion(0, daObj_GrA_Param_c::m.field_0x0c); - setFaceMotion(13, -1.0f); - setLookMode(0); - mDemoCamMode = 1; - field_0x209c = 1; - break; - - case 1: { - switch (mDemoCamMode) { - case 0: - break; - - case 1: { - if (!eventInfo.checkCommandDemoAccrpt()) { - fopAcM_orderPotentialEvent(this, 2, 0xFFEF, 0); - eventInfo.onCondition(dEvtCnd_CANDEMO_e); - return 1; - } - - camera->mCamera.Stop(); - mDemoCamMode = 2; - field_0x2056 = 0; - mDemoCamFovy = field_0x208c = camBody->Fovy(); - mDemoCamCenter = mGraPos; - mDemoCamCenter.y += 150.0f; - mDemoCamEye = mDemoCamCenter; - mDemoCamEye.z += 700.0f; - mDemoCamCenter.x += 50.0f; - field_0x2080 = mDemoCamCenter; - field_0x2074 = mDemoCamEye; - - camera->mCamera.SetTrimSize(2); - player->changeOriginalDemo(); - gra_p->field_0x204c.entry(this); - gra_p->setProcess(&daObj_GrA_c::soldierDemo); - fopAcM_OnStatus(gra_p, fopAcM_STATUS_UNK_0x8000); - field_0x2056 = 0; - dComIfGp_getEvent().setSkipProc(this, skipCallBack, 0); - dComIfGp_getEvent().onSkipFade(); - } - // fallthrough - case 2: { - cXyz player_pos = player->current.pos; - if ((player_pos - mGraPos).abs() < 50.0f) { - if (field_0x2056 >= 60) { - mDemoCamMode = 3; - field_0x2056 = 0; - } else { - csXyz player_angle = player->current.angle; - s16 tgt_ang = cLib_targetAngleY(&player->current.pos, ¤t.pos) + 0x800; - cLib_addCalcAngleS2(&player_angle.y, tgt_ang, 2, field_0x1528.field_0xa14); - player->setPlayerPosAndAngle(&player->current.pos, &player_angle); - field_0x2056++; - break; - } - } else { - player->changeDemoMode(3, 0, 0, 0); - player->changeDemoPos0(&mGraPos); - break; - } - } - // fallthrough - case 3: { - if (field_0x2056 >= 180) { - mDemoCamMode = 4; - field_0x2056 = 0; - field_0x2080 = mDemoCamCenter; - field_0x2074 = mDemoCamEye; - } else { - csXyz player_angle = player->current.angle; - s16 sVar1 = cLib_targetAngleY(&player->current.pos, ¤t.pos) - 0x2800; - cLib_addCalcAngleS2(&player_angle.y, sVar1, 4, field_0x1528.field_0xa14); - player->setPlayerPosAndAngle(&player->current.pos, &player_angle); - - mDoMtx_stack_c::YrotS(sVar1); - cXyz sp3c(0.0f, 150.0f, 100.0f); - mDoMtx_stack_c::multVec(&sp3c, &sp3c); - sp3c += player->current.pos; - cLib_addCalcPos2(&mDemoCamEye, sp3c, 0.05f, (field_0x2074 - sp3c).abs() / 40.0f); - - mDoMtx_stack_c::YrotS(sVar1); - cXyz sp48(0.0f, 100.0f, 300.0f); - mDoMtx_stack_c::multVec(&sp48, &sp48); - sp48 += player->current.pos; - cLib_addCalcPos2(&mDemoCamCenter, sp48, 0.05f, (sp48 - field_0x2080).abs() / 25.0f); - field_0x2056++; - break; - } - } - // fallthrough - case 4: { - if (field_0x2056 >= 180) { - mDemoCamMode = 5; - field_0x2056 = 0; - field_0x2080 = mDemoCamCenter; - field_0x2074 = mDemoCamEye; - } else { - csXyz player_angle = player->current.angle; - s16 sVar1 = cLib_targetAngleY(&player->current.pos, ¤t.pos) + 0x800; - cLib_addCalcAngleS2(&player_angle.y, sVar1, 1, field_0x1528.field_0xa14); - player->setPlayerPosAndAngle(&player->current.pos, &player_angle); - - mDoMtx_stack_c::YrotS(sVar1); - cXyz sp54(0.0f, 150.0f, 100.0f); - mDoMtx_stack_c::multVec(&sp54, &sp54); - sp54 += player->current.pos; - cLib_addCalcPos2(&mDemoCamEye, sp54, 0.06f, (field_0x2074 - sp54).abs() / 70.0f); - - mDoMtx_stack_c::YrotS(sVar1); - cXyz sp60(0.0f, 230.0f, 300.0f); - mDoMtx_stack_c::multVec(&sp60, &sp60); - sp60 += player->current.pos; - cLib_addCalcPos2(&mDemoCamCenter, sp60, 0.06f, (sp60 - field_0x2080).abs() / 70.0f); - - if (field_0x2056 == 150) { - setBaseMotion(16, 0.0f); - setFaceMotion(11, 0.0f); - setLookMode(0); - gra_p->setBaseMotion(17, daObj_GrA_Param_c::m.field_0x0c); - gra_p->setFaceMotion(12, -1.0f); - gra_p->setLookMode(0); - - current.angle.y += (s16) 0x4000; - field_0x91a.y = shape_angle.y = current.angle.y; - } - - field_0x2056++; - break; - } - } - // fallthrough - case 5: { - if (field_0x2056 >= 40) { - mDemoCamMode = 6; - field_0x2056 = 0; - } else { - mDoMtx_stack_c::YrotS(cLib_targetAngleY(&player->current.pos, ¤t.pos)); - cXyz sp6c(0.0f, 150.0f, 100.0f); - mDoMtx_stack_c::multVec(&sp6c, &sp6c); - sp6c += player->current.pos; - cLib_addCalcPos2(&mDemoCamEye, sp6c, 0.01f, (field_0x2074 - sp6c).abs() / 60.0f); - - cXyz player_pos = current.pos; - player_pos.y += 280.0f; - cLib_addCalcPos2(&mDemoCamCenter, player_pos, 0.5f, - (player_pos - field_0x2080).abs() / (200.0f - field_0x2056 * 3)); - field_0x2056++; - break; - } - } - // fallthrough - case 6: { - if (field_0x2056 >= 90) { - mDemoCamMode = 7; - field_0x2056 = 0; - } else { - mDoMtx_stack_c::YrotS(cLib_targetAngleY(&player->current.pos, ¤t.pos)); - cXyz sp84(100.0f, -50.0f, -800.0f); - mDoMtx_stack_c::multVec(&sp84, &sp84); - sp84 += current.pos; - cLib_addCalcPos2(&mDemoCamEye, sp84, 0.5f, (field_0x2074 - sp84).abs() / 35.0f); - - cXyz player_pos = current.pos; - player_pos.y += 280.0f; - cLib_addCalcPos2(&mDemoCamCenter, player_pos, 0.35f, (player_pos - field_0x2080).abs() / 20.0f); - field_0x2056++; - break; - } - } - // fallthrough - case 7: { - if (mpModelMorf->isStop()) { - gra_p->setDemoMode(1); - setDemoMode(8); - field_0x2056 = 0; - setBaseMotion(0, daObj_GrA_Param_c::m.field_0x0c); - setFaceMotion(13, -1.0f); - setLookMode(2); - } - break; - } - - case 8: { - if (gra_p->field_0xa90 != 20 || !gra_p->mpModelMorf->isStop()) break; - - setDemoMode(9); - setBaseMotion(1, daObj_GrA_Param_c::m.field_0x0c); - setFaceMotion(13, -1.0f); - field_0x2080 = mDemoCamCenter; - } - // fallthrough - case 9: { - cXyz sp9c(0.0f, 0.0f, 80.0f); - mDoMtx_stack_c::YrotS(gra_p->current.angle.y); - mDoMtx_stack_c::multVec(&sp9c, &sp9c); - sp9c += gra_p->current.pos; - if (field_0xa90 != 15) { - if (mAcchCir.ChkWallHit() && gra_p == dComIfG_Bgsp().GetActorPointer(mAcchCir)) { - if (field_0xa90 != 15) { - setBaseMotion(15, daObj_GrA_Param_c::m.field_0x0c); - setFaceMotion(13, -1.0f); - setLookMode(0); - current.angle.y = cLib_targetAngleY(¤t.pos, &sp9c); - shape_angle.y = current.angle.y; - field_0x91a.y = current.angle.y; - mAcch.SetGrndNone(); - mAcch.SetWallNone(); - gravity = 0.0f; - speed.setall(0.0f); - speedF = 0.0f; - } - } else { - s16 tgt_ang = cLib_targetAngleY(¤t.pos, &sp9c); - cLib_addCalcAngleS2(¤t.angle.y, tgt_ang, 4, daObj_GrA_Param_c::m.field_0x88); - shape_angle.y = current.angle.y; - field_0x91a.y = current.angle.y; - cLib_chasePosXZ(¤t.pos, sp9c, daObj_GrA_Param_c::m.field_0x90); - } - } else { - if (!mpModelMorf->isStop()) { - mAcch.SetGrndNone(); - mAcch.SetWallNone(); - gravity = 0.0f; - } else { - cXyz spa8(0.0f, 146.09f, 161.97f); - mDoMtx_stack_c::YrotS(field_0x91a.y); - mDoMtx_stack_c::multVec(&spa8, &spa8); - current.pos += spa8; - old.pos = current.pos; - gravity = 0.0f; - setLookMode(0); - setDemoMode(10); - gra_p->setDemoMode(3); - setBaseMotion(18, 0.0f); - setFaceMotion(13, 0.0f); - } - - cXyz player_pos = gra_p->current.pos; - cLib_addCalcPosXZ2(&mDemoCamCenter, player_pos, 0.1f, (player_pos - field_0x2080).abs() / 30.0f); - break; - } - } - // fallthrough - case 10: { - if (gra_p->getDemoMode() == 4) { - setBaseMotion(10, 6.0f); - setFaceMotion(13, 6.0f); - calcMotion(); - mpModelMorf->setPlaySpeed(3.0f); - setDemoMode(11); - mAcch.ClrGrndNone(); - mAcch.ClrWallNone(); - gravity = daObj_GrA_Param_c::m.mGravity; - speedF = 13.0f; - speed.y = 70.0f; - field_0x2056 = 0; - } else { - cLib_addCalcAngleS2(¤t.angle.y, gra_p->home.angle.y + 0x8000, 16, daObj_GrA_Param_c::m.field_0x88); - shape_angle.y = current.angle.y; - field_0x91a.y = current.angle.y; - cXyz player_pos = gra_p->current.pos; - cLib_addCalcPosXZ2(&mDemoCamCenter, player_pos, 0.1f, (player_pos - field_0x2080).abs() / 30.0f); - gravity = 0.0f; - } - - break; - } - - case 11: { - if (field_0x2056 >= 250) { - camera->mCamera.Start(); - camera->mCamera.SetTrimSize(0); - dComIfGp_event_reset(); - fopAcM_OffStatus(gra_p, 0x8000); - gra_p->setProcess(&daObj_GrA_c::wait); - dComIfGs_onSwitch(field_0xa7f, fopAcM_GetRoomNo(this)); - fopAcM_delete(this); - break; - } - - if (mAcch.ChkGroundLanding()) { - cXyz spcc(0.0f, 0.0f, 20.0f); - mDoMtx_stack_c::transS(current.pos); - mDoMtx_stack_c::YrotM(field_0x91a.y); - mDoMtx_stack_c::multVec(&spcc, &field_0xab8[2].field_0x4); - field_0xab8[2].field_0x10 = field_0x91a; - field_0xab8[2].field_0x0 = 1; - - mSound.startCreatureSound(Z2SE_GORON_ROLL_BOUND, 0, -1); - speedF = 20.0f; - } else if (mAcch.ChkGroundHit()) { - cXyz spd8(-1482.0f, 3650.0f, -4459.0f); - if ((current.pos - spd8).absXZ() > 50.0f) { - cLib_addCalcAngleS2(¤t.angle.y, cLib_targetAngleY(¤t.pos, &spd8), - 24, daObj_GrA_Param_c::m.field_0x88); - shape_angle.y = current.angle.y; - field_0x91a.y = current.angle.y; - } else { - speedF = 0.0f; - } - - field_0x2056++; - } - - if (speed.y > 0.0f) { - cXyz spe4 = mDemoCamCenter; - mDemoCamEye += (current.pos - spe4); - } - - mDemoCamCenter = current.pos; - } - } - - break; - } - - case 2: - field_0x209c = 0; - break; - - default: - break; - } - - if (mDemoCamMode != 0) { - camera->mCamera.Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); - field_0x2056++; - } - - return 1; -} - -/* 80C0EFC4-80C0F17C 00F1A4 01B8+00 1/1 0/0 0/0 .text turn__11daObj_GrA_cFsfi */ -BOOL daObj_GrA_c::turn(s16 param_1, f32 param_2, int param_3) { - int o_prm_1 = param_1; - if (field_0x1fc8 == 0) { - field_0x1fd0 = fabsf(cM_sht2d((s16)(current.angle.y - param_1))); - field_0x1fd0 = field_0x1fd0 / 180.0f * param_2; - field_0x1fd0 = (int)field_0x1fd0 + 1; - - if (field_0x1fd0 < 8.0f) { - field_0x1fd0 = 8.0f; - } - - field_0x1fd4 = current.angle.y; - } - - s16 sVar1 = field_0x1fd4; - if (param_3 == 0) { - param_3 = ((s16) (param_1 - field_0x1fd4) >= 0) ? 1 : -1; - } - - int var_r30 = (u16) (o_prm_1 - sVar1); - if (param_3 < 0) { - var_r30 = -(u16)(0xFFFF - var_r30); - } - - var_r30 *= cM_ssin(field_0x1fc8); - field_0x1fc8 = field_0x1fc8 + 16384.0f / field_0x1fd0; - if ((u16)field_0x1fc8 >= 0x4000) { - current.angle.y = param_1; - field_0x1fc8 = 0x4000; - } else { - current.angle.y = field_0x1fd4 + var_r30; - } - - return param_1 == current.angle.y; -} - -/* 80C0F17C-80C0F330 00F35C 01B4+00 2/2 0/0 0/0 .text turn_step__11daObj_GrA_cFsiii */ -BOOL daObj_GrA_c::turn_step(s16 param_1, int param_2, int param_3, int param_4) { - if (field_0x1fcc == 0) { - if ((int)fabsf(cM_sht2d((s16)(param_1 - field_0x91a.y))) > 20) { - if (param_2 >= 0 && field_0xa92 != param_2) { - setFaceMotion(param_2, 3.0f); - } - - if (param_3 >= 0 && field_0xa90 != param_3) { - setBaseMotion(param_3, 3.0f); - } - } - - field_0x1fd6 = param_1; - field_0x1fc8 = 0; - - if (field_0x91a.y == field_0x1fd6) { - field_0x1fcc++; - } - - current.angle.y = field_0x91a.y; - shape_angle.y = current.angle.y; - field_0x1fcc++; - } else if (field_0x1fcc == 1) { - if (turn(field_0x1fd6, param_4, 0) != 0) { - shape_angle.y = current.angle.y; - field_0x91a.y = current.angle.y; - field_0x1fcc++; - } else { - shape_angle.y = current.angle.y; - field_0x91a.y = current.angle.y; - } - } - - return (field_0x1fcc > 1) ? 1 : 0; -} - -/* 80C0F330-80C0F590 00F510 0260+00 1/1 0/0 0/0 .text chkFindPlayer2__11daObj_GrA_cFis */ -BOOL daObj_GrA_c::chkFindPlayer2(int param_1, s16 param_2) { - cXyz sp80 = getAttentionPos(daPy_getPlayerActorClass()); - s16 angle_diff = fopAcM_searchPlayerAngleY(this) - current.angle.y; - - int dist_tbl_idx; - if (abs(angle_diff) < 0x3C00) { - dist_tbl_idx = (param_1 == 0) ? getDistTableIdx(10, 6) : getDistTableIdx(12, 6); - } else { - dist_tbl_idx = (param_1 == 0) ? getDistTableIdx(4, 6) : getDistTableIdx(6, 6); - } - - f32 fVar1 = (param_1 == 0) ? dComIfGp_getAttention()->getDistTable(dist_tbl_idx).mDistMax - : dComIfGp_getAttention()->getDistTable(dist_tbl_idx).mDistMaxRelease; - f32 fVar2 = dComIfGp_getAttention()->getDistTable(dist_tbl_idx).mLowerY * -1.0f; - f32 fVar3 = dComIfGp_getAttention()->getDistTable(dist_tbl_idx).mUpperY * -1.0f; - u32 uVar2 = dComIfGp_getAttention()->getDistTable(dist_tbl_idx).mAngleSelect; - - f32 fVar4 = 180.0f; - if ((uVar2 & 8) != 0) { - fVar4 = 30.0f; - } else if ((uVar2 & 16) != 0) { - fVar4 = 45.0f; - } else if ((uVar2 & 32) != 0) { - fVar4 = 60.0f; - } else if ((uVar2 & 64) != 0) { - fVar4 = 90.0f; - } else if ((uVar2 & 128) != 0) { - fVar4 = 110.0f; - } else if ((uVar2 & 256) != 0) { - fVar4 = 135.0f; - } - - if (chkPointInArea(sp80, attention_info.position, fVar1, fVar2, fVar3, 0)) { - if (chkActorInSight2(daPy_getPlayerActorClass(), fVar4, param_2)) { - return TRUE; - } - } - - return FALSE; -} - -/* 80C0F5A4-80C0F668 00F784 00C4+00 1/1 0/0 0/0 .text chkPointInArea__11daObj_GrA_cF4cXyz4cXyzfffs */ -BOOL daObj_GrA_c::chkPointInArea(cXyz param_1, cXyz param_2, f32 param_3, f32 param_4, f32 param_5, s16 param_6) { - cXyz sp68, sp74; - f32 var_f30 = param_4; - f32 var_f31 = param_5; - - if (var_f30 < var_f31) { - var_f31 = param_4; - var_f30 = param_5; - } - - sp68.set(param_3, fabsf(var_f30 - var_f31) / 2, param_3); - sp74 = param_2; - sp74.y += var_f31; - sp74.y += sp68.y; - - return chkPointInArea(param_1, sp74, sp68, param_6); -} - -/* 80C0F668-80C0F6E0 00F848 0078+00 1/1 0/0 0/0 .text chkPointInArea__11daObj_GrA_cF4cXyz4cXyz4cXyzs */ -BOOL daObj_GrA_c::chkPointInArea(cXyz param_1, cXyz param_2, cXyz param_3, s16 param_4) { - return daNpcF_chkPointInArea(param_1, param_2, param_3, param_4); -} - -/* 80C0F6E0-80C0F7EC 00F8C0 010C+00 1/1 0/0 0/0 .text chkActorInSight2__11daObj_GrA_cFP10fopAc_ac_cfs */ -BOOL daObj_GrA_c::chkActorInSight2(fopAc_ac_c* actor, f32 param_2, s16 param_3) { - if (param_2 < 180.0f) { - s16 sVar1 = cM_deg2s(param_2); - cXyz sp34 = getAttentionPos(actor); - cSGlobe cStack_48(attention_info.position - sp34); - cSAngle acStack_4c(cSAngle(cStack_48.U().Inv()) - param_3); - s16 sVar2 = acStack_4c.Val(); - if (sVar2 < 0) { - sVar2 = -sVar2; - } - - return (sVar2 > sVar1) == 0; - } - - return 1; -} - -/* 80C0F7EC-80C0F860 00F9CC 0074+00 2/2 0/0 0/0 .text getAttentionPos__11daObj_GrA_cFP10fopAc_ac_c */ -cXyz daObj_GrA_c::getAttentionPos(fopAc_ac_c* i_actor_p) { - cXyz pos = i_actor_p->attention_info.position; - - if (fopAcM_GetName(i_actor_p) == PROC_ALINK) { - pos.y -= daPy_py_c::getAttentionOffsetY(); - } - - return pos; -} - -/* 80C0F860-80C0FA68 00FA40 0208+00 2/0 0/0 0/0 .text standWaitJump__11daObj_GrA_cFPv */ -int daObj_GrA_c::standWaitJump(void* param_1) { - switch (field_0xa7c) { - case 0: - field_0x1fcc = 0; - break; - - case 1: - if (getJumpType() == 1) { - setLookMode(0); - if (home.angle.y != field_0x91a.y) { - if (turn_step(home.angle.y, 0, 19, 20) != 0) { - field_0x1fcc = 0; - setBaseMotion(21, daObj_GrA_Param_c::m.field_0x0c); - setFaceMotion(0, -1.0f); - } - } else if (field_0xa90 != 21) { - setBaseMotion(21, daObj_GrA_Param_c::m.field_0x0c); - setFaceMotion(0, -1.0f); - } - } else { - BOOL bVar1 = field_0x14f8.getActor() != NULL; - if (chkFindPlayer2(bVar1, shape_angle.y) != 0) { - if (!bVar1) { - field_0x14f8.entry(daPy_getPlayerActorClass()); - } - } else if (bVar1) { - field_0x14f8.entry(NULL); - } - - if (field_0x14f8.getActor() != NULL) { - setLookMode(1); - } else { - setLookMode(0); - if ((home.angle.y != field_0x91a.y) && (turn_step(home.angle.y, 0, 19, 20) != 0)) { - field_0x1fcc = 0; - setBaseMotion(0, daObj_GrA_Param_c::m.field_0x0c); - setFaceMotion(0, -1.0f); - } - } - } - break; - - case 2: - break; - } - - return 1; -} - -/* 80C10AE0-80C10B10 000248 0030+00 0/0 0/0 0/0 .bss aVec$5647 */ -#pragma push -#pragma force_active on -static u8 aVec[48]; -#pragma pop