alink_grab done (#2234)

* work on alink grab

* some grab work

* grab almost done

* finish alink grab

* alink_wolf mostly done

* fix cLib_minMaxLimit

* alink guard mostly done

* extract some embedded assets

* extract grass data. wip, alignment wrong
This commit is contained in:
TakaRikka
2024-11-03 03:47:23 -08:00
committed by GitHub
parent 426e64d26b
commit 52f299456c
36 changed files with 5015 additions and 8034 deletions
+1 -22
View File
@@ -52,28 +52,7 @@ inline T cLib_checkBit(T value, T bit) {
template <typename T>
inline T cLib_minMaxLimit(T val, T min, T max) {
return (T)((T)val < (T)min ? (T)min : ((T)val > (T)max ? (T)max : (T)val));
}
// fake function, replace usages with cLib_minMaxLimit when possible
template <typename T>
inline T cLib_minMaxLimit2(T val, T min, T max) {
T ret;
T var_r30;
if (val < min) {
ret = min;
} else {
if (val > max) {
var_r30 = max;
} else {
var_r30 = val;
}
ret = var_r30;
}
return (T)ret;
return (T)(val < min ? min : (val > max ? max : val));
}
template <typename T>
+23 -36
View File
@@ -133,14 +133,13 @@ public:
/* 800CFCB8 */ ~daAlink_footData_c();
/* 800CFCF4 */ daAlink_footData_c();
/* 0x00 */ u8 field_0x00[2];
/* 0x02 */ u16 field_0x2;
/* 0x04 */ u16 field_0x4;
/* 0x06 */ u16 field_0x6;
/* 0x00 */ u8 field_0x0;
/* 0x01 */ u8 field_0x1;
/* 0x02 */ s16 field_0x2;
/* 0x04 */ s16 field_0x4;
/* 0x06 */ s16 field_0x6;
/* 0x08 */ cXyz field_0x8;
/* 0x14 */ Mtx field_0x14;
/* 0x44 */ Mtx field_0x44;
/* 0x74 */ Mtx field_0x74;
/* 0x14 */ Mtx field_0x14[3];
}; // Size: 0xA4
STATIC_ASSERT(sizeof(daAlink_footData_c) == 0xA4);
@@ -696,6 +695,8 @@ public:
FTANM_UNK_8F = 0x8F,
FTANM_UNK_90 = 0x90,
FTANM_UNK_91 = 0x91,
FTANM_UNK_92 = 0x92,
FTANM_UNK_93 = 0x93,
FTANM_UNK_95 = 0x95,
FTANM_UNK_96 = 0x96,
FTANM_UNK_97 = 0x97,
@@ -1333,7 +1334,7 @@ public:
/* 800A2710 */ void setArmMatrix();
/* 800A29DC */ void setFootMatrix();
/* 800A2C24 */ void setMatrixOffset(f32*, f32);
/* 800A2CE0 */ void setLegAngle(f32, daAlink_footData_c*, s16*, s16*, int);
/* 800A2CE0 */ int setLegAngle(f32, daAlink_footData_c*, s16*, s16*, int);
/* 800A3430 */ void footBgCheck();
/* 800A39B8 */ void handBgCheck();
/* 800A3C8C */ JKRHeap* setItemHeap();
@@ -1694,7 +1695,7 @@ public:
/* 800CE294 */ bool checkNoSubjectModeCamera();
/* 800CE468 */ bool acceptSubjectModeChange();
/* 800CE628 */ int checkSubjectAction();
/* 800CE728 */ void checkBodyAngleX(s16);
/* 800CE728 */ s16 checkBodyAngleX(s16);
/* 800CE8A0 */ BOOL setBodyAngleToCamera();
/* 800CEAF4 */ void setSubjectMode();
/* 800CEB58 */ BOOL subjectCancelTrigger();
@@ -2034,7 +2035,7 @@ public:
/* 800E794C */ s16 getChainStickAngleY(s16) const;
/* 800E7994 */ u8 checkChainEmphasys();
/* 800E79F8 */ BOOL searchFmChainPos();
/* 800E7AEC */ void setFmChainPosFromOut(fopAc_ac_c*, cXyz*, int);
/* 800E7AEC */ BOOL setFmChainPosFromOut(fopAc_ac_c*, cXyz*, int);
/* 800E7C30 */ int procFmChainUpInit();
/* 800E7CC0 */ int procFmChainUp();
/* 800E7DD8 */ int procFmChainStrongPullInit();
@@ -2044,13 +2045,13 @@ public:
/* 800E7EF4 */ BOOL wallGrabTrigger();
/* 800E7F18 */ BOOL wallGrabButton();
/* 800E7F3C */ int setPushPullKeepData(dBgW_Base::PushPullLabel, int);
/* 800E80A4 */ void checkPushPullTurnBlock();
/* 800E8148 */ void checkPullBehindWall();
/* 800E80A4 */ BOOL checkPushPullTurnBlock();
/* 800E8148 */ BOOL checkPullBehindWall();
/* 800E8298 */ void offGoatStopGame();
/* 800E82B0 */ BOOL checkGoatCatchActor(fopAc_ac_c*);
/* 800E8314 */ f32 getGoatCatchDistance2();
/* 800E8334 */ void endPushPull();
/* 800E8354 */ void getPushPullAnimeSpeed();
/* 800E8334 */ int endPushPull();
/* 800E8354 */ f32 getPushPullAnimeSpeed();
/* 800E8428 */ int procCoPushPullWaitInit(int);
/* 800E857C */ int procCoPushPullWait();
/* 800E875C */ int procCoPushMoveInit(int, int);
@@ -2259,14 +2260,14 @@ public:
/* 800F7C50 */ f32 getCrawlMoveAnmSpeed();
/* 800F7C74 */ f32 getCrawlMoveSpeed();
/* 800F7CE8 */ void setCrawlMoveDirectionArrow();
/* 800F7E48 */ void changeCrawlAutoMoveProc(cXyz*);
/* 800F7E48 */ BOOL changeCrawlAutoMoveProc(cXyz*);
/* 800F81C0 */ int getCrawlMoveVec(cXyz*, cXyz*, cXyz*, int, int, u8*);
/* 800F85C0 */ void crawlBgCheck(cXyz*, cXyz*, int);
/* 800F8700 */ void checkCrawlSideWall(cXyz*, cXyz*, cXyz*, cXyz*, s16*, s16*);
/* 800F88F8 */ void decideCrawlDoStatus();
/* 800F89E0 */ BOOL checkNotCrawlStand(cXyz*);
/* 800F8A50 */ BOOL checkNotCrawlStand(cXyz*, cXyz*);
/* 800F8B00 */ void checkCrawlInHoll(cXyz*, cXyz*, cXyz*, int);
/* 800F8B00 */ BOOL checkCrawlInHoll(cXyz*, cXyz*, cXyz*, int);
/* 800F8D04 */ void setCrawlMoveHoll();
/* 800F8DBC */ void setCrawlMoveAngle();
/* 800F8F08 */ void stopHalfMoveAnime(f32);
@@ -3458,6 +3459,7 @@ public:
BOOL checkStartFall() { return getStartMode() == 3; }
u8 getBStatus() { return dComIfGp_getAStatus(); }
void setRStatus(u8 param_0, u8 param_1) { dComIfGp_setRStatus(param_0, param_1); }
inline bool checkWindSpeedOnXZ() const;
inline void startRestartRoomFromOut(int, u32, int);
@@ -3647,7 +3649,7 @@ public:
/* 0x02900 */ u32 field_0x2900;
/* 0x02904 */ daAlink_footData_c mFootData1[2];
/* 0x02A4C */ daAlink_footData_c mFootData2[2];
/* 0x02B94 */ f32* field_0x2b94;
/* 0x02B94 */ f32 field_0x2b94;
/* 0x02B98 */ f32 field_0x2b98;
/* 0x02B98 */ f32 field_0x2b9c;
/* 0x02BA0 */ f32* field_0x2ba0;
@@ -5948,7 +5950,7 @@ public:
static daAlinkHIO_wlDamNormal_c1 const m;
};
class daAlinkHIO_wlDamLarge_c1 {
class daAlinkHIO_wlDamLaHu_c1 {
public:
/* 0x00 */ daAlinkHIO_anm_c field_0x0;
/* 0x14 */ daAlinkHIO_anm_c field_0x14;
@@ -5961,31 +5963,16 @@ public:
/* 0x60 */ f32 field_0x60;
/* 0x64 */ f32 field_0x64;
/* 0x68 */ f32 field_0x68;
}; // Size: 0x6C
};
class daAlinkHIO_wlDamLarge_c0 {
public:
static daAlinkHIO_wlDamLarge_c1 const m;
static daAlinkHIO_wlDamLaHu_c1 const m;
};
class daAlinkHIO_wlDamHuge_c1 {
public:
/* 0x00 */ daAlinkHIO_anm_c field_0x0;
/* 0x14 */ daAlinkHIO_anm_c field_0x14;
/* 0x28 */ daAlinkHIO_anm_c field_0x28;
/* 0x3C */ daAlinkHIO_anm_c field_0x3C;
/* 0x50 */ s16 field_0x50;
/* 0x54 */ f32 field_0x54;
/* 0x58 */ f32 field_0x58;
/* 0x5C */ f32 field_0x5C;
/* 0x60 */ f32 field_0x60;
/* 0x64 */ f32 field_0x64;
/* 0x68 */ f32 field_0x68;
}; // Size: 0x6C
class daAlinkHIO_wlDamHuge_c0 {
public:
static daAlinkHIO_wlDamHuge_c1 const m;
static daAlinkHIO_wlDamLaHu_c1 const m;
};
class daAlinkHIO_wlDamFall_c1 {
+5
View File
@@ -100,6 +100,11 @@ public:
void setNaderu() { field_0x568 |= 0x80; }
void setNaderuFinish() { field_0x568 |= 0x100; }
void setCrazyDash() { field_0x568 |= 4; }
void setCrazyBeforeCatch() { field_0x568 |= 1; }
void setCrazyCatch() { field_0x568 |= 2; }
void setCrazyThrowLeft() { field_0x568 |= 8; }
void setCrazyThrowRight() { field_0x568 |= 0x10; }
private:
/* 0x568 */ u16 field_0x568;
+5 -1
View File
@@ -264,6 +264,8 @@ public:
void setReinPosNormal() { (this->*mpSetReinPosNormalFn)(); }
void setReinPosHand(int param_0) { (this->*mpSetReinPosHandFn)(param_0); }
u32 getShadowID() const { return mShadowID; }
static u8 const m_footJointTable[8];
static f32 const m_callLimitDistance2;
@@ -317,7 +319,9 @@ public:
/* 0x1720 */ s16 field_0x1720;
/* 0x1722 */ u8 field_0x1722[0x1728 - 0x1722];
/* 0x1728 */ int field_0x1728;
/* 0x172C */ u8 field_0x172c[0x14];
/* 0x172C */ u8 field_0x172c[0x1734 - 0x172C];
/* 0x1734 */ u32 mShadowID;
/* 0x1738 */ u8 field_0x1738[0x1740 - 0x1738];
/* 0x1740 */ u32 field_0x1740;
/* 0x1744 */ u32 mStateFlg0;
/* 0x1748 */ u32 mResetStateFlg0;
+16 -1
View File
@@ -23,6 +23,7 @@ class daMidna_c : public fopAc_ac_c {
public:
enum daMidna_ERFLG0 {
ERFLG0_NO_SERVICE_WAIT = 0x80,
ERFLG0_FORCE_MORF_CANCEL = 0x10,
ERFLG0_FORCE_PANIC = 8,
ERFLG0_UNK_2 = 2,
};
@@ -41,7 +42,9 @@ public:
};
enum daMidna_FLG1 {
FLG1_SHADOW_NO_DRAW = 0x1000,
FLG1_UNK_100 = 0x100,
FLG1_NO_MASK_DRAW = 0x80,
FLG1_FORCE_NORMAL_COL = 8,
FLG1_FORCE_TIRED_COL = 4,
FLG1_SHADOW_MODEL_DRAW_DEMO_FORCE = 2,
@@ -119,7 +122,7 @@ public:
BOOL checkNoInput() const { return checkStateFlg0(FLG0_NO_INPUT); }
BOOL checkWolfNoPos() const { return checkStateFlg0(FLG0_UNK_800); }
int checkMetamorphoseEnable() { return (this->*mpFunc)(); }
int checkShadowModelDrawDemoForce() const { return checkStateFlg1(FLG1_SHADOW_MODEL_DRAW_DEMO_FORCE); }
u32 checkShadowModelDrawDemoForce() const { return checkStateFlg1(FLG1_SHADOW_MODEL_DRAW_DEMO_FORCE); }
void setForceNeckAimPos(const cXyz& i_pos) {
onStateFlg0(FLG0_UNK_20000);
@@ -180,6 +183,16 @@ public:
return checkStateFlg0(FLG0_PORTAL_OBJ_CALL) && checkStateFlg0(FLG0_UNK_200);
}
BOOL checkShadowNoDraw() const {
return checkStateFlg1(FLG1_SHADOW_NO_DRAW);
}
BOOL checkNoMaskDraw() const {
return checkStateFlg1(FLG1_NO_MASK_DRAW);
}
BOOL checkDemoPortalWarpWait() const { return mDemoMode == 11; }
inline static BOOL checkMidnaRealBody();
inline static BOOL i_checkMidnaRealBody() {
@@ -197,6 +210,8 @@ public:
|| field_0x5e4[0].getIdx() == 0x1C8 || field_0x5e4[0].getIdx() == 0x1C9;
}
void onForceMorfCancel() { onEndResetStateFlg0(ERFLG0_FORCE_MORF_CANCEL); }
static u8 const m_texDataTable[84];
static u8 const m_anmDataTable[636];
+1
View File
@@ -88,6 +88,7 @@ public:
u32 checkStateFlg0(daNbomb_FLG0 i_flag) const { return mStateFlg0 & i_flag; }
u32 checkWaterBomb() const { return checkStateFlg0(FLG0_WATER_BOMB); }
u32 checkPlayerMake() const { return checkStateFlg0(FLG0_PLAYER_MAKE); }
static const char* m_arcNameList[6];
+4
View File
@@ -45,6 +45,10 @@ public:
setBackJoint(-1);
}
void setCoCancelTimer() {
mCoCancelTimer = 30;
}
private:
/* 0x0568 */ request_of_phase_process_class mPhase;
/* 0x0570 */ dCcD_Stts mCcStts;
+11 -1
View File
@@ -148,11 +148,21 @@ public:
/* 80C0F7EC */ void getAttentionPos(fopAc_ac_c*);
/* 80C0F860 */ void standWaitJump(void*);
bool checkNpcObjGra() { return field_0xa7e == 1; }
void setCrazyDash() { field_0xa48 |= 4; }
void setCrazyCatch() { field_0xa48 |= 2; }
void setCrazyThrowLeft() { field_0xa48 |= 8; }
void setCrazyThrowRight() { field_0xa48 |= 0x10; }
static u8 mBaseMotionList[264];
static u8 mFaceMotionList[168];
private:
/* 0x568 */ u8 field_0x568[0x20a4 - 0x568];
/* 0x0568 */ u8 field_0x568[0xA48 - 0x568];
/* 0x0A48 */ u16 field_0xa48;
/* 0x0A4A */ u8 field_0xa4a[0xA7E - 0xA4A];
/* 0x0A7E */ u8 field_0xa7e;
/* 0x0A7F */ u8 field_0xa7f[0x20a4 - 0xA7F];
};
STATIC_ASSERT(sizeof(daObj_GrA_c) == 0x20a4);
+2
View File
@@ -191,6 +191,8 @@ namespace daObjMovebox {
void off_switch1() const { fopAcM_offSwitch(this, prm_get_swSave1()); }
void off_switch2() const { fopAcM_offSwitch(this, prmZ_get_swSave2()); }
int getType() { return prm_get_type(); }
static const s16 M_dir_base[4];
static const char* const M_arcname[8];
static const dCcD_SrcCyl M_cyl_src;
+3
View File
@@ -35,6 +35,9 @@ public:
/* 80CFB53C */ void draw();
/* 80CFB5E8 */ void _delete();
u8 getSwbit() { return fopAcM_GetParamBit(this, 0, 8); }
BOOL checkDispEmphasis() { return fopAcM_isSwitch(this, getSwbit()) == FALSE; }
private:
/* 0x568 */ u8 field_0x568[0xaa0 - 0x568];
};
+2
View File
@@ -393,6 +393,7 @@ public:
ERFLG1_UNK_40000000 = 0x40000000,
ERFLG1_UNK_20000000 = 0x20000000,
ERFLG1_UNK_10000000 = 0x10000000,
ERFLG1_UNK_8000000 = 0x8000000,
ERFLG1_UNK_4000000 = 0x4000000,
ERFLG1_UNK_2000000 = 0x2000000,
ERFLG1_UNK_1000000 = 0x1000000,
@@ -426,6 +427,7 @@ public:
ERFLG2_UNK_40 = 0x40,
ERFLG2_UNK_20 = 0x20,
ERFLG2_UNK_10 = 0x10,
ERFLG2_UNK_8 = 8,
ERFLG2_UNK_2 = 2,
ERFLG2_UNK_1 = 1,
};
+5
View File
@@ -59,6 +59,11 @@ public:
NULL, NULL);
}
static fopAc_ac_c* createInsectBombPlayer(cXyz* i_pos) {
return (fopAc_ac_c*)fopAcM_fastCreate(PROC_NBOMB, 10, i_pos, -1, NULL, NULL, -1,
NULL, NULL);
}
static fopAc_ac_c* createWaterBombExplode(cXyz* i_pos) {
return (fopAc_ac_c*)fopAcM_fastCreate(PROC_NBOMB, 18, i_pos, -1, NULL, NULL, -1, NULL,
NULL);
+6
View File
@@ -520,6 +520,8 @@ public:
}
f32 getCameraZoomForcus(int i_no) { return mCameraInfo[i_no].mCameraZoomForcus; }
f32 getCameraZoomScale(int i_no) { return mCameraInfo[i_no].mCameraZoomScale; }
void setCameraZoomScale(int i_no, f32 i_scale) { mCameraInfo[i_no].mCameraZoomScale = i_scale; }
void saveCameraPosition(int i, cXyz* i_pos, cXyz* i_target, f32 i_fovy, s16 i_bank) {
@@ -2727,6 +2729,10 @@ inline void dComIfGp_setCameraZoomScale(int i_no, f32 i_scale) {
g_dComIfG_gameInfo.play.setCameraZoomScale(i_no, i_scale);
}
inline f32 dComIfGp_getCameraZoomScale(int i_no) {
return g_dComIfG_gameInfo.play.getCameraZoomScale(i_no);
}
inline f32 dComIfGp_getCameraZoomForcus(int i_no) {
return g_dComIfG_gameInfo.play.getCameraZoomForcus(i_no);
}
+2 -1
View File
@@ -796,6 +796,7 @@ typedef enum _GXCommand {
GX_CMD_LOAD_CP_REG = 0x08,
GX_CMD_LOAD_XF_REG = 0x10,
GX_CMD_LOAD_BP_REG = 0x61,
} GXCommand;
typedef enum _GXClipMode {
@@ -1940,4 +1941,4 @@ typedef enum _GXXFClr0Ctrl {
GX_XF_CLR0CTRL_LMASKLO_END = 20,
} GXXFClr0Ctrl;
#endif /* GXENUM_H */
#endif /* GXENUM_H */
+6
View File
@@ -97,6 +97,11 @@ public:
static cXyz* getCrossP() { return mLineCheck.GetCrossP(); }
static bool lineCheck(const cXyz*, const cXyz*, const fopAc_ac_c*);
static bool getTriPla(cM3dGPla* o_tri) { return dComIfG_Bgsp().GetTriPla(mLineCheck, o_tri); }
static bool checkWallHit() {
cM3dGPla poly;
getTriPla(&poly);
return cBgW_CheckBWall(poly.mNormal.y);
}
static dBgS_ObjLinChk mLineCheck;
};
@@ -203,6 +208,7 @@ enum fopAcM_CARRY {
/* 0x10 */ fopAcM_CARRY_LIGHT = 16, // guess based on context
/* 0x20 */ fopAcM_CARRY_ITEM = 32,
/* 0x30 */ fopAcM_CARRY_UNK_30 = 0x30,
/* 0x40 */ fopAcM_CARRY_UNK_40 = 0x40,
/* 0x80 */ fopAcM_CARRY_CHICKEN = 0x80,
};
+4
View File
@@ -84,6 +84,10 @@ inline void cMtx_multVec(Mtx mtx, const Vec* src, Vec* dst) {
mDoMtx_multVec(mtx, src, dst);
}
inline void cMtx_multVecSR(Mtx mtx, const Vec* src, Vec* dst) {
mDoMtx_multVecSR(mtx, src, dst);
}
inline void cMtx_lookAt(Mtx param_0, const Vec* param_1, const Vec* param_2, const Vec* param_3, s16 param_4) {
mDoMtx_lookAt(param_0,param_1,param_2,param_3,param_4);
}