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), "JSystem/JStudio/JStudio/ctb.cpp"),
|
||||||
Object(MatchingFor(ALL_GCN, "Shield", "ShieldD"), "JSystem/JStudio/JStudio/ctb-data.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), "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.cpp"),
|
||||||
Object(MatchingFor(ALL_GCN, "Shield"), "JSystem/JStudio/JStudio/fvb-data-parse.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_msg"),
|
||||||
ActorRel(MatchingFor(ALL_GCN), "d_a_tag_push"),
|
ActorRel(MatchingFor(ALL_GCN), "d_a_tag_push"),
|
||||||
ActorRel(MatchingFor(ALL_GCN), "d_a_tag_telop"),
|
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_tbox2"),
|
||||||
ActorRel(MatchingFor(ALL_GCN), "d_a_vrbox"),
|
ActorRel(MatchingFor(ALL_GCN), "d_a_vrbox"),
|
||||||
ActorRel(NonMatching, "d_a_vrbox2"),
|
ActorRel(NonMatching, "d_a_vrbox2"),
|
||||||
|
|
@ -2009,7 +2009,7 @@ config.libs = [
|
||||||
ActorRel(NonMatching, "d_a_npc_kn"),
|
ActorRel(NonMatching, "d_a_npc_kn"),
|
||||||
ActorRel(MatchingFor(ALL_GCN), "d_a_npc_knj"),
|
ActorRel(MatchingFor(ALL_GCN), "d_a_npc_knj"),
|
||||||
ActorRel(MatchingFor(ALL_GCN), "d_a_npc_kolinb"),
|
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_kyury"),
|
||||||
ActorRel(MatchingFor(ALL_GCN), "d_a_npc_len"),
|
ActorRel(MatchingFor(ALL_GCN), "d_a_npc_len"),
|
||||||
ActorRel(MatchingFor(ALL_GCN), "d_a_npc_lf"),
|
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>
|
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) ?
|
return current == last || p(val, *current) ?
|
||||||
findUpperBound_binary_end(first, current, val, p) :
|
findUpperBound_binary_end(first, current, val, p) :
|
||||||
findUpperBound_binary_begin(current, last, val, p);
|
findUpperBound_binary_begin(current, last, val, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Iterator, typename T>
|
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>());
|
return findUpperBound_binary_current(first, last, current, val, std::less<T>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -157,7 +157,6 @@ private:
|
||||||
class TFunctionValue_constant : public TFunctionValue {
|
class TFunctionValue_constant : public TFunctionValue {
|
||||||
public:
|
public:
|
||||||
TFunctionValue_constant();
|
TFunctionValue_constant();
|
||||||
virtual ~TFunctionValue_constant() {}
|
|
||||||
|
|
||||||
virtual u32 getType() const;
|
virtual u32 getType() const;
|
||||||
virtual TFunctionValueAttributeSet getAttributeSet();
|
virtual TFunctionValueAttributeSet getAttributeSet();
|
||||||
|
|
@ -195,7 +194,6 @@ public:
|
||||||
const TFunctionValue_composite::TData&, f64);
|
const TFunctionValue_composite::TData&, f64);
|
||||||
|
|
||||||
TFunctionValue_composite();
|
TFunctionValue_composite();
|
||||||
virtual ~TFunctionValue_composite() {}
|
|
||||||
|
|
||||||
virtual u32 getType() const;
|
virtual u32 getType() const;
|
||||||
virtual TFunctionValueAttributeSet getAttributeSet();
|
virtual TFunctionValueAttributeSet getAttributeSet();
|
||||||
|
|
@ -232,7 +230,6 @@ class TFunctionValue_transition : public TFunctionValue,
|
||||||
public TFunctionValueAttribute_interpolate {
|
public TFunctionValueAttribute_interpolate {
|
||||||
public:
|
public:
|
||||||
TFunctionValue_transition();
|
TFunctionValue_transition();
|
||||||
virtual ~TFunctionValue_transition() {}
|
|
||||||
|
|
||||||
virtual u32 getType() const;
|
virtual u32 getType() const;
|
||||||
virtual TFunctionValueAttributeSet getAttributeSet();
|
virtual TFunctionValueAttributeSet getAttributeSet();
|
||||||
|
|
@ -264,7 +261,6 @@ public:
|
||||||
typedef f64 (*update_INTERPOLATE)(const TFunctionValue_list&, const TIndexData_&);
|
typedef f64 (*update_INTERPOLATE)(const TFunctionValue_list&, const TIndexData_&);
|
||||||
|
|
||||||
TFunctionValue_list();
|
TFunctionValue_list();
|
||||||
virtual ~TFunctionValue_list() {}
|
|
||||||
|
|
||||||
virtual u32 getType() const;
|
virtual u32 getType() const;
|
||||||
virtual TFunctionValueAttributeSet getAttributeSet();
|
virtual TFunctionValueAttributeSet getAttributeSet();
|
||||||
|
|
@ -380,7 +376,6 @@ public:
|
||||||
typedef f64 (*update_INTERPOLATE)(const TFunctionValue_list_parameter&, f64);
|
typedef f64 (*update_INTERPOLATE)(const TFunctionValue_list_parameter&, f64);
|
||||||
|
|
||||||
TFunctionValue_list_parameter();
|
TFunctionValue_list_parameter();
|
||||||
virtual ~TFunctionValue_list_parameter() {}
|
|
||||||
|
|
||||||
virtual u32 getType() const;
|
virtual u32 getType() const;
|
||||||
virtual TFunctionValueAttributeSet getAttributeSet();
|
virtual TFunctionValueAttributeSet getAttributeSet();
|
||||||
|
|
@ -499,7 +494,6 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
TFunctionValue_hermite();
|
TFunctionValue_hermite();
|
||||||
virtual ~TFunctionValue_hermite() {}
|
|
||||||
|
|
||||||
virtual u32 getType() const;
|
virtual u32 getType() const;
|
||||||
virtual TFunctionValueAttributeSet getAttributeSet();
|
virtual TFunctionValueAttributeSet getAttributeSet();
|
||||||
|
|
|
||||||
|
|
@ -6839,7 +6839,18 @@ public:
|
||||||
BOOL checkCutHeadProc() const { return mProcID == PROC_CUT_HEAD; }
|
BOOL checkCutHeadProc() const { return mProcID == PROC_CUT_HEAD; }
|
||||||
fopAc_ac_c* getRideActor() { return mRideAcKeep.getActor(); }
|
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) {
|
virtual void setMidnaMsgNum(fopAc_ac_c* param_0, u16 pMsgNum) {
|
||||||
mMidnaMsgNum = pMsgNum;
|
mMidnaMsgNum = pMsgNum;
|
||||||
mMidnaMsg = (daTagMmsg_c*)param_0;
|
mMidnaMsg = (daTagMmsg_c*)param_0;
|
||||||
|
|
@ -6847,7 +6858,6 @@ public:
|
||||||
virtual MtxP getModelMtx() { return mpLinkModel->getBaseTRMtx(); }
|
virtual MtxP getModelMtx() { return mpLinkModel->getBaseTRMtx(); }
|
||||||
virtual MtxP getInvMtx() { return mInvMtx; }
|
virtual MtxP getInvMtx() { return mInvMtx; }
|
||||||
virtual cXyz* getShadowTalkAtnPos() { return &field_0x375c; }
|
virtual cXyz* getShadowTalkAtnPos() { return &field_0x375c; }
|
||||||
virtual f32 getGroundY() { return mLinkAcch.GetGroundH(); }
|
|
||||||
virtual MtxP getLeftItemMatrix();
|
virtual MtxP getLeftItemMatrix();
|
||||||
virtual MtxP getRightItemMatrix();
|
virtual MtxP getRightItemMatrix();
|
||||||
virtual MtxP getLeftHandMatrix();
|
virtual MtxP getLeftHandMatrix();
|
||||||
|
|
@ -6859,9 +6869,27 @@ public:
|
||||||
if (mHeldItemModel != NULL && checkBottleItem(mEquipItem)) {
|
if (mHeldItemModel != NULL && checkBottleItem(mEquipItem)) {
|
||||||
return mHeldItemModel->getBaseTRMtx();
|
return mHeldItemModel->getBaseTRMtx();
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
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 BOOL checkPlayerGuard() const;
|
||||||
virtual u32 checkPlayerFly() const {
|
virtual u32 checkPlayerFly() const {
|
||||||
return checkModeFlg(MODE_SWIMMING | MODE_ROPE_WALK | MODE_VINE_CLIMB | MODE_UNK_800 |
|
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 checkGrassWhistle() const { return mProcID == PROC_GRASS_WHISTLE_WAIT; }
|
||||||
virtual BOOL checkBoarRun() const { return mProcID == PROC_BOAR_RUN; }
|
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 f32 getBaseAnimeFrame() const;
|
||||||
virtual void setAnimeFrame(f32);
|
virtual void setAnimeFrame(f32);
|
||||||
virtual BOOL checkWolfLock(fopAc_ac_c*) const;
|
virtual BOOL checkWolfLock(fopAc_ac_c*) const;
|
||||||
virtual bool cancelWolfLock(fopAc_ac_c*);
|
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 exchangeGrabActor(fopAc_ac_c*);
|
||||||
virtual BOOL setForceGrab(fopAc_ac_c*, int, int);
|
virtual BOOL setForceGrab(fopAc_ac_c*, int, int);
|
||||||
virtual void setForcePutPos(cXyz const& pPutPos) {
|
|
||||||
mForcePutPos = pPutPos;
|
|
||||||
onEndResetFlg1(ERFLG1_UNK_2000);
|
|
||||||
}
|
|
||||||
virtual u32 checkPlayerNoDraw();
|
virtual u32 checkPlayerNoDraw();
|
||||||
virtual void voiceStart(u32);
|
virtual void voiceStart(u32);
|
||||||
virtual void seStartOnlyReverb(u32);
|
virtual void seStartOnlyReverb(u32);
|
||||||
|
|
@ -6957,10 +6976,6 @@ public:
|
||||||
virtual void setGrabCollisionOffset(f32, f32, cBgS_PolyInfo*);
|
virtual void setGrabCollisionOffset(f32, f32, cBgS_PolyInfo*);
|
||||||
virtual void onFrollCrashFlg(u8, int);
|
virtual void onFrollCrashFlg(u8, int);
|
||||||
virtual MtxP getModelJointMtx(u16);
|
virtual MtxP getModelJointMtx(u16);
|
||||||
virtual MtxP getHeadMtx() {
|
|
||||||
return mpLinkModel->getAnmMtx(field_0x30b4);
|
|
||||||
;
|
|
||||||
}
|
|
||||||
virtual bool setHookshotCarryOffset(fpc_ProcID, cXyz const*);
|
virtual bool setHookshotCarryOffset(fpc_ProcID, cXyz const*);
|
||||||
virtual BOOL checkCutJumpCancelTurn() const {
|
virtual BOOL checkCutJumpCancelTurn() const {
|
||||||
return (mProcID == PROC_CUT_JUMP || mProcID == PROC_CUT_JUMP_LAND) && field_0x3198 != 2;
|
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 setThrowDamage(short, f32, f32, int, int, int);
|
||||||
virtual bool checkSetNpcTks(cXyz*, int, int);
|
virtual bool checkSetNpcTks(cXyz*, int, int);
|
||||||
virtual int setRollJump(f32, f32, short);
|
virtual int setRollJump(f32, f32, short);
|
||||||
virtual void playerStartCollisionSE(u32 param_0, u32 param_1) {
|
|
||||||
mZ2Link.startCollisionSE(param_0, param_1);
|
|
||||||
}
|
|
||||||
virtual void cancelDungeonWarpReadyNeck() {
|
virtual void cancelDungeonWarpReadyNeck() {
|
||||||
if (mProcID != PROC_DUNGEON_WARP_READY) {
|
if (mProcID != PROC_DUNGEON_WARP_READY) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -7004,21 +7016,7 @@ public:
|
||||||
virtual u32 checkCanoeRide() const;
|
virtual u32 checkCanoeRide() const;
|
||||||
virtual u32 checkBoardRide() const;
|
virtual u32 checkBoardRide() const;
|
||||||
virtual u32 checkSpinnerRide() 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 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 checkNoEquipItem() const { return mEquipItem == fpcNm_ITEM_NONE; }
|
||||||
virtual bool checkKandelaarSwing(int) const;
|
virtual bool checkKandelaarSwing(int) const;
|
||||||
virtual s16 getBoardCutTurnOffsetAngleY() const {
|
virtual s16 getBoardCutTurnOffsetAngleY() const {
|
||||||
|
|
@ -7028,6 +7026,31 @@ public:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
virtual cXyz* getMagneBootsTopVec() { return &mMagneBootsTopVec; }
|
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 cXyz* getKandelaarFlamePos();
|
||||||
virtual bool checkUseKandelaar(int);
|
virtual bool checkUseKandelaar(int);
|
||||||
virtual void setDkCaught(fopAc_ac_c*);
|
virtual void setDkCaught(fopAc_ac_c*);
|
||||||
|
|
@ -7045,6 +7068,24 @@ public:
|
||||||
}
|
}
|
||||||
mProcVar4.field_0x3010 = angle;
|
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 void setKandelaarMtx(f32 (*)[4], int, int);
|
||||||
virtual bool getStickAngleFromPlayerShape(short*) const;
|
virtual bool getStickAngleFromPlayerShape(short*) const;
|
||||||
virtual bool checkSpinnerPathMove();
|
virtual bool checkSpinnerPathMove();
|
||||||
|
|
@ -7059,44 +7100,13 @@ public:
|
||||||
return mProcID == PROC_CANOE_FISHING_GET && mProcVar3.field_0x300e == 1;
|
return mProcID == PROC_CANOE_FISHING_GET && mProcVar3.field_0x300e == 1;
|
||||||
}
|
}
|
||||||
virtual u8 checkBeeChildDrink() const { return field_0x2fd3; }
|
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 void skipPortalObjWarp();
|
||||||
virtual BOOL checkTreasureRupeeReturn(int) const;
|
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 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 cXyz* getHookshotTopPos();
|
||||||
virtual bool checkHookshotReturnMode() const;
|
virtual bool checkHookshotReturnMode() const;
|
||||||
virtual bool checkHookshotShootReturnMode() const;
|
virtual bool checkHookshotShootReturnMode() const;
|
||||||
|
|
@ -7124,27 +7134,16 @@ public:
|
||||||
virtual bool checkDragonHangRide() const {
|
virtual bool checkDragonHangRide() const {
|
||||||
return mProcID == PROC_BOSS_BODY_HANG && field_0x32cc != 0;
|
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 void changeDragonActor(fopAc_ac_c*);
|
||||||
virtual u8 getClothesChangeWaitTimer() const { return mClothesChangeWaitTimer; }
|
virtual u8 getClothesChangeWaitTimer() const { return mClothesChangeWaitTimer; }
|
||||||
virtual u8 getShieldChangeWaitTimer() const { return mShieldChangeWaitTimer; }
|
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 BOOL checkBootsOrArmorHeavy() const;
|
||||||
virtual fpc_ProcID getBottleOpenAppearItem() 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 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 checkCopyRodTopUse();
|
||||||
virtual bool checkCopyRodEquip() const { return mEquipItem == fpcNm_ITEM_COPY_ROD; }
|
|
||||||
virtual BOOL checkCutJumpMode() const { return mProcID == PROC_CUT_JUMP; }
|
|
||||||
|
|
||||||
static BOOL checkDebugMoveInput() {
|
static BOOL checkDebugMoveInput() {
|
||||||
if (mDoCPd_c::isConnect(PAD_3)) {
|
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 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);
|
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 */
|
#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);
|
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 */
|
#endif /* D_A_D_A_PLAYER_H */
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
#include "d/d_cc_d.h"
|
#include "d/d_cc_d.h"
|
||||||
#include "d/d_bg_s_acch.h"
|
#include "d/d_bg_s_acch.h"
|
||||||
#include "d/d_bg_s_movebg_actor.h"
|
#include "d/d_bg_s_movebg_actor.h"
|
||||||
|
#include "d/d_kankyo.h"
|
||||||
#include "f_op/f_op_actor_mng.h"
|
#include "f_op/f_op_actor_mng.h"
|
||||||
#include "m_Do/m_Do_hostIO.h"
|
#include "m_Do/m_Do_hostIO.h"
|
||||||
|
|
||||||
|
|
@ -197,33 +198,4 @@ private:
|
||||||
|
|
||||||
STATIC_ASSERT(sizeof(daTbox_c) == 0xA30);
|
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 */
|
#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);
|
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 */
|
#endif /* D_COM_D_COM_INF_GAME_H */
|
||||||
|
|
|
||||||
|
|
@ -744,8 +744,6 @@ public:
|
||||||
/* 0x35C */ dMsgObject_HowlHIO_c mHowlHIO;
|
/* 0x35C */ dMsgObject_HowlHIO_c mHowlHIO;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef DISABLE_MSG_OBJECT_EXTERN
|
|
||||||
extern dMsgObject_HIO_c g_MsgObject_HIO_c;
|
extern dMsgObject_HIO_c g_MsgObject_HIO_c;
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* D_MSG_D_MSG_OBJECT_H */
|
#endif /* D_MSG_D_MSG_OBJECT_H */
|
||||||
|
|
|
||||||
|
|
@ -174,7 +174,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/* 0x14 */ J3DAnmTransform* mAnm;
|
/* 0x14 */ J3DAnmTransform* mAnm;
|
||||||
/* 0x18 */ J3DMtxCalc* mpMtxCalc;
|
/* 0x18 */ J3DMtxCalcAnimation<J3DMtxCalcAnimationAdaptorDefault<J3DMtxCalcCalcTransformMaya>, J3DMtxCalcJ3DSysInitMaya>* mpMtxCalc;
|
||||||
}; // Size: 0x1C
|
}; // Size: 0x1C
|
||||||
|
|
||||||
STATIC_ASSERT(sizeof(mDoExt_bckAnm) == 0x1C);
|
STATIC_ASSERT(sizeof(mDoExt_bckAnm) == 0x1C);
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||||
|
|
||||||
#include "d/actor/d_a_obj_crvhahen.h"
|
#include "d/actor/d_a_obj_crvhahen.h"
|
||||||
|
#include "d/actor/d_a_player.h"
|
||||||
|
|
||||||
static const char* l_arcName = "CrvFence";
|
static const char* l_arcName = "CrvFence";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||||
|
|
||||||
#include "d/actor/d_a_obj_ornament_cloth.h"
|
#include "d/actor/d_a_obj_ornament_cloth.h"
|
||||||
|
#include "d/actor/d_a_player.h"
|
||||||
#include "d/d_a_obj.h"
|
#include "d/d_a_obj.h"
|
||||||
|
|
||||||
enum J_Necktie_RES_File_ID {
|
enum J_Necktie_RES_File_ID {
|
||||||
|
|
@ -192,7 +193,7 @@ void daObjOnCloth_c::checkPlayerMove() {
|
||||||
field_0x650[attr().delayedVibrationFrame - 1] = 0.0f;
|
field_0x650[attr().delayedVibrationFrame - 1] = 0.0f;
|
||||||
|
|
||||||
if (!(fopAcM_searchPlayerDistanceXZ2(this) > attr().playerReactionDist * attr().playerReactionDist)) {
|
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) {
|
if (fVar2 > attr().playerReactionSpeed) {
|
||||||
field_0x650[attr().delayedVibrationFrame - 1] = fVar2;
|
field_0x650[attr().delayedVibrationFrame - 1] = fVar2;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||||
|
|
||||||
#include "d/actor/d_a_obj_stopper2.h"
|
#include "d/actor/d_a_obj_stopper2.h"
|
||||||
|
#include "d/actor/d_a_player.h"
|
||||||
|
|
||||||
static char* l_arcName = "Stop00";
|
static char* l_arcName = "Stop00";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
#include "d/actor/d_a_tag_yami.h"
|
#include "d/actor/d_a_tag_yami.h"
|
||||||
#include "d/d_com_inf_game.h"
|
#include "d/d_com_inf_game.h"
|
||||||
|
#include "d/actor/d_a_player.h"
|
||||||
|
|
||||||
const static dCcD_SrcCyl l_sph_src = {
|
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);
|
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() {
|
daTbox_HIO_c::daTbox_HIO_c() {
|
||||||
mItemNo = 1;
|
mItemNo = 1;
|
||||||
mUseDebugItemNo = 0;
|
mUseDebugItemNo = 0;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
#include "d/dolzel.h" // IWYU pragma: keep
|
#include "d/dolzel.h" // IWYU pragma: keep
|
||||||
|
|
||||||
#define DISABLE_MSG_OBJECT_EXTERN
|
|
||||||
|
|
||||||
#include "d/d_msg_object.h"
|
#include "d/d_msg_object.h"
|
||||||
#include "d/d_msg_class.h"
|
#include "d/d_msg_class.h"
|
||||||
#include "d/d_msg_string.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