Implement d_npc inlines

This commit is contained in:
LagoLunatic
2026-05-10 20:39:34 -04:00
parent 928ff4f07b
commit cbd7e076c6
9 changed files with 170 additions and 163 deletions
+1 -1
View File
@@ -3306,7 +3306,7 @@ inline void dComIfGp_event_reset() {
g_dComIfG_gameInfo.play.getEvent()->reset();
}
inline u32 dComIfGp_event_getPreItemNo() {
inline u8 dComIfGp_event_getPreItemNo() {
return g_dComIfG_gameInfo.play.getEvent()->getPreItemNo();
}
+1 -1
View File
@@ -120,7 +120,7 @@ public:
fopAc_ac_c* getPt1() { return convPId(mPt1); }
void setPt2(void* i_actor) { mPt2 = getPId(i_actor); }
fopAc_ac_c* getPt2() { return convPId(mPt2); }
int getPreItemNo() { return mItemNo; }
u8 getPreItemNo() { return mItemNo; }
f32 getCullRate() { return mCullFarClipRatio; }
void setCullRate(f32 ratio) { mCullFarClipRatio = ratio; }
+30 -41
View File
@@ -157,47 +157,32 @@ public:
void cutContinueTalkStart();
void cutTalkMsgProc();
char* getActorName() {
return mpEvtStaffName;
}
char* getActorName() { return mpEvtStaffName; }
int getNowCut() { return mCurActIdx; }
bool getAttnFlag() { return mbAttention; }
void setAttnFlag(bool flag) { mbAttention = flag; }
bool getAttnNoTurnFlag() { return mbNoTurn; }
void setAttnNoTurnFlag(bool flag) { mbNoTurn = flag; }
f32 getMoveSpeed() { return mSpeed; }
cXyz getAttnPos() { return mPos; }
void setAttnPos(cXyz& pos) { mPos = pos; }
s16 getTurnSpeed() { return mTurnSpeed; }
void setJntCtrlPtr(dNpc_JntCtrl_c* ctrl) { mpJntCtrl = ctrl; }
int getNowCut() {
return mCurActIdx;
}
bool getAttnFlag() {
return mbAttention;
}
void setAttnFlag(bool flag) {
mbAttention = flag;
}
void setAttnNoTurnFlag(bool flag) {
mbNoTurn = flag;
}
f32 getMoveSpeed() {
return mSpeed;
}
cXyz getAttnPos() {
return mPos;
}
s16 getTurnSpeed() {
return mTurnSpeed;
}
void setJntCtrlPtr(dNpc_JntCtrl_c* ctrl) {
mpJntCtrl = ctrl;
}
static fopAc_ac_c* findActorCallBack(fopAc_ac_c*, void*);
}; // Size: 0x6C
class dNpc_PathRun_c {
public:
dPath* getPath() { return mPath; }
bool isPath() { return mPath != NULL; }
u8 getIdx() { return mIdx; }
void setIdx(u8 idx) { mIdx = idx; }
void clrIdx() { mIdx = 0; }
u8 getDir() { return mbDir; }
void setDir(u8 dir) { mbDir = dir; }
void turnDir() { mbDir ^= 1; }
bool setInfDrct(dPath* pPath);
bool setInf(u8 pathIdx, s8 roomNo, u8 forwards);
dPath* nextPath(s8 roomNo);
@@ -219,15 +204,18 @@ public:
bool setNearPathIndxMk2(cXyz*, u8, u8);
bool chkInside(cXyz*);
private:
/* 0x00 */ dPath* mPath;
/* 0x04 */ u8 field_0x04;
/* 0x05 */ u8 mCurrPointIndex;
/* 0x06 */ u8 mbGoingForwards;
/* 0x05 */ u8 mIdx;
/* 0x06 */ u8 mbDir;
/* 0x07 */ u8 field_0x07;
}; // Size: 0x08
class dNpc_HeadAnm_c {
public:
typedef void (dNpc_HeadAnm_c::*SwingProc)(void);
void swing_vertical_init(s16 param_1, s16 param_2, s16 param_3, int param_4);
void swing_vertical();
void swing_horizone_init(s16 param_1, s16 param_2, s16 param_3, int param_4);
@@ -237,20 +225,21 @@ public:
dNpc_HeadAnm_c() {
field_0x14 = 0.0f;
field_0x18 = 0.0f;
field_0x1C = 0.0f;
field_0x1C = 0;
field_0x1E = 0;
field_0x20 = 0;
field_0x00 = 0;
field_0x02 = 0;
field_0x04 = 0;
}
typedef void (dNpc_HeadAnm_c::*swing_func)(void);
void defaultCalcX(s16) {}
void defaultCalcY(s16) {}
void setProc(SwingProc proc) { mProc = proc; }
/* 0x00 */ s16 field_0x00;
/* 0x02 */ s16 field_0x02;
/* 0x04 */ s16 field_0x04;
/* 0x08 */ swing_func mFunc;
/* 0x08 */ SwingProc mProc;
/* 0x14 */ f32 field_0x14;
/* 0x18 */ f32 field_0x18;
/* 0x1C */ s16 field_0x1C;
+1 -1
View File
@@ -1011,7 +1011,7 @@ u32 daNpc_Bs1_c::getMsg() {
m740 = 0;
}
else if(dComIfGp_event_chkTalkXY()) {
u8 itemNo = dComIfGp_event_getPreItemNo();
u8 itemNo = (u8)dComIfGp_event_getPreItemNo();
if(mType == 0) {
if(isEmono(itemNo)) {
+15 -15
View File
@@ -4411,13 +4411,13 @@ cPhs_State daNpcPeople_c::createInit() {
u8 pathIndex = getPrmRailID();
if(pathIndex != 0xFF) {
mPathRun.setInf(pathIndex, fopAcM_GetRoomNo(this), true);
if(mPathRun.mPath == NULL) {
if(!mPathRun.isPath()) {
return cPhs_ERROR_e;
}
fopAcM_OffStatus(this, fopAcStts_NOCULLEXEC_e);
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
cXyz point = mPathRun.getPoint(mPathRun.getIdx());
old.pos = point;
current.pos = old.pos;
mPathRun.incIdxLoop();
@@ -4940,7 +4940,7 @@ s32 daNpcPeople_c::executeWaitInit() {
/* 00002240-00002500 .text executeWait__13daNpcPeople_cFv */
void daNpcPeople_c::executeWait() {
if(!executeCommon()) {
if(mPathRun.mPath != NULL && m76E != 0 && m789 == 0 && m78A == 0) {
if(mPathRun.isPath() && m76E != 0 && m789 == 0 && m78A == 0) {
m76E--;
if(m76E == 0) {
executeSetMode(3);
@@ -5090,8 +5090,8 @@ s32 daNpcPeople_c::executeWalkInit() {
void daNpcPeople_c::executeWalk() {
if(!executeCommon()) {
bool temp = false;
if(mPathRun.chkPointPass(current.pos, mPathRun.mbGoingForwards)) {
if(mPathRun.pointArg(mPathRun.mCurrPointIndex) == 0) {
if(mPathRun.chkPointPass(current.pos, mPathRun.getDir())) {
if(mPathRun.pointArg(mPathRun.getIdx()) == 0) {
executeSetMode(8);
}
@@ -5106,7 +5106,7 @@ void daNpcPeople_c::executeWalk() {
else {
if(!temp) {
if(m78F != 8) {
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
cXyz point = mPathRun.getPoint(mPathRun.getIdx());
s16 angle;
dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &angle);
m786 = m77A = angle;
@@ -5123,9 +5123,9 @@ void daNpcPeople_c::executeWalk() {
}
}
}
else if(mNpcType != 2 || !mPathRun.mbGoingForwards) {
else if(mNpcType != 2 || mPathRun.getDir() == 0) {
mEtcFlag |= 4;
mPathRun.mbGoingForwards ^= 1;
mPathRun.turnDir();
executeSetMode(0);
}
else {
@@ -5138,7 +5138,7 @@ void daNpcPeople_c::executeWalk() {
/* 000029E8-00002B1C .text executeTurnInit__13daNpcPeople_cFv */
s32 daNpcPeople_c::executeTurnInit() {
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
cXyz point = mPathRun.getPoint(mPathRun.getIdx());
s16 angle;
dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &angle);
if(angle == current.angle.y && (mEtcFlag & 8) == 0) {
@@ -5159,7 +5159,7 @@ void daNpcPeople_c::executeTurn() {
temp = m77A;
}
else {
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
cXyz point = mPathRun.getPoint(mPathRun.getIdx());
dNpc_calc_DisXZ_AngY(current.pos, point, 0, &temp);
}
@@ -5309,7 +5309,7 @@ void daNpcPeople_c::executeLetter() {
mEtcFlag &= ~0x8;
m79D = 1;
m79E = 1;
mPathRun.mbGoingForwards ^= 0x1;
mPathRun.turnDir();
executeSetMode(6);
}
@@ -7641,7 +7641,7 @@ void daNpcPeople_c::chkAttention() {
}
else {
m799 = 0;
if(mPathRun.mPath == NULL) {
if(!mPathRun.isPath()) {
if(m770 != 0) {
m770--;
if(m770 == 0 && mNpcType == 0x5) {
@@ -8335,9 +8335,9 @@ cXyz daNpcPeople_c::getDirDistToPos(s16 angle, f32 mag) {
void daNpcPeople_c::warp() {
if(fopAcM_GetParam(this) & 0x80000000) {
fopAcM_SetParam(this, fopAcM_GetParam(this) & ~0x80000000);
if(mPathRun.mPath != NULL) {
mPathRun.mbGoingForwards = true;
mPathRun.mCurrPointIndex = 0;
if(mPathRun.isPath()) {
mPathRun.setDir(true);
mPathRun.setIdx(0);
old.pos = mPathRun.getPoint(0);
current.pos = old.pos;
mPathRun.incIdxLoop();
+13 -16
View File
@@ -712,14 +712,14 @@ cPhs_State daNpcPhoto_c::createInit() {
u8 pathIndex = getPrmRailID();
if(pathIndex != 0xFF) {
mPathRun.setInf(pathIndex, fopAcM_GetRoomNo(this), true);
if(mPathRun.mPath == NULL) {
if(!mPathRun.isPath()) {
return cPhs_ERROR_e;
}
dPath_GetNextRoomPath(mPathRun.mPath, -1);
dPath_GetNextRoomPath(mPathRun.getPath(), -1);
if(dComIfGs_isEventBit(l_save_dat.field_0x02)) {
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
cXyz point = mPathRun.getPoint(mPathRun.getIdx());
old.pos = point;
current.pos = old.pos;
mPathRun.incIdxLoop();
@@ -939,7 +939,7 @@ void daNpcPhoto_c::executeSetMode(u8 param_1) {
field_0x9A8 = l_npc_dat.field_0x4E + cM_rndF(l_npc_dat.field_0x50 - l_npc_dat.field_0x4E);
break;
case 3:
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
cXyz point = mPathRun.getPoint(mPathRun.getIdx());
dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &angle);
if (angle == current.angle.y) {
@@ -963,10 +963,7 @@ void daNpcPhoto_c::executeWait() {
if(!dComIfGs_isEventBit(l_save_dat.field_0x02)){
field_0x988 = 150.0f;
f32 zPos = l_npc_dat.field_0x34;
field_0x958.x = 0.0f;
field_0x958.y = 0.0f;
field_0x958.z = zPos;
field_0x958.set(0.0f, 0.0f, l_npc_dat.field_0x34);
if(mCyl.ChkCoHit()) {
daNpcPhoto_c* pActor = (daNpcPhoto_c*)mCyl.GetCoHitAc();
@@ -1061,14 +1058,14 @@ void daNpcPhoto_c::executeTalk() {
void daNpcPhoto_c::executeWalk() {
if(!executeCommon()) {
bool temp = false;
if(mPathRun.chkPointPass(current.pos, mPathRun.mbGoingForwards) && !mPathRun.nextIdxAuto()) {
if(mPathRun.chkPointPass(current.pos, mPathRun.getDir()) && !mPathRun.nextIdxAuto()) {
temp = true;
}
if (field_0x9BD != 0) {
executeSetMode(0);
} else if (!temp) {
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
cXyz point = mPathRun.getPoint(mPathRun.getIdx());
s16 angle;
dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &angle);
field_0x9BA = angle;
@@ -1078,9 +1075,9 @@ void daNpcPhoto_c::executeWalk() {
m_jnt.setTrn();
field_0x984 = l_npc_dat.field_0x3C;
u8 pointIndex = mPathRun.mCurrPointIndex;
u8 pointIndex = mPathRun.getIdx();
if (mPathRun.mbGoingForwards) {
if (mPathRun.getDir()) {
pointIndex--;
} else {
pointIndex++;
@@ -1103,7 +1100,7 @@ void daNpcPhoto_c::executeWalk() {
void daNpcPhoto_c::executeTurn() {
if (!executeCommon()) {
s16 angle;
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
cXyz point = mPathRun.getPoint(mPathRun.getIdx());
dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &angle); // maybe not oldpos
field_0x9BA = angle;
field_0x994 = false;
@@ -1398,7 +1395,7 @@ void daNpcPhoto_c::eventPosSetInit() {
if(ac){
cXyz temp = ac->current.pos;
dPath* path = dPath_GetNextRoomPath(mPathRun.mPath, fopAcM_GetRoomNo(this));
dPath* path = dPath_GetNextRoomPath(mPathRun.getPath(), fopAcM_GetRoomNo(this));
if(path != NULL){
dPnt* pnt = dPath_GetPnt(path, ac->getTagNo());
@@ -1432,8 +1429,8 @@ void daNpcPhoto_c::eventPosSetInit() {
shape_angle.y = current.angle.y = field_0x9AE = angle;
}
dComIfGp_event_setTalkPartner(this);
mPathRun.mCurrPointIndex = mPathRun.mPath->m_num - 2;
mPathRun.mbGoingForwards = false;
mPathRun.setIdx(mPathRun.getPath()->m_num - 2);
mPathRun.setDir(0);
executeSetMode(0);
field_0x9C1 = 1;
+43 -22
View File
@@ -1690,18 +1690,18 @@ BOOL daNpcRoten_c::createHeap() {
field_0x6D4 = field_0x6D8->getModel();
m_jnt.setHeadJntNum(modelData->getJointName()->getIndex("head"));
JUT_ASSERT(0x632, m_jnt.getHeadJntNum() >= 0);
JUT_ASSERT(DEMO_SELECT(1585, 1586), m_jnt.getHeadJntNum() >= 0);
m_jnt.setBackboneJntNum(modelData->getJointName()->getIndex("backbone1"));
JUT_ASSERT(0x637, m_jnt.getBackboneJntNum() >= 0);
JUT_ASSERT(DEMO_SELECT(1590, 1591), m_jnt.getBackboneJntNum() >= 0);
if(!initTexPatternAnm(false)) {
return false;
}
m_hand_L_jnt_num = modelData->getJointName()->getIndex("handL");
JUT_ASSERT(0x63E, m_hand_L_jnt_num >= 0);
JUT_ASSERT(DEMO_SELECT(1597, 1598), m_hand_L_jnt_num >= 0);
m_bag_jnt_num = modelData->getJointName()->getIndex("Bag1");
JUT_ASSERT(0x642, m_bag_jnt_num >= 0);
JUT_ASSERT(DEMO_SELECT(1601, 1602), m_bag_jnt_num >= 0);
for(u16 i = 0; i < modelData->getJointNum(); i++) {
if(i == m_jnt.getHeadJntNum() || i == m_jnt.getBackboneJntNum()) {
@@ -1726,16 +1726,16 @@ cPhs_State daNpcRoten_c::createInit() {
int weight = 0xFF;
if(getPrmRailID() != 0xFF) {
mPathRun.setInf(getPrmRailID(), fopAcM_GetRoomNo(this), true);
if(mPathRun.mPath == NULL) {
if(!mPathRun.isPath()) {
return cPhs_ERROR_e;
}
fopAcM_OffStatus(this, fopAcStts_NOCULLEXEC_e);
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
cXyz point = mPathRun.getPoint(mPathRun.getIdx());
old.pos = point;
current.pos = old.pos;
mPathRun.incIdxLoop();
point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
point = mPathRun.getPoint(mPathRun.getIdx());
dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &current.angle.y);
field_0x9A6 = 1;
weight = 0xFE;
@@ -1762,9 +1762,14 @@ cPhs_State daNpcRoten_c::createInit() {
fopAcM_setCullSizeBox(this, -200.0f, 0.0f, -200.0f, 200.0f, 300.0f, 200.0f);
mObjAcch.CrrPos(*dComIfG_Bgsp());
#if VERSION == VERSION_DEMO
current.pos.y = home.pos.y = mObjAcch.GetGroundH();
#else
if(-G_CM3D_F_INF != mObjAcch.GetGroundH()) {
current.pos.y = home.pos.y = mObjAcch.GetGroundH();
}
#endif
setMtx();
mpMorf->getModel()->calc();
@@ -1784,8 +1789,18 @@ cPhs_State daNpcRoten_c::createInit() {
/* 000011C8-0000122C .text _delete__12daNpcRoten_cFv */
bool daNpcRoten_c::_delete() {
dComIfG_resDeleteDemo(getPhaseP(), l_arcname_tbl[mNpcNo]);
if(heap && mpMorf) {
#if VERSION == VERSION_DEMO
if (field_0x9BC)
#endif
{
dComIfG_resDeleteDemo(getPhaseP(), l_arcname_tbl[mNpcNo]);
}
if (
#if VERSION > VERSION_DEMO
heap &&
#endif
mpMorf
) {
mpMorf->stopZelAnime();
}
@@ -1916,7 +1931,7 @@ s32 daNpcRoten_c::executeWaitInit() {
/* 00001790-00001808 .text executeWait__12daNpcRoten_cFv */
void daNpcRoten_c::executeWait() {
if(!executeCommon() && mPathRun.mPath != NULL && field_0x9A6 && !field_0x9B5) {
if(!executeCommon() && mPathRun.isPath() && field_0x9A6 && !field_0x9B5) {
field_0x9A6--;
if(field_0x9A6 == 0) {
executeSetMode(3);
@@ -1958,7 +1973,7 @@ s32 daNpcRoten_c::executeWalkInit() {
void daNpcRoten_c::executeWalk() {
if(!executeCommon()) {
bool temp = false;
if(mPathRun.chkPointPass(current.pos, mPathRun.mbGoingForwards) && !mPathRun.nextIdxAuto()) {
if(mPathRun.chkPointPass(current.pos, mPathRun.getDir()) && !mPathRun.nextIdxAuto()) {
temp = true;
}
@@ -1966,7 +1981,7 @@ void daNpcRoten_c::executeWalk() {
executeSetMode(0);
}
else if(!temp) {
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
cXyz point = mPathRun.getPoint(mPathRun.getIdx());
s16 angle;
dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &angle);
field_0x9B0 = angle;
@@ -1983,7 +1998,7 @@ void daNpcRoten_c::executeWalk() {
}
}
else {
mPathRun.mbGoingForwards ^= 1;
mPathRun.turnDir();
executeSetMode(0);
}
}
@@ -1993,7 +2008,7 @@ void daNpcRoten_c::executeWalk() {
s32 daNpcRoten_c::executeTurnInit() {
int ret = 3;
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
cXyz point = mPathRun.getPoint(mPathRun.getIdx());
s16 angle;
dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &angle);
if(angle == current.angle.y) {
@@ -2009,7 +2024,7 @@ s32 daNpcRoten_c::executeTurnInit() {
/* 00001C98-00001D5C .text executeTurn__12daNpcRoten_cFv */
void daNpcRoten_c::executeTurn() {
if(!executeCommon()) {
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
cXyz point = mPathRun.getPoint(mPathRun.getIdx());
s16 angle;
dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &angle);
field_0x9B0 = angle;
@@ -2304,8 +2319,13 @@ bool daNpcRoten_c::eventMesSet() {
void daNpcRoten_c::eventSetItemInit() {
u8 itemIdx = l_item_dat[mNpcNo][field_0x9BE];
cXyz pos(0.0f, 0.0f, 0.0f);
u8 itemNo = itemIdx + FLOWER_1;
field_0x6F8 = fopAcM_createItemForPresentDemo(&pos, itemNo, daDitem_c::FLAG_UNK01 | daDitem_c::FLAG_UNK08, -1, fopAcM_GetRoomNo(this));
field_0x6F8 = fopAcM_createItemForPresentDemo(
&pos,
(u8)(itemIdx + FLOWER_1),
daDitem_c::FLAG_UNK01 | daDitem_c::FLAG_UNK08,
-1,
fopAcM_GetRoomNo(this)
);
}
/* 000028C4-0000290C .text eventSetItem__12daNpcRoten_cFv */
@@ -2475,7 +2495,7 @@ u32 daNpcRoten_c::getMsg() {
msgNo = l_msg_xy_koukan_rupee[mNpcNo];
}
else if(dComIfGp_event_chkTalkXY()) {
int itemNo = dComIfGp_event_getPreItemNo();
u8 itemNo = dComIfGp_event_getPreItemNo();
if(isGetMap(itemNo)) {
field_0x98C = l_msg_try_force;
dComIfGs_setReserveItemEmpty();
@@ -2653,7 +2673,7 @@ void daNpcRoten_c::chkAttention() {
field_0x9B6 = 0;
field_0x9C4 = 0;
if(mPathRun.mPath == NULL) {
if(!mPathRun.isPath()) {
if(field_0x9A8 != 0) {
field_0x9A8--;
}
@@ -2717,7 +2737,7 @@ BOOL daNpcRoten_c::initTexPatternAnm(bool modify) {
J3DModelData* modelData = mpMorf->getModel()->getModelData();
m_head_tex_pattern = static_cast<J3DAnmTexPattern*>(dComIfG_getObjectIDRes(l_arcname_tbl[mNpcNo], l_btp_ix_tbl[mNpcNo]));
JUT_ASSERT(0xBFF, m_head_tex_pattern != NULL);
JUT_ASSERT(DEMO_SELECT(3064, 3071), m_head_tex_pattern != NULL);
if(!mBtpAnm.init(modelData, m_head_tex_pattern, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, modify, FALSE)) {
return false;
@@ -2815,7 +2835,7 @@ BOOL daNpcRoten_c::isGetMap(u8 itemNo) {
s16 daNpcRoten_c::XyEventCB(int i_itemBtn) {
s16 eventIdx;
int itemNo = dComIfGp_getSelectItem(i_itemBtn);
u8 itemNo = dComIfGp_getSelectItem(i_itemBtn);
field_0x9BE = itemNo - FLOWER_1;
if(isKoukanItem(itemNo) && dComIfGs_getEventReg(l_save_dat[mNpcNo].field_0x02) < 3 && !isGetMap(itemNo)) {
if(dComIfGp_event_getTalkXYBtn() == dTalkBtn_X_e) {
@@ -2868,7 +2888,8 @@ void daNpcRoten_c::setCollisionB() {
/* 00003DD4-00003F08 .text setCollisionH__12daNpcRoten_cFv */
void daNpcRoten_c::setCollisionH() {
cMtx_copy(mpMorf->getModel()->getAnmMtx(m_jnt.getHeadJntNum()), *calc_mtx);
MtxP mtx = mpMorf->getModel()->getAnmMtx(m_jnt.getHeadJntNum());
cMtx_copy(mtx, *calc_mtx);
mDoMtx_stack_c::transS(l_npc_dat[mNpcNo].field_0x3C, 0.0f, 0.0f);
cMtx_concat(*calc_mtx, mDoMtx_stack_c::get(), *calc_mtx);
+17 -17
View File
@@ -33,7 +33,7 @@ void daNpc_Mk_Static_c::aroundWalk(fopAc_ac_c* param_1, fopAc_ac_c* param_2, u8
/* 800CB778-800CB88C .text turnPath__17daNpc_Mk_Static_cFP10fopAc_ac_cP14dNpc_PathRun_cUc */
u32 daNpc_Mk_Static_c::turnPath(fopAc_ac_c* param_1, dNpc_PathRun_c* param_2, u8 options) {
cXyz local_2c = param_2->getPoint(param_2->mCurrPointIndex);
cXyz local_2c = param_2->getPoint(param_2->getIdx());
s16 local_48;
dNpc_calc_DisXZ_AngY(param_1->current.pos, local_2c, NULL, &local_48);
@@ -64,7 +64,7 @@ BOOL daNpc_Mk_Static_c::chkPath(fopAc_ac_c* param_1, dNpc_PathRun_c* param_2, u8
}
mPointIndex2 = mPointIndex1;
mPointIndex1 = param_2->mCurrPointIndex;
mPointIndex1 = param_2->getIdx();
return TRUE;
} else {
@@ -109,7 +109,7 @@ void daNpc_Mk_Static_c::init(u8 param_1, u16 param_2) {
u8 daNpc_Mk_Static_c::goFarLink_3(fopAc_ac_c* param_1, dNpc_PathRun_c* param_2) {
daPy_lk_c* link_actor = daPy_getPlayerLinkActorClass();
dNpc_PathRun_c dStack_74;
dStack_74.setInfDrct(param_2->mPath);
dStack_74.setInfDrct(param_2->getPath());
if (mPointIndex2 == mPointIndex1) {
return m0;
@@ -148,14 +148,14 @@ u8 daNpc_Mk_Static_c::goFarLink_2(fopAc_ac_c* param_1, dNpc_PathRun_c* param_2)
cXyz local_80;
cXyz local_74;
dNpc_PathRun_c dStack_94;
dStack_94.setInfDrct(param_2->mPath);
dStack_94.mCurrPointIndex = mPointIndex2;
local_8c = dStack_94.getPoint(dStack_94.mCurrPointIndex);
dStack_94.setInfDrct(param_2->getPath());
dStack_94.setIdx(mPointIndex2);
local_8c = dStack_94.getPoint(dStack_94.getIdx());
dStack_94.incIdxLoop();
local_80 = dStack_94.getPoint(dStack_94.mCurrPointIndex);
local_80 = dStack_94.getPoint(dStack_94.getIdx());
dStack_94.decIdxLoop();
dStack_94.decIdxLoop();
local_74 = dStack_94.getPoint(dStack_94.mCurrPointIndex);
local_74 = dStack_94.getPoint(dStack_94.getIdx());
s16 sVar5 = cLib_targetAngleY(&local_8c, &link_actor->current.pos);
s16 sVar6 = cLib_targetAngleY(&local_8c, &local_80);
@@ -185,7 +185,7 @@ u8 daNpc_Mk_Static_c::goFarLink_2(fopAc_ac_c* param_1, dNpc_PathRun_c* param_2)
}
if (dStack_94.setNearPathIndxMk2(&link_actor->current.pos, mPointIndex2, 5)) {
int index_diff = dStack_94.mCurrPointIndex - mPointIndex2;
int index_diff = dStack_94.getIdx() - mPointIndex2;
if ((index_diff > 0) == (abs(index_diff) <= 5)) {
return 2;
} else {
@@ -200,7 +200,7 @@ u8 daNpc_Mk_Static_c::goFarLink_2(fopAc_ac_c* param_1, dNpc_PathRun_c* param_2)
/* 800CBE7C-800CBEE0 .text runaway_com2__17daNpc_Mk_Static_cFP14dNpc_PathRun_cUc */
void daNpc_Mk_Static_c::runaway_com2(dNpc_PathRun_c* param_1, u8 param_2) {
param_1->mCurrPointIndex = mPointIndex2;
param_1->setIdx(mPointIndex2);
if (param_2 == 1) {
param_1->incIdxLoop();
@@ -208,7 +208,7 @@ void daNpc_Mk_Static_c::runaway_com2(dNpc_PathRun_c* param_1, u8 param_2) {
param_1->decIdxLoop();
}
mPointIndex1 = param_1->mCurrPointIndex;
mPointIndex1 = param_1->getIdx();
}
/* 800CBEE0-800CC374 .text runAwayProc__17daNpc_Mk_Static_cFP10fopAc_ac_cP14dNpc_PathRun_cP8dCcD_CylPs */
@@ -224,9 +224,9 @@ u8 daNpc_Mk_Static_c::runAwayProc(fopAc_ac_c* param_1, dNpc_PathRun_c* param_2,
}
switch (m0) {
case 0:
case 0: {
f32 dVar8 = param_2->setNearPathIndxMk(&param_1->current.pos);
mPointIndex1 = param_2->mCurrPointIndex;
mPointIndex1 = param_2->getIdx();
mPointIndex2 = mPointIndex1;
if (dVar8 >= 50.0f) {
@@ -234,8 +234,8 @@ u8 daNpc_Mk_Static_c::runAwayProc(fopAc_ac_c* param_1, dNpc_PathRun_c* param_2,
} else {
return 3;
}
case 5:
}
case 5: {
cXyz local_44 = param_2->getPoint(mPointIndex1);
if ((local_44 - param_1->current.pos).absXZ() < 20.0f) {
@@ -243,7 +243,7 @@ u8 daNpc_Mk_Static_c::runAwayProc(fopAc_ac_c* param_1, dNpc_PathRun_c* param_2,
}
turnPath(param_1, param_2, 2);
break;
}
case 3:
if ((link_actor->current.pos - param_1->current.pos).absXZ() < 800.0f) {
me = 10;
@@ -314,7 +314,7 @@ bool daNpc_Mk_Static_c::chkGameSet() {
/* 800CC400-800CC664 .text setRndPathPos__17daNpc_Mk_Static_cFP10fopAc_ac_cP14dNpc_PathRun_c */
void daNpc_Mk_Static_c::setRndPathPos(fopAc_ac_c* param_1, dNpc_PathRun_c* param_2) {
dBgS_GndChk local_90;
if (param_2->mPath != NULL) {
if (param_2->isPath()) {
param_1->current.pos = param_2->getPoint((int) cM_rndF((int) param_2->maxPoint()));
local_90.OffWall();
+49 -49
View File
@@ -146,7 +146,7 @@ void dNpc_JntCtrl_c::setParam(s16 max_backbone_x, s16 max_backbone_y, s16 min_ba
/* 8021ACA8-8021ACBC .text setInfDrct__14dNpc_PathRun_cFP5dPath */
bool dNpc_PathRun_c::setInfDrct(dPath* pPath) {
mPath = pPath;
mCurrPointIndex = 0;
mIdx = 0;
return true;
}
@@ -156,10 +156,10 @@ bool dNpc_PathRun_c::setInf(u8 pathIdx, s8 roomNo, u8 forwards) {
bool setPath = false;
mPath = 0;
mbGoingForwards = forwards;
mbDir = forwards;
if(pathIdx != 0xFF) {
mPath = dPath_GetRoomPath(pathIdx, roomNo);
mCurrPointIndex = 0;
clrIdx();
setPath = true;
}
@@ -194,19 +194,19 @@ bool dNpc_PathRun_c::chkPointPass(cXyz currPos, bool goingForwards) {
bool passed = false;
if (mPath) {
cXyz target;
target.x = mPath->m_points[mCurrPointIndex].m_position.x;
target.z = mPath->m_points[mCurrPointIndex].m_position.z;
target.x = mPath->m_points[mIdx].m_position.x;
target.z = mPath->m_points[mIdx].m_position.z;
f32 deltaX;
f32 deltaZ;
if (mCurrPointIndex == 0) {
if (mIdx == 0) {
deltaX = mPath->m_points[1].m_position.x - mPath->m_points[0].m_position.x;
deltaZ = mPath->m_points[1].m_position.z - mPath->m_points[0].m_position.z;
} else if (mCurrPointIndex == mPath->m_num - 1) {
} else if (mIdx == mPath->m_num - 1) {
deltaX = mPath->m_points[mPath->m_num - 1].m_position.x - mPath->m_points[mPath->m_num - 2].m_position.x;
deltaZ = mPath->m_points[mPath->m_num - 1].m_position.z - mPath->m_points[mPath->m_num - 2].m_position.z;
} else {
deltaX = mPath->m_points[mCurrPointIndex + 1].m_position.x - mPath->m_points[mCurrPointIndex - 1].m_position.x;
deltaZ = mPath->m_points[mCurrPointIndex + 1].m_position.z - mPath->m_points[mCurrPointIndex - 1].m_position.z;
deltaX = mPath->m_points[mIdx + 1].m_position.x - mPath->m_points[mIdx - 1].m_position.x;
deltaZ = mPath->m_points[mIdx + 1].m_position.z - mPath->m_points[mIdx - 1].m_position.z;
}
f32 f29 = cM_ssin(cM_atan2s(deltaX, deltaZ)) * (f32)0x7FFF;
@@ -227,9 +227,9 @@ bool dNpc_PathRun_c::incIdx() {
bool ret = true;
if(mPath != 0) {
mCurrPointIndex += 1;
if(mCurrPointIndex >= mPath->m_num) {
mCurrPointIndex = mPath->m_num - 1;
mIdx += 1;
if(mIdx >= mPath->m_num) {
mIdx = mPath->m_num - 1;
ret = false;
}
}
@@ -242,9 +242,9 @@ bool dNpc_PathRun_c::incIdxLoop() {
bool ret = true;
if(mPath != 0) {
mCurrPointIndex += 1;
if(mCurrPointIndex >= mPath->m_num) {
mCurrPointIndex = 0;
mIdx += 1;
if(mIdx >= mPath->m_num) {
clrIdx();
ret = false;
}
}
@@ -258,15 +258,15 @@ bool dNpc_PathRun_c::incIdxAuto() {
if(mPath != 0) {
if(dPath_ChkClose(mPath)) {
mCurrPointIndex += 1;
if(mCurrPointIndex >= mPath->m_num) {
mCurrPointIndex = 0;
mIdx += 1;
if(mIdx >= mPath->m_num) {
clrIdx();
}
}
else {
mCurrPointIndex += 1;
if(mCurrPointIndex >= mPath->m_num) {
mCurrPointIndex = mPath->m_num - 1;
mIdx += 1;
if(mIdx >= mPath->m_num) {
mIdx = mPath->m_num - 1;
hitEnd = false;
}
}
@@ -280,9 +280,9 @@ bool dNpc_PathRun_c::decIdx() {
bool ret = true;
if(mPath != 0) {
mCurrPointIndex -= 1;
if(mCurrPointIndex >= mPath->m_num) {
mCurrPointIndex = 0;
mIdx -= 1;
if(mIdx >= mPath->m_num) {
clrIdx();
ret = false;
}
}
@@ -295,9 +295,9 @@ bool dNpc_PathRun_c::decIdxLoop() {
bool ret = true;
if(mPath != 0) {
mCurrPointIndex -= 1;
if(mCurrPointIndex >= mPath->m_num) {
mCurrPointIndex = mPath->m_num - 1;
mIdx -= 1;
if(mIdx >= mPath->m_num) {
mIdx = mPath->m_num - 1;
ret = false;
}
}
@@ -311,15 +311,15 @@ bool dNpc_PathRun_c::decIdxAuto() {
if(mPath != 0) {
if(dPath_ChkClose(mPath)) {
mCurrPointIndex -= 1;
if(mCurrPointIndex >= mPath->m_num) {
mCurrPointIndex = mPath->m_num - 1;
mIdx -= 1;
if(mIdx >= mPath->m_num) {
mIdx = mPath->m_num - 1;
}
}
else {
mCurrPointIndex -= 1;
if(mCurrPointIndex >= mPath->m_num) {
mCurrPointIndex = 0;
mIdx -= 1;
if(mIdx >= mPath->m_num) {
clrIdx();
hitEnd = false;
}
}
@@ -332,7 +332,7 @@ bool dNpc_PathRun_c::decIdxAuto() {
bool dNpc_PathRun_c::nextIdx() {
bool hitEnd;
if(mbGoingForwards) {
if(mbDir) {
hitEnd = incIdx();
if(hitEnd == false) {
decIdx();
@@ -352,7 +352,7 @@ bool dNpc_PathRun_c::nextIdx() {
bool dNpc_PathRun_c::nextIdxAuto() {
bool hitEnd;
if(mbGoingForwards) {
if(mbDir) {
hitEnd = incIdxAuto();
if(hitEnd == 0) {
decIdx();
@@ -430,7 +430,7 @@ bool dNpc_PathRun_c::setNearPathIndx(cXyz* param_1, f32 param_2) {
}
}
mCurrPointIndex = pointIdx;
mIdx = pointIdx;
set = true;
}
@@ -453,7 +453,7 @@ f32 dNpc_PathRun_c::setNearPathIndxMk(cXyz* param_1) {
}
}
mCurrPointIndex = pointIdx;
mIdx = pointIdx;
}
return max_dist;
@@ -478,7 +478,7 @@ bool dNpc_PathRun_c::setNearPathIndxMk2(cXyz* param_1, u8 param_2, u8 param_3) {
}
}
mCurrPointIndex = pointIdx;
mIdx = pointIdx;
}
return set;
@@ -489,12 +489,12 @@ bool dNpc_PathRun_c::chkInside(cXyz* param_1) {
cXyz point, point2, point3;
setNearPathIndx(param_1, 0.0f);
point2 = getPoint(mCurrPointIndex);
point2 = getPoint(mIdx);
decIdxLoop();
point = getPoint(mCurrPointIndex);
point = getPoint(mIdx);
incIdxLoop();
incIdxLoop();
point3 = getPoint(mCurrPointIndex);
point3 = getPoint(mIdx);
s16 angle1 = cLib_targetAngleY(&point2, &point);
s16 angle2 = cLib_targetAngleY(&point2, param_1);
@@ -715,12 +715,12 @@ bool dNpc_setAnm_2(mDoExt_McaMorf* pMorf, int loopMode, f32 morf, f32 speed, int
/* 8021C238-8021C2E8 .text swing_vertical_init__14dNpc_HeadAnm_cFsssi */
void dNpc_HeadAnm_c::swing_vertical_init(s16 param_1, s16 param_2, s16 param_3, int param_4) {
if(param_4 == 0 || mFunc != &dNpc_HeadAnm_c::swing_vertical) {
if(param_4 == 0 || mProc != &dNpc_HeadAnm_c::swing_vertical) {
field_0x1C = 0;
field_0x20 = param_1;
field_0x1E = param_2;
field_0x14 = param_3;
mFunc = &dNpc_HeadAnm_c::swing_vertical;
setProc(&dNpc_HeadAnm_c::swing_vertical);
}
}
@@ -733,18 +733,18 @@ void dNpc_HeadAnm_c::swing_vertical() {
cLib_addCalcAngleS(&field_0x02, 0, 4, 0x1000, 0x100);
if (temp2 < 0 && field_0x1C >= 0 && --field_0x20 <= 0) {
mFunc = NULL;
setProc(NULL);
}
}
/* 8021C3C8-8021C478 .text swing_horizone_init__14dNpc_HeadAnm_cFsssi */
void dNpc_HeadAnm_c::swing_horizone_init(s16 param_1, s16 param_2, s16 param_3, int param_4) {
if(param_4 == 0 || mFunc != &dNpc_HeadAnm_c::swing_vertical) {
if(param_4 == 0 || mProc != &dNpc_HeadAnm_c::swing_vertical) {
field_0x1C = 0;
field_0x20 = param_1;
field_0x1E = param_2;
field_0x18 = param_3;
mFunc = &dNpc_HeadAnm_c::swing_horizone;
setProc(&dNpc_HeadAnm_c::swing_horizone);
}
}
@@ -757,14 +757,14 @@ void dNpc_HeadAnm_c::swing_horizone() {
cLib_addCalcAngleS(&field_0x02, temp, 4, 0x1000, 0x100);
if (temp2 < 0 && field_0x1C >= 0 && --field_0x20 <= 0) {
mFunc = NULL;
setProc(NULL);
}
}
/* 8021C55C-8021C5D8 .text move__14dNpc_HeadAnm_cFv */
void dNpc_HeadAnm_c::move() {
if(mFunc) {
(this->*mFunc)();
if(mProc) {
(this->*mProc)();
}
else {
cLib_addCalcAngleS(&field_0x00, 0, 4, 0x1000, 0x100);