mirror of https://github.com/zeldaret/tp.git
d_a_e_ym, d_a_e_oc, and d_a_npc_hanjo equivalent, d_a_npc_ashB work (#2368)
* d_a_e_ym, d_a_e_oc, and d_a_npc_hanjo equivalent, d_a_npc_ashB work * Updates to PR based on feedback, plus fix debug build
This commit is contained in:
parent
c6f76e7240
commit
3d2942960d
|
|
@ -1652,7 +1652,7 @@ config.libs = [
|
|||
ActorRel(NonMatching, "d_a_e_mm_mt"),
|
||||
ActorRel(NonMatching, "d_a_e_ms"),
|
||||
ActorRel(NonMatching, "d_a_e_nz"),
|
||||
ActorRel(NonMatching, "d_a_e_oc"),
|
||||
ActorRel(Equivalent, "d_a_e_oc"),
|
||||
ActorRel(MatchingFor("GZ2E01"), "d_a_e_oct_bg"),
|
||||
ActorRel(Equivalent, "d_a_e_ot"), # weak func order
|
||||
ActorRel(MatchingFor("GZ2E01"), "d_a_e_ph"),
|
||||
|
|
@ -1689,7 +1689,7 @@ config.libs = [
|
|||
ActorRel(NonMatching, "d_a_e_yg"),
|
||||
ActorRel(NonMatching, "d_a_e_yh"),
|
||||
ActorRel(Equivalent, "d_a_e_yk"), # weak func order
|
||||
ActorRel(NonMatching, "d_a_e_ym"),
|
||||
ActorRel(Equivalent, "d_a_e_ym"),
|
||||
ActorRel(MatchingFor("GZ2E01"), "d_a_e_ym_tag"),
|
||||
ActorRel(NonMatching, "d_a_e_ymb"),
|
||||
ActorRel(NonMatching, "d_a_e_yr"),
|
||||
|
|
@ -1752,7 +1752,7 @@ config.libs = [
|
|||
ActorRel(NonMatching, "d_a_npc_grz"),
|
||||
ActorRel(NonMatching, "d_a_npc_guard"),
|
||||
ActorRel(NonMatching, "d_a_npc_gwolf"),
|
||||
ActorRel(NonMatching, "d_a_npc_hanjo"),
|
||||
ActorRel(Equivalent, "d_a_npc_hanjo"),
|
||||
ActorRel(MatchingFor("GZ2E01"), "d_a_npc_henna0"),
|
||||
ActorRel(NonMatching, "d_a_npc_hoz"),
|
||||
ActorRel(NonMatching, "d_a_npc_impal"),
|
||||
|
|
|
|||
|
|
@ -1033,6 +1033,7 @@ public:
|
|||
/* 5 */ LOOK_ATTN,
|
||||
};
|
||||
|
||||
daNpcF_c() { initialize(); }
|
||||
/* 80152014 */ BOOL execute();
|
||||
/* 801522AC */ int draw(BOOL, BOOL, f32, _GXColorS10*, BOOL);
|
||||
/* 80152614 */ static void tgHitCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*,
|
||||
|
|
@ -1091,7 +1092,7 @@ public:
|
|||
/* 80155BC8 */ virtual void setParam();
|
||||
/* 80155BC0 */ virtual BOOL main();
|
||||
/* 80155BD8 */ virtual BOOL ctrlBtk();
|
||||
/* 80155BBC */ virtual void adjustShapeAngle();
|
||||
/* 80155BBC */ virtual void adjustShapeAngle() {}
|
||||
/* 8015276C */ virtual void setMtx();
|
||||
/* 801527FC */ virtual void setMtx2();
|
||||
/* 80155BB8 */ virtual void setAttnPos();
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@ STATIC_ASSERT(sizeof(daNpcAshB_c) == 0xdf0);
|
|||
|
||||
class daNpcAshB_Param_c {
|
||||
public:
|
||||
/* 80962078 */ virtual ~daNpcAshB_Param_c();
|
||||
/* 80962078 */ virtual ~daNpcAshB_Param_c() {}
|
||||
|
||||
struct param {
|
||||
/* 0x00 */ f32 mAttnOffsetY;
|
||||
|
|
|
|||
|
|
@ -179,7 +179,7 @@ public:
|
|||
static dCcD_SrcGObjInf const mStoneCcDObjInfo;
|
||||
static char* mCutNameList[6];
|
||||
static cutFunc mCutList[6];
|
||||
static u8 mStoneCcDSph[64];
|
||||
static dCcD_SrcSph mStoneCcDSph;
|
||||
private:
|
||||
/* 0x0E40 */ int field_0x0E40;
|
||||
/* 0x0E44 */ J3DModel* mModel1;
|
||||
|
|
|
|||
|
|
@ -2508,32 +2508,30 @@ static int useHeapInit(fopAc_ac_c* i_this) {
|
|||
|
||||
/* 80734DA8-807352AC 0088C8 0504+00 1/1 0/0 0/0 .text create__8daE_OC_cFv */
|
||||
cPhs__Step daE_OC_c::create() {
|
||||
// NONMATCHING. regalloc issue
|
||||
f32 mult_val = 100.0f;
|
||||
fopAc_ac_c* a_this = this;
|
||||
fopAcM_SetupActor(this, daE_OC_c);
|
||||
field_0x6b4 = fopAcM_GetParam(this) & 0xff;
|
||||
if (field_0x6b4 == 0xff) {
|
||||
field_0x6b4 = 0;
|
||||
}
|
||||
u8 range_sel = (fopAcM_GetParam(this) >> 8 & 0xff);
|
||||
if (range_sel == 0x1) {
|
||||
|
||||
u8 u_var = ((fopAcM_GetParam(this) & 0xff00) >> 8);
|
||||
if (u_var == 0x1) {
|
||||
mPlayerRange = l_HIO.field_0x0c;
|
||||
} else {
|
||||
mPlayerRange = l_HIO.field_0x08;
|
||||
}
|
||||
field_0x6e0 = fopAcM_GetParam(this) >> 0x10;
|
||||
field_0x6e0 = (fopAcM_GetParam(this) & 0xff0000) >> 0x10;
|
||||
if (field_0x6e0 != 0xff) {
|
||||
if (dComIfGs_isSwitch(field_0x6e0, fopAcM_GetRoomNo(this))) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
}
|
||||
field_0x6e1 = fopAcM_GetParam(this) >> 0x18;
|
||||
u8 u_var = current.angle.x;
|
||||
field_0x6e1 = (fopAcM_GetParam(this) & 0xff000000) >> 0x18;
|
||||
u_var = current.angle.x & 0xff;
|
||||
if (u_var == 0xff) {
|
||||
u_var = 0;
|
||||
}
|
||||
mMoveRange = mult_val * u_var;
|
||||
mMoveRange = 100.0f * u_var;
|
||||
u_var = current.angle.x >> 8 & 0xff;
|
||||
if (u_var == 0xff || u_var == 0) {
|
||||
mName = "E_OC";
|
||||
|
|
@ -2557,7 +2555,8 @@ cPhs__Step daE_OC_c::create() {
|
|||
fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx());
|
||||
fopAcM_SetMin(this, -200.0f, -200.0f, -200.0f);
|
||||
fopAcM_SetMax(this, 200.0f, 200.0f, 200.0f);
|
||||
mAcch.Set(¤t.pos, &old.pos, a_this, 1, &mAcchCir, &speed, NULL, NULL);
|
||||
mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir,
|
||||
fopAcM_GetSpeed_p(this), NULL, NULL);
|
||||
if (0 == strcmp("D_MN05", dComIfGp_getStartStageName())
|
||||
&& dComIfGp_getStartStageRoomNo() == 0xc) {
|
||||
mAcchCir.SetWallH(95.0f);
|
||||
|
|
@ -2566,12 +2565,11 @@ cPhs__Step daE_OC_c::create() {
|
|||
}
|
||||
mAcchCir.SetWallR(100.0f);
|
||||
if (mName == "E_OC") {
|
||||
health = 40;
|
||||
field_0x560 = 40;
|
||||
field_0x560 = health = 40;
|
||||
} else {
|
||||
health = 220;
|
||||
field_0x560 = 220;
|
||||
field_0x560 = health = 220;
|
||||
}
|
||||
|
||||
mStts.Init(100.0f, 0, this);
|
||||
mSphs_cc[0].Set(E_OC_n::cc_sph_src);
|
||||
mSphs_cc[0].SetStts(&mStts);
|
||||
|
|
@ -2593,8 +2591,7 @@ cPhs__Step daE_OC_c::create() {
|
|||
mSound.setEnemyName("E_oc");
|
||||
mpSound = &mSound;
|
||||
field_0xe5a = 1;
|
||||
shape_angle.x = 0;
|
||||
current.angle.x = 0;
|
||||
current.angle.x = shape_angle.x = 0;
|
||||
gravity = -5.0f;
|
||||
switch (field_0x6b4) {
|
||||
case 2:
|
||||
|
|
|
|||
|
|
@ -3227,7 +3227,6 @@ static int useHeapInit(fopAc_ac_c* i_this) {
|
|||
|
||||
/* 80813EA4-808143A0 00BE64 04FC+00 2/2 0/0 0/0 .text checkBeforeBg__8daE_YM_cFs */
|
||||
u8 daE_YM_c::checkBeforeBg(s16 i_rot_val) {
|
||||
// NONMATCHING - regalloc
|
||||
dBgS_LinChk lin_chk;
|
||||
cXyz my_vec_0;
|
||||
cXyz my_vec_1;
|
||||
|
|
@ -3275,7 +3274,7 @@ u8 daE_YM_c::checkBeforeBg(s16 i_rot_val) {
|
|||
mDoMtx_stack_c::multVec(&my_vec_0, &my_vec_1);
|
||||
my_vec_3 = current.pos + my_vec_1;
|
||||
cXyz inside_vec(0.0f, 0.0f, 80.0f);
|
||||
cLib_offsetPos(&my_vec_2, &my_vec_3, field_0x668.z, &inside_vec);
|
||||
cLib_offsetPos(&my_vec_2, &my_vec_3, (s16)field_0x668.z, &inside_vec);
|
||||
lin_chk.Set(&my_vec_3, &my_vec_2, NULL);
|
||||
if (dComIfG_Bgsp().LineCross(&lin_chk) == 0) {
|
||||
return 1;
|
||||
|
|
@ -3283,8 +3282,7 @@ u8 daE_YM_c::checkBeforeBg(s16 i_rot_val) {
|
|||
cM3dGPla plane;
|
||||
dComIfG_Bgsp().GetTriPla(lin_chk, &plane);
|
||||
cXyz* p_vec = plane.GetNP();
|
||||
f32 absxz_val = p_vec->absXZ();
|
||||
s16 tan_val = cM_atan2s(absxz_val, p_vec->y) + -0x8000;
|
||||
s16 tan_val = cM_atan2s(p_vec->absXZ(), p_vec->y) + -0x8000;
|
||||
if (abs(tan_val + 0x4000) <= 0x1555) {
|
||||
if (field_0x668.z != (s16)(cM_atan2s(p_vec->x, p_vec->z) + 0x8000)) {
|
||||
return 1;
|
||||
|
|
@ -3395,7 +3393,6 @@ void daE_YM_c::setHideType() {
|
|||
|
||||
/* 80814BA4-80815224 00CB64 0680+00 2/1 0/0 0/0 .text create__8daE_YM_cFv */
|
||||
int daE_YM_c::create() {
|
||||
// NONMATCHING - regalloc
|
||||
fopAcM_SetupActor(this, daE_YM_c);
|
||||
|
||||
mType = fopAcM_GetParam(this);
|
||||
|
|
@ -3403,17 +3400,17 @@ int daE_YM_c::create() {
|
|||
mType = 0;
|
||||
}
|
||||
|
||||
mSwitchBit = fopAcM_GetParam(this) >> 0x18;
|
||||
mSwitchBit = (fopAcM_GetParam(this) & 0xff000000) >> 24;
|
||||
|
||||
u8 prm2 = fopAcM_GetParam(this) >> 0x10;
|
||||
u8 prm2 = (fopAcM_GetParam(this) & 0xff0000) >> 16;
|
||||
if (prm2 == 0xFF) {
|
||||
prm2 = 0;
|
||||
}
|
||||
|
||||
field_0x6e0 = prm2 * 100.0f;
|
||||
|
||||
u8 prm1 = fopAcM_GetParam(this) >> 0x8;
|
||||
u8 tmp0 = (current.angle.z >> 8) & 0xff;
|
||||
u8 prm1 = (fopAcM_GetParam(this) & 0xff00) >> 8;
|
||||
u8 tmp0 = (current.angle.z & 0xff00) >> 8;
|
||||
mTagNo = current.angle.z;
|
||||
field_0x6a1 = 1;
|
||||
if ((current.angle.x & 3) != 0) {
|
||||
|
|
@ -3424,7 +3421,7 @@ int daE_YM_c::create() {
|
|||
field_0x6cb = 1;
|
||||
}
|
||||
|
||||
field_0x6a3 = (current.angle.x >> 8) & 0xff;
|
||||
field_0x6a3 = (current.angle.x & 0xff00) >> 8;
|
||||
|
||||
if (mSwitchBit != 0xFF && dComIfGs_isSwitch(mSwitchBit, fopAcM_GetRoomNo(this))) {
|
||||
#ifdef DEBUG
|
||||
|
|
@ -3448,10 +3445,9 @@ int daE_YM_c::create() {
|
|||
}
|
||||
|
||||
if (phase == cPhs_COMPLEATE_e) {
|
||||
current.angle.z = 0;
|
||||
current.angle.x = 0;
|
||||
shape_angle.z = 0;
|
||||
shape_angle.x = 0;
|
||||
OS_REPORT("E_YM PARAM %x %x %x \n", fopAcM_GetParam(this), current.angle.z, current.angle.x);
|
||||
current.angle.x = current.angle.z = 0;
|
||||
shape_angle.x = shape_angle.z = 0;
|
||||
|
||||
if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x28B0)) {
|
||||
return cPhs_ERROR_e;
|
||||
|
|
@ -3469,12 +3465,11 @@ int daE_YM_c::create() {
|
|||
fopAcM_SetMin(this, -200.0f, -100.0f, -200.0f);
|
||||
fopAcM_SetMax(this, 200.0f, 100.0f, 200.0f);
|
||||
|
||||
mAcch.Set(¤t.pos, &old.pos, this, 1, &mAcchCir, &speed, NULL, NULL);
|
||||
mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir,
|
||||
fopAcM_GetSpeed_p(this), NULL, NULL);
|
||||
mAcch.OnLineCheck();
|
||||
mAcchCir.SetWall(30.0f, 60.0f);
|
||||
|
||||
health = 10;
|
||||
field_0x560 = 10;
|
||||
field_0x560 = health = 10;
|
||||
|
||||
mStts.Init(100, 0, this);
|
||||
mSphCc.Set(E_YM_n::cc_sph_src);
|
||||
|
|
|
|||
|
|
@ -5188,11 +5188,6 @@ void daNpcF_c::setAttnPos() {
|
|||
/* empty function */
|
||||
}
|
||||
|
||||
/* 80155BBC-80155BC0 1504FC 0004+00 2/0 0/0 0/0 .text adjustShapeAngle__8daNpcF_cFv */
|
||||
void daNpcF_c::adjustShapeAngle() {
|
||||
/* empty function */
|
||||
}
|
||||
|
||||
/* 80155BC0-80155BC8 150500 0008+00 2/0 0/0 0/0 .text main__8daNpcF_cFv */
|
||||
BOOL daNpcF_c::main() {
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -227,13 +227,7 @@ extern "C" void __register_global_object();
|
|||
// Declarations:
|
||||
//
|
||||
|
||||
// fake data / lazy solution to get matches. fix later
|
||||
static char* tmp[5] = {};
|
||||
|
||||
/* 80962418-80962424 000000 000C+00 3/3 0/0 0/0 .data cNullVec__6Z2Calc */
|
||||
SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
UNK_REL_DATA;
|
||||
|
||||
/* 80962438-80962534 000020 00FC+00 1/2 0/0 0/0 .data l_bckGetParamList */
|
||||
static daNpc_GetParam2 l_bckGetParamList[21] = {
|
||||
|
|
@ -260,6 +254,8 @@ static daNpc_GetParam2 l_bckGetParamList[21] = {
|
|||
{19, 0, 0},
|
||||
};
|
||||
|
||||
static daNpcAshB_Param_c l_HIO;
|
||||
|
||||
/* 80962534-80962564 00011C 0030+00 1/1 0/0 0/0 .data l_btpGetParamList */
|
||||
static daNpc_GetParam2 l_btpGetParamList[4] = {
|
||||
{38,2,0},
|
||||
|
|
@ -298,7 +294,7 @@ daNpcAshB_c::EventFn daNpcAshB_c::mEvtSeqList[2] = {
|
|||
};
|
||||
|
||||
/* 8095DE4C-8095DFD0 0000EC 0184+00 1/1 0/0 0/0 .text __ct__11daNpcAshB_cFv */
|
||||
daNpcAshB_c::daNpcAshB_c() {
|
||||
daNpcAshB_c::daNpcAshB_c() : daNpcF_c() {
|
||||
// NONMATCHING
|
||||
}
|
||||
|
||||
|
|
@ -463,7 +459,7 @@ int daNpcAshB_c::Draw() {
|
|||
* ctrlJoint__11daNpcAshB_cFP8J3DJointP8J3DModel */
|
||||
bool daNpcAshB_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) {
|
||||
int jointNo = i_joint->getJntNo();
|
||||
int lookatJoints[3] = {1, 3, 4};
|
||||
int lookatJoints[3] = {1, 9, 10};
|
||||
|
||||
if (jointNo == 0) {
|
||||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(1));
|
||||
|
|
@ -570,40 +566,6 @@ inline void daNpcAshB_c::playExpression() {
|
|||
}
|
||||
}
|
||||
|
||||
bool daNpcAshB_c::step(s16 i_targetAngle, int param_2, f32 i_rate) {
|
||||
if (mTurnMode == 0) {
|
||||
if (param_2 != 0) {
|
||||
if ((int)fabsf(cM_sht2d((s16)(i_targetAngle - mCurAngle.y))) > 40) {
|
||||
setExpression(6, -1.0f);
|
||||
setMotion(10, -1.0f, 0);
|
||||
}
|
||||
|
||||
mTurnTargetAngle = i_targetAngle;
|
||||
mTurnAmount = 0;
|
||||
|
||||
if (mCurAngle.y == mTurnTargetAngle) {
|
||||
mTurnMode++;
|
||||
}
|
||||
|
||||
current.angle.y = mCurAngle.y;
|
||||
shape_angle.y = current.angle.y;
|
||||
mTurnMode++;
|
||||
}
|
||||
} else if (mTurnMode == 1) {
|
||||
if (turn(mTurnTargetAngle, i_rate, 0)) {
|
||||
shape_angle.y = current.angle.y;
|
||||
mCurAngle.y = current.angle.y;
|
||||
mOldAngle.y = current.angle.y;
|
||||
mTurnMode++;
|
||||
} else {
|
||||
shape_angle.y = current.angle.y;
|
||||
mCurAngle.y = current.angle.y;
|
||||
}
|
||||
}
|
||||
|
||||
return mTurnMode > 1;
|
||||
}
|
||||
|
||||
/* 8095EC00-8095EE00 000EA0 0200+00 2/0 0/0 0/0 .text setExpressionAnm__11daNpcAshB_cFib
|
||||
*/
|
||||
bool daNpcAshB_c::setExpressionAnm(int i_idx, bool i_modify) {
|
||||
|
|
@ -689,14 +651,12 @@ bool daNpcAshB_c::setExpressionBtp(int i_idx) {
|
|||
/* 8095EEE0-8095F0A4 001180 01C4+00 1/0 0/0 0/0 .text setMotionAnm__11daNpcAshB_cFif */
|
||||
// NONMATCHING regalloc
|
||||
bool daNpcAshB_c::setMotionAnm(int i_idx, f32 i_morf) {
|
||||
int iVar4;
|
||||
int iVar5;
|
||||
|
||||
if (i_idx < 7 || i_idx >= 21) {
|
||||
return;
|
||||
}
|
||||
|
||||
iVar5 = 0;
|
||||
int iVar5 = 0;
|
||||
switch (i_idx) {
|
||||
case 0x10:
|
||||
iVar5 = 1;
|
||||
|
|
@ -713,16 +673,18 @@ bool daNpcAshB_c::setMotionAnm(int i_idx, f32 i_morf) {
|
|||
l_bckGetParamList[i_idx].fileIdx);
|
||||
J3DAnmTextureSRTKey* btkAnm = getTexSRTKeyAnmP(l_arcNames[l_btkGetParamList[iVar5].arcIdx],
|
||||
l_btkGetParamList[iVar5].fileIdx);
|
||||
iVar5 = l_bckGetParamList[i_idx].attr;
|
||||
iVar4 = l_btkGetParamList[i_idx].attr;
|
||||
|
||||
int oiVar5 = l_bckGetParamList[i_idx].attr;
|
||||
int iVar4 = l_btkGetParamList[iVar5].attr;
|
||||
|
||||
|
||||
mAnmFlags &= 0xffffffc0;
|
||||
if (i_idx == 12) {
|
||||
setExpressionBtp(1);
|
||||
bool unused_bool = setExpressionBtp(1);
|
||||
(void) unused_bool;
|
||||
}
|
||||
|
||||
if (morfAnm && setMcaMorfAnm(morfAnm,1.0f,i_morf,iVar5,0,-1)) {
|
||||
if (morfAnm && setMcaMorfAnm(morfAnm,1.0f,i_morf,oiVar5,0,-1)) {
|
||||
mAnmFlags |= 9;
|
||||
mMotionLoops = 0;
|
||||
}
|
||||
|
|
@ -783,6 +745,41 @@ bool daNpcAshB_c::setAction(daNpcAshB_c::ActionFn i_actionFn) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool daNpcAshB_c::step(s16 i_targetAngle, int param_2, f32 i_rate) {
|
||||
if (mTurnMode == 0) {
|
||||
if (param_2 != 0) {
|
||||
s16 diff = i_targetAngle - mCurAngle.y;
|
||||
if ((int)fabsf(cM_sht2d(diff)) > 40) {
|
||||
setExpression(6, -1.0f);
|
||||
setMotion(10, -1.0f, 0);
|
||||
}
|
||||
}
|
||||
|
||||
mTurnTargetAngle = i_targetAngle;
|
||||
mTurnAmount = 0;
|
||||
|
||||
if (mCurAngle.y == mTurnTargetAngle) {
|
||||
mTurnMode++;
|
||||
}
|
||||
|
||||
current.angle.y = mCurAngle.y;
|
||||
shape_angle.y = current.angle.y;
|
||||
mTurnMode++;
|
||||
} else if (mTurnMode == 1) {
|
||||
if (turn(mTurnTargetAngle, i_rate, 0)) {
|
||||
shape_angle.y = current.angle.y;
|
||||
mCurAngle.y = current.angle.y;
|
||||
mOldAngle.y = current.angle.y;
|
||||
mTurnMode++;
|
||||
} else {
|
||||
shape_angle.y = current.angle.y;
|
||||
mCurAngle.y = current.angle.y;
|
||||
}
|
||||
}
|
||||
|
||||
return mTurnMode > 1;
|
||||
}
|
||||
|
||||
/* 8095F2C4-8095FC70 001564 09AC+00 4/0 0/0 0/0 .text wait__11daNpcAshB_cFPv */
|
||||
// NONMATCHING - float literals, regalloc, wrong variable order loads. the shitty trifecta
|
||||
bool daNpcAshB_c::wait(void* param_0) {
|
||||
|
|
@ -832,13 +829,8 @@ bool daNpcAshB_c::wait(void* param_0) {
|
|||
} else {
|
||||
setLookMode(LOOK_NONE);
|
||||
|
||||
// loading these in the other order results in correct order load, wrong registers
|
||||
// loading it in this order results in wrong order load, correct registers
|
||||
s16 home_angle = home.angle.y;
|
||||
s16 cur_angle = mCurAngle.y;
|
||||
|
||||
if (cur_angle != home_angle) {
|
||||
if (step(mCurAngle.y,1,15.0f)) {
|
||||
if (home.angle.y != mCurAngle.y) {
|
||||
if (step(home.angle.y,1,15.0f)) {
|
||||
setExpression(EXPR_EXPLAIN_B, -1.0f);
|
||||
setMotion(MOT_WAIT_A, -1.0f, false);
|
||||
mTurnMode = 0;
|
||||
|
|
@ -863,7 +855,8 @@ bool daNpcAshB_c::wait(void* param_0) {
|
|||
if (!dComIfGp_evmng_ChkPresentEnd()) {
|
||||
return true;
|
||||
} else {
|
||||
if (dComIfGp_event_getPreItemNo() == 0x91) {
|
||||
u8 preitemno = dComIfGp_event_getPreItemNo();
|
||||
if (preitemno == fpcNm_ITEM_ASHS_SCRIBBLING) {
|
||||
mFlowID = 504;
|
||||
setAction(&wait);
|
||||
} else {
|
||||
|
|
@ -878,7 +871,8 @@ bool daNpcAshB_c::wait(void* param_0) {
|
|||
setAction(&wait);
|
||||
}
|
||||
} else {
|
||||
if (dComIfGp_getEventManager().getMyStaffId(l_myName, NULL, 0) != -1) {
|
||||
int mystaffid = dComIfGp_getEventManager().getMyStaffId(l_myName, NULL, 0);
|
||||
if (mystaffid != -1) {
|
||||
setAction(&wait);
|
||||
}
|
||||
}
|
||||
|
|
@ -897,6 +891,8 @@ bool daNpcAshB_c::wait(void* param_0) {
|
|||
break;
|
||||
case 3:
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(0x579, 0);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
@ -1006,8 +1002,8 @@ bool daNpcAshB_c::talk(void* param_0) {
|
|||
} else {
|
||||
s16 angle = fopAcM_searchPlayerAngleY(this);
|
||||
|
||||
if (step(angle,1,15.0)) {
|
||||
setMotion(0,0.0f,false);
|
||||
if (step(angle, 1, 15.0f)) {
|
||||
setMotion(0, -1.0f, false);
|
||||
mTurnMode = 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -1219,39 +1215,48 @@ BOOL daNpcAshB_c::main() {
|
|||
void daNpcAshB_c::playMotion() {
|
||||
daNpcF_anmPlayData dat0 = {7, daNpcAshB_Param_c::m.mMorfFrames, 0};
|
||||
daNpcF_anmPlayData* pDat0[1] = {&dat0};
|
||||
|
||||
daNpcF_anmPlayData dat1 = {8, daNpcAshB_Param_c::m.mMorfFrames, 0};
|
||||
daNpcF_anmPlayData* pDat1[1] = {&dat1};
|
||||
daNpcF_anmPlayData dat2 = {0xc, daNpcAshB_Param_c::m.mMorfFrames, 1};
|
||||
daNpcF_anmPlayData* pDat2[1] = {&dat2};
|
||||
daNpcF_anmPlayData dat3a = {0xd, daNpcAshB_Param_c::m.mMorfFrames, 1};
|
||||
daNpcF_anmPlayData dat3b = {8, daNpcAshB_Param_c::m.mMorfFrames, 0};
|
||||
|
||||
daNpcF_anmPlayData dat2a = {0xC, daNpcAshB_Param_c::m.mMorfFrames, 1};
|
||||
daNpcF_anmPlayData dat2b = {0xD, 0.0f, 1};
|
||||
daNpcF_anmPlayData dat2c = {8, 0.0f, 0};
|
||||
daNpcF_anmPlayData* pDat2[3] = {&dat2a, &dat2b, &dat2c};
|
||||
|
||||
daNpcF_anmPlayData dat3a = {0xE, daNpcAshB_Param_c::m.mMorfFrames, 1};
|
||||
daNpcF_anmPlayData dat3b = {8, 0.0f, 0};
|
||||
daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b};
|
||||
daNpcF_anmPlayData dat4a = {0xe, daNpcAshB_Param_c::m.mMorfFrames, 1};
|
||||
daNpcF_anmPlayData dat4b = {8, daNpcAshB_Param_c::m.mMorfFrames, 0};
|
||||
|
||||
daNpcF_anmPlayData dat4a = {0xF, daNpcAshB_Param_c::m.mMorfFrames, 1};
|
||||
daNpcF_anmPlayData dat4b = {8, 0.0f, 0};
|
||||
daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b};
|
||||
daNpcF_anmPlayData dat5a = {0xf, daNpcAshB_Param_c::m.mMorfFrames, 1};
|
||||
daNpcF_anmPlayData dat5b = {8, daNpcAshB_Param_c::m.mMorfFrames, 0};
|
||||
|
||||
daNpcF_anmPlayData dat5a = {0x10, daNpcAshB_Param_c::m.mMorfFrames, 1};
|
||||
daNpcF_anmPlayData dat5b = {8, 0.0f, 0};
|
||||
daNpcF_anmPlayData* pDat5[2] = {&dat5a, &dat5b};
|
||||
daNpcF_anmPlayData dat6a = {16, daNpcAshB_Param_c::m.mMorfFrames, 1};
|
||||
daNpcF_anmPlayData dat6b = {0x11, daNpcAshB_Param_c::m.mMorfFrames, 0};
|
||||
|
||||
daNpcF_anmPlayData dat6a = {0x11, daNpcAshB_Param_c::m.mMorfFrames, 1};
|
||||
daNpcF_anmPlayData dat6b = {8, 0.0f, 0};
|
||||
daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b};
|
||||
daNpcF_anmPlayData dat7 = {8, daNpcAshB_Param_c::m.mMorfFrames, 1};
|
||||
daNpcF_anmPlayData* pDat7[1] = {&dat7};
|
||||
daNpcF_anmPlayData dat8 = {0x12, daNpcAshB_Param_c::m.mMorfFrames, 0};
|
||||
|
||||
daNpcF_anmPlayData dat7a = {0x12, daNpcAshB_Param_c::m.mMorfFrames, 1};
|
||||
daNpcF_anmPlayData dat7b = {0x13, 0.0f, 0};
|
||||
daNpcF_anmPlayData* pDat7[2] = {&dat7a, &dat7b};
|
||||
|
||||
daNpcF_anmPlayData dat8 = {0x13, daNpcAshB_Param_c::m.mMorfFrames, 0};
|
||||
daNpcF_anmPlayData* pDat8[1] = {&dat8};
|
||||
daNpcF_anmPlayData dat9 = {0x13, daNpcAshB_Param_c::m.mMorfFrames, 0};
|
||||
daNpcF_anmPlayData* pDat9[1] = {&dat9};
|
||||
daNpcF_anmPlayData dat10 = {0x13, daNpcAshB_Param_c::m.mMorfFrames, 1};
|
||||
daNpcF_anmPlayData* pDat10[1] = {&dat10};
|
||||
daNpcF_anmPlayData dat11 = {0x14, daNpcAshB_Param_c::m.mMorfFrames, 1};
|
||||
daNpcF_anmPlayData* pDat11[1] = {&dat11};
|
||||
// daNpcF_anmPlayData dat12 = {0x08, daNpcAshB_Param_c::m.mMorfFrames, 0};
|
||||
// daNpcF_anmPlayData* pDat12[1] = {&dat12};
|
||||
// daNpcF_anmPlayData dat13 = {0xa0, daNpcAshB_Param_c::m.mMorfFrames, 1};
|
||||
// daNpcF_anmPlayData* pDat13[1] = {&dat13};
|
||||
// daNpcF_anmPlayData dat14 = {0xb0, daNpcAshB_Param_c::m.mMorfFrames, 1};
|
||||
// daNpcF_anmPlayData* pDat14[1] = {&dat14};
|
||||
daNpcF_anmPlayData** ppDat[15] = {
|
||||
|
||||
daNpcF_anmPlayData dat9a = {0x14, daNpcAshB_Param_c::m.mMorfFrames, 1};
|
||||
daNpcF_anmPlayData dat9b = {8, 0.0f, 0};
|
||||
daNpcF_anmPlayData* pDat9[2] = {&dat9a, &dat9b};
|
||||
|
||||
daNpcF_anmPlayData dat10 = {0xA, 4.0f, 1};
|
||||
daNpcF_anmPlayData* pDat10[2] = {&dat10, NULL};
|
||||
daNpcF_anmPlayData dat11 = {0xB, 4.0f, 1};
|
||||
daNpcF_anmPlayData* pDat11[2] = {&dat11, NULL};
|
||||
|
||||
daNpcF_anmPlayData** ppDat[12] = {
|
||||
pDat0,
|
||||
pDat1,
|
||||
pDat2,
|
||||
|
|
@ -1264,9 +1269,6 @@ void daNpcAshB_c::playMotion() {
|
|||
pDat9,
|
||||
pDat10,
|
||||
pDat11,
|
||||
// pDat12,
|
||||
// pDat13,
|
||||
// pDat14
|
||||
};
|
||||
if (mMotion >= 0 && mMotion < 12) {
|
||||
playMotionAnm(ppDat);
|
||||
|
|
@ -1277,7 +1279,8 @@ void daNpcAshB_c::playMotion() {
|
|||
// NONMATCHING inlining issues
|
||||
BOOL daNpcAshB_c::ctrlBtk() {
|
||||
if (mpMatAnm != NULL) {
|
||||
J3DAnmTextureSRTKey* btkAnm = getTexSRTKeyAnmP(l_arcNames[l_btkGetParamList[0].arcIdx],l_btkGetParamList[0].fileIdx);
|
||||
J3DAnmTextureSRTKey* btkAnm = NULL;
|
||||
btkAnm = getTexSRTKeyAnmP(l_arcNames[l_btkGetParamList[0].arcIdx],l_btkGetParamList[0].fileIdx);
|
||||
|
||||
if (btkAnm == mBtkAnm.getBtkAnm()) {
|
||||
mpMatAnm->setNowOffsetX(cM_ssin(mEyeAngle.y) * 0.2f * -1.0f);
|
||||
|
|
@ -1286,8 +1289,8 @@ BOOL daNpcAshB_c::ctrlBtk() {
|
|||
return true;
|
||||
}
|
||||
mpMatAnm->offEyeMoveFlag();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* 80961264-80961574 003504 0310+00 1/0 0/0 0/0 .text setAttnPos__11daNpcAshB_cFv */
|
||||
|
|
@ -1368,8 +1371,8 @@ void daNpcAshB_c::lookat() {
|
|||
if (mLookMode != LOOK_PLAYER_TALK) {
|
||||
break;
|
||||
}
|
||||
body_down_angle = 0.0f;
|
||||
body_up_angle = 1.0f;
|
||||
body_down_angle = -80.0f;
|
||||
body_up_angle = 80.0f;
|
||||
break;
|
||||
case LOOK_ACTOR:
|
||||
actor = daPy_getPlayerActorClass();
|
||||
|
|
|
|||
|
|
@ -13,361 +13,12 @@
|
|||
#include "Z2AudioLib/Z2Instances.h"
|
||||
#include "dol2asm.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void __dt__13daNpc_Hanjo_cFv();
|
||||
extern "C" void create__13daNpc_Hanjo_cFv();
|
||||
extern "C" void CreateHeap__13daNpc_Hanjo_cFv();
|
||||
extern "C" void __dt__15J3DTevKColorAnmFv();
|
||||
extern "C" void __ct__15J3DTevKColorAnmFv();
|
||||
extern "C" void __dt__14J3DTevColorAnmFv();
|
||||
extern "C" void __ct__14J3DTevColorAnmFv();
|
||||
extern "C" void __dt__11J3DTexNoAnmFv();
|
||||
extern "C" void __ct__11J3DTexNoAnmFv();
|
||||
extern "C" void __dt__12J3DTexMtxAnmFv();
|
||||
extern "C" void __ct__12J3DTexMtxAnmFv();
|
||||
extern "C" void __dt__14J3DMatColorAnmFv();
|
||||
extern "C" void __ct__14J3DMatColorAnmFv();
|
||||
extern "C" void Delete__13daNpc_Hanjo_cFv();
|
||||
extern "C" void Execute__13daNpc_Hanjo_cFv();
|
||||
extern "C" void Draw__13daNpc_Hanjo_cFv();
|
||||
extern "C" void createHeapCallBack__13daNpc_Hanjo_cFP10fopAc_ac_c();
|
||||
extern "C" void ctrlJointCallBack__13daNpc_Hanjo_cFP8J3DJointi();
|
||||
extern "C" void getType__13daNpc_Hanjo_cFv();
|
||||
extern "C" void isDelete__13daNpc_Hanjo_cFv();
|
||||
extern "C" void reset__13daNpc_Hanjo_cFv();
|
||||
extern "C" void afterJntAnm__13daNpc_Hanjo_cFi();
|
||||
extern "C" void setParam__13daNpc_Hanjo_cFv();
|
||||
extern "C" void checkChangeEvt__13daNpc_Hanjo_cFv();
|
||||
extern "C" void setAfterTalkMotion__13daNpc_Hanjo_cFv();
|
||||
extern "C" void srchActors__13daNpc_Hanjo_cFv();
|
||||
extern "C" void evtTalk__13daNpc_Hanjo_cFv();
|
||||
extern "C" void evtCutProc__13daNpc_Hanjo_cFv();
|
||||
extern "C" void action__13daNpc_Hanjo_cFv();
|
||||
extern "C" void beforeMove__13daNpc_Hanjo_cFv();
|
||||
extern "C" void afterMoved__13daNpc_Hanjo_cFv();
|
||||
extern "C" void setAttnPos__13daNpc_Hanjo_cFv();
|
||||
extern "C" void setCollision__13daNpc_Hanjo_cFv();
|
||||
extern "C" bool drawDbgInfo__13daNpc_Hanjo_cFv();
|
||||
extern "C" void drawOtherMdl__13daNpc_Hanjo_cFv();
|
||||
extern "C" void selectAction__13daNpc_Hanjo_cFv();
|
||||
extern "C" void chkAction__13daNpc_Hanjo_cFM13daNpc_Hanjo_cFPCvPvPv_i();
|
||||
extern "C" void setAction__13daNpc_Hanjo_cFM13daNpc_Hanjo_cFPCvPvPv_i();
|
||||
extern "C" void initShoot__13daNpc_Hanjo_cFi();
|
||||
extern "C" void shoot__13daNpc_Hanjo_cFi();
|
||||
extern "C" void initDive__13daNpc_Hanjo_cFv();
|
||||
extern "C" void dive__13daNpc_Hanjo_cFv();
|
||||
extern "C" void lookround__13daNpc_Hanjo_cFs();
|
||||
extern "C" void commandToHawk__13daNpc_Hanjo_cFv();
|
||||
extern "C" void cutConversationAboutSaru__13daNpc_Hanjo_cFi();
|
||||
extern "C" void cutConversation__13daNpc_Hanjo_cFi();
|
||||
extern "C" void cutPursuitBee__13daNpc_Hanjo_cFi();
|
||||
extern "C" void cutAppearHawker__13daNpc_Hanjo_cFi();
|
||||
extern "C" void cutDive__13daNpc_Hanjo_cFi();
|
||||
extern "C" void wait__13daNpc_Hanjo_cFPv();
|
||||
extern "C" void throwStone__13daNpc_Hanjo_cFPv();
|
||||
extern "C" void takayose__13daNpc_Hanjo_cFPv();
|
||||
extern "C" void talk__13daNpc_Hanjo_cFPv();
|
||||
extern "C" static void daNpc_Hanjo_Create__FPv();
|
||||
extern "C" static void daNpc_Hanjo_Delete__FPv();
|
||||
extern "C" static void daNpc_Hanjo_Execute__FPv();
|
||||
extern "C" static void daNpc_Hanjo_Draw__FPv();
|
||||
extern "C" static bool daNpc_Hanjo_IsDelete__FPv();
|
||||
extern "C" void calc__11J3DTexNoAnmCFPUs();
|
||||
extern "C" void __dt__10cCcD_GSttsFv();
|
||||
extern "C" void __dt__8daNpcT_cFv();
|
||||
extern "C" void __dt__4cXyzFv();
|
||||
extern "C" void __dt__5csXyzFv();
|
||||
extern "C" void __dt__18daNpcT_ActorMngr_cFv();
|
||||
extern "C" void __dt__13daNpcT_Path_cFv();
|
||||
extern "C" void __ct__18daNpcT_ActorMngr_cFv();
|
||||
extern "C" void __dt__8cM3dGCylFv();
|
||||
extern "C" void __dt__8cM3dGAabFv();
|
||||
extern "C" void
|
||||
__ct__8daNpcT_cFPC26daNpcT_faceMotionAnmData_cPC22daNpcT_motionAnmData_cPCQ222daNpcT_MotionSeqMngr_c18sequenceStepData_ciPCQ222daNpcT_MotionSeqMngr_c18sequenceStepData_ciPC16daNpcT_evtData_cPPc();
|
||||
extern "C" void __ct__5csXyzFv();
|
||||
extern "C" void __dt__15daNpcT_JntAnm_cFv();
|
||||
extern "C" void __ct__4cXyzFv();
|
||||
extern "C" void __dt__22daNpcT_MotionSeqMngr_cFv();
|
||||
extern "C" void __dt__12dBgS_AcchCirFv();
|
||||
extern "C" void __dt__10dCcD_GSttsFv();
|
||||
extern "C" void __dt__12dBgS_ObjAcchFv();
|
||||
extern "C" void __dt__12J3DFrameCtrlFv();
|
||||
extern "C" void setEyeAngleY__15daNpcT_JntAnm_cF4cXyzsifs();
|
||||
extern "C" void setEyeAngleX__15daNpcT_JntAnm_cF4cXyzfs();
|
||||
extern "C" void ctrlSubFaceMotion__8daNpcT_cFi();
|
||||
extern "C" bool getEyeballLMaterialNo__8daNpcT_cFv();
|
||||
extern "C" bool getEyeballRMaterialNo__8daNpcT_cFv();
|
||||
extern "C" bool evtEndProc__8daNpcT_cFv();
|
||||
extern "C" bool chkXYItems__8daNpcT_cFv();
|
||||
extern "C" void decTmr__8daNpcT_cFv();
|
||||
extern "C" void drawGhost__8daNpcT_cFv();
|
||||
extern "C" bool afterSetFaceMotionAnm__8daNpcT_cFiifi();
|
||||
extern "C" bool afterSetMotionAnm__8daNpcT_cFiifi();
|
||||
extern "C" void getFaceMotionAnm__8daNpcT_cF26daNpcT_faceMotionAnmData_c();
|
||||
extern "C" void getMotionAnm__8daNpcT_cF22daNpcT_motionAnmData_c();
|
||||
extern "C" void changeAnm__8daNpcT_cFPiPi();
|
||||
extern "C" void changeBck__8daNpcT_cFPiPi();
|
||||
extern "C" void changeBtp__8daNpcT_cFPiPi();
|
||||
extern "C" void changeBtk__8daNpcT_cFPiPi();
|
||||
extern "C" void func_809FFE6C(void* _this, int*);
|
||||
extern "C" void func_809FFE88(void* _this, f32, f32);
|
||||
extern "C" void __sinit_d_a_npc_hanjo_cpp();
|
||||
extern "C" void __dt__18daNpc_HanjoStone_cFv();
|
||||
extern "C" void
|
||||
__ct__13daNpc_Hanjo_cFPC26daNpcT_faceMotionAnmData_cPC22daNpcT_motionAnmData_cPCQ222daNpcT_MotionSeqMngr_c18sequenceStepData_ciPCQ222daNpcT_MotionSeqMngr_c18sequenceStepData_ciPC16daNpcT_evtData_cPPc();
|
||||
extern "C" void __ct__18daNpc_HanjoStone_cFv();
|
||||
extern "C" void __dt__8cM3dGSphFv();
|
||||
extern "C" s32 getEyeballMaterialNo__13daNpc_Hanjo_cFv();
|
||||
extern "C" void getPos__18daNpc_HanjoStone_cFv();
|
||||
extern "C" void getOld__18daNpc_HanjoStone_cFv();
|
||||
extern "C" void posMoveF__18daNpc_HanjoStone_cFP10fopAc_ac_c();
|
||||
extern "C" void setPos__18daNpc_HanjoStone_cF4cXyz();
|
||||
extern "C" s32 getHeadJointNo__13daNpc_Hanjo_cFv();
|
||||
extern "C" s32 getNeckJointNo__13daNpc_Hanjo_cFv();
|
||||
extern "C" bool getBackboneJointNo__13daNpc_Hanjo_cFv();
|
||||
extern "C" void setAngle__18daNpc_HanjoStone_cF5csXyz();
|
||||
extern "C" void checkChangeJoint__13daNpc_Hanjo_cFi();
|
||||
extern "C" void checkRemoveJoint__13daNpc_Hanjo_cFi();
|
||||
extern "C" s32 getFootLJointNo__13daNpc_Hanjo_cFv();
|
||||
extern "C" s32 getFootRJointNo__13daNpc_Hanjo_cFv();
|
||||
extern "C" void __dt__19daNpc_Hanjo_Param_cFv();
|
||||
extern "C" static void func_80A0057C();
|
||||
extern "C" static void func_80A00584();
|
||||
extern "C" void chkPointInArea__15daTag_EvtArea_cF4cXyz();
|
||||
extern "C" u8 const m__19daNpc_Hanjo_Param_c[180];
|
||||
extern "C" u8 const mStoneCcDObjInfo__13daNpc_Hanjo_c[48];
|
||||
extern "C" extern char const* const d_a_npc_hanjo__stringBase0;
|
||||
extern "C" void* mCutNameList__13daNpc_Hanjo_c[6];
|
||||
extern "C" u8 mCutList__13daNpc_Hanjo_c[72];
|
||||
extern "C" u8 mStoneCcDSph__13daNpc_Hanjo_c[64];
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void mDoMtx_XYZrotM__FPA4_fsss();
|
||||
extern "C" void mDoMtx_YrotS__FPA4_fs();
|
||||
extern "C" void mDoMtx_YrotM__FPA4_fs();
|
||||
extern "C" void mDoMtx_ZrotM__FPA4_fs();
|
||||
extern "C" void transS__14mDoMtx_stack_cFRC4cXyz();
|
||||
extern "C" void transM__14mDoMtx_stack_cFfff();
|
||||
extern "C" void scaleM__14mDoMtx_stack_cFfff();
|
||||
extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz();
|
||||
extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
|
||||
extern "C" void
|
||||
__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl();
|
||||
extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv();
|
||||
extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
|
||||
extern "C" void __ct__10fopAc_ac_cFv();
|
||||
extern "C" void __dt__10fopAc_ac_cFv();
|
||||
extern "C" void fopAc_IsActor__FPv();
|
||||
extern "C" void fopAcM_delete__FP10fopAc_ac_c();
|
||||
extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
|
||||
extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData();
|
||||
extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c();
|
||||
extern "C" void fopAcM_getWaterY__FPC4cXyzPf();
|
||||
extern "C" void dComIfGs_wolfeye_effect_check__Fv();
|
||||
extern "C" void isCollect__20dSv_player_collect_cCFiUc();
|
||||
extern "C" void onSwitch__12dSv_memBit_cFi();
|
||||
extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
|
||||
extern "C" void reset__14dEvt_control_cFv();
|
||||
extern "C" void setSkipZev__14dEvt_control_cFPvPc();
|
||||
extern "C" void onSkipFade__14dEvt_control_cFv();
|
||||
extern "C" void setPt2__14dEvt_control_cFPv();
|
||||
extern "C" void setPtT__14dEvt_control_cFPv();
|
||||
extern "C" void getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci();
|
||||
extern "C" void getIsAddvance__16dEvent_manager_cFi();
|
||||
extern "C" void getMyActIdx__16dEvent_manager_cFiPCPCciii();
|
||||
extern "C" void getMySubstanceP__16dEvent_manager_cFiPCci();
|
||||
extern "C" void cutEnd__16dEvent_manager_cFi();
|
||||
extern "C" void setGoal__16dEvent_manager_cFP4cXyz();
|
||||
extern "C" void getRunEventName__16dEvent_manager_cFv();
|
||||
extern "C" void ChkPresentEnd__16dEvent_manager_cFv();
|
||||
extern "C" void
|
||||
set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf();
|
||||
extern "C" void init__7dPaPo_cFP9dBgS_Acchff();
|
||||
extern "C" void StartShock__12dVibration_cFii4cXyz();
|
||||
extern "C" void LineCross__4cBgSFP11cBgS_LinChk();
|
||||
extern "C" void GroundCross__4cBgSFP11cBgS_GndChk();
|
||||
extern "C" void __ct__12dBgS_AcchCirFv();
|
||||
extern "C" void SetWallR__12dBgS_AcchCirFf();
|
||||
extern "C" void __dt__9dBgS_AcchFv();
|
||||
extern "C" void __ct__9dBgS_AcchFv();
|
||||
extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz();
|
||||
extern "C" void CrrPos__9dBgS_AcchFR4dBgS();
|
||||
extern "C" void __ct__11dBgS_GndChkFv();
|
||||
extern "C" void __dt__11dBgS_GndChkFv();
|
||||
extern "C" void __ct__11dBgS_LinChkFv();
|
||||
extern "C" void __dt__11dBgS_LinChkFv();
|
||||
extern "C" void Set__11dBgS_LinChkFPC4cXyzPC4cXyzPC10fopAc_ac_c();
|
||||
extern "C" void SetObj__16dBgS_PolyPassChkFv();
|
||||
extern "C" void GetAc__22dCcD_GAtTgCoCommonBaseFv();
|
||||
extern "C" void __ct__10dCcD_GSttsFv();
|
||||
extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c();
|
||||
extern "C" void __ct__12dCcD_GObjInfFv();
|
||||
extern "C" void __dt__12dCcD_GObjInfFv();
|
||||
extern "C" void GetTgHitObj__12dCcD_GObjInfFv();
|
||||
extern "C" void ChkCoHit__12dCcD_GObjInfFv();
|
||||
extern "C" void GetCoHitObj__12dCcD_GObjInfFv();
|
||||
extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl();
|
||||
extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph();
|
||||
extern "C" void initialize__18daNpcT_ActorMngr_cFv();
|
||||
extern "C" void entry__18daNpcT_ActorMngr_cFP10fopAc_ac_c();
|
||||
extern "C" void remove__18daNpcT_ActorMngr_cFv();
|
||||
extern "C" void getActorP__18daNpcT_ActorMngr_cFv();
|
||||
extern "C" void initialize__15daNpcT_MatAnm_cFv();
|
||||
extern "C" void initialize__22daNpcT_MotionSeqMngr_cFv();
|
||||
extern "C" void checkEndSequence__22daNpcT_MotionSeqMngr_cFv();
|
||||
extern "C" void initialize__13daNpcT_Path_cFv();
|
||||
extern "C" void setPathInfo__13daNpcT_Path_cFUcScUc();
|
||||
extern "C" void getDstPosH__13daNpcT_Path_cF4cXyzP4cXyzii();
|
||||
extern "C" void initialize__15daNpcT_JntAnm_cFv();
|
||||
extern "C" void setParam__15daNpcT_JntAnm_cFP10fopAc_ac_cP8J3DModelP4cXyziiiffffffffffP4cXyz();
|
||||
extern "C" void calcJntRad__15daNpcT_JntAnm_cFfff();
|
||||
extern "C" void setParam__19daNpcT_DmgStagger_cFP10fopAc_ac_cP10fopAc_ac_cs();
|
||||
extern "C" void calc__19daNpcT_DmgStagger_cFi();
|
||||
extern "C" void tgHitCallBack__8daNpcT_cFP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf();
|
||||
extern "C" void getTrnsfrmKeyAnmP__8daNpcT_cFPCci();
|
||||
extern "C" void loadRes__8daNpcT_cFPCScPPCc();
|
||||
extern "C" void deleteRes__8daNpcT_cFPCScPPCc();
|
||||
extern "C" void execute__8daNpcT_cFv();
|
||||
extern "C" void draw__8daNpcT_cFiifP11_GXColorS10fiii();
|
||||
extern "C" void setEnvTevColor__8daNpcT_cFv();
|
||||
extern "C" void setRoomNo__8daNpcT_cFv();
|
||||
extern "C" void ctrlBtk__8daNpcT_cFv();
|
||||
extern "C" void setMtx__8daNpcT_cFv();
|
||||
extern "C" void ctrlJoint__8daNpcT_cFP8J3DJointP8J3DModel();
|
||||
extern "C" void evtProc__8daNpcT_cFv();
|
||||
extern "C" void setFootPos__8daNpcT_cFv();
|
||||
extern "C" void setFootPrtcl__8daNpcT_cFP4cXyzff();
|
||||
extern "C" bool checkCullDraw__8daNpcT_cFv();
|
||||
extern "C" void twilight__8daNpcT_cFv();
|
||||
extern "C" void evtOrder__8daNpcT_cFv();
|
||||
extern "C" void evtChange__8daNpcT_cFv();
|
||||
extern "C" void clrParam__8daNpcT_cFv();
|
||||
extern "C" void setFaceMotionAnm__8daNpcT_cFib();
|
||||
extern "C" void setMotionAnm__8daNpcT_cFifi();
|
||||
extern "C" void setPos__8daNpcT_cF4cXyz();
|
||||
extern "C" void setAngle__8daNpcT_cF5csXyz();
|
||||
extern "C" void setAngle__8daNpcT_cFs();
|
||||
extern "C" void hitChk__8daNpcT_cFP12dCcD_GObjInfUl();
|
||||
extern "C" void setDamage__8daNpcT_cFiii();
|
||||
extern "C" void chkActorInSight__8daNpcT_cFP10fopAc_ac_cfs();
|
||||
extern "C" void chkPointInArea__8daNpcT_cF4cXyz4cXyzfffs();
|
||||
extern "C" void srchPlayerActor__8daNpcT_cFv();
|
||||
extern "C" void step__8daNpcT_cFsiiii();
|
||||
extern "C" void initTalk__8daNpcT_cFiPP10fopAc_ac_c();
|
||||
extern "C" void talkProc__8daNpcT_cFPiiPP10fopAc_ac_ci();
|
||||
extern "C" void getNearestActorP__8daNpcT_cFs();
|
||||
extern "C" void getEvtAreaTagP__8daNpcT_cFii();
|
||||
extern "C" void daNpcT_getDistTableIdx__Fii();
|
||||
extern "C" void daNpcT_onEvtBit__FUl();
|
||||
extern "C" void daNpcT_chkEvtBit__FUl();
|
||||
extern "C" void daNpcT_onTmpBit__FUl();
|
||||
extern "C" void daNpcT_offTmpBit__FUl();
|
||||
extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
|
||||
extern "C" void dKy_set_actcol_ratio__Ff();
|
||||
extern "C" void dKy_set_bgcol_ratio__Ff();
|
||||
extern "C" void dKy_set_fogcol_ratio__Ff();
|
||||
extern "C" void __ct__10dMsgFlow_cFv();
|
||||
extern "C" void __dt__10dMsgFlow_cFv();
|
||||
extern "C" void remove__10dMsgFlow_cFv();
|
||||
extern "C" void GetAc__8cCcD_ObjFv();
|
||||
extern "C" void Set__4cCcSFP8cCcD_Obj();
|
||||
extern "C" void __pl__4cXyzCFRC3Vec();
|
||||
extern "C" void __mi__4cXyzCFRC3Vec();
|
||||
extern "C" void cM_atan2s__Fff();
|
||||
extern "C" void cM_rnd__Fv();
|
||||
extern "C" void cM_rndF__Ff();
|
||||
extern "C" void __ct__11cBgS_GndChkFv();
|
||||
extern "C" void __dt__11cBgS_GndChkFv();
|
||||
extern "C" void SetPos__11cBgS_GndChkFPC4cXyz();
|
||||
extern "C" void __dt__13cBgS_PolyInfoFv();
|
||||
extern "C" void __dt__8cM3dGCirFv();
|
||||
extern "C" void SetC__8cM3dGCylFRC4cXyz();
|
||||
extern "C" void SetH__8cM3dGCylFf();
|
||||
extern "C" void SetR__8cM3dGCylFf();
|
||||
extern "C" void SetC__8cM3dGSphFRC4cXyz();
|
||||
extern "C" void SetR__8cM3dGSphFf();
|
||||
extern "C" void cLib_addCalc__FPfffff();
|
||||
extern "C" void cLib_addCalcAngleS2__FPssss();
|
||||
extern "C" void cLib_chaseF__FPfff();
|
||||
extern "C" void cLib_targetAngleY__FPC3VecPC3Vec();
|
||||
extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
|
||||
extern "C" void __ct__10Z2CreatureFv();
|
||||
extern "C" void __dt__10Z2CreatureFv();
|
||||
extern "C" void init__10Z2CreatureFP3VecP3VecUcUc();
|
||||
extern "C" void* __nw__FUl();
|
||||
extern "C" void __dl__FPv();
|
||||
extern "C" void init__12J3DFrameCtrlFs();
|
||||
extern "C" void checkPass__12J3DFrameCtrlFf();
|
||||
extern "C" void getTexNo__16J3DAnmTexPatternCFUsPUs();
|
||||
extern "C" void initialize__14J3DMaterialAnmFv();
|
||||
extern "C" void __destroy_arr();
|
||||
extern "C" void __construct_array();
|
||||
extern "C" void __ptmf_test();
|
||||
extern "C" void __ptmf_cmpr();
|
||||
extern "C" void __ptmf_scall();
|
||||
extern "C" void _savegpr_22();
|
||||
extern "C" void _savegpr_23();
|
||||
extern "C" void _savegpr_24();
|
||||
extern "C" void _savegpr_25();
|
||||
extern "C" void _savegpr_26();
|
||||
extern "C" void _savegpr_27();
|
||||
extern "C" void _savegpr_28();
|
||||
extern "C" void _savegpr_29();
|
||||
extern "C" void _restgpr_22();
|
||||
extern "C" void _restgpr_23();
|
||||
extern "C" void _restgpr_24();
|
||||
extern "C" void _restgpr_25();
|
||||
extern "C" void _restgpr_26();
|
||||
extern "C" void _restgpr_27();
|
||||
extern "C" void _restgpr_28();
|
||||
extern "C" void _restgpr_29();
|
||||
extern "C" extern u8 const __ptmf_null[12 + 4 /* padding */];
|
||||
extern "C" extern void* __vt__8dCcD_Sph[36];
|
||||
extern "C" extern void* __vt__8dCcD_Cyl[36];
|
||||
extern "C" extern void* __vt__9dCcD_Stts[11];
|
||||
extern "C" u8 mCcDCyl__8daNpcT_c[68];
|
||||
extern "C" extern void* __vt__8daNpcT_c[49];
|
||||
extern "C" extern void* __vt__15daNpcT_MatAnm_c[4 + 1 /* padding */];
|
||||
extern "C" extern void* __vt__12cCcD_SphAttr[25];
|
||||
extern "C" extern void* __vt__12cCcD_CylAttr[25];
|
||||
extern "C" extern void* __vt__14cCcD_ShapeAttr[22];
|
||||
extern "C" extern void* __vt__9cCcD_Stts[8];
|
||||
extern "C" extern void* __vt__14J3DMaterialAnm[4];
|
||||
extern "C" u8 now__14mDoMtx_stack_c[48];
|
||||
extern "C" u8 sincosTable___5JMath[65536];
|
||||
extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
|
||||
extern "C" void chkPointInArea__15daTag_EvtArea_cF4cXyz4cXyz();
|
||||
extern "C" void __register_global_object();
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
|
||||
|
||||
/* 80A00940-80A0094C 000000 000C+00 3/3 0/0 0/0 .data cNullVec__6Z2Calc */
|
||||
SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
/* 80A0094C-80A00960 00000C 0004+10 0/0 0/0 0/0 .data @1787 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = {
|
||||
0x02000201,
|
||||
/* padding */
|
||||
0x40080000,
|
||||
0x00000000,
|
||||
0x3FE00000,
|
||||
0x00000000,
|
||||
};
|
||||
#pragma pop
|
||||
UNK_REL_DATA;
|
||||
|
||||
/* 80A00960-80A00980 000020 0020+00 1/1 0/0 0/0 .data l_bmdData */
|
||||
static int l_bmdData[4][2] = {
|
||||
|
|
@ -402,14 +53,6 @@ static char* l_resNameList[6] = {
|
|||
"Sera",
|
||||
};
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80A007F8-80A007F8 0001F8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DEAD static char const* const stringBase_80A008F0 = "CONVERSATION_ABOUT_SARU";
|
||||
SECTION_DEAD static char const* const stringBase_80A00908 = "CONVERSATION";
|
||||
#pragma pop
|
||||
|
||||
/* 80A009F0-80A009F4 0000B0 0003+01 1/0 0/0 0/0 .data l_loadResPtrn0 */
|
||||
static s8 l_loadResPtrn0[3] = {
|
||||
1,
|
||||
|
|
@ -447,8 +90,6 @@ static s8* l_loadResPtrnList[5] = {
|
|||
};
|
||||
|
||||
/* 80A00A1C-80A00B34 0000DC 0118+00 0/1 0/0 0/0 .data l_faceMotionAnmData */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DATA static daNpcT_faceMotionAnmData_c l_faceMotionAnmData[10] = {
|
||||
{-1, 0, 0, 20, 2, 1, 1},
|
||||
{7, 0, 1, 20, 2, 1, 1},
|
||||
|
|
@ -461,7 +102,6 @@ SECTION_DATA static daNpcT_faceMotionAnmData_c l_faceMotionAnmData[10] = {
|
|||
{9, 0, 2, 36, 0, 2, 0},
|
||||
{ 11, 2, 2, 38, 2, 2, 0},
|
||||
};
|
||||
#pragma pop
|
||||
|
||||
/* 80A00B34-80A00DB8 0001F4 0284+00 1/2 0/0 0/0 .data l_motionAnmData */
|
||||
SECTION_DATA static int l_motionAnmData[161] = {
|
||||
|
|
@ -506,228 +146,22 @@ SECTION_DATA char* daNpc_Hanjo_c::mCutNameList[6] = {
|
|||
"DIVE",
|
||||
};
|
||||
|
||||
// /* 80A00F90-80A00F9C -00001 000C+00 0/1 0/0 0/0 .data @3854 */
|
||||
// #pragma push
|
||||
// #pragma force_active on
|
||||
// SECTION_DATA static void* lit_3854[3] = {
|
||||
// (void*)NULL,
|
||||
// (void*)0xFFFFFFFF,
|
||||
// (void*)cutConversationAboutSaru__13daNpc_Hanjo_cFi,
|
||||
// };
|
||||
// #pragma pop
|
||||
|
||||
// /* 80A00F9C-80A00FA8 -00001 000C+00 0/1 0/0 0/0 .data @3855 */
|
||||
// #pragma push
|
||||
// #pragma force_active on
|
||||
// SECTION_DATA static void* lit_3855[3] = {
|
||||
// (void*)NULL,
|
||||
// (void*)0xFFFFFFFF,
|
||||
// (void*)cutConversation__13daNpc_Hanjo_cFi,
|
||||
// };
|
||||
// #pragma pop
|
||||
|
||||
// /* 80A00FA8-80A00FB4 -00001 000C+00 0/1 0/0 0/0 .data @3856 */
|
||||
// #pragma push
|
||||
// #pragma force_active on
|
||||
// SECTION_DATA static void* lit_3856[3] = {
|
||||
// (void*)NULL,
|
||||
// (void*)0xFFFFFFFF,
|
||||
// (void*)cutPursuitBee__13daNpc_Hanjo_cFi,
|
||||
// };
|
||||
// #pragma pop
|
||||
|
||||
// /* 80A00FB4-80A00FC0 -00001 000C+00 0/1 0/0 0/0 .data @3857 */
|
||||
// #pragma push
|
||||
// #pragma force_active on
|
||||
// SECTION_DATA static void* lit_3857[3] = {
|
||||
// (void*)NULL,
|
||||
// (void*)0xFFFFFFFF,
|
||||
// (void*)cutAppearHawker__13daNpc_Hanjo_cFi,
|
||||
// };
|
||||
// #pragma pop
|
||||
|
||||
// /* 80A00FC0-80A00FCC -00001 000C+00 0/1 0/0 0/0 .data @3858 */
|
||||
// #pragma push
|
||||
// #pragma force_active on
|
||||
// SECTION_DATA static void* lit_3858[3] = {
|
||||
// (void*)NULL,
|
||||
// (void*)0xFFFFFFFF,
|
||||
// (void*)cutDive__13daNpc_Hanjo_cFi,
|
||||
// };
|
||||
// #pragma pop
|
||||
|
||||
/* 80A00FCC-80A01014 00068C 0048+00 1/2 0/0 0/0 .data mCutList__13daNpc_Hanjo_c */
|
||||
daNpc_Hanjo_c::cutFunc daNpc_Hanjo_c::mCutList[6] = {
|
||||
NULL,
|
||||
&daNpc_Hanjo_c::cutConversationAboutSaru,
|
||||
&daNpc_Hanjo_c::cutConversation,
|
||||
&daNpc_Hanjo_c::cutPursuitBee,
|
||||
&daNpc_Hanjo_c::cutAppearHawker,
|
||||
&daNpc_Hanjo_c::cutDive,
|
||||
NULL,
|
||||
};
|
||||
|
||||
/* 80A01014-80A01054 0006D4 0040+00 0/1 0/0 0/0 .data mStoneCcDSph__13daNpc_Hanjo_c */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DATA u8 daNpc_Hanjo_c::mStoneCcDSph[64] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
dCcD_SrcSph daNpc_Hanjo_c::mStoneCcDSph = {
|
||||
daNpc_Hanjo_c::mStoneCcDObjInfo, {}
|
||||
};
|
||||
#pragma pop
|
||||
|
||||
|
||||
// /* 80A010F8-80A01104 0007B8 000C+00 2/2 0/0 0/0 .data __vt__11J3DTexNoAnm */
|
||||
// SECTION_DATA extern void* __vt__11J3DTexNoAnm[3] = {
|
||||
// (void*)NULL /* RTTI */,
|
||||
// (void*)NULL,
|
||||
// (void*)calc__11J3DTexNoAnmCFPUs,
|
||||
// };
|
||||
|
||||
// /* 80A01104-80A01110 0007C4 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGSph */
|
||||
// SECTION_DATA extern void* __vt__8cM3dGSph[3] = {
|
||||
// (void*)NULL /* RTTI */,
|
||||
// (void*)NULL,
|
||||
// (void*)__dt__8cM3dGSphFv,
|
||||
// };
|
||||
|
||||
// /* 80A01110-80A0111C 0007D0 000C+00 3/3 0/0 0/0 .data __vt__12J3DFrameCtrl */
|
||||
// SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = {
|
||||
// (void*)NULL /* RTTI */,
|
||||
// (void*)NULL,
|
||||
// (void*)__dt__12J3DFrameCtrlFv,
|
||||
// };
|
||||
|
||||
// /* 80A0111C-80A01140 0007DC 0024+00 3/3 0/0 0/0 .data __vt__12dBgS_ObjAcch */
|
||||
// SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = {
|
||||
// (void*)NULL /* RTTI */,
|
||||
// (void*)NULL,
|
||||
// (void*)__dt__12dBgS_ObjAcchFv,
|
||||
// (void*)NULL,
|
||||
// (void*)NULL,
|
||||
// (void*)func_80A00584,
|
||||
// (void*)NULL,
|
||||
// (void*)NULL,
|
||||
// (void*)func_80A0057C,
|
||||
// };
|
||||
|
||||
// /* 80A01140-80A0114C 000800 000C+00 2/2 0/0 0/0 .data __vt__12dBgS_AcchCir */
|
||||
// SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = {
|
||||
// (void*)NULL /* RTTI */,
|
||||
// (void*)NULL,
|
||||
// (void*)__dt__12dBgS_AcchCirFv,
|
||||
// };
|
||||
|
||||
// /* 80A0114C-80A01158 00080C 000C+00 3/3 0/0 0/0 .data __vt__10cCcD_GStts */
|
||||
// SECTION_DATA extern void* __vt__10cCcD_GStts[3] = {
|
||||
// (void*)NULL /* RTTI */,
|
||||
// (void*)NULL,
|
||||
// (void*)__dt__10cCcD_GSttsFv,
|
||||
// };
|
||||
|
||||
// /* 80A01158-80A01164 000818 000C+00 2/2 0/0 0/0 .data __vt__10dCcD_GStts */
|
||||
// SECTION_DATA extern void* __vt__10dCcD_GStts[3] = {
|
||||
// (void*)NULL /* RTTI */,
|
||||
// (void*)NULL,
|
||||
// (void*)__dt__10dCcD_GSttsFv,
|
||||
// };
|
||||
|
||||
// /* 80A01164-80A01170 000824 000C+00 3/3 0/0 0/0 .data __vt__22daNpcT_MotionSeqMngr_c */
|
||||
// SECTION_DATA extern void* __vt__22daNpcT_MotionSeqMngr_c[3] = {
|
||||
// (void*)NULL /* RTTI */,
|
||||
// (void*)NULL,
|
||||
// (void*)__dt__22daNpcT_MotionSeqMngr_cFv,
|
||||
// };
|
||||
|
||||
// /* 80A01170-80A0117C 000830 000C+00 5/5 0/0 0/0 .data __vt__18daNpcT_ActorMngr_c */
|
||||
// SECTION_DATA extern void* __vt__18daNpcT_ActorMngr_c[3] = {
|
||||
// (void*)NULL /* RTTI */,
|
||||
// (void*)NULL,
|
||||
// (void*)__dt__18daNpcT_ActorMngr_cFv,
|
||||
// };
|
||||
|
||||
// /* 80A0117C-80A01188 00083C 000C+00 3/3 0/0 0/0 .data __vt__15daNpcT_JntAnm_c */
|
||||
// SECTION_DATA extern void* __vt__15daNpcT_JntAnm_c[3] = {
|
||||
// (void*)NULL /* RTTI */,
|
||||
// (void*)NULL,
|
||||
// (void*)__dt__15daNpcT_JntAnm_cFv,
|
||||
// };
|
||||
|
||||
// /* 80A01188-80A01194 000848 000C+00 5/5 0/0 0/0 .data __vt__8cM3dGAab */
|
||||
// SECTION_DATA extern void* __vt__8cM3dGAab[3] = {
|
||||
// (void*)NULL /* RTTI */,
|
||||
// (void*)NULL,
|
||||
// (void*)__dt__8cM3dGAabFv,
|
||||
// };
|
||||
|
||||
// /* 80A01194-80A011A0 000854 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGCyl */
|
||||
// SECTION_DATA extern void* __vt__8cM3dGCyl[3] = {
|
||||
// (void*)NULL /* RTTI */,
|
||||
// (void*)NULL,
|
||||
// (void*)__dt__8cM3dGCylFv,
|
||||
// };
|
||||
|
||||
// /* 80A011A0-80A011AC 000860 000C+00 3/3 0/0 0/0 .data __vt__13daNpcT_Path_c */
|
||||
// SECTION_DATA extern void* __vt__13daNpcT_Path_c[3] = {
|
||||
// (void*)NULL /* RTTI */,
|
||||
// (void*)NULL,
|
||||
// (void*)__dt__13daNpcT_Path_cFv,
|
||||
// };
|
||||
|
||||
// /* 80A011AC-80A01270 00086C 00C4+00 2/2 0/0 0/0 .data __vt__13daNpc_Hanjo_c */
|
||||
// SECTION_DATA extern void* __vt__13daNpc_Hanjo_c[49] = {
|
||||
// (void*)NULL /* RTTI */,
|
||||
// (void*)NULL,
|
||||
// (void*)__dt__13daNpc_Hanjo_cFv,
|
||||
// (void*)ctrlBtk__8daNpcT_cFv,
|
||||
// (void*)ctrlSubFaceMotion__8daNpcT_cFi,
|
||||
// (void*)checkChangeJoint__13daNpc_Hanjo_cFi,
|
||||
// (void*)checkRemoveJoint__13daNpc_Hanjo_cFi,
|
||||
// (void*)getBackboneJointNo__13daNpc_Hanjo_cFv,
|
||||
// (void*)getNeckJointNo__13daNpc_Hanjo_cFv,
|
||||
// (void*)getHeadJointNo__13daNpc_Hanjo_cFv,
|
||||
// (void*)getFootLJointNo__13daNpc_Hanjo_cFv,
|
||||
// (void*)getFootRJointNo__13daNpc_Hanjo_cFv,
|
||||
// (void*)getEyeballLMaterialNo__8daNpcT_cFv,
|
||||
// (void*)getEyeballRMaterialNo__8daNpcT_cFv,
|
||||
// (void*)getEyeballMaterialNo__13daNpc_Hanjo_cFv,
|
||||
// (void*)ctrlJoint__8daNpcT_cFP8J3DJointP8J3DModel,
|
||||
// (void*)afterJntAnm__13daNpc_Hanjo_cFi,
|
||||
// (void*)setParam__13daNpc_Hanjo_cFv,
|
||||
// (void*)checkChangeEvt__13daNpc_Hanjo_cFv,
|
||||
// (void*)evtTalk__13daNpc_Hanjo_cFv,
|
||||
// (void*)evtEndProc__8daNpcT_cFv,
|
||||
// (void*)evtCutProc__13daNpc_Hanjo_cFv,
|
||||
// (void*)setAfterTalkMotion__13daNpc_Hanjo_cFv,
|
||||
// (void*)evtProc__8daNpcT_cFv,
|
||||
// (void*)action__13daNpc_Hanjo_cFv,
|
||||
// (void*)beforeMove__13daNpc_Hanjo_cFv,
|
||||
// (void*)afterMoved__13daNpc_Hanjo_cFv,
|
||||
// (void*)setAttnPos__13daNpc_Hanjo_cFv,
|
||||
// (void*)setFootPos__8daNpcT_cFv,
|
||||
// (void*)setCollision__13daNpc_Hanjo_cFv,
|
||||
// (void*)setFootPrtcl__8daNpcT_cFP4cXyzff,
|
||||
// (void*)checkCullDraw__8daNpcT_cFv,
|
||||
// (void*)twilight__8daNpcT_cFv,
|
||||
// (void*)chkXYItems__8daNpcT_cFv,
|
||||
// (void*)evtOrder__8daNpcT_cFv,
|
||||
// (void*)decTmr__8daNpcT_cFv,
|
||||
// (void*)clrParam__8daNpcT_cFv,
|
||||
// (void*)drawDbgInfo__13daNpc_Hanjo_cFv,
|
||||
// (void*)drawOtherMdl__13daNpc_Hanjo_cFv,
|
||||
// (void*)drawGhost__8daNpcT_cFv,
|
||||
// (void*)afterSetFaceMotionAnm__8daNpcT_cFiifi,
|
||||
// (void*)afterSetMotionAnm__8daNpcT_cFiifi,
|
||||
// (void*)getFaceMotionAnm__8daNpcT_cF26daNpcT_faceMotionAnmData_c,
|
||||
// (void*)getMotionAnm__8daNpcT_cF22daNpcT_motionAnmData_c,
|
||||
// (void*)changeAnm__8daNpcT_cFPiPi,
|
||||
// (void*)changeBck__8daNpcT_cFPiPi,
|
||||
// (void*)changeBtp__8daNpcT_cFPiPi,
|
||||
// (void*)changeBtk__8daNpcT_cFPiPi,
|
||||
// (void*)setMotionAnm__8daNpcT_cFifi,
|
||||
// };
|
||||
|
||||
/* 809F908C-809F9278 0000EC 01EC+00 1/0 0/0 0/0 .text __dt__13daNpc_Hanjo_cFv */
|
||||
daNpc_Hanjo_c::~daNpc_Hanjo_c() {
|
||||
OS_REPORT("|%06d:%x|daNpc_Hanjo_c -> デストラクト\n", g_Counter.mCounter0, this);
|
||||
|
|
@ -757,13 +191,9 @@ dCcD_SrcGObjInf const daNpc_Hanjo_c::mStoneCcDObjInfo = {
|
|||
{{0}},
|
||||
};
|
||||
|
||||
/* 80A006E4-80A006F8 0000E4 0014+00 0/1 0/0 0/0 .rodata heapSize$4058 */
|
||||
static int const heapSize[5] = {
|
||||
0x61B0, 0x41D0, 0x39D0, 0x39C0, 0,
|
||||
};
|
||||
|
||||
/* 809F9278-809F9578 0002D8 0300+00 1/1 0/0 0/0 .text create__13daNpc_Hanjo_cFv */
|
||||
int daNpc_Hanjo_c::create() {
|
||||
static int const heapSize[5] = {0x61B0, 0x41D0, 0x39D0, 0x39C0, 0};
|
||||
fopAcM_SetupActor2(this, daNpc_Hanjo_c, l_faceMotionAnmData,
|
||||
(daNpcT_motionAnmData_c*)l_motionAnmData, l_faceMotionSequenceData, 4,
|
||||
l_motionSequenceData, 4, l_evtList, l_resNameList);
|
||||
|
|
@ -806,7 +236,7 @@ int daNpc_Hanjo_c::create() {
|
|||
setRoomNo();
|
||||
}
|
||||
for (int i = 0; i < 4; i ++) {
|
||||
mStones[i].getSphP()->Set(*(dCcD_SrcSph*)&mStoneCcDSph);
|
||||
mStones[i].getSphP()->Set(mStoneCcDSph);
|
||||
mStones[i].getSphP()->SetStts(&mCcStts);
|
||||
}
|
||||
mCreating = 1;
|
||||
|
|
@ -816,18 +246,9 @@ int daNpc_Hanjo_c::create() {
|
|||
return rv;
|
||||
}
|
||||
|
||||
/* 80A00710-80A00718 000110 0008+00 0/1 0/0 0/0 .rodata bmdTypeList$4495 */
|
||||
static int const bmdTypeList[2] = {
|
||||
2, 3,
|
||||
};
|
||||
COMPILER_STRIP_GATE(0x80A00710, &bmdTypeList);
|
||||
|
||||
// /* 80A00718-80A0071C 000118 0004+00 1/9 0/0 0/0 .rodata @4593 */
|
||||
// SECTION_RODATA static f32 const lit_4593 = 1.0f;
|
||||
// COMPILER_STRIP_GATE(0x80A00718, &lit_4593);
|
||||
|
||||
/* 809F9578-809F997C 0005D8 0404+00 1/1 0/0 0/0 .text CreateHeap__13daNpc_Hanjo_cFv */
|
||||
int daNpc_Hanjo_c::CreateHeap() {
|
||||
static int const bmdTypeList[2] = {2, 3};
|
||||
J3DModelData* modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes(
|
||||
l_resNameList[l_bmdData[0][1]], l_bmdData[0][0]));
|
||||
if (modelData == NULL) {
|
||||
|
|
@ -1279,104 +700,10 @@ void daNpc_Hanjo_c::afterMoved() {
|
|||
}
|
||||
}
|
||||
|
||||
/* 80A01288-80A0128C 000008 0001+03 1/1 0/0 0/0 .bss @1109 */
|
||||
static u8 lit_1109[1 + 3 /* padding */];
|
||||
|
||||
/* 80A0128C-80A01290 00000C 0001+03 0/0 0/0 0/0 .bss @1107 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 lit_1107[1 + 3 /* padding */];
|
||||
#pragma pop
|
||||
|
||||
/* 80A01290-80A01294 000010 0001+03 0/0 0/0 0/0 .bss @1105 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 lit_1105[1 + 3 /* padding */];
|
||||
#pragma pop
|
||||
|
||||
/* 80A01294-80A01298 000014 0001+03 0/0 0/0 0/0 .bss @1104 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 lit_1104[1 + 3 /* padding */];
|
||||
#pragma pop
|
||||
|
||||
/* 80A01298-80A0129C 000018 0001+03 0/0 0/0 0/0 .bss @1099 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 lit_1099[1 + 3 /* padding */];
|
||||
#pragma pop
|
||||
|
||||
/* 80A0129C-80A012A0 00001C 0001+03 0/0 0/0 0/0 .bss @1097 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 lit_1097[1 + 3 /* padding */];
|
||||
#pragma pop
|
||||
|
||||
/* 80A012A0-80A012A4 000020 0001+03 0/0 0/0 0/0 .bss @1095 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 lit_1095[1 + 3 /* padding */];
|
||||
#pragma pop
|
||||
|
||||
/* 80A012A4-80A012A8 000024 0001+03 0/0 0/0 0/0 .bss @1094 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 lit_1094[1 + 3 /* padding */];
|
||||
#pragma pop
|
||||
|
||||
/* 80A012A8-80A012AC 000028 0001+03 0/0 0/0 0/0 .bss @1057 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 lit_1057[1 + 3 /* padding */];
|
||||
#pragma pop
|
||||
|
||||
/* 80A012AC-80A012B0 00002C 0001+03 0/0 0/0 0/0 .bss @1055 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 lit_1055[1 + 3 /* padding */];
|
||||
#pragma pop
|
||||
|
||||
/* 80A012B0-80A012B4 000030 0001+03 0/0 0/0 0/0 .bss @1053 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 lit_1053[1 + 3 /* padding */];
|
||||
#pragma pop
|
||||
|
||||
/* 80A012B4-80A012B8 000034 0001+03 0/0 0/0 0/0 .bss @1052 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 lit_1052[1 + 3 /* padding */];
|
||||
#pragma pop
|
||||
|
||||
/* 80A012B8-80A012BC 000038 0001+03 0/0 0/0 0/0 .bss @1014 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 lit_1014[1 + 3 /* padding */];
|
||||
#pragma pop
|
||||
|
||||
/* 80A012BC-80A012C0 00003C 0001+03 0/0 0/0 0/0 .bss @1012 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 lit_1012[1 + 3 /* padding */];
|
||||
#pragma pop
|
||||
|
||||
/* 80A012C0-80A012C4 000040 0001+03 0/0 0/0 0/0 .bss @1010 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 lit_1010[1 + 3 /* padding */];
|
||||
#pragma pop
|
||||
|
||||
/* 80A012C4-80A012C8 000044 0001+03 0/0 0/0 0/0 .bss @1009 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 lit_1009[1 + 3 /* padding */];
|
||||
#pragma pop
|
||||
|
||||
/* 80A012C8-80A012D4 000048 000C+00 1/1 0/0 0/0 .bss @3859 */
|
||||
static u8 lit_3859[12];
|
||||
UNK_REL_BSS;
|
||||
|
||||
/* 80A012D4-80A012D8 000054 0004+00 1/1 0/0 0/0 .bss l_HIO */
|
||||
static u8 l_HIO[4];
|
||||
static daNpc_Hanjo_Param_c l_HIO;
|
||||
|
||||
/* 809FABB8-809FAF90 001C18 03D8+00 1/0 0/0 0/0 .text setAttnPos__13daNpc_Hanjo_cFv */
|
||||
void daNpc_Hanjo_c::setAttnPos() {
|
||||
|
|
@ -1656,7 +983,7 @@ void daNpc_Hanjo_c::dive() {
|
|||
cLib_chaseF(&speedF, 0.0f, 0.1f);
|
||||
} else {
|
||||
if (field_0x1720 == 0) {
|
||||
mSound.startCreatureSound(Z2SE_CM_BODYFALL_WATER_M, 0, 0xffffffff);
|
||||
mSound.startCreatureSound(Z2SE_CM_BODYFALL_WATER_M, 0, -1);
|
||||
speedF *= 0.5f;
|
||||
field_0x1720 = 1;
|
||||
} else if (field_0x171f == 0) {
|
||||
|
|
@ -1892,8 +1219,6 @@ int daNpc_Hanjo_c::cutConversation(int param_1) {
|
|||
}
|
||||
|
||||
/* 809FC80C-809FCDC4 00386C 05B8+00 1/0 0/0 0/0 .text cutPursuitBee__13daNpc_Hanjo_cFi */
|
||||
// NONMATCHING
|
||||
// One instruction out of order
|
||||
int daNpc_Hanjo_c::cutPursuitBee(int param_1) {
|
||||
cXyz cStack_6c;
|
||||
int rv = 0;
|
||||
|
|
@ -1983,31 +1308,31 @@ int daNpc_Hanjo_c::cutPursuitBee(int param_1) {
|
|||
mJntAnm.lookNone(0);
|
||||
if (field_0x10e8.getDstPosH(current.pos, &cStack_6c, field_0x10e8.mpRoomPath->m_num, 4)) {
|
||||
rv = 1;
|
||||
} else {
|
||||
cLib_addCalcAngleS2(¤t.angle.y, cLib_targetAngleY(¤t.pos, &cStack_6c), 4, 0x800);
|
||||
shape_angle.y = current.angle.y;
|
||||
mCurAngle.y = current.angle.y;
|
||||
field_0xd7e.y = mCurAngle.y;
|
||||
cLib_chaseF(&speedF,
|
||||
daNpc_Hanjo_Param_c::m.field_0x90, 0.5f);
|
||||
if (mEventTimer != 0 &&
|
||||
mCyl1.ChkCoHit())
|
||||
{
|
||||
fopAc_ac_c* hitActor = mCyl1.GetCoHitAc();
|
||||
if (daPy_getPlayerActorClass() == hitActor) {
|
||||
f32 dVar17 = 40.0f;
|
||||
s16 sVar11 = cM_deg2s(50.0f);
|
||||
s16 actorAngle = fopAcM_searchActorAngleY(this, daPy_getPlayerActorClass()) - current.angle.y;
|
||||
s16 angle2;
|
||||
if (actorAngle > 0) {
|
||||
angle2 = current.angle.y + 0x2000;
|
||||
} else {
|
||||
angle2 = current.angle.y - 0x2000;
|
||||
}
|
||||
daPy_getPlayerActorClass()->setThrowDamage(angle2, dVar17 * cM_scos(sVar11), dVar17 * cM_ssin(sVar11), 0, 1, 0);
|
||||
field_0x1724 = 1;
|
||||
mEventTimer = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
cLib_addCalcAngleS2(¤t.angle.y, cLib_targetAngleY(¤t.pos, &cStack_6c), 4, 0x800);
|
||||
shape_angle.y = current.angle.y;
|
||||
mCurAngle.y = current.angle.y;
|
||||
field_0xd7e.y = mCurAngle.y;
|
||||
cLib_chaseF(&speedF, daNpc_Hanjo_Param_c::m.field_0x90, 0.5f);
|
||||
if (mEventTimer != 0 &&
|
||||
mCyl1.ChkCoHit())
|
||||
{
|
||||
fopAc_ac_c* hitActor = mCyl1.GetCoHitAc();
|
||||
if (daPy_getPlayerActorClass() == hitActor) {
|
||||
s16 sVar11 = cM_deg2s(50.0f);
|
||||
s16 actorAngle = fopAcM_searchActorAngleY(this, daPy_getPlayerActorClass());
|
||||
actorAngle -= current.angle.y;
|
||||
if (actorAngle > 0) {
|
||||
actorAngle = current.angle.y + 0x2000;
|
||||
} else {
|
||||
actorAngle = current.angle.y - 0x2000;
|
||||
}
|
||||
daPy_getPlayerActorClass()->setThrowDamage(actorAngle, 40.0f * cM_scos(sVar11),
|
||||
40.0f * cM_ssin(sVar11), 0, 1, 0);
|
||||
field_0x1724 = 1;
|
||||
mEventTimer = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
@ -2080,13 +1405,14 @@ int daNpc_Hanjo_c::cutAppearHawker(int param_1) {
|
|||
case 5:
|
||||
mEventTimer = iVar7;
|
||||
break;
|
||||
case 6:
|
||||
case 6: {
|
||||
mEventTimer = iVar7;
|
||||
fopAc_ac_c* actor_p = field_0x10c8[2].getActorP();
|
||||
JUT_ASSERT(3005, 0 != actor_p);
|
||||
((daNPC_TK_c*)actor_p)->setAttackLink();
|
||||
field_0x1722 = 1;
|
||||
break;
|
||||
}
|
||||
case 99:
|
||||
mMotionSeqMngr.setNo(13, 0.0, 1,
|
||||
0);
|
||||
|
|
@ -2195,12 +1521,13 @@ int daNpc_Hanjo_c::cutDive(int param_1) {
|
|||
initTalk(0xd0, NULL);
|
||||
mEventTimer = uVar4;
|
||||
break;
|
||||
case 1:
|
||||
case 1: {
|
||||
fopAc_ac_c* actor_p = field_0x10c8[2].getActorP();
|
||||
if (actor_p != NULL){
|
||||
((daNPC_TK_c*)actor_p)->setAway();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
mFaceMotionSeqMngr.setNo(6, -1.0f, 0, 0);
|
||||
mMotionSeqMngr.setNo(17, -1.0f, 0,
|
||||
|
|
@ -2231,7 +1558,7 @@ int daNpc_Hanjo_c::cutDive(int param_1) {
|
|||
rv = 1;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
case 2: {
|
||||
cStack_2c.set(0.0f, 0.0f, 50.0f);
|
||||
mDoMtx_stack_c::YrotS(mCurAngle.y);
|
||||
mDoMtx_stack_c::multVec(&cStack_2c, &cStack_2c);
|
||||
|
|
@ -2257,6 +1584,7 @@ int daNpc_Hanjo_c::cutDive(int param_1) {
|
|||
mCurAngle.y = current.angle.y;
|
||||
cLib_chaseF(&speedF, daNpc_Hanjo_Param_c::m.field_0x90, 1.0f);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
if (field_0x1720) {
|
||||
if (mType == TYPE_1) {
|
||||
|
|
@ -2495,7 +1823,7 @@ int daNpc_Hanjo_c::takayose(void* param_0) {
|
|||
field_0x1710 = cLib_getRndValue(dVar8 * 0.5f, dVar8 * 1.5f);
|
||||
mMode = 2;
|
||||
}
|
||||
case 2:
|
||||
case 2: {
|
||||
field_0xe2d = 0;
|
||||
dComIfG_play_c& play = g_dComIfG_gameInfo.play;
|
||||
if (play.getEvent().runCheck()) {
|
||||
|
|
@ -2599,6 +1927,7 @@ int daNpc_Hanjo_c::takayose(void* param_0) {
|
|||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
default:
|
||||
break;
|
||||
|
|
@ -2705,6 +2034,3 @@ extern actor_process_profile_definition g_profile_NPC_HANJO = {
|
|||
fopAc_NPC_e, // mActorType
|
||||
fopAc_CULLBOX_CUSTOM_e, // cullType
|
||||
};
|
||||
|
||||
|
||||
/* 80A007F8-80A007F8 0001F8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
*/
|
||||
|
||||
#include "d/actor/d_a_npc_zelR.h"
|
||||
#include "SSystem/SComponent/c_counter.h"
|
||||
|
||||
UNK_REL_DATA
|
||||
|
||||
|
|
@ -138,7 +139,7 @@ int daNpc_ZelR_c::create() {
|
|||
}
|
||||
|
||||
OS_REPORT("\t(%s:%d) flowNo:%d, PathID:%02x<%08x> ", fopAcM_getProcNameString(this), mType,
|
||||
mFlowNodeNo, getPathID(), fopAcM_GetParam(this));
|
||||
mFlowNodeNo, getPath(), fopAcM_GetParam(this));
|
||||
if (isDelete()) {
|
||||
OS_REPORT("===>isDelete:TRUE\n");
|
||||
return cPhs_ERROR_e;
|
||||
|
|
|
|||
Loading…
Reference in New Issue