Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 23 additions & 4 deletions configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,8 @@
# Tool versions
config.binutils_tag = "2.42-1"
config.compilers_tag = "20240706"
config.dtk_tag = "v1.2.0"
config.objdiff_tag = "v2.3.4"
config.dtk_tag = "v1.3.0"
config.objdiff_tag = "v2.7.1"
config.sjiswrap_tag = "v1.2.0"
config.wibo_tag = "0.6.11"

Expand All @@ -183,6 +183,10 @@
# Use for any additional files that should cause a re-configure when modified
config.reconfig_deps = []

# Optional numeric ID for decomp.me preset
# Can be overridden in libraries or objects
config.scratch_preset_id = 69 # Twilight Princess (DOL)

# Base flags, common to most GC/Wii games.
# Generally leave untouched, with overrides added below.
cflags_base = [
Expand Down Expand Up @@ -352,7 +356,7 @@ def Rel(lib_name: str, objects: List[Object]) -> Dict[str, Any]:

# Helper function for actor RELs
def ActorRel(status: bool, rel_name: str, extra_cflags: List[str]=[]) -> Dict[str, Any]:
return Rel(rel_name, [Object(status, f"d/actor/{rel_name}.cpp", extra_cflags=extra_cflags)])
return Rel(rel_name, [Object(status, f"d/actor/{rel_name}.cpp", extra_cflags=extra_cflags, scratch_preset_id=70)])


# Helper function for JSystem libraries
Expand Down Expand Up @@ -1572,7 +1576,7 @@ def MatchingFor(*versions):
ActorRel(NonMatching, "d_a_L7op_demo_dr"),
ActorRel(MatchingFor("GZ2E01"), "d_a_b_bh"),
ActorRel(NonMatching, "d_a_b_bq"),
ActorRel(NonMatching, "d_a_b_dr"),
ActorRel(Equivalent, "d_a_b_dr"), # weak func order
ActorRel(Equivalent, "d_a_b_dre"), # weak func order
ActorRel(NonMatching, "d_a_b_ds"),
ActorRel(NonMatching, "d_a_b_gg"),
Expand Down Expand Up @@ -2245,6 +2249,21 @@ def emit_build_rule(asset):
for asset in module.get("extract", []):
emit_build_rule(asset)

# Optional callback to adjust link order. This can be used to add, remove, or reorder objects.
# This is called once per module, with the module ID and the current link order.
#
# For example, this adds "dummy.c" to the end of the DOL link order if configured with --non-matching.
# "dummy.c" *must* be configured as a Matching (or Equivalent) object in order to be linked.
def link_order_callback(module_id: int, objects: List[str]) -> List[str]:
# Don't modify the link order for matching builds
if not config.non_matching:
return objects
if module_id == 0: # DOL
return objects + ["dummy.c"]
return objects

# Uncomment to enable the link order callback.
# config.link_order_callback = link_order_callback

# Optional extra categories for progress tracking
config.progress_categories = [
Expand Down
10 changes: 5 additions & 5 deletions include/JSystem/J3DGraphAnimator/J3DAnimation.h
Original file line number Diff line number Diff line change
Expand Up @@ -896,11 +896,11 @@ class J3DAnmVisibilityFull : public J3DAnmBase {
class J3DFrameCtrl {
public:
enum Attribute_e {
LOOP_ONCE_e,
LOOP_ONCE_RESET_e,
LOOP_REPEAT_e,
LOOP_MIRROR_ONCE_e,
LOOP_MIRROR_REPEAT_e,
EMode_NONE,
EMode_RESET,
EMode_LOOP,
EMode_REVERSE,
EMode_LOOP_REVERSE,
};

J3DFrameCtrl() { this->init(0); }
Expand Down
138 changes: 88 additions & 50 deletions include/d/actor/d_a_b_dr.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include "d/d_cc_d.h"
#include "d/d_msg_flow.h"
#include "d/d_bg_s_acch.h"
#include "m_Do/m_Do_hostIO.h"

/**
* @ingroup actors-enemies
Expand All @@ -17,9 +18,9 @@
*/
class daB_DR_c : public fopEn_enemy_c {
public:
/* 805BAF80 */ void ctrlJoint(J3DJoint*, J3DModel*);
/* 805BB120 */ void JointCallBack(J3DJoint*, int);
/* 805BB16C */ void draw();
/* 805BAF80 */ int ctrlJoint(J3DJoint*, J3DModel*);
/* 805BB120 */ static int JointCallBack(J3DJoint*, int);
/* 805BB16C */ int draw();
/* 805BB408 */ void setBck(int, u8, f32, f32);
/* 805BB4B4 */ void setActionMode(int, int);
/* 805BB4CC */ void mGlider_WindPosSet();
Expand All @@ -37,25 +38,25 @@ class daB_DR_c : public fopEn_enemy_c {
/* 805BCBF4 */ void mCountClr();
/* 805BCC18 */ void mAllClr();
/* 805BCC4C */ void mHeadAngleSet();
/* 805BCD7C */ void flapMove(bool);
/* 805BCEA4 */ void revolutionMove();
/* 805BD05C */ void mPlayerHighCheck();
/* 805BD15C */ void mBgFallGroundCheck();
/* 805BCD7C */ bool flapMove(bool);
/* 805BCEA4 */ bool revolutionMove();
/* 805BD05C */ bool mPlayerHighCheck();
/* 805BD15C */ bool mBgFallGroundCheck();
/* 805BD3E4 */ void normalHoverMove();
/* 805BD5FC */ void executeWait();
/* 805BD98C */ void executeFlyWait();
/* 805BDBC4 */ void executeTailHit();
/* 805BE9B4 */ void executeWeekHit();
/* 805BF4C8 */ void mBreathSet();
/* 805BF768 */ void mBreathHighSet(bool);
/* 805BFA6C */ void mFeintBreath();
/* 805BF768 */ bool mBreathHighSet(bool);
/* 805BFA6C */ bool mFeintBreath();
/* 805BFD88 */ void executeBreathAttack();
/* 805C062C */ void executeWindAttack();
/* 805C0CAC */ void mGliderMoveSub(f32);
/* 805C0CAC */ bool mGliderMoveSub(f32);
/* 805C0EF8 */ void executeGliderAttack();
/* 805C1E0C */ void executePillarSearch();
/* 805C24BC */ void executePillarWait();
/* 805C2BE8 */ void startDemoCheck();
/* 805C2BE8 */ bool startDemoCheck();
/* 805C2CD0 */ void executeDamageDemo();
/* 805C3558 */ void executeMiddleDemo();
/* 805C36A4 */ void executeDead();
Expand All @@ -69,38 +70,38 @@ class daB_DR_c : public fopEn_enemy_c {
/* 805C46E0 */ void cc_set();
/* 805C4E14 */ void down_cc_set();
/* 805C4FB4 */ void demo_skip(int);
/* 805C50BC */ void DemoSkipCallBack(void*, int);
/* 805C50F0 */ void execute();
/* 805C55B0 */ void _delete();
/* 805C56A4 */ void CreateHeap();
/* 805C5974 */ void create();
/* 805C50BC */ static int DemoSkipCallBack(void*, int);
/* 805C50F0 */ int execute();
/* 805C55B0 */ int _delete();
/* 805C56A4 */ int CreateHeap();
/* 805C5974 */ int create();
/* 805C62B0 */ daB_DR_c();

MtxP getMtx() { return mpModelMorf->getModel()->getAnmMtx(15); }

void onTarget() { mTarget = true; }
bool isBack() { return mPrm0; }
bool isBack() { return arg0; }

private:
/* 0x05AC */ request_of_phase_process_class mPhase;
/* 0x05B4 */ mDoExt_McaMorfSO* mpModelMorf;
/* 0x05B8 */ J3DModel* mpPartModel;
/* 0x05BC */ mDoExt_brkAnm* mpCoreBrk;
/* 0x05C0 */ Z2CreatureEnemy field_0x5c0;
/* 0x0664 */ Z2CreatureEnemy field_0x664;
/* 0x0708 */ int mAction;
/* 0x070C */ int mMode;
/* 0x0710 */ int mAnmID;
/* 0x05C0 */ Z2CreatureEnemy mSound;
/* 0x0664 */ Z2CreatureEnemy mSound2;
/* 0x0708 */ int mActionMode;
/* 0x070C */ int mMoveMode;
/* 0x0710 */ int mAnm;
/* 0x0714 */ u8 field_0x714[0x0718 - 0x0714];
/* 0x0718 */ int field_0x718;
/* 0x071C */ u8 field_0x71C[0x0720 - 0x071C];
/* 0x0720 */ f32 field_0x720;
/* 0x071C */ u32 mShadowKey;
/* 0x0720 */ f32 mTargetHeight;
/* 0x0724 */ f32 field_0x724;
/* 0x0728 */ f32 field_0x728;
/* 0x072C */ f32 field_0x72c;
/* 0x0730 */ u8 field_0x730[0x0734 - 0x0730];
/* 0x0730 */ f32 field_0x730;
/* 0x0734 */ f32 field_0x734;
/* 0x0738 */ u8 field_0x738[0x073C - 0x0738];
/* 0x0738 */ f32 field_0x738;
/* 0x073C */ f32 field_0x73c;
/* 0x0740 */ f32 field_0x740;
/* 0x0744 */ f32 field_0x744;
Expand All @@ -111,44 +112,41 @@ class daB_DR_c : public fopEn_enemy_c {
/* 0x0752 */ s16 field_0x752;
/* 0x0754 */ s16 field_0x754;
/* 0x0756 */ s16 field_0x756;
/* 0x0758 */ s16 field_0x758;
/* 0x075A */ s16 field_0x75a;
/* 0x075C */ u8 field_0x75C[0x0760 - 0x075C];
/* 0x0758 */ csXyz mHeadAngle;
/* 0x0760 */ cXyz field_0x760;
/* 0x076C */ cXyz field_0x76c;
/* 0x076C */ cXyz mBoot_c_trance;
/* 0x0778 */ cXyz field_0x778;
/* 0x0784 */ cXyz field_0x784;
/* 0x0790 */ cXyz field_0x790;
/* 0x079C */ cXyz field_0x79c;
/* 0x079C */ cXyz mGlider_WindPos;
/* 0x07A8 */ cXyz field_0x7a8;
/* 0x07B4 */ cXyz field_0x7b4;
/* 0x07C0 */ int mTimer[4];
/* 0x07D0 */ u8 field_0x7d0;
/* 0x07D1 */ u8 field_0x7d1;
/* 0x07D2 */ u8 field_0x7d2;
/* 0x07D2 */ u8 mBreakPartsNo;
/* 0x07D3 */ u8 field_0x7d3;
/* 0x07D4 */ u8 field_0x7d4;
/* 0x07D5 */ u8 field_0x7D5[0x07D6 - 0x07D5];
/* 0x07D5 */ u8 field_0x7d5;
/* 0x07D6 */ u8 field_0x7d6;
/* 0x07D7 */ u8 field_0x7d7;
/* 0x07D8 */ u8 field_0x7D8[0x07D9 - 0x07D8];
/* 0x07D8 */ u8 field_0x7d8;
/* 0x07D9 */ u8 mTarget;
/* 0x07DA */ u8 field_0x7DA[0x07DB - 0x07DA];
/* 0x07DA */ u8 field_0x7da;
/* 0x07DB */ u8 field_0x7db;
/* 0x07DC */ u8 field_0x7DC[0x07E0 - 0x07DC];
/* 0x07DC */ u8 field_0x7dc;
/* 0x07E0 */ int field_0x7e0;
/* 0x07E4 */ u8 field_0x7e4[4];
/* 0x07E4 */ u8 mCount[4];
/* 0x07E8 */ u8 field_0x7e8;
/* 0x07E9 */ u8 field_0x7E9[0x07EA - 0x07E9];
/* 0x07EA */ u8 mPrm0;
/* 0x07EB */ u8 field_0x7eb;
/* 0x07EC */ u8 mPrm1;
/* 0x07ED */ u8 mPrm2;
/* 0x07EE */ u8 mPrm3;
/* 0x07EF */ u8 field_0x7EF[0x07F0 - 0x07EF];
/* 0x07E9 */ u8 field_0x7e9;
/* 0x07EA */ u8 arg0;
/* 0x07EB */ u8 mPartNo;
/* 0x07EC */ u8 bitSw;
/* 0x07ED */ u8 bitSw2;
/* 0x07EE */ u8 bitSw3;
/* 0x07F0 */ dBgS_AcchCir mAcchCir;
/* 0x0830 */ dBgS_ObjAcch mAcch;
/* 0x0A08 */ dCcD_Stts field_0xa08;
/* 0x0A08 */ dCcD_Stts mColliderStts;
/* 0x0A44 */ dCcD_Cyl mWeekCc;
/* 0x0B80 */ dCcD_Sph mFootAtCc[2];
/* 0x0DF0 */ dCcD_Sph field_0xdf0;
Expand All @@ -162,14 +160,16 @@ class daB_DR_c : public fopEn_enemy_c {
/* 0x2174 */ dCcD_Cyl mDownCc[5];
/* 0x27A0 */ u8 field_0x27A0[0x27A8 - 0x27A0];
/* 0x27A8 */ Z2CreatureEnemy* field_0x27a8;
/* 0x27AC */ u8 field_0x27AC[0x27C4 - 0x27AC];
/* 0x27C4 */ cXyz field_0x27c4;
/* 0x27D0 */ cXyz field_0x27d0;
/* 0x27AC */ u8 field_0x27AC[0x27BE - 0x27AC];
/* 0x27BE */ u8 field_0x27be;
/* 0x27BF */ u8 field_0x27bf[0x27C4 - 0x27BF];
/* 0x27C4 */ cXyz mDemoCamEye;
/* 0x27D0 */ cXyz mDemoCamCenter;
/* 0x27DC */ u32 field_0x27dc[4];
/* 0x27EC */ u32 field_0x27ec[4];
/* 0x27FC */ u32 field_0x27fc[4];
/* 0x280C */ u32 field_0x280c;
/* 0x2810 */ u8 field_0x2810[0x2814 - 0x2810];
/* 0x2810 */ u8 mInitHIO;
/* 0x2814 */ dMsgFlow_c mMsgFlow;
};

Expand All @@ -179,7 +179,45 @@ STATIC_ASSERT(sizeof(daB_DR_c) == 0x2860);
class daB_DR_HIO_c {
public:
/* 805BAE6C */ daB_DR_HIO_c();
/* 805C6B94 */ ~daB_DR_HIO_c();
/* 805C6B94 */ virtual ~daB_DR_HIO_c() {}

/* 0x04 */ s8 field_0x4;
/* 0x08 */ f32 model_size;
/* 0x0C */ f32 fall_accel;
/* 0x10 */ f32 fall_accel_max;
/* 0x14 */ f32 wind_large_attack_lockon_range;
/* 0x18 */ f32 unk_0x18;
/* 0x1C */ f32 wind_small_attack_power;
/* 0x20 */ f32 wind_attack_power;
/* 0x24 */ f32 glide_wind_power;
/* 0x28 */ f32 breath_attack_threshold;
/* 0x2C */ f32 unk_0x2c;
/* 0x30 */ f32 breath_move_speed_max;
/* 0x34 */ f32 breath_move_speed_min;
/* 0x38 */ s16 tail_hit_chance_time;
/* 0x3A */ s16 center_wind_time;
/* 0x3C */ s16 breath_continue_time;
/* 0x3E */ s16 breath_continue_no_armor_time;
/* 0x40 */ s16 breath_feint1_time;
/* 0x42 */ s16 breath_feint2_time;
/* 0x44 */ s16 breath_feint3_time;
/* 0x46 */ s16 no_attack_time;
/* 0x48 */ s16 unk_0x48;
/* 0x4A */ s16 no_attack_no_armor_time;
/* 0x4C */ s16 unk_0x4c;
/* 0x4E */ s16 back_hit_chance_time;
/* 0x50 */ s16 after_breath_chance_time;
/* 0x52 */ s16 neck_search_speed;
/* 0x54 */ s16 neck_search2_speed;
/* 0x56 */ s16 neck_search_speed_max;
/* 0x58 */ s16 body_search_speed;
/* 0x5A */ s16 body_search2_speed;
/* 0x5C */ s16 body_search_speed_max;
/* 0x5E */ s16 body_search_feint_speed_max;
/* 0x60 */ s16 feint_angle;
/* 0x62 */ s16 unk_0x62;
/* 0x64 */ u8 display_range;
/* 0x65 */ u8 breath_feint2_OFF;
};

#endif /* D_A_B_DR_H */
3 changes: 3 additions & 0 deletions include/d/actor/d_a_player.h
Original file line number Diff line number Diff line change
Expand Up @@ -932,6 +932,7 @@ class daPy_py_c : public fopAc_ac_c {
u32 getCutAtFlg() const { return checkNoResetFlg0(FLG0_UNK_40); }
u32 checkBoarSingleBattleFirst() const { return checkNoResetFlg2(FLG2_BOAR_SINGLE_BATTLE); }
u32 checkBoarSingleBattleSecond() const { return checkNoResetFlg2(FLG2_UNK_1000000); }
u32 getFootOnGround() const { return checkResetFlg1(daPy_RFLG1(RFLG1_UNK_10 | RFLG1_UNK_20)); }

void offWolfEnemyHangBite() { offNoResetFlg2(FLG2_WOLF_ENEMY_HANG_BITE); }
bool onWolfEnemyHangBite(fopAc_ac_c* param_0) { return onWolfEnemyBiteAll(param_0, FLG2_WOLF_ENEMY_HANG_BITE); }
Expand Down Expand Up @@ -1073,6 +1074,8 @@ class daPy_py_c : public fopAc_ac_c {
static int getLastSceneDamage() { return (dComIfGs_getLastSceneMode() >> 4) & 0x7F; }
static u8 getLastSceneSwordAtUpTime() { return (dComIfGs_getLastSceneMode() >> 11) & 0xFF; }

static BOOL checkNormalSwordEquip() { return dComIfGs_getSelectEquipSword() == fpcNm_ITEM_SWORD; }

inline static u32 i_getLastSceneMode();
inline static u32 getLastSceneMode();
inline static bool checkWoodSwordEquip() {
Expand Down
Loading