mirror of
https://github.com/zeldaret/tp
synced 2026-05-23 06:54:28 -04:00
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:
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
+23
-36
@@ -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 */
|
||||
|
||||
+2035
-112
File diff suppressed because it is too large
Load Diff
+402
-37
@@ -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));
|
||||
|
||||
+1594
-35
File diff suppressed because it is too large
Load Diff
+37
-926
File diff suppressed because it is too large
Load Diff
+5
-2129
File diff suppressed because it is too large
Load Diff
+4
-4699
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -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()
|
||||
Reference in New Issue
Block a user