d_lib progress, d_a_rd documentation progress

This commit is contained in:
LagoLunatic
2023-11-22 19:31:49 -05:00
parent 469f243030
commit 0495b56636
5 changed files with 418 additions and 187 deletions
+49 -13
View File
@@ -17,10 +17,10 @@ public:
/* 0x2D */ u8 m2D[0x30 - 0x2D];
/* 0x30 */ f32 m30;
/* 0x34 */ f32 m34;
/* 0x38 */ f32 m38;
/* 0x38 */ f32 mCryRadius;
/* 0x3C */ f32 mAttackRadius;
/* 0x40 */ s16 m40;
/* 0x42 */ s16 m42;
/* 0x42 */ s16 mCrySpreadAngle;
/* 0x44 */ s16 mAttackSpreadAngle;
/* 0x46 */ s16 m46;
/* 0x48 */ s16 m48;
@@ -36,7 +36,7 @@ public:
/* 0x60 */ f32 m60;
/* 0x64 */ f32 m64;
/* 0x68 */ f32 m68;
/* 0x6C */ f32 m6C;
/* 0x6C */ f32 mReturnWalkSpeed;
/* 0x70 */ f32 m70;
/* 0x74 */ f32 m74;
/* 0x78 */ s16 m78;
@@ -67,6 +67,42 @@ public:
MODE_NULL,
};
enum BckIdx {
BckIdx_TACHIP = 0x0,
BckIdx_SUWARIP = 0x1,
BckIdx_WALK2ATACK = 0x2,
BckIdx_ATACK = 0x3,
BckIdx_ATACK2WALK = 0x4,
BckIdx_WALK = 0x5,
BckIdx_DAMAGE = 0x6,
BckIdx_DEAD = 0x7,
BckIdx_TATSU = 0x8,
BckIdx_SUWARU = 0x9,
BckIdx_KANOKEP = 0xA,
BckIdx_BEAM_HIT = 0xB,
BckIdx_BEAM = 0xC,
BckIdx_BEAM_END = 0xD,
};
enum AnmPrm {
AnmPrm_TACHIP0 = 0x0,
AnmPrm_TACHIP1 = 0x1,
AnmPrm_SUWARIP = 0x2,
AnmPrm_WALK2ATACK = 0x3,
AnmPrm_ATACK = 0x4,
AnmPrm_ATACK2WALK = 0x5,
AnmPrm_WALK = 0x6,
AnmPrm_DAMAGE = 0x7,
AnmPrm_DEAD = 0x8,
AnmPrm_TATSU = 0x9,
AnmPrm_SUWARU = 0xA,
AnmPrm_KANOKEP = 0xB,
AnmPrm_BEAM_HIT = 0xC,
AnmPrm_BEAM = 0xD,
AnmPrm_BEAM_END = 0xE,
AnmPrm_NULL,
};
typedef void (daRd_c::*ModeFunc)();
static const u32 m_heapsize;
@@ -74,7 +110,7 @@ public:
static const dCcD_SrcCyl m_cyl_src;
daRd_c() {}
bool isAnm(s8 idx) { return m6D9 == idx; }
bool isAnm(s8 idx) { return mAnmPrmIdx == idx; }
bool isIkari() { return mbIkari; }
void modeProcInit(int newMode) { modeProc(PROC_INIT, newMode); }
void offIkari() { mbIkari = false; }
@@ -132,9 +168,9 @@ public:
/* 0x2AC */ int mMode;
/* 0x2B0 */ u8 m2B0[0x2B4 - 0x2B0];
/* 0x2B4 */ int m2B4;
/* 0x2B4 */ int mWhichIdleAnm;
/* 0x2B8 */ int mAreaRadius;
/* 0x2BC */ int m2BC;
/* 0x2BC */ int mChecksSwitch;
/* 0x2C0 */ int mSwNo;
/* 0x2C4 */ u8 m2C4;
/* 0x2C5 */ u8 mHitType; // TODO enum
@@ -143,8 +179,8 @@ public:
/* 0x2D0 */ mDoExt_McaMorf* mpMorf;
/* 0x2D4 */ mDoExt_btkAnm mBtkAnm;
/* 0x2E8 */ mDoExt_brkAnm mBrkAnm;
/* 0x300 */ cXyz m300;
/* 0x30C */ s16 m30C;
/* 0x300 */ cXyz mSpawnPos;
/* 0x30C */ s16 mSpawnAngle;
/* 0x30E */ u8 m30E[0x310 - 0x30E];
/* 0x310 */ int mTimer1;
/* 0x314 */ int mTimer2;
@@ -157,10 +193,10 @@ public:
/* 0x690 */ s32 mShadowId;
/* 0x694 */ mDoExt_invisibleModel mInvisModel;
/* 0x69C */ dNpc_JntCtrl_c mJntCtrl;
/* 0x6D0 */ u32 m6D0;
/* 0x6D0 */ u32 mCorpseID;
/* 0x6D4 */ int m6D4;
/* 0x6D8 */ s8 m6D8;
/* 0x6D9 */ s8 m6D9;
/* 0x6D8 */ s8 mBckIdx;
/* 0x6D9 */ s8 mAnmPrmIdx;
/* 0x6DA */ s8 m6DA;
/* 0x6DB */ s8 m6DB;
/* 0x6DC */ s8 m6DC;
@@ -168,14 +204,14 @@ public:
/* 0x6E0 */ enemyice mEnemyIce;
/* 0xA98 */ enemyfire mEnemyFire;
/* 0xCC0 */ JntHit_c* mpJntHit;
/* 0xCC4 */ cXyz mAttPos;
/* 0xCC4 */ cXyz mTargetPos;
/* 0xCD0 */ cXyz mRdEyePos;
/* 0xCDC */ s16 mMaxHeadTurnVel;
/* 0xCDE */ u8 mCDE[0xCE0 - 0xCDE];
/* 0xCE0 */ int mCE0;
/* 0xCE4 */ int mCE4;
/* 0xCE8 */ Mtx mCE8;
/* 0xD18 */ s16 mD18;
/* 0xD18 */ s16 mHeadAngle;
/* 0xD1A */ s16 mD1A;
/* 0xD1C */ s16 mD1C;
/* 0xD1E */ s16 mD1E;
+26 -24
View File
@@ -10,6 +10,8 @@
#include "m_Do/m_Do_ext.h"
#include "d/d_path.h"
extern Quaternion ZeroQuat;
class STControl {
public:
STControl(s16, s16, s16, s16, f32, f32, s16, s16);
@@ -17,48 +19,47 @@ public:
void init();
void Xinit();
void Yinit();
void getValueStick();
void getAngleStick();
virtual f32 getValueStick();
virtual s16 getAngleStick();
bool checkTrigger();
bool checkLeftTrigger();
bool checkRightTrigger();
bool checkUpTrigger();
bool checkDownTrigger();
/* 0x00 */ void* vtbl;
/* 0x04 */ f32 field_0x04;
/* 0x08 */ f32 field_0x08;
/* 0x0C */ u8 field_0x0c;
/* 0x0D */ u8 field_0x0d;
/* 0x0E */ u16 field_0x0e;
/* 0x10 */ u16 field_0x10;
/* 0x12 */ u16 field_0x12;
/* 0x0E */ s16 field_0x0e;
/* 0x10 */ s16 field_0x10;
/* 0x12 */ s16 field_0x12;
/* 0x14 */ s16 field_0x14;
/* 0x16 */ s16 field_0x16;
/* 0x18 */ u16 field_0x18;
/* 0x1A */ u16 field_0x1a;
/* 0x1C */ u16 field_0x1c;
/* 0x1E */ u16 field_0x1e;
/* 0x20 */ u16 field_0x20;
/* 0x22 */ u16 field_0x22;
/* 0x18 */ s16 field_0x18;
/* 0x1A */ s16 field_0x1a;
/* 0x1C */ s16 field_0x1c;
/* 0x1E */ s16 field_0x1e;
/* 0x20 */ s16 field_0x20;
/* 0x22 */ s16 field_0x22;
/* 0x24 */ s16 field_0x24;
/* 0x26 */ s16 field_0x26;
};
class CSTControl {
class CSTControl : public STControl {
public:
void getValueStick();
void getAngleStick();
virtual f32 getValueStick();
virtual s16 getAngleStick();
};
class dLib_anm_prm_c {
public:
/* 0x00 */ s8 field_0x00;
/* 0x01 */ s8 field_0x01;
/* 0x00 */ s8 mBckIdx;
/* 0x01 */ s8 mNextPrmIdx;
/* 0x02 */ s16 field_0x02;
/* 0x04 */ f32 field_0x04;
/* 0x08 */ f32 field_0x08;
/* 0x0C */ u32 loopMode;
/* 0x04 */ f32 mMorf;
/* 0x08 */ f32 mPlaySpeed;
/* 0x0C */ int mLoopMode;
};
class dLib_circle_path_c {
@@ -76,14 +77,15 @@ class dLib_wave_c;
class dLib_anm_idx_c;
void dLib_setCirclePath(dLib_circle_path_c*);
void dLib_getWaterY(cXyz&, dBgS_ObjAcch&);
f32 dLib_getWaterY(cXyz& pos, dBgS_ObjAcch& acch);
void dLib_waveRot(Vec*, f32, dLib_wave_c*);
void dLib_debugDrawAxis(Mtx&, f32);
void dLib_debugDrawFan(cXyz&, s16, s16, f32, const GXColor&);
void dLib_debugDrawAxis(Mtx& mtx, f32 length);
void dLib_debugDrawFan(cXyz& center, s16 angleY, s16 fanSpreadAngle, f32 radius, const GXColor& color);
bool dLib_brkInit(J3DModelData*, mDoExt_brkAnm*, const char*, int);
bool dLib_btkInit(J3DModelData*, mDoExt_btkAnm*, const char*, int);
void dLib_setAnm(const char*, mDoExt_McaMorf*, s8*, s8*, s8*, const dLib_anm_idx_c*, const dLib_anm_prm_c*, bool);
void dLib_bcks_setAnm(const char*, mDoExt_McaMorf*, s8*, s8*, s8*, const int*, const dLib_anm_prm_c*, bool);
void dLib_bcks_setAnm(const char* arcName, mDoExt_McaMorf* morf, s8* pBckIdx, s8* pPrmIdx,
s8* param_5, const int* bcksTbl, const dLib_anm_prm_c* anmPrmTbl, bool param_8);
void dLib_scaleAnime(f32* o_value, f32* p_targets, int targetNum, int* p_targetIdx, f32 scale, f32 maxStep, f32 minStep);
void dLib_getPosFromMtx(f32(*)[4], cXyz*);
bool dLib_pathInfo(dPath**, u8);
+4 -3
View File
@@ -10,9 +10,9 @@
#include "d/d_kankyo.h"
#include "d/d_procname.h"
#include "d/d_cc_d.h"
#include "d/d_lib.h"
#include "m_do/m_Do_mtx.h"
#include "m_Do/m_Do_ext.h"
#include "dolphin/types.h"
/*** HIO ***/
@@ -77,6 +77,8 @@ public:
// TODO: insert missing members
Quaternion mQuatRotation;
dCcD_Stts mColStatus;
dCcD_Cps mCapsuleCol;
};
@@ -245,8 +247,7 @@ s32 daMozo_c::CreateInit() {
}
}
// TODO: find out where d_lib::ZeroQuat lives
//mQuatRotation = ZeroQuat;
mQuatRotation = ZeroQuat;
fopAcM_setCullSizeBox(this, -1000.f, -1000.f, -1000.f, 1000.0f, 1000.0f, 1000.0f);
mCullMtx = mAnimMorf->getModel()->getBaseTRMtx();
+250 -127
View File
@@ -100,10 +100,10 @@ daRd_HIO_c::daRd_HIO_c() {
m2C = 0x0;
m30 = 650.0f;
m34 = 650.0f;
m38 = 500.0f;
mCryRadius = 500.0f;
mAttackRadius = 125.0f;
m40 = 0x2000;
m42 = 0x1B58;
mCrySpreadAngle = 0x1B58;
mAttackSpreadAngle = 0x6000;
m46 = 0xA;
m48 = 0x5;
@@ -115,7 +115,7 @@ daRd_HIO_c::daRd_HIO_c() {
m60 = 50.0f;
m64 = 30.0f;
m68 = 1.8;
m6C = 2.0f;
mReturnWalkSpeed = 2.0f;
m70 = 1.25;
m74 = 0.9;
m50 = 0x28;
@@ -141,7 +141,7 @@ daRd_HIO_c::daRd_HIO_c() {
}
/* 0000027C-000002A8 .text searchNeadDeadRd_CB__FPvPv */
static fopAc_ac_c* searchNeadDeadRd_CB(void* i_actor, void* i_this) {
static void* searchNeadDeadRd_CB(void* i_actor, void* i_this) {
return static_cast<daRd_c*>(i_this)->_searchNearDeadRd(static_cast<fopAc_ac_c*>(i_actor));
}
@@ -179,7 +179,7 @@ BOOL daRd_c::_nodeControl(J3DNode* node, J3DModel* model) {
if (mJntCtrl.getHeadJntNum() == jntNo) {
static cXyz l_offsetAttPos(0.0f, 0.0f, 0.0f);
static cXyz l_offsetEyePos(24.0f, -16.0f, 0.0f);
mDoMtx_stack_c::multVec(&l_offsetAttPos, &mAttPos);
mDoMtx_stack_c::multVec(&l_offsetAttPos, &mTargetPos);
mDoMtx_stack_c::XrotM(mJntCtrl.getHead_y());
mDoMtx_stack_c::ZrotM(mJntCtrl.getHead_x());
mDoMtx_stack_c::multVec(&l_offsetEyePos, &mRdEyePos);
@@ -226,7 +226,7 @@ BOOL daRd_c::_nodeHeadControl(J3DNode* node, J3DModel* model) {
csXyz angle;
mDoMtx_inverseTranspose(mDoMtx_stack_c::get(), mtx);
mDoMtx_MtxToRot(mtx, &angle);
mD18 = angle.y;
mHeadAngle = angle.y;
}
/* 000006A0-000006C0 .text createHeap_CB__FP10fopAc_ac_c */
@@ -263,7 +263,7 @@ BOOL daRd_c::_createHeap() {
return FALSE;
}
modelData->getJointNodePointer(0x0C)->setCallBack(nodeHeadControl_CB);
modelData->getJointNodePointer(0x0C)->setCallBack(nodeHeadControl_CB); // ree_atama_1
J3DAnmTevRegKey* brk = static_cast<J3DAnmTevRegKey*>(dComIfG_getObjectRes(m_arc_name, RD_BRK_NML));
JUT_ASSERT(550, brk != 0);
@@ -442,7 +442,7 @@ bool daRd_c::checkPlayerInAttack() {
/* 00000A38-00000AA0 .text checkPlayerInCry__6daRd_cFv */
bool daRd_c::checkPlayerInCry() {
return dLib_checkActorInFan(current.pos, dComIfGp_getLinkPlayer(), mD18, l_HIO.m42, l_HIO.m38, 100.0f);
return dLib_checkActorInFan(current.pos, dComIfGp_getLinkPlayer(), mHeadAngle, l_HIO.mCrySpreadAngle, l_HIO.mCryRadius, 100.0f);
}
/* 00000AA0-00000D78 .text lookBack__6daRd_cFv */
@@ -453,7 +453,7 @@ void daRd_c::lookBack() {
mJntCtrl.clrTrn();
mJntCtrl.offHeadLock();
mJntCtrl.offBackBoneLock();
mAttPos = player->getHeadTopPos();
mTargetPos = player->getHeadTopPos();
} else {
switch (mMode) {
case MODE_WAIT:
@@ -476,10 +476,10 @@ void daRd_c::lookBack() {
break;
}
switch (m6D9) {
case 0x2:
case 0x9:
case 0xA:
switch (mAnmPrmIdx) {
case AnmPrm_SUWARIP:
case AnmPrm_TATSU:
case AnmPrm_SUWARU:
r29 = false;
mJntCtrl.clrTrn();
mJntCtrl.onHeadLock();
@@ -489,25 +489,25 @@ void daRd_c::lookBack() {
switch (mMode) {
case MODE_CRY:
if (dLib_checkActorInFan(current.pos, player, shape_angle.y, l_HIO.m42, 150.0f, 100.0f)) {
if (dLib_checkActorInFan(current.pos, player, shape_angle.y, l_HIO.mCrySpreadAngle, 150.0f, 100.0f)) {
mJntCtrl.clrTrn();
mJntCtrl.onHeadLock();
mJntCtrl.onBackBoneLock();
}
mAttPos = player->getHeadTopPos();
mTargetPos = player->getHeadTopPos();
break;
case MODE_RETURN:
if (dLib_checkActorInCircle(m300, this, 100.0f, 1000.0f)) {
if (dLib_checkActorInCircle(mSpawnPos, this, 100.0f, 1000.0f)) {
mJntCtrl.clrTrn();
mJntCtrl.onHeadLock();
mJntCtrl.onBackBoneLock();
}
mAttPos = m300;
mTargetPos = mSpawnPos;
break;
case MODE_SILENT_PRAY:
break;
default:
mAttPos = player->getHeadTopPos();
mTargetPos = player->getHeadTopPos();
break;
}
}
@@ -518,7 +518,7 @@ void daRd_c::lookBack() {
mMaxHeadTurnVel = 0;
}
mJntCtrl.lookAtTarget(&shape_angle.y, &mAttPos, mRdEyePos, shape_angle.y, mMaxHeadTurnVel, r29);
mJntCtrl.lookAtTarget(&shape_angle.y, &mTargetPos, mRdEyePos, shape_angle.y, mMaxHeadTurnVel, r29);
}
/* 00000D78-00001650 .text checkTgHit__6daRd_cFv */
@@ -548,7 +548,6 @@ bool daRd_c::checkTgHit() {
return false;
}
switch (hitObj->GetAtType()) {
case AT_TYPE_SWORD:
case AT_TYPE_MACHETE:
@@ -629,7 +628,7 @@ bool daRd_c::checkTgHit() {
break;
case AT_TYPE_NORMAL_ARROW:
mHitType = 5;
if (!dLib_checkActorInCircle(current.pos, player, l_HIO.m38, 1000.0f)) {
if (!dLib_checkActorInCircle(current.pos, player, l_HIO.mCryRadius, 1000.0f)) {
fopAcM_seStart(this, JA_SE_LK_ARROW_HIT, 0x44);
mCE0 = 40;
r29 = false;
@@ -708,7 +707,7 @@ void daRd_c::setCollision() {
mCyl.OnCoSPrmBit(0x02);
}
if (m6D9 == 2) {
if (isAnm(AnmPrm_SUWARIP)) {
mCyl.SetR(80.0f + g_regHIO.mChild[8].mFloatRegs[1]);
mCyl.SetH(170.0f + g_regHIO.mChild[8].mFloatRegs[0]);
} else {
@@ -722,7 +721,7 @@ void daRd_c::setCollision() {
/* 000017D0-0000180C .text setIceCollision__6daRd_cFv */
void daRd_c::setIceCollision() {
if (m6D9 == 2) {
if (isAnm(AnmPrm_SUWARIP)) {
mEnemyIce.mWallRadius = 50.0f;
mEnemyIce.mCylHeight = 170.0f;
} else {
@@ -781,9 +780,12 @@ void daRd_c::modeWait() {
fopAc_ac_c* player = dComIfGp_getLinkPlayer();
BOOL isOto = fopAcM_otoCheck(this, mAreaRadius);
if (!isLinkControl()) {
if (dLib_checkActorInCircle(m300, this, mAreaRadius, 1000.0f)) {
if (dLib_checkActorInCircle(m300, player, mAreaRadius, 100.0f)) {
if ((dLib_checkActorInCircle(m300, player, mAreaRadius, 100.0f) && player->speedF > 10.0f + g_regHIO.mChild[12].mFloatRegs[4]) ||
if (dLib_checkActorInCircle(mSpawnPos, this, mAreaRadius, 1000.0f)) {
// The ReDead will only wake up if the player is in a 200-unit-tall cylinder around its spawn point.
// Bug: If the ReDead spawned high up in the air, its spawn point will remain there even after the ReDead
// itself has fallen down to ground level. This means it will not be able to notice the player properly.
if (dLib_checkActorInCircle(mSpawnPos, player, mAreaRadius, 100.0f)) {
if ((dLib_checkActorInCircle(mSpawnPos, player, mAreaRadius, 100.0f) && player->speedF > 10.0f + g_regHIO.mChild[12].mFloatRegs[4]) ||
isOto ||
dLib_checkActorInFan(current.pos, player, shape_angle.y, l_HIO.m40, l_HIO.m34, 100.0f)
) {
@@ -794,24 +796,24 @@ void daRd_c::modeWait() {
}
}
if (dLib_checkActorInCircle(m300, this, 100.0f, 1000.0f)) {
cLib_addCalcAngleS2(&shape_angle.y, m30C, 0x4, 0x200);
if (cLib_distanceAngleS(shape_angle.y, m30C) <= 0x200) {
shape_angle.y = m30C;
if (m2B4 == 1 && !isAnm(2)) {
setAnm(0xA, false);
if (dLib_checkActorInCircle(mSpawnPos, this, 100.0f, 1000.0f)) {
cLib_addCalcAngleS2(&shape_angle.y, mSpawnAngle, 0x4, 0x200);
if (cLib_distanceAngleS(shape_angle.y, mSpawnAngle) <= 0x200) {
shape_angle.y = mSpawnAngle;
if (mWhichIdleAnm == 1 && !isAnm(AnmPrm_SUWARIP)) {
setAnm(AnmPrm_SUWARU, false);
}
if (m2B4 == 0) {
setAnm(0x1, false);
if (mWhichIdleAnm == 0) {
setAnm(AnmPrm_TACHIP1, false);
}
}
} else if (!dLib_checkActorInCircle(m300, this, mAreaRadius, 1000.0f) ||
!dLib_checkActorInCircle(m300, player, mAreaRadius, 100.0f)
} else if (!dLib_checkActorInCircle(mSpawnPos, this, mAreaRadius, 1000.0f) ||
!dLib_checkActorInCircle(mSpawnPos, player, mAreaRadius, 100.0f)
) {
modeProcInit(MODE_RETURN);
return;
}
if (!isLinkControl() && checkPlayerInAttack() && isAnm(1)) {
if (!isLinkControl() && checkPlayerInAttack() && isAnm(AnmPrm_TACHIP1)) {
modeProcInit(MODE_ATTACK);
}
}
@@ -819,7 +821,7 @@ void daRd_c::modeWait() {
/* 00001DDC-00001E68 .text modeDeathInit__6daRd_cFv */
void daRd_c::modeDeathInit() {
fopAcM_monsSeStart(this, JA_SE_CV_RD_DIE, 0);
setAnm(8, false);
setAnm(AnmPrm_DEAD, false);
speedF = 0.0f;
mTimer1 = 10*30;
}
@@ -849,7 +851,7 @@ void daRd_c::modeDeath() {
/* 00001F14-00001F98 .text modeDamageInit__6daRd_cFv */
void daRd_c::modeDamageInit() {
fopAcM_monsSeStart(this, JA_SE_CV_RD_DAMAGE, 0);
setAnm(7, true);
setAnm(AnmPrm_DAMAGE, true);
speedF = 0.0f;
}
@@ -868,7 +870,7 @@ void daRd_c::modeDamage() {
return;
}
if (dLib_checkActorInCircle(m300, player, mAreaRadius, 100.0f)) {
if (dLib_checkActorInCircle(mSpawnPos, player, mAreaRadius, 100.0f)) {
modeProcInit(MODE_MOVE);
} else {
modeProcInit(MODE_WAIT);
@@ -877,8 +879,8 @@ void daRd_c::modeDamage() {
/* 00002084-000020EC .text modeParalysisInit__6daRd_cFv */
void daRd_c::modeParalysisInit() {
if (!isAnm(0xC) && !isAnm(0xD)) {
setAnm(0xC, false);
if (!isAnm(AnmPrm_BEAM_HIT) && !isAnm(AnmPrm_BEAM)) {
setAnm(AnmPrm_BEAM_HIT, false);
}
mTimer1 = l_HIO.mParalysisDuration;
speedF = 0.0f;
@@ -887,13 +889,13 @@ void daRd_c::modeParalysisInit() {
/* 000020EC-000021F0 .text modeParalysis__6daRd_cFv */
void daRd_c::modeParalysis() {
/* Nonmatching: isStop inline regalloc + checkTgHit() clrlwi. missing? */
if (isAnm(0xC) && mpMorf->isStop()) {
setAnm(0xD, false);
} else if (isAnm(0xD)) {
if (isAnm(AnmPrm_BEAM_HIT) && mpMorf->isStop()) {
setAnm(AnmPrm_BEAM, false);
} else if (isAnm(AnmPrm_BEAM)) {
if (cLib_calcTimer(&mTimer1) == 0) {
setAnm(0xE, false);
setAnm(AnmPrm_BEAM_END, false);
}
} else if (isAnm(0xE) && mpMorf->isStop()) {
} else if (isAnm(AnmPrm_BEAM_END) && mpMorf->isStop()) {
modeProcInit(MODE_WAIT);
}
@@ -904,24 +906,24 @@ void daRd_c::modeParalysis() {
/* 000021F0-0000223C .text modeMoveInit__6daRd_cFv */
void daRd_c::modeMoveInit() {
if (m2B4 == 1 && (m6D9 == 2 || m6D9 == 0xA)) {
setAnm(9, false);
if (mWhichIdleAnm == 1 && (isAnm(AnmPrm_SUWARIP) || isAnm(AnmPrm_SUWARU))) {
setAnm(AnmPrm_TATSU, false);
}
}
/* 0000223C-000024B0 .text modeMove__6daRd_cFv */
void daRd_c::modeMove() {
if (!checkTgHit() && !isAnm(9)) {
if (!checkTgHit() && !isAnm(AnmPrm_TATSU)) {
if (!isLinkControl() && checkPlayerInCry()) {
modeProcInit(MODE_CRY);
return;
}
daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer();
if (!dLib_checkActorInCircle(m300, this, mAreaRadius, 1000.0f) || !dLib_checkActorInCircle(m300, player, mAreaRadius, 100.0f)) {
if (!dLib_checkActorInCircle(mSpawnPos, this, mAreaRadius, 1000.0f) || !dLib_checkActorInCircle(mSpawnPos, player, mAreaRadius, 100.0f)) {
modeProcInit(MODE_RETURN);
return;
}
int angle = cLib_distanceAngleS(fopAcM_searchPlayerAngleY(this), mD18);
int angle = cLib_distanceAngleS(fopAcM_searchPlayerAngleY(this), mHeadAngle);
if (angle < 0x50) {
f32 dist = fopAcM_searchPlayerDistanceXZ(this);
f32 temp = (dist / 100.0f) + g_regHIO.mChild[12].mFloatRegs[3];
@@ -940,9 +942,9 @@ void daRd_c::modeMove() {
cLib_addCalc2(&speedF, 0.0f, 0.1f, 0.1f + g_regHIO.mChild[12].mFloatRegs[0]);
}
if (speedF < 0.1f) {
setAnm(1, false);
setAnm(AnmPrm_TACHIP1, false);
} else {
setAnm(6, false);
setAnm(AnmPrm_WALK, false);
}
if (!isLinkControl() && checkPlayerInAttack()) {
modeProcInit(MODE_ATTACK);
@@ -967,7 +969,7 @@ void daRd_c::modeCryInit() {
/* 000025A8-000028B8 .text modeCry__6daRd_cFv */
void daRd_c::modeCry() {
setAnm(6, false);
setAnm(AnmPrm_WALK, false);
f32 stickPosX = g_mDoCPd_cpadInfo[0].mMainStickPosX;
f32 stickPosY = g_mDoCPd_cpadInfo[0].mMainStickPosY;
@@ -1050,7 +1052,7 @@ void daRd_c::modeCryWait() {
if (g_dComIfG_gameInfo.play.getEvent().runCheck()) {
mTimer1 = 60;
mTimer2 = 45;
} else if (m6D9 == 6) {
} else if (isAnm(AnmPrm_WALK)) {
if (cLib_calcTimer(&mTimer1) == 0) {
modeProcInit(MODE_MOVE);
} else if (cLib_calcTimer(&mTimer2) == 0 && checkPlayerInAttack()) {
@@ -1065,7 +1067,7 @@ void daRd_c::modeAttackInit() {
mTimer1 = l_HIO.m52;
mBreakFreeCounter = l_HIO.m50;
mTimer2 = 30;
setAnm(6, false);
setAnm(AnmPrm_WALK, false);
speedF = 0.0f;
}
@@ -1084,7 +1086,7 @@ void daRd_c::modeAttack() {
f32 stickPosY = g_mDoCPd_cpadInfo[0].mMainStickPosY;
if (mEvtInfo.checkCommandDemoAccrpt()) {
daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer();
if (m6D9 == 4) {
if (isAnm(AnmPrm_ATACK)) {
f32 frame = player->getBaseAnimeFrame();
mpMorf->setFrame(frame);
cLib_addCalcAngleS2(&shape_angle.y, player->shape_angle.y, 0x4, 0x2000);
@@ -1098,9 +1100,9 @@ void daRd_c::modeAttack() {
return;
}
f32 dist = fopAcM_searchPlayerDistanceXZ(this);
if (dist <= 50.0f + g_regHIO.mChild[12].mFloatRegs[5] && m6D9 != 4) {
if (dist <= 50.0f + g_regHIO.mChild[12].mFloatRegs[5] && !isAnm(AnmPrm_ATACK)) {
offIkari();
setAnm(3, false);
setAnm(AnmPrm_WALK2ATACK, false);
}
if (dist <= 20.0f + g_regHIO.mChild[12].mFloatRegs[2]) {
cLib_addCalcPosXZ2(&current.pos, player->current.pos, 0.3f, 1.0f);
@@ -1121,7 +1123,7 @@ void daRd_c::modeAttack() {
if (dComIfGs_getLife() == 0) {
dComIfGp_event_reset();
setAnm(5, false);
setAnm(AnmPrm_ATACK2WALK, false);
modeProcInit(MODE_WAIT);
return;
}
@@ -1148,7 +1150,7 @@ void daRd_c::modeAttack() {
if (cLib_calcTimer(&mTimer1) == 0 || mBreakFreeCounter < 0) {
dComIfGp_event_reset();
setAnm(5, false);
setAnm(AnmPrm_ATACK2WALK, false);
modeProcInit(MODE_CRY_WAIT);
}
} else if (!checkTgHit()) {
@@ -1166,18 +1168,18 @@ void daRd_c::modeReturn() {
return;
}
setAnm(6, false);
setAnm(AnmPrm_WALK, false);
if (dLib_checkActorInCircle(m300, this, 100.0f, 1000.0f)) {
if (dLib_checkActorInCircle(mSpawnPos, this, 100.0f, 1000.0f)) {
speedF = 0.0f;
cLib_addCalcAngleS2(&shape_angle.y, m30C, 0xA, 0x200);
if (cLib_distanceAngleS(shape_angle.y, m30C) <= 0x200) {
shape_angle.y = m30C;
cLib_addCalcAngleS2(&shape_angle.y, mSpawnAngle, 0xA, 0x200);
if (cLib_distanceAngleS(shape_angle.y, mSpawnAngle) <= 0x200) {
shape_angle.y = mSpawnAngle;
modeProcInit(MODE_WAIT);
return;
}
} else {
cLib_addCalc2(&speedF, l_HIO.m6C, 0.1f, 0.1f + g_regHIO.mChild[12].mFloatRegs[0]);
cLib_addCalc2(&speedF, l_HIO.mReturnWalkSpeed, 0.1f, 0.1f + g_regHIO.mChild[12].mFloatRegs[0]);
}
if (dComIfGp_evmng_startCheck("DEFAULT_RD_ATTACK")) {
@@ -1187,9 +1189,9 @@ void daRd_c::modeReturn() {
daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer();
BOOL isOto = fopAcM_otoCheck(this, mAreaRadius);
if (!isLinkControl()) {
if (dLib_checkActorInCircle(m300, this, mAreaRadius, 1000.0f)) {
if (dLib_checkActorInCircle(m300, player, mAreaRadius, 100.0f)) {
if ((dLib_checkActorInCircle(m300, player, mAreaRadius, 100.0f) && player->speedF > 10.0f + g_regHIO.mChild[12].mFloatRegs[4]) ||
if (dLib_checkActorInCircle(mSpawnPos, this, mAreaRadius, 1000.0f)) {
if (dLib_checkActorInCircle(mSpawnPos, player, mAreaRadius, 100.0f)) {
if ((dLib_checkActorInCircle(mSpawnPos, player, mAreaRadius, 100.0f) && player->speedF > 10.0f + g_regHIO.mChild[12].mFloatRegs[4]) ||
isOto ||
dLib_checkActorInFan(current.pos, player, shape_angle.y, l_HIO.m40, l_HIO.m34, 100.0f)
) {
@@ -1211,20 +1213,20 @@ void daRd_c::modeSilentPray() {
return;
}
setAnm(6, false);
setAnm(AnmPrm_WALK, false);
daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer();
fopAc_ac_c* dyingReDead;
if (fopAcM_SearchByID(m6D0, &dyingReDead)) {
mAttPos = dyingReDead->current.pos;
if (dLib_checkActorInCircle(mAttPos, this, 200.0f, 1000.0f)) {
setAnm(1, false);
fopAc_ac_c* corpse;
if (fopAcM_SearchByID(mCorpseID, &corpse)) {
mTargetPos = corpse->current.pos;
if (dLib_checkActorInCircle(mTargetPos, this, 200.0f, 1000.0f)) {
setAnm(AnmPrm_TACHIP1, false);
speedF = 0.0f;
} else {
cLib_addCalc2(&speedF, l_HIO.m6C, 0.1f, 0.1f + g_regHIO.mChild[12].mFloatRegs[0]);
cLib_addCalc2(&speedF, l_HIO.mReturnWalkSpeed, 0.1f, 0.1f + g_regHIO.mChild[12].mFloatRegs[0]);
}
} else if (!isLinkControl()) {
if (dLib_checkActorInCircle(m300, player, mAreaRadius, 100.0f)) {
if (dLib_checkActorInCircle(mSpawnPos, player, mAreaRadius, 100.0f)) {
modeProcInit(MODE_MOVE);
} else {
modeProcInit(MODE_WAIT);
@@ -1245,7 +1247,7 @@ void daRd_c::modeSilentPray() {
/* 00003400-00003428 .text modeSwWaitInit__6daRd_cFv */
void daRd_c::modeSwWaitInit() {
setAnm(0xB, false);
setAnm(AnmPrm_KANOKEP, false);
}
/* 00003428-00003480 .text modeSwWait__6daRd_cFv */
@@ -1257,12 +1259,12 @@ void daRd_c::modeSwWait() {
/* 00003480-00003514 .text modeKanokeInit__6daRd_cFv */
void daRd_c::modeKanokeInit() {
setAnm(0xB, false);
setAnm(AnmPrm_KANOKEP, false);
mTimer1 = 90;
cXyz offset(0.0f, 0.0f, 150.0f);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::YrotM(shape_angle.y);
mDoMtx_stack_c::multVec(&offset, &m300);
mDoMtx_stack_c::multVec(&offset, &mSpawnPos);
}
/* 00003514-0000355C .text modeKanoke__6daRd_cFv */
@@ -1428,7 +1430,7 @@ void daRd_c::setBtkAnm(s8 idx) {
}
/* 00003B3C-00003C48 .text setAnm__6daRd_cFScb */
void daRd_c::setAnm(s8 param_1, bool param_2) {
void daRd_c::setAnm(s8 anmIdx, bool param_2) {
static const int a_anm_bcks_tbl[] = {
RD_BCK_TACHIP,
RD_BCK_SUWARIP,
@@ -1446,44 +1448,164 @@ void daRd_c::setAnm(s8 param_1, bool param_2) {
RD_BCK_BEAM_END,
};
static const dLib_anm_prm_c a_anm_prm_tbl[] = {
{0x0, -1, 0, 8.0f, 1.0f, 2},
{0x0, -1, 0, 8.0f, 1.0f, 2},
{0x1, -1, 0, 8.0f, 1.0f, 2},
{0x2, 4, 0, 8.0f, 1.0f, 0},
{0x3, -1, 0, 8.0f, 1.0f, 2},
{0x4, 6, 0, 8.0f, 1.0f, 0},
{0x5, -1, 0, 8.0f, 1.0f, 2},
{0x6, 1, 0, 2.0f, 1.0f, 0},
{0x7, -1, 0, 2.0f, 1.0f, 0},
{0x8, 1, 0, 8.0f, 0.5f, 0},
{0x9, 2, 0, 8.0f, 0.5f, 0},
{0xA, -1, 0, 8.0f, 1.0f, 2},
{0xB, -1, 0, 2.0f, 1.0f, 0},
{0xC, -1, 0, 2.0f, 1.0f, 2},
{0xD, -1, 0, 2.0f, 1.0f, 0},
{
// AnmPrm_TACHIP0
/* mBckIdx */ BckIdx_TACHIP,
/* mNextPrmIdx */ -1,
/* field_0x02 */ 0,
/* mMorf */ 8.0f,
/* mPlaySpeed */ 1.0f,
/* mLoopMode */ J3DFrameCtrl::LOOP_REPEAT_e
},
{
// AnmPrm_TACHIP1
/* mBckIdx */ BckIdx_TACHIP,
/* mNextPrmIdx */ -1,
/* field_0x02 */ 0,
/* mMorf */ 8.0f,
/* mPlaySpeed */ 1.0f,
/* mLoopMode */ J3DFrameCtrl::LOOP_REPEAT_e
},
{
// AnmPrm_SUWARIP
/* mBckIdx */ BckIdx_SUWARIP,
/* mNextPrmIdx */ -1,
/* field_0x02 */ 0,
/* mMorf */ 8.0f,
/* mPlaySpeed */ 1.0f,
/* mLoopMode */ J3DFrameCtrl::LOOP_REPEAT_e
},
{
// AnmPrm_WALK2ATACK
/* mBckIdx */ BckIdx_WALK2ATACK,
/* mNextPrmIdx */ AnmPrm_ATACK,
/* field_0x02 */ 0,
/* mMorf */ 8.0f,
/* mPlaySpeed */ 1.0f,
/* mLoopMode */ J3DFrameCtrl::LOOP_ONCE_e
},
{
// AnmPrm_ATACK
/* mBckIdx */ BckIdx_ATACK,
/* mNextPrmIdx */ -1,
/* field_0x02 */ 0,
/* mMorf */ 8.0f,
/* mPlaySpeed */ 1.0f,
/* mLoopMode */ J3DFrameCtrl::LOOP_REPEAT_e
},
{
// AnmPrm_ATACK2WALK
/* mBckIdx */ BckIdx_ATACK2WALK,
/* mNextPrmIdx */ AnmPrm_WALK,
/* field_0x02 */ 0,
/* mMorf */ 8.0f,
/* mPlaySpeed */ 1.0f,
/* mLoopMode */ J3DFrameCtrl::LOOP_ONCE_e
},
{
// AnmPrm_WALK
/* mBckIdx */ BckIdx_WALK,
/* mNextPrmIdx */ -1,
/* field_0x02 */ 0,
/* mMorf */ 8.0f,
/* mPlaySpeed */ 1.0f,
/* mLoopMode */ J3DFrameCtrl::LOOP_REPEAT_e
},
{
// AnmPrm_DAMAGE
/* mBckIdx */ BckIdx_DAMAGE,
/* mNextPrmIdx */ AnmPrm_TACHIP1,
/* field_0x02 */ 0,
/* mMorf */ 2.0f,
/* mPlaySpeed */ 1.0f,
/* mLoopMode */ J3DFrameCtrl::LOOP_ONCE_e
},
{
// AnmPrm_DEAD
/* mBckIdx */ BckIdx_DEAD,
/* mNextPrmIdx */ -1,
/* field_0x02 */ 0,
/* mMorf */ 2.0f,
/* mPlaySpeed */ 1.0f,
/* mLoopMode */ J3DFrameCtrl::LOOP_ONCE_e
},
{
// AnmPrm_TATSU
/* mBckIdx */ BckIdx_TATSU,
/* mNextPrmIdx */ AnmPrm_TACHIP1,
/* field_0x02 */ 0,
/* mMorf */ 8.0f,
/* mPlaySpeed */ 0.5f,
/* mLoopMode */ J3DFrameCtrl::LOOP_ONCE_e
},
{
// AnmPrm_SUWARU
/* mBckIdx */ BckIdx_SUWARU,
/* mNextPrmIdx */ AnmPrm_SUWARIP,
/* field_0x02 */ 0,
/* mMorf */ 8.0f,
/* mPlaySpeed */ 0.5f,
/* mLoopMode */ J3DFrameCtrl::LOOP_ONCE_e
},
{
// AnmPrm_KANOKEP
/* mBckIdx */ BckIdx_KANOKEP,
/* mNextPrmIdx */ -1,
/* field_0x02 */ 0,
/* mMorf */ 8.0f,
/* mPlaySpeed */ 1.0f,
/* mLoopMode */ J3DFrameCtrl::LOOP_REPEAT_e
},
{
// AnmPrm_BEAM_HIT
/* mBckIdx */ BckIdx_BEAM_HIT,
/* mNextPrmIdx */ -1,
/* field_0x02 */ 0,
/* mMorf */ 2.0f,
/* mPlaySpeed */ 1.0f,
/* mLoopMode */ J3DFrameCtrl::LOOP_ONCE_e
},
{
// AnmPrm_BEAM
/* mBckIdx */ BckIdx_BEAM,
/* mNextPrmIdx */ -1,
/* field_0x02 */ 0,
/* mMorf */ 2.0f,
/* mPlaySpeed */ 1.0f,
/* mLoopMode */ J3DFrameCtrl::LOOP_REPEAT_e
},
{
// AnmPrm_BEAM_END
/* mBckIdx */ BckIdx_BEAM_END,
/* mNextPrmIdx */ -1,
/* field_0x02 */ 0,
/* mMorf */ 2.0f,
/* mPlaySpeed */ 1.0f,
/* mLoopMode */ J3DFrameCtrl::LOOP_ONCE_e
},
};
if (param_1 != 0xF) {
m6D9 = param_1;
if (anmIdx != AnmPrm_NULL) {
mAnmPrmIdx = anmIdx;
}
if (m6DA != m6D9) {
if (m6D9 == 0xC) {
if (m6DA != mAnmPrmIdx) {
if (isAnm(AnmPrm_BEAM_HIT)) {
setBrkAnm(0x1);
} else if (m6D9 == 0xD) {
} else if (isAnm(AnmPrm_BEAM)) {
setBrkAnm(0x2);
} else if (m6D9 == 0xE) {
} else if (isAnm(AnmPrm_BEAM_END)) {
setBrkAnm(0x3);
} else {
setBrkAnm(0x0);
}
}
if (m6D8 == 0xB || m6D8 == 0xC || m6D8 == 0xD) {
if (mBckIdx == RD_BCK_DAMAGE || mBckIdx == RD_BCK_DEAD || mBckIdx == RD_BCK_IKARI_SAMPLE) {
mBrkAnm.setFrame(mpMorf->getFrame());
}
dLib_bcks_setAnm(m_arc_name, mpMorf, &m6D8, &m6D9, &m6DA, a_anm_bcks_tbl, a_anm_prm_tbl, param_2);
dLib_bcks_setAnm(m_arc_name, mpMorf, &mBckIdx, &mAnmPrmIdx, &m6DA, a_anm_bcks_tbl, a_anm_prm_tbl, param_2);
}
/* 00003C48-000040A8 .text _execute__6daRd_cFv */
@@ -1503,9 +1625,9 @@ bool daRd_c::_execute() {
if (mMode != MODE_SILENT_PRAY && mMode != MODE_DEATH && mMode != MODE_DAMAGE &&
mMode != MODE_ATTACK && mMode != MODE_CRY && mMode != MODE_CRY_WAIT)
{
daRd_c* dyingReDead = (daRd_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)&searchNeadDeadRd_CB, this);
if (dyingReDead != NULL) {
m6D0 = fopAcM_GetID(dyingReDead);
daRd_c* corpse = (daRd_c*)fopAcIt_Judge(&searchNeadDeadRd_CB, this);
if (corpse != NULL) {
mCorpseID = fopAcM_GetID(corpse);
modeProcInit(MODE_SILENT_PRAY);
}
}
@@ -1564,7 +1686,7 @@ bool daRd_c::_execute() {
cLib_addCalc2(&mD38, 0.0f, 0.1f, l_HIO.m64);
}
if (isAnm(6)) {
if (isAnm(AnmPrm_WALK)) {
f32 temp = speedF * l_HIO.m70;
mpMorf->setPlaySpeed(temp < l_HIO.m74 ? l_HIO.m74 : temp);
if (mMode == MODE_ATTACK) {
@@ -1583,7 +1705,7 @@ bool daRd_c::_execute() {
mpMorf->calc();
enemy_fire(&mEnemyFire);
modeProc(PROC_EXEC, MODE_NULL);
setAnm(0xF, false);
setAnm(AnmPrm_NULL, false);
setBtkAnm(0x5);
g_env_light.settingTevStruct(0, &current.pos, &mTevStr);
@@ -1592,12 +1714,12 @@ bool daRd_c::_execute() {
/* 000040A8-000041A8 .text debugDraw__6daRd_cFv */
void daRd_c::debugDraw() {
cXyz temp = m300;
temp.y += 10.0f;
cXyz spawnPos = mSpawnPos;
spawnPos.y += 10.0f;
cXyz pos = current.pos;
pos.y += 10.0f;
(GXColor){0x00, 0xFF, 0x00, 0x80}; // Unused color, needed for the .rodata section to match.
dLib_debugDrawFan(pos, mD18, l_HIO.m42, l_HIO.m38, (GXColor){0xFF, 0xFF, 0x00, 0x80});
dLib_debugDrawFan(pos, mHeadAngle, l_HIO.mCrySpreadAngle, l_HIO.mCryRadius, (GXColor){0xFF, 0xFF, 0x00, 0x80});
dLib_debugDrawFan(pos, shape_angle.y, l_HIO.mAttackSpreadAngle, l_HIO.mAttackRadius, (GXColor){0xFF, 0x00, 0x00, 0x80});
dLib_debugDrawFan(pos, shape_angle.y, l_HIO.m40, l_HIO.m34, (GXColor){0xFF, 0x00, 0xFF, 0x80});
dLib_debugDrawAxis(mCE8, 50.0f);
@@ -1659,7 +1781,7 @@ void daRd_c::createInit() {
modelData->getJointNodePointer(0x08)->setCallBack(nodeControl_CB); // ree_mune_1
setBtkAnm(2);
if (m2BC == 0) {
if (mChecksSwitch == 0) {
modeProcInit(MODE_SW_WAIT);
cXyz offset(0.0f, 40.0f, 10.0f);
mDoMtx_stack_c::transS(current.pos);
@@ -1667,12 +1789,12 @@ void daRd_c::createInit() {
mDoMtx_stack_c::multVec(&offset, &current.pos);
} else {
modeProcInit(MODE_WAIT);
switch (m2B4) {
switch (mWhichIdleAnm) {
case 0:
setAnm(1, false);
setAnm(AnmPrm_TACHIP1, false);
break;
case 1:
setAnm(2, false);
setAnm(AnmPrm_SUWARIP, false);
break;
}
}
@@ -1712,14 +1834,15 @@ void daRd_c::createInit() {
mMaxHealth = l_HIO.m46;
mHealth = mMaxHealth;
m300 = current.pos;
m30C = shape_angle.y;
mSpawnPos = current.pos;
mSpawnAngle = shape_angle.y;
mGravity = -4.5f;
if (m2B4 == 0) {
// TODO: figure out if 1 and 2 actually drop different items
if (mWhichIdleAnm == 0) {
mItemTableIdx = dComIfGp_CharTbl()->GetNameIndex("Rdead1", 0);
}
if (m2B4 == 1) {
if (mWhichIdleAnm == 1) {
mItemTableIdx = dComIfGp_CharTbl()->GetNameIndex("Rdead2", 0);
}
}
@@ -1727,12 +1850,12 @@ void daRd_c::createInit() {
/* 000046A4-00004720 .text getArg__6daRd_cFv */
void daRd_c::getArg() {
u32 params = fopAcM_GetParam(this);
m2B4 = fopAcM_GetParamBit(params, 0x00, 1);
u8 param = fopAcM_GetParamBit(params, 0x01, 7);
s32 areaRadius = param;
m2BC = fopAcM_GetParamBit(params, 0x08, 8);
mWhichIdleAnm = fopAcM_GetParamBit(params, 0x00, 1);
u8 radiusParam = fopAcM_GetParamBit(params, 0x01, 7);
s32 areaRadius = radiusParam;
mChecksSwitch = fopAcM_GetParamBit(params, 0x08, 8);
mSwNo = fopAcM_GetParamBit(params, 0x18, 8);
if ((s32)param == 0x7F) {
if ((s32)radiusParam == 0x7F) {
areaRadius = 0;
}
mAreaRadius = l_HIO.m30 + areaRadius;
+89 -20
View File
@@ -5,8 +5,12 @@
#include "d/d_lib.h"
#include "d/d_com_inf_game.h"
#include "d/actor/d_a_sea.h"
#include "m_Do/m_Do_mtx.h"
#include "SSystem/SComponent/c_math.h"
#include "m_Do/m_Do_controller_pad.h"
Quaternion ZeroQuat = {0.0f, 0.0f, 0.0f, 1.0f};
/* 80057000-800570CC .text dLib_setCirclePath__FP18dLib_circle_path_c */
void dLib_setCirclePath(dLib_circle_path_c* path) {
@@ -22,8 +26,16 @@ void dLib_setCirclePath(dLib_circle_path_c* path) {
}
/* 800570CC-8005716C .text dLib_getWaterY__FR4cXyzR12dBgS_ObjAcch */
void dLib_getWaterY(cXyz&, dBgS_ObjAcch&) {
/* Nonmatching */
f32 dLib_getWaterY(cXyz& pos, dBgS_ObjAcch& acch) {
BOOL waterHit = acch.ChkWaterHit();
f32 waterHeight = waterHit ? acch.m_wtr.GetHeight() : -1e+09f;
if (daSea_ChkArea(pos.x, pos.z)) {
f32 seaHeight = daSea_calcWave(pos.x, pos.z);
if (!waterHit || seaHeight > waterHeight) {
return seaHeight;
}
}
return waterHit ? waterHeight : 0.0f;
}
/* 8005716C-80057368 .text dLib_waveRot__FP3VecfP11dLib_wave_c */
@@ -32,19 +44,52 @@ void dLib_waveRot(Vec*, f32, dLib_wave_c*) {
}
/* 80057368-8005746C .text dLib_debugDrawAxis__FRA3_A4_ff */
void dLib_debugDrawAxis(Mtx&, f32) {
/* Nonmatching */
void dLib_debugDrawAxis(Mtx& mtx, f32 length) {
cXyz r1_98(length, 0.0f, 0.0f);
cXyz r1_8c(0.0f, length, 0.0f);
cXyz r1_80(0.0f, 0.0f, length);
cXyz r1_74(0.0f, 0.0f, 0.0f);
cXyz r1_68(0.0f, 0.0f, 0.0f);
cXyz r1_5c(0.0f, 0.0f, 0.0f);
cXyz r1_50;
cXyz r1_4c;
cXyz r1_40;
cXyz r1_34;
cXyz r1_28;
cXyz r1_1c;
cXyz r1_14;
cXyz r1_08;
mDoMtx_stack_c::copy(mtx);
mDoMtx_stack_c::multVecZero(&r1_08);
mDoMtx_stack_c::multVec(&r1_98, &r1_50);
mDoMtx_stack_c::multVec(&r1_8c, &r1_40);
mDoMtx_stack_c::multVec(&r1_80, &r1_34);
mDoMtx_stack_c::multVec(&r1_74, &r1_28);
mDoMtx_stack_c::multVec(&r1_68, &r1_1c);
mDoMtx_stack_c::multVec(&r1_5c, &r1_14);
// The rest of this function may have been commented out for release builds.
}
/* 8005746C-80057510 .text dLib_debugDrawFan__FR4cXyzssfRC8_GXColor */
void dLib_debugDrawFan(cXyz&, s16, s16, f32, const GXColor&) {
/* Nonmatching */
void dLib_debugDrawFan(cXyz& center, s16 angleY, s16 fanSpreadAngle, f32 radius, const GXColor& color) {
int angle1 = angleY + fanSpreadAngle;
cXyz corner1(center);
corner1.z += cM_scos(angle1) * radius;
corner1.x += cM_ssin(angle1) * radius;
int angle2 = angleY - fanSpreadAngle;
cXyz corner2(center);
corner2.z += cM_scos(angle2) * radius;
corner2.x += cM_ssin(angle2) * radius;
// The rest of this function may have been commented out for release builds.
}
/* 80057510-800575E0 .text dLib_brkInit__FP12J3DModelDataP13mDoExt_brkAnmPCci */
bool dLib_brkInit(J3DModelData* modelData, mDoExt_brkAnm* anm, const char* arcName, int fileno) {
J3DAnmTevRegKey* brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(arcName, fileno);
JUT_ASSERT(0xae, brk != NULL);
JUT_ASSERT(0xae, brk != 0);
if (anm->init(modelData, brk, 1, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, false, 0) == 0)
return false;
return true;
@@ -53,20 +98,36 @@ bool dLib_brkInit(J3DModelData* modelData, mDoExt_brkAnm* anm, const char* arcNa
/* 800575E0-800576B0 .text dLib_btkInit__FP12J3DModelDataP13mDoExt_btkAnmPCci */
bool dLib_btkInit(J3DModelData* modelData, mDoExt_btkAnm* anm, const char* arcName, int fileno) {
J3DAnmTextureSRTKey* btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(arcName, fileno);
JUT_ASSERT(0xbb, btk != NULL);
JUT_ASSERT(0xbb, btk != 0);
if (anm->init(modelData, btk, 1, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, false, 0) == 0)
return false;
return true;
}
/* 800576B0-80057844 .text dLib_setAnm__FPCcP14mDoExt_McaMorfPScPScPScPC14dLib_anm_idx_cPC14dLib_anm_prm_cb */
void dLib_setAnm(const char*, mDoExt_McaMorf*, s8*, s8*, s8*, const dLib_anm_idx_c*, const dLib_anm_prm_c*, bool) {
void dLib_setAnm(const char* arcName, mDoExt_McaMorf* morf, s8*, s8*,
s8*, const dLib_anm_idx_c*, const dLib_anm_prm_c* anmPrmTbl, bool param_8)
{
/* Nonmatching */
}
/* 80057844-80057988 .text dLib_bcks_setAnm__FPCcP14mDoExt_McaMorfPScPScPScPCiPC14dLib_anm_prm_cb */
void dLib_bcks_setAnm(const char*, mDoExt_McaMorf*, s8*, s8*, s8*, const int*, const dLib_anm_prm_c*, bool) {
/* Nonmatching */
void dLib_bcks_setAnm(const char* arcName, mDoExt_McaMorf* morf, s8* pBckIdx, s8* pPrmIdx,
s8* param_5, const int* bcksTbl, const dLib_anm_prm_c* anmPrmTbl, bool param_8)
{
if ((*param_5 != *pPrmIdx && anmPrmTbl[*pPrmIdx].mBckIdx != -1) || param_8 == true) {
*pBckIdx = anmPrmTbl[*pPrmIdx].mBckIdx;
J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes(arcName, bcksTbl[*pBckIdx]);
morf->setAnm(bck, anmPrmTbl[*pPrmIdx].mLoopMode, anmPrmTbl[*pPrmIdx].mMorf, anmPrmTbl[*pPrmIdx].mPlaySpeed, 0.0f, -1.0f, NULL);
}
*param_5 = *pPrmIdx;
if (morf->isStop()) {
if (anmPrmTbl[*pPrmIdx].mNextPrmIdx != -1 && anmPrmTbl[*pPrmIdx].mLoopMode == J3DFrameCtrl::LOOP_ONCE_e) {
*pPrmIdx = anmPrmTbl[*pPrmIdx].mNextPrmIdx;
}
}
}
/* 80057988-80057A14 .text dLib_scaleAnime__FPfPfiPifff */
@@ -197,7 +258,15 @@ void STControl::setWaitParm(s16, s16, s16, s16, f32, f32, s16, s16) {
/* 80058274-800582B0 .text init__9STControlFv */
void STControl::init() {
/* Nonmatching */
field_0x0e = 0;
field_0x10 = 0;
field_0x0d = 0;
field_0x0c = 0;
field_0x22 = 0;
field_0x18 = field_0x12;
field_0x1a = field_0x12;
field_0x1e = field_0x1c;
field_0x20 = field_0x1c;
}
/* 800582B0-800582D8 .text Xinit__9STControlFv */
@@ -211,23 +280,23 @@ void STControl::Yinit() {
}
/* 80058300-80058310 .text getValueStick__9STControlFv */
void STControl::getValueStick() {
/* Nonmatching */
f32 STControl::getValueStick() {
return g_mDoCPd_cpadInfo[0].mMainStickValue;
}
/* 80058310-80058320 .text getAngleStick__9STControlFv */
void STControl::getAngleStick() {
/* Nonmatching */
s16 STControl::getAngleStick() {
return g_mDoCPd_cpadInfo[0].mMainStickAngle;
}
/* 80058320-80058330 .text getValueStick__10CSTControlFv */
void CSTControl::getValueStick() {
/* Nonmatching */
f32 CSTControl::getValueStick() {
return g_mDoCPd_cpadInfo[0].mCStickValue;
}
/* 80058330-80058340 .text getAngleStick__10CSTControlFv */
void CSTControl::getAngleStick() {
/* Nonmatching */
s16 CSTControl::getAngleStick() {
return g_mDoCPd_cpadInfo[0].mCStickAngle;
}
/* 80058340-800585D0 .text checkTrigger__9STControlFv */