d_a_npc_md work

This commit is contained in:
LagoLunatic
2023-11-30 15:13:15 -05:00
parent 8d77b19a6b
commit f596426ac4
13 changed files with 188 additions and 53 deletions
+1 -1
View File
@@ -81,7 +81,7 @@ public:
/* 0x480 */ dBgS_AcchCir mAcchCir;
/* 0x4C0 */ dCcD_Stts mStts;
/* 0x4FC */ dCcD_Cyl mCyl;
/* 0x62C */ s32 mShadowId;
/* 0x62C */ u32 mShadowId;
/* 0x630 */ s32 mPickupFlag;
/* 0x634 */ s32 field_0x634;
/* 0x638 */ s16 field_0x638;
+1 -1
View File
@@ -13,7 +13,7 @@ class kamome_class : public fopAc_ac_c {
public:
/* 0x290 */ request_of_phase_process_class mPhsKamome;
/* 0x298 */ mDoExt_McaMorf* mpMorf;
/* 0x29C */ int mShadowIdx;
/* 0x29C */ u32 mShadowId;
/* 0x2A0 */ u8 mType;
/* 0x2A1 */ u8 mKoMaxCount;
/* 0x2A2 */ u8 mPathIdx;
+14 -14
View File
@@ -8,9 +8,9 @@
class daMozo_c : public fopAc_ac_c {
public:
typedef void(daMozo_c::*proc_t)(void);
typedef void (daMozo_c::*proc_t)();
void setProcess(void (daMozo_c::*)()) {}
void setProcess(proc_t proc) { mCurrentProc = proc; }
s32 _create();
bool _delete();
@@ -34,18 +34,18 @@ public:
void setAnm(int, float);
public:
// TODO: add offset comments
proc_t mCurrentProc;
request_of_phase_process_class mPhs;
mDoExt_McaMorf* mAnimMorf;
mDoExt_brkAnm mBrkAnm;
J3DAnmTevRegKey* m_brk;
mDoExt_btkAnm mBtkAnm;
J3DAnmTextureSRTKey* m_btk;
// TODO: insert missing members
Quaternion mQuatRotation;
dCcD_Stts mColStatus;
dCcD_Cps mCapsuleCol;
/* 0x290 */ proc_t mCurrentProc;
/* 0x29C */ request_of_phase_process_class mPhs;
/* 0x2A4 */ mDoExt_McaMorf* mAnimMorf;
/* 0x2A8 */ mDoExt_brkAnm mBrkAnm;
/* 0x2C0 */ J3DAnmTevRegKey* m_brk;
/* 0x2C4 */ mDoExt_btkAnm mBtkAnm;
/* 0x2D8 */ J3DAnmTextureSRTKey* m_btk;
/* 0x2DC */ u8 m2DC[0x35C - 0x2DC];
/* 0x35C */ Quaternion mQuatRotation;
/* 0x36C */ u8 m36C[0x380 - 0x36C];
/* 0x380 */ dCcD_Stts mColStatus;
/* 0x3BC */ dCcD_Cps mCapsuleCol;
};
class daMozo_HIO_c {
+12 -10
View File
@@ -223,6 +223,14 @@ public:
void setTypeM_Dai() { m3138 = 5; }
void setTypeM_DaiB() { m3138 = 6; }
void setTypeShipRide() { m3138 = 7; }
void isTypeAdanmae() {}
void isTypeAtorizk() {}
void isTypeM_Dra09() {}
void isTypeSea() {}
bool isTypeEdaichi() { return m3138 == 4; }
bool isTypeM_Dai() { return m3138 == 5; }
bool isTypeM_DaiB() { return m3138 == 6; }
bool isTypeShipRide() { return m3138 == 7; }
s16 getHead_x() { return mJntCtrl.getHead_x(); }
s16 getHead_y() { return mJntCtrl.getHead_y(); }
@@ -270,14 +278,6 @@ public:
void isNoCarryAction() {}
void isSeaTalk() {}
void isShipRide() {}
void isTypeAdanmae() {}
void isTypeAtorizk() {}
void isTypeEdaichi() {}
void isTypeM_Dai() {}
void isTypeM_DaiB() {}
void isTypeM_Dra09() {}
void isTypeSea() {}
void isTypeShipRide() {}
void noCarryAction() {}
void offBitCamTagIn() {}
void offFlying() {}
@@ -482,7 +482,7 @@ public:
/* 0x0508 */ JPABaseEmitter* m0508[6];
/* 0x0520 */ mDoExt_btpAnm m0520;
/* 0x0534 */ mDoExt_btkAnm mLightBtkAnm;
/* 0x0548 */ u8 m0548[0x054C - 0x0548];
/* 0x0548 */ u32 mShadowId;
/* 0x054C */ dBgS_AcchCir mAcchCir[2];
/* 0x05CC */ dBgS_MirLightLinChk mLinChk;
/* 0x0638 */ dCcD_Stts mStts;
@@ -539,7 +539,9 @@ public:
/* 0x312F */ u8 m312F[0x3131 - 0x312F];
/* 0x3131 */ u8 m3131;
/* 0x3132 */ s8 mActionStatus;
/* 0x3133 */ u8 m3133[0x3137 - 0x3133];
/* 0x3133 */ u8 m3133;
/* 0x3134 */ u8 m3134[0x3136 - 0x3134];
/* 0x3136 */ u8 m3136;
/* 0x3137 */ u8 m3137;
/* 0x3138 */ u8 m3138;
/* 0x3139 */ u8 mCurEvent;
+1 -1
View File
@@ -190,7 +190,7 @@ public:
/* 0x520 */ dCcD_Stts mStts;
/* 0x55C */ dCcD_Cyl mCyl;
/* 0x68C */ u8 m68C[0x690 - 0x68C];
/* 0x690 */ s32 mShadowId;
/* 0x690 */ u32 mShadowId;
/* 0x694 */ mDoExt_invisibleModel mInvisModel;
/* 0x69C */ dNpc_JntCtrl_c mJntCtrl;
/* 0x6D0 */ u32 mCorpseID;
+1
View File
@@ -3,6 +3,7 @@
#include "dolphin/types.h"
#include "f_op/f_op_actor.h"
#include "JSystem/J3DGraphBase/J3DPacket.h"
class daSea_WaterHeightInfo_Mng {
public:
+5 -4
View File
@@ -12,19 +12,20 @@
class daShip_c : public fopAc_ac_c {
public:
enum daSHIP_SFLG {
daSFLG_HEAD_NO_DRAW_e = 0x00200000,
};
bool checkStateFlg(daSHIP_SFLG flag) const { return m0358 & flag; }
bool checkHeadNoDraw() const { return checkStateFlg(daSFLG_HEAD_NO_DRAW_e); }
void checkCraneMode() const {}
void checkCraneUpEnd() const {}
void checkForceMove() {}
void checkHeadNoDraw() const {}
void checkJumpOkFlg() const {}
void checkRopeCntMax() const {}
void checkRopeDownStart() const {}
void checkSalvageDemo() const {}
void checkShootCannon() const {}
void checkStateFlg(daSHIP_SFLG) const {}
void checkTornadoFlg() const {}
void checkTornadoUp() const {}
void getBeltSpeed() const {}
@@ -188,7 +189,7 @@ public:
/* 0x0354 */ int mEvtStaffId;
/* 0x0358 */ u32 m0358;
/* 0x035C */ int mNextMessageID;
/* 0x0360 */ int mShadowId;
/* 0x0360 */ u32 mShadowId;
/* 0x0364 */ u8 m0364[0x036C - 0x0364];
/* 0x036C */ s16 m036C;
/* 0x036E */ u8 m036E[0x0370 - 0x036E];
+8
View File
@@ -2329,6 +2329,10 @@ inline int dComIfGd_setRealShadow2(u32 id, s8 param_2, J3DModel* pModel, cXyz* p
pTevStr);
}
inline bool dComIfGd_addRealShadow(u32 id, J3DModel* pModel) {
return g_dComIfG_gameInfo.drawlist.addRealShadow(id, pModel);
}
inline void dComIfGd_imageDrawShadow(Mtx mtx) {
g_dComIfG_gameInfo.drawlist.imageDrawShadow(mtx);
}
@@ -2350,6 +2354,10 @@ inline GXColor & dComIfGd_getAlphaModelColor() { return g_dComIfG_gameInfo.drawl
inline GXColor & dComIfGd_getLightModelColor() { return g_dComIfG_gameInfo.drawlist.getLightModelColor(); }
inline GXColor & dComIfGd_getSpotModelColor() { return g_dComIfG_gameInfo.drawlist.getSpotModelColor(); }
inline J3DDrawBuffer* dComIfGd_getXluList() {
return g_dComIfG_gameInfo.drawlist.getXluList();
}
inline J3DDrawBuffer* dComIfGd_getOpaListP1() {
return g_dComIfG_gameInfo.drawlist.getOpaListP1();
}
+5
View File
@@ -377,6 +377,7 @@ public:
static void wipeIn(f32);
static void calcWipe();
J3DDrawBuffer* getXluList() { return mpXluList; }
J3DDrawBuffer* getOpaListP1() { return mpOpaListP1; }
J3DDrawBuffer* getOpaListFilter() { return mpOpaListFilter; }
J3DDrawBuffer* getOpaList2D() { return mpOpaList2D; }
@@ -448,6 +449,10 @@ public:
return mShadowControl.setReal2(id, param_2, pModel, pPos, param_5, param_6, pTevStr);
}
bool addRealShadow(u32 id, J3DModel* pModel) {
return mShadowControl.addReal(id, pModel);
}
void drawShadow(Mtx mtx) { mShadowControl.draw(mtx); }
void imageDrawShadow(Mtx mtx) { mShadowControl.imageDraw(mtx); }
+1 -1
View File
@@ -1037,7 +1037,7 @@ void daArrow_c::checkRestMp() {
u8 currMagic = dComIfGs_getMagic();
if (currMagic < use_mp[m_keep_type]) {
m_keep_type = 0;
m_keep_type = TYPE_NORMAL;
}
}
+137 -13
View File
@@ -11,6 +11,8 @@
#include "m_Do/m_Do_controller_pad.h"
#include "m_Do/m_Do_mtx.h"
#include "d/actor/d_a_player_main.h"
#include "d/d_snap.h"
#include "d/actor/d_a_ship.h"
// Needed for the .data section to match.
static f32 dummy1[3] = {1.0f, 1.0f, 1.0f};
@@ -855,7 +857,7 @@ bool daNpc_Md_c::mirrorCancelCheck() {
/* 00003648-00003674 .text setWingEmitter__10daNpc_Md_cFv */
void daNpc_Md_c::setWingEmitter() {
/* Nonmatching */
particle_set(m0508, 0x819B);
}
/* 00003674-000036C0 .text setHane02Emitter__10daNpc_Md_cFv */
@@ -926,8 +928,9 @@ void daNpc_Md_c::checkCollision(int) {
}
/* 00003FE0-00004040 .text restartPoint__10daNpc_Md_cFs */
void daNpc_Md_c::restartPoint(s16) {
/* Nonmatching */
void daNpc_Md_c::restartPoint(s16 i_point) {
setPointRestart(i_point, 2);
setNpcAction(&waitNpcAction, NULL);
}
/* 00004040-00004174 .text isTagCheckOK__10daNpc_Md_cFv */
@@ -1297,7 +1300,8 @@ bool daNpc_Md_c::actionFlyEvent(int) {
/* 0000B870-0000B890 .text initialGlidingEvent__10daNpc_Md_cFi */
void daNpc_Md_c::initialGlidingEvent(int) {
/* Nonmatching */
mGravity = l_HIO.m0F4;
mMaxFallSpeed = -100.0f;
}
/* 0000B890-0000B934 .text actionGlidingEvent__10daNpc_Md_cFi */
@@ -1312,7 +1316,12 @@ void daNpc_Md_c::initialLandingEvent(int) {
/* 0000B99C-0000B9E0 .text actionLandingEvent__10daNpc_Md_cFi */
bool daNpc_Md_c::actionLandingEvent(int) {
/* Nonmatching */
if (m312A != 0) {
setAnm(0);
return true;
}
setAttention(true);
return false;
}
/* 0000B9E0-0000B9F8 .text initialWalkEvent__10daNpc_Md_cFi */
@@ -1363,7 +1372,15 @@ void daNpc_Md_c::initialOnetimeEvent(int) {
/* 0000C360-0000C3C4 .text actionOnetimeEvent__10daNpc_Md_cFi */
bool daNpc_Md_c::actionOnetimeEvent(int) {
/* Nonmatching */
if (m312A != 0) {
if (m3104 == 0x1A) {
setAnm(0);
} else {
return true;
}
}
setAttention(true);
return false;
}
/* 0000C3C4-0000C48C .text initialQuake__10daNpc_Md_cFi */
@@ -1460,8 +1477,28 @@ void daNpc_Md_c::getAnmType(u8) {
}
/* 0000CDF4-0000CF18 .text initTexPatternAnm__10daNpc_Md_cFUcb */
BOOL daNpc_Md_c::initTexPatternAnm(u8, bool) {
/* Nonmatching */
BOOL daNpc_Md_c::initTexPatternAnm(u8 btpIdx, bool param_2) {
struct btp_anm_tbl {
/* 0x00 */ char m00[0x20];
/* 0x20 */ u8 m20;
};
static btp_anm_tbl btpAnmTbl[] = {
{}, // TODO
};
J3DModelData* modelData = mpMorf->getModel()->getModelData();
bool ret = false;
J3DAnmTexPattern* eyeTexPtrn = (J3DAnmTexPattern*)dComIfG_getObjectRes(mModelArcName, btpAnmTbl[btpIdx].m00);
JUT_ASSERT(7502, eyeTexPtrn != 0);
if (m0520.init(modelData, eyeTexPtrn, 1, 1, 1.0f, 0, -1, param_2, 0)) {
m3112 = eyeTexPtrn->getFrameMax();
m3133 = 0;
m3136 = btpAnmTbl[btpIdx].m20;
m3137 = btpIdx;
ret = true;
}
return ret;
}
/* 0000CF18-0000CFCC .text playTexPatternAnm__10daNpc_Md_cFv */
@@ -1702,7 +1739,83 @@ BOOL daNpc_Md_c::init() {
/* 0000F4E0-0000F8EC .text draw__10daNpc_Md_cFv */
BOOL daNpc_Md_c::draw() {
/* Nonmatching */
if (cLib_checkBit(m30F0, 0x1000UL)) {
if (dComIfGp_getShipActor() && dComIfGp_getShipActor()->checkHeadNoDraw()) {
return TRUE;
}
} else {
if (fopAcM_GetHomeRoomNo(this) < 0) {
return TRUE;
}
if (!dComIfGp_roomControl_checkStatusFlag(current.roomNo, 0x10)) {
return TRUE;
}
}
J3DModel* model = mpMorf->getModel();
J3DModelData* modelData = model->getModelData();
g_env_light.settingTevStruct(0, &current.pos, &mTevStr);
drawDamageFog();
g_env_light.setLightTevColorType(model, &mTevStr);
m0520.entry(modelData);
mpMorf->entryDL();
m0520.remove(modelData);
if (!isTypeShipRide()) {
if (cLib_checkBit(m30F0, 0x1UL)) {
model = mpWingMorf->getModel();
g_env_light.setLightTevColorType(model, &mTevStr);
mpWingMorf->entryDL();
} else {
model = mpArmMorf->getModel();
g_env_light.setLightTevColorType(model, &mTevStr);
mpArmMorf->entryDL();
}
} else {
model = mpArmMorf->getModel();
g_env_light.setLightTevColorType(model, &mTevStr);
mpArmMorf->entryDL();
}
g_env_light.setLightTevColorType(mpHarpModel, &mTevStr);
mDoExt_modelUpdateDL(mpHarpModel);
if (cLib_checkBit(m30F0, 0x2000UL)) {
mLightBtkAnm.entry(mpHarpLightModel->getModelData());
mDoExt_modelUpdateDL(mpHarpLightModel);
mLightBtkAnm.remove(mpHarpLightModel->getModelData());
mDoMtx_copy(mpHarpModel->getBaseTRMtx(), mDoMtx_stack_c::get());
mDoMtx_stack_c::transM(l_HIO.m034.m0C, l_HIO.m034.m10, l_HIO.m034.m14);
Mtx mtx;
mDoMtx_copy(mDoMtx_stack_c::get(), mtx);
mDoMtx_stack_c::transS(l_ms_light_local_start);
mDoMtx_stack_c::YrotM(0x8000);
f32 temp = mCps.GetAtVecP()->abs();
mDoMtx_stack_c::scaleM(0.1f, 0.1f, temp * (1.0f/10000.0f));
mDoMtx_stack_c::revConcat(mtx);
m0B70.update(mDoMtx_stack_c::get(), 0xFF, 90.0f);
dComIfGd_getXluList()->entryImm(&m0B70, 0x1F);
}
if (!cLib_checkBit(m30F0, 0x1000UL) && !fopAcM_checkStatus(this, fopAcStts_CARRY_e) && cLib_checkBit(m30F0, 0x20000UL)) {
cXyz shadowPos(current.pos.x, current.pos.y + 150.0f, current.pos.z);
mShadowId = dComIfGd_setShadow(
mShadowId, 0, mpMorf->getModel(), &shadowPos, 800.0f, 20.0f,
current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &mTevStr,
0, 1.0f, dDlst_shadowControl_c::getSimpleTex()
);
if (mShadowId != 0) {
dComIfGd_addRealShadow(mShadowId, model);
dComIfGd_addRealShadow(mShadowId, mpHarpModel);
}
}
dSnap_RegistFig(0x8A, this, 1.0f, 1.0f, 1.0f);
return TRUE;
}
/* 0000F8EC-0000FC18 .text animationPlay__10daNpc_Md_cFv */
@@ -1721,8 +1834,14 @@ BOOL daNpc_Md_c::execute() {
}
/* 000108B0-00010948 .text particle_set__10daNpc_Md_cFPP14JPABaseEmitterUs */
void daNpc_Md_c::particle_set(JPABaseEmitter**, u16) {
/* Nonmatching */
void daNpc_Md_c::particle_set(JPABaseEmitter** pEmitter, u16 particleID) {
if (*pEmitter) {
return;
}
(*pEmitter) = dComIfGp_particle_set(particleID, &current.pos, &current.angle, NULL, 0xFF, NULL, fopAcM_GetRoomNo(this), &mTevStr.mColorK0, &mTevStr.mColorK0);
if (*pEmitter) {
(*pEmitter)->becomeImmortalEmitter();
}
}
/* 00010948-000109A0 .text emitterTrace__10daNpc_Md_cFP14JPABaseEmitterPA4_fP5csXyz */
@@ -1745,8 +1864,13 @@ void daNpc_Md_c::emitterTrace(JPABaseEmitter* emitter, MtxP mtx, csXyz* angle) {
}
/* 000109A0-000109DC .text emitterDelete__10daNpc_Md_cFPP14JPABaseEmitter */
void daNpc_Md_c::emitterDelete(JPABaseEmitter**) {
/* Nonmatching */
void daNpc_Md_c::emitterDelete(JPABaseEmitter** pEmitter) {
if (*pEmitter == NULL) {
return;
}
(*pEmitter)->quitImmortalEmitter();
(*pEmitter)->becomeInvalidEmitter();
(*pEmitter) = NULL;
}
/* 000109DC-000110BC .text __dt__10daNpc_Md_cFv */
+2 -2
View File
@@ -168,7 +168,7 @@ void dComIfG_play_c::itemInit() {
field_0x4979 = 0;
field_0x497a = 0;
field_0x4963 = dComIfGs_getOptVibration();
daArrow_c::setKeepType(0);
daArrow_c::setKeepType(daArrow_c::TYPE_NORMAL);
mMesgCameraTagInfo = 0;
field_0x4984 = 0;
@@ -1250,7 +1250,7 @@ void dComIfGs_copyPlayerRecollectionData() {
/* 80054E9C-80055318 .text dComIfGs_setPlayerRecollectionData__Fv */
void dComIfGs_setPlayerRecollectionData() {
#if VERSION != VERSION_JPN
daArrow_c::setKeepType(0);
daArrow_c::setKeepType(daArrow_c::TYPE_NORMAL);
#endif
u32 tbl;
-6
View File
@@ -108,9 +108,3 @@ JntHit_c* JntHit_create(J3DModel* model, __jnt_hit_data_c* jntHitData, s16 hitDa
return NULL;
}
/* 8006286C-800628B4 .text __dt__12JntHit_HIO_cFv */
JntHit_HIO_c::~JntHit_HIO_c() {
/* Nonmatching */
}