summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhatal175 <hatal175@users.noreply.github.com>2023-08-18 10:01:51 +0300
committerGitHub <noreply@github.com>2023-08-18 01:01:51 -0600
commit00bbaf6216935df56f2b88456d60ea894ac20a53 (patch)
tree6f04d4b9e137e71d85cd07133cccd8f912007f00
parent114582643fcdb8b99499984e7e8e1f6c4e0671da (diff)
Z2WolfHowlMgr, d_bg_s, quat OK (#1887)
-rw-r--r--include/JSystem/JAudio2/JAISound.h20
-rw-r--r--include/Z2AudioLib/Z2Audience.h7
-rw-r--r--include/Z2AudioLib/Z2Creature.h1
-rw-r--r--include/Z2AudioLib/Z2SceneMgr.h3
-rw-r--r--include/Z2AudioLib/Z2SeqMgr.h4
-rw-r--r--include/Z2AudioLib/Z2SoundMgr.h3
-rw-r--r--include/Z2AudioLib/Z2WolfHowlMgr.h32
-rw-r--r--include/d/bg/d_bg_w_base.h2
-rw-r--r--include/d/d_demo.h5
-rw-r--r--libs/Z2AudioLib/Z2WolfHowlMgr.cpp690
-rw-r--r--libs/dolphin/mtx/quat.c103
-rw-r--r--src/d/bg/d_bg_s.cpp171
-rw-r--r--src/d/bg/d_bg_w.cpp8
-rw-r--r--src/d/meter/d_meter2.cpp65
14 files changed, 504 insertions, 610 deletions
diff --git a/include/JSystem/JAudio2/JAISound.h b/include/JSystem/JAudio2/JAISound.h
index 47b1e354e6..db2165326a 100644
--- a/include/JSystem/JAudio2/JAISound.h
+++ b/include/JSystem/JAudio2/JAISound.h
@@ -116,6 +116,17 @@ struct JAISoundFader {
forceOut();
}
}
+ void fadeIn(u32 param_1) {
+ if (param_1 == 0) {
+ forceIn();
+ } else {
+ mTransition.set(1.0f, mIntensity, param_1);
+ }
+ }
+ void fadeInFromOut(u32 param_1) {
+ mIntensity = 0.0f;
+ fadeIn(param_1);
+ }
bool isOut() {
return (mTransition.mCount == 0 && mIntensity < 0.01f);
}
@@ -261,6 +272,15 @@ public:
return audible_ != NULL;
}
+ void fadeIn(u32 param_1) {
+ fader.fadeInFromOut(param_1);
+ return;
+ }
+
+ s32 getCount() const { return mCount; }
+
+ JAISoundParamsMove& getAuxiliary() { return params.mMove; }
+
/* 0x04 */ JAISoundHandle* handle_;
/* 0x08 */ JAIAudible* audible_;
/* 0x0C */ JAIAudience* audience_;
diff --git a/include/Z2AudioLib/Z2Audience.h b/include/Z2AudioLib/Z2Audience.h
index 4a91d14469..df3f518727 100644
--- a/include/Z2AudioLib/Z2Audience.h
+++ b/include/Z2AudioLib/Z2Audience.h
@@ -15,6 +15,8 @@ struct Z2AudioCamera {
/* 802BCBEC */ void convertAbsToRel(Z2Audible*, int);
/* 802BCC7C */ void convertAbsToRel(Vec&, Vec*) const;
/* 802BCCC0 */ void isInSight(Vec&) const;
+ JGeometry::TVec3<f32>* getPos() { return &mPos; }
+
/* 0x00 */ u8 field_0x0[0x30]; // set up JGeometry::TPosition3
/* 0x30 */ JGeometry::TVec3<f32> mVel;
@@ -128,6 +130,11 @@ struct Z2Audience : public JAIAudience, public JASGlobalInstance<Z2Audience> {
/* 802BD71C */ virtual void mixChannelOut(JASSoundParams const&, JAIAudible*, int);
Z2SpotMic* getLinkMic() { return mLinkMic; }
+ JGeometry::TVec3<f32> getAudioCamPos() {
+ JGeometry::TVec3<f32> pos;
+ JGeometry::setTVec3f(*(Vec*)mAudioCamera[0].getPos(), *(Vec*)pos);
+ return pos;
+ }
/* 0x004 */ f32 field_0x4;
/* 0x008 */ u8 field_0x8;
diff --git a/include/Z2AudioLib/Z2Creature.h b/include/Z2AudioLib/Z2Creature.h
index f6dac02f0f..cbc20652b6 100644
--- a/include/Z2AudioLib/Z2Creature.h
+++ b/include/Z2AudioLib/Z2Creature.h
@@ -75,6 +75,7 @@ public:
void setInWater(bool status) { mInWater = status; }
bool isInWater() { return mInWater; }
+ u8 getLinkState() const { return mLinkState; }
static Z2CreatureLink* mLinkPtr;
diff --git a/include/Z2AudioLib/Z2SceneMgr.h b/include/Z2AudioLib/Z2SceneMgr.h
index 4cb65bf48a..1f6d9d5ebd 100644
--- a/include/Z2AudioLib/Z2SceneMgr.h
+++ b/include/Z2AudioLib/Z2SceneMgr.h
@@ -28,7 +28,8 @@ public:
void loadSeWave(u32);
void loadBgmWave(u32);
- bool isSceneExist() { return sceneExist; }
+ bool isSceneExist() const { return sceneExist; }
+ int getCurrentSceneNum() const { return sceneNum; }
private:
/* 0x00 */ long BGM_ID;
diff --git a/include/Z2AudioLib/Z2SeqMgr.h b/include/Z2AudioLib/Z2SeqMgr.h
index 0313d0da0d..8d9f2dfb36 100644
--- a/include/Z2AudioLib/Z2SeqMgr.h
+++ b/include/Z2AudioLib/Z2SeqMgr.h
@@ -94,6 +94,10 @@ public:
mAllBgmMaster.mTransition.set(val, mAllBgmMaster.mIntensity, count);
}
+ bool isItemGetDemo() {
+ return field_0x08.isSoundAttached() || field_0xba != 0;
+ }
+
private:
/* 0x00 */ JAISoundHandle mMainBgmHandle;
/* 0x04 */ JAISoundHandle mSubBgmHandle;
diff --git a/include/Z2AudioLib/Z2SoundMgr.h b/include/Z2AudioLib/Z2SoundMgr.h
index dffb7174b2..5fb0c5acc9 100644
--- a/include/Z2AudioLib/Z2SoundMgr.h
+++ b/include/Z2AudioLib/Z2SoundMgr.h
@@ -23,9 +23,8 @@ public:
/* 802AA9E8 */ void multiVolumeSoundID(JAISoundID, f32);
/* 802AAAC4 */ void isPlayingSoundID(JAISoundID);
- /* 802A9EE8 */ /* virtual */ void startSound(JAISoundID, JAISoundHandle*,
+ /* 802A9EE8 */ virtual void startSound(JAISoundID, JAISoundHandle*,
JGeometry::TVec3<f32> const*);
- /* 0x000 */ void* vtable; // remove later
JAISeMgr* getSeMgr() { return &mSeMgr; }
diff --git a/include/Z2AudioLib/Z2WolfHowlMgr.h b/include/Z2AudioLib/Z2WolfHowlMgr.h
index 82c9846415..e48633730d 100644
--- a/include/Z2AudioLib/Z2WolfHowlMgr.h
+++ b/include/Z2AudioLib/Z2WolfHowlMgr.h
@@ -12,9 +12,15 @@
* The high byte of each u16 line corresponds to bar type (low, middle, high)
* The low byte of each u16 line corresponds to length of note
*/
+
+struct SongNote {
+ u8 barType;
+ u8 length;
+};
+
struct Z2WolfHowlData {
u8 mLineNum;
- u16* mSongData;
+ SongNote* mSongData;
};
class Z2WolfHowlMgr : public JASGlobalInstance<Z2WolfHowlMgr> {
@@ -23,17 +29,17 @@ public:
void resetState();
void calcVolumeMod(f32);
- void getNowPitch();
- void getNowInputValue();
+ f32 getNowPitch();
+ f32 getNowInputValue();
void calcPitchMod(f32, f32);
void startWolfHowlSound(f32, f32, bool, f32);
void setCorrectData(s8, Z2WolfHowlData*);
- void getCorrectLine(u8);
- void getCorrectLineNum();
- void checkLine();
- void getOnLineNum();
+ SongNote getCorrectLine(u8);
+ u8 getCorrectLineNum();
+ s8 checkLine();
+ s8 getOnLineNum();
void startWindStoneSound(s8, Vec*);
- void startGuideMelody(bool);
+ int startGuideMelody(bool);
void skipCorrectDemo();
private:
@@ -41,7 +47,7 @@ private:
/* 0x04 */ JAISoundHandle field_0x04;
/* 0x08 */ JAISoundHandle field_0x08;
/* 0x0C */ Z2WolfHowlData* mpCurSong;
- /* 0x10 */ Z2WolfHowlData** mpSongList;
+ /* 0x10 */ Z2WolfHowlData* mpSongList;
/* 0x14 */ f32 mNowInputValue;
/* 0x18 */ f32 field_0x18;
/* 0x1C */ f32 field_0x1c;
@@ -53,16 +59,18 @@ private:
/* 0x34 */ f32 field_0x34;
/* 0x38 */ f32 field_0x38[10];
/* 0x60 */ f32 field_0x60[10];
- /* 0x88 */ void* mTimer;
+ /* 0x88 */ u32 mTimer;
/* 0x8C */ u8 mReleaseTimer;
/* 0x8D */ u8 field_0x8d;
/* 0x8E */ s8 mCorrectCurveID;
/* 0x8F */ u8 field_0x8f;
/* 0x90 */ s16 field_0x90;
/* 0x92 */ u16 field_0x92[20];
- /* 0xBA */ s8 field_0xba;
+ /* 0xBA */ u8 field_0xba;
/* 0xBB */ s8 field_0xbb;
- /* 0xBC */ s8 field_0xbc;
+ /* 0xBC */ u8 field_0xbc;
+ /* 0xBD */ s8 field_0xbd;
+ /* 0xBE */ u16 field_0xbe;
};
#endif /* Z2WOLFHOWLMGR_H */
diff --git a/include/d/bg/d_bg_w_base.h b/include/d/bg/d_bg_w_base.h
index f0c358376c..22ee138595 100644
--- a/include/d/bg/d_bg_w_base.h
+++ b/include/d/bg/d_bg_w_base.h
@@ -23,7 +23,7 @@ public:
PRIORITY_0,
};
- typedef s32 (*PushPull_CallBack)(cBgS_PolyInfo const&, fopAc_ac_c*, s16,
+ typedef bool (*PushPull_CallBack)(fopAc_ac_c*, fopAc_ac_c*, s16,
dBgW_Base::PushPullLabel);
/* 8007E5A8 */ dBgW_Base();
diff --git a/include/d/d_demo.h b/include/d/d_demo.h
index 407a82fdf3..582e4946f4 100644
--- a/include/d/d_demo.h
+++ b/include/d/d_demo.h
@@ -8,6 +8,7 @@
#include "SSystem/SComponent/c_xyz.h"
#include "dolphin/gx/GXEnum.h"
#include "dolphin/gx/GXStruct.h"
+#include "Z2AudioLib/Z2SoundStarter.h"
class J3DModel;
class dDemo_actor_c;
@@ -301,4 +302,8 @@ public:
static const u8* m_branchData;
};
+inline Z2SoundStarter* Z2GetSoundStarter() {
+ return JASGlobalInstance<Z2SoundStarter>::getInstance();
+}
+
#endif /* D_D_DEMO_H */
diff --git a/libs/Z2AudioLib/Z2WolfHowlMgr.cpp b/libs/Z2AudioLib/Z2WolfHowlMgr.cpp
index d8b531a259..1c617026a9 100644
--- a/libs/Z2AudioLib/Z2WolfHowlMgr.cpp
+++ b/libs/Z2AudioLib/Z2WolfHowlMgr.cpp
@@ -4,191 +4,121 @@
//
#include "Z2AudioLib/Z2WolfHowlMgr.h"
+#include "Z2AudioLib/Z2Creature.h"
+#include "Z2AudioLib/Z2Calc.h"
+#include "Z2AudioLib/Z2SeqMgr.h"
+#include "Z2AudioLib/Z2SeMgr.h"
+#include "Z2AudioLib/Z2SceneMgr.h"
+#include "Z2AudioLib/Z2SoundMgr.h"
+#include "Z2AudioLib/Z2Audience.h"
#include "dolphin/os/OS.h"
-#include "dol2asm.h"
+#include "d/d_demo.h"
//
// Types:
//
-struct Z2SeqMgr {
- /* 802AF49C */ void subBgmStart(u32);
- /* 802B327C */ void stopWolfHowlSong();
-};
-
-struct Z2SeMgr {
- /* 802AB984 */ void seStart(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8);
-};
-
-struct Z2Calc {
- struct CurveSign {};
-
- /* 802A968C */ void linearTransform(f32, f32, f32, f32, f32, bool);
- /* 802A96F4 */ void getParamByExp(f32, f32, f32, f32, f32, f32, Z2Calc::CurveSign);
-};
-
//
// Forward References:
//
-extern "C" void __ct__13Z2WolfHowlMgrFv();
-extern "C" void resetState__13Z2WolfHowlMgrFv();
-extern "C" void calcVolumeMod__13Z2WolfHowlMgrFf();
-extern "C" void getNowPitch__13Z2WolfHowlMgrFv();
-extern "C" void getNowInputValue__13Z2WolfHowlMgrFv();
-extern "C" void calcPitchMod__13Z2WolfHowlMgrFff();
-extern "C" void startWolfHowlSound__13Z2WolfHowlMgrFffbf();
-extern "C" void setCorrectData__13Z2WolfHowlMgrFScP14Z2WolfHowlData();
-extern "C" void getCorrectLine__13Z2WolfHowlMgrFUc();
-extern "C" void getCorrectLineNum__13Z2WolfHowlMgrFv();
-extern "C" void checkLine__13Z2WolfHowlMgrFv();
-extern "C" void getOnLineNum__13Z2WolfHowlMgrFv();
-extern "C" void startWindStoneSound__13Z2WolfHowlMgrFScP3Vec();
-extern "C" void startGuideMelody__13Z2WolfHowlMgrFb();
-extern "C" void skipCorrectDemo__13Z2WolfHowlMgrFv();
-extern "C" void __sinit_Z2WolfHowlMgr_cpp();
-
//
// External References:
//
-extern "C" void stop__8JAISoundFUl();
-extern "C" void stop__8JAISoundFv();
-extern "C" void moveVolume__18JAISoundParamsMoveFfUl();
-extern "C" void movePitch__18JAISoundParamsMoveFfUl();
-extern "C" void func_802A2FEC();
-extern "C" void linearTransform__6Z2CalcFfffffb();
-extern "C" void getParamByExp__6Z2CalcFffffffQ26Z2Calc9CurveSign();
-extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void subBgmStart__8Z2SeqMgrFUl();
-extern "C" void stopWolfHowlSong__8Z2SeqMgrFv();
-extern "C" void _savegpr_28();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_28();
-extern "C" void _restgpr_29();
-extern "C" extern u8 data_80450B44[4];
-extern "C" extern u8 data_80450B60[4];
-extern "C" extern u8 data_80450B80[4];
-extern "C" extern u8 data_80450B84[4];
-extern "C" extern u8 data_80450B88[4];
-extern "C" u8 mLinkPtr__14Z2CreatureLink[4 + 4 /* padding */];
-
//
// Declarations:
//
/* ############################################################################################## */
/* 804508A0-804508A8 000320 0008+00 1/0 0/0 0/0 .sdata sHowlTobikusa */
-extern "C" u16 sHowlTobikusa[4];
+extern SongNote sHowlTobikusa[4];
/* 803CBC50-803CBC5C 028D70 000C+00 1/0 0/0 0/0 .data sHowlUmakusa */
-SECTION_DATA static u16 sHowlUmakusa[6] = {
- 0x010F, 0x020F, 0x033C, 0x010F, 0x020F, 0x033C,
+static SongNote sHowlUmakusa[6] = {
+ {0x01, 0x0F}, {0x02, 0x0F}, {0x03, 0x3C}, {0x01, 0x0F}, {0x02, 0x0F}, {0x03, 0x3C},
};
/* 803CBC5C-803CBC68 028D7C 000C+00 1/0 0/0 0/0 .data sHowlZeldaSong */
-SECTION_DATA static u16 sHowlZeldaSong[6] = {
- 0x021E, 0x010F, 0x032D, 0x021E, 0x010F, 0x032D,
+static SongNote sHowlZeldaSong[6] = {
+ {0x02, 0x1E}, {0x01, 0x0F}, {0x03, 0x2D}, {0x02, 0x1E}, {0x01, 0x0F}, {0x03, 0x2D},
};
/* 803CBC68-803CBC74 028D88 000C+00 1/0 0/0 0/0 .data sHowlLightPrelude */
-SECTION_DATA static u16 sHowlLightPrelude[6] = {
- 0x0114, 0x0328, 0x0114, 0x0314, 0x0214, 0x011E,
+static SongNote sHowlLightPrelude[6] = {
+ {0x01, 0x14}, {0x03, 0x28}, {0x01, 0x14}, {0x03, 0x14}, {0x02, 0x14}, {0x01, 0x1E},
};
/* 803CBC74-803CBC80 028D94 000C+00 1/0 0/0 0/0 .data sHowlSoulRequiem */
-SECTION_DATA static u16 sHowlSoulRequiem[6] = {
- 0x031E, 0x020F, 0x030F, 0x011E, 0x021E, 0x031E,
+static SongNote sHowlSoulRequiem[6] = {
+ {0x03, 0x1E}, {0x02, 0x0F}, {0x03, 0x0F}, {0x01, 0x1E}, {0x02, 0x1E}, {0x03, 0x1E},
};
/* 803CBC80-803CBC8C 028DA0 000C+00 1/0 0/0 0/0 .data sHealingSong */
-SECTION_DATA static u16 sHealingSong[6] = {
- 0x011E, 0x021E, 0x031E, 0x011E, 0x021E, 0x031E,
+static SongNote sHealingSong[6] = {
+ {0x01, 0x1E}, {0x02, 0x1E}, {0x03, 0x1E}, {0x01, 0x1E}, {0x02, 0x1E}, {0x03, 0x1E},
};
/* 803CBC8C-803CBC9C 028DAC 000E+02 1/0 0/0 0/0 .data sNewSong1 */
-SECTION_DATA static u16 sNewSong1[7] = {
- 0x031E, 0x021E, 0x011E, 0x0328, 0x0214, 0x031E, 0x011E,
+static SongNote sNewSong1[7] = {
+ {0x03, 0x1E}, {0x02, 0x1E}, {0x01, 0x1E}, {0x03, 0x28}, {0x02, 0x14}, {0x03, 0x1E}, {0x01, 0x1E},
};
/* 803CBC9C-803CBCAC 028DBC 0010+00 1/0 0/0 0/0 .data sNewSong2 */
-SECTION_DATA static u16 sNewSong2[8] = {
- 0x0114, 0x0214, 0x0314, 0x023C, 0x0314, 0x0114, 0x0214, 0x031E,
+static SongNote sNewSong2[8] = {
+ {0x01, 0x14}, {0x02, 0x14}, {0x03, 0x14}, {0x02, 0x3C}, {0x03, 0x14}, {0x01, 0x14}, {0x02, 0x14}, {0x03, 0x1E},
};
/* 803CBCAC-803CBCC0 028DCC 0012+02 1/0 0/0 0/0 .data sNewSong3 */
-SECTION_DATA static u16 sNewSong3[9] = {
- 0x021E, 0x033C, 0x0228, 0x0114, 0x033C, 0x0114, 0x0214, 0x0114, 0x022D,
+static SongNote sNewSong3[9] = {
+ {0x02, 0x1E}, {0x03, 0x3C}, {0x02, 0x28}, {0x01, 0x14}, {0x03, 0x3C}, {0x01, 0x14}, {0x02, 0x14}, {0x01, 0x14}, {0x02, 0x2D},
};
/* 803CBCC0-803CBD08 -00001 0048+00 1/1 0/0 0/0 .data sGuideData */
-SECTION_DATA static Z2WolfHowlData sGuideData[9] = {
+static Z2WolfHowlData sGuideData[9] = {
{4, sHowlTobikusa}, {6, sHowlUmakusa}, {6, sHowlZeldaSong},
{6, sHealingSong}, {6, sHowlSoulRequiem}, {6, sHowlLightPrelude},
{7, sNewSong1}, {8, sNewSong2}, {9, sNewSong3},
};
/* 80450880-80450884 000300 0004+00 2/2 0/0 0/0 .sdata cPitchDown */
-SECTION_SDATA static f32 cPitchDown = 0.8909000158309937f;
+static f32 cPitchDown = 0.8909000158309937f;
/* 80450884-80450888 000304 0004+00 4/4 0/0 0/0 .sdata cPitchCenter */
-SECTION_SDATA static f32 cPitchCenter = 1.0f;
+static f32 cPitchCenter = 1.0f;
/* 80450888-8045088C 000308 0004+00 2/2 0/0 0/0 .sdata cPitchUp */
-SECTION_SDATA static f32 cPitchUp = 1.1892000436782837f;
-
-/* 8045088C-8045088E -00001 0002+00 1/1 0/0 0/0 .sdata None */
-SECTION_SDATA static u8 struct_8045088C[2] = {
- /* 8045088C 0001+00 data_8045088C None */
- 0x07,
- /* 8045088D 0001+00 data_8045088D None */
- 0x07,
-};
+static f32 cPitchUp = 1.1892000436782837f;
+
+static u8 struct_8045088C = 7;
+static u8 struct_8045088D = 7;
/* 8045088E-80450890 00030E 0002+00 4/4 0/0 0/0 .sdata None */
-SECTION_SDATA static u16 data_8045088E = 0x1E00;
+static u8 data_8045088E = 0x1E;
+static u8 data_8045088F = 0x00;
/* 80450890-80450894 000310 0004+00 1/1 0/0 0/0 .sdata cR_FlatWidth */
-SECTION_SDATA static f32 cR_FlatWidth = 0.9438700079917908f;
+static f32 cR_FlatWidth = 0.9438700079917908f;
/* 80450894-80450898 -00001 0004+00 3/3 0/0 0/0 .sdata None */
-SECTION_SDATA static u8 struct_80450894[4] = {
- /* 80450894 0001+00 data_80450894 None */
- 0x05,
- /* 80450895 0003+00 data_80450895 None */
- 0x1E,
- 0x00,
- 0x00,
-};
+static u8 struct_80450894 = 0x05;
+static u8 struct_80450895 = 0x1E;
/* 80450898-8045089C 000318 0004+00 1/1 0/0 0/0 .sdata sStickHigh */
-SECTION_SDATA static f32 sStickHigh = 0.5f;
+static f32 sStickHigh = 0.5f;
/* 8045089C-804508A0 00031C 0004+00 1/1 0/0 0/0 .sdata sStickCenter */
-SECTION_SDATA static f32 sStickCenter = 1.0f / 5.0f;
+static f32 sStickCenter = 1.0f / 5.0f;
/* 804508A0-804508A8 000320 0008+00 1/0 0/0 0/0 .sdata sHowlTobikusa */
-SECTION_SDATA static u16 sHowlTobikusa[4] = {
- 0x011E,
- 0x031E,
- 0x011E,
- 0x031E,
+static SongNote sHowlTobikusa[4] = {
+ {0x01, 0x1E},
+ {0x03, 0x1E},
+ {0x01, 0x1E},
+ {0x03, 0x1E},
};
-/* 80455E60-80455E64 004460 0004+00 8/8 0/0 0/0 .sdata2 @3485 */
-SECTION_SDATA2 static u8 lit_3485[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
-
-/* 80455E64-80455E68 004464 0004+00 11/11 0/0 0/0 .sdata2 @3486 */
-SECTION_SDATA2 static f32 lit_3486 = 1.0f;
-
/* 802CAAC0-802CAB8C 2C5400 00CC+00 0/0 1/1 0/0 .text __ct__13Z2WolfHowlMgrFv */
-// matches with literals
-#ifdef NONMATCHING
Z2WolfHowlMgr::Z2WolfHowlMgr() : JASGlobalInstance(this) {
mpCurSong = NULL;
mNowInputValue = 0.0f;
@@ -197,7 +127,7 @@ Z2WolfHowlMgr::Z2WolfHowlMgr() : JASGlobalInstance(this) {
field_0x20 = cPitchCenter;
field_0x24 = cPitchCenter;
field_0x28 = 1.0f;
- mTimer = NULL;
+ mTimer = 0;
mReleaseTimer = 0;
mCorrectCurveID = -1;
field_0x90 = -1;
@@ -216,27 +146,15 @@ Z2WolfHowlMgr::Z2WolfHowlMgr() : JASGlobalInstance(this) {
field_0x34 = 0.0f;
field_0x30 = 0.0f;
- mpSongList = (Z2WolfHowlData**)&sGuideData;
+ mpSongList = (Z2WolfHowlData*)&sGuideData;
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm Z2WolfHowlMgr::Z2WolfHowlMgr() {
- nofralloc
-#include "asm/Z2AudioLib/Z2WolfHowlMgr/__ct__13Z2WolfHowlMgrFv.s"
-}
-#pragma pop
-#endif
/* 802CAB8C-802CABEC 2C54CC 0060+00 1/1 0/0 0/0 .text resetState__13Z2WolfHowlMgrFv */
-// matches with literals
-#ifdef NONMATCHING
void Z2WolfHowlMgr::resetState() {
field_0x18 = 1.0f;
field_0x24 = cPitchCenter;
field_0x28 = 1.0f;
- mTimer = NULL;
+ mTimer = 0;
mReleaseTimer = 0;
field_0xba = 0;
@@ -248,258 +166,370 @@ void Z2WolfHowlMgr::resetState() {
field_0x34 = 0.0f;
field_0x30 = 0.0f;
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2WolfHowlMgr::resetState() {
- nofralloc
-#include "asm/Z2AudioLib/Z2WolfHowlMgr/resetState__13Z2WolfHowlMgrFv.s"
-}
-#pragma pop
-#endif
-
-/* ############################################################################################## */
-/* 80455E68-80455E6C 004468 0004+00 2/2 0/0 0/0 .sdata2 @3527 */
-SECTION_SDATA2 static f32 lit_3527 = 30.0f;
-
-/* 80455E6C-80455E70 00446C 0004+00 1/1 0/0 0/0 .sdata2 @3528 */
-SECTION_SDATA2 static f32 lit_3528 = 2.0f;
-
-/* 80455E70-80455E78 004470 0008+00 2/2 0/0 0/0 .sdata2 @3530 */
-SECTION_SDATA2 static f64 lit_3530 = 4503599627370496.0 /* cast u32 to float */;
/* 802CABEC-802CACB0 2C552C 00C4+00 1/1 0/0 0/0 .text calcVolumeMod__13Z2WolfHowlMgrFf */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2WolfHowlMgr::calcVolumeMod(f32 param_0) {
- nofralloc
-#include "asm/Z2AudioLib/Z2WolfHowlMgr/calcVolumeMod__13Z2WolfHowlMgrFf.s"
+void Z2WolfHowlMgr::calcVolumeMod(f32 param_0) {
+ if (field_0x00) {
+ if (mTimer < data_8045088E) {
+ field_0x00->getAuxiliary().moveVolume(1.0f, 0);
+ } else {
+ f32 dVar7 = 1.0f;
+ if (mReleaseTimer != 0x0) {
+ dVar7 = getParamByExp(mReleaseTimer, 30.0f, 0.0f, 2.0f, 0.0f, 1.0f, Z2Calc::CURVE_SIGN_1);
+ }
+ field_0x18 = dVar7;
+ if (field_0x00) {
+ field_0x00->getAuxiliary().moveVolume(field_0x18, 0);
+ }
+ field_0x1c = field_0x18;
+ }
+ }
}
-#pragma pop
/* 802CACB0-802CACCC 2C55F0 001C+00 1/1 0/0 0/0 .text getNowPitch__13Z2WolfHowlMgrFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2WolfHowlMgr::getNowPitch() {
- nofralloc
-#include "asm/Z2AudioLib/Z2WolfHowlMgr/getNowPitch__13Z2WolfHowlMgrFv.s"
+f32 Z2WolfHowlMgr::getNowPitch() {
+ if (field_0x00) {
+ return field_0x00->getAuxiliary().mParams.mPitch;
+ }
+
+ return 1.0f;
}
-#pragma pop
/* 802CACCC-802CACD4 2C560C 0008+00 0/0 2/2 0/0 .text getNowInputValue__13Z2WolfHowlMgrFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2WolfHowlMgr::getNowInputValue() {
- nofralloc
-#include "asm/Z2AudioLib/Z2WolfHowlMgr/getNowInputValue__13Z2WolfHowlMgrFv.s"
+f32 Z2WolfHowlMgr::getNowInputValue() {
+ return mNowInputValue;
}
-#pragma pop
-
-/* ############################################################################################## */
-/* 80455E78-80455E7C 004478 0004+00 1/1 0/0 0/0 .sdata2 @3589 */
-SECTION_SDATA2 static f32 lit_3589 = 97.0f / 100.0f;
-
-/* 80455E7C-80455E80 00447C 0004+00 4/4 0/0 0/0 .sdata2 @3590 */
-SECTION_SDATA2 static f32 lit_3590 = -1.0f;
/* 802CACD4-802CAED4 2C5614 0200+00 1/1 0/0 0/0 .text calcPitchMod__13Z2WolfHowlMgrFff */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2WolfHowlMgr::calcPitchMod(f32 param_0, f32 param_1) {
- nofralloc
-#include "asm/Z2AudioLib/Z2WolfHowlMgr/calcPitchMod__13Z2WolfHowlMgrFff.s"
+void Z2WolfHowlMgr::calcPitchMod(f32 param_0, f32 param_1) {
+ f32 dVar12 = 1.0f;
+ field_0x20 = getNowPitch();
+ if (mReleaseTimer != 0) {
+ f32 dVar11 = getParamByExp(mReleaseTimer, 30.0f, 0.0f, 1.0f, 0.97f, 1.0f, Z2Calc::CURVE_SIGN_0);
+ dVar11 = field_0x24 * dVar11;
+ if (field_0x00) {
+ field_0x00->getAuxiliary().movePitch(dVar11, 0);
+ }
+ } else {
+ if (mTimer < data_8045088E) {
+ field_0x34 = 0.0f;
+ } else {
+ f32 dVar11 = 1.0f;
+ if (mNowInputValue < 0.0f) {
+ dVar11 = Z2Calc::linearTransform(mNowInputValue, -1.0f, 0.0f, cPitchDown, 1.0f, false);
+ } else if (mNowInputValue > 0.0f) {
+ dVar11 = Z2Calc::linearTransform(mNowInputValue, 1.0f, 0.0f,cPitchUp, 1.0f, false);
+ }
+
+ f32 temp = dVar11 * cPitchCenter;
+ f32 fVar5 = temp - (dVar12 = field_0x24);
+ if (fVar5 == 0.0f) {
+ dVar12 = dVar12;
+ } else if (fVar5 > 0.0f) {
+ dVar12 += fVar5 / struct_8045088C;
+ } else {
+ dVar12 += fVar5 / struct_8045088D;
+ }
+ }
+ field_0x24 = dVar12;
+ f32 dVar11 = Z2Calc::linearTransform(param_1, 0.0f, 1.0f, 1.0f, cR_FlatWidth, true);
+ f32 fVar5 = field_0x28 + (dVar11 - field_0x28) / struct_80450894;
+ field_0x28 = fVar5;
+ dVar12 *= fVar5;
+ if (field_0x00) {
+ field_0x00->getAuxiliary().movePitch(dVar12, 0);
+ }
+ }
}
-#pragma pop
/* 802CAED4-802CB100 2C5814 022C+00 0/0 1/1 0/0 .text startWolfHowlSound__13Z2WolfHowlMgrFffbf */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2WolfHowlMgr::startWolfHowlSound(f32 param_0, f32 param_1, bool param_2, f32 param_3) {
- nofralloc
-#include "asm/Z2AudioLib/Z2WolfHowlMgr/startWolfHowlSound__13Z2WolfHowlMgrFffbf.s"
-}
-#pragma pop
-
-/* ############################################################################################## */
-/* 80455E80-80455E84 004480 0004+00 1/1 0/0 0/0 .sdata2 @3711 */
-SECTION_SDATA2 static f32 lit_3711 = 1.1224600076675415f;
-
-/* 80455E84-80455E88 004484 0004+00 1/1 0/0 0/0 .sdata2 @3712 */
-SECTION_SDATA2 static f32 lit_3712 = 1.0594600439071655f;
-
-/* 80455E88-80455E8C 004488 0004+00 1/1 0/0 0/0 .sdata2 @3713 */
-SECTION_SDATA2 static f32 lit_3713 = 0.7936859726905823f;
-
-/* 80455E8C-80455E90 00448C 0004+00 1/1 0/0 0/0 .sdata2 @3714 */
-SECTION_SDATA2 static f32 lit_3714 = 1.2599060535430908f;
-
-/* 80455E90-80455E94 004490 0004+00 1/1 0/0 0/0 .sdata2 @3715 */
-SECTION_SDATA2 static f32 lit_3715 = 0.9438700079917908f;
-
-/* 80455E94-80455E98 004494 0004+00 1/1 0/0 0/0 .sdata2 @3716 */
-SECTION_SDATA2 static f32 lit_3716 = 0.8408849835395813f;
-
-/* 80455E98-80455E9C 004498 0004+00 1/1 0/0 0/0 .sdata2 @3717 */
-SECTION_SDATA2 static f32 lit_3717 = 1.3348400592803955f;
-
-/* 80455E9C-80455EA0 00449C 0004+00 1/1 0/0 0/0 .sdata2 @3718 */
-SECTION_SDATA2 static f32 lit_3718 = 0.8909000158309937f;
+void Z2WolfHowlMgr::startWolfHowlSound(f32 param_0, f32 param_1, bool param_2, f32 param_3) {
+ if (mCorrectCurveID > 1) {
+ Z2GetSeqMgr()->i_setWindStoneVol(0.0f, 0);
+ }
-/* 80455EA0-80455EA4 0044A0 0004+00 1/1 0/0 0/0 .sdata2 @3719 */
-SECTION_SDATA2 static f32 lit_3719 = 0.7491499781608582f;
+ if (Z2GetSeqMgr()->isItemGetDemo() || (mReleaseTimer != 0)) {
+ param_2 = false;
+ } else {
+ if (param_1 > sStickCenter) {
+ mNowInputValue = Z2Calc::linearTransform(param_1, sStickCenter, sStickHigh, 0.0f, 1.0f, false);
+ } else {
+ f32 fVar1 = -1.0f * sStickCenter;
+ if (param_1 < fVar1) {
+ mNowInputValue = Z2Calc::linearTransform(param_1, fVar1, -1.0f * sStickHigh, 0.0f, -1.0f, false);
+ } else {
+ mNowInputValue = 0.0f;
+ }
+ }
+ }
-/* 80455EA4-80455EA8 0044A4 0004+00 1/1 0/0 0/0 .sdata2 @3720 */
-SECTION_SDATA2 static f32 lit_3720 = 1.1892000436782837f;
+ if (param_2) {
+ if (mTimer > data_8045088E) {
+ //JVar7 = (JAISoundID)JAISoundID::JAISoundID(aJStack_34, 0x10035);
+ Z2GetSoundStarter()->startLevelSound(0x10035, &field_0x00, NULL);
+ }
+ if (field_0x00) {
+ calcPitchMod(0.0f, 0.0f);
+ calcVolumeMod(param_3);
+ }
+ mTimer++;
+ } else {
+ if (mTimer > data_8045088E) {
+ if (mReleaseTimer < 0x1e) {
+ Z2GetSoundStarter()->startLevelSound(0x10035, &field_0x00, NULL);
+ if (field_0x00) {
+ calcPitchMod(0.0f, 0.0f);
+ calcVolumeMod(param_3);
+ }
+ mReleaseTimer++;
+ mTimer++;
+ } else {
+ resetState();
+ }
+ } else {
+ resetState();
+ }
+ }
+ checkLine();
+}
/* 802CB100-802CB320 2C5A40 0220+00 0/0 1/1 0/0 .text
* setCorrectData__13Z2WolfHowlMgrFScP14Z2WolfHowlData */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2WolfHowlMgr::setCorrectData(s8 param_0, Z2WolfHowlData* param_1) {
- nofralloc
-#include "asm/Z2AudioLib/Z2WolfHowlMgr/setCorrectData__13Z2WolfHowlMgrFScP14Z2WolfHowlData.s"
+void Z2WolfHowlMgr::setCorrectData(s8 param_0, Z2WolfHowlData* param_1) {
+ if (param_0 == mCorrectCurveID) {
+ return;
+ }
+ if (param_0 == -1) {
+ mCorrectCurveID = -1;
+ mpCurSong = 0;
+ return;
+ }
+ if (param_1 == NULL) {
+ if (param_0 >= 9) {
+ mCorrectCurveID = -1;
+ mpCurSong = 0;
+ return;
+ }
+ param_1 = &mpSongList[param_0];
+ }
+ mCorrectCurveID = param_0;
+ mpCurSong = param_1;
+
+ switch(param_0) {
+ case 3:
+ cPitchUp = 1.1224600076675415f;
+ cPitchCenter = 1.0594600439071655f;
+ cPitchDown = 0.7936859726905823f;
+ break;
+ case 4:
+ cPitchUp = 1.2599060535430908f;
+ cPitchCenter = 0.9438700079917908f;
+ cPitchDown = 0.8408849835395813f;
+ break;
+ case 6:
+ cPitchUp = 1.3348400592803955f;
+ cPitchCenter = 0.8909000158309937f;
+ cPitchDown = 0.8909000158309937f;
+ break;
+ case 7:
+ cPitchUp = 1.2599060535430908f;
+ cPitchCenter = 0.9438700079917908f;
+ cPitchDown = 0.8909000158309937f;
+ break;
+ case 8:
+ cPitchUp = 1.1224600076675415f;
+ cPitchCenter = 0.9438700079917908f;
+ cPitchDown = 0.7491499781608582f;
+ break;
+ default:
+ cPitchUp = 1.1892000436782837f;
+ cPitchCenter = 1.0f;
+ cPitchDown = 0.8909000158309937f;
+ break;
+ }
+
+ field_0xbe = 0;
+ u32 uVar4 = 0;
+
+ for (u8 bVar5 = 0; bVar5 < getCorrectLineNum(); bVar5++) {
+ uVar4 += getCorrectLine(bVar5).length;
+ if (getCorrectLine(bVar5).barType != 0) {
+ field_0xbe += struct_80450895;
+ field_0xbe += getCorrectLine(bVar5).length;
+ }
+ }
+ field_0xbe -= uVar4 >> 2;
}
-#pragma pop
/* 802CB320-802CB370 2C5C60 0050+00 3/3 2/2 0/0 .text getCorrectLine__13Z2WolfHowlMgrFUc
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2WolfHowlMgr::getCorrectLine(u8 param_0) {
- nofralloc
-#include "asm/Z2AudioLib/Z2WolfHowlMgr/getCorrectLine__13Z2WolfHowlMgrFUc.s"
+SongNote Z2WolfHowlMgr::getCorrectLine(u8 param_0) {
+ u16 local_18;
+
+ if (mpCurSong == 0 || param_0 >= mpCurSong->mLineNum) {
+ SongNote note;
+ note.barType = 0;
+ note.length = 0;
+ return note;
+ }
+ return mpCurSong->mSongData[param_0];
}
-#pragma pop
/* 802CB370-802CB38C 2C5CB0 001C+00 2/2 1/1 0/0 .text getCorrectLineNum__13Z2WolfHowlMgrFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2WolfHowlMgr::getCorrectLineNum() {
- nofralloc
-#include "asm/Z2AudioLib/Z2WolfHowlMgr/getCorrectLineNum__13Z2WolfHowlMgrFv.s"
+u8 Z2WolfHowlMgr::getCorrectLineNum() {
+ if (mpCurSong != NULL) {
+ return mpCurSong->mLineNum;
+ }
+
+ return 0;
}
-#pragma pop
/* ############################################################################################## */
/* 804341F8-8043421C 060F18 0024+00 2/2 0/0 0/0 .bss sCorrectPhrase */
-static u8 sCorrectPhrase[36];
+static JAISoundID sCorrectPhrase[9] = {
+ 0x1000052, 0x1000053, 0x1000054, 0x1000072, 0x1000068,
+ 0x1000055, 0x1000075, 0x100007c, 0x100007f,
+};
/* 8043421C-80434240 060F3C 0024+00 2/3 0/0 0/0 .bss sWindStoneSound */
-static u8 sWindStoneSound[36];
+static JAISoundID sWindStoneSound[9] = {
+ 0xffffffff, 0xffffffff, 0x100005b, 0x1000071, 0x1000067,
+ 0x100005c, 0x1000074, 0x100007b, 0x100007e,
+};
/* 80434240-80434268 060F60 0024+04 1/2 0/0 0/0 .bss sCorrectDuo */
-static u8 sCorrectDuo[36 + 4 /* padding */];
+static JAISoundID sCorrectDuo[9] = {
+ 0xffffffff, 0xffffffff, 0xffffffff, 0x1000073, 0x1000069,
+ 0x1000066, 0x1000076, 0x100007d, 0x1000080,
+};
/* 802CB38C-802CB650 2C5CCC 02C4+00 1/1 0/0 0/0 .text checkLine__13Z2WolfHowlMgrFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2WolfHowlMgr::checkLine() {
- nofralloc
-#include "asm/Z2AudioLib/Z2WolfHowlMgr/checkLine__13Z2WolfHowlMgrFv.s"
-}
-#pragma pop
+s8 Z2WolfHowlMgr::checkLine() {
+ if (mCorrectCurveID == -1 || mpCurSong == NULL) {
+ return -1;
+ }
-/* 802CB650-802CB6EC 2C5F90 009C+00 1/1 1/1 0/0 .text getOnLineNum__13Z2WolfHowlMgrFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2WolfHowlMgr::getOnLineNum() {
- nofralloc
-#include "asm/Z2AudioLib/Z2WolfHowlMgr/getOnLineNum__13Z2WolfHowlMgrFv.s"
+ if (Z2GetSeqMgr()->isItemGetDemo()) {
+ return mCorrectCurveID;
+ }
+ if (mTimer == 0) {
+ if (field_0x90 > 0) {
+ field_0x90 = -1;
+ }
+ return -1;
+ } else if (field_0x90 >= field_0xbe) {
+ u32 uVar1 = 0;
+ for (u8 i = 0; i < getCorrectLineNum(); i++) {
+ uVar1 += getCorrectLine(i).length;
+ }
+ if (mTimer - data_8045088E < uVar1) {
+ return -1;
+ }
+ Z2GetSeMgr()->seStart(0xd, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
+ if (mCorrectCurveID > 2) {
+ if (Z2GetSceneMgr()->getCurrentSceneNum() == 0x21) {
+ Z2GetSeqMgr()->subBgmStart(sCorrectDuo[mCorrectCurveID]);
+ }
+ } else {
+ Z2GetSeqMgr()->subBgmStart(sCorrectPhrase[mCorrectCurveID]);
+ }
+ field_0x90 = 0xffff;
+ return mCorrectCurveID;
+ } else {
+ if (mTimer == 1) {
+ field_0x90 = 0;
+ field_0xba = 0;
+ field_0xbc = 0;
+ } else if (mTimer >= data_8045088E) {
+ u32 r29 = mTimer - data_8045088E;
+ u32 uVar1 = 0;
+ for (u8 i = 0; i <= field_0xba; i++) {
+ uVar1 += getCorrectLine(i).length;
+ }
+ if (r29 > uVar1 && field_0xba < getCorrectLineNum()) {
+ field_0x90 += field_0xbc;
+ if (field_0xbc > getCorrectLine(field_0xba).length / 6) {
+ field_0x90 += struct_80450895;
+ }
+ field_0xba++;
+ field_0xbc = 0;
+ } else {
+ if (getOnLineNum() > -1) {
+ field_0xbc++;
+ }
+ }
+ }
+ return -1;
+ }
+
+ return mCorrectCurveID;
}
-#pragma pop
-/* ############################################################################################## */
-/* 80455EA8-80455EB0 0044A8 0008+00 1/1 0/0 0/0 .sdata2 @4032 */
-SECTION_SDATA2 static f64 lit_4032 = 0.5;
-
-/* 80455EB0-80455EB8 0044B0 0008+00 1/1 0/0 0/0 .sdata2 @4033 */
-SECTION_SDATA2 static f64 lit_4033 = 3.0;
-
-/* 80455EB8-80455EC0 0044B8 0008+00 1/1 0/0 0/0 .sdata2 @4034 */
-SECTION_SDATA2 static u8 lit_4034[8] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-
-/* 80455EC0-80455EC4 0044C0 0004+00 1/1 0/0 0/0 .sdata2 @4035 */
-SECTION_SDATA2 static f32 lit_4035 = 2100.0f;
-
-/* 80455EC4-80455EC8 0044C4 0004+00 1/1 0/0 0/0 .sdata2 @4036 */
-SECTION_SDATA2 static f32 lit_4036 = 150.0f;
-
-/* 80455EC8-80455ECC 0044C8 0004+00 1/1 0/0 0/0 .sdata2 @4037 */
-SECTION_SDATA2 static f32 lit_4037 = 2000.0f;
-
-/* 80455ECC-80455ED0 0044CC 0004+00 1/1 0/0 0/0 .sdata2 @4038 */
-SECTION_SDATA2 static f32 lit_4038 = 9.0f / 20.0f;
-
-/* 80455ED0-80455ED4 0044D0 0004+00 1/1 0/0 0/0 .sdata2 @4039 */
-SECTION_SDATA2 static f32 lit_4039 = 1.0f / 20.0f;
-
-/* 80455ED4-80455ED8 0044D4 0004+00 1/1 0/0 0/0 .sdata2 @4040 */
-SECTION_SDATA2 static f32 lit_4040 = 2.0f / 5.0f;
+/* 802CB650-802CB6EC 2C5F90 009C+00 1/1 1/1 0/0 .text getOnLineNum__13Z2WolfHowlMgrFv */
+s8 Z2WolfHowlMgr::getOnLineNum() {
+ SongNote note = getCorrectLine(field_0xba);
+ if ((note.barType == 1 && mNowInputValue == 1.0f) ||
+ (note.barType == 2 && mNowInputValue == 0.0f) ||
+ (note.barType == 3 && mNowInputValue == -1.0f)) {
+ s8 rv = field_0xba;
+ return rv;
+ }
-/* 80455ED8-80455EE0 0044D8 0004+04 1/1 0/0 0/0 .sdata2 @4041 */
-SECTION_SDATA2 static f32 lit_4041[1 + 1 /* padding */] = {
- 1.0f / 25.0f,
- /* padding */
- 0.0f,
-};
+ return -1;
+}
/* 802CB6EC-802CBA88 2C602C 039C+00 0/0 0/0 2/2 .text startWindStoneSound__13Z2WolfHowlMgrFScP3Vec
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2WolfHowlMgr::startWindStoneSound(s8 param_0, Vec* param_1) {
- nofralloc
-#include "asm/Z2AudioLib/Z2WolfHowlMgr/startWindStoneSound__13Z2WolfHowlMgrFScP3Vec.s"
+void Z2WolfHowlMgr::startWindStoneSound(s8 param_0, Vec* param_1) {
+ if (param_1 == NULL || Z2GetLink() == NULL || Z2GetLink()->getCurrentPos() == NULL) {
+ return;
+ }
+ JGeometry::TVec3<f32> local_60 = Z2GetAudience()->getAudioCamPos();
+ f32 dVar13 = sqrtf(PSVECSquareDistance(param_1, local_60));
+ if (dVar13 > 2100.0f && field_0x04) {
+ field_0x04->stop();
+ } else if (dVar13 < 2100.0f && !field_0x04) {
+ Z2GetSoundMgr()->startSound(sWindStoneSound[param_0], &field_0x04, (const JGeometry::TVec3<f32>*)param_1);
+ }
+ if (field_0x04) {
+ field_0x04->fadeIn(0);
+ field_0x04->stop(0x1e);
+ if (Z2GetLink()->getLinkState() == 1) {
+ f32 fVar14 = sqrtf(PSVECSquareDistance(param_1, Z2GetLink()->getCurrentPos()));
+ f32 dVar13 = 1.0f;
+ if (fVar14 < 150.0f) {
+ dVar13 = 0.0f;
+ } else if (fVar14 < 2000.0f) {
+ dVar13 = Z2Calc::getParamByExp(fVar14, 150.0f, 2000.0f,
+ 0.45f, 0.05f, dVar13, Z2Calc::CURVE_SIGN_0);
+ }
+ Z2GetSeqMgr()->i_setWindStoneVol(dVar13, 0);
+ field_0x04->getAuxiliary().moveVolume(0.4f, 0);
+ } else {
+ field_0x04->getAuxiliary().moveVolume(0.04f, 0);
+ }
+ }
}
-#pragma pop
/* 802CBA88-802CBB58 2C63C8 00D0+00 0/0 1/1 0/0 .text startGuideMelody__13Z2WolfHowlMgrFb
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2WolfHowlMgr::startGuideMelody(bool param_0) {
- nofralloc
-#include "asm/Z2AudioLib/Z2WolfHowlMgr/startGuideMelody__13Z2WolfHowlMgrFb.s"
+int Z2WolfHowlMgr::startGuideMelody(bool param_0) {
+ Z2GetSeqMgr()->i_setWindStoneVol(0.0f, 0);
+ if (param_0) {
+ Z2GetSoundMgr()->startSound(sWindStoneSound[mCorrectCurveID], &field_0x08, NULL);
+ }
+ if (field_0x08) {
+ field_0x08->fadeIn(0);
+ field_0x08->stop(0x1e);
+ return field_0x08->getCount();
+ }
+ return 0;
}
-#pragma pop
/* 802CBB58-802CBB7C 2C6498 0024+00 0/0 1/1 0/0 .text skipCorrectDemo__13Z2WolfHowlMgrFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2WolfHowlMgr::skipCorrectDemo() {
- nofralloc
-#include "asm/Z2AudioLib/Z2WolfHowlMgr/skipCorrectDemo__13Z2WolfHowlMgrFv.s"
-}
-#pragma pop
-
-/* 802CBB7C-802CBC60 2C64BC 00E4+00 0/0 1/0 0/0 .text __sinit_Z2WolfHowlMgr_cpp */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void __sinit_Z2WolfHowlMgr_cpp(){nofralloc
-#include "asm/Z2AudioLib/Z2WolfHowlMgr/__sinit_Z2WolfHowlMgr_cpp.s"
+void Z2WolfHowlMgr::skipCorrectDemo() {
+ Z2GetSeqMgr()->stopWolfHowlSong();
}
-#pragma pop
-#pragma push
-#pragma force_active on
-REGISTER_CTORS(0x802CBB7C, __sinit_Z2WolfHowlMgr_cpp);
-#pragma pop
diff --git a/libs/dolphin/mtx/quat.c b/libs/dolphin/mtx/quat.c
index 309b0534f9..22221a204b 100644
--- a/libs/dolphin/mtx/quat.c
+++ b/libs/dolphin/mtx/quat.c
@@ -5,58 +5,45 @@
#include "dolphin/mtx/quat.h"
#include "MSL_C/math.h"
-#include "dol2asm.h"
/* 80347418-80347474 341D58 005C+00 0/0 0/0 2/2 .text PSQUATMultiply */
-#pragma push
-#pragma optimization_level 0
-asm void PSQUATMultiply(register const Quaternion* a, register const Quaternion* b, register Quaternion* ab) {
- nofralloc
-
- psq_l f0, 0(a), 0, 0
- psq_l f1, 8(a), 0, 0
- psq_l f2, 0(b), 0, 0
- ps_neg f5, f0
- psq_l f3, 8(b), 0, 0
- ps_neg f6, f1
- ps_merge01 f4, f5, f0
- ps_muls0 f7, f1, f2
- ps_muls0 f5, f5, f2
- ps_merge01 f1, f6, f1
- ps_muls1 f8, f4, f2
- ps_madds0 f7, f4, f3, f7
- ps_muls1 f2, f1, f2
- ps_madds0 f5, f1, f3, f5
- ps_madds1 f8, f6, f3, f8
- ps_merge10 f7, f7, f7
- ps_madds1 f2, f0, f3, f2
- ps_merge10 f5, f5, f5
- ps_add f7, f7, f2
- psq_st f7, 0(ab), 0, 0
- ps_sub f5, f5, f8
- psq_st f5, 8(ab), 0, 0
- blr
+void PSQUATMultiply(register const Quaternion* a, register const Quaternion* b, register Quaternion* ab) {
+ asm {
+ psq_l f0, 0(a), 0, 0
+ psq_l f1, 8(a), 0, 0
+ psq_l f2, 0(b), 0, 0
+ ps_neg f5, f0
+ psq_l f3, 8(b), 0, 0
+ ps_neg f6, f1
+ ps_merge01 f4, f5, f0
+ ps_muls0 f7, f1, f2
+ ps_muls0 f5, f5, f2
+ ps_merge01 f1, f6, f1
+ ps_muls1 f8, f4, f2
+ ps_madds0 f7, f4, f3, f7
+ ps_muls1 f2, f1, f2
+ ps_madds0 f5, f1, f3, f5
+ ps_madds1 f8, f6, f3, f8
+ ps_merge10 f7, f7, f7
+ ps_madds1 f2, f0, f3, f2
+ ps_merge10 f5, f5, f5
+ ps_add f7, f7, f2
+ psq_st f7, 0(ab), 0, 0
+ ps_sub f5, f5, f8
+ psq_st f5, 8(ab), 0, 0
+ }
}
-#pragma pop
-/* ############################################################################################## */
-/* 80456550-80456554 004B50 0004+00 1/1 0/0 0/0 .sdata2 @130 */
-SECTION_SDATA2 static u8 lit_130[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
-
-/* 80456554-80456558 004B54 0004+00 1/1 0/0 0/0 .sdata2 @133 */
-SECTION_SDATA2 static f32 lit_133 = 1.0f;
+// Dummy functions to set literal order
+static f32 dummyLiteralFunc() {
+ return 0.0f;
+}
-/* 80456558-8045655C 004B58 0004+00 1/1 0/0 0/0 .sdata2 @135 */
-SECTION_SDATA2 static f32 lit_135 = 0.5f;
+static f32 dummyLiteralFunc2() {
+ return 1.0f;
+}
/* 80347474-80347500 341DB4 008C+00 0/0 1/1 0/0 .text C_QUATRotAxisRad */
-#ifdef NONMATCHING
-// matches with literals
void C_QUATRotAxisRad(Quaternion* q, const Vec* axis, f32 rad) {
f32 tmp,tmp2,tmp3;
Vec dst;
@@ -74,24 +61,8 @@ void C_QUATRotAxisRad(Quaternion* q, const Vec* axis, f32 rad) {
q->z = tmp * dst.z;
q->w = tmp3;
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void C_QUATRotAxisRad(Quaternion* q, const Vec* axis, f32 rad) {
- nofralloc
-#include "asm/dolphin/mtx/quat/C_QUATRotAxisRad.s"
-}
-#pragma pop
-#endif
-
-/* ############################################################################################## */
-/* 8045655C-80456560 004B5C 0004+00 1/1 0/0 0/0 .sdata2 @261 */
-SECTION_SDATA2 static f32 lit_261 = 0.9999899864196777f;
/* 80347500-80347674 341E40 0174+00 0/0 0/0 2/2 .text C_QUATSlerp */
-#ifdef NONMATCHING
-// matches with literals
void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t) {
f32 ratioA, ratioB;
@@ -120,13 +91,3 @@ void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t)
r->z = (ratioA * p->z) + (value * q->z);
r->w = (ratioA * p->w) + (value * q->w);
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t) {
- nofralloc
-#include "asm/dolphin/mtx/quat/C_QUATSlerp.s"
-}
-#pragma pop
-#endif \ No newline at end of file
diff --git a/src/d/bg/d_bg_s.cpp b/src/d/bg/d_bg_s.cpp
index 0991572ba0..84abe067f9 100644
--- a/src/d/bg/d_bg_s.cpp
+++ b/src/d/bg/d_bg_s.cpp
@@ -7,128 +7,18 @@
#include "d/bg/d_bg_s_sph_chk.h"
#include "d/bg/d_bg_w.h"
#include "d/com/d_com_inf_game.h"
-#include "dol2asm.h"
+#include "dolphin/mtx/mtxvec.h"
+#include "dolphin/types.h"
#include "f_op/f_op_actor_mng.h"
//
// Forward References:
//
-extern "C" void Init__11cBgS_ChkElmFv();
-extern "C" void Regist2__11cBgS_ChkElmFP9dBgW_BaseUiPv();
-extern "C" void Release__11cBgS_ChkElmFv();
-extern "C" void Regist__4cBgSFP9dBgW_BaseUiPv();
-extern "C" void Release__4cBgSFP9dBgW_Base();
-extern "C" void Ct__4cBgSFv();
-extern "C" void Dt__4cBgSFv();
-extern "C" void LineCross__4cBgSFP11cBgS_LinChk();
-extern "C" void GroundCross__4cBgSFP11cBgS_GndChk();
-extern "C" void ConvDzb__4cBgSFPv();
-extern "C" void GetActorPointer__4cBgSCFi();
-extern "C" void GetBgWBasePointer__4cBgSCFRC13cBgS_PolyInfo();
-extern "C" void ChkPolySafe__4cBgSFRC13cBgS_PolyInfo();
-extern "C" void GetGrpRoomId__4cBgSCFRC13cBgS_PolyInfo();
-extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla();
-extern "C" void GetTriPnt__4cBgSCFRC13cBgS_PolyInfoP4cXyzP4cXyzP4cXyz();
-extern "C" void ShdwDraw__4cBgSFP13cBgS_ShdwDraw();
-extern "C" void GetGrpInf__4cBgSCFRC13cBgS_PolyInfo();
-extern "C" void Ct__4dBgSFv();
-extern "C" void Dt__4dBgSFv();
-extern "C" void ClrMoveFlag__4dBgSFv();
-extern "C" void Move__4dBgSFv();
-extern "C" void Regist__4dBgSFP9dBgW_BaseP10fopAc_ac_c();
-extern "C" void SetOldShapeAngleY__9dBgW_BaseFs();
-extern "C" void ChkMoveBG__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void ChkMoveBG_NoDABg__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void GetExitId__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void GetPolyColor__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void GetHorseNoEntry__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void GetSpecialCode__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void GetMagnetCode__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void GetMonkeyBarsCode__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void GetUnderwaterRoofCode__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void GetWallCode__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void GetPolyAtt0__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void GetPolyAtt1__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void GetGroundCode__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void GetCamMoveBG__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void GetRoomCamId__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void GetRoomPathId__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void GetRoomPathPntNo__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void GetGrpSoundId__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void ChkGrpInf__4dBgSFRC13cBgS_PolyInfoUl();
-extern "C" void GetRoomId__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void GetPolyAttackThrough__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void ChkPolyHSStick__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void WallCorrect__4dBgSFP9dBgS_Acch();
-extern "C" void WallCorrectSort__4dBgSFP9dBgS_Acch();
-extern "C" void RoofChk__4dBgSFP12dBgS_RoofChk();
-extern "C" void SplGrpChk__4dBgSFP14dBgS_SplGrpChk();
-extern "C" void SphChk__4dBgSFP11dBgS_SphChkPv();
-extern "C" void MoveBgCrrPos__4dBgSFRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyzbb();
-extern "C" void MoveBgTransPos__4dBgSFRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz();
-extern "C" void MoveBgMatrixCrrPos__4dBgSFRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz();
-extern "C" void dBgS_MoveBGProc_Typical__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz();
-extern "C" static void dBgS_MoveBGProc_RotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz();
-extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz();
-extern "C" void dBgS_MoveBGProc_Trans__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz();
-extern "C" void RideCallBack__4dBgSFRC13cBgS_PolyInfoP10fopAc_ac_c();
-extern "C" void ArrowStickCallBack__4dBgSFRC13cBgS_PolyInfoP10fopAc_ac_cR4cXyz();
-extern "C" void
-PushPullCallBack__4dBgSFRC13cBgS_PolyInfoP10fopAc_ac_csQ29dBgW_Base13PushPullLabel();
-extern "C" void dBgS_CheckBWallPoly__FRC13cBgS_PolyInfo();
-extern "C" void dBgS_CheckBGroundPoly__FRC13cBgS_PolyInfo();
-extern "C" void dBgS_CheckBRoofPoly__FRC13cBgS_PolyInfo();
-extern "C" void dBgS_GetNY__FRC13cBgS_PolyInfo();
-extern "C" extern void* __vt__4dBgS[5];
-extern "C" extern void* __vt__4cBgS[5];
-extern "C" extern void* __vt__11cBgS_ChkElm[4];
-extern "C" extern u8 data_80450F68[8];
-
//
// External References:
//
-extern "C" void __dt__11cBgS_ChkElmFv();
-extern "C" void __dt__4dBgSFv();
-extern "C" void __dt__4cBgSFv();
-extern "C" void SetNowActorInfo__9dBgS_AcchFiPvUi();
-extern "C" void CalcMovePosWork__9dBgS_AcchFv();
-extern "C" void CalcWallRR__9dBgS_AcchFv();
-extern "C" void Init__14dBgS_SplGrpChkFv();
-extern "C" void Init__12dBgS_RoofChkFv();
-extern "C" void GetTrans__4cBgWCFP4cXyz();
-extern "C" void CalcDiffShapeAngleY__9dBgW_BaseFs();
-extern "C" void ChkSameActorPid__8cBgS_ChkCFUi();
-extern "C" void PreCheck__11cBgS_GndChkFv();
-extern "C" void PreCalc__11cBgS_LinChkFv();
-extern "C" void ChkSetInfo__13cBgS_PolyInfoCFv();
-extern "C" void ClearPi__13cBgS_PolyInfoFv();
-extern "C" void SetActorInfo__13cBgS_PolyInfoFiPvUi();
-extern "C" void ChkSafe__13cBgS_PolyInfoCFPCvUi();
-extern "C" void ChkBgIndex__13cBgS_PolyInfoCFv();
-extern "C" void Regist__9cBgW_BgIdFi();
-extern "C" void Release__9cBgW_BgIdFv();
-extern "C" void ChkUsed__9cBgW_BgIdCFv();
-extern "C" void cBgW_CheckBGround__Ff();
-extern "C" bool cBgW_CheckBRoof__Ff(f32);
-extern "C" void cBgW_CheckBWall__Ff();
-extern "C" void _savegpr_22();
-extern "C" void _savegpr_24();
-extern "C" void _savegpr_25();
-extern "C" void _savegpr_26();
-extern "C" void _savegpr_27();
-extern "C" void _savegpr_28();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_22();
-extern "C" void _restgpr_24();
-extern "C" void _restgpr_25();
-extern "C" void _restgpr_26();
-extern "C" void _restgpr_27();
-extern "C" void _restgpr_28();
-extern "C" void _restgpr_29();
-extern "C" extern void* __vt__8cM3dGPla[3];
-
//
// Declarations:
//
@@ -302,16 +192,15 @@ struct cBgS_dzb_strgroup {
};
/* 80074578-80074618 06EEB8 00A0+00 0/0 1/1 0/0 .text ConvDzb__4cBgSFPv */
-#ifdef NONMATCHING
void* cBgS::ConvDzb(void* p_dzb) {
cBgS_dzb_data* pbgd = (cBgS_dzb_data*)p_dzb;
- if ((pbgd->field_0x30 & 0x80000000)) {
- return;
+ if (((pbgd->field_0x30 & 0x80000000) == 0)) {
+ pbgd->field_0x30 |= 0x80000000;
+ } else {
+ return p_dzb;
}
- pbgd->field_0x30 |= 0x80000000;
-
if (pbgd->m_v_tbl != 0) {
pbgd->m_v_tbl += (u32)p_dzb;
}
@@ -328,16 +217,6 @@ void* cBgS::ConvDzb(void* p_dzb) {
return p_dzb;
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void* cBgS::ConvDzb(void* param_0) {
- nofralloc
-#include "asm/d/bg/d_bg_s/ConvDzb__4cBgSFPv.s"
-}
-#pragma pop
-#endif
/* 80074618-80074628 06EF58 0010+00 0/0 9/9 13/13 .text GetActorPointer__4cBgSCFi */
fopAc_ac_c* cBgS::GetActorPointer(int actor_index) const {
@@ -679,8 +558,6 @@ u32 dBgS::ChkGrpInf(cBgS_PolyInfo const& poly, u32 param_1) {
}
/* 80075100-8007519C 06FA40 009C+00 0/0 16/16 60/60 .text GetRoomId__4dBgSFRC13cBgS_PolyInfo */
-// close
-#ifdef NONMATCHING
s32 dBgS::GetRoomId(cBgS_PolyInfo const& poly) {
if (!poly.ChkSetInfo()) {
return -1;
@@ -692,22 +569,15 @@ s32 dBgS::GetRoomId(cBgS_PolyInfo const& poly) {
}
s32 roomId = m_chk_element[id].m_bgw_base_ptr->GetRoomId();
- if (roomId == 0xFF && GetGrpRoomId(poly) == 0xFF) {
- return -1;
+ if (roomId == 0xFF) {
+ roomId = GetGrpRoomId(poly);
+ if (roomId == 0xFF) {
+ roomId = -1;
+ }
}
- // return -1;
+ return roomId;
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm s32 dBgS::GetRoomId(cBgS_PolyInfo const& param_0) {
- nofralloc
-#include "asm/d/bg/d_bg_s/GetRoomId__4dBgSFRC13cBgS_PolyInfo.s"
-}
-#pragma pop
-#endif
/* 8007519C-800751F8 06FADC 005C+00 0/0 3/3 0/0 .text
* GetPolyAttackThrough__4dBgSFRC13cBgS_PolyInfo */
@@ -981,7 +851,6 @@ void dBgS::ArrowStickCallBack(cBgS_PolyInfo const& poly, fopAc_ac_c* param_1, cX
/* 80075C6C-80075D0C 0705AC 00A0+00 0/0 1/1 0/0 .text
* PushPullCallBack__4dBgSFRC13cBgS_PolyInfoP10fopAc_ac_csQ29dBgW_Base13PushPullLabel */
-#ifdef NONMATCHING
bool dBgS::PushPullCallBack(cBgS_PolyInfo const& param_0, fopAc_ac_c* param_1, s16 param_2,
dBgW_Base::PushPullLabel param_3) {
u16 bg_index = param_0.GetBgIndex();
@@ -998,19 +867,8 @@ bool dBgS::PushPullCallBack(cBgS_PolyInfo const& param_0, fopAc_ac_c* param_1, s
return false;
}
- base->GetPushPullCallback()(param_0, param_1, param_2, param_3);
-}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm bool dBgS::PushPullCallBack(cBgS_PolyInfo const& param_0, fopAc_ac_c* param_1, s16 param_2,
- dBgW_Base::PushPullLabel param_3) {
- nofralloc
-#include "asm/d/bg/d_bg_s/PushPullCallBack__4dBgSFRC13cBgS_PolyInfoP10fopAc_ac_csQ29dBgW_Base13PushPullLabel.s"
+ return base->GetPushPullCallback()(m_chk_element[bg_index].m_actor_ptr, param_1, param_2, param_3);
}
-#pragma pop
-#endif
/* 80075D0C-80075D7C 07064C 0070+00 0/0 8/8 1/1 .text dBgS_CheckBWallPoly__FRC13cBgS_PolyInfo */
bool dBgS_CheckBWallPoly(cBgS_PolyInfo const& poly) {
@@ -1054,5 +912,4 @@ f32 dBgS_GetNY(cBgS_PolyInfo const& poly) {
}
/* 80450F68-80450F70 000468 0008+00 0/0 1/1 0/0 .sbss None */
-extern u8 data_80450F68[8];
-u8 data_80450F68[8] ALIGN_DECL(8);
+u8 data_80450F68[8] __attribute__((aligned(8)));
diff --git a/src/d/bg/d_bg_w.cpp b/src/d/bg/d_bg_w.cpp
index 64011f3464..518d0a7321 100644
--- a/src/d/bg/d_bg_w.cpp
+++ b/src/d/bg/d_bg_w.cpp
@@ -830,7 +830,7 @@ extern "C" asm void __dt__11cBgW_GrpElmFv() {
cBgW_GrpElm::cBgW_GrpElm() {}
/* 8007A200-8007A344 074B40 0144+00 1/1 0/0 0/0 .text RwgLineCheck__4cBgWFUsP11cBgS_LinChk */
-// loop needs work
+// vtable issue
#ifdef NONMATCHING
bool cBgW::RwgLineCheck(u16 poly_index, cBgS_LinChk* linchk) {
bool chk;
@@ -852,11 +852,11 @@ bool cBgW::RwgLineCheck(u16 poly_index, cBgS_LinChk* linchk) {
}
}
- poly_index = pm_rwg[poly_index].field_0x0;
- if (poly_index != 0xFFFF) {
- return chk;
+ if (pm_rwg[poly_index].field_0x0 == 0xFFFF) {
+ break;
}
+ poly_index = pm_rwg[poly_index].field_0x0;
}
return chk;
diff --git a/src/d/meter/d_meter2.cpp b/src/d/meter/d_meter2.cpp
index 83c5120482..85852482d8 100644
--- a/src/d/meter/d_meter2.cpp
+++ b/src/d/meter/d_meter2.cpp
@@ -2028,7 +2028,8 @@ void dMeter2_c::moveButtonS() {
}
/* 80222518-80222E88 21CE58 0970+00 1/1 0/0 0/0 .text moveButtonXY__9dMeter2_cFv */
-// single r26 / r29 reg swap
+// dMeter2Info_isDirectUseItem is the issue. If you set the return value to int all through the
+// stack, it matches but then dMeter2Info_isDirectUseItem itself doesn't match.
#ifdef NONMATCHING
void dMeter2_c::moveButtonXY() {
bool sp8[2];
@@ -2192,19 +2193,19 @@ void dMeter2_c::moveButtonXY() {
dComIfGp_setXStatusForce(0, 0);
}
- if (mItemStatus[i][1] != dComIfGp_getXStatus()) {
- mItemStatus[i][1] = dComIfGp_getXStatus();
+ if (mItemStatus[i*2+1] != dComIfGp_getXStatus()) {
+ mItemStatus[i*2+1] = dComIfGp_getXStatus();
- if (mItemStatus[i][1] == 0x2D || mItemStatus[i][1] == 0x2E) {
- dComIfGp_setXStatus(mItemStatus[i][1], 1);
+ if (mItemStatus[i*2+1] == 0x2D || mItemStatus[i*2+1] == 0x2E) {
+ dComIfGp_setXStatus(mItemStatus[i*2+1], 1);
}
spC[i] = 1;
sp8[i] = 1;
}
- if (mXSetFlag[i] != dComIfGp_isXSetFlag(2)) {
- mXSetFlag[i] = dComIfGp_isXSetFlag(2);
+ if ((&mXSetFlag)[i] != dComIfGp_isXSetFlag(2)) {
+ (&mXSetFlag)[i] = dComIfGp_isXSetFlag(2);
spC[i] = 1;
sp8[i] = 1;
}
@@ -2214,37 +2215,37 @@ void dMeter2_c::moveButtonXY() {
dComIfGp_setYStatusForce(0, 0);
}
- if (mItemStatus[i][1] != dComIfGp_getYStatus()) {
- mItemStatus[i][1] = dComIfGp_getYStatus();
+ if (mItemStatus[i*2+1] != dComIfGp_getYStatus()) {
+ mItemStatus[i*2+1] = dComIfGp_getYStatus();
- if (mItemStatus[i][1] == 0x2D || mItemStatus[i][1] == 0x2E) {
- dComIfGp_setYStatus(mItemStatus[i][1], 1);
+ if (mItemStatus[i*2+1] == 0x2D || mItemStatus[i*2+1] == 0x2E) {
+ dComIfGp_setYStatus(mItemStatus[i*2+1], 1);
}
spC[i] = 1;
sp8[i] = 1;
}
- if (mXSetFlag[i] != dComIfGp_isYSetFlag(2)) {
- mXSetFlag[i] = dComIfGp_isYSetFlag(2);
+ if ((&mXSetFlag)[i] != dComIfGp_isYSetFlag(2)) {
+ (&mXSetFlag)[i] = dComIfGp_isYSetFlag(2);
spC[i] = 1;
sp8[i] = 1;
}
}
} else {
- if (mItemStatus[0][i] != dComIfGp_getSelectItem(i) || field_0x128 != field_0x12c) {
- mItemStatus[0][i] = dComIfGp_getSelectItem(i);
- spC[i] = 1; //
+ if (mItemStatus[2*i] != dComIfGp_getSelectItem(i) || field_0x128 != field_0x12c) {
+ mItemStatus[2*i] = dComIfGp_getSelectItem(i);
+ spC[i] = 1;
sp8[i] = 1;
}
- if (field_0x1d6[i][0] != dMeter2Info_isDirectUseItem(i)) {
- field_0x1d6[i][0] = dMeter2Info_isDirectUseItem(i);
- spC[i] = 1; //
+ if (field_0x1d6[i] != dMeter2Info_isDirectUseItem(i)) {
+ field_0x1d6[i] = dMeter2Info_isDirectUseItem(i);
+ spC[i] = 1;
sp8[i] = 1;
}
- if (mItemStatus[0][i] == 0x48) {
+ if (mItemStatus[2*i] == 0x48) {
if (field_0x1ec == 0) {
if (dComIfGs_getOil() != 0) {
field_0x1ec = 1;
@@ -2256,7 +2257,7 @@ void dMeter2_c::moveButtonXY() {
sp8[i] = 1;
}
}
- } else if (mItemStatus[0][i] == 0x46) {
+ } else if (mItemStatus[2*i] == 0x46) {
if (field_0x1ed == 0) {
if (daPy_getPlayerActorClass()->checkCopyRodTopUse()) {
field_0x1ed = 1;
@@ -2268,16 +2269,16 @@ void dMeter2_c::moveButtonXY() {
sp8[i] = 1;
}
}
- } else if (mItemStatus[0][i] == 0x50 || mItemStatus[0][i] == 0x70 ||
- mItemStatus[0][i] == 0x71 || mItemStatus[0][i] == 0x72)
+ } else if (mItemStatus[2*i] == 0x50 || mItemStatus[2*i] == 0x70 ||
+ mItemStatus[2*i] == 0x71 || mItemStatus[2*i] == 0x72)
{
if (sp8[i] != 0) {
mpMeterDraw->setItemNum(i, dComIfGp_getSelectItemNum(i),
dComIfGp_getSelectItemMaxNum(i));
}
- } else if (mItemStatus[0][i] == 0x76) {
- if (field_0x1d6[i][2] != dComIfGp_getSelectItemNum(i)) {
- field_0x1d6[i][2] = dComIfGp_getSelectItemNum(i);
+ } else if (mItemStatus[2*i] == 0x76) {
+ if (field_0x1d8[i] != dComIfGp_getSelectItemNum(i)) {
+ field_0x1d8[i] = dComIfGp_getSelectItemNum(i);
sp8[i] = 1;
}
@@ -2285,18 +2286,18 @@ void dMeter2_c::moveButtonXY() {
mpMeterDraw->setItemNum(i, dComIfGp_getSelectItemNum(i),
dComIfGp_getSelectItemMaxNum(i));
}
- } else if (mItemStatus[0][i] == 0x43 || mItemStatus[0][i] == 0x53 ||
- mItemStatus[0][i] == 0x54 || mItemStatus[0][i] == 0x55 ||
- mItemStatus[0][i] == 0x56 || mItemStatus[0][i] == 0x5A)
+ } else if (mItemStatus[2*i] == 0x43 || mItemStatus[2*i] == 0x53 ||
+ mItemStatus[2*i] == 0x54 || mItemStatus[2*i] == 0x55 ||
+ mItemStatus[2*i] == 0x56 || mItemStatus[2*i] == 0x5A)
{
if (sp8[i] != 0) {
mpMeterDraw->setItemNum(i, mArrowNum, dComIfGs_getArrowMax());
}
- } else if (mItemStatus[0][i] == 0x4B) {
+ } else if (mItemStatus[2*i] == 0x4B) {
if (sp8[i] != 0) {
mpMeterDraw->setItemNum(i, mPachinkoNum, dComIfGs_getPachinkoMax());
}
- } else if (mItemStatus[0][i] == 0x59) {
+ } else if (mItemStatus[2*i] == 0x59) {
u8 var_r25 = dComIfGp_getSelectItemNum(i);
u8 var_r6_2 = dComIfGp_getSelectItemMaxNum(i);
@@ -2313,7 +2314,7 @@ void dMeter2_c::moveButtonXY() {
}
if (sp8[i] != 0) {
- mpMeterDraw->drawButtonXY(i, mItemStatus[i][0], mItemStatus[i][1],
+ mpMeterDraw->drawButtonXY(i, mItemStatus[2*i], mItemStatus[i*2+1],
field_0x128 == 0 ? true : false, spC[i]);
}
}