summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLagoLunatic <LagoLunatic@users.noreply.github.com>2025-11-25 15:29:44 -0500
committerGitHub <noreply@github.com>2025-11-25 22:29:44 +0200
commit7ca9ef46dbfd335fa67ee5c5099816d7f6ba564f (patch)
treead55121784e481f2f86e0fe1b4bcbd97279b8c4b
parent9943a52a79d8cd9b8abfcb4a70e783bcb464f42f (diff)
d_a_mg_rod equivalent (#2865)
-rwxr-xr-xconfigure.py2
-rw-r--r--include/d/actor/d_a_alink.h1
-rw-r--r--include/d/actor/d_a_player.h1
-rw-r--r--include/d/d_save.h4
-rw-r--r--src/d/actor/d_a_mg_rod.cpp28
5 files changed, 19 insertions, 17 deletions
diff --git a/configure.py b/configure.py
index 15aaf20d96..dd8238045e 100755
--- a/configure.py
+++ b/configure.py
@@ -1621,7 +1621,7 @@ config.libs = [
ActorRel(MatchingFor(ALL_GCN), "d_a_crod"),
ActorRel(MatchingFor(ALL_GCN), "d_a_demo00"),
ActorRel(MatchingFor(ALL_GCN), "d_a_disappear"),
- ActorRel(NonMatching, "d_a_mg_rod"),
+ ActorRel(Equivalent, "d_a_mg_rod"), # regalloc; weak func order; inlining issues
ActorRel(MatchingFor(ALL_GCN), "d_a_midna"),
ActorRel(Equivalent, "d_a_nbomb"), # weak func order
ActorRel(MatchingFor(ALL_GCN), "d_a_obj_life_container"),
diff --git a/include/d/actor/d_a_alink.h b/include/d/actor/d_a_alink.h
index c6eeac089d..37c96e69bc 100644
--- a/include/d/actor/d_a_alink.h
+++ b/include/d/actor/d_a_alink.h
@@ -3578,7 +3578,6 @@ public:
void setFishingArm1Angle(const csXyz& i_angle) { mFishingArm1Angle = i_angle; }
void setFishingArm2Angle(const csXyz& i_angle) { field_0x3160 = i_angle; }
- void onFishingRodCastingEnd() { onNoResetFlg1(FLG1_UNK_8000); }
void endFishingCastWait() { offNoResetFlg2(FLG2_UNK_20000000); }
void startFishingCastWait() {
diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h
index 634eb245e0..84f34c80c3 100644
--- a/include/d/actor/d_a_player.h
+++ b/include/d/actor/d_a_player.h
@@ -955,6 +955,7 @@ public:
void onPortalWarpMidnaAtnKeep() { onEndResetFlg2(ERFLG2_PORTAL_WARP_MIDNA_ATN_KEEP); }
void onFogFade() { onNoResetFlg2(FLG2_UNK_4000); }
void onDkCaught2() { onNoResetFlg0(FLG0_DK_CAUGHT); }
+ void onFishingRodCastingEnd() { onNoResetFlg1(FLG1_UNK_8000); }
void onFishingRodReelEnd() { onEndResetFlg0(ERFLG0_UNK_20000); }
void onFishingHit() { onEndResetFlg0(ERFLG0_UNK_10000); }
void onFishingKeep() { onEndResetFlg2(ERFLG2_UNK_1); }
diff --git a/include/d/d_save.h b/include/d/d_save.h
index 9a391845e1..a757606a36 100644
--- a/include/d/d_save.h
+++ b/include/d/d_save.h
@@ -457,8 +457,8 @@ public:
void init();
void addFishCount(u8 i_fishIndex);
u16 getFishCount(u8 i_fishIndex) const { return mFishCount[i_fishIndex]; }
- u8 getMaxSize(s32 i_sizeIndex) { return mMaxSize[i_sizeIndex]; }
- void setMaxSize(s32 i_sizeIndex, u8 i_size) { mMaxSize[i_sizeIndex] = i_size; }
+ u8 getMaxSize(int i_sizeIndex) const { return mMaxSize[i_sizeIndex]; }
+ void setMaxSize(int i_sizeIndex, u8 i_size) { mMaxSize[i_sizeIndex] = i_size; }
private:
/* 0x00 */ u16 mFishCount[16];
diff --git a/src/d/actor/d_a_mg_rod.cpp b/src/d/actor/d_a_mg_rod.cpp
index 47af982c56..496d8c052f 100644
--- a/src/d/actor/d_a_mg_rod.cpp
+++ b/src/d/actor/d_a_mg_rod.cpp
@@ -324,9 +324,9 @@ static void rod_control(dmg_rod_class* i_this) {
i_this->field_0x6c4 = daAlink_getAlinkActorClass()->getFishingRodAngleY();
if (i_this->kind == MG_ROD_KIND_LURE && daAlink_getAlinkActorClass()->checkFishingRodGrabLeft()) {
MTXCopy(daAlink_getAlinkActorClass()->getLeftItemMatrix(), *calc_mtx);
- cMtx_YrotM(*calc_mtx, (JREG_S(3) + 0x20B6));
- cMtx_XrotM(*calc_mtx, (JREG_S(4) + 0x8000));
- cMtx_ZrotM(*calc_mtx, (JREG_S(5) - 0x4000));
+ cMtx_YrotM(*calc_mtx, (s16)(JREG_S(3) + 0x20B6));
+ cMtx_XrotM(*calc_mtx, (s16)(JREG_S(4) + 0x8000));
+ cMtx_ZrotM(*calc_mtx, (s16)(JREG_S(5) - 0x4000));
} else {
MTXCopy(daAlink_getAlinkActorClass()->getRightItemMatrix(), *calc_mtx);
if (i_this->kind == MG_ROD_KIND_LURE) {
@@ -362,8 +362,8 @@ static void rod_control(dmg_rod_class* i_this) {
MTXCopy(model->getAnmMtx(2), *calc_mtx);
cMtx_XrotM(*calc_mtx, -0x4000);
} else {
- cMtx_YrotM(*calc_mtx, (YREG_S(0) - 17000));
- cMtx_XrotM(*calc_mtx, (YREG_S(1) + 0xA134));
+ cMtx_YrotM(*calc_mtx, (s16)(YREG_S(0) - 17000));
+ cMtx_XrotM(*calc_mtx, (s16)(YREG_S(1) + 0xA134));
MtxTrans(KREG_F(3), -1.0f + KREG_F(4), -10.0f + KREG_F(5), 1);
}
@@ -1832,11 +1832,10 @@ static void ground_action(dmg_rod_class* i_this) {
i_this->field_0xffc = cM_rndFX(32768.0f);
i_this->field_0x1000 = cM_rndFX(32768.0f);
- // NONMATCHING
if (cM_rndF(1.0f) < 0.5f) {
- *(u16*)&actor->current.angle.z = 0xB000;
+ actor->current.angle.z = (f32)0xB000;
} else {
- *(u16*)&actor->current.angle.z = *(u32*)-0xB000;
+ actor->current.angle.z = (f32)-0xB000;
}
i_this->field_0x10a8++;
@@ -2526,6 +2525,7 @@ static void lure_hit(dmg_rod_class* i_this, mg_fish_class* i_mg_fish) {
}
/* 804B02C4-804B0A90 006DC4 07CC+00 1/1 0/0 0/0 .text lure_catch__FP13dmg_rod_class */
+// NONMATCHING - regalloc, equivalent
static void lure_catch(dmg_rod_class* i_this) {
fopAc_ac_c* actor = &i_this->actor;
fopAc_ac_c* mgfish_a = fopAcM_SearchByID(i_this->mg_fish_id);
@@ -3329,11 +3329,10 @@ static void lure_main(dmg_rod_class* i_this) {
} else if (i_this->field_0x100d != 0) {
i_this->field_0x100d = 0;
- // NONMATCHING
if (cM_rndF(1.0f) < 0.5f) {
- *(u16*)&actor->current.angle.z = 0xB000;
+ actor->current.angle.z = (f32)0xB000;
} else {
- *(u16*)&actor->current.angle.z = *(u32*)-0xB000;
+ actor->current.angle.z = (f32)-0xB000;
}
}
@@ -4494,6 +4493,8 @@ static void cam_3d_morf(dmg_rod_class* i_this, f32 i_scale) {
}
/* 804B5F44-804B805C 00CA44 2118+00 1/1 0/0 0/0 .text play_camera__FP13dmg_rod_class */
+// NONMATCHING - JMAFastSqrt needs to not be inlined
+// tricks like FORCE_DONT_INLINE can stop inlining for most of the inlines in this function, but it's unclear how to stop just one inline
static void play_camera(dmg_rod_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->actor;
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
@@ -5474,8 +5475,9 @@ static void play_camera_u(dmg_rod_class* i_this) {
cLib_addCalc2(&i_this->play_cam_center.x, spA8.x, 0.1f, temp_f31);
cLib_addCalc2(&i_this->play_cam_center.y, spA8.y, 0.1f, temp_f31);
cLib_addCalc2(&i_this->play_cam_center.z, spA8.z, 0.1f, temp_f31);
-
- block_41:
+ // fallthrough
+ }
+ block_41: {
if (nREG_S(6) == (int)daAlink_getAlinkActorClass()->getFishingReelFrame()) {
daAlink_getAlinkActorClass()->fishingCastWaitAnimeStop();
}