Skip to content

Commit

Permalink
d_lib work
Browse files Browse the repository at this point in the history
  • Loading branch information
magcius committed Jul 24, 2024
1 parent 7e70d94 commit a904715
Show file tree
Hide file tree
Showing 2 changed files with 191 additions and 29 deletions.
8 changes: 4 additions & 4 deletions include/d/d_lib.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class STControl {
void Yinit();
virtual f32 getValueStick();
virtual s16 getAngleStick();
bool checkTrigger();
s32 checkTrigger();
bool checkLeftTrigger();
bool checkRightTrigger();
bool checkUpTrigger();
Expand Down Expand Up @@ -58,13 +58,13 @@ class CSTControl : public STControl {

class dLib_anm_idx_c {
public:
/* 0x00 */ int field_0x00;
/* 0x04 */ int field_0x04;
/* 0x00 */ int mBckIdx;
/* 0x04 */ int mSndIdx;
}; // Size: 0x08

class dLib_anm_prm_c {
public:
/* 0x00 */ s8 mBckIdx;
/* 0x00 */ s8 mAnmIdx;
/* 0x01 */ s8 mNextPrmIdx;
/* 0x02 */ s16 field_0x02;
/* 0x04 */ f32 mMorf;
Expand Down
212 changes: 187 additions & 25 deletions src/d/d_lib.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@

#include "d/d_lib.h"
#include "d/d_com_inf_game.h"
#include "d/d_s_play.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"
#include "SSystem/SComponent/c_math.h"

Quaternion ZeroQuat = {0.0f, 0.0f, 0.0f, 1.0f};

Expand Down Expand Up @@ -36,8 +37,25 @@ f32 dLib_getWaterY(cXyz& pos, dBgS_ObjAcch& acch) {
}

/* 8005716C-80057368 .text dLib_waveRot__FP3VecfP11dLib_wave_c */
void dLib_waveRot(Vec*, f32, dLib_wave_c*) {
/* Nonmatching */
void dLib_waveRot(Vec* pos, f32 sway, dLib_wave_c* inf) {
f32 pt_zn, pt_zp; // probably a fakematch? maybe an inline
f32 wave_zn = daSea_calcWave(pos->x, (pt_zn = pos->z - 300.0f));
f32 wave_zp = daSea_calcWave(pos->x, (pt_zp = pos->z + 300.0f));
s16 az = -cM_atan2s(wave_zp - wave_zn, pt_zp - pt_zn);

f32 pt_xn, pt_xp; // probably a fakematch? maybe an inline
f32 wave_xn = daSea_calcWave((pt_xn = pos->x - 300.0f), pos->z);
f32 wave_xp = daSea_calcWave((pt_xp = pos->x + 300.0f), pos->z);
s32 ax = cM_atan2s(wave_xp - wave_xn, pt_xp - pt_xn); // maybe a fakematch with the s32 here?

cLib_addCalcAngleS2(&inf->mAngX, az, 10, 0x200);
cLib_addCalcAngleS2(&inf->mAngZ, ax, 10, 0x200);
inf->mAnimX += 400;
inf->mAnimZ += 430;
f32 wave = sway + 150.0f + REG12_F(0);

inf->mRotX = inf->mAngX + wave * cM_ssin(inf->mAnimX);
inf->mRotZ = inf->mAngZ + wave * cM_scos(inf->mAnimZ);
}

/* 80057368-8005746C .text dLib_debugDrawAxis__FRA3_A4_ff */
Expand Down Expand Up @@ -101,25 +119,44 @@ bool dLib_btkInit(J3DModelData* modelData, mDoExt_btkAnm* anm, const char* arcNa
return true;
}

static void dummy() {
OSReport("bck != 0");
}

/* 800576B0-80057844 .text dLib_setAnm__FPCcP14mDoExt_McaMorfPScPScPScPC14dLib_anm_idx_cPC14dLib_anm_prm_cb */
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)
void dLib_setAnm(const char* arcName, mDoExt_McaMorf* morf, s8* pAnmIdx, s8* pPrmIdx,
s8* pOldPrmIdx, const dLib_anm_idx_c* anmIdxTbl, const dLib_anm_prm_c* anmPrmTbl, bool force)
{
/* Nonmatching */
if ((*pOldPrmIdx != *pPrmIdx && anmPrmTbl[*pPrmIdx].mAnmIdx != -1) || force == true) {
*pAnmIdx = anmPrmTbl[*pPrmIdx].mAnmIdx;
void* sound = NULL;
if (anmIdxTbl[*pAnmIdx].mSndIdx >= 0)
sound = dComIfG_getObjectRes(arcName, anmIdxTbl[*pAnmIdx].mSndIdx);
J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes(arcName, anmIdxTbl[*pAnmIdx].mBckIdx);
morf->setAnm(bck, anmPrmTbl[*pPrmIdx].mLoopMode, anmPrmTbl[*pPrmIdx].mMorf, anmPrmTbl[*pPrmIdx].mPlaySpeed, 0.0f, -1.0f, sound);
}

*pOldPrmIdx = *pPrmIdx;

if (morf->isStop()) {
if (anmPrmTbl[*pPrmIdx].mNextPrmIdx != -1 && anmPrmTbl[*pPrmIdx].mLoopMode == J3DFrameCtrl::LOOP_ONCE_e) {
*pPrmIdx = anmPrmTbl[*pPrmIdx].mNextPrmIdx;
}
}
}

/* 80057844-80057988 .text dLib_bcks_setAnm__FPCcP14mDoExt_McaMorfPScPScPScPCiPC14dLib_anm_prm_cb */
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_bcks_setAnm(const char* arcName, mDoExt_McaMorf* morf, s8* pAnmIdx, s8* pPrmIdx,
s8* pOldPrmIdx, const int* bcksTbl, const dLib_anm_prm_c* anmPrmTbl, bool force)
{
if ((*param_5 != *pPrmIdx && anmPrmTbl[*pPrmIdx].mBckIdx != -1) || param_8 == true) {
*pBckIdx = anmPrmTbl[*pPrmIdx].mBckIdx;
J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes(arcName, bcksTbl[*pBckIdx]);
if ((*pOldPrmIdx != *pPrmIdx && anmPrmTbl[*pPrmIdx].mAnmIdx != -1) || force == true) {
*pAnmIdx = anmPrmTbl[*pPrmIdx].mAnmIdx;
J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes(arcName, bcksTbl[*pAnmIdx]);
morf->setAnm(bck, anmPrmTbl[*pPrmIdx].mLoopMode, anmPrmTbl[*pPrmIdx].mMorf, anmPrmTbl[*pPrmIdx].mPlaySpeed, 0.0f, -1.0f, NULL);
}

*param_5 = *pPrmIdx;
*pOldPrmIdx = *pPrmIdx;

if (morf->isStop()) {
if (anmPrmTbl[*pPrmIdx].mNextPrmIdx != -1 && anmPrmTbl[*pPrmIdx].mLoopMode == J3DFrameCtrl::LOOP_ONCE_e) {
*pPrmIdx = anmPrmTbl[*pPrmIdx].mNextPrmIdx;
Expand Down Expand Up @@ -244,13 +281,21 @@ bool dLib_checkActorInFan(cXyz center, fopAc_ac_c* actor, s16 angleY, s16 fanSpr
}

/* 8005820C-80058250 .text __ct__9STControlFssssffss */
STControl::STControl(s16, s16, s16, s16, f32, f32, s16, s16) {
/* Nonmatching */
STControl::STControl(s16 a, s16 b, s16 c, s16 d, f32 e, f32 f, s16 g, s16 h) {
setWaitParm(a, b, c, d, e, f, g, h);
init();
}

/* 80058250-80058274 .text setWaitParm__9STControlFssssffss */
void STControl::setWaitParm(s16, s16, s16, s16, f32, f32, s16, s16) {
/* Nonmatching */
void STControl::setWaitParm(s16 a, s16 b, s16 c, s16 d, f32 e, f32 f, s16 g, s16 h) {
field_0x12 = a;
field_0x14 = b;
field_0x16 = c;
field_0x1c = d;
field_0x04 = e;
field_0x08 = f;
field_0x24 = g;
field_0x26 = h;
}

/* 80058274-800582B0 .text init__9STControlFv */
Expand All @@ -268,12 +313,18 @@ void STControl::init() {

/* 800582B0-800582D8 .text Xinit__9STControlFv */
void STControl::Xinit() {
/* Nonmatching */
field_0x0e = 0;
field_0x0c &= 0xFC;
field_0x18 = field_0x12;
field_0x1e = field_0x1c;
}

/* 800582D8-80058300 .text Yinit__9STControlFv */
void STControl::Yinit() {
/* Nonmatching */
field_0x10 = 0;
field_0x0c &= ~0x0C;
field_0x1a = field_0x12;
field_0x20 = field_0x1c;
}

/* 80058300-80058310 .text getValueStick__9STControlFv */
Expand All @@ -297,28 +348,139 @@ s16 CSTControl::getAngleStick() {
}

/* 80058340-800585D0 .text checkTrigger__9STControlFv */
bool STControl::checkTrigger() {
/* Nonmatching */
s32 STControl::checkTrigger() {
field_0x0d = field_0x0c;
f32 valueStick = getValueStick();
s16 angleStick = getAngleStick();
u8 newAngle = 0;
s16 iVar6 = (0x2000 - field_0x26) >> 1;
if (!cM3d_IsZero(valueStick)) {

if (angleStick < field_0x22 + -0x7000 + iVar6) {
newAngle |= 4;
} else if (angleStick < field_0x22 + -0x5000 - iVar6) {
newAngle |= 5;
} else if (angleStick < field_0x22 + -0x3000 + iVar6) {
newAngle |= 1;
} else if (angleStick < field_0x22 + -0x1000 - iVar6) {
newAngle |= 9;
} else if (angleStick < field_0x22 + 0x1000 + iVar6) {
newAngle |= 8;
} else if (angleStick < field_0x22 + 0x3000 - iVar6) {
newAngle |= 10;
} else if (angleStick < field_0x22 + 0x5000 + iVar6) {
newAngle |= 2;
} else if (angleStick < field_0x22 + 0x7000 - iVar6) {
newAngle |= 6;
} else {
newAngle |= 4;
}

if (valueStick >= field_0x04) {
field_0x0c = newAngle;
} else if (valueStick < field_0x08) {
field_0x0c = 0;
} else {
field_0x0c &= ~newAngle;
}

if (field_0x0c != field_0x0d) {
if (field_0x0c == 0) {
field_0x22 = 0;
} else if ((angleStick & 0x1FFF) > 0x1000) {
field_0x22 = field_0x24;
} else {
field_0x22 = -field_0x24;
}
}

if (!(field_0x0c & 0x03))
Xinit();
if (!(field_0x0c & 0x0C))
Yinit();
} else {
field_0x0c = 0;
Xinit();
Yinit();
}

if ((field_0x0d & field_0x0c & 0x03) != 0 && field_0x0e > 0)
field_0x0e--;
if ((field_0x0d & field_0x0c & 0x0C) != 0 && field_0x10 > 0)
field_0x10--;
return field_0x0c;
}

/* 800585D0-8005863C .text checkLeftTrigger__9STControlFv */
bool STControl::checkLeftTrigger() {
/* Nonmatching */
if (field_0x0e == 0 && (field_0x0c & 1)) {
field_0x0e = field_0x18;
if (field_0x1e == 0) {
field_0x18 -= field_0x16;
if (field_0x18 < field_0x14)
field_0x18 = field_0x14;
} else {
field_0x1e--;
}

return true;
}

return false;
}

/* 8005863C-800586A8 .text checkRightTrigger__9STControlFv */
bool STControl::checkRightTrigger() {
/* Nonmatching */
if (field_0x0e == 0 && (field_0x0c & 2)) {
field_0x0e = field_0x18;
if (field_0x1e == 0) {
field_0x18 -= field_0x16;
if (field_0x18 < field_0x14)
field_0x18 = field_0x14;
} else {
field_0x1e--;
}

return true;
}

return false;
}

/* 800586A8-80058714 .text checkUpTrigger__9STControlFv */
bool STControl::checkUpTrigger() {
/* Nonmatching */
if (field_0x10 == 0 && (field_0x0c & 4)) {
field_0x10 = field_0x1a;
if (field_0x20 == 0) {
field_0x1a -= field_0x16;
if (field_0x1a < field_0x14)
field_0x1a = field_0x14;
} else {
field_0x20--;
}

return true;
}

return false;
}

/* 80058714-80058780 .text checkDownTrigger__9STControlFv */
bool STControl::checkDownTrigger() {
/* Nonmatching */
if (field_0x10 == 0 && (field_0x0c & 8)) {
field_0x10 = field_0x1a;
if (field_0x20 == 0) {
field_0x1a -= field_0x16;
if (field_0x1a < field_0x14)
field_0x1a = field_0x14;
} else {
field_0x20--;
}

return true;
}

return false;
}

/* 80058780-80058834 .text dLib_getIplDaysFromSaveTime__Fv */
Expand Down

0 comments on commit a904715

Please sign in to comment.