mirror of https://github.com/zeldaret/tp
Work on weak function ordering (#2917)
* Fix functionvalue weak func order * Add script to help diffing weak function order * Improve alink weak func order (44 -> 15) * Improve m_Do_ext weak order (12 -> 7) * Remove old hack * Fix d_a_tbox weak func order * Fix d_a_npc_ks weak func order * Fix error when trying to diff weak func order for ShieldD due to hidden function alignment gap symbols
This commit is contained in:
parent
e6b1f3a4f2
commit
ae9fa8922a
|
|
@ -964,7 +964,7 @@ config.libs = [
|
|||
[
|
||||
Object(MatchingFor(ALL_GCN), "JSystem/JStudio/JStudio/ctb.cpp"),
|
||||
Object(MatchingFor(ALL_GCN, "Shield", "ShieldD"), "JSystem/JStudio/JStudio/ctb-data.cpp"),
|
||||
Object(Equivalent, "JSystem/JStudio/JStudio/functionvalue.cpp"), # weak func order
|
||||
Object(MatchingFor(ALL_GCN), "JSystem/JStudio/JStudio/functionvalue.cpp"),
|
||||
Object(MatchingFor(ALL_GCN), "JSystem/JStudio/JStudio/fvb.cpp"),
|
||||
Object(MatchingFor(ALL_GCN, "Shield"), "JSystem/JStudio/JStudio/fvb-data.cpp"),
|
||||
Object(MatchingFor(ALL_GCN, "Shield"), "JSystem/JStudio/JStudio/fvb-data-parse.cpp"),
|
||||
|
|
@ -1720,7 +1720,7 @@ config.libs = [
|
|||
ActorRel(MatchingFor(ALL_GCN), "d_a_tag_msg"),
|
||||
ActorRel(MatchingFor(ALL_GCN), "d_a_tag_push"),
|
||||
ActorRel(MatchingFor(ALL_GCN), "d_a_tag_telop"),
|
||||
ActorRel(Equivalent, "d_a_tbox"), # weak func order
|
||||
ActorRel(MatchingFor(ALL_GCN), "d_a_tbox"),
|
||||
ActorRel(MatchingFor(ALL_GCN), "d_a_tbox2"),
|
||||
ActorRel(MatchingFor(ALL_GCN), "d_a_vrbox"),
|
||||
ActorRel(NonMatching, "d_a_vrbox2"),
|
||||
|
|
@ -2009,7 +2009,7 @@ config.libs = [
|
|||
ActorRel(NonMatching, "d_a_npc_kn"),
|
||||
ActorRel(MatchingFor(ALL_GCN), "d_a_npc_knj"),
|
||||
ActorRel(MatchingFor(ALL_GCN), "d_a_npc_kolinb"),
|
||||
ActorRel(Equivalent, "d_a_npc_ks"), # weak func order
|
||||
ActorRel(MatchingFor(ALL_GCN), "d_a_npc_ks"),
|
||||
ActorRel(MatchingFor(ALL_GCN), "d_a_npc_kyury"),
|
||||
ActorRel(MatchingFor(ALL_GCN), "d_a_npc_len"),
|
||||
ActorRel(MatchingFor(ALL_GCN), "d_a_npc_lf"),
|
||||
|
|
|
|||
|
|
@ -111,14 +111,14 @@ inline Iterator findUpperBound_binary_end(Iterator first, Iterator last, const T
|
|||
}
|
||||
|
||||
template <typename Iterator, typename T, typename Predicate>
|
||||
Iterator findUpperBound_binary_current(Iterator first, Iterator last, Iterator current, const T& val, Predicate p) {
|
||||
inline Iterator findUpperBound_binary_current(Iterator first, Iterator last, Iterator current, const T& val, Predicate p) {
|
||||
return current == last || p(val, *current) ?
|
||||
findUpperBound_binary_end(first, current, val, p) :
|
||||
findUpperBound_binary_begin(current, last, val, p);
|
||||
}
|
||||
|
||||
template <typename Iterator, typename T>
|
||||
Iterator findUpperBound_binary_current(Iterator first, Iterator last, Iterator current, const T& val) {
|
||||
inline Iterator findUpperBound_binary_current(Iterator first, Iterator last, Iterator current, const T& val) {
|
||||
return findUpperBound_binary_current(first, last, current, val, std::less<T>());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -157,7 +157,6 @@ private:
|
|||
class TFunctionValue_constant : public TFunctionValue {
|
||||
public:
|
||||
TFunctionValue_constant();
|
||||
virtual ~TFunctionValue_constant() {}
|
||||
|
||||
virtual u32 getType() const;
|
||||
virtual TFunctionValueAttributeSet getAttributeSet();
|
||||
|
|
@ -195,7 +194,6 @@ public:
|
|||
const TFunctionValue_composite::TData&, f64);
|
||||
|
||||
TFunctionValue_composite();
|
||||
virtual ~TFunctionValue_composite() {}
|
||||
|
||||
virtual u32 getType() const;
|
||||
virtual TFunctionValueAttributeSet getAttributeSet();
|
||||
|
|
@ -232,7 +230,6 @@ class TFunctionValue_transition : public TFunctionValue,
|
|||
public TFunctionValueAttribute_interpolate {
|
||||
public:
|
||||
TFunctionValue_transition();
|
||||
virtual ~TFunctionValue_transition() {}
|
||||
|
||||
virtual u32 getType() const;
|
||||
virtual TFunctionValueAttributeSet getAttributeSet();
|
||||
|
|
@ -264,7 +261,6 @@ public:
|
|||
typedef f64 (*update_INTERPOLATE)(const TFunctionValue_list&, const TIndexData_&);
|
||||
|
||||
TFunctionValue_list();
|
||||
virtual ~TFunctionValue_list() {}
|
||||
|
||||
virtual u32 getType() const;
|
||||
virtual TFunctionValueAttributeSet getAttributeSet();
|
||||
|
|
@ -380,7 +376,6 @@ public:
|
|||
typedef f64 (*update_INTERPOLATE)(const TFunctionValue_list_parameter&, f64);
|
||||
|
||||
TFunctionValue_list_parameter();
|
||||
virtual ~TFunctionValue_list_parameter() {}
|
||||
|
||||
virtual u32 getType() const;
|
||||
virtual TFunctionValueAttributeSet getAttributeSet();
|
||||
|
|
@ -499,7 +494,6 @@ public:
|
|||
};
|
||||
|
||||
TFunctionValue_hermite();
|
||||
virtual ~TFunctionValue_hermite() {}
|
||||
|
||||
virtual u32 getType() const;
|
||||
virtual TFunctionValueAttributeSet getAttributeSet();
|
||||
|
|
|
|||
|
|
@ -6839,7 +6839,18 @@ public:
|
|||
BOOL checkCutHeadProc() const { return mProcID == PROC_CUT_HEAD; }
|
||||
fopAc_ac_c* getRideActor() { return mRideAcKeep.getActor(); }
|
||||
|
||||
virtual cXyz* getMidnaAtnPos() const { return (cXyz*)&mMidnaAtnPos; }
|
||||
virtual bool checkAcceptDungeonWarpAlink(int) { return checkAcceptWarp(); }
|
||||
virtual daSpinner_c* getSpinnerActor() {
|
||||
daSpinner_c* spinnerActor;
|
||||
if (!checkSpinnerRide()) {
|
||||
spinnerActor = NULL;
|
||||
} else {
|
||||
spinnerActor = (daSpinner_c*)mRideAcKeep.getActor();
|
||||
}
|
||||
return (daSpinner_c*)spinnerActor;
|
||||
}
|
||||
virtual s16 getSumouCounter() const { return mProcVar2.field_0x300c; }
|
||||
virtual s16 checkSumouWithstand() const { return mProcVar3.field_0x300e; }
|
||||
virtual void setMidnaMsgNum(fopAc_ac_c* param_0, u16 pMsgNum) {
|
||||
mMidnaMsgNum = pMsgNum;
|
||||
mMidnaMsg = (daTagMmsg_c*)param_0;
|
||||
|
|
@ -6847,7 +6858,6 @@ public:
|
|||
virtual MtxP getModelMtx() { return mpLinkModel->getBaseTRMtx(); }
|
||||
virtual MtxP getInvMtx() { return mInvMtx; }
|
||||
virtual cXyz* getShadowTalkAtnPos() { return &field_0x375c; }
|
||||
virtual f32 getGroundY() { return mLinkAcch.GetGroundH(); }
|
||||
virtual MtxP getLeftItemMatrix();
|
||||
virtual MtxP getRightItemMatrix();
|
||||
virtual MtxP getLeftHandMatrix();
|
||||
|
|
@ -6859,9 +6869,27 @@ public:
|
|||
if (mHeldItemModel != NULL && checkBottleItem(mEquipItem)) {
|
||||
return mHeldItemModel->getBaseTRMtx();
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
virtual MtxP getHeadMtx() {
|
||||
return mpLinkModel->getAnmMtx(field_0x30b4);
|
||||
}
|
||||
virtual f32 getGroundY() { return mLinkAcch.GetGroundH(); }
|
||||
virtual f32 getBaseAnimeFrameRate() const { return mUnderFrameCtrl[0].getRate(); }
|
||||
virtual fpc_ProcID getAtnActorID() const { return mAtnActorID; }
|
||||
virtual fpc_ProcID getItemID() const { return mItemAcKeep.getID(); }
|
||||
virtual fpc_ProcID getGrabActorID() const {
|
||||
if (mEquipItem == 0x102) {
|
||||
return mItemAcKeep.getID();
|
||||
} else {
|
||||
return mGrabItemAcKeep.getID();
|
||||
}
|
||||
}
|
||||
virtual void setForcePutPos(cXyz const& pPutPos) {
|
||||
mForcePutPos = pPutPos;
|
||||
onEndResetFlg1(ERFLG1_UNK_2000);
|
||||
}
|
||||
virtual BOOL checkPlayerGuard() const;
|
||||
virtual u32 checkPlayerFly() const {
|
||||
return checkModeFlg(MODE_SWIMMING | MODE_ROPE_WALK | MODE_VINE_CLIMB | MODE_UNK_800 |
|
||||
|
|
@ -6929,26 +6957,17 @@ public:
|
|||
}
|
||||
virtual BOOL checkGrassWhistle() const { return mProcID == PROC_GRASS_WHISTLE_WAIT; }
|
||||
virtual BOOL checkBoarRun() const { return mProcID == PROC_BOAR_RUN; }
|
||||
virtual f32 getBaseAnimeFrameRate() const { return mUnderFrameCtrl[0].getRate(); }
|
||||
virtual BOOL checkHorseRideNotReady() const {
|
||||
return checkHorseRide() && mProcID != PROC_HORSE_RIDE && mProcID != PROC_HORSE_GETOFF;
|
||||
}
|
||||
virtual f32 getSearchBallScale() const { return mSearchBallScale; }
|
||||
virtual int checkFastShotTime() { return mFastShotTime; }
|
||||
virtual f32 getBaseAnimeFrame() const;
|
||||
virtual void setAnimeFrame(f32);
|
||||
virtual BOOL checkWolfLock(fopAc_ac_c*) const;
|
||||
virtual bool cancelWolfLock(fopAc_ac_c*);
|
||||
virtual fpc_ProcID getAtnActorID() const { return mAtnActorID; }
|
||||
virtual fpc_ProcID getItemID() const { return mItemAcKeep.getID(); }
|
||||
virtual fpc_ProcID getGrabActorID() const {
|
||||
if (mEquipItem == 0x102) {
|
||||
return mItemAcKeep.getID();
|
||||
} else {
|
||||
return mGrabItemAcKeep.getID();
|
||||
}
|
||||
}
|
||||
virtual BOOL exchangeGrabActor(fopAc_ac_c*);
|
||||
virtual BOOL setForceGrab(fopAc_ac_c*, int, int);
|
||||
virtual void setForcePutPos(cXyz const& pPutPos) {
|
||||
mForcePutPos = pPutPos;
|
||||
onEndResetFlg1(ERFLG1_UNK_2000);
|
||||
}
|
||||
virtual u32 checkPlayerNoDraw();
|
||||
virtual void voiceStart(u32);
|
||||
virtual void seStartOnlyReverb(u32);
|
||||
|
|
@ -6957,10 +6976,6 @@ public:
|
|||
virtual void setGrabCollisionOffset(f32, f32, cBgS_PolyInfo*);
|
||||
virtual void onFrollCrashFlg(u8, int);
|
||||
virtual MtxP getModelJointMtx(u16);
|
||||
virtual MtxP getHeadMtx() {
|
||||
return mpLinkModel->getAnmMtx(field_0x30b4);
|
||||
;
|
||||
}
|
||||
virtual bool setHookshotCarryOffset(fpc_ProcID, cXyz const*);
|
||||
virtual BOOL checkCutJumpCancelTurn() const {
|
||||
return (mProcID == PROC_CUT_JUMP || mProcID == PROC_CUT_JUMP_LAND) && field_0x3198 != 2;
|
||||
|
|
@ -6977,9 +6992,6 @@ public:
|
|||
virtual bool setThrowDamage(short, f32, f32, int, int, int);
|
||||
virtual bool checkSetNpcTks(cXyz*, int, int);
|
||||
virtual int setRollJump(f32, f32, short);
|
||||
virtual void playerStartCollisionSE(u32 param_0, u32 param_1) {
|
||||
mZ2Link.startCollisionSE(param_0, param_1);
|
||||
}
|
||||
virtual void cancelDungeonWarpReadyNeck() {
|
||||
if (mProcID != PROC_DUNGEON_WARP_READY) {
|
||||
return;
|
||||
|
|
@ -7004,21 +7016,7 @@ public:
|
|||
virtual u32 checkCanoeRide() const;
|
||||
virtual u32 checkBoardRide() const;
|
||||
virtual u32 checkSpinnerRide() const;
|
||||
virtual daSpinner_c* getSpinnerActor() {
|
||||
daSpinner_c* spinnerActor;
|
||||
if (!checkSpinnerRide()) {
|
||||
spinnerActor = NULL;
|
||||
} else {
|
||||
spinnerActor = (daSpinner_c*)mRideAcKeep.getActor();
|
||||
}
|
||||
return (daSpinner_c*)spinnerActor;
|
||||
}
|
||||
virtual BOOL checkHorseRideNotReady() const {
|
||||
return checkHorseRide() && mProcID != PROC_HORSE_RIDE && mProcID != PROC_HORSE_GETOFF;
|
||||
}
|
||||
virtual bool checkArrowChargeEnd() const;
|
||||
virtual f32 getSearchBallScale() const { return mSearchBallScale; }
|
||||
virtual int checkFastShotTime() { return mFastShotTime; }
|
||||
virtual bool checkNoEquipItem() const { return mEquipItem == fpcNm_ITEM_NONE; }
|
||||
virtual bool checkKandelaarSwing(int) const;
|
||||
virtual s16 getBoardCutTurnOffsetAngleY() const {
|
||||
|
|
@ -7028,6 +7026,31 @@ public:
|
|||
return 0;
|
||||
}
|
||||
virtual cXyz* getMagneBootsTopVec() { return &mMagneBootsTopVec; }
|
||||
virtual void setCargoCarry(fopAc_ac_c* p_actor) {
|
||||
mSpecialMode = SMODE_CARGO_CARRY;
|
||||
mCargoCarryAcKeep.setData(p_actor);
|
||||
}
|
||||
virtual void setGoronSideMove(fopAc_ac_c* p_actor) {
|
||||
mSpecialMode = SMODE_GORON_THROW;
|
||||
mCargoCarryAcKeep.setData(p_actor);
|
||||
}
|
||||
virtual void setSumouReady(fopAc_ac_c* p_actor) {
|
||||
mSpecialMode = SMODE_SUMO_READY;
|
||||
mCargoCarryAcKeep.setData(p_actor);
|
||||
mDemo.setDemoMode(1);
|
||||
}
|
||||
virtual void setSumouPushBackDirection(short param_0) {
|
||||
if (mProcID != PROC_SUMOU_MOVE) {
|
||||
return;
|
||||
}
|
||||
mProcVar4.field_0x3010 = param_0;
|
||||
}
|
||||
virtual void setSumouLoseHeadUp() {
|
||||
if (mProcID != PROC_SUMOU_WIN_LOSE) {
|
||||
return;
|
||||
}
|
||||
mSpecialMode = SMODE_SUMO_LOSE;
|
||||
}
|
||||
virtual cXyz* getKandelaarFlamePos();
|
||||
virtual bool checkUseKandelaar(int);
|
||||
virtual void setDkCaught(fopAc_ac_c*);
|
||||
|
|
@ -7045,6 +7068,24 @@ public:
|
|||
}
|
||||
mProcVar4.field_0x3010 = angle;
|
||||
}
|
||||
virtual void setSumouGraspCancelCount(int param_0) {
|
||||
if (mProcID != PROC_SUMOU_MOVE) {
|
||||
return;
|
||||
}
|
||||
mProcVar2.field_0x300c = param_0;
|
||||
}
|
||||
virtual bool checkItemSwordEquip() const { return mEquipItem == 0x103; }
|
||||
virtual f32 getSinkShapeOffset() const { return mSinkShapeOffset; }
|
||||
virtual BOOL checkSinkDead() const { return field_0x2fbd == 0xFF; }
|
||||
virtual BOOL checkCutJumpMode() const { return mProcID == PROC_CUT_JUMP; }
|
||||
virtual s16 getGiantPuzzleAimAngle() const { return mProcVar2.mPuzzleAimAngle; }
|
||||
virtual u8 getSwordChangeWaitTimer() const { return mSwordChangeWaitTimer; }
|
||||
virtual BOOL checkMetamorphose() const {
|
||||
return mProcID == PROC_METAMORPHOSE && mProcVar1.field_0x300a == 0;
|
||||
}
|
||||
virtual BOOL checkWolfDownAttackPullOut() const { return mProcID == PROC_WOLF_DOWN_AT_LAND; }
|
||||
virtual cXyz* getMidnaAtnPos() const { return (cXyz*)&mMidnaAtnPos; }
|
||||
virtual bool checkCopyRodEquip() const { return mEquipItem == fpcNm_ITEM_COPY_ROD; }
|
||||
virtual void setKandelaarMtx(f32 (*)[4], int, int);
|
||||
virtual bool getStickAngleFromPlayerShape(short*) const;
|
||||
virtual bool checkSpinnerPathMove();
|
||||
|
|
@ -7059,44 +7100,13 @@ public:
|
|||
return mProcID == PROC_CANOE_FISHING_GET && mProcVar3.field_0x300e == 1;
|
||||
}
|
||||
virtual u8 checkBeeChildDrink() const { return field_0x2fd3; }
|
||||
virtual Z2WolfHowlMgr* getWolfHowlMgrP() { return &mZ2WolfHowlMgr; }
|
||||
virtual BOOL checkWolfHowlSuccessAnime() const {
|
||||
return checkUnderMove0BckNoArcWolf(WANM_HOWL_SUCCESS);
|
||||
}
|
||||
virtual void skipPortalObjWarp();
|
||||
virtual BOOL checkTreasureRupeeReturn(int) const;
|
||||
virtual void setSumouReady(fopAc_ac_c* p_actor) {
|
||||
mSpecialMode = SMODE_SUMO_READY;
|
||||
mCargoCarryAcKeep.setData(p_actor);
|
||||
mDemo.setDemoMode(1);
|
||||
}
|
||||
virtual bool checkAcceptDungeonWarpAlink(int) { return checkAcceptWarp(); }
|
||||
virtual s16 getSumouCounter() const { return mProcVar2.field_0x300c; }
|
||||
virtual s16 checkSumouWithstand() const { return mProcVar3.field_0x300e; }
|
||||
virtual void cancelGoronThrowEvent();
|
||||
virtual void setSumouGraspCancelCount(int param_0) {
|
||||
if (mProcID != PROC_SUMOU_MOVE) {
|
||||
return;
|
||||
}
|
||||
mProcVar2.field_0x300c = param_0;
|
||||
}
|
||||
virtual void setSumouPushBackDirection(short param_0) {
|
||||
if (mProcID != PROC_SUMOU_MOVE) {
|
||||
return;
|
||||
}
|
||||
mProcVar4.field_0x3010 = param_0;
|
||||
}
|
||||
virtual void setSumouLoseHeadUp() {
|
||||
if (mProcID != PROC_SUMOU_WIN_LOSE) {
|
||||
return;
|
||||
}
|
||||
mSpecialMode = SMODE_SUMO_LOSE;
|
||||
}
|
||||
virtual s16 getGiantPuzzleAimAngle() const { return mProcVar2.mPuzzleAimAngle; }
|
||||
virtual void setGoronSideMove(fopAc_ac_c* p_actor) {
|
||||
mSpecialMode = SMODE_GORON_THROW;
|
||||
mCargoCarryAcKeep.setData(p_actor);
|
||||
}
|
||||
virtual void setCargoCarry(fopAc_ac_c* p_actor) {
|
||||
mSpecialMode = SMODE_CARGO_CARRY;
|
||||
mCargoCarryAcKeep.setData(p_actor);
|
||||
}
|
||||
virtual cXyz* getHookshotTopPos();
|
||||
virtual bool checkHookshotReturnMode() const;
|
||||
virtual bool checkHookshotShootReturnMode() const;
|
||||
|
|
@ -7124,27 +7134,16 @@ public:
|
|||
virtual bool checkDragonHangRide() const {
|
||||
return mProcID == PROC_BOSS_BODY_HANG && field_0x32cc != 0;
|
||||
}
|
||||
virtual void playerStartCollisionSE(u32 param_0, u32 param_1) {
|
||||
mZ2Link.startCollisionSE(param_0, param_1);
|
||||
}
|
||||
virtual void changeDragonActor(fopAc_ac_c*);
|
||||
virtual u8 getClothesChangeWaitTimer() const { return mClothesChangeWaitTimer; }
|
||||
virtual u8 getShieldChangeWaitTimer() const { return mShieldChangeWaitTimer; }
|
||||
virtual u8 getSwordChangeWaitTimer() const { return mSwordChangeWaitTimer; }
|
||||
virtual BOOL checkMetamorphose() const {
|
||||
return mProcID == PROC_METAMORPHOSE && mProcVar1.field_0x300a == 0;
|
||||
}
|
||||
virtual BOOL checkWolfDownAttackPullOut() const { return mProcID == PROC_WOLF_DOWN_AT_LAND; }
|
||||
virtual BOOL checkBootsOrArmorHeavy() const;
|
||||
virtual fpc_ProcID getBottleOpenAppearItem() const;
|
||||
virtual bool checkItemSwordEquip() const { return mEquipItem == 0x103; }
|
||||
virtual f32 getSinkShapeOffset() const { return mSinkShapeOffset; }
|
||||
virtual BOOL checkSinkDead() const { return field_0x2fbd == 0xFF; }
|
||||
virtual BOOL checkHorseStart() { return checkHorseStart(getLastSceneMode(), getStartMode()); }
|
||||
virtual Z2WolfHowlMgr* getWolfHowlMgrP() { return &mZ2WolfHowlMgr; }
|
||||
virtual BOOL checkWolfHowlSuccessAnime() const {
|
||||
return checkUnderMove0BckNoArcWolf(WANM_HOWL_SUCCESS);
|
||||
}
|
||||
virtual BOOL checkCopyRodTopUse();
|
||||
virtual bool checkCopyRodEquip() const { return mEquipItem == fpcNm_ITEM_COPY_ROD; }
|
||||
virtual BOOL checkCutJumpMode() const { return mProcID == PROC_CUT_JUMP; }
|
||||
|
||||
static BOOL checkDebugMoveInput() {
|
||||
if (mDoCPd_c::isConnect(PAD_3)) {
|
||||
|
|
@ -8271,4 +8270,8 @@ static fopAc_ac_c* daAlink_searchCanoe(fopAc_ac_c* param_0, void* param_1);
|
|||
static void* daAlink_searchBoar(fopAc_ac_c* param_0, void* param_1);
|
||||
static fopAc_ac_c* daAlink_searchLightBall(fopAc_ac_c* p_actor, void* param_1);
|
||||
|
||||
inline daAlink_c* daAlink_getAlinkActorClass() {
|
||||
return (daAlink_c*)g_dComIfG_gameInfo.play.getPlayerPtr(LINK_PTR);
|
||||
}
|
||||
|
||||
#endif /* D_A_D_A_ALINK_H */
|
||||
|
|
|
|||
|
|
@ -1257,4 +1257,12 @@ public:
|
|||
|
||||
int daPy_addCalcShort(s16* param_0, s16 param_1, s16 param_2, s16 param_3, s16 param_4);
|
||||
|
||||
inline daPy_py_c* daPy_getPlayerActorClass() {
|
||||
return (daPy_py_c*)dComIfGp_getPlayer(0);
|
||||
}
|
||||
|
||||
inline daPy_py_c* daPy_getLinkPlayerActorClass() {
|
||||
return dComIfGp_getLinkPlayer();
|
||||
}
|
||||
|
||||
#endif /* D_A_D_A_PLAYER_H */
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#include "d/d_cc_d.h"
|
||||
#include "d/d_bg_s_acch.h"
|
||||
#include "d/d_bg_s_movebg_actor.h"
|
||||
#include "d/d_kankyo.h"
|
||||
#include "f_op/f_op_actor_mng.h"
|
||||
#include "m_Do/m_Do_hostIO.h"
|
||||
|
||||
|
|
@ -197,33 +198,4 @@ private:
|
|||
|
||||
STATIC_ASSERT(sizeof(daTbox_c) == 0xA30);
|
||||
|
||||
class daTbox_HIO_c : public mDoHIO_entry_c {
|
||||
public:
|
||||
daTbox_HIO_c();
|
||||
virtual ~daTbox_HIO_c() {}
|
||||
|
||||
void genMessage(JORMContext*);
|
||||
|
||||
/* 0x04 */ u8 mItemNo;
|
||||
/* 0x05 */ u8 mUseDebugItemNo;
|
||||
/* 0x06 */ u8 mClearSwitch;
|
||||
/* 0x07 */ u8 mDemoType;
|
||||
/* 0x08 */ u8 mDebugLightColorEnabled;
|
||||
/* 0x09 */ u8 mTimerDisplay;
|
||||
/* 0x0A */ u8 mCheckDisplay;
|
||||
/* 0x0B */ u8 mSaveOff;
|
||||
/* 0x0C */ f32 mGravity;
|
||||
/* 0x10 */ cXyz mLightOffset;
|
||||
/* 0x1C */ s16 mLightColorR;
|
||||
/* 0x1E */ s16 mLightColorG;
|
||||
/* 0x20 */ s16 mLightColorB;
|
||||
/* 0x24 */ f32 mLightPower;
|
||||
/* 0x28 */ f32 mFluctuationRate;
|
||||
/* 0x2C */ f32 mEnvColorInfluence;
|
||||
/* 0x30 */ s16 mFluctuationSpeed;
|
||||
/* 0x32 */ u8 mForPlacementCheck;
|
||||
};
|
||||
|
||||
STATIC_ASSERT(sizeof(daTbox_HIO_c) == 0x34);
|
||||
|
||||
#endif /* D_A_TBOX_H */
|
||||
|
|
|
|||
|
|
@ -4430,16 +4430,4 @@ inline void dComIfGd_set3DlineMatDark(mDoExt_3DlineMat_c* param_0) {
|
|||
g_dComIfG_gameInfo.drawlist.set3DlineMatDark(param_0);
|
||||
}
|
||||
|
||||
inline daPy_py_c* daPy_getLinkPlayerActorClass() {
|
||||
return dComIfGp_getLinkPlayer();
|
||||
}
|
||||
|
||||
inline daPy_py_c* daPy_getPlayerActorClass() {
|
||||
return (daPy_py_c*)dComIfGp_getPlayer(0);
|
||||
}
|
||||
|
||||
inline daAlink_c* daAlink_getAlinkActorClass() {
|
||||
return (daAlink_c*)g_dComIfG_gameInfo.play.getPlayerPtr(LINK_PTR);
|
||||
}
|
||||
|
||||
#endif /* D_COM_D_COM_INF_GAME_H */
|
||||
|
|
|
|||
|
|
@ -744,8 +744,6 @@ public:
|
|||
/* 0x35C */ dMsgObject_HowlHIO_c mHowlHIO;
|
||||
};
|
||||
|
||||
#ifndef DISABLE_MSG_OBJECT_EXTERN
|
||||
extern dMsgObject_HIO_c g_MsgObject_HIO_c;
|
||||
#endif
|
||||
|
||||
#endif /* D_MSG_D_MSG_OBJECT_H */
|
||||
|
|
|
|||
|
|
@ -174,7 +174,7 @@ public:
|
|||
|
||||
private:
|
||||
/* 0x14 */ J3DAnmTransform* mAnm;
|
||||
/* 0x18 */ J3DMtxCalc* mpMtxCalc;
|
||||
/* 0x18 */ J3DMtxCalcAnimation<J3DMtxCalcAnimationAdaptorDefault<J3DMtxCalcCalcTransformMaya>, J3DMtxCalcJ3DSysInitMaya>* mpMtxCalc;
|
||||
}; // Size: 0x1C
|
||||
|
||||
STATIC_ASSERT(sizeof(mDoExt_bckAnm) == 0x1C);
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_obj_crvhahen.h"
|
||||
#include "d/actor/d_a_player.h"
|
||||
|
||||
static const char* l_arcName = "CrvFence";
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_obj_ornament_cloth.h"
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/d_a_obj.h"
|
||||
|
||||
enum J_Necktie_RES_File_ID {
|
||||
|
|
@ -192,7 +193,7 @@ void daObjOnCloth_c::checkPlayerMove() {
|
|||
field_0x650[attr().delayedVibrationFrame - 1] = 0.0f;
|
||||
|
||||
if (!(fopAcM_searchPlayerDistanceXZ2(this) > attr().playerReactionDist * attr().playerReactionDist)) {
|
||||
f32 fVar2 = fopAcM_GetSpeedF((fopAc_ac_c*)daPy_getPlayerActorClass());
|
||||
f32 fVar2 = fopAcM_GetSpeedF(daPy_getPlayerActorClass());
|
||||
if (fVar2 > attr().playerReactionSpeed) {
|
||||
field_0x650[attr().delayedVibrationFrame - 1] = fVar2;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_obj_stopper2.h"
|
||||
#include "d/actor/d_a_player.h"
|
||||
|
||||
static char* l_arcName = "Stop00";
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#include "d/actor/d_a_tag_yami.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/actor/d_a_player.h"
|
||||
|
||||
const static dCcD_SrcCyl l_sph_src = {
|
||||
{
|
||||
|
|
|
|||
|
|
@ -43,6 +43,35 @@ static daTbox_ModelInfo l_modelInfo[3] = {
|
|||
|
||||
static cXyz l_light_offset(0.0f, 35.0f, 0.0f);
|
||||
|
||||
class daTbox_HIO_c : public mDoHIO_entry_c {
|
||||
public:
|
||||
daTbox_HIO_c();
|
||||
virtual ~daTbox_HIO_c() {}
|
||||
|
||||
void genMessage(JORMContext*);
|
||||
|
||||
/* 0x04 */ u8 mItemNo;
|
||||
/* 0x05 */ u8 mUseDebugItemNo;
|
||||
/* 0x06 */ u8 mClearSwitch;
|
||||
/* 0x07 */ u8 mDemoType;
|
||||
/* 0x08 */ u8 mDebugLightColorEnabled;
|
||||
/* 0x09 */ u8 mTimerDisplay;
|
||||
/* 0x0A */ u8 mCheckDisplay;
|
||||
/* 0x0B */ u8 mSaveOff;
|
||||
/* 0x0C */ f32 mGravity;
|
||||
/* 0x10 */ cXyz mLightOffset;
|
||||
/* 0x1C */ s16 mLightColorR;
|
||||
/* 0x1E */ s16 mLightColorG;
|
||||
/* 0x20 */ s16 mLightColorB;
|
||||
/* 0x24 */ f32 mLightPower;
|
||||
/* 0x28 */ f32 mFluctuationRate;
|
||||
/* 0x2C */ f32 mEnvColorInfluence;
|
||||
/* 0x30 */ s16 mFluctuationSpeed;
|
||||
/* 0x32 */ u8 mForPlacementCheck;
|
||||
};
|
||||
|
||||
STATIC_ASSERT(sizeof(daTbox_HIO_c) == 0x34);
|
||||
|
||||
daTbox_HIO_c::daTbox_HIO_c() {
|
||||
mItemNo = 1;
|
||||
mUseDebugItemNo = 0;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
#include "d/dolzel.h" // IWYU pragma: keep
|
||||
|
||||
#define DISABLE_MSG_OBJECT_EXTERN
|
||||
|
||||
#include "d/d_msg_object.h"
|
||||
#include "d/d_msg_class.h"
|
||||
#include "d/d_msg_string.h"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,109 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from pathlib import Path
|
||||
import re
|
||||
import subprocess
|
||||
from argparse import ArgumentParser
|
||||
|
||||
def get_symbols(o_path: Path, diff_data: bool):
|
||||
output = subprocess.check_output(["readelf", "-Ws", o_path]).decode("ascii")
|
||||
symbols = []
|
||||
for line in output.split("\n")[3:]:
|
||||
if line == "":
|
||||
continue
|
||||
words = line.split()
|
||||
if len(words) == 7 and words[-1] == "UND":
|
||||
continue
|
||||
_, offset, size, sym_type, scope, vis, section_index, name = words
|
||||
|
||||
if diff_data:
|
||||
# Only diff data.
|
||||
if sym_type == "FUNC":
|
||||
continue
|
||||
if sym_type in ["FILE", "NOTYPE", "SECTION"]:
|
||||
continue
|
||||
if vis == "HIDDEN":
|
||||
continue
|
||||
if re.search(r"^@\d+$", name):
|
||||
continue
|
||||
if re.search(r"^lbl_[0-9a-f]+_(?:data|bss)_[0-9a-f]+$", name):
|
||||
continue
|
||||
match = re.search(r"^(\S+)\$\d+$", name)
|
||||
if match:
|
||||
name = match.group(1)
|
||||
else:
|
||||
# Only diff functions.
|
||||
if sym_type != "FUNC":
|
||||
continue
|
||||
if vis == "HIDDEN":
|
||||
continue
|
||||
|
||||
symbols.append((sym_type, int(section_index), int(offset, 16), name))
|
||||
|
||||
symbols.sort()
|
||||
symbol_names = [sym[-1] for sym in symbols]
|
||||
return symbol_names
|
||||
|
||||
|
||||
def print_symbols_with_unmatched_order_for_object(relative_o_path: str, version: str, diff_data: bool):
|
||||
target_o = Path("build") / version / "obj" / relative_o_path
|
||||
base_o = Path("build") / version / "src" / relative_o_path
|
||||
if not target_o.exists():
|
||||
rel_name = relative_o_path.split("/")[-1].split(".")[0]
|
||||
target_o = Path("build") / version / rel_name / "obj" / relative_o_path
|
||||
|
||||
subprocess.check_output(["ninja", base_o])
|
||||
|
||||
target_symbols = get_symbols(target_o, diff_data)
|
||||
base_symbols = get_symbols(base_o, diff_data)
|
||||
target_symbols_set = set(target_symbols)
|
||||
base_symbols = [sym for sym in base_symbols if sym in target_symbols_set]
|
||||
base_idx = 0
|
||||
matched_count = 0
|
||||
unmatched_count = 0
|
||||
for target_sym in target_symbols:
|
||||
if base_idx == len(base_symbols):
|
||||
base_sym = None
|
||||
else:
|
||||
base_sym = base_symbols[base_idx]
|
||||
|
||||
if target_sym == base_sym:
|
||||
base_idx += 1
|
||||
matched_count += 1
|
||||
else:
|
||||
base_idx = base_symbols.index(target_sym)
|
||||
base_idx += 1
|
||||
unmatched_count += 1
|
||||
print(target_sym)
|
||||
|
||||
print("====================================")
|
||||
print("Number of order differences:", unmatched_count)
|
||||
|
||||
|
||||
def main():
|
||||
parser = ArgumentParser(description="Print differences in weak function order for an object.")
|
||||
parser.add_argument(
|
||||
"o_path",
|
||||
type=str,
|
||||
default="d/actor/d_a_alink.o",
|
||||
nargs='?',
|
||||
help="""relative path to the object file to diff (e.g. d/actor/d_a_alink.o).""",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-v",
|
||||
"--version",
|
||||
type=str,
|
||||
default="GZ2E01",
|
||||
help="version to build",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--data",
|
||||
action="store_true",
|
||||
help="""diffs data instead of functions.""",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
print_symbols_with_unmatched_order_for_object(args.o_path, args.version, args.data)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Reference in New Issue