mirror of https://github.com/zeldaret/tp.git
Link obj_gra2, obj_gm (#2781)
* obj_gra2 almost linkable * Link obj_gra2 * Link obj_gm
This commit is contained in:
parent
b5092b9578
commit
c9bc11d470
|
|
@ -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"),
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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 <cmath.h>
|
||||
|
||||
/* 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<u16>(field_0x840, 0x20) != 0) {
|
||||
if (cLib_checkBit<u16>(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<u16>(field_0x840, 0x22);
|
||||
int reg_r30 = 0x22;
|
||||
cLib_offBit<u16>(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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
};
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue