mirror of https://github.com/zeldaret/tp.git
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:
parent
21cb60624a
commit
499d4dfe74
|
|
@ -299,6 +299,79 @@ modules:
|
|||
hash: 22fc05a1e8059a065914ca60d162bf8d79327455
|
||||
symbols: config/GZ2E01/rels/d_a_grass/symbols.txt
|
||||
splits: config/GZ2E01/rels/d_a_grass/splits.txt
|
||||
extract:
|
||||
- symbol: l_M_kusa05_RGBATEX
|
||||
binary: assets/l_M_kusa05_RGBATEX.bin
|
||||
header: assets/l_M_kusa05_RGBATEX.h
|
||||
- symbol: l_M_Hijiki00TEX
|
||||
binary: assets/l_M_Hijiki00TEX.bin
|
||||
header: assets/l_M_Hijiki00TEX.h
|
||||
- symbol: l_M_Kusa_9qDL
|
||||
binary: assets/l_M_Kusa_9qDL.bin
|
||||
header: assets/l_M_Kusa_9qDL.h
|
||||
- symbol: l_M_Kusa_9q_cDL
|
||||
binary: assets/l_M_Kusa_9q_cDL.bin
|
||||
header: assets/l_M_Kusa_9q_cDL.h
|
||||
- symbol: l_M_TenGusaDL
|
||||
binary: assets/l_M_TenGusaDL.bin
|
||||
header: assets/l_M_TenGusaDL.h
|
||||
- symbol: l_Tengusa_matDL
|
||||
binary: assets/l_Tengusa_matDL.bin
|
||||
header: assets/l_Tengusa_matDL.h
|
||||
header_type: none
|
||||
custom_type: matDL
|
||||
- symbol: l_kusa9q_matDL
|
||||
binary: assets/l_kusa9q_matDL.bin
|
||||
header: assets/l_kusa9q_matDL.h
|
||||
header_type: none
|
||||
custom_type: matDL
|
||||
- symbol: l_kusa9q_l4_matDL
|
||||
binary: assets/l_kusa9q_l4_matDL.bin
|
||||
header: assets/l_kusa9q_l4_matDL.h
|
||||
header_type: none
|
||||
custom_type: matDL
|
||||
- symbol: l_J_Ohana00_64TEX
|
||||
binary: assets/l_J_Ohana00_64TEX.bin
|
||||
header: assets/l_J_Ohana00_64TEX.h
|
||||
- symbol: l_J_hana00DL
|
||||
binary: assets/l_J_hana00DL.bin
|
||||
header: assets/l_J_hana00DL.h
|
||||
- symbol: l_J_hana00_cDL
|
||||
binary: assets/l_J_hana00_cDL.bin
|
||||
header: assets/l_J_hana00_cDL.h
|
||||
- symbol: l_matDL
|
||||
binary: assets/l_matDL.bin
|
||||
header: assets/l_matDL.h
|
||||
header_type: none
|
||||
custom_type: matDL
|
||||
- symbol: l_matLight4DL
|
||||
binary: assets/l_matLight4DL.bin
|
||||
header: assets/l_matLight4DL.h
|
||||
header_type: none
|
||||
custom_type: matDL
|
||||
- symbol: l_J_Ohana01_64128_0419TEX
|
||||
binary: assets/l_J_Ohana01_64128_0419TEX.bin
|
||||
header: assets/l_J_Ohana01_64128_0419TEX.h
|
||||
- symbol: l_J_hana01DL
|
||||
binary: assets/l_J_hana01DL.bin
|
||||
header: assets/l_J_hana01DL.h
|
||||
- symbol: l_J_hana01_c_00DL
|
||||
binary: assets/l_J_hana01_c_00DL.bin
|
||||
header: assets/l_J_hana01_c_00DL.h
|
||||
- symbol: l_J_hana01_c_01DL
|
||||
binary: assets/l_J_hana01_c_01DL.bin
|
||||
header: assets/l_J_hana01_c_01DL.h
|
||||
- symbol: l_mat2DL
|
||||
binary: assets/l_mat2DL.bin
|
||||
header: assets/l_mat2DL.h
|
||||
header_type: none
|
||||
custom_type: matDL
|
||||
- symbol: l_mat2Light4DL
|
||||
binary: assets/l_mat2Light4DL.bin
|
||||
header: assets/l_mat2Light4DL.h
|
||||
header_type: none
|
||||
custom_type: matDL
|
||||
|
||||
- object: files/RELS.arc:rels/amem/d_a_kytag05.rel
|
||||
hash: 0765a8953491870110c7525693dd1655e18f5827
|
||||
symbols: config/GZ2E01/rels/d_a_kytag05/symbols.txt
|
||||
|
|
@ -1115,6 +1188,19 @@ modules:
|
|||
hash: 06ea29fcd01b9a6c6924d32a2732496e10541b24
|
||||
symbols: config/GZ2E01/rels/d_a_mant/symbols.txt
|
||||
splits: config/GZ2E01/rels/d_a_mant/splits.txt
|
||||
extract:
|
||||
- symbol: l_Egnd_mantTEX
|
||||
binary: assets/l_Egnd_mantTEX.bin
|
||||
header: assets/l_Egnd_mantTEX.h
|
||||
- symbol: l_Egnd_mantTEX_U
|
||||
binary: assets/l_Egnd_mantTEX_U.bin
|
||||
header: assets/l_Egnd_mantTEX_U.h
|
||||
- symbol: l_Egnd_mantPAL
|
||||
binary: assets/l_Egnd_mantPAL.bin
|
||||
header: assets/l_Egnd_mantPAL.h
|
||||
- symbol: l_Egnd_mantDL
|
||||
binary: assets/l_Egnd_mantDL.bin
|
||||
header: assets/l_Egnd_mantDL.h
|
||||
- object: files/rel/Final/Release/d_a_mg_fshop.rel
|
||||
hash: 81bb9eef98be70c2b69a913a51b0e6a9554403f4
|
||||
symbols: config/GZ2E01/rels/d_a_mg_fshop/symbols.txt
|
||||
|
|
@ -3035,3 +3121,14 @@ modules:
|
|||
hash: 19eacf74625a4ce9f319a552fac89a18c616e87a
|
||||
symbols: config/GZ2E01/rels/d_a_warp_bug/symbols.txt
|
||||
splits: config/GZ2E01/rels/d_a_warp_bug/splits.txt
|
||||
|
||||
extract:
|
||||
- symbol: black_tex
|
||||
binary: assets/black_tex.bin
|
||||
header: assets/black_tex.h
|
||||
- symbol: msg_data
|
||||
binary: assets/msg_data.bin
|
||||
header: assets/msg_data.h
|
||||
- symbol: font_data
|
||||
binary: assets/font_data.bin
|
||||
header: assets/font_data.h
|
||||
|
|
|
|||
53
configure.py
53
configure.py
|
|
@ -13,6 +13,7 @@
|
|||
###
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import Any, Dict, List
|
||||
|
|
@ -2115,6 +2116,58 @@ config.libs = [
|
|||
ActorRel(Matching, "d_a_warp_bug"),
|
||||
]
|
||||
|
||||
|
||||
# Define our custom asset processing scripts
|
||||
config.custom_build_rules = [
|
||||
{
|
||||
"name": "convert_matDL",
|
||||
"command": "$python tools/converters/matDL_dis.py $in $out --symbol $symbol",
|
||||
"description": "CONVERT $symbol",
|
||||
},
|
||||
]
|
||||
config.custom_build_steps = {}
|
||||
|
||||
# Grab the specific GameID so we can format our strings properly
|
||||
version = VERSIONS[version_num]
|
||||
out_dir = config.build_dir / version
|
||||
|
||||
|
||||
# This generates the build steps needed for preprocessing
|
||||
def emit_build_rule(asset):
|
||||
steps = config.custom_build_steps.setdefault("pre-compile", [])
|
||||
|
||||
match asset.get("custom_type"):
|
||||
case None:
|
||||
return
|
||||
|
||||
case "matDL":
|
||||
steps.append(
|
||||
{
|
||||
"rule": "convert_matDL",
|
||||
"inputs": out_dir / "bin" / asset["binary"],
|
||||
"outputs": out_dir / "include" / asset["header"],
|
||||
"variables": {
|
||||
"symbol": asset["symbol"],
|
||||
},
|
||||
"implicit": Path("tools/converters/matDL_dis.py"),
|
||||
}
|
||||
)
|
||||
|
||||
case _:
|
||||
print("Unknown asset type: " + asset["custom_type"])
|
||||
|
||||
|
||||
# Parse the config and create the build rules for all our assets
|
||||
config_path = out_dir / "config.json"
|
||||
if config_path.exists():
|
||||
config_data = json.load(open(config_path))
|
||||
for asset in config_data.get("extract", []):
|
||||
emit_build_rule(asset)
|
||||
for module in config_data.get("modules", []):
|
||||
for asset in module.get("extract", []):
|
||||
emit_build_rule(asset)
|
||||
|
||||
|
||||
# Optional extra categories for progress tracking
|
||||
config.progress_categories = [
|
||||
ProgressCategory("game", "TP Game Code"),
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
||||
|
|
|
|||
|
|
@ -45,6 +45,10 @@ public:
|
|||
setBackJoint(-1);
|
||||
}
|
||||
|
||||
void setCoCancelTimer() {
|
||||
mCoCancelTimer = 30;
|
||||
}
|
||||
|
||||
private:
|
||||
/* 0x0568 */ request_of_phase_process_class mPhase;
|
||||
/* 0x0570 */ dCcD_Stts mCcStts;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -483,11 +483,9 @@ static const u16 effName_42340[] = {
|
|||
};
|
||||
|
||||
/* 8045314C-80453150 00174C 0004+00 1/1 0/0 0/0 .sdata2 fFootJoint$44785 */
|
||||
static const u8 fFootJoint[4] = {
|
||||
0x00,
|
||||
0x10,
|
||||
0x00,
|
||||
0x15,
|
||||
static const u16 fFootJoint[] = {
|
||||
0x0010,
|
||||
0x0015,
|
||||
};
|
||||
|
||||
/* 80453150-80453154 001750 0004+00 1/1 0/0 0/0 .sdata2 bFootJoint$44786 */
|
||||
|
|
@ -2306,9 +2304,10 @@ void daAlink_c::setMatrixOffset(f32* param_0, f32 param_1) {
|
|||
|
||||
/* 800A2CE0-800A3430 09D620 0750+00 3/3 0/0 0/0 .text
|
||||
* setLegAngle__9daAlink_cFfP18daAlink_footData_cPsPsi */
|
||||
void daAlink_c::setLegAngle(f32 param_0, daAlink_footData_c* param_1, s16* param_2,
|
||||
int daAlink_c::setLegAngle(f32 param_0, daAlink_footData_c* param_1, s16* param_2,
|
||||
s16* param_3, int param_4) {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 80391EFC-80391F08 01E55C 000C+00 0/1 0/0 0/0 .rodata localLeftFootOffset$56542 */
|
||||
|
|
|
|||
|
|
@ -2708,7 +2708,7 @@ const daAlinkHIO_wlDamNormal_c1 daAlinkHIO_wlDamNormal_c0::m = {
|
|||
};
|
||||
|
||||
/* 8038F29C-8038F308 01B8FC 006C+00 2/4 0/0 0/0 .rodata m__24daAlinkHIO_wlDamLarge_c0 */
|
||||
const daAlinkHIO_wlDamLarge_c1 daAlinkHIO_wlDamLarge_c0::m = {
|
||||
const daAlinkHIO_wlDamLaHu_c1 daAlinkHIO_wlDamLarge_c0::m = {
|
||||
{
|
||||
49,
|
||||
1.0f,
|
||||
|
|
@ -2749,7 +2749,7 @@ const daAlinkHIO_wlDamLarge_c1 daAlinkHIO_wlDamLarge_c0::m = {
|
|||
/* 8038F308-8038F374 01B968 006C+00 0/2 0/0 0/0 .rodata m__23daAlinkHIO_wlDamHuge_c0 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
const daAlinkHIO_wlDamHuge_c1 daAlinkHIO_wlDamHuge_c0::m = {
|
||||
const daAlinkHIO_wlDamLaHu_c1 daAlinkHIO_wlDamHuge_c0::m = {
|
||||
{
|
||||
49,
|
||||
1.1f,
|
||||
|
|
|
|||
|
|
@ -1153,7 +1153,6 @@ int daAlink_c::procCanoeRodGrab() {
|
|||
}
|
||||
|
||||
/* 800F6464-800F659C 0F0DA4 0138+00 6/6 0/0 0/0 .text procCanoeFishingWaitInit__9daAlink_cFv */
|
||||
// NONMATCHING - cLib_minMaxLimit regalloc
|
||||
int daAlink_c::procCanoeFishingWaitInit() {
|
||||
if (!commonProcInitNotSameProc(PROC_CANOE_FISHING_WAIT)) {
|
||||
field_0x311a = 0;
|
||||
|
|
@ -1241,7 +1240,6 @@ int daAlink_c::procCanoeFishingReelInit() {
|
|||
|
||||
/* 800F6874-800F69D4 0F11B4 0160+00 1/0 0/0 0/0 .text procCanoeFishingReel__9daAlink_cFv
|
||||
*/
|
||||
// NONMATCHING - cLib_minMaxLimit regalloc
|
||||
int daAlink_c::procCanoeFishingReel() {
|
||||
if (canoeCommon()) {
|
||||
mItemVar0.field_0x3018 = 1;
|
||||
|
|
|
|||
|
|
@ -79,8 +79,9 @@ void daAlink_c::setCrawlMoveDirectionArrow() {
|
|||
|
||||
/* 800F7E48-800F81C0 0F2788 0378+00 2/2 0/0 0/0 .text changeCrawlAutoMoveProc__9daAlink_cFP4cXyz
|
||||
*/
|
||||
void daAlink_c::changeCrawlAutoMoveProc(cXyz* param_0) {
|
||||
BOOL daAlink_c::changeCrawlAutoMoveProc(cXyz* param_0) {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 800F81C0-800F85C0 0F2B00 0400+00 2/2 0/0 0/0 .text
|
||||
|
|
@ -169,8 +170,9 @@ BOOL daAlink_c::checkNotCrawlStand(cXyz* param_0, cXyz* param_1) {
|
|||
|
||||
/* 800F8B00-800F8D04 0F3440 0204+00 2/2 0/0 0/0 .text
|
||||
* checkCrawlInHoll__9daAlink_cFP4cXyzP4cXyzP4cXyzi */
|
||||
void daAlink_c::checkCrawlInHoll(cXyz* param_0, cXyz* param_1, cXyz* param_2, int param_3) {
|
||||
BOOL daAlink_c::checkCrawlInHoll(cXyz* param_0, cXyz* param_1, cXyz* param_2, int param_3) {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 800F8D04-800F8DBC 0F3644 00B8+00 2/2 0/0 0/0 .text setCrawlMoveHoll__9daAlink_cFv */
|
||||
|
|
|
|||
|
|
@ -785,7 +785,6 @@ BOOL daAlink_c::checkDamageAction() {
|
|||
|
||||
/* 800D8F3C-800D9514 0D387C 05D8+00 2/2 0/0 0/0 .text procDamageInit__9daAlink_cFP12dCcD_GObjInfi
|
||||
*/
|
||||
// NONMATCHING - cLib_minMaxLimit appears to have issues when using s16
|
||||
int daAlink_c::procDamageInit(dCcD_GObjInf* param_0, int param_1) {
|
||||
BOOL freeze_player;
|
||||
|
||||
|
|
|
|||
|
|
@ -4233,8 +4233,29 @@ void daAlink_c::checkWarpStart() {
|
|||
|
||||
/* 8011FBC0-8011FD4C 11A500 018C+00 3/3 0/0 0/0 .text warpModelTexScroll__9daAlink_cFv */
|
||||
int daAlink_c::warpModelTexScroll() {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
field_0x3478 += 0.15f;
|
||||
if (field_0x3478 >= 1.0f) {
|
||||
field_0x3478 -= 1.0f;
|
||||
}
|
||||
|
||||
int temp_r30 = cLib_chaseF(&field_0x347c, field_0x3480, 0.06f);
|
||||
field_0x3484 = cLib_minMaxLimit<f32>(0.5f * field_0x347c, 0.0f, 1.0f);
|
||||
|
||||
dRes_info_c::setWarpSRT(field_0x064C, current.pos, field_0x3478, field_0x347c);
|
||||
dRes_info_c::setWarpSRT(mSwordModel->getModelData(), current.pos, field_0x3478, field_0x347c);
|
||||
dRes_info_c::setWarpSRT(mShieldModel->getModelData(), current.pos, field_0x3478, field_0x347c);
|
||||
dRes_info_c::setWarpSRT(mSheathModel->getModelData(), current.pos, field_0x3478, field_0x347c);
|
||||
|
||||
if (checkWolf()) {
|
||||
dRes_info_c::setWarpSRT(mpWlChainModels[0]->getModelData(), current.pos, field_0x3478, field_0x347c);
|
||||
} else {
|
||||
dRes_info_c::setWarpSRT(mpLinkFaceModel->getModelData(), current.pos, field_0x3478, field_0x347c);
|
||||
dRes_info_c::setWarpSRT(mpLinkHatModel->getModelData(), current.pos, field_0x3478, field_0x347c);
|
||||
dRes_info_c::setWarpSRT(mpLinkHandModel->getModelData(), current.pos, field_0x3478, field_0x347c);
|
||||
dRes_info_c::setWarpSRT(mpLinkBootModels[0]->getModelData(), current.pos, field_0x3478, field_0x347c);
|
||||
}
|
||||
|
||||
return temp_r30;
|
||||
}
|
||||
|
||||
/* 8011FD4C-80120124 11A68C 03D8+00 2/2 0/0 0/0 .text procCoWarpInit__9daAlink_cFii */
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
#include "d/actor/d_a_alink.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/actor/d_a_obj_gra2.h"
|
||||
|
||||
/* 800DC548-800DC5A4 0D6E88 005C+00 13/13 0/0 0/0 .text checkEnemyGroup__9daAlink_cFP10fopAc_ac_c
|
||||
*/
|
||||
|
|
@ -19,14 +20,6 @@ public:
|
|||
bool checkBattleMode() { return true; }
|
||||
};
|
||||
|
||||
class daObj_GrA_c : public fopAc_ac_c {
|
||||
public:
|
||||
bool checkNpcObjGra() { return field_0xa7e == 1; }
|
||||
|
||||
u8 temp[0xA7E - 0x568];
|
||||
u8 field_0xa7e;
|
||||
};
|
||||
|
||||
/* 800DC5A4-800DC5DC 0D6EE4 0038+00 4/4 0/0 0/0 .text checkSpecialNpc__9daAlink_cFP10fopAc_ac_c */
|
||||
BOOL daAlink_c::checkSpecialNpc(fopAc_ac_c* i_actor) {
|
||||
s16 name = fopAcM_GetName(i_actor);
|
||||
|
|
@ -45,15 +38,10 @@ BOOL daAlink_c::checkShieldAttackEmphasys() {
|
|||
}
|
||||
|
||||
/* 800DC678-800DC79C 0D6FB8 0124+00 5/5 0/0 0/0 .text checkGuardActionChange__9daAlink_cFv */
|
||||
/* BOOL daAlink_c::checkGuardActionChange() {
|
||||
return checkAttentionLock() && !checkIronBallWaitAnime() && !checkGrabAnime() &&
|
||||
!checkCopyRodControllAnime() && mTargetedActor != NULL && !checkSpecialNpc(mTargetedActor) &&
|
||||
(fopAcM_GetGroup(mTargetedActor) != 3 && fopAcM_GetGroup(mTargetedActor) != fopAc_NPC_e);
|
||||
} */
|
||||
|
||||
BOOL daAlink_c::checkGuardActionChange() {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
return checkAttentionLock() && !checkIronBallWaitAnime() && !checkGrabAnime() &&
|
||||
!checkCopyRodControllAnime() && !((mTargetedActor != NULL && !checkSpecialNpc(mTargetedActor)) &&
|
||||
(fopAcM_GetGroup(mTargetedActor) == 3 || fopAcM_GetGroup(mTargetedActor) == fopAc_NPC_e));
|
||||
}
|
||||
|
||||
/* 800DC79C-800DC8C4 0D70DC 0128+00 3/3 0/0 0/0 .text stickArrowIncrement__9daAlink_cFi
|
||||
|
|
@ -246,10 +234,9 @@ void daAlink_c::setGuardSe(dCcD_GObjInf* i_objinf) {
|
|||
}
|
||||
|
||||
/* 800DD1D4-800DD3E4 0D7B14 0210+00 1/1 0/0 0/0 .text setSmallGuard__9daAlink_cFP12dCcD_GObjInf */
|
||||
// NONMATCHING
|
||||
void daAlink_c::setSmallGuard(dCcD_GObjInf* i_objinf) {
|
||||
setUpperAnimeBase(0x16);
|
||||
cXyz* dmg_vec = (cXyz*)getDamageVec(i_objinf);
|
||||
cXyz* dmg_vec = getDamageVec(i_objinf);
|
||||
|
||||
mBodyAngle.y = (dmg_vec->atan2sX_Z() + 0x8000) - shape_angle.y;
|
||||
if (abs(mBodyAngle.y) > 0x7000) {
|
||||
|
|
@ -260,57 +247,435 @@ void daAlink_c::setSmallGuard(dCcD_GObjInf* i_objinf) {
|
|||
daAlinkHIO_guard_c0::m.mSmallGuardLRAngleMax);
|
||||
}
|
||||
|
||||
s16 max = daAlinkHIO_guard_c0::m.mSmallGuardFBAngleMax;
|
||||
s16 min = -max;
|
||||
mBodyAngle.x = cLib_minMaxLimit<s16>(cM_atan2s(dmg_vec->y, dmg_vec->absXZ()), min, max);
|
||||
mBodyAngle.x = cLib_minMaxLimit<s16>(cM_atan2s(dmg_vec->y, dmg_vec->absXZ()), -daAlinkHIO_guard_c0::m.mSmallGuardFBAngleMax, daAlinkHIO_guard_c0::m.mSmallGuardFBAngleMax);
|
||||
}
|
||||
|
||||
/* 800DD3E4-800DD894 0D7D24 04B0+00 1/1 0/0 0/0 .text
|
||||
* procGuardSlipInit__9daAlink_cFiP12dCcD_GObjInf */
|
||||
// NONMATCHING - extra useless mr
|
||||
int daAlink_c::procGuardSlipInit(int param_0, dCcD_GObjInf* param_1) {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
if (mProcID == PROC_GUARD_SLIP) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
field_0x2fd5++;
|
||||
if (field_0x2fd5 == 4) {
|
||||
field_0x2fd5 = 0;
|
||||
return procGuardBreakInit();
|
||||
}
|
||||
|
||||
commonProcInit(PROC_GUARD_SLIP);
|
||||
field_0x2fd4 = 3;
|
||||
|
||||
cXyz* temp_r3 = getDamageVec(param_1);
|
||||
current.angle.y = temp_r3->atan2sX_Z();
|
||||
|
||||
if (mEquipItem == IRONBALL) {
|
||||
setSingleAnimeBase(ANM_IRONBALL_DEF);
|
||||
setIronBallWaitUpperAnime(1);
|
||||
mNowAnmPackUpper[2].setRatio(0.0f);
|
||||
|
||||
mProcVar1.field_0x300a = 0;
|
||||
mProcVar2.field_0x300c = 0;
|
||||
mProcVar3.field_0x300e = 0;
|
||||
} else {
|
||||
const daAlinkHIO_guard_c1* var_r27 = &daAlinkHIO_guard_c0::m;
|
||||
daAlink_ANM var_r28;
|
||||
if (field_0x2f98 == 2) {
|
||||
var_r28 = ANM_GUARD_LEFT;
|
||||
} else {
|
||||
var_r28 = ANM_GUARD_RIGHT;
|
||||
}
|
||||
|
||||
setSingleAnimeParam(var_r28, &var_r27->mGuardHitAnm);
|
||||
setUpperGuardAnime(-1.0f);
|
||||
|
||||
mProcVar2.field_0x300c = (current.angle.y + 0x8000) - shape_angle.y;
|
||||
if (abs(mProcVar2.field_0x300c) > 0x7000) {
|
||||
mProcVar2.field_0x300c = 0;
|
||||
} else {
|
||||
mProcVar2.field_0x300c = cLib_minMaxLimit<s16>((s16)mProcVar2.field_0x300c, -daAlinkHIO_guard_c0::m.mGuardLRAngleMax, daAlinkHIO_guard_c0::m.mGuardLRAngleMax);
|
||||
}
|
||||
|
||||
mProcVar3.field_0x300e = cLib_minMaxLimit<s16>(cM_atan2s(temp_r3->y, temp_r3->absXZ()), -daAlinkHIO_guard_c0::m.mGuardFBAngleMax, daAlinkHIO_guard_c0::m.mGuardFBAngleMax);
|
||||
mProcVar1.field_0x300a = daAlinkHIO_guard_c0::m.mGuardBodyInterpolation + 1;
|
||||
mProcVar2.field_0x300c = (mProcVar2.field_0x300c - mBodyAngle.y) / mProcVar1.field_0x300a;
|
||||
mProcVar3.field_0x300e = (mProcVar3.field_0x300e - mBodyAngle.x) / mProcVar1.field_0x300a;
|
||||
mProcVar1.field_0x300a--;
|
||||
|
||||
mBodyAngle.y += mProcVar2.field_0x300c;
|
||||
mBodyAngle.x += mProcVar3.field_0x300e;
|
||||
}
|
||||
|
||||
mProcVar4.field_0x3010 = 0;
|
||||
mProcVar5.field_0x3012 = 0;
|
||||
|
||||
if (param_1 != NULL && param_1->GetTgHitAc() != NULL && fopAcM_GetName(param_1->GetTgHitAc()) == PROC_E_MM_MT && param_1->GetTgHitAc()->subtype == 1) {
|
||||
if (checkBootsOrArmorHeavy()) {
|
||||
mNormalSpeed = daAlinkHIO_guard_c0::m.mMagneHvyGuardSpeed;
|
||||
mProcVar5.field_0x3012 = 1;
|
||||
} else {
|
||||
mNormalSpeed = daAlinkHIO_guard_c0::m.mMagneGuardSpeed;
|
||||
mProcVar5.field_0x3012 = 0;
|
||||
}
|
||||
|
||||
mProcVar4.field_0x3010 = 1;
|
||||
} else if (checkHugeAttack(param_0)) {
|
||||
if ((!checkBootsOrArmorHeavy() && checkMiddleBossGoronRoom()) || checkStageName("D_MN07B")) {
|
||||
mNormalSpeed = 40.0f;
|
||||
} else {
|
||||
mNormalSpeed = daAlinkHIO_guard_c0::m.mGuardSpeedHuge;
|
||||
}
|
||||
} else if (checkLargeAttack(param_0)) {
|
||||
mNormalSpeed = daAlinkHIO_guard_c0::m.mGuardSpeedLarge;
|
||||
} else {
|
||||
mNormalSpeed = daAlinkHIO_guard_c0::m.mGuardSpeedNormal;
|
||||
}
|
||||
|
||||
field_0x2f9d = 0x60;
|
||||
setFootEffectProcType(1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800DD894-800DDA10 0D81D4 017C+00 1/0 0/0 0/0 .text procGuardSlip__9daAlink_cFv */
|
||||
int daAlink_c::procGuardSlip() {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
if (mEquipItem != IRONBALL) {
|
||||
setUpperGuardAnime(-1.0f);
|
||||
}
|
||||
|
||||
setShapeAngleToAtnActor(0);
|
||||
|
||||
if (mProcVar1.field_0x300a != 0) {
|
||||
mProcVar1.field_0x300a -= 1;
|
||||
mBodyAngle.y += mProcVar2.field_0x300c;
|
||||
mBodyAngle.x += mProcVar3.field_0x300e;
|
||||
}
|
||||
|
||||
if (mNormalSpeed > 2.5f) {
|
||||
field_0x2f9d = 0x60;
|
||||
}
|
||||
|
||||
f32 var_f31;
|
||||
if (checkBootsOrArmorHeavy() && mProcVar4.field_0x3010 == 0) {
|
||||
var_f31 = 2.5f;
|
||||
} else {
|
||||
var_f31 = 1.25f;
|
||||
}
|
||||
|
||||
if (mProcVar4.field_0x3010 != 0 && mProcVar5.field_0x3012 != checkBootsOrArmorHeavy()) {
|
||||
mNormalSpeed = 0.0f;
|
||||
}
|
||||
|
||||
if (cLib_chaseF(&mNormalSpeed, 0.0f, var_f31) != 0 && checkAnmEnd(&mUnderFrameCtrl[0])) {
|
||||
field_0x814.SetTgApid(0);
|
||||
|
||||
if (!checkGuardActionChange()) {
|
||||
onEndResetFlg1(ERFLG1_UNK_20);
|
||||
}
|
||||
|
||||
if (mEquipItem == IRONBALL) {
|
||||
mNowAnmPackUpper[2].setRatio(1.0f);
|
||||
}
|
||||
|
||||
checkNextAction(0);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800DDA10-800DDBA8 0D8350 0198+00 2/1 0/0 0/0 .text procGuardAttackInit__9daAlink_cFv
|
||||
*/
|
||||
int daAlink_c::procGuardAttackInit() {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
if (mDemo.getDemoMode() == 0x4B && mProcID == PROC_GUARD_ATTACK) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
commonProcInit(PROC_GUARD_ATTACK);
|
||||
const daAlinkHIO_guardAttack_c1* temp_r30 = &daAlinkHIO_gAtPush_c0::m;
|
||||
|
||||
field_0x2f98 = 3;
|
||||
field_0x34d4 = l_rWaitBaseAnime;
|
||||
field_0x3588 = l_rWaitBaseAnime;
|
||||
|
||||
setCutType(0x29);
|
||||
setSingleAnimeParam(ANM_SHIELD_ATTACK, &temp_r30->mAttackAnm);
|
||||
|
||||
field_0x3478 = temp_r30->mAttackStartFrame;
|
||||
field_0x347c = temp_r30->mAttackEndFrame;
|
||||
field_0x3480 = temp_r30->mSpeed;
|
||||
|
||||
if (checkHeavyStateOn(1, 1) != 0) {
|
||||
field_0x3480 *= mHeavySpeedMultiplier;
|
||||
}
|
||||
|
||||
if (mDemo.getDemoMode() == 0x4B) {
|
||||
field_0x3484 = 1000.0f;
|
||||
field_0x3488 = 1000.0f;
|
||||
} else {
|
||||
field_0x3484 = temp_r30->mAttackAnm.mCheckFrame;
|
||||
field_0x3488 = temp_r30->mSlashCheckFrame;
|
||||
}
|
||||
|
||||
mNormalSpeed = 0.0f;
|
||||
setSwordVoiceSe(Z2SE_AL_V_TATE_OSHI);
|
||||
|
||||
mGuardAtCps.ResetAtHit();
|
||||
mGuardAtCps.SetAtSe(2);
|
||||
mGuardAtCps.SetR(daAlinkHIO_guard_c0::m.mAttackRadius);
|
||||
|
||||
current.angle.y = shape_angle.y;
|
||||
|
||||
setUpperGuardAnime(-1.0f);
|
||||
mProcVar2.field_0x300c = 0;
|
||||
mProcVar3.field_0x300e = 0;
|
||||
mProcVar5.field_0x3012 = 0;
|
||||
mProcVar0.field_0x3008 = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800DDBA8-800DDE58 0D84E8 02B0+00 1/0 0/0 0/0 .text procGuardAttack__9daAlink_cFv */
|
||||
int daAlink_c::procGuardAttack() {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
daPy_frameCtrl_c* temp_r30 = &mUnderFrameCtrl[0];
|
||||
|
||||
setUpperGuardAnime(-1.0f);
|
||||
field_0x2f99 = 4;
|
||||
cLib_chaseF(&mNormalSpeed, 0.0f, daAlinkHIO_move_c0::m.mDeceleration);
|
||||
setShapeAngleToAtnActor(1);
|
||||
current.angle.y = shape_angle.y;
|
||||
|
||||
if (checkForceSwordSwing()) {
|
||||
mProcVar2.field_0x300c = 1;
|
||||
}
|
||||
|
||||
BOOL var_r29;
|
||||
if (mEquipItem == 0x103 && !checkMagneBootsOn()) {
|
||||
var_r29 = 1;
|
||||
if (doTrigger()) {
|
||||
mProcVar3.field_0x300e = 1;
|
||||
}
|
||||
} else {
|
||||
var_r29 = 0;
|
||||
}
|
||||
|
||||
if (mProcVar0.field_0x3008 == 0 && mGuardAtCps.ChkAtHit()) {
|
||||
mProcVar0.field_0x3008 = 1;
|
||||
dComIfGp_getVibration().StartShock(3, 1, cXyz(0.0f, 1.0f, 0.0f));
|
||||
}
|
||||
|
||||
if (mProcVar5.field_0x3012 != 0 && commonLineCheck(&field_0x3834, &mRightHandPos) && dComIfG_Bgsp().GetWallCode(mLinkLinChk) != 7) {
|
||||
mZ2Link.startHitItemSE(Z2SE_HIT_SHIELD_ATTACK, dKy_pol_sound_get(&mLinkLinChk), NULL, -1.0f);
|
||||
return procCutReverseInit(ANM_SHIELD_ATTACK_RECOIL);
|
||||
}
|
||||
|
||||
if (var_r29) {
|
||||
if (checkCutHeadState()) {
|
||||
setDoStatusEmphasys(0x77);
|
||||
} else {
|
||||
setDoStatus(0x86);
|
||||
}
|
||||
}
|
||||
|
||||
if (checkAnmEnd(temp_r30)) {
|
||||
if (mDemo.getDemoMode() == 0x4B) {
|
||||
dComIfGp_evmng_cutEnd(field_0x3184);
|
||||
} else {
|
||||
checkNextAction(0);
|
||||
}
|
||||
} else {
|
||||
if (temp_r30->getFrame() > field_0x3488) {
|
||||
if (mProcVar3.field_0x300e != 0) {
|
||||
return checkDoCutAction();
|
||||
}
|
||||
|
||||
if (mProcVar2.field_0x300c != 0) {
|
||||
return checkCutAction();
|
||||
}
|
||||
}
|
||||
|
||||
if (temp_r30->getFrame() > field_0x3484) {
|
||||
onModeFlg(4);
|
||||
checkNextAction(1);
|
||||
} else if (temp_r30->getFrame() >= field_0x3478 && temp_r30->getFrame() < field_0x347c) {
|
||||
if (mProcVar5.field_0x3012 == 0) {
|
||||
mNormalSpeed = field_0x3480;
|
||||
}
|
||||
mProcVar5.field_0x3012 = 1;
|
||||
} else {
|
||||
mProcVar5.field_0x3012 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800DDE58-800DDF2C 0D8798 00D4+00 2/2 0/0 0/0 .text procGuardBreakInit__9daAlink_cFv */
|
||||
int daAlink_c::procGuardBreakInit() {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
commonProcInit(PROC_GUARD_BREAK);
|
||||
setSingleAnimeParam(ANM_GUARD_BREAK, &daAlinkHIO_guard_c0::m.mGuardBreakAnm);
|
||||
|
||||
if (mEquipItem == IRONBALL) {
|
||||
deleteEquipItem(0, 0);
|
||||
}
|
||||
|
||||
mNormalSpeed = 0.0f;
|
||||
field_0x3588 = l_halfAtnWaitBaseAnime;
|
||||
dComIfGp_getVibration().StartShock(5, 0x1F, cXyz(0.0f, 1.0f, 0.0f));
|
||||
voiceStart(Z2SE_AL_V_GUARD_BROKEN);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800DDF2C-800DE008 0D886C 00DC+00 1/0 0/0 0/0 .text procGuardBreak__9daAlink_cFv */
|
||||
int daAlink_c::procGuardBreak() {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
daPy_frameCtrl_c* temp_r30 = &mUnderFrameCtrl[0];
|
||||
|
||||
setUpperGuardAnime(-1.0f);
|
||||
onEndResetFlg0(ERFLG0_UNK_8000000);
|
||||
field_0x2f99 = 4;
|
||||
|
||||
if (checkAnmEnd(temp_r30)) {
|
||||
if (checkGuardActionChange() == 0) {
|
||||
onEndResetFlg1(ERFLG1_UNK_20);
|
||||
}
|
||||
checkNextAction(0);
|
||||
} else if (temp_r30->getFrame() > daAlinkHIO_guard_c0::m.mGuardBreakAnm.mCheckFrame) {
|
||||
if (!checkGuardActionChange()) {
|
||||
onEndResetFlg1(ERFLG1_UNK_20);
|
||||
}
|
||||
|
||||
onModeFlg(4);
|
||||
checkNextAction(1);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800DE008-800DE380 0D8948 0378+00 2/2 0/0 0/0 .text procTurnMoveInit__9daAlink_cFi */
|
||||
int daAlink_c::procTurnMoveInit(int param_0) {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
BOOL temp_r27 = checkUpperGuardAnime();
|
||||
fopAc_ac_c* temp_r28 = mTargetedActor;
|
||||
|
||||
commonProcInit(PROC_TURN_MOVE);
|
||||
mNormalSpeed = 0.0f;
|
||||
|
||||
daAlink_ANM var_r29;
|
||||
if (param_0 == 2) {
|
||||
var_r29 = ANM_SIDE_ROLL_LEFT;
|
||||
} else if (param_0 == 3) {
|
||||
var_r29 = ANM_SIDE_ROLL_RIGHT;
|
||||
} else if (checkInputOnR()) {
|
||||
if ((s16)(field_0x2fe2 - shape_angle.y) >= 0) {
|
||||
var_r29 = ANM_SIDE_ROLL_LEFT;
|
||||
} else {
|
||||
var_r29 = ANM_SIDE_ROLL_RIGHT;
|
||||
}
|
||||
} else {
|
||||
var_r29 = ANM_SIDE_ROLL_LEFT;
|
||||
}
|
||||
|
||||
f32 temp_f31 = daAlinkHIO_turnMove_c0::m.mTurnAnm.mSpeed;
|
||||
mProcVar1.field_0x300a = daAlinkHIO_turnMove_c0::m.mMaxTurnSpeed;
|
||||
|
||||
if (checkNoResetFlg0(FLG0_UNDERWATER)) {
|
||||
mProcVar1.field_0x300a = mProcVar1.field_0x300a * daAlinkHIO_magneBoots_c0::m.mWaterVelocityX;
|
||||
}
|
||||
|
||||
setSingleAnime(var_r29, temp_f31, daAlinkHIO_turnMove_c0::m.mTurnAnm.mStartFrame, daAlinkHIO_turnMove_c0::m.mTurnAnm.mEndFrame, daAlinkHIO_turnMove_c0::m.mTurnAnm.mInterpolation);
|
||||
|
||||
if (var_r29 == ANM_SIDE_ROLL_LEFT) {
|
||||
mProcVar2.field_0x300c = -0x7FF0;
|
||||
field_0x2f98 = 2;
|
||||
} else {
|
||||
mProcVar2.field_0x300c = 0x7FF0;
|
||||
field_0x2f98 = 3;
|
||||
}
|
||||
|
||||
if (temp_r28 != NULL) {
|
||||
cXyz sp8 = current.pos - temp_r28->current.pos;
|
||||
shape_angle.y = fopAcM_searchActorAngleY(this, temp_r28);
|
||||
field_0x3478 = sp8.absXZ();
|
||||
mProcVar3.field_0x300e = sp8.atan2sX_Z();
|
||||
} else {
|
||||
field_0x3478 = 200.0f;
|
||||
mProcVar3.field_0x300e = shape_angle.y + 0x8000;
|
||||
}
|
||||
|
||||
field_0x347c = (field_0x3478 - 150.0f) / mProcVar2.field_0x300c;
|
||||
voiceStart(Z2SE_AL_V_SOTOMO_ROLL);
|
||||
|
||||
if (mDemo.getDemoMode() == 0x52) {
|
||||
mProcVar0.field_0x3008 = 1;
|
||||
} else {
|
||||
mProcVar0.field_0x3008 = 0;
|
||||
}
|
||||
|
||||
setFootEffectProcType(0);
|
||||
field_0x2f9d = 4;
|
||||
dComIfGp_setPlayerStatus0(0, 4);
|
||||
|
||||
if (temp_r27 != 0) {
|
||||
onNoResetFlg0(FLG0_UNK_2);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800DE380-800DE64C 0D8CC0 02CC+00 1/0 0/0 0/0 .text procTurnMove__9daAlink_cFv */
|
||||
int daAlink_c::procTurnMove() {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
onEndResetFlg0(ERFLG0_UNK_8000000);
|
||||
s16 temp_r28 = mProcVar2.field_0x300c;
|
||||
|
||||
cLib_addCalcAngleS(&mProcVar2.field_0x300c, 0, daAlinkHIO_turnMove_c0::m.mTurnSpeedRate, mProcVar1.field_0x300a, daAlinkHIO_turnMove_c0::m.mMinTurnSpeed);
|
||||
|
||||
s16 temp_r29 = temp_r28 - mProcVar2.field_0x300c;
|
||||
if (temp_r28 > 0) {
|
||||
current.angle.y = mProcVar3.field_0x300e + 0x4000;
|
||||
} else {
|
||||
current.angle.y = mProcVar3.field_0x300e - 0x4000;
|
||||
}
|
||||
|
||||
f32 temp_f31 = current.pos.x - (field_0x3478 * cM_ssin(mProcVar3.field_0x300e));
|
||||
f32 temp_f30 = current.pos.z - (field_0x3478 * cM_scos(mProcVar3.field_0x300e));
|
||||
|
||||
mProcVar3.field_0x300e += temp_r29;
|
||||
field_0x3478 -= field_0x347c * temp_r29;
|
||||
|
||||
current.pos.x = temp_f31 + (field_0x3478 * cM_ssin(mProcVar3.field_0x300e));
|
||||
current.pos.z = temp_f30 + (field_0x3478 * cM_scos(mProcVar3.field_0x300e));
|
||||
|
||||
shape_angle.y = mProcVar3.field_0x300e + 0x8000;
|
||||
mProcVar0.field_0x3008 |= checkCutFinishJumpUp();
|
||||
|
||||
daPy_frameCtrl_c* temp_r30 = &mUnderFrameCtrl[0];
|
||||
|
||||
if (checkNoResetFlg0(FLG0_UNK_2)) {
|
||||
setUpperGuardAnime(-1.0f);
|
||||
}
|
||||
|
||||
if (checkAnmEnd(temp_r30)) {
|
||||
if (!checkAttentionLock()) {
|
||||
offNoResetFlg2(FLG2_UNK_8000000);
|
||||
}
|
||||
checkNextAction(0);
|
||||
} else if (mProcVar0.field_0x3008 != 0 && !checkNotJumpSinkLimit() && temp_r30->getFrame() > daAlinkHIO_turnMove_c0::m.mTwirlCutDelayF) {
|
||||
procCutFinishJumpUpInit();
|
||||
dComIfGp_setPlayerStatus0(0, 4);
|
||||
} else {
|
||||
if (temp_r30->getFrame() > daAlinkHIO_turnMove_c0::m.mTurnAnm.mCheckFrame) {
|
||||
onModeFlg(4);
|
||||
|
||||
if (checkNextAction(1)) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (temp_r30->checkPass(19.0f)) {
|
||||
dComIfGp_getVibration().StartShock(1, 1, cXyz(0.0f, 1.0f, 0.0f));
|
||||
}
|
||||
|
||||
if (abs(temp_r29) > 0x100) {
|
||||
field_0x2f9d = 4;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -826,7 +826,6 @@ int daAlink_c::setSyncHorse(int param_0) {
|
|||
}
|
||||
|
||||
/* 800EE64C-800EE918 0E8F8C 02CC+00 1/1 0/0 0/0 .text setSyncBoar__9daAlink_cFi */
|
||||
// NONMATCHING - regalloc, equivalent? NONMATCHING
|
||||
int daAlink_c::setSyncBoar(int param_0) {
|
||||
e_wb_class* e_wb_p = static_cast<e_wb_class*>(mRideAcKeep.getActor());
|
||||
BOOL mode_1 = checkModeFlg(1);
|
||||
|
|
@ -1021,7 +1020,6 @@ void daAlink_c::setHorseSwordUp(int param_0) {
|
|||
|
||||
/* 800EEF30-800EF050 0E9870 0120+00 9/9 0/0 0/0 .text setRideSubjectAngle__9daAlink_cFs
|
||||
*/
|
||||
// NONMATCHING - cLib_minMaxLimit regalloc
|
||||
int daAlink_c::setRideSubjectAngle(s16 param_0) {
|
||||
shape_angle.y += mBodyAngle.y;
|
||||
BOOL temp_r27 = setBodyAngleToCamera();
|
||||
|
|
@ -1033,11 +1031,11 @@ int daAlink_c::setRideSubjectAngle(s16 param_0) {
|
|||
var_r30 = daAlinkHIO_horse_c0::m.field_0x58;
|
||||
}
|
||||
|
||||
mBodyAngle.x = cLib_minMaxLimit<s16>(mBodyAngle.x, daAlinkHIO_horse_c0::m.field_0x5A, var_r30);
|
||||
mBodyAngle.x = cLib_minMaxLimit<s16>((s16)mBodyAngle.x, daAlinkHIO_horse_c0::m.field_0x5A, var_r30);
|
||||
|
||||
s16 temp_r29 = shape_angle.y - param_0;
|
||||
if (checkHorseZelda()) {
|
||||
field_0x3190 = cLib_minMaxLimit<s16>(temp_r29, -0x4000, 0x4000);
|
||||
field_0x3190 = cLib_minMaxLimit<s16>((s16)temp_r29, -0x4000, 0x4000);
|
||||
} else {
|
||||
field_0x3190 = temp_r29;
|
||||
}
|
||||
|
|
@ -1055,15 +1053,14 @@ int daAlink_c::setRideSubjectAngle(s16 param_0) {
|
|||
}
|
||||
|
||||
/* 800EF050-800EF0E8 0E9990 0098+00 7/7 0/0 0/0 .text setBodyAngleRideReadyAnime__9daAlink_cFv */
|
||||
// NONMATCHING - missing mr, probably issue with cLib_minMaxLimit implementation
|
||||
void daAlink_c::setBodyAngleRideReadyAnime() {
|
||||
setBodyAngleXReadyAnime(0);
|
||||
|
||||
s16 angle;
|
||||
if (mTargetedActor != NULL) {
|
||||
angle = cLib_minMaxLimit(
|
||||
(s16)(cLib_targetAngleY(¤t.pos, &mTargetedActor->eyePos) - shape_angle.y),
|
||||
(s16)-0x3800, (s16)0x3800);
|
||||
angle = cLib_minMaxLimit<s16>(
|
||||
cLib_targetAngleY(¤t.pos, &mTargetedActor->eyePos) - shape_angle.y,
|
||||
-0x3800, 0x3800);
|
||||
} else {
|
||||
angle = 0;
|
||||
}
|
||||
|
|
@ -2200,7 +2197,6 @@ int daAlink_c::procHorseCutTurn() {
|
|||
|
||||
/* 800F1D18-800F2028 0EC658 0310+00 2/2 0/0 0/0 .text
|
||||
* procHorseDamageInit__9daAlink_cFP12dCcD_GObjInf */
|
||||
// NONMATCHING - cLib_minMaxLimit regalloc
|
||||
int daAlink_c::procHorseDamageInit(dCcD_GObjInf* param_0) {
|
||||
commonProcInit(PROC_HORSE_DAMAGE);
|
||||
|
||||
|
|
|
|||
|
|
@ -108,7 +108,6 @@ bool daAlink_c::checkKandelaarSwing(int param_0) const {
|
|||
}
|
||||
|
||||
/* 801108EC-80110BEC 10B22C 0300+00 1/1 0/0 0/0 .text kandelaarModelCallBack__9daAlink_cFv */
|
||||
// NONMATCHING - regalloc from cLib_minMaxLimit
|
||||
int daAlink_c::kandelaarModelCallBack() {
|
||||
cXyz sp44;
|
||||
mDoMtx_multVecZero(J3DSys::mCurrentMtx, &sp44);
|
||||
|
|
|
|||
|
|
@ -273,7 +273,7 @@ int daAlink_c::procMove() {
|
|||
setBlendMoveAnime(-1.0f);
|
||||
if (field_0x3174 != 8) {
|
||||
field_0x30a0 =
|
||||
cLib_minMaxLimit2((s16)(field_0x2ff0 >> 1), daAlinkHIO_basic_c0::m.mNeckMaxUp,
|
||||
cLib_minMaxLimit<s16>((s16)(field_0x2ff0 >> 1), daAlinkHIO_basic_c0::m.mNeckMaxUp,
|
||||
daAlinkHIO_basic_c0::m.mNeckMaxDown);
|
||||
}
|
||||
}
|
||||
|
|
@ -656,7 +656,7 @@ int daAlink_c::procSlide() {
|
|||
|
||||
if (checkInputOnR()) {
|
||||
mProcVar2.field_0x300c =
|
||||
cLib_minMaxLimit2<s16>((s16)(mProcVar2.field_0x300c + sin * 256.0f), -0x1000, 0x1000);
|
||||
cLib_minMaxLimit<s16>((s16)(mProcVar2.field_0x300c + sin * 256.0f), -0x1000, 0x1000);
|
||||
} else {
|
||||
cLib_chaseS(&mProcVar2.field_0x300c, 0, 64);
|
||||
}
|
||||
|
|
@ -3677,7 +3677,160 @@ int daAlink_c::moveShadowScaleLight() {
|
|||
|
||||
/* 800CBC18-800CC25C 0C6558 0644+00 1/1 0/0 0/0 .text shadowDraw__9daAlink_cFv */
|
||||
void daAlink_c::shadowDraw() {
|
||||
// NONMATCHING
|
||||
daMidna_c* temp_r3 = getMidnaActor();
|
||||
if (temp_r3 != NULL && ((temp_r3->checkShadowModelDraw() && (field_0x2ff4 >= 0x3FF0 || !checkMidnaRide())) || temp_r3->checkShadowModelDrawDemoForce())) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!checkBoarRide()) {
|
||||
if (mProcID == PROC_WARP) {
|
||||
tevStr.field_0x344 = field_0x3484;
|
||||
}
|
||||
|
||||
u32 var_r29;
|
||||
if (checkHorseRide()) {
|
||||
var_r29 = ((daHorse_c*)dComIfGp_getHorseActor())->getShadowID();
|
||||
if (var_r29 != 0) {
|
||||
dComIfGd_addRealShadow(var_r29, mpLinkModel);
|
||||
}
|
||||
} else {
|
||||
f32 var_f31;
|
||||
if (checkModeFlg(0x40)) {
|
||||
var_f31 = field_0x33d8;
|
||||
} else {
|
||||
var_f31 = mLinkAcch.GetGroundH();
|
||||
}
|
||||
|
||||
cXyz spC(field_0x3834.x, field_0x3454, field_0x3834.z);
|
||||
|
||||
f32 var_f30;
|
||||
if (!checkWolf()) {
|
||||
if (field_0x850[0].GetC().y > field_0x850[2].GetC().y) {
|
||||
var_f30 = field_0x850[2].GetC().y;
|
||||
} else {
|
||||
var_f30 = field_0x850[0].GetC().y;
|
||||
}
|
||||
} else {
|
||||
var_f30 = field_0x850[0].GetC().y;
|
||||
}
|
||||
|
||||
s8 sp8;
|
||||
if (mWaterY > var_f31) {
|
||||
sp8 = 1;
|
||||
} else {
|
||||
sp8 = 0;
|
||||
}
|
||||
|
||||
field_0x31a4 = dComIfGd_setShadow(field_0x31a4, sp8, mpLinkModel, &spC, 800.0f, 0.0f, var_f30, var_f31, mLinkAcch.m_gnd, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex());
|
||||
var_r29 = field_0x31a4;
|
||||
}
|
||||
|
||||
if (var_r29 != 0) {
|
||||
if (checkSwordDraw()) {
|
||||
if (!checkNoResetFlg3(FLG3_UNK_80000000)) {
|
||||
dComIfGd_addRealShadow(var_r29, mSwordModel);
|
||||
}
|
||||
|
||||
if (!checkWoodSwordEquip()) {
|
||||
dComIfGd_addRealShadow(var_r29, mSheathModel);
|
||||
}
|
||||
}
|
||||
|
||||
if (checkShieldDraw()) {
|
||||
dComIfGd_addRealShadow(var_r29, mShieldModel);
|
||||
}
|
||||
|
||||
if (checkWolf()) {
|
||||
if (checkMidnaRide() && !checkCloudSea() && !temp_r3->checkShadowNoDraw() && !temp_r3->checkShadowModelDraw()) {
|
||||
dComIfGd_addRealShadow(var_r29, mpWlMidnaModel);
|
||||
|
||||
if (!temp_r3->checkNoMaskDraw() ) {
|
||||
dComIfGd_addRealShadow(var_r29, mpWlMidnaMaskModel);
|
||||
}
|
||||
|
||||
dComIfGd_addRealShadow(var_r29, mpWlMidnaHairModel);
|
||||
}
|
||||
} else {
|
||||
dComIfGd_addRealShadow(var_r29, mpLinkFaceModel);
|
||||
dComIfGd_addRealShadow(var_r29, mpLinkHatModel);
|
||||
dComIfGd_addRealShadow(var_r29, mpLinkHandModel);
|
||||
|
||||
if (field_0x2f92 == 0xFB) {
|
||||
dComIfGd_addRealShadow(var_r29, mpDemoHLTmpModel);
|
||||
}
|
||||
|
||||
if (field_0x2f93 == 0xFB) {
|
||||
dComIfGd_addRealShadow(var_r29, mpDemoHRTmpModel);
|
||||
}
|
||||
|
||||
if (mEquipItem == BOOMERANG) {
|
||||
if (mItemAcKeep.getActor() != NULL) {
|
||||
dComIfGd_addRealShadow(var_r29, mItemAcKeep.getActor()->model);
|
||||
}
|
||||
} else if (checkItemDraw()) {
|
||||
if (mEquipItem == IRONBALL) {
|
||||
if (mItemVar0.field_0x3018 == 0 || mItemVar0.field_0x3018 == 8) {
|
||||
dComIfGd_addRealShadow(var_r29, mHeldItemModel);
|
||||
} else {
|
||||
if (fopAcM_gc_c::gndCheck(&mIronBallBgChkPos)) {
|
||||
field_0x32d4 = dComIfGd_setShadow(field_0x32d4, 0, mHeldItemModel, &mIronBallCenterPos, 150.0f, 32.0f, mIronBallBgChkPos.y, fopAcM_gc_c::getGroundY(), *fopAcM_gc_c::getGroundCheck(), &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
changeHookshotDrawModel();
|
||||
dComIfGd_addRealShadow(var_r29, mHeldItemModel);
|
||||
|
||||
if (checkHookshotItem(mEquipItem)) {
|
||||
if (checkHookshotWait() && !dComIfGp_checkPlayerStatus1(0, 0x10000)) {
|
||||
dComIfGd_addRealShadow(var_r29, mpHookTipModel);
|
||||
}
|
||||
|
||||
if (mEquipItem == W_HOOKSHOT && !checkPlayerGuardAndAttack() && !checkNoResetFlg0(FLG0_UNK_2)) {
|
||||
dComIfGd_addRealShadow(var_r29, field_0x0710);
|
||||
|
||||
if (!dComIfGp_checkPlayerStatus1(0, 0x10000)) {
|
||||
dComIfGd_addRealShadow(var_r29, field_0x0714);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
changeHookshotDrawModel();
|
||||
}
|
||||
}
|
||||
|
||||
if (checkNoResetFlg2(FLG2_UNK_1)) {
|
||||
dComIfGd_addRealShadow(var_r29, mpKanteraModel);
|
||||
}
|
||||
|
||||
if (checkEquipHeavyBoots()) {
|
||||
for (int i = 0; i < 2; i++) {
|
||||
dComIfGd_addRealShadow(var_r29, mpLinkBootModels[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (checkSpinnerRide()) {
|
||||
fopAc_ac_c* temp_r3_6 = fopAcM_SearchByID(mRideAcKeep.getID());
|
||||
if (temp_r3_6 != NULL) {
|
||||
dComIfGd_addRealShadow(var_r29, temp_r3_6->model);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mGrabItemAcKeep.getID() != fpcM_ERROR_PROCESS_ID_e) {
|
||||
fopAc_ac_c* temp_r3_7 = fopAcM_SearchByID(mGrabItemAcKeep.getID());
|
||||
if (temp_r3_7 != NULL && temp_r3_7->model != NULL) {
|
||||
dComIfGd_addRealShadow(var_r29, temp_r3_7->model);
|
||||
}
|
||||
}
|
||||
|
||||
if (dComIfGp_checkPlayerStatus1(0, 0x10000) && mCargoCarryAcKeep.getID() != fpcM_ERROR_PROCESS_ID_e) {
|
||||
fopAc_ac_c* temp_r3_8 = fopAcM_SearchByID(mCargoCarryAcKeep.getID());
|
||||
if (temp_r3_8 != NULL && temp_r3_8->model != NULL) {
|
||||
dComIfGd_addRealShadow(var_r29, temp_r3_8->model);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 800CC25C-800CC298 0C6B9C 003C+00 3/3 0/0 0/0 .text modelCalc__9daAlink_cFP8J3DModel */
|
||||
|
|
@ -4224,13 +4377,86 @@ int daAlink_c::checkSubjectAction() {
|
|||
}
|
||||
|
||||
/* 800CE728-800CE8A0 0C9068 0178+00 1/1 0/0 0/0 .text checkBodyAngleX__9daAlink_cFs */
|
||||
void daAlink_c::checkBodyAngleX(s16 param_0) {
|
||||
// NONMATCHING
|
||||
s16 daAlink_c::checkBodyAngleX(s16 param_0) {
|
||||
if (checkWolf() || mProcID == PROC_PEEP_SUBJECTIVITY || mProcID == PROC_HOOKSHOT_WALL_SHOOT) {
|
||||
return param_0;
|
||||
}
|
||||
|
||||
Vec sp2C = {0.0f, 0.0f, 0.0f};
|
||||
sp2C.y = 0.5f * field_0x598;
|
||||
|
||||
cXyz sp20;
|
||||
mDoMtx_multVecZero(mpLinkModel->getAnmMtx(1), &sp20);
|
||||
cXyz sp14;
|
||||
|
||||
if (param_0 >= 0) {
|
||||
sp2C.z = 25.0f;
|
||||
} else {
|
||||
sp2C.z = -25.0f;
|
||||
}
|
||||
|
||||
mDoMtx_stack_c::transS(sp20);
|
||||
concatMagneBootMtx();
|
||||
mDoMtx_stack_c::ZXYrotM(param_0, shape_angle.y, 0);
|
||||
mDoMtx_stack_c::multVec(&sp2C, &sp14);
|
||||
|
||||
if (commonLineCheck(&sp20, &sp14)) {
|
||||
cXyz sp8 = sp14 - mLinkLinChk.i_GetCross();
|
||||
multVecMagneBootInvMtx(&sp8);
|
||||
|
||||
current.pos.x -= sp8.x;
|
||||
current.pos.z -= sp8.z;
|
||||
}
|
||||
|
||||
return param_0;
|
||||
}
|
||||
|
||||
/* 800CE8A0-800CEAF4 0C91E0 0254+00 15/15 0/0 0/0 .text setBodyAngleToCamera__9daAlink_cFv */
|
||||
BOOL daAlink_c::setBodyAngleToCamera() {
|
||||
// NONMATCHING
|
||||
if (dComIfGp_checkCameraAttentionStatus(field_0x317c, 0x10)) {
|
||||
field_0x310e = field_0x310a;
|
||||
field_0x3110 = field_0x310c;
|
||||
onEndResetFlg2(ERFLG2_UNK_20);
|
||||
|
||||
s16 sp8;
|
||||
if (checkInputOnR()) {
|
||||
f32 var_f31 = 512.0f * field_0x33ac * field_0x33ac;
|
||||
if (checkWolfEyeUp()) {
|
||||
var_f31 *= 0.6f;
|
||||
}
|
||||
|
||||
if (dComIfGp_checkPlayerStatus0(0, 0x200000)) {
|
||||
var_f31 /= dComIfGp_getCameraZoomScale(field_0x317c);
|
||||
}
|
||||
|
||||
shape_angle.y = shape_angle.y + (var_f31 * cM_ssin(mStickAngle));
|
||||
sp8 = mBodyAngle.x + (var_f31 * cM_scos(mStickAngle));
|
||||
|
||||
if (checkNotItemSinkLimit() && sp8 > 0 && sp8 > mBodyAngle.x) {
|
||||
sp8 = mBodyAngle.x;
|
||||
}
|
||||
} else {
|
||||
sp8 = mBodyAngle.x;
|
||||
}
|
||||
|
||||
if (checkNotItemSinkLimit() && sp8 > 0) {
|
||||
cLib_addCalcAngleS(&sp8, 0, 5, 0x1000, 0x400);
|
||||
}
|
||||
|
||||
s16 var_r29;
|
||||
if (!dComIfGp_checkPlayerStatus0(0, 0x202000) && mEquipItem == IRONBALL) {
|
||||
var_r29 = -10000;
|
||||
} else {
|
||||
var_r29 = daAlinkHIO_item_c0::m.mItemFPUpMaxUnk;
|
||||
}
|
||||
|
||||
mBodyAngle.x = cLib_minMaxLimit<s16>((s16)sp8, var_r29, daAlinkHIO_item_c0::m.mItemFPMaxUnk);
|
||||
checkBodyAngleX(mBodyAngle.x);
|
||||
field_0x310a = mBodyAngle.x;
|
||||
field_0x310c = shape_angle.y;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1414,7 +1414,6 @@ int daAlink_c::procSwimHookshotMove() {
|
|||
|
||||
/* 8010519C-80105728 0FFADC 058C+00 1/1 0/0 0/0 .text
|
||||
* procSwimDamageInit__9daAlink_cFP12dCcD_GObjInf */
|
||||
// NONMATCHING - cLib_minMaxLimit regalloc issue
|
||||
int daAlink_c::procSwimDamageInit(dCcD_GObjInf* param_0) {
|
||||
seStartOnlyReverb(Z2SE_AL_DAMAGE_NORMAL);
|
||||
dComIfGp_getVibration().StartShock(2, 31, cXyz(0.0f, 1.0f, 0.0f));
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -52,7 +52,7 @@ void dEyeHL_mng_c::update() {
|
|||
for (; obj != NULL; obj = obj->m_next) {
|
||||
ResTIMG* timg = obj->m_timg;
|
||||
timg->LODBias = obj->m_lodBias + tmp;
|
||||
timg->LODBias = cLib_minMaxLimit<s16>(timg->LODBias, -400, 399);
|
||||
timg->LODBias = cLib_minMaxLimit<s16>((s16)timg->LODBias, -400, 399);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -113,4 +113,4 @@ u8 struct_80450FB8[4];
|
|||
extern u8 struct_80450FBC[4];
|
||||
u8 struct_80450FBC[4];
|
||||
|
||||
/* 8037B100-8037B100 007760 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
/* 8037B100-8037B100 007760 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
|
|
|
|||
|
|
@ -0,0 +1,419 @@
|
|||
from argparse import ArgumentParser
|
||||
import struct
|
||||
import os
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class GXBPRegs(Enum):
|
||||
GX_BP_REG_GENMODE = 0x0
|
||||
|
||||
GX_BP_REG_DISPCOPYFILTER0 = 0x1
|
||||
GX_BP_REG_DISPCOPYFILTER1 = 0x2
|
||||
GX_BP_REG_DISPCOPYFILTER2 = 0x3
|
||||
GX_BP_REG_DISPCOPYFILTER3 = 0x4
|
||||
|
||||
GX_BP_REG_INDMTX0A = 0x6
|
||||
GX_BP_REG_INDMTX0B = 0x7
|
||||
GX_BP_REG_INDMTX0C = 0x8
|
||||
GX_BP_REG_INDMTX1A = 0x9
|
||||
GX_BP_REG_INDMTX1B = 0xA
|
||||
GX_BP_REG_INDMTX1C = 0xB
|
||||
GX_BP_REG_INDMTX2A = 0xC
|
||||
GX_BP_REG_INDMTX2B = 0xD
|
||||
GX_BP_REG_INDMTX2C = 0xE
|
||||
GX_BP_REG_INDIMASK = 0xF
|
||||
|
||||
GX_BP_REG_INDTEVSTAGE0 = 0x10
|
||||
GX_BP_REG_INDTEVSTAGE1 = 0x11
|
||||
GX_BP_REG_INDTEVSTAGE2 = 0x12
|
||||
GX_BP_REG_INDTEVSTAGE3 = 0x13
|
||||
GX_BP_REG_INDTEVSTAGE4 = 0x14
|
||||
GX_BP_REG_INDTEVSTAGE5 = 0x15
|
||||
GX_BP_REG_INDTEVSTAGE6 = 0x16
|
||||
GX_BP_REG_INDTEVSTAGE7 = 0x17
|
||||
GX_BP_REG_INDTEVSTAGE8 = 0x18
|
||||
GX_BP_REG_INDTEVSTAGE9 = 0x19
|
||||
GX_BP_REG_INDTEVSTAGE10 = 0x1A
|
||||
GX_BP_REG_INDTEVSTAGE11 = 0x1B
|
||||
GX_BP_REG_INDTEVSTAGE12 = 0x1C
|
||||
GX_BP_REG_INDTEVSTAGE13 = 0x1D
|
||||
GX_BP_REG_INDTEVSTAGE14 = 0x1E
|
||||
GX_BP_REG_INDTEVSTAGE15 = 0x1F
|
||||
|
||||
GX_BP_REG_SCISSORTL = 0x20
|
||||
GX_BP_REG_SCISSORBR = 0x21
|
||||
GX_BP_REG_LINEPTWIDTH = 0x22
|
||||
GX_BP_REG_PERF0TRI = 0x23
|
||||
GX_BP_REG_PERF0QUAD = 0x24
|
||||
|
||||
GX_BP_REG_RAS1_SS0 = 0x25
|
||||
GX_BP_REG_RAS1_SS1 = 0x26
|
||||
GX_BP_REG_RAS1_IREF = 0x27
|
||||
GX_BP_REG_RAS1_TREF0 = 0x28
|
||||
GX_BP_REG_RAS1_TREF1 = 0x29
|
||||
GX_BP_REG_RAS1_TREF2 = 0x2A
|
||||
GX_BP_REG_RAS1_TREF3 = 0x2B
|
||||
GX_BP_REG_RAS1_TREF4 = 0x2C
|
||||
GX_BP_REG_RAS1_TREF5 = 0x2D
|
||||
GX_BP_REG_RAS1_TREF6 = 0x2E
|
||||
GX_BP_REG_RAS1_TREF7 = 0x2F
|
||||
|
||||
GX_BP_REG_SU_SSIZE0 = 0x30
|
||||
GX_BP_REG_SU_TSIZE0 = 0x31
|
||||
GX_BP_REG_SU_SSIZE1 = 0x32
|
||||
GX_BP_REG_SU_TSIZE1 = 0x33
|
||||
GX_BP_REG_SU_SSIZE2 = 0x34
|
||||
GX_BP_REG_SU_TSIZE2 = 0x35
|
||||
GX_BP_REG_SU_SSIZE3 = 0x36
|
||||
GX_BP_REG_SU_TSIZE3 = 0x37
|
||||
GX_BP_REG_SU_SSIZE4 = 0x38
|
||||
GX_BP_REG_SU_TSIZE4 = 0x39
|
||||
GX_BP_REG_SU_SSIZE5 = 0x3A
|
||||
GX_BP_REG_SU_TSIZE5 = 0x3B
|
||||
GX_BP_REG_SU_SSIZE6 = 0x3C
|
||||
GX_BP_REG_SU_TSIZE6 = 0x3D
|
||||
GX_BP_REG_SU_SSIZE7 = 0x3E
|
||||
GX_BP_REG_SU_TSIZE7 = 0x3F
|
||||
|
||||
GX_BP_REG_ZMODE = 0x40
|
||||
GX_BP_REG_BLENDMODE = 0x41
|
||||
GX_BP_REG_DSTALPHA = 0x42
|
||||
GX_BP_REG_ZCONTROL = 0x43
|
||||
GX_BP_REG_FIELDMASK = 0x44
|
||||
GX_BP_REG_DRAWDONE = 0x45
|
||||
GX_BP_REG_PETOKEN = 0x47
|
||||
GX_BP_REG_PETOKENINT = 0x48
|
||||
|
||||
GX_BP_REG_TEXCOPYSRCXY = 0x49
|
||||
GX_BP_REG_TEXCOPYSRCWH = 0x4A
|
||||
GX_BP_REG_TEXCOPYDST = 0x4B
|
||||
GX_BP_REG_DISPCOPYSTRIDE = 0x4D
|
||||
GX_BP_REG_DISPCOPYSCALEY = 0x4E
|
||||
GX_BP_REG_COPYCLEARAR = 0x4F
|
||||
GX_BP_REG_COPYCLEARGB = 0x50
|
||||
GX_BP_REG_COPYCLEARZ = 0x51
|
||||
GX_BP_REG_COPYFILTER0 = 0x53
|
||||
GX_BP_REG_COPYFILTER1 = 0x54
|
||||
|
||||
GX_BP_REG_BOUNDINGBOX0 = 0x55
|
||||
GX_BP_REG_BOUNDINGBOX1 = 0x56
|
||||
|
||||
GX_BP_REG_SCISSOROFFSET = 0x59
|
||||
|
||||
GX_BP_REG_TMEMPRELOADADDR = 0x60
|
||||
GX_BP_REG_TMEMPRELOADEVEN = 0x61
|
||||
GX_BP_REG_TMEMPRELOADODD = 0x62
|
||||
GX_BP_REG_TMEMPRELOADMODE = 0x63
|
||||
GX_BP_REG_TMEMTLUTSRC = 0x64
|
||||
GX_BP_REG_TMEMTLUTDST = 0x65
|
||||
GX_BP_REG_TMEMTEXINVALIDATE = 0x66
|
||||
|
||||
GX_BP_REG_PERF1 = 0x67
|
||||
GX_BP_REG_FIELDMODE = 0x68
|
||||
|
||||
GX_BP_REG_SETMODE0_TEX0 = 0x80
|
||||
GX_BP_REG_SETMODE0_TEX1 = 0x81
|
||||
GX_BP_REG_SETMODE0_TEX2 = 0x82
|
||||
GX_BP_REG_SETMODE0_TEX3 = 0x83
|
||||
GX_BP_REG_SETMODE1_TEX0 = 0x84
|
||||
GX_BP_REG_SETMODE1_TEX1 = 0x85
|
||||
GX_BP_REG_SETMODE1_TEX2 = 0x86
|
||||
GX_BP_REG_SETMODE1_TEX3 = 0x87
|
||||
|
||||
GX_BP_REG_SETIMAGE0_TEX0 = 0x88
|
||||
GX_BP_REG_SETIMAGE0_TEX1 = 0x89
|
||||
GX_BP_REG_SETIMAGE0_TEX2 = 0x8A
|
||||
GX_BP_REG_SETIMAGE0_TEX3 = 0x8B
|
||||
GX_BP_REG_SETIMAGE1_TEX0 = 0x8C
|
||||
GX_BP_REG_SETIMAGE1_TEX1 = 0x8D
|
||||
GX_BP_REG_SETIMAGE1_TEX2 = 0x8E
|
||||
GX_BP_REG_SETIMAGE1_TEX3 = 0x8F
|
||||
GX_BP_REG_SETIMAGE2_TEX0 = 0x90
|
||||
GX_BP_REG_SETIMAGE2_TEX1 = 0x91
|
||||
GX_BP_REG_SETIMAGE2_TEX2 = 0x92
|
||||
GX_BP_REG_SETIMAGE2_TEX3 = 0x93
|
||||
GX_BP_REG_SETIMAGE3_TEX0 = 0x94
|
||||
GX_BP_REG_SETIMAGE3_TEX1 = 0x95
|
||||
GX_BP_REG_SETIMAGE3_TEX2 = 0x96
|
||||
GX_BP_REG_SETIMAGE3_TEX3 = 0x97
|
||||
|
||||
GX_BP_REG_SETTLUT_TEX0 = 0x98
|
||||
GX_BP_REG_SETTLUT_TEX1 = 0x99
|
||||
GX_BP_REG_SETTLUT_TEX2 = 0x9A
|
||||
GX_BP_REG_SETTLUT_TEX3 = 0x9B
|
||||
|
||||
GX_BP_REG_SETMODE0_TEX4 = 0xA0
|
||||
GX_BP_REG_SETMODE0_TEX5 = 0xA1
|
||||
GX_BP_REG_SETMODE0_TEX6 = 0xA2
|
||||
GX_BP_REG_SETMODE0_TEX7 = 0xA3
|
||||
GX_BP_REG_SETMODE1_TEX4 = 0xA4
|
||||
GX_BP_REG_SETMODE1_TEX5 = 0xA5
|
||||
GX_BP_REG_SETMODE1_TEX6 = 0xA6
|
||||
GX_BP_REG_SETMODE1_TEX7 = 0xA7
|
||||
|
||||
GX_BP_REG_SETIMAGE0_TEX4 = 0xA8
|
||||
GX_BP_REG_SETIMAGE0_TEX5 = 0xA9
|
||||
GX_BP_REG_SETIMAGE0_TEX6 = 0xAA
|
||||
GX_BP_REG_SETIMAGE0_TEX7 = 0xAB
|
||||
GX_BP_REG_SETIMAGE1_TEX4 = 0xAC
|
||||
GX_BP_REG_SETIMAGE1_TEX5 = 0xAD
|
||||
GX_BP_REG_SETIMAGE1_TEX6 = 0xAE
|
||||
GX_BP_REG_SETIMAGE1_TEX7 = 0xAF
|
||||
GX_BP_REG_SETIMAGE2_TEX4 = 0xB0
|
||||
GX_BP_REG_SETIMAGE2_TEX5 = 0xB1
|
||||
GX_BP_REG_SETIMAGE2_TEX6 = 0xB2
|
||||
GX_BP_REG_SETIMAGE2_TEX7 = 0xB3
|
||||
GX_BP_REG_SETIMAGE3_TEX4 = 0xB4
|
||||
GX_BP_REG_SETIMAGE3_TEX5 = 0xB5
|
||||
GX_BP_REG_SETIMAGE3_TEX6 = 0xB6
|
||||
GX_BP_REG_SETIMAGE3_TEX7 = 0xB7
|
||||
|
||||
GX_BP_REG_SETTLUT_TEX4 = 0xB8
|
||||
GX_BP_REG_SETTLUT_TEX5 = 0xB9
|
||||
GX_BP_REG_SETTLUT_TEX6 = 0xBA
|
||||
GX_BP_REG_SETTLUT_TEX7 = 0xBB
|
||||
|
||||
GX_BP_REG_TEVCOLORCOMBINER0 = 0xC0
|
||||
GX_BP_REG_TEVALPHACOMBINER0 = 0xC1
|
||||
GX_BP_REG_TEVCOLORCOMBINER1 = 0xC2
|
||||
GX_BP_REG_TEVALPHACOMBINER1 = 0xC3
|
||||
GX_BP_REG_TEVCOLORCOMBINER2 = 0xC4
|
||||
GX_BP_REG_TEVALPHACOMBINER2 = 0xC5
|
||||
GX_BP_REG_TEVCOLORCOMBINER3 = 0xC6
|
||||
GX_BP_REG_TEVALPHACOMBINER3 = 0xC7
|
||||
GX_BP_REG_TEVCOLORCOMBINER4 = 0xC8
|
||||
GX_BP_REG_TEVALPHACOMBINER4 = 0xC9
|
||||
GX_BP_REG_TEVCOLORCOMBINER5 = 0xCA
|
||||
GX_BP_REG_TEVALPHACOMBINER5 = 0xCB
|
||||
GX_BP_REG_TEVCOLORCOMBINER6 = 0xCC
|
||||
GX_BP_REG_TEVALPHACOMBINER6 = 0xCD
|
||||
GX_BP_REG_TEVCOLORCOMBINER7 = 0xCE
|
||||
GX_BP_REG_TEVALPHACOMBINER7 = 0xCF
|
||||
GX_BP_REG_TEVCOLORCOMBINER8 = 0xD0
|
||||
GX_BP_REG_TEVALPHACOMBINER8 = 0xD1
|
||||
GX_BP_REG_TEVCOLORCOMBINER9 = 0xD2
|
||||
GX_BP_REG_TEVALPHACOMBINER9 = 0xD3
|
||||
GX_BP_REG_TEVCOLORCOMBINER10 = 0xD4
|
||||
GX_BP_REG_TEVALPHACOMBINER10 = 0xD5
|
||||
GX_BP_REG_TEVCOLORCOMBINER11 = 0xD6
|
||||
GX_BP_REG_TEVALPHACOMBINER11 = 0xD7
|
||||
GX_BP_REG_TEVCOLORCOMBINER12 = 0xD8
|
||||
GX_BP_REG_TEVALPHACOMBINER12 = 0xD9
|
||||
GX_BP_REG_TEVCOLORCOMBINER13 = 0xDA
|
||||
GX_BP_REG_TEVALPHACOMBINER13 = 0xDB
|
||||
GX_BP_REG_TEVCOLORCOMBINER14 = 0xDC
|
||||
GX_BP_REG_TEVALPHACOMBINER14 = 0xDD
|
||||
GX_BP_REG_TEVCOLORCOMBINER15 = 0xDE
|
||||
GX_BP_REG_TEVALPHACOMBINER15 = 0xDF
|
||||
|
||||
GX_BP_REG_TEVREG0LO = 0xE0
|
||||
GX_BP_REG_TEVREG0HI = 0xE1
|
||||
GX_BP_REG_TEVREG1LO = 0xE2
|
||||
GX_BP_REG_TEVREG1HI = 0xE3
|
||||
GX_BP_REG_TEVREG2LO = 0xE4
|
||||
GX_BP_REG_TEVREG2HI = 0xE5
|
||||
GX_BP_REG_TEVREG3LO = 0xE6
|
||||
GX_BP_REG_TEVREG3HI = 0xE7
|
||||
|
||||
GX_BP_REG_FOGRANGE = 0xE8
|
||||
GX_BP_REG_FOGRANGEK0 = 0xE9
|
||||
GX_BP_REG_FOGRANGEK1 = 0xEA
|
||||
GX_BP_REG_FOGRANGEK2 = 0xEB
|
||||
GX_BP_REG_FOGRANGEK3 = 0xEC
|
||||
GX_BP_REG_FOGRANGEK4 = 0xED
|
||||
GX_BP_REG_FOGPARAM0 = 0xEE
|
||||
GX_BP_REG_FOGPARAM1 = 0xEF
|
||||
GX_BP_REG_FOGPARAM2 = 0xF0
|
||||
GX_BP_REG_FOGPARAM3 = 0xF1
|
||||
GX_BP_REG_FOGCOLOR = 0xF2
|
||||
|
||||
GX_BP_REG_ALPHACOMPARE = 0xF3
|
||||
GX_BP_REG_ZTEXTURE0 = 0xF4
|
||||
GX_BP_REG_ZTEXTURE1 = 0xF5
|
||||
|
||||
GX_BP_REG_TEVKSEL0 = 0xF6
|
||||
GX_BP_REG_TEVKSEL1 = 0xF7
|
||||
GX_BP_REG_TEVKSEL2 = 0xF8
|
||||
GX_BP_REG_TEVKSEL3 = 0xF9
|
||||
GX_BP_REG_TEVKSEL4 = 0xFA
|
||||
GX_BP_REG_TEVKSEL5 = 0xFB
|
||||
GX_BP_REG_TEVKSEL6 = 0xFC
|
||||
GX_BP_REG_TEVKSEL7 = 0xFD
|
||||
|
||||
GX_BP_REG_SSMASK = 0xFE
|
||||
|
||||
|
||||
class GXXFRegs(Enum):
|
||||
GX_XF_REG_ERROR = 0x1000
|
||||
GX_XF_REG_DIAGNOSTICS = 0x1001
|
||||
GX_XF_REG_STATE0 = 0x1002
|
||||
GX_XF_REG_STATE1 = 0x1003
|
||||
GX_XF_REG_CLOCK = 0x1004
|
||||
GX_XF_REG_CLIPDISABLE = 0x1005
|
||||
GX_XF_REG_PERF0 = 0x1006
|
||||
GX_XF_REG_PERF1 = 0x1007
|
||||
GX_XF_REG_INVERTEXSPEC = 0x1008
|
||||
GX_XF_REG_NUMCOLORS = 0x1009
|
||||
GX_XF_REG_AMBIENT0 = 0x100A
|
||||
GX_XF_REG_AMBIENT1 = 0x100B
|
||||
GX_XF_REG_MATERIAL0 = 0x100C
|
||||
GX_XF_REG_MATERIAL1 = 0x100D
|
||||
GX_XF_REG_COLOR0CNTRL = 0x100E
|
||||
GX_XF_REG_COLOR1CNTRL = 0x100F
|
||||
GX_XF_REG_ALPHA0CNTRL = 0x1010
|
||||
GX_XF_REG_ALPHA1CNTRL = 0x1011
|
||||
GX_XF_REG_DUALTEXTRAN = 0x1012
|
||||
GX_XF_REG_MATRIXINDEX0 = 0x1018
|
||||
GX_XF_REG_MATRIXINDEX1 = 0x1019
|
||||
GX_XF_REG_SCALEX = 0x101A
|
||||
GX_XF_REG_SCALEY = 0x101B
|
||||
GX_XF_REG_SCALEZ = 0x101C
|
||||
GX_XF_REG_OFFSETX = 0x101D
|
||||
GX_XF_REG_OFFSETY = 0x101E
|
||||
GX_XF_REG_OFFSETZ = 0x101F
|
||||
GX_XF_REG_PROJECTIONA = 0x1020
|
||||
GX_XF_REG_PROJECTIONB = 0x1021
|
||||
GX_XF_REG_PROJECTIONC = 0x1022
|
||||
GX_XF_REG_PROJECTIOND = 0x1023
|
||||
GX_XF_REG_PROJECTIONE = 0x1024
|
||||
GX_XF_REG_PROJECTIONF = 0x1025
|
||||
GX_XF_REG_PROJECTORTHO = 0x1026
|
||||
GX_XF_REG_NUMTEX = 0x103F
|
||||
GX_XF_REG_TEX0 = 0x1040
|
||||
GX_XF_REG_TEX1 = 0x1041
|
||||
GX_XF_REG_TEX2 = 0x1042
|
||||
GX_XF_REG_TEX3 = 0x1043
|
||||
GX_XF_REG_TEX4 = 0x1044
|
||||
GX_XF_REG_TEX5 = 0x1045
|
||||
GX_XF_REG_TEX6 = 0x1046
|
||||
GX_XF_REG_TEX7 = 0x1047
|
||||
GX_XF_REG_DUALTEX0 = 0x1050
|
||||
GX_XF_REG_DUALTEX1 = 0x1051
|
||||
GX_XF_REG_DUALTEX2 = 0x1052
|
||||
GX_XF_REG_DUALTEX3 = 0x1053
|
||||
GX_XF_REG_DUALTEX4 = 0x1054
|
||||
GX_XF_REG_DUALTEX5 = 0x1055
|
||||
GX_XF_REG_DUALTEX6 = 0x1056
|
||||
GX_XF_REG_DUALTEX7 = 0x1057
|
||||
|
||||
|
||||
class GXCPRegs(Enum):
|
||||
GX_CP_REG_MTXIDXA = 0x30
|
||||
GX_CP_REG_MTXIDXB = 0x40
|
||||
GX_CP_REG_VCD_LO = 0x50
|
||||
GX_CP_REG_VCD_HI = 0x60
|
||||
GX_CP_REG_VAT_GRP0 = 0x70
|
||||
GX_CP_REG_VAT_GRP1 = 0x80
|
||||
GX_CP_REG_VAT_GRP2 = 0x90
|
||||
GX_CP_REG_ARRAYBASE = 0xA0
|
||||
GX_CP_REG_ARRAYSTRIDE = 0xB0
|
||||
|
||||
|
||||
def read_u8(binary_file):
|
||||
chunk = binary_file.read(1)
|
||||
if len(chunk) < 1:
|
||||
return None
|
||||
return struct.unpack(">B", chunk)[0]
|
||||
|
||||
def read_u16(binary_file):
|
||||
chunk = binary_file.read(2)
|
||||
if len(chunk) < 1:
|
||||
return None
|
||||
return struct.unpack(">H", chunk)[0]
|
||||
|
||||
|
||||
def convert_binary_to_matDL_c_source(src_path, dest_path, symbol_name):
|
||||
# Load data
|
||||
macro_name = os.path.splitext(os.path.basename(src_path))[0]
|
||||
with open(src_path, "rb") as binary_file, open(dest_path, "w") as c_file:
|
||||
c_file.write("#ifndef LOAD_BP_REG\n")
|
||||
c_file.write("#define U32_AS_U8(v) ((u8)((v) >> 24)), ((u8)((v) >> 16)), ((u8)((v) >> 8)), ((u8)((v) >> 0))\n")
|
||||
c_file.write("#define U24_AS_U8(v) ((u8)((v) >> 16)), ((u8)((v) >> 8)), ((u8)((v) >> 0))\n")
|
||||
c_file.write("#define U16_AS_U8(v) ((u8)((v) >> 8)), ((u8)((v) >> 0))\n")
|
||||
c_file.write("#define IMAGE_ADDR(addr) (u32)(addr) >> 5\n")
|
||||
c_file.write("#define LOAD_BP_REG(reg, value) GX_CMD_LOAD_BP_REG, reg, U24_AS_U8(value)\n")
|
||||
c_file.write("#define LOAD_XF_REG(reg, num_args, ...) GX_CMD_LOAD_XF_REG, U16_AS_U8(num_args-1), U16_AS_U8(reg), __VA_ARGS__\n")
|
||||
c_file.write("#define LOAD_CP_REG(reg, value) GX_CMD_LOAD_CP_REG, reg, U32_AS_U8(value)\n")
|
||||
c_file.write("#endif\n\n")
|
||||
|
||||
def write_macro_line(line):
|
||||
line_with_escape = line + (" "*(99-len(line))) + "\\\n"
|
||||
c_file.write(line_with_escape)
|
||||
|
||||
write_macro_line(f"#define {macro_name}(TEX_NAME)")
|
||||
write_macro_line(f"u8 {symbol_name}[] ALIGN_DECL(32) = {{")
|
||||
|
||||
while True:
|
||||
print(binary_file.tell())
|
||||
command_type = read_u8(binary_file)
|
||||
if command_type is None:
|
||||
break
|
||||
|
||||
line_elements = []
|
||||
def add_byte_to_line(byte):
|
||||
line_elements.append(f"0x{byte:02X}")
|
||||
def add_string_to_line(string):
|
||||
line_elements.append(string)
|
||||
|
||||
if command_type == 0x61:
|
||||
# BP Command
|
||||
register = GXBPRegs(read_u8(binary_file))
|
||||
value = read_u8(binary_file) << 16 | read_u8(binary_file) << 8 | read_u8(binary_file) << 0
|
||||
if register == GXBPRegs.GX_BP_REG_SETIMAGE3_TEX0:
|
||||
value_string = f"IMAGE_ADDR(TEX_NAME)"
|
||||
elif register == GXBPRegs.GX_BP_REG_SU_SSIZE0:
|
||||
value_string = f"TEX_NAME ## __width"
|
||||
elif register == GXBPRegs.GX_BP_REG_SU_TSIZE0:
|
||||
value_string = f"TEX_NAME ## __height"
|
||||
else:
|
||||
value_string = f"0x{value:06X}"
|
||||
add_string_to_line(f"LOAD_BP_REG({register.name}, {value_string})")
|
||||
|
||||
elif command_type == 0x10:
|
||||
# XF Command
|
||||
num_args = 1 + read_u16(binary_file)
|
||||
assert num_args <= 0x10
|
||||
register = GXXFRegs(read_u16(binary_file))
|
||||
arg_bytes = []
|
||||
for i in range(4 * num_args):
|
||||
arg_bytes.append(read_u8(binary_file))
|
||||
args_string = ", ".join(f"0x{byte:02X}" for byte in arg_bytes)
|
||||
add_string_to_line(f"LOAD_XF_REG({register.name}, {num_args}, {args_string})")
|
||||
|
||||
elif command_type == 0x08:
|
||||
# CP Command
|
||||
register = GXCPRegs(read_u8(binary_file))
|
||||
value = read_u8(binary_file) << 24 | read_u8(binary_file) << 16 | read_u8(binary_file) << 8 | read_u8(binary_file) << 0
|
||||
add_string_to_line(f"LOAD_CP_REG({register.name}, 0x{value:08X})")
|
||||
|
||||
elif command_type == 0x00:
|
||||
add_byte_to_line(command_type)
|
||||
|
||||
while len(line_elements) < 0x10:
|
||||
byte = read_u8(binary_file)
|
||||
assert byte == 0x00
|
||||
add_byte_to_line(byte)
|
||||
|
||||
else:
|
||||
raise Exception(f"Unknown command type: {command_type:02X}")
|
||||
|
||||
print(line_elements)
|
||||
write_macro_line(" " + ", ".join(line_elements) + ",")
|
||||
|
||||
c_file.write("};\n")
|
||||
|
||||
|
||||
def main():
|
||||
parser = ArgumentParser(
|
||||
description="Converts a binary file containing a material display list to a macro for defining an array of u8 type"
|
||||
)
|
||||
parser.add_argument("src_path", type=str, help="Binary source file path")
|
||||
parser.add_argument("dest_path", type=str, help="Destination C include file path")
|
||||
parser.add_argument("--symbol", type=str, help="Symbol name")
|
||||
|
||||
args = parser.parse_args()
|
||||
convert_binary_to_matDL_c_source(args.src_path, args.dest_path, args.symbol)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Reference in New Issue