summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLagoLunatic <LagoLunatic@users.noreply.github.com>2023-11-22 19:31:49 -0500
committerLagoLunatic <LagoLunatic@users.noreply.github.com>2023-11-22 19:31:49 -0500
commit0495b56636b971190e87e89cef7e7ea508fbb14c (patch)
treeecae6e9e04c36ed9b39868b2e3b48785b16b839b /src
parent469f243030912e02c7783384d5bfa58f432acabe (diff)
d_lib progress, d_a_rd documentation progress
Diffstat (limited to 'src')
-rw-r--r--src/d/actor/d_a_mozo.cpp7
-rw-r--r--src/d/actor/d_a_rd.cpp377
-rw-r--r--src/d/d_lib.cpp109
3 files changed, 343 insertions, 150 deletions
diff --git a/src/d/actor/d_a_mozo.cpp b/src/d/actor/d_a_mozo.cpp
index 2d4b4e10..45ce5701 100644
--- a/src/d/actor/d_a_mozo.cpp
+++ b/src/d/actor/d_a_mozo.cpp
@@ -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();
diff --git a/src/d/actor/d_a_rd.cpp b/src/d/actor/d_a_rd.cpp
index 30285bc7..5ced5a6b 100644
--- a/src/d/actor/d_a_rd.cpp
+++ b/src/d/actor/d_a_rd.cpp
@@ -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;
diff --git a/src/d/d_lib.cpp b/src/d/d_lib.cpp
index 542ae7fc..1dc96eee 100644
--- a/src/d/d_lib.cpp
+++ b/src/d/d_lib.cpp
@@ -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 */