summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Sandu <roma.sandu@gmail.com>2026-03-27 04:54:07 +0300
committerGitHub <noreply@github.com>2026-03-26 18:54:07 -0700
commit0fc019dcfa2ed1834825e9754d47e7948e1745f7 (patch)
treec3b06bbb412d48cc6586bea3312274dd70f00761
parentf8cf5458482d7b380f52740289745b8241448559 (diff)
JAHostIO and friends (#3131)
-rw-r--r--config/ShieldD/splits.txt4
-rw-r--r--config/ShieldD/symbols.txt6
-rwxr-xr-xconfigure.py2
-rw-r--r--include/Z2AudioLib/Z2Audience.h12
-rw-r--r--include/Z2AudioLib/Z2DebugSys.h1
-rw-r--r--include/Z2AudioLib/Z2F1TestWindow.h31
-rw-r--r--include/Z2AudioLib/Z2FxLineMgr.h95
-rw-r--r--include/Z2AudioLib/Z2SceneMgr.h8
-rw-r--r--include/Z2AudioLib/Z2SpeechMgr2.h3
-rw-r--r--include/global.h4
-rw-r--r--libs/JSystem/include/JSystem/JAHNodeLib/JAHSoundPlayerNode.h33
-rw-r--r--libs/JSystem/include/JSystem/JAHostIO/JAHFrameNode.h6
-rw-r--r--libs/JSystem/include/JSystem/JAHostIO/JAHPubDefine.h6
-rw-r--r--libs/JSystem/include/JSystem/JAHostIO/JAHUAsnData.h40
-rw-r--r--libs/JSystem/include/JSystem/JAHostIO/JAHUGlobal.h30
-rw-r--r--libs/JSystem/include/JSystem/JAHostIO/JAHUTableEdit.h39
-rw-r--r--libs/JSystem/include/JSystem/JAHostIO/JAHUpdate.h57
-rw-r--r--libs/JSystem/include/JSystem/JAHostIO/JAHVirtualNode.h19
-rw-r--r--libs/JSystem/include/JSystem/JAHostIO/JAHioMessage.h190
-rw-r--r--libs/JSystem/include/JSystem/JAudio2/JASDSPInterface.h1
-rw-r--r--libs/JSystem/include/JSystem/JAudio2/JAUSoundTable.h4
-rw-r--r--libs/JSystem/include/JSystem/JHostIO/JOREvent.h36
-rw-r--r--libs/JSystem/include/JSystem/JHostIO/JORFile.h2
-rw-r--r--libs/JSystem/include/JSystem/JHostIO/JORMContext.h23
-rw-r--r--libs/JSystem/include/JSystem/JHostIO/JORReflexible.h38
-rw-r--r--libs/JSystem/include/JSystem/JKernel/JKRArchive.h1
-rw-r--r--libs/JSystem/include/JSystem/JKernel/JKRHeap.h2
-rw-r--r--libs/JSystem/include/JSystem/JSupport/JSUInputStream.h24
-rw-r--r--libs/JSystem/include/JSystem/JSupport/JSUMemoryStream.h12
-rw-r--r--libs/JSystem/src/JAHNodeLib/JAHAudienceSettingNode.cpp5
-rw-r--r--libs/JSystem/src/JAHNodeLib/JAHConductNode.cpp8
-rw-r--r--libs/JSystem/src/JAHNodeLib/JAHIDSwapNode.cpp8
-rw-r--r--libs/JSystem/src/JAHNodeLib/JAHSoundPlayerNode.cpp149
-rw-r--r--libs/JSystem/src/JAHNodeLib/JAHViewerApp.cpp14
-rw-r--r--libs/JSystem/src/JAHNodeLib/JAHViewerSys.cpp12
-rw-r--r--libs/JSystem/src/JAHostIO/JAHFrameNode.cpp93
-rw-r--r--libs/JSystem/src/JAHostIO/JAHUAsnData.cpp172
-rw-r--r--libs/JSystem/src/JAHostIO/JAHUFx.cpp8
-rw-r--r--libs/JSystem/src/JAHostIO/JAHUTableEdit.cpp196
-rw-r--r--libs/JSystem/src/JAHostIO/JAHVirtualNode.cpp93
-rw-r--r--libs/JSystem/src/JAHostIO/JAHioMessage.cpp4
-rw-r--r--libs/JSystem/src/JAHostIO/JAHioMgr.cpp7
-rw-r--r--libs/JSystem/src/JAHostIO/JAHioNode.cpp12
-rw-r--r--libs/JSystem/src/JAHostIO/JAHioUtil.cpp13
-rw-r--r--libs/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/string6
-rw-r--r--libs/revolution/include/revolution/dvd.h9
-rw-r--r--libs/revolution/src/ipc/ipcProfile.c1
-rw-r--r--libs/revolution/src/pad/Pad.c1
-rw-r--r--libs/revolution/src/wpad/__wpad.h1
-rw-r--r--src/Z2AudioLib/SpotName.h20
-rw-r--r--src/Z2AudioLib/Z2AudioMgr.cpp1
-rw-r--r--src/Z2AudioLib/Z2DebugSys.cpp110
-rw-r--r--src/Z2AudioLib/Z2EnvSeMgr.cpp87
-rw-r--r--src/Z2AudioLib/Z2F1TestWindow.cpp198
-rw-r--r--src/Z2AudioLib/Z2FxLineMgr.cpp443
-rw-r--r--src/Z2AudioLib/Z2SceneMgr.cpp85
-rw-r--r--src/Z2AudioLib/Z2SeqMgr.cpp85
-rw-r--r--src/Z2AudioLib/Z2StatusMgr.cpp85
-rw-r--r--src/Z2AudioLib/Z2WolfHowlMgr.cpp1
59 files changed, 2132 insertions, 524 deletions
diff --git a/config/ShieldD/splits.txt b/config/ShieldD/splits.txt
index 3affc69457..0b3680a1e3 100644
--- a/config/ShieldD/splits.txt
+++ b/config/ShieldD/splits.txt
@@ -2862,7 +2862,7 @@ JSystem/JAHostIO/JAHVirtualNode.cpp:
.text start:0x804B0490 end:0x804B0A80
.data start:0x80704000 end:0x80704048
.sdata start:0x807490E0 end:0x80749108
- .sbss start:0x8074CDA0 end:0x8074CDAC
+ .sbss start:0x8074CDA0 end:0x8074CDA8
JSystem/JAHostIO/JAHUAsnData.cpp:
.text start:0x804B0A80 end:0x804B15A0
@@ -2926,7 +2926,7 @@ JSystem/JMessage/locale.cpp:
Z2AudioLib/Z2Calc.cpp:
.text start:0x804BAF50 end:0x804BB4D0
- .sbss start:0x8074CDAC end:0x8074CDB0
+ .sbss start:0x8074CDA8 end:0x8074CDB0
.sdata2 start:0x80751EC0 end:0x80751ED8
Z2AudioLib/Z2Param.cpp:
diff --git a/config/ShieldD/symbols.txt b/config/ShieldD/symbols.txt
index 91a37aa732..c894bc2a0f 100644
--- a/config/ShieldD/symbols.txt
+++ b/config/ShieldD/symbols.txt
@@ -63143,8 +63143,8 @@ __RTTI__24JAUStreamAramMgrBase_<1> = .sdata:0x8074A600; // type:object size:0x8
@STRING@__ct__32JASGlobalInstance<11Z2SoundInfo>Fb@2 = .sdata:0x8074A634; // type:object size:0x5 scope:local data:string hash:0x20DA3ACD dhash:0x94E062D9
@122994 = .sdata:0x8074A640; // type:object size:0x5 scope:local data:string hash:0xACC96C60
@122997 = .sdata:0x8074A648; // type:object size:0x7 scope:local data:string hash:0xACC96C63
-lbl_8074A64F = .sdata:0x8074A64F; // type:object size:0x1 data:byte hash:0x132ED010
-lbl_8074A650 = .sdata:0x8074A650; // type:object size:0x8 data:byte hash:0x6496B168
+gMicOn = .sdata:0x8074A64F; // type:object size:0x1 data:byte hash:0x132ED010
+gMicOffWhenOutOfSight = .sdata:0x8074A650; // type:object size:0x1 data:byte hash:0x6496B168
__RTTI__11Z2ParamNode = .sdata:0x8074A658; // type:object size:0x8 scope:global hash:0x427C3879 dhash:0xA49E2699
__RTTI__17Z2HioSeSeqDataMgr = .sdata:0x8074A660; // type:object size:0x8 scope:global hash:0x9E17CBE7 dhash:0x4E4A5DC1
@STRING@newInstance__27JAHSingletonBase<8JAHioMgr>Fv@6 = .sdata:0x8074A668; // type:object size:0x5 scope:local data:string hash:0x8DC98438 dhash:0x0A5C4CFA
@@ -64824,7 +64824,7 @@ data_80451358 = .sbss:0x8074CDD8; // type:object size:0x1 data:byte hash:0xA31DF
data_80451359 = .sbss:0x8074CDD9; // type:object size:0x1 data:byte hash:0xE4CA1432 dhash:0x0157E254
mLinkPtr__14Z2CreatureLink = .sbss:0x8074CDE0; // type:object size:0x4 scope:global data:4byte hash:0x696E3950 dhash:0xD016AAD5
mAudioMgrPtr__10Z2AudioMgr = .sbss:0x8074CDE8; // type:object size:0x4 scope:global data:4byte hash:0x54526A77 dhash:0x71D35736
-lbl_8074CDF0 = .sbss:0x8074CDF0; // type:object size:0x1 data:byte hash:0xBB7CA6C8
+gMuffleOutOfRangeMic = .sbss:0x8074CDF0; // type:object size:0x1 data:byte hash:0xBB7CA6C8
sF1_Pan_Width = .sbss:0x8074CDF8; // type:object size:0x4 scope:global align:4 data:float hash:0x38037A38
sMixingBuffer = .sbss:0x8074CE00; // type:object size:0x4 scope:global data:4byte hash:0xFB6CB64A
sInstance__29JASGlobalInstance<9SpkSystem> = .sbss:0x8074CE08; // type:object size:0x4 scope:global data:4byte hash:0xA09FFFD8 dhash:0x0F2938EA
diff --git a/configure.py b/configure.py
index 12860d0c1b..313d24f55c 100755
--- a/configure.py
+++ b/configure.py
@@ -1236,7 +1236,7 @@ config.libs = [
JSystemLib(
"JAHNodeLib",
[
- Object(NonMatching, "JSystem/JAHNodeLib/JAHAudienceSettingNode.cpp"),
+ Object(Matching, "JSystem/JAHNodeLib/JAHAudienceSettingNode.cpp"),
Object(NonMatching, "JSystem/JAHNodeLib/JAHConductNode.cpp"),
Object(NonMatching, "JSystem/JAHNodeLib/JAHIDSwapNode.cpp"),
Object(NonMatching, "JSystem/JAHNodeLib/JAHSoundPlayerNode.cpp"),
diff --git a/include/Z2AudioLib/Z2Audience.h b/include/Z2AudioLib/Z2Audience.h
index dd30b87948..75998e878b 100644
--- a/include/Z2AudioLib/Z2Audience.h
+++ b/include/Z2AudioLib/Z2Audience.h
@@ -33,7 +33,7 @@ struct Z2AudioCamera {
f32 getVolCenterZ() const { return mVolCenterZ; }
void setMainCamera(bool param_0) { mSetMainCamera = param_0; }
- void setTargetVolume(f32 vol) {
+ void setTargetVolume(f32 vol) {
JUT_ASSERT(281, vol <= 1.f);
if (vol < 0.0f) {
vol = 0.0f;
@@ -45,6 +45,10 @@ struct Z2AudioCamera {
f32 getFovySin() const { return mFovySin; }
const JGeometry::TVec3<f32>* getVel() const { return &mVel; }
+ f32 getTargetVolume() const { return mTargetVolume; }
+ f32 getCamDist() const { return mCamDist; }
+
+
/* 0x00 */ JGeometry::TPosition3f32 field_0x0;
/* 0x30 */ JGeometry::TVec3<f32> mVel;
/* 0x3C */ JGeometry::TVec3<f32> mPos;
@@ -68,6 +72,10 @@ struct Z2SpotMic {
u32 calcMicPriority(f32);
f32 calcMicVolume(f32, int camID, f32);
+ void calcPriorityFactor();
+ void setIgnoreIfOut(bool value) { mIgnoreIfOut = value; }
+ void setMicOn(bool value) { mMicOn = value; }
+
void setPosPtr(Vec* posPtr) { mPosPtr = posPtr; }
bool isOn() { return mMicOn; }
@@ -231,6 +239,8 @@ struct Z2Audience : public JAIAudience, public JASGlobalInstance<Z2Audience> {
const Z2AudioCamera* getAudioCamera(int camID) const { return &mAudioCamera[camID]; }
+ void setUsingOffMicVol(bool value) { mUsingOffMicVol = value; }
+
/* 0x004 */ f32 field_0x4;
/* 0x008 */ u8 field_0x8;
/* 0x00C */ Z2Audience3DSetting mSetting;
diff --git a/include/Z2AudioLib/Z2DebugSys.h b/include/Z2AudioLib/Z2DebugSys.h
index a98292e8c1..1acd8f97b9 100644
--- a/include/Z2AudioLib/Z2DebugSys.h
+++ b/include/Z2AudioLib/Z2DebugSys.h
@@ -12,7 +12,6 @@ class Z2ParamNode : public JAHFrameNode {
public:
Z2ParamNode() : JAHFrameNode("サウンド各種パラメータ") {}
- /* vt[07] */ virtual ~Z2ParamNode() {}
/* vt[08] */ virtual void message(JAHControl& control);
/* vt[0F] */ virtual void propertyEvent(JAH_P_Event, u32);
/* vt[12] */ virtual void onFrame();
diff --git a/include/Z2AudioLib/Z2F1TestWindow.h b/include/Z2AudioLib/Z2F1TestWindow.h
index 162e5e4b82..4c43d2678e 100644
--- a/include/Z2AudioLib/Z2F1TestWindow.h
+++ b/include/Z2AudioLib/Z2F1TestWindow.h
@@ -1,6 +1,7 @@
#ifndef Z2F1TESTWINDOW_H
#define Z2F1TESTWINDOW_H
+#include "JSystem/JAHostIO/JAHFrameNode.h"
#include "JSystem/JAHostIO/JAHUTableEdit.h"
#include "JSystem/JAWExtSystem/JAWWindow.h"
@@ -8,6 +9,21 @@ class Z2F1TestWindow : public JAWWindow {
public:
Z2F1TestWindow();
+ virtual void onDraw(JAWGraphContext*);
+ virtual void frameWork();
+ virtual void onPadProc(const JUTGamePad&);
+ virtual void onTrigY(const JUTGamePad&);
+ virtual void onTrigMenu(const JUTGamePad&);
+
+ void calcF1();
+ f32 tau(f32);
+ static f32 calcThreshold(int);
+ f32 getRawX() const;
+ f32 calcNoise();
+ void setValue(f32, f32);
+ f32 getValue2();
+ f32 getValue();
+
/* 0x3F0 */ f32 field_0x3f0;
/* 0x3F4 */ f32 field_0x3f4;
/* 0x3F8 */ f32 field_0x3f8[500];
@@ -21,12 +37,15 @@ class Z2F1SwingTestNode : public JAHFrameNode, public Z2F1TestWindow {
public:
Z2F1SwingTestNode();
+ virtual void message(JAHControl&);
+ virtual void onFrame();
+
/* 0xC48 */ JAHUSeBox field_0xc48;
/* 0xCD0 */ JAHUSeBox field_0xcd0;
- /* 0xD58 */ u8 field_0xd58;
- /* 0xD59 */ u8 field_0xd59;
- /* 0xD5A */ u8 field_0xd5a;
- /* 0xD5B */ u8 field_0xd5b;
+ /* 0xD58 */ u8 mModulateVolume;
+ /* 0xD59 */ u8 mModulatePitch;
+ /* 0xD5A */ u8 mModulatePan;
+ /* 0xD5B */ u8 mModulateDolby;
/* 0xD5C */ f32 field_0xd5c;
/* 0xD60 */ f32 field_0xd60;
/* 0xD64 */ f32 field_0xd64;
@@ -37,11 +56,15 @@ public:
class Z2AudSettingView : public JAWWindow {
public:
Z2AudSettingView();
+
+ virtual void onDraw(JAWGraphContext*);
};
class Z2DSPCheck : public JAWWindow {
public:
Z2DSPCheck() : JAWWindow("Z2DSPCheck", 500, 450) {}
+
+ virtual void onDraw(JAWGraphContext*);
};
#endif /* Z2F1TESTWINDOW_H */
diff --git a/include/Z2AudioLib/Z2FxLineMgr.h b/include/Z2AudioLib/Z2FxLineMgr.h
index 0614f531da..9e16670031 100644
--- a/include/Z2AudioLib/Z2FxLineMgr.h
+++ b/include/Z2AudioLib/Z2FxLineMgr.h
@@ -1,35 +1,92 @@
#ifndef Z2FXLINEMGR_H
#define Z2FXLINEMGR_H
-#include "JSystem/JAudio2/JASGadget.h"
#include "JSystem/JAHostIO/JAHFrameNode.h"
+#include "JSystem/JAudio2/JASDSPInterface.h"
+#include "JSystem/JAudio2/JASGadget.h"
class JKRArchive;
class JKRExpHeap;
class JKRHeap;
-class Z2FxLineEditNode : public JAHFrameNode {
-public:
- Z2FxLineEditNode(JKRExpHeap*);
+struct Z2FxLineConfigSingle {
+ /* 0x00 */ u8 unk0;
+ /* 0x01 */ u8 unk1;
+ /* 0x02 */ u8 unk2;
+ /* 0x03 */ u8 unk3;
+ /* 0x04 */ s16 unk4;
+ /* 0x06 */ s16 unk6;
+ /* 0x08 */ s16 unk8[8];
};
struct Z2FxLineConfig {
- /* 0x00 */ u8 field_0x0;
- /* 0x01 */ u8 field_0x1;
- /* 0x02 */ u8 field_0x2;
- /* 0x03 */ u8 field_0x3;
- /* 0x04 */ s16 field_0x4;
- /* 0x06 */ s16 field_0x6;
- /* 0x08 */ s16 field_0x8[8];
- /* 0x18 */ u8 field_0x18;
- /* 0x19 */ u8 field_0x19;
- /* 0x1A */ u8 field_0x1a;
- /* 0x1B */ u8 field_0x1b;
- /* 0x1C */ s16 field_0x1c;
- /* 0x1E */ s16 field_0x1e;
- /* 0x20 */ s16 field_0x20[8];
+ /* 0x00 */ Z2FxLineConfigSingle unk0;
+ /* 0x18 */ Z2FxLineConfigSingle unk18;
}; // Size: 0x30
+class Z2FxLineEditNode : public JAHFrameNode {
+public:
+ class LineStereo : public JAHFrameNode {
+ public:
+ LineStereo(bool dolby) : JAHFrameNode(NULL) {
+ unk70.unk0.unk0 = 1;
+ unk70.unk0.unk1 = 0;
+ unk70.unk0.unk4 = 0x6000;
+ unk70.unk0.unk2 = 1;
+ unk70.unk0.unk6 = 0;
+ unk70.unk0.unk3 = 0x40;
+ unk70.unk0.unk8[0] = 0;
+ unk70.unk0.unk8[1] = 0;
+ unk70.unk0.unk8[2] = 0;
+ unk70.unk0.unk8[3] = 0;
+ unk70.unk0.unk8[4] = 0;
+ unk70.unk0.unk8[5] = 0;
+ unk70.unk0.unk8[6] = 0x3fff;
+ unk70.unk0.unk8[7] = 0;
+
+ unk70.unk18.unk0 = 1;
+ unk70.unk18.unk1 = 0;
+ unk70.unk18.unk4 = 0;
+ unk70.unk18.unk2 = 1;
+ unk70.unk18.unk6 = 0x6000;
+ unk70.unk18.unk3 = 0x40;
+ unk70.unk18.unk8[0] = 0;
+ unk70.unk18.unk8[1] = 0;
+ unk70.unk18.unk8[2] = 0;
+ unk70.unk18.unk8[3] = 0;
+ unk70.unk18.unk8[4] = 0;
+ unk70.unk18.unk8[5] = 0;
+ unk70.unk18.unk8[6] = 0x3fff;
+ unk70.unk18.unk8[7] = 0;
+
+ if (dolby)
+ setNodeName("Dolby Stereo");
+ else
+ setNodeName("Norma Stereo");
+ mIsDolby = dolby;
+ }
+
+ void message(JAHControl&);
+ void propertyEvent(JAH_P_Event, u32);
+ void lineEditSingle(Z2FxLineConfigSingle*, JAHControl&);
+
+ /* 0x70 */ Z2FxLineConfig unk70;
+ /* 0xA0 */ bool mIsDolby;
+ };
+
+ Z2FxLineEditNode(JKRExpHeap*);
+
+ void message(JAHControl&);
+ void syncSetting(u8, JASDsp::FxlineConfig_*);
+ void update(bool);
+ void saveLine(LineStereo*);
+ void loadLine(LineStereo*);
+
+ /* 0x70 */ JKRExpHeap* mHeap;
+ /* 0x74 */ LineStereo* unk74;
+ /* 0x78 */ LineStereo* unk78;
+};
+
struct Z2FxLineMgr : public JASGlobalInstance<Z2FxLineMgr> {
Z2FxLineMgr();
void initDataArc(JKRArchive* arc, JKRHeap* heap);
@@ -39,6 +96,8 @@ struct Z2FxLineMgr : public JASGlobalInstance<Z2FxLineMgr> {
void setUnderWaterFx(bool isUnderWaterFx);
void setSceneFx(s32 sceneNo);
+ void setHIOEdit(Z2FxLineEditNode* hioEdit) { mHIOEdit = hioEdit; }
+
/* 0x00 */ Z2FxLineConfig* mConfig;
/* 0x04 */ void* mFxLineBuffer[4];
/* 0x14 */ s8 mLineID;
diff --git a/include/Z2AudioLib/Z2SceneMgr.h b/include/Z2AudioLib/Z2SceneMgr.h
index c1e6402aca..1b3ef2cc0b 100644
--- a/include/Z2AudioLib/Z2SceneMgr.h
+++ b/include/Z2AudioLib/Z2SceneMgr.h
@@ -14,8 +14,8 @@ public:
void setFadeOutStart(u8 fadeType);
void setFadeInStart(u8 fadeType);
void setSceneName(char* spot, s32 room, s32 layer);
- void sceneChange(JAISoundID bgm, u8 seWave1, u8 seWave2, u8 bgmWave1, u8 bgmWave2,
- u8 demoWave, bool);
+ void sceneChange(JAISoundID bgm, u8 seWave1, u8 seWave2, u8 bgmWave1, u8 bgmWave2, u8 demoWave,
+ bool);
void framework();
void load1stDynamicWave();
void _load1stWaveInner_1();
@@ -31,9 +31,9 @@ public:
bool loadSeWave(u32 wave);
bool loadBgmWave(u32 wave);
- #if PLATFORM_SHIELD
+#if PLATFORM_SHIELD
bool loadSceneWave(u32 wave, u32 bank);
- #endif
+#endif
bool isSceneExist() { return sceneExist; }
int getCurrentSceneNum() { return sceneNum; }
diff --git a/include/Z2AudioLib/Z2SpeechMgr2.h b/include/Z2AudioLib/Z2SpeechMgr2.h
index f0ab336165..5360a6c34b 100644
--- a/include/Z2AudioLib/Z2SpeechMgr2.h
+++ b/include/Z2AudioLib/Z2SpeechMgr2.h
@@ -30,6 +30,9 @@ struct Z2SpeechMgr2 : public JASGlobalInstance<Z2SpeechMgr2> {
void playOneShotVoice(u8, u16, Vec*, s8);
bool isMidnaSpeak();
+ u16* getStylePtr() { return &mMood; }
+ u8* getTalkerPtr() { return &mVoice; }
+
/* 0x000 */ JAISoundHandle field_0x0;
/* 0x004 */ JAISoundHandle field_0x4;
/* 0x008 */ JMath::TRandom_<JMath::TRandom_fast_> random;
diff --git a/include/global.h b/include/global.h
index a8c2b0e07e..a404487b22 100644
--- a/include/global.h
+++ b/include/global.h
@@ -152,6 +152,7 @@ static const float INF = 2000000000.0f;
#ifdef __MWERKS__
#define MULTI_CHAR(x) (x)
#else
+#if __cplusplus
template <int N>
inline constexpr unsigned long long MultiCharLiteral(const char (&buf)[N]) {
static_assert(N - 1 >= 3 && N - 1 <= 10, "MULTI_CHAR literal must be 1-8 characters");
@@ -163,6 +164,7 @@ static const float INF = 2000000000.0f;
}
#define MULTI_CHAR(x) MultiCharLiteral(#x)
#endif
+#endif
// potential fakematch?
#if DEBUG
@@ -172,9 +174,11 @@ static const float INF = 2000000000.0f;
#endif
#ifndef __MWERKS__
+#if __cplusplus
#include <cmath>
using std::isnan;
#endif
+#endif
// Comparing a non-volatile reference type to NULL is tautological
// and triggers a warning on modern compilers, but in some cases is
diff --git a/libs/JSystem/include/JSystem/JAHNodeLib/JAHSoundPlayerNode.h b/libs/JSystem/include/JSystem/JAHNodeLib/JAHSoundPlayerNode.h
index 625b2b9a1c..da603b6d38 100644
--- a/libs/JSystem/include/JSystem/JAHNodeLib/JAHSoundPlayerNode.h
+++ b/libs/JSystem/include/JSystem/JAHNodeLib/JAHSoundPlayerNode.h
@@ -2,10 +2,43 @@
#define JAHSOUNDPLAYERNODE_H
#include "JSystem/JAHostIO/JAHFrameNode.h"
+#include "JSystem/JAHostIO/JAHUAsnData.h"
+#include "JSystem/JAHostIO/JAHUTableEdit.h"
+
+class JAHPlayBox : public JAHUSeBox {
+public:
+ JAHPlayBox();
+
+ virtual void onCurrentNodeFrame();
+
+public:
+ /* 0x85 */ u8 unk85;
+};
class JAHSoundPlayerNode : public JAHFrameNode {
public:
JAHSoundPlayerNode();
+
+ virtual void message(JAHControl&);
+ virtual void onCurrentNodeFrame();
+
+ u8 getContMode() const;
+
+public:
+ /* 0x70 */ s32 unk70;
+ /* 0x74 */ s32 unk74;
+ /* 0x78 */ s32 unk78;
+ /* 0x7C */ u8 unk7C;
+ /* 0x7D */ u8 unk7D;
+ /* 0x7E */ u8 unk7E;
+ /* 0x7F */ u8 unk7F;
+ /* 0x80 */ s32 unk80;
+ /* 0x84 */ s32 unk84;
+ /* 0x88 */ s64 unk88;
+ /* 0x90 */ s64 unk90;
+ /* 0x98 */ JAHPlayBox unk98;
+ /* 0x120 */ bool unk120;
+ /* 0x122 */ JAHUAsn unk122;
};
#endif /* JAHSOUNDPLAYERNODE_H */
diff --git a/libs/JSystem/include/JSystem/JAHostIO/JAHFrameNode.h b/libs/JSystem/include/JSystem/JAHostIO/JAHFrameNode.h
index 1b4ad74043..991dff94d2 100644
--- a/libs/JSystem/include/JSystem/JAHostIO/JAHFrameNode.h
+++ b/libs/JSystem/include/JSystem/JAHostIO/JAHFrameNode.h
@@ -9,17 +9,19 @@ class JAHVirtualNode;
class JAHFrameNode : public JAHioNode {
public:
JAHFrameNode(const char*);
- /* vt[07] */ virtual ~JAHFrameNode();
/* vt[02] */ virtual void listenPropertyEvent(const JORPropertyEvent*);
/* vt[05] */ virtual void genMessage(JORMContext*);
/* vt[06] */ virtual void listenNodeEvent(const JORNodeEvent*);
- /* vt[0C] */ virtual s32 getNodeType();
+ /* vt[0C] */ virtual s32 getNodeType() { return 1; }
/* vt[11] */ virtual void onCurrentNodeFrame();
/* vt[12] */ virtual void onFrame();
void framework();
void currentFramework();
+ void callAllVirtualMessages(JAHControl&);
+ void appendVirNode(JAHVirtualNode*);
+
JSULink<JAHFrameNode>* getFrameNodeLink() { return &mFrameNodeLink; }
/* 0x44 */ JSUTree<JAHVirtualNode> mTree;
diff --git a/libs/JSystem/include/JSystem/JAHostIO/JAHPubDefine.h b/libs/JSystem/include/JSystem/JAHostIO/JAHPubDefine.h
index b67d462bc5..7e2f238582 100644
--- a/libs/JSystem/include/JSystem/JAHostIO/JAHPubDefine.h
+++ b/libs/JSystem/include/JSystem/JAHostIO/JAHPubDefine.h
@@ -3,18 +3,22 @@
#include "JSystem/JUtility/JUTAssert.h"
-template<class T>
+template <class T>
class JAHSingletonBase {
public:
JAHSingletonBase() { sInstance = (T*)this; }
virtual ~JAHSingletonBase() { sInstance = NULL; }
static T* newInstance() {
+ // clang-format off
JUT_ASSERT(82, sInstance==NULL);
+ // clang-format on
if (!sInstance) {
sInstance = new T();
}
+ // clang-format off
JUT_ASSERT(85, sInstance!=NULL);
+ // clang-format on
return sInstance;
}
diff --git a/libs/JSystem/include/JSystem/JAHostIO/JAHUAsnData.h b/libs/JSystem/include/JSystem/JAHostIO/JAHUAsnData.h
new file mode 100644
index 0000000000..a1aaeedf33
--- /dev/null
+++ b/libs/JSystem/include/JSystem/JAHostIO/JAHUAsnData.h
@@ -0,0 +1,40 @@
+#ifndef JAHUASNNDATA_H
+#define JAHUASNNDATA_H
+
+#include "types.h"
+
+class JORReflexible;
+class JAHControl;
+
+class JAHUAsn {
+public:
+ JAHUAsn(u16 param_1) : unk0(param_1) {}
+
+ u8 getAttribute(u32);
+ u16 getSubNum(s32, s32);
+ u16 getDataNum(s32, s32, s32);
+ const char* getName(s32, s32, s32, s32);
+ u32 getDataId(s32, s32, s32, s32);
+ u8 getCategory(u32);
+ u8 getSub(u32);
+ u16 getDataPerCat(u32);
+ u16 getDataPerSub(u32);
+ u32 getNextId(u32, bool);
+
+ void createComboBoxCategory(JAHControl&);
+ void createComboBoxSub(JAHControl&, s32, s32);
+ void createComboBoxData(JAHControl&, s32, s32, s32);
+ void checkAndUpdateNameBox(s32*, s32*, s32*, s32*, s32, s32, s32, JORReflexible*);
+ void updateNameBoxAll(s32*, s32*, s32*, s32*, JORReflexible*);
+
+private:
+ void __updateNameBoxCategory(s32*, JORReflexible*);
+ void __updateNameBoxSub(s32, s32, s32*, JORReflexible*);
+ void __updateNameBoxData(s32, s32, s32, s32*, JORReflexible*);
+ u32 __GetSubNo(s32);
+ u32 __GetDataNo(s32);
+
+ /* 0x0 */ u16 unk0;
+};
+
+#endif /* JAHUASNNDATA_H */
diff --git a/libs/JSystem/include/JSystem/JAHostIO/JAHUGlobal.h b/libs/JSystem/include/JSystem/JAHostIO/JAHUGlobal.h
new file mode 100644
index 0000000000..451787cb46
--- /dev/null
+++ b/libs/JSystem/include/JSystem/JAHostIO/JAHUGlobal.h
@@ -0,0 +1,30 @@
+#ifndef JAHUGLOBAL_H
+#define JAHUGLOBAL_H
+
+#include <cstring>
+#include "JSystem/JHostIO/JORServer.h"
+#include "JSystem/JUtility/JUTAssert.h"
+
+inline void JAHUDialog_CatComment(char* param_1, const char* param_2, const char* param_3) {
+ if (param_3) {
+ std::strcpy(param_1, param_3);
+ std::strcat(param_1, "\n\n");
+ }
+ std::strcat(param_1, param_2);
+}
+
+inline void JAHUDialog_OK(const char* mes, const char* param_2, const char* param_3) {
+ char buffer[128];
+ if (param_3) {
+ JAHUDialog_CatComment(buffer, mes, param_3);
+ } else {
+ // clang-format off
+ JUT_ASSERT(144, std::strlen(mes)<128-1)
+ // clang-format on
+ std::strcpy(buffer, mes);
+ }
+
+ JORMessageBox(buffer, param_2, 0x30);
+}
+
+#endif /* JAHUGLOBAL_H */
diff --git a/libs/JSystem/include/JSystem/JAHostIO/JAHUTableEdit.h b/libs/JSystem/include/JSystem/JAHostIO/JAHUTableEdit.h
index ba8498c5bc..6f0dd9d556 100644
--- a/libs/JSystem/include/JSystem/JAHostIO/JAHUTableEdit.h
+++ b/libs/JSystem/include/JSystem/JAHostIO/JAHUTableEdit.h
@@ -2,10 +2,47 @@
#define JAHUTABLEDIT_H
#include "JSystem/JAHostIO/JAHVirtualNode.h"
+#include "JSystem/JAudio2/JAISound.h"
+
+class JAHUAsn;
class JAHUSeBox : public JAHVirtualNode {
public:
- JAHUSeBox();
+ JAHUSeBox(u32, u32*);
+
+ virtual void message(JAHControl&);
+ virtual void onCurrentNodeFrame();
+ virtual void propertyEvent(JAH_P_Event, u32);
+ virtual void nodeEvent(JAH_N_Event);
+ virtual void trigPlayButton();
+ virtual void trigStopButton();
+ virtual void soundPlay();
+ virtual void soundStop();
+
+ u8 checkNameSetChange();
+ void updateNameSet(JORReflexible*);
+ void setId(u32, bool, JORReflexible*);
+ u32 getId() const { return unk58; }
+
+public:
+ /* 0x40 */ JAISoundHandle unk40;
+ /* 0x44 */ JAISoundHandle unk44;
+ /* 0x48 */ bool unk48;
+ /* 0x4C */ u32 unk4C;
+ /* 0x50 */ u32 unk50;
+ /* 0x54 */ u32 unk54;
+ /* 0x58 */ u32 unk58;
+ /* 0x5C */ u32* unk5C;
+ /* 0x60 */ JAHUAsn* mAsnCalc;
+ /* 0x64 */ s32 unk64;
+ /* 0x68 */ s32 unk68;
+ /* 0x6C */ s32 unk6C;
+ /* 0x70 */ s32 unk70;
+ /* 0x74 */ s32 unk74;
+ /* 0x78 */ s32 unk78;
+ /* 0x7C */ s32 unk7C;
+ /* 0x80 */ s32 unk80;
+ /* 0x84 */ bool unk84;
};
#endif /* JAHUTABLEDIT_H */
diff --git a/libs/JSystem/include/JSystem/JAHostIO/JAHUpdate.h b/libs/JSystem/include/JSystem/JAHostIO/JAHUpdate.h
new file mode 100644
index 0000000000..84efd7e539
--- /dev/null
+++ b/libs/JSystem/include/JSystem/JAHostIO/JAHUpdate.h
@@ -0,0 +1,57 @@
+#ifndef JAHUPDATE_H
+#define JAHUPDATE_H
+
+#include "JSystem/JAHostIO/JAHioNode.h"
+#include "JSystem/JHostIO/JORMContext.h"
+#include "JSystem/JHostIO/JORServer.h"
+#include "types.h"
+
+namespace JAHUpdate {
+
+extern JAHioNode* spNode;
+extern JORMContext* spMc;
+
+inline void startUpdateNode(JAHioNode* param_1) {
+ spMc = attachJORMContext(8);
+ spNode = param_1;
+ spMc->startUpdateNode(spNode);
+}
+
+inline void endUpdateNode() {
+ spMc->endUpdateNode();
+ releaseJORMContext(spMc);
+ spMc = NULL;
+ spNode = NULL;
+}
+
+inline void buttonOn(JAHioNode* param_1, u32 param_2) {
+ bool b = false;
+ if (spMc != NULL)
+ b = true;
+
+ if (!b)
+ startUpdateNode(param_1);
+
+ spMc->updateButton(1, param_2, 0);
+
+ if (!b)
+ endUpdateNode();
+}
+
+inline void buttonOff(JAHioNode* param_1, u32 param_2) {
+ bool b = false;
+ if (spMc != NULL)
+ b = true;
+
+ if (!b)
+ startUpdateNode(param_1);
+
+ spMc->updateButton(1, param_2, 0x40000000);
+
+ if (!b)
+ endUpdateNode();
+}
+
+} // namespace JAHUpdate
+
+#endif /* JAHUPDATE_H */
diff --git a/libs/JSystem/include/JSystem/JAHostIO/JAHVirtualNode.h b/libs/JSystem/include/JSystem/JAHostIO/JAHVirtualNode.h
index 50cdbc8725..d8ce63037a 100644
--- a/libs/JSystem/include/JSystem/JAHostIO/JAHVirtualNode.h
+++ b/libs/JSystem/include/JSystem/JAHostIO/JAHVirtualNode.h
@@ -8,13 +8,28 @@ class JAHControl;
class JAHVirtualNode {
public:
- JAHVirtualNode();
+ JAHVirtualNode(const char*);
+
virtual void updateNode();
- virtual void message(JAHControl&);
+ virtual void message(JAHControl&) {}
virtual void onFrame();
virtual void onCurrentNodeFrame();
virtual void propertyEvent(JAH_P_Event, u32);
virtual void nodeEvent(JAH_N_Event);
+ virtual void virtualMessage(JAHControl&);
+
+ void callAllVirtualMessages(JAHControl&);
+ JAHioNode* getMaster();
+ void framework();
+ void currentFramework();
+ void listenVirtualPropertyEvent(JAH_P_Event, u32);
+ void listenVirtualNodeEvent(JAH_N_Event);
+ void setVirNodeName(const char*);
+
+ JSUTree<JAHVirtualNode>* getVirTree() { return &mTree; }
+ static u32 getVirNodeNum() { return smVirNodeNum; }
+
+ static u32 smVirNodeNum;
/* 0x04 */ JSUTree<JAHVirtualNode> mTree;
/* 0x20 */ char mName[32];
diff --git a/libs/JSystem/include/JSystem/JAHostIO/JAHioMessage.h b/libs/JSystem/include/JSystem/JAHostIO/JAHioMessage.h
index 558882bfa3..5a323dacd0 100644
--- a/libs/JSystem/include/JSystem/JAHostIO/JAHioMessage.h
+++ b/libs/JSystem/include/JSystem/JAHostIO/JAHioMessage.h
@@ -1,22 +1,42 @@
#ifndef JAHIOMESSAGE_H
#define JAHIOMESSAGE_H
+#include <JSystem/JHostIO/JORMContext.h>
#include <types.h>
class JAHioNode;
class JORMContext;
+class JAHControl;
class JAHControl {
public:
JAHControl(JORMContext*, JAHioNode*);
void returnY(u16);
void indent(s8);
+
void makeComment(const char*, u32, u8, u32);
+ void makeButtonL(const char*, u32, u16, u32);
+ void makeCommentL(const char*, u32, u16, u32);
+ void endComboBox();
+ void startComboBoxL(const char*, s32*, u16, u16, u32);
+ void makeSlider(const char*, s32*, s32, s32, u32);
+ void makeSlider(const char*, s16*, s16, s16, u32);
+ void makeSlider(const char*, f32*, f32, f32, u32);
+ void makeButton(const char*, u32, u8, u32);
+ void endRadioButton();
+ void makeRadioButtonItem(const char*, u8);
+ void startRadioButton(const char*, u8*, u8, u32);
+ void makeCheckBox(const char*, u8*, u8, bool, u32);
+ void makeSlider(const char*, u8*, u8, u8, u32);
+ void makeComboBoxItem(const char*, u8);
+ void makeComboBoxItem(const char*, s32);
+ void startComboBox(const char*, u8*, u8, u32);
+ static u16 getComboWidth(u8 itemNo) { return smComboWidth[itemNo]; }
static u16 getLineHeight() { return smLineHeight; }
- static u16 getContWidth() { return smContWidth; }
- static u16 getIntervalX() { return smIntX; }
- static u16 getNameWidth() { return smNameWidth; }
+ static u32 getContWidth() { return smContWidth; }
+ static u32 getIntervalX() { return smIntX; }
+ static u32 getNameWidth() { return smNameWidth; }
static u16 smButtonWidth[];
static u16 smCommentWidth[];
@@ -34,9 +54,7 @@ public:
u16 getY() { return mY; }
JORMContext* getContext() { return mContext; }
- void tabX(u16 param_1) {
- mX += param_1 + smIntX;
- }
+ void tabX(u16 param_1) { mX += smIntX + param_1; }
void returnYDirectSize(u16 param_1) {
mY += param_1;
mX = smXLeft + field_0x4 * smIndentSize;
@@ -49,4 +67,164 @@ public:
/* 0x0C */ JAHioNode* mNode;
};
+// There's a funky dependency loop between JAHControl and JAHContTemplate, which must be resolved
+// THIS way, as makeSlider etc functions must be defined NOT out-of-line for their string literal
+// symbols to get the correct mangling.
+
+class JAHContTemplate {
+public:
+ template <class T>
+ static void startComboBox(JAHControl* param_1, const char* param_2, T* param_3, u16 param_4,
+ u16 param_5, u32 param_6) {
+ if (param_2) {
+ param_1->getContext()->genLabel(param_2, 0, param_6, NULL, param_1->getX(),
+ param_1->getY(), param_4, param_1->getLineHeight());
+ param_1->tabX(param_4);
+ }
+
+ param_1->getContext()->startComboBox(param_2, param_3, param_6, NULL, param_1->getX(),
+ param_1->getY() - 7, param_5,
+ param_1->getLineHeight());
+ param_1->tabX(param_5);
+ }
+
+ template <class T>
+ static void makeSlider(JAHControl* param_1, const char* param_2, T* param_3, T param_4,
+ T param_5, u32 param_6) {
+ if (param_2) {
+ param_1->getContext()->genLabel(param_2, 0, param_6, NULL, param_1->getX(),
+ param_1->getY(), param_1->getNameWidth(),
+ param_1->getLineHeight());
+ }
+
+ param_1->getContext()->genSlider(
+ "---", param_3, param_4, param_5, param_6, NULL,
+ (u32)param_1->getX() + param_1->getNameWidth() + param_1->getIntervalX(),
+ param_1->getY() - 3, param_1->getContWidth(), param_1->getLineHeight());
+ param_1->returnY(1);
+ }
+
+ template <class T>
+ static void startRadioButton(JAHControl* param_1, const char* param_2, T* param_3, T param_4,
+ u32 param_5) {
+ if (param_2) {
+ param_1->getContext()->genLabel(param_2, 0, param_5, NULL, param_1->getX(),
+ param_1->getY(), param_1->getNameWidth() + 48,
+ param_1->getLineHeight());
+ }
+ param_1->getContext()->startRadioButton(
+ param_2, param_3, param_5, NULL,
+ (u32)param_1->getX() + param_1->getNameWidth() + param_1->getIntervalX() + 48,
+ param_1->getY(), param_1->getContWidth() + 250, param_4 * 18);
+
+ param_1->returnYDirectSize(param_4 * 18);
+ }
+
+ template <class T>
+ static void makeCheckBox(JAHControl* param_1, const char* param_2, T* param_3, T param_4,
+ bool param_5, u32 param_6) {
+ if (!param_5) {
+ param_1->getContext()->genCheckBox(param_2, param_3, param_4, param_6, NULL,
+ param_1->getX(), param_1->getY(), 1000,
+ param_1->getLineHeight());
+ } else {
+ param_1->getContext()->genCheckBox(param_2, param_3, param_4, param_6, NULL,
+ param_1->getX() + param_1->getNameWidth() +
+ param_1->getIntervalX() + 52,
+ param_1->getY(), 1000, param_1->getLineHeight());
+ }
+ param_1->returnY(1);
+ }
+
+ template <class T>
+ static void startComboBox(JAHControl* param_1, const char* param_2, T* param_3, T param_4,
+ u32 param_5) {
+ if (param_2) {
+ param_1->getContext()->genLabel(param_2, 0, param_5, NULL, param_1->getX(),
+ param_1->getY(), param_1->getNameWidth() + 48,
+ param_1->getLineHeight());
+ }
+
+ param_1->getContext()->startComboBox(
+ param_2, param_3, param_5, NULL,
+ param_1->getX() + param_1->getNameWidth() + param_1->getIntervalX() + 48,
+ param_1->getY() - 7, param_1->getComboWidth(param_4), param_1->getLineHeight());
+ }
+};
+
+inline void JAHControl::makeButtonL(const char* param_1, u32 param_2, u16 param_3, u32 param_4) {
+ mContext->genButton(param_1, param_2, param_4, NULL, mX, mY - 5, param_3, smLineHeight);
+ tabX(param_3);
+}
+
+inline void JAHControl::makeCommentL(const char* param_1, u32 param_2, u16 param_3, u32 param_4) {
+ mContext->genLabel(param_1, param_2, param_4, NULL, mX, mY, param_3, smLineHeight);
+ tabX(param_3);
+}
+
+inline void JAHControl::endComboBox() {
+ mContext->endComboBox();
+}
+
+inline void JAHControl::startComboBoxL(const char* param_1, s32* param_2, u16 param_3, u16 param_4,
+ u32 param_5) {
+ JAHContTemplate::startComboBox(this, param_1, param_2, param_3, param_4, param_5);
+}
+
+inline void JAHControl::makeSlider(const char* param_1, s32* param_2, s32 param_3, s32 param_4,
+ u32 param_5) {
+ JAHContTemplate::makeSlider(this, param_1, param_2, param_3, param_4, param_5);
+}
+
+inline void JAHControl::makeSlider(const char* param_1, s16* param_2, s16 param_3, s16 param_4,
+ u32 param_5) {
+ JAHContTemplate::makeSlider(this, param_1, param_2, param_3, param_4, param_5);
+}
+
+inline void JAHControl::makeSlider(const char* param_1, f32* param_2, f32 param_3, f32 param_4,
+ u32 param_5) {
+ JAHContTemplate::makeSlider(this, param_1, param_2, param_3, param_4, param_5);
+}
+
+inline void JAHControl::makeSlider(const char* param_1, u8* param_2, u8 param_3, u8 param_4,
+ u32 param_5) {
+ JAHContTemplate::makeSlider(this, param_1, param_2, param_3, param_4, param_5);
+}
+
+inline void JAHControl::makeButton(const char* param_1, u32 param_2, u8 param_3, u32 param_4) {
+ mContext->genButton(param_1, param_2, param_4, NULL, mX, mY - 5, smButtonWidth[param_3],
+ smLineHeight);
+ returnY(1);
+}
+
+inline void JAHControl::endRadioButton() {
+ mContext->endRadioButton();
+}
+
+inline void JAHControl::makeRadioButtonItem(const char* param_1, u8 param_2) {
+ mContext->genRadioButtonItem(param_1, param_2, 0, -1, -1, 128, 16);
+}
+
+inline void JAHControl::startRadioButton(const char* param_1, u8* param_2, u8 param_3,
+ u32 param_4) {
+ JAHContTemplate::startRadioButton(this, param_1, param_2, param_3, param_4);
+}
+
+inline void JAHControl::makeCheckBox(const char* param_1, u8* param_2, u8 param_3, bool param_4,
+ u32 param_5) {
+ JAHContTemplate::makeCheckBox(this, param_1, param_2, param_3, param_4, param_5);
+}
+
+inline void JAHControl::makeComboBoxItem(const char* label, u8 itemNo) {
+ makeComboBoxItem(label, (s32)itemNo);
+}
+
+inline void JAHControl::makeComboBoxItem(const char* label, s32 itemNo) {
+ mContext->genComboBoxItem(label, itemNo);
+}
+
+inline void JAHControl::startComboBox(const char* label, u8* param_2, u8 param_3, u32 param_4) {
+ JAHContTemplate::startComboBox(this, label, param_2, param_3, param_4);
+}
+
#endif /* JAHIOMESSAGE_H */
diff --git a/libs/JSystem/include/JSystem/JAudio2/JASDSPInterface.h b/libs/JSystem/include/JSystem/JAudio2/JASDSPInterface.h
index a653431bee..44f2805bfe 100644
--- a/libs/JSystem/include/JSystem/JAudio2/JASDSPInterface.h
+++ b/libs/JSystem/include/JSystem/JAudio2/JASDSPInterface.h
@@ -1,6 +1,7 @@
#ifndef JASDSPINTERFACE_H
#define JASDSPINTERFACE_H
+#include <cstdint>
#include <types.h>
struct JASWaveInfo;
diff --git a/libs/JSystem/include/JSystem/JAudio2/JAUSoundTable.h b/libs/JSystem/include/JSystem/JAudio2/JAUSoundTable.h
index e2dceca7b1..b85744ff94 100644
--- a/libs/JSystem/include/JSystem/JAudio2/JAUSoundTable.h
+++ b/libs/JSystem/include/JSystem/JAudio2/JAUSoundTable.h
@@ -192,7 +192,11 @@ struct JAUSoundNameTable : public JASGlobalInstance<JAUSoundNameTable> {
JAUSoundNameTable(bool param_0) : JASGlobalInstance<JAUSoundNameTable>(param_0) {
}
~JAUSoundNameTable() {}
+ int getNumGroups_inSection(u8) const;
+ int getNumItems_inGroup(u8, u8) const;
void init(void const*);
+ const char* getName(JAISoundID) const;
+ const char* getGroupName(JAISoundID) const;
JAUSoundTable_<JAUSoundNameTableRoot,JAUSoundNameTableSection,JAUSoundNameTableGroup,void> field_0x0;
};
diff --git a/libs/JSystem/include/JSystem/JHostIO/JOREvent.h b/libs/JSystem/include/JSystem/JHostIO/JOREvent.h
new file mode 100644
index 0000000000..14d7b2fa52
--- /dev/null
+++ b/libs/JSystem/include/JSystem/JHostIO/JOREvent.h
@@ -0,0 +1,36 @@
+#ifndef JOREVENT_H
+#define JOREVENT_H
+
+#include "types.h"
+
+class JORReflexible;
+
+struct JOREvent {};
+
+struct JORPropertyEvent : JOREvent {
+ enum EKind {
+ EKind_HasListener = (1 << 30),
+ EKind_ValueID = (1 << 29),
+ EKind_FloatValue = (1 << 9),
+ };
+
+ /* 0x00 */ u8 field_0x0[0x4 - 0x0];
+ /* 0x04 */ u32 type;
+ /* 0x08 */ u32 kind;
+ /* 0x0C */ char* id; // id?
+ /* 0x10 */ JORReflexible* field_0x10; // ?
+ /* 0x14 */ u32 field_0x14;
+ union {
+ u32 U32;
+ u16 U16[2];
+ }
+ /* 0x18 */ field_0x18;
+};
+
+struct JORGenEvent : JOREvent {};
+
+struct JORNodeEvent : JOREvent {
+ /* 0x00 */ u32 field_0x0;
+};
+
+#endif /* JOREVENT_H */
diff --git a/libs/JSystem/include/JSystem/JHostIO/JORFile.h b/libs/JSystem/include/JSystem/JHostIO/JORFile.h
index cd2f048c48..e2123d8f4a 100644
--- a/libs/JSystem/include/JSystem/JHostIO/JORFile.h
+++ b/libs/JSystem/include/JSystem/JHostIO/JORFile.h
@@ -18,7 +18,7 @@ public:
/* 0x08 */ u32 m_fileAttribute;
/* 0x0C */ u32 m_lowDateTime;
/* 0x10 */ u32 m_highDateTime;
- /* 0x14 */ char* m_filename;
+ /* 0x14 */ char m_filename[];
};
class JORFile {
diff --git a/libs/JSystem/include/JSystem/JHostIO/JORMContext.h b/libs/JSystem/include/JSystem/JHostIO/JORMContext.h
index b06adad45b..a9676ec3d1 100644
--- a/libs/JSystem/include/JSystem/JHostIO/JORMContext.h
+++ b/libs/JSystem/include/JSystem/JHostIO/JORMContext.h
@@ -7,7 +7,7 @@
#include <dolphin.h>
#endif
#include <stdint.h>
-#include "JSystem/JHostIO/JORReflexible.h"
+#include "JSystem/JHostIO/JOREvent.h"
#include "JSystem/JSupport/JSUMemoryStream.h"
#define MCTX_MSG_RESET 0
@@ -194,9 +194,7 @@ public:
void startUpdateNode(JORReflexible* obj) { putNode(obj); }
void genNodeSub(const char* label, JORReflexible* i_node, u32, u32);
- void putNode(JORReflexible* obj) {
- mOutputStream << (uintptr_t)obj;
- }
+ void putNode(JORReflexible* obj) { mOutputStream << (uintptr_t)obj; }
void invalidNode(JORReflexible* i_node, u32);
void genControl(u32 type, u32 kind, const char* label, u32 style, u32 id,
@@ -221,6 +219,10 @@ public:
u16 posX = -1, u16 posY = -1, u16 width = JORM_DEFAULT_WIDTH,
u16 height = JORM_DEFAULT_HEIGHT);
+ void updateButton(u32 param_1, u32 param_2, u32 param_3) {
+ updateControl(param_1, param_2, param_3);
+ }
+
void genLabel(const char* label, u32 id, u32 style = 0, JOREventListener* pListener = NULL,
u16 posX = -1, u16 posY = -1, u16 width = JORM_DEFAULT_WIDTH,
u16 height = JORM_DEFAULT_HEIGHT);
@@ -270,6 +272,7 @@ public:
DEFINE_START_COMBO_BOX_ID(s32, JORPropertyEvent::EKind_ValueID)
DEFINE_UPDATE_COMBO_BOX(u8)
+ DEFINE_UPDATE_COMBO_BOX(s32)
DEFINE_UPDATE_COMBO_BOX_ID(s32)
@@ -279,6 +282,16 @@ public:
genSelectorItemSub(label, itemNo, 0, 0, 0, 0, 0);
}
+ void editComboBoxItem(u32 param_0, u32 param_1, const char* param_2, s32 param_3, u32 param_4);
+
+ void addComboBoxItem(u32 param_1, s32* param_2, const char* param_3, s32 param_4, u32 param_5) {
+ editComboBoxItem(param_1, (uintptr_t)param_2, param_3, param_4, param_5);
+ }
+
+ void removeComboBoxItem(u32 param_1, s32* param_2, u32 param_3) {
+ editComboBoxItem(param_1, (uintptr_t)param_2, NULL, 0, param_3);
+ }
+
/**
* === RADIO BUTTON ===
*/
@@ -313,8 +326,6 @@ public:
updateSelectorSub(mode, (uintptr_t)pSrc, *pSrc, param_3);
}
- void editComboBoxItem(u32 param_0, u32 param_1, const char* param_2, s32 param_3, u32 param_4);
-
void openMessageBox(void* param_0, u32 style, const char* message, const char* title);
/* 0x00000 */ u8 mBuffer[0x10000];
diff --git a/libs/JSystem/include/JSystem/JHostIO/JORReflexible.h b/libs/JSystem/include/JSystem/JHostIO/JORReflexible.h
index 030c6fd9f9..4a142dee7e 100644
--- a/libs/JSystem/include/JSystem/JHostIO/JORReflexible.h
+++ b/libs/JSystem/include/JSystem/JHostIO/JORReflexible.h
@@ -2,36 +2,12 @@
#define JORREFLEXIBLE_H
#include <types.h>
+#include "JSystem/JHostIO/JORServer.h"
-class JORReflexible;
-
-struct JOREvent {};
-
-struct JORPropertyEvent : JOREvent {
- enum EKind {
- EKind_HasListener = (1 << 30),
- EKind_ValueID = (1 << 29),
- EKind_FloatValue = (1 << 9),
- };
-
- /* 0x00 */ u8 field_0x0[0x4 - 0x0];
- /* 0x04 */ u32 type;
- /* 0x08 */ u32 kind;
- /* 0x0C */ char* id; // id?
- /* 0x10 */ JORReflexible* field_0x10; // ?
- /* 0x14 */ u32 field_0x14;
- union {
- u32 U32;
- u16 U16[2];
- }
- /* 0x18 */ field_0x18;
-};
-
-struct JORGenEvent : JOREvent {};
-
-struct JORNodeEvent : JOREvent {
- /* 0x00 */ u32 field_0x0;
-};
+struct JOREvent;
+struct JORPropertyEvent;
+struct JORGenEvent;
+struct JORNodeEvent;
class JORMContext;
class JORServer;
@@ -48,8 +24,8 @@ class JORReflexible : public JOREventListener {
public:
#if DEBUG
JORReflexible() {}
- static JORServer* getJORServer();
-
+ static JORServer* getJORServer() { return JORServer::getInstance(); }
+
virtual void listenPropertyEvent(const JORPropertyEvent*);
virtual void listen(u32, const JOREvent*);
virtual void genObjectInfo(const JORGenEvent*);
diff --git a/libs/JSystem/include/JSystem/JKernel/JKRArchive.h b/libs/JSystem/include/JSystem/JKernel/JKRArchive.h
index 7402f50b13..fe8697fb5e 100644
--- a/libs/JSystem/include/JSystem/JKernel/JKRArchive.h
+++ b/libs/JSystem/include/JSystem/JKernel/JKRArchive.h
@@ -3,7 +3,6 @@
#include "JSystem/JKernel/JKRCompression.h"
#include "JSystem/JKernel/JKRFileLoader.h"
-#include "global.h"
class JKRHeap;
diff --git a/libs/JSystem/include/JSystem/JKernel/JKRHeap.h b/libs/JSystem/include/JSystem/JKernel/JKRHeap.h
index 2c38aa1984..9528c7735e 100644
--- a/libs/JSystem/include/JSystem/JKernel/JKRHeap.h
+++ b/libs/JSystem/include/JSystem/JKernel/JKRHeap.h
@@ -74,7 +74,7 @@ public:
bool setErrorFlag(bool errorFlag);
bool isSubHeap(JKRHeap* heap) const;
- void* getAltAramStartAdr();
+ static void* getAltAramStartAdr();
/* vt[03] */ virtual void callAllDisposer();
/* vt[04] */ virtual u32 getHeapType() = 0;
diff --git a/libs/JSystem/include/JSystem/JSupport/JSUInputStream.h b/libs/JSystem/include/JSystem/JSupport/JSUInputStream.h
index afde440837..418cc8ea1b 100644
--- a/libs/JSystem/include/JSystem/JSupport/JSUInputStream.h
+++ b/libs/JSystem/include/JSystem/JSupport/JSUInputStream.h
@@ -4,9 +4,9 @@
#include "JSystem/JSupport/JSUIosBase.h"
/**
-* @ingroup jsystem-jsupport
-*
-*/
+ * @ingroup jsystem-jsupport
+ *
+ */
class JSUInputStream : public JSUIosBase {
public:
JSUInputStream() {}
@@ -89,17 +89,11 @@ public:
return *this;
}
- s32 read(bool& val) {
- return read(&val, sizeof(bool));
- }
+ s32 read(bool& val) { return read(&val, sizeof(bool)); }
- s32 read(u8& val) {
- return read(&val, sizeof(u8));
- }
+ s32 read(u8& val) { return read(&val, sizeof(u8)); }
- s32 read(u32& param_0) {
- return read(&param_0, 4);
- }
+ s32 read(u32& param_0) { return read(&param_0, 4); }
// TODO: return value probably wrong
s32 read(void*, s32);
@@ -108,9 +102,9 @@ public:
// move?
/**
-* @ingroup jsystem-jsupport
-*
-*/
+ * @ingroup jsystem-jsupport
+ *
+ */
template <typename T>
T* JSUConvertOffsetToPtr(const void*, const void*);
diff --git a/libs/JSystem/include/JSystem/JSupport/JSUMemoryStream.h b/libs/JSystem/include/JSystem/JSupport/JSUMemoryStream.h
index d5da78bfff..c79b2a3535 100644
--- a/libs/JSystem/include/JSystem/JSupport/JSUMemoryStream.h
+++ b/libs/JSystem/include/JSystem/JSupport/JSUMemoryStream.h
@@ -5,9 +5,9 @@
#include "JSystem/JSupport/JSURandomOutputStream.h"
/**
-* @ingroup jsystem-jsupport
-*
-*/
+ * @ingroup jsystem-jsupport
+ *
+ */
class JSUMemoryInputStream : public JSURandomInputStream {
public:
JSUMemoryInputStream(const void* res, s32 size) { setBuffer(res, size); }
@@ -19,9 +19,7 @@ public:
s32 getLength() const;
s32 getPosition() const;
- void* getPointer() const {
- return (u8*)mBuffer + mPosition;
- }
+ void* getPointer() const { return (u8*)mBuffer + mPosition; }
private:
/* 0x08 */ const void* mBuffer;
@@ -39,7 +37,7 @@ public:
virtual ~JSUMemoryOutputStream() {}
virtual s32 writeData(const void*, s32);
virtual s32 getLength() const;
- virtual s32 getPosition() const;
+ virtual s32 getPosition() const { return mPosition; }
virtual s32 seek(s32, JSUStreamSeekFrom);
virtual s32 getAvailable() const;
virtual s32 seekPos(s32, JSUStreamSeekFrom);
diff --git a/libs/JSystem/src/JAHNodeLib/JAHAudienceSettingNode.cpp b/libs/JSystem/src/JAHNodeLib/JAHAudienceSettingNode.cpp
new file mode 100644
index 0000000000..236d5d198a
--- /dev/null
+++ b/libs/JSystem/src/JAHNodeLib/JAHAudienceSettingNode.cpp
@@ -0,0 +1,5 @@
+#include <JSystem/JAHostIO/JAHioMessage.h>
+
+void dummy(JAHControl* cont) {
+ cont->makeSlider(NULL, (f32*)NULL, (f32)0, (f32)0, 0);
+}
diff --git a/libs/JSystem/src/JAHNodeLib/JAHConductNode.cpp b/libs/JSystem/src/JAHNodeLib/JAHConductNode.cpp
new file mode 100644
index 0000000000..6f461f0d88
--- /dev/null
+++ b/libs/JSystem/src/JAHNodeLib/JAHConductNode.cpp
@@ -0,0 +1,8 @@
+#include <JSystem/JAHostIO/JAHioMessage.h>
+
+void dummy(JAHControl* cont, u16 s) {
+ cont->startRadioButton(NULL, (u8*)NULL, (u8)0, 0);
+ cont->makeRadioButtonItem(NULL, (u8)0);
+ cont->endRadioButton();
+ cont->makeButton(NULL, 0, (u8)0, 0);
+}
diff --git a/libs/JSystem/src/JAHNodeLib/JAHIDSwapNode.cpp b/libs/JSystem/src/JAHNodeLib/JAHIDSwapNode.cpp
new file mode 100644
index 0000000000..d5e5615f37
--- /dev/null
+++ b/libs/JSystem/src/JAHNodeLib/JAHIDSwapNode.cpp
@@ -0,0 +1,8 @@
+#include "JSystem/JAHostIO/JAHUTableEdit.h"
+#include "JSystem/JAHostIO/JAHioMessage.h"
+
+static void dummy(JAHUSeBox* box, JAHControl* ctrl) {
+ box->getId();
+ ctrl->makeCheckBox(NULL, (u8*)NULL, 0, false, 0);
+ box->~JAHUSeBox();
+}
diff --git a/libs/JSystem/src/JAHNodeLib/JAHSoundPlayerNode.cpp b/libs/JSystem/src/JAHNodeLib/JAHSoundPlayerNode.cpp
new file mode 100644
index 0000000000..cd3fa984eb
--- /dev/null
+++ b/libs/JSystem/src/JAHNodeLib/JAHSoundPlayerNode.cpp
@@ -0,0 +1,149 @@
+#include "JSystem/JAHNodeLib/JAHSoundPlayerNode.h"
+#include "JSystem/JAHostIO/JAHUpdate.h"
+#include "JSystem/JAHostIO/JAHioMessage.h"
+#include "JSystem/JAudio2/JAISoundStarter.h"
+
+void JAHPlayBox::onCurrentNodeFrame() {
+ JAHSoundPlayerNode* master = (JAHSoundPlayerNode*)getMaster();
+ if (!master)
+ return;
+ u8 b = master->getContMode() & 2;
+ if (!b) {
+ JAHUSeBox::onCurrentNodeFrame();
+ } else if (unk48 != unk85) {
+ if (unk48) {
+ JAHUpdate::buttonOff(getMaster(), unk4C);
+ JAHUpdate::buttonOn(getMaster(), unk50);
+ } else {
+ JAHUpdate::buttonOn(getMaster(), unk4C);
+ JAHUpdate::buttonOff(getMaster(), unk50);
+ }
+ }
+
+ unk85 = unk48;
+}
+
+u8 JAHSoundPlayerNode::getContMode() const {
+ return unk7C;
+}
+
+JAHSoundPlayerNode::JAHSoundPlayerNode() : JAHFrameNode("SOUND PLAYER"), unk122(16) {
+ unk70 = 30;
+ unk74 = 60;
+ unk78 = 10;
+ unk7C = 0;
+ unk7D = 0;
+ unk7E = 1;
+ unk80 = 0;
+ unk84 = 0;
+ unk7F = 2;
+ unk120 = 0;
+ appendVirNode(&unk98);
+}
+
+JAHPlayBox::JAHPlayBox() : JAHUSeBox(-1, NULL) {
+ unk85 = 0;
+}
+
+void JAHSoundPlayerNode::message(JAHControl& param_1) {
+ param_1.returnY(1);
+ param_1.makeCheckBox("ID順に連続再生する", &unk7C, 2, false, 0);
+ param_1.returnY(1);
+ param_1.makeComment("--連続再生モード設定--", 0, 5, 0);
+ param_1.indent(1);
+ param_1.makeSlider("最大再生時間(1=0.1sec)", &unk70, 0, 60000, 0);
+ param_1.makeSlider("空白時間(1=0.1sec)", &unk78, 0, 6000, 0);
+ param_1.returnY(1);
+ param_1.startRadioButton("ダミーデータの挙動", &unk7E, 2, 0);
+ param_1.makeRadioButtonItem("スキップする", 1);
+ param_1.makeRadioButtonItem("再生する", 0);
+ param_1.endRadioButton();
+ param_1.startRadioButton("トリガーSEまたはBGM系の挙動", &unk7D, 2, 0);
+ param_1.makeRadioButtonItem("フル再生", 0);
+ param_1.makeRadioButtonItem("最大再生時間以上はフェードアウト", 1);
+ param_1.endRadioButton();
+ param_1.returnY(1);
+ param_1.makeSlider("フェードアウト時間(単位:ゲームフレーム)", &unk74, 0, 3600, 0);
+}
+
+void JAHSoundPlayerNode::onCurrentNodeFrame() {
+ if (!(unk7C & 2))
+ return;
+
+ u8 attr = unk122.getAttribute(unk98.getId());
+
+ switch (unk98.unk48) {
+ case true:
+ switch (unk7F) {
+ case 0:
+ if (!unk98.unk40) {
+ unk90 = OSGetTime();
+ unk84 = 0;
+ unk7F = 2;
+ break;
+ }
+
+ if (unk80 > unk70) {
+ unk84 = 0;
+ unk7F = 2;
+ } else {
+ JASGlobalInstance<JAISoundStarter>::getInstance()->startSound(unk98.getId(),
+ &unk98.unk40, NULL);
+ unk80 = OSTicksToMilliseconds(OSGetTime() - unk88) / 100;
+ }
+
+ if (unk7D == 1) {
+ if (unk80 > unk70) {
+ unk98.unk40->stop(unk74);
+ unk84 = 0;
+ unk90 = OSGetTime();
+ unk7F = 1;
+ } else {
+ unk80 = OSTicksToMilliseconds(OSGetTime() - unk88) / 100;
+ }
+ }
+ break;
+
+ case 1:
+ if (!unk98.unk40) {
+ unk7F = 2;
+ unk90 = OSGetTime();
+ }
+ break;
+
+ case 2:
+ if (unk120) {
+ if (unk84 <= unk78) {
+ if (unk84 < 0)
+ JASGlobalInstance<JAISoundStarter>::getInstance()->startSound(
+ unk98.getId(), &unk98.unk40, NULL);
+
+ unk84 = OSTicksToMilliseconds(OSGetTime() - unk90) / 100;
+ break;
+ }
+
+ u32 id = unk122.getNextId(unk98.getId(), unk7E != 0 ? true : false);
+ unk98.setId(id, true, this);
+ }
+
+ JASGlobalInstance<JAISoundStarter>::getInstance()->startSound(unk98.getId(),
+ &unk98.unk40, NULL);
+ unk7F = 0;
+ unk80 = 0;
+ unk88 = OSGetTime();
+ unk84 = 0;
+ break;
+ }
+ break;
+
+ case false:
+ if (unk120) {
+ unk80 = 0;
+ unk84 = 0;
+ unk7F = 2;
+ }
+ break;
+ }
+
+ unk120 = unk98.unk48;
+}
diff --git a/libs/JSystem/src/JAHNodeLib/JAHViewerApp.cpp b/libs/JSystem/src/JAHNodeLib/JAHViewerApp.cpp
new file mode 100644
index 0000000000..c8d56465c9
--- /dev/null
+++ b/libs/JSystem/src/JAHNodeLib/JAHViewerApp.cpp
@@ -0,0 +1,14 @@
+
+#include "JSystem/JAHostIO/JAHioMessage.h"
+#include "JSystem/JSupport/JSUMemoryStream.h"
+#include "JSystem/JSupport/JSUOutputStream.h"
+
+static void dummy(JSUMemoryInputStream& in, JSUOutputStream& out, JAHControl& ctrl) {
+ out << s16(0);
+ s16 b;
+ in >> b;
+ ctrl.makeSlider("", (u8*)NULL, (u8)0, (u8)0, 0);
+ u16 a;
+ in >> a;
+ in.getPointer();
+}
diff --git a/libs/JSystem/src/JAHNodeLib/JAHViewerSys.cpp b/libs/JSystem/src/JAHNodeLib/JAHViewerSys.cpp
new file mode 100644
index 0000000000..6b14f74662
--- /dev/null
+++ b/libs/JSystem/src/JAHNodeLib/JAHViewerSys.cpp
@@ -0,0 +1,12 @@
+#include "JSystem/JAHostIO/JAHUGlobal.h"
+
+static void dummy(JSUInputStream& input) {
+ JSUMemoryOutputStream stream(NULL, 0);
+ stream.getPosition();
+ stream << u8(0);
+ u8 b;
+ input >> b;
+ u32 a;
+ input >> a;
+ JAHUDialog_OK("", "", "");
+}
diff --git a/libs/JSystem/src/JAHostIO/JAHFrameNode.cpp b/libs/JSystem/src/JAHostIO/JAHFrameNode.cpp
new file mode 100644
index 0000000000..6b4d0d68fc
--- /dev/null
+++ b/libs/JSystem/src/JAHostIO/JAHFrameNode.cpp
@@ -0,0 +1,93 @@
+#include <JSystem/JAHostIO/JAHFrameNode.h>
+#include <JSystem/JAHostIO/JAHVirtualNode.h>
+#include <JSystem/JAHostIO/JAHioMessage.h>
+#include <JSystem/JAHostIO/JAHioMgr.h>
+
+JAHFrameNode::JAHFrameNode(const char* name)
+ : JAHioNode(name), mTree((JAHVirtualNode*)this), mFrameNodeLink(this) {}
+
+void JAHFrameNode::genMessage(JORMContext* context) {
+ JAHControl control(context, this);
+ callAllVirtualMessages(control);
+ message(control);
+ if (JAHSingletonBase<JAHioMgr>::getIns()->getNodeSysType() == 0)
+ generateTempChildren(context);
+ else
+ generateRealChildren(context);
+}
+
+void JAHFrameNode::callAllVirtualMessages(JAHControl& control) {
+ if (mTree.getNumChildren() == 0)
+ return;
+
+ for (JSUTreeIterator<JAHVirtualNode> iter = mTree.getFirstChild(); iter != mTree.getEndChild();
+ ++iter)
+ {
+ iter->message(control);
+ }
+}
+
+void JAHFrameNode::appendVirNode(JAHVirtualNode* node) {
+ mTree.appendChild(node->getVirTree());
+}
+
+void JAHFrameNode::listenPropertyEvent(const JORPropertyEvent* event) {
+ for (JSUTreeIterator<JAHVirtualNode> iter = mTree.getFirstChild(); iter != mTree.getEndChild();
+ ++iter)
+ {
+ iter->listenVirtualPropertyEvent(JAH_P_EVENT0, (u32)event->id);
+ }
+
+ JAHioNode::listenPropertyEvent(event);
+
+ for (JSUTreeIterator<JAHVirtualNode> iter = mTree.getFirstChild(); iter != mTree.getEndChild();
+ ++iter)
+ {
+ iter->listenVirtualPropertyEvent(JAH_P_EVENT1, (u32)event->id);
+ }
+}
+
+void JAHFrameNode::listenNodeEvent(const JORNodeEvent* event) {
+ JAHioNode::listenNodeEvent(event);
+ if (event->field_0x0 == 3) {
+ for (JSUTreeIterator<JAHVirtualNode> iter = mTree.getFirstChild();
+ iter != mTree.getEndChild(); ++iter)
+ iter->listenVirtualNodeEvent(JAH_N_EVENT0);
+ } else if (event->field_0x0 == 4) {
+ for (JSUTreeIterator<JAHVirtualNode> iter = mTree.getFirstChild();
+ iter != mTree.getEndChild(); ++iter)
+ iter->listenVirtualNodeEvent(JAH_N_EVENT1);
+ } else if (event->field_0x0 == 5) {
+ for (JSUTreeIterator<JAHVirtualNode> iter = mTree.getFirstChild();
+ iter != mTree.getEndChild(); ++iter)
+ iter->listenVirtualNodeEvent(JAH_N_EVENT2);
+ }
+}
+
+void JAHFrameNode::framework() {
+ onFrame();
+ if (mTree.getNumChildren() != 0) {
+ int i = 0; // unused?
+ for (JSUTreeIterator<JAHVirtualNode> iter = mTree.getFirstChild();
+ iter != mTree.getEndChild(); ++iter)
+ {
+ iter->framework();
+ }
+ }
+}
+
+void JAHFrameNode::onFrame() {}
+
+void JAHFrameNode::currentFramework() {
+ onCurrentNodeFrame();
+ if (mTree.getNumChildren() != 0) {
+ int i = 0; // unused?
+ for (JSUTreeIterator<JAHVirtualNode> iter = mTree.getFirstChild();
+ iter != mTree.getEndChild(); ++iter)
+ {
+ iter->currentFramework();
+ }
+ }
+}
+
+void JAHFrameNode::onCurrentNodeFrame() {}
diff --git a/libs/JSystem/src/JAHostIO/JAHUAsnData.cpp b/libs/JSystem/src/JAHostIO/JAHUAsnData.cpp
new file mode 100644
index 0000000000..b4c4da98ce
--- /dev/null
+++ b/libs/JSystem/src/JAHostIO/JAHUAsnData.cpp
@@ -0,0 +1,172 @@
+#include <JSystem/JAHostIO/JAHUAsnData.h>
+#include "JSystem/JAHostIO/JAHioMessage.h"
+#include "JSystem/JAudio2/JAUSoundTable.h"
+#include "JSystem/JHostIO/JORServer.h"
+
+u8 JAHUAsn::getAttribute(u32 param_1) {
+ u8 a = (param_1 & 0x800) >> 11;
+ u8 b = (param_1 & 0xC0000000) >> 24;
+ return a | (b << 4);
+}
+
+u16 JAHUAsn::getSubNum(s32 param_1, s32 param_2) {
+ JAUSoundNameTable* table = JASGlobalInstance<JAUSoundNameTable>::getInstance();
+ int num = table->getNumItems_inGroup(param_1, param_2);
+ int uVar2 = (u16)(num / unk0);
+ if (num % unk0 > 0)
+ uVar2++;
+ return uVar2 <= 64 ? (u16)uVar2 : (u16)64;
+}
+
+u16 JAHUAsn::getDataNum(s32 param_1, s32 param_2, s32 param_3) {
+ JAUSoundNameTable* table = JASGlobalInstance<JAUSoundNameTable>::getInstance();
+ int uVar1 = getSubNum(param_1, param_2);
+ int iVar2 = table->getNumItems_inGroup(param_1, param_2);
+
+ if (iVar2 == 0)
+ return 0;
+
+ if (iVar2 % unk0 == 0)
+ return unk0;
+
+ if (param_3 == uVar1 - 1)
+ return iVar2 % unk0;
+
+ return unk0;
+}
+
+const char* JAHUAsn::getName(s32 param_1, s32 param_2, s32 param_3, s32 param_4) {
+ JAUSoundNameTable* table = JASGlobalInstance<JAUSoundNameTable>::getInstance();
+ return table->getName((param_1 << 24) + (param_2 << 16) + (param_4 + param_3 * unk0));
+}
+
+u32 JAHUAsn::getDataId(s32 param_1, s32 param_2, s32 param_3, s32 param_4) {
+ return (param_1 << 24) + (param_2 << 16) + (param_4 + param_3 * unk0);
+}
+
+void JAHUAsn::createComboBoxCategory(JAHControl& control) {
+ int totalItems = 0;
+
+ JAUSoundNameTable* table = JASGlobalInstance<JAUSoundNameTable>::getInstance();
+ for (u32 i = 0; i < 3; ++i) {
+ for (u32 j = 0; j < table->getNumGroups_inSection(i); ++j) {
+ if (table->getNumItems_inGroup(i, j) > 0) {
+ const char* name = table->getGroupName((i << 24) + (j << 16));
+ control.getContext()->genComboBoxItem(name, totalItems);
+ ++totalItems;
+ }
+ }
+ }
+}
+
+void JAHUAsn::createComboBoxSub(JAHControl& control, s32 param_2, s32 param_3) {
+ int uVar1 = getSubNum(param_2, param_3);
+ for (int i = 0; i < uVar1; ++i) {
+ char buffer[4];
+ sprintf(buffer, "%2x\0", i);
+ control.getContext()->genComboBoxItem(buffer, i);
+ }
+}
+
+void JAHUAsn::createComboBoxData(JAHControl& control, s32 param_2, s32 param_3, s32 param_4) {
+ int uVar1 = getDataNum(param_2, param_3, param_4);
+ for (int i = 0; i < uVar1; ++i) {
+ const char* name = getName(param_2, param_3, param_4, i);
+ control.getContext()->genComboBoxItem(name, i);
+ }
+}
+
+void JAHUAsn::checkAndUpdateNameBox(s32* param_1, s32* param_2, s32* param_3, s32* param_4,
+ s32 param_5, s32 param_6, s32 param_7, JORReflexible* param_8) {
+ if (*param_1 != param_5 || *param_2 != param_6 || *param_3 != param_7) {
+ if (*param_2 != param_6 || *param_1 != param_5) {
+ *param_3 = 0;
+ __updateNameBoxSub(*param_1, *param_2, param_3, param_8);
+ }
+
+ if (*param_3 != param_7 || *param_2 != param_6 || *param_1 != param_5) {
+ *param_4 = 0;
+ __updateNameBoxData(*param_1, *param_2, *param_3, param_4, param_8);
+ }
+ }
+}
+
+void JAHUAsn::updateNameBoxAll(s32* param_1, s32* param_2, s32* param_3, s32* param_4,
+ JORReflexible* param_5) {
+ __updateNameBoxCategory(param_2, param_5);
+ __updateNameBoxSub(*param_1, *param_2, param_3, param_5);
+ __updateNameBoxData(*param_1, *param_2, *param_3, param_4, param_5);
+}
+
+void JAHUAsn::__updateNameBoxCategory(s32* param_1, JORReflexible* param_2) {
+ JORMContext* ctx = attachJORMContext(8);
+ ctx->startUpdateNode(param_2);
+ ctx->updateComboBox(2, param_1, 0);
+ ctx->endUpdateNode();
+ releaseJORMContext(ctx);
+}
+
+void JAHUAsn::__updateNameBoxSub(s32 param_1, s32 param_2, s32* param_3, JORReflexible* param_4) {
+ JORMContext* ctx = attachJORMContext(8);
+ ctx->startUpdateNode(param_4);
+ ctx->removeComboBoxItem(5, param_3, 0);
+ int num = getSubNum(param_1, param_2);
+ for (int i = 0; i < num; ++i) {
+ char buf[4];
+ sprintf(buf, "%2x\0", i);
+ ctx->addComboBoxItem(1, param_3, buf, i, 0);
+ }
+ ctx->updateComboBox(2, param_3, 0);
+ ctx->endUpdateNode();
+ releaseJORMContext(ctx);
+}
+
+void JAHUAsn::__updateNameBoxData(s32 param_1, s32 param_2, s32 param_3, s32* param_4,
+ JORReflexible* param_5) {
+ JORMContext* ctx = attachJORMContext(8);
+ ctx->startUpdateNode(param_5);
+ ctx->removeComboBoxItem(5, param_4, 0);
+ ctx->endUpdateNode();
+ releaseJORMContext(ctx);
+
+ ctx = attachJORMContext(8);
+ ctx->startUpdateNode(param_5);
+ int num = getDataNum(param_1, param_2, param_3);
+ for (int i = 0; i < num; ++i) {
+ ctx->addComboBoxItem(1, param_4, getName(param_1, param_2, param_3, i), i, 0);
+ }
+ ctx->updateComboBox(2, param_4, 0);
+ ctx->endUpdateNode();
+ releaseJORMContext(ctx);
+}
+
+u32 JAHUAsn::__GetSubNo(s32 param_1) {
+ return param_1 / unk0;
+}
+
+u32 JAHUAsn::__GetDataNo(s32 param_1) {
+ return param_1 % unk0;
+}
+
+u8 JAHUAsn::getCategory(u32 param_1) {
+ return (param_1 & 0xF0000) >> 0x10;
+}
+
+u8 JAHUAsn::getSub(u32 param_1) {
+ int perCat = getDataPerCat(param_1);
+ return __GetSubNo(perCat);
+}
+
+u16 JAHUAsn::getDataPerCat(u32 param_1) {
+ return param_1;
+}
+
+u16 JAHUAsn::getDataPerSub(u32 param_1) {
+ u16 perCat = getDataPerCat(param_1);
+ return __GetDataNo(perCat);
+}
+
+u32 JAHUAsn::getNextId(u32 param_1, bool param_2) {
+ JUT_ASSERT(490, 0L);
+ return param_1;
+}
diff --git a/libs/JSystem/src/JAHostIO/JAHUFx.cpp b/libs/JSystem/src/JAHostIO/JAHUFx.cpp
new file mode 100644
index 0000000000..d704c9c61c
--- /dev/null
+++ b/libs/JSystem/src/JAHostIO/JAHUFx.cpp
@@ -0,0 +1,8 @@
+#include <JSystem/JAHostIO/JAHioMessage.h>
+
+void dummy(JAHControl* cont, u16 s) {
+ cont->makeSlider(NULL, (s16*)NULL, (s16)0, (s16)0, 0);
+ cont->makeSlider(NULL, (s32*)NULL, (s32)0, (s32)0, 0);
+ cont->returnYDirectSize(s);
+ cont->startRadioButton(NULL, (u8*)NULL, (u8)0, 0);
+}
diff --git a/libs/JSystem/src/JAHostIO/JAHUTableEdit.cpp b/libs/JSystem/src/JAHostIO/JAHUTableEdit.cpp
new file mode 100644
index 0000000000..44936fe0b8
--- /dev/null
+++ b/libs/JSystem/src/JAHostIO/JAHUTableEdit.cpp
@@ -0,0 +1,196 @@
+#include "JSystem/JAHostIO/JAHUTableEdit.h"
+#include "JSystem/JAHostIO/JAHUAsnData.h"
+#include "JSystem/JAHostIO/JAHUpdate.h"
+#include "JSystem/JAHostIO/JAHioMessage.h"
+#include "JSystem/JAHostIO/JAHioUtil.h"
+#include "JSystem/JAudio2/JAISoundStarter.h"
+#include "JSystem/JAudio2/JAUSoundTable.h"
+
+JAHUSeBox::JAHUSeBox(u32 param_1, u32* param_2) : JAHVirtualNode(NULL) {
+ unk4C = getVirNodeNum() | 0x12000000;
+ unk50 = getVirNodeNum() | 0x13000000;
+ unk54 = getVirNodeNum() | 0x14000000;
+ unk5C = param_2;
+ mAsnCalc = NULL;
+
+ mAsnCalc = new JAHUAsn(0x10);
+ JUT_ASSERT(611, mAsnCalc);
+
+ unk48 = false;
+ if (param_1 == -1)
+ unk58 = mAsnCalc->getDataId(0, 0, 0, 0);
+ else
+ unk58 = param_1;
+
+ unk84 = 0;
+}
+
+void JAHUSeBox::trigPlayButton() {
+ unk48 = true;
+ JAHUpdate::buttonOff(getMaster(), unk4C);
+ JAHUpdate::buttonOn(getMaster(), unk50);
+}
+
+void JAHUSeBox::trigStopButton() {
+ unk48 = false;
+ JAHUpdate::buttonOn(getMaster(), unk4C);
+ JAHUpdate::buttonOff(getMaster(), unk50);
+ soundStop();
+}
+
+void JAHUSeBox::soundStop() {
+ if (unk40)
+ unk40->stop();
+}
+
+void JAHUSeBox::onCurrentNodeFrame() {
+ if (unk48) {
+ soundPlay();
+ unk48 = false;
+ }
+
+ if (unk44 && !unk40) {
+ JAHUpdate::buttonOn(getMaster(), unk4C);
+ JAHUpdate::buttonOff(getMaster(), unk50);
+ } else if (!unk44 && unk40) {
+ JAHUpdate::buttonOff(getMaster(), unk4C);
+ JAHUpdate::buttonOn(getMaster(), unk50);
+ }
+}
+
+void JAHUSeBox::soundPlay() {
+ JAISoundStarter* starter = JASGlobalInstance<JAISoundStarter>::getInstance();
+ if (starter) {
+ starter->startSound(unk58, &unk40, 0);
+ }
+}
+
+void JAHUSeBox::message(JAHControl& control) {
+ if (!unk84 && JASGlobalInstance<JAUSoundNameTable>::getInstance()) {
+ if (unk58 == -1) {
+ unk64 = 0;
+ unk68 = 0;
+ unk6C = 0;
+ unk70 = 0;
+ unk74 = 0;
+ unk78 = 0;
+ unk7C = 0;
+ unk80 = 0;
+ unk58 = 0;
+ } else {
+ unk64 = unk58 >> 24;
+ unk68 = mAsnCalc->getCategory(unk58);
+ unk6C = mAsnCalc->getSub(unk58);
+ unk70 = mAsnCalc->getDataPerSub(unk58);
+ unk74 = unk64;
+ unk78 = unk68;
+ unk7C = unk6C;
+ unk80 = unk70;
+ }
+
+ unk84 = true;
+ }
+
+ control.startComboBoxL(NULL, &unk68, 0, 200, 0);
+ mAsnCalc->createComboBoxCategory(control);
+ control.endComboBox();
+ control.startComboBoxL(NULL, &unk6C, 0, 0x2d, 0);
+ mAsnCalc->createComboBoxSub(control, unk64, unk68);
+ control.endComboBox();
+ control.startComboBoxL(NULL, &unk70, 0, 200, 0);
+ mAsnCalc->createComboBoxData(control, unk64, unk68, unk6C);
+ control.endComboBox();
+ control.makeCommentL(JAHioUtil::getString("%08x", unk58), unk54, 0x37, 0);
+ control.makeButtonL(">", unk4C, 0x32, 0);
+ control.makeButtonL("■", unk50, 0x32, 0x40000000);
+ control.returnY(1);
+}
+
+void JAHUSeBox::nodeEvent(JAH_N_Event) {}
+
+void JAHUSeBox::propertyEvent(JAH_P_Event param_1, u32 param_2) {
+ if (param_1 == 0) {
+ unk74 = unk64;
+ unk78 = unk68;
+ unk7C = unk6C;
+ unk80 = unk70;
+ return;
+ }
+
+ if (param_2 != unk4C && param_2 != unk50 &&
+ ((unk7C == unk6C && unk80 == unk70) || unk68 != unk78))
+ {
+ JAUSoundNameTable* table = JASGlobalInstance<JAUSoundNameTable>::getInstance();
+ int groups = table->getNumGroups_inSection(0);
+ if (unk68 >= groups) {
+ groups += table->getNumGroups_inSection(1);
+ if (unk68 < groups) {
+ unk64 = 1;
+ unk68 -= table->getNumGroups_inSection(0);
+ } else {
+ unk64 = 2;
+ unk68 -= groups;
+ }
+ } else {
+ unk64 = 0;
+ }
+ }
+
+ mAsnCalc->checkAndUpdateNameBox(&unk64, &unk68, &unk6C, &unk70, unk74, unk78, unk7C,
+ getMaster());
+ if (checkNameSetChange()) {
+ unk58 = mAsnCalc->getDataId(unk64, unk68, unk6C, unk70);
+ if (unk5C != NULL)
+ *unk5C = unk58;
+ char buf[9];
+ sprintf(buf, "%08x", unk58);
+ JORMContext* ctx = attachJORMContext(8);
+ ctx->startUpdateNode(getMaster());
+ ctx->updateLabel(2, unk54, buf);
+ ctx->endUpdateNode();
+ releaseJORMContext(ctx);
+ }
+
+ if (param_2 == unk4C) {
+ trigPlayButton();
+ } else if (param_2 == unk50) {
+ trigStopButton();
+ }
+}
+
+u8 JAHUSeBox::checkNameSetChange() {
+ u8 iVar1 = 0;
+
+ if (unk74 != unk64)
+ iVar1++;
+
+ if (unk78 != unk68)
+ iVar1++;
+
+ if (unk7C != unk6C)
+ iVar1++;
+
+ if (unk80 != unk70)
+ iVar1++;
+
+ return iVar1;
+}
+
+void JAHUSeBox::updateNameSet(JORReflexible* param_1) {
+ mAsnCalc->updateNameBoxAll(&unk64, &unk68, &unk6C, &unk70, param_1);
+ JORMContext* ctx = attachJORMContext(8);
+ ctx->startUpdateNode(param_1);
+ ctx->updateLabel(2, unk54, JAHioUtil::getString("%08x", unk58));
+ ctx->endUpdateNode();
+ releaseJORMContext(ctx);
+}
+
+void JAHUSeBox::setId(u32 param_1, bool param_2, JORReflexible* param_3) {
+ unk58 = param_1;
+ unk64 = unk58 >> 24;
+ unk68 = (param_1 >> 16) & 0xff;
+ unk6C = mAsnCalc->getSub(param_1);
+ unk70 = mAsnCalc->getDataPerSub(param_1);
+ if (param_2)
+ updateNameSet(param_3);
+}
diff --git a/libs/JSystem/src/JAHostIO/JAHVirtualNode.cpp b/libs/JSystem/src/JAHostIO/JAHVirtualNode.cpp
new file mode 100644
index 0000000000..7275fc70be
--- /dev/null
+++ b/libs/JSystem/src/JAHostIO/JAHVirtualNode.cpp
@@ -0,0 +1,93 @@
+#include <JSystem/JAHostIO/JAHVirtualNode.h>
+#include <JSystem/JUtility/JUTAssert.h>
+#include <cstring>
+
+u32 JAHVirtualNode::smVirNodeNum;
+
+void JAHVirtualNode::virtualMessage(JAHControl& control) {
+ message(control);
+ callAllVirtualMessages(control);
+}
+
+void JAHVirtualNode::callAllVirtualMessages(JAHControl& control) {
+ if (mTree.getNumChildren() == 0)
+ return;
+
+ for (JSUTreeIterator<JAHVirtualNode> iter = mTree.getFirstChild(); iter != mTree.getEndChild();
+ ++iter)
+ {
+ iter->message(control);
+ }
+}
+
+JAHioNode* JAHVirtualNode::getMaster() {
+ JSUTree<JAHVirtualNode>* it = mTree.getParent();
+ while (it->getParent())
+ it = it->getParent();
+ return (JAHioNode*)it->getObject();
+}
+
+void JAHVirtualNode::framework() {
+ onFrame();
+ for (JSUTreeIterator<JAHVirtualNode> iter = getVirTree()->getFirstChild();
+ iter != getVirTree()->getEndChild(); ++iter)
+ {
+ iter->framework();
+ }
+}
+
+void JAHVirtualNode::onFrame() {}
+
+void JAHVirtualNode::currentFramework() {
+ onCurrentNodeFrame();
+ for (JSUTreeIterator<JAHVirtualNode> iter = getVirTree()->getFirstChild();
+ iter != getVirTree()->getEndChild(); ++iter)
+ {
+ iter->framework();
+ }
+}
+
+void JAHVirtualNode::onCurrentNodeFrame() {}
+
+void JAHVirtualNode::listenVirtualPropertyEvent(JAH_P_Event param_1, u32 param_2) {
+ propertyEvent(param_1, param_2);
+ for (JSUTreeIterator<JAHVirtualNode> iter = mTree.getFirstChild(); iter != mTree.getEndChild();
+ ++iter)
+ {
+ iter->listenVirtualPropertyEvent(param_1, param_2);
+ }
+}
+
+void JAHVirtualNode::propertyEvent(JAH_P_Event, u32) {}
+
+void JAHVirtualNode::listenVirtualNodeEvent(JAH_N_Event param_1) {
+ nodeEvent(param_1);
+ for (JSUTreeIterator<JAHVirtualNode> iter = mTree.getFirstChild(); iter != mTree.getEndChild();
+ ++iter)
+ {
+ iter->listenVirtualNodeEvent(param_1);
+ }
+}
+
+void JAHVirtualNode::nodeEvent(JAH_N_Event) {}
+
+void JAHVirtualNode::setVirNodeName(const char* name) {
+ JUT_ASSERT(139, name);
+ size_t size = strlen(name) + 1;
+ // clang-format off
+ JUT_ASSERT(141, size<32);
+ // clang-format on
+ strcpy(mName, name);
+}
+
+JAHVirtualNode::JAHVirtualNode(const char* name) : mTree(this) {
+ if (name)
+ setVirNodeName(name);
+ else
+ setVirNodeName("no name");
+ smVirNodeNum += 1;
+}
+
+void JAHVirtualNode::updateNode() {
+ getMaster()->updateNode();
+}
diff --git a/libs/JSystem/src/JAHostIO/JAHioMessage.cpp b/libs/JSystem/src/JAHostIO/JAHioMessage.cpp
index 93fda0dd72..bc0e26e211 100644
--- a/libs/JSystem/src/JAHostIO/JAHioMessage.cpp
+++ b/libs/JSystem/src/JAHostIO/JAHioMessage.cpp
@@ -1,4 +1,4 @@
-#include "JSystem/JSystem.h" // IWYU pragma: keep
+#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAHostIO/JAHioMessage.h"
#include "JSystem/JAHostIO/JAHioNode.h"
@@ -7,7 +7,7 @@
u16 JAHControl::smButtonWidth[] = {20, 50, 100, 150, 300, 600};
u16 JAHControl::smCommentWidth[] = {20, 50, 100, 200, 400, 800};
-u16 JAHControl::smComboWidth[] = { 50, 100, 150, 200, 300, 600};
+u16 JAHControl::smComboWidth[] = {50, 100, 150, 200, 300, 600};
u16 JAHControl::smYTop = 5;
u16 JAHControl::smXLeft = 5;
u16 JAHControl::smIndentSize = 30;
diff --git a/libs/JSystem/src/JAHostIO/JAHioMgr.cpp b/libs/JSystem/src/JAHostIO/JAHioMgr.cpp
index 5c1a324651..91b0a030e6 100644
--- a/libs/JSystem/src/JAHostIO/JAHioMgr.cpp
+++ b/libs/JSystem/src/JAHostIO/JAHioMgr.cpp
@@ -1,9 +1,12 @@
-#include "JSystem/JSystem.h" // IWYU pragma: keep
+#include "JSystem/JSystem.h" // IWYU pragma: keep
-#include "JSystem/JAHostIO/JAHioMgr.h"
#include "JSystem/JAHostIO/JAHFrameNode.h"
+#include "JSystem/JAHostIO/JAHioMgr.h"
#include "JSystem/JHostIO/JORServer.h"
+template <>
+JAHioMgr* JAHSingletonBase<JAHioMgr>::sInstance = NULL;
+
JAHioMgr::JAHioMgr() : field_0x4(0), field_0x8(0) {}
void JAHioMgr::init_OnGame() {
diff --git a/libs/JSystem/src/JAHostIO/JAHioNode.cpp b/libs/JSystem/src/JAHostIO/JAHioNode.cpp
index 5eef2f7e92..12ba55c8eb 100644
--- a/libs/JSystem/src/JAHostIO/JAHioNode.cpp
+++ b/libs/JSystem/src/JAHostIO/JAHioNode.cpp
@@ -1,10 +1,12 @@
-#include "JSystem/JSystem.h" // IWYU pragma: keep
+#include "JSystem/JSystem.h" // IWYU pragma: keep
-#include "JSystem/JAHostIO/JAHioNode.h"
+#include <cstring>
#include "JSystem/JAHostIO/JAHioMessage.h"
#include "JSystem/JAHostIO/JAHioMgr.h"
+#include "JSystem/JAHostIO/JAHioNode.h"
#include "JSystem/JHostIO/JORServer.h"
-#include <cstring>
+
+JAHioNode* JAHioNode::smCurrentNode;
JAHioNode::JAHioNode(const char* name) : mTree(this) {
mLastChild = NULL;
@@ -86,7 +88,9 @@ void JAHioNode::generateTempChildren(JORMContext* mctx) {
}
}
-u32 JAHioNode::getNodeKind() const { return 0; }
+u32 JAHioNode::getNodeKind() const {
+ return 0;
+}
JAHioNode* JAHioNode::getParent() {
if (mTree.getParent()) {
diff --git a/libs/JSystem/src/JAHostIO/JAHioUtil.cpp b/libs/JSystem/src/JAHostIO/JAHioUtil.cpp
index 11c5fd4b52..e301b442af 100644
--- a/libs/JSystem/src/JAHostIO/JAHioUtil.cpp
+++ b/libs/JSystem/src/JAHostIO/JAHioUtil.cpp
@@ -1,10 +1,19 @@
-#include "JSystem/JSystem.h" // IWYU pragma: keep
+#include "JSystem/JSystem.h" // IWYU pragma: keep
-#include "JSystem/JAHostIO/JAHioUtil.h"
#include <cstdio>
+#include "JSystem/JAHostIO/JAHUpdate.h"
+#include "JSystem/JAHostIO/JAHioUtil.h"
+#include "JSystem/JHostIO/JORFile.h"
char JAHioUtil::mStringBuffer[256];
+JAHioNode* JAHUpdate::spNode;
+JORMContext* JAHUpdate::spMc;
+
+static char* dummy(JORDir* dir) {
+ return std::strrchr(dir->getFilename(), '\n');
+}
+
char* JAHioUtil::getString(const char* msg, ...) {
va_list args;
va_start(msg, args);
diff --git a/libs/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/string b/libs/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/string
index 41984de8b5..27c03be9d9 100644
--- a/libs/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/string
+++ b/libs/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/string
@@ -10,7 +10,6 @@ using ::memcmp;
using ::memchr;
using ::memmove;
-using ::strrchr;
using ::strlen;
using ::strncmp;
using ::strcmp;
@@ -25,6 +24,11 @@ using ::wcslen;
inline char* strchr(char* str, int c) {
return ::strchr(str, c);
}
+
+inline char* strrchr(char* str, int c) {
+ return ::strrchr(str, c);
+}
+
}; // namespace std
#endif
diff --git a/libs/revolution/include/revolution/dvd.h b/libs/revolution/include/revolution/dvd.h
index 06b7ecaece..afb0013558 100644
--- a/libs/revolution/include/revolution/dvd.h
+++ b/libs/revolution/include/revolution/dvd.h
@@ -3,7 +3,6 @@
#include <revolution/types.h>
#include <revolution/esp.h>
-#include "global.h"
#ifdef __cplusplus
extern "C" {
@@ -188,15 +187,16 @@ typedef struct DVDGameTOC {
typedef struct DVDPartitionParams DVDPartitionParams;
+#define ROUND_HACK(n, a) (((u32)(n) + (a)-1) & ~((a)-1))
struct DVDPartitionParams {
ESTicket ticket;
- u8 padding0[ROUND(sizeof(ESTicket), 32) - sizeof(ESTicket)];
+ u8 padding0[ROUND_HACK(sizeof(ESTicket), 32) - sizeof(ESTicket)];
ESTicketView ticketView;
- u8 padding1[ROUND(sizeof(ESTicketView), 32) - sizeof(ESTicketView)];
+ u8 padding1[ROUND_HACK(sizeof(ESTicketView), 32) - sizeof(ESTicketView)];
u32 numTmdBytes;
u8 padding2[28];
ESTitleMeta tmd;
- u8 padding3[ROUND(sizeof(ESTitleMeta), 32) - sizeof(ESTitleMeta)];
+ u8 padding3[ROUND_HACK(sizeof(ESTitleMeta), 32) - sizeof(ESTitleMeta)];
u32 numCertBytes;
u8 padding4[28];
u8 certificates[4096];
@@ -204,6 +204,7 @@ struct DVDPartitionParams {
u8 padding5[28];
u8 h3Hash[98304];
};
+#undef ROUND_HACK
typedef struct diRegVals {
u32 ImmRegVal;
diff --git a/libs/revolution/src/ipc/ipcProfile.c b/libs/revolution/src/ipc/ipcProfile.c
index 735f053757..a778e09b35 100644
--- a/libs/revolution/src/ipc/ipcProfile.c
+++ b/libs/revolution/src/ipc/ipcProfile.c
@@ -1,4 +1,5 @@
#include <revolution.h>
+#include "global.h"
#include <cstring>
#if SDK_AUG2010
diff --git a/libs/revolution/src/pad/Pad.c b/libs/revolution/src/pad/Pad.c
index b20da7bb14..3d934d3d8b 100644
--- a/libs/revolution/src/pad/Pad.c
+++ b/libs/revolution/src/pad/Pad.c
@@ -1,6 +1,7 @@
#include <revolution.h>
#include <revolution/pad.h>
#include <revolution/si.h>
+#include "global.h"
#include <cstring>
diff --git a/libs/revolution/src/wpad/__wpad.h b/libs/revolution/src/wpad/__wpad.h
index 7203d9f5b0..e6a6c8803e 100644
--- a/libs/revolution/src/wpad/__wpad.h
+++ b/libs/revolution/src/wpad/__wpad.h
@@ -3,6 +3,7 @@
#include <revolution/os.h>
#include <revolution/wpad.h>
+#include "global.h"
#ifdef __cplusplus
extern "C" {
diff --git a/src/Z2AudioLib/SpotName.h b/src/Z2AudioLib/SpotName.h
new file mode 100644
index 0000000000..e531fb7524
--- /dev/null
+++ b/src/Z2AudioLib/SpotName.h
@@ -0,0 +1,20 @@
+#ifndef SPOTNAME_H
+#define SPOTNAME_H
+
+// This symbol has polluted multiple TUs in the lib, hence,
+// it probably was defined in the header as static by accident
+static const char* sSpotName[] = {
+ "F_SP00", "F_SP103", "R_SP01", "F_SP104", "R_SP107", "F_SP108", "R_SP108", "F_SP117",
+ "F_SP109", "R_SP109", "R_SP209", "F_SP110", "R_SP110", "F_SP111", "F_SP128", "R_SP128",
+ "F_SP115", "F_SP112", "F_SP126", "F_SP127", "R_SP127", "F_SP113", "F_SP116", "R_SP116",
+ "R_SP160", "R_SP161", "F_SP114", "F_SP118", "F_SP124", "F_SP125", "F_SP121", "F_SP122",
+ "F_SP123", "F_SP200", "F_SP102", "", "R_SP300", "R_SP301", "T_ENEMY", "D_MN54",
+ "D_MN05", "D_MN05B", "D_MN05A", "D_MN04", "D_MN04B", "D_MN04A", "D_MN01", "D_MN01B",
+ "D_MN01A", "D_MN10", "D_MN10B", "D_MN10A", "D_MN11", "D_MN11B", "D_MN11A", "D_MN06",
+ "D_MN06B", "D_MN06A", "D_MN07", "D_MN07B", "D_MN07A", "D_MN08", "D_MN08B", "D_MN08C",
+ "D_MN08A", "D_MN08D", "D_MN09", "D_MN09A", "D_MN09B", "D_MN09C", "D_SB00", "D_SB01",
+ "D_SB02", "D_SB03", "D_SB04", "D_SB05", "D_SB06", "D_SB07", "D_SB08", "D_SB09",
+ "D_SB10",
+};
+
+#endif /* SPOTNAME_H */
diff --git a/src/Z2AudioLib/Z2AudioMgr.cpp b/src/Z2AudioLib/Z2AudioMgr.cpp
index 58ef5fc997..1465515cb6 100644
--- a/src/Z2AudioLib/Z2AudioMgr.cpp
+++ b/src/Z2AudioLib/Z2AudioMgr.cpp
@@ -19,6 +19,7 @@
#endif
Z2AudioMgr* Z2AudioMgr::mAudioMgrPtr;
+u8 gMuffleOutOfRangeMic = false;
Z2AudioMgr::Z2AudioMgr() : mSoundStarter(true) {
mAudioMgrPtr = this;
diff --git a/src/Z2AudioLib/Z2DebugSys.cpp b/src/Z2AudioLib/Z2DebugSys.cpp
index 55ee66519c..59c125b110 100644
--- a/src/Z2AudioLib/Z2DebugSys.cpp
+++ b/src/Z2AudioLib/Z2DebugSys.cpp
@@ -14,14 +14,15 @@
#include "JSystem/JKernel/JKRExpHeap.h"
#include "Z2AudioLib/Z2F1TestWindow.h"
#include "Z2AudioLib/Z2FxLineMgr.h"
+#include "Z2AudioLib/Z2Param.h"
#include "Z2AudioLib/Z2SeView.h"
#include "Z2AudioLib/Z2SoundPlayer.h"
#include "Z2AudioLib/Z2TrackView.h"
#include "Z2AudioLib/Z2WaveArcLoader.h"
-#include "m_Do/m_Do_hostIO.h"
#include "m_Do/m_Do_ext.h"
+#include "m_Do/m_Do_hostIO.h"
-Z2DebugSys::Z2DebugSys() : JASGlobalInstance<Z2DebugSys>(true) { }
+Z2DebugSys::Z2DebugSys() : JASGlobalInstance<Z2DebugSys>(true) {}
void Z2DebugSys::initJAW() {
JKRHeap* oldHeap = JKRHeap::getCurrentHeap();
@@ -117,3 +118,108 @@ JAISeqDataMgr* Z2DebugSys::initSeSeqDataMgr(const void* param_1) {
JKRSetCurrentHeap(oldHeap);
return seqDataMgr;
}
+
+u8 gMicOn = true;
+u8 gMicOffWhenOutOfSight = true;
+extern u8 gMuffleOutOfRangeMic;
+
+void Z2ParamNode::message(JAHControl& ctrl) {
+ ctrl.makeComment("**** 各種パラメータ編集用ノード ****", 0, 5, 0);
+ ctrl.returnY(1);
+ ctrl.indent(1);
+ ctrl.makeCheckBox("BGM強制ボリュームON", &Z2GetSeqMgr()->field_0x04_debug, 1, false, 0);
+ ctrl.makeSlider("BGM強制ボリューム", &Z2GetSeqMgr()->field_0x00_debug, 0.0f, 1.0f, 0);
+ ctrl.returnY(1);
+ ctrl.makeComment("-- ミドナボイス --", 0, 5, 0);
+ ctrl.indent(1);
+ ctrl.makeSlider("発話スタイル", (s16*)Z2GetSpeechMgr2()->getStylePtr(), 0, 0x10, 0);
+ ctrl.makeSlider("語尾(1=UP)", Z2GetSpeechMgr2()->getTalkerPtr(), 0, 1, 0);
+ ctrl.indent(-1);
+ ctrl.makeComment("-- BGM汎用パラメータ --", 0, 5, 0);
+ ctrl.indent(1);
+ ctrl.makeSlider("シーンチェンジ時のBGMフェードアウトタイム",
+ &Z2Param::SCENE_CHANGE_BGM_FADEOUT_TIME, 0, 0xff, 0);
+ ctrl.makeSlider("BGMクロスフェードインタイム", &Z2Param::BGM_CROSS_FADEIN_TIME, 0, 0xff, 0);
+ ctrl.makeSlider("BGMクロスフェードアウトタイム", &Z2Param::BGM_CROSS_FADEOUT_TIME, 0, 0xff,
+ 0);
+ ctrl.indent(-1);
+ ctrl.makeComment("-- 戦闘BGMパラメータ --", 0, 5, 0);
+ ctrl.indent(1);
+ ctrl.makeSlider("戦闘BGMスタート禁止時間", &Z2Param::BATTLE_BGM_WAIT_TIME, 0, 0xff, 0);
+ ctrl.makeSlider("戦闘BGMスタート距離", &Z2Param::BATTLE_FADEIN_DIST, 0.0f, 5000.0f, 0);
+ ctrl.makeSlider("戦闘BGMフェードアウト距離", &Z2Param::BATTLE_FADEOUT_DIST, 0.0f, 5000.0f,
+ 0);
+ ctrl.makeSlider("接近戦状態距離", &Z2Param::ENEMY_NEARBY_DIST, 0.0f, 5000.0f, 0);
+ ctrl.makeSlider("接近戦トラックFIタイム", &Z2Param::CLOSE_BATTLE_TRACK_FI_TIME, 0, 0xff, 0);
+ ctrl.makeSlider("接近戦トラックFOタイム", &Z2Param::CLOSE_BATTLE_TRACK_FO_TIME, 0, 0xff, 0);
+ ctrl.makeSlider("見つかりトラックFIタイム", &Z2Param::FOUND_TRACK_FI_TIME, 0, 0xff, 0);
+ ctrl.makeSlider("見つかりトラックFOタイム", &Z2Param::FOUND_TRACK_FO_TIME, 0, 0xff, 0);
+ ctrl.makeSlider("最後の一撃音量下げ範囲", &Z2Param::ENEMY_LASTHIT_MUTE_VOLUME, 0.0f, 1.0f, 0);
+ ctrl.makeSlider("最後の一撃音量下げ時間", &Z2Param::ENDING_BLOW_VOL_DOWN_TIME, 0, 0xff, 0);
+ ctrl.makeSlider("最後の一撃音量下げ持続時間", &Z2Param::ENDING_BLOW_VOL_LOWER_TIME, 0, 0xff, 0);
+ ctrl.makeSlider("最後の一撃音量下げ復帰時間", &Z2Param::ENDING_BLOW_VOL_LOWER_RECOVER_TIME, 0,
+ 0xff, 0);
+ ctrl.makeSlider("最後の一撃〜フィニッシュ最低時間", &Z2Param::ENDING_BLOW_MIN_FINISH_TIME, 0,
+ 0xff, 0);
+ ctrl.indent(-1);
+ ctrl.returnY(1);
+ ctrl.makeComment("-- オーディブル演算パラメータ --", 0, 5, 0);
+ ctrl.indent(1);
+ ctrl.makeSlider("ボリューム変化許容範囲(+-)", &Z2Param::AUDIBLE_DELTA_RANGE_VOLUME, 0.0f, 1.0f,
+ 0);
+ ctrl.makeSlider("パン変化許容範囲(+-)", &Z2Param::AUDIBLE_DELTA_RANGE_PAN, 0.0f, 1.0f, 0);
+ ctrl.makeSlider("ドルビー変化許容範囲(+-)", &Z2Param::AUDIBLE_DELTA_RANGE_DOLBY, 0.0f, 1.0f, 0);
+ ctrl.makeSlider("ドップラーピッチ変化許容範囲(*/)", &Z2GetAudience()->getSetting()->field_0x60,
+ 1.0f, 2.0f, 0);
+ ctrl.indent(-1);
+ ctrl.returnY(1);
+ Z2SpotMic* pfVar2 = Z2GetAudience()->getLinkMic();
+ if (pfVar2 != NULL) {
+ ctrl.makeComment("-- リンクスポットマイク設定 --", 0, 5, 0);
+ ctrl.indent(1);
+ ctrl.makeCheckBox("マイクON?", &gMicOn, 1, false, 0);
+ ctrl.makeCheckBox("視野外でマイクオフ?", &gMicOffWhenOutOfSight, 1, false, 0);
+ ctrl.makeSlider("マイク音量最大距離", &pfVar2->field_0x0, 0.0f, 1000.0f, 0);
+ ctrl.makeSlider("マイク音量最小距離", &pfVar2->field_0x4, 0.0f, 1000.0f, 0);
+ ctrl.makeSlider("最小音量", &pfVar2->field_0x8, 0.0f, 1.0f, 0);
+ ctrl.makeSlider("最大音量の最小値", &pfVar2->field_0xc, 0.0f, 1.0f, 0);
+ ctrl.makeButton("マイク設定更新", 3, 3, 0);
+ ctrl.returnY(1);
+ ctrl.makeCheckBox("マイク圏外をボリュームダウン", &gMuffleOutOfRangeMic, 1, false, 0);
+ ctrl.indent(1);
+ ctrl.makeSlider("マイク圏外の音量比", &Z2GetAudience()->field_0x4, 0.0f, 1.0f, 0);
+ ctrl.indent(-1);
+ ctrl.indent(-1);
+ }
+ ctrl.makeComment("-- 闇のSEフィルタ実験 --", 0, 5, 0);
+ ctrl.indent(1);
+ ctrl.makeButton("フィルタリセット", 2, 3, 0);
+ ctrl.makeCheckBox("フィルタON", &Z2Param::DARK_SE_FILTER_ON, 1, false, 0);
+ ctrl.makeCheckBox("システムSEにも適用", &Z2Param::SYSTEM_SE_USE_DARK_SE_SETTING, 1, false, 0);
+ ctrl.makeSlider("ローパスフィルタ設定(強→弱)", &Z2Param::DARK_SE_LOW_PASS_FILTER_SETTING, 0,
+ 0x7f, 0);
+}
+
+void Z2ParamNode::propertyEvent(JAH_P_Event param_1, u32 param_2) {
+ if (param_1 == JAH_P_EVENT0)
+ return;
+
+ switch (param_2) {
+ case 2:
+ Z2GetSoundMgr()->resetFilterAll();
+ break;
+ case 3:
+ Z2GetAudience()->getLinkMic()->calcPriorityFactor();
+ break;
+ }
+}
+
+void Z2ParamNode::onFrame() {
+ Z2SpotMic* mic = Z2GetAudience()->getLinkMic();
+ if (!mic)
+ return;
+
+ mic->setMicOn(gMicOn != 0);
+ mic->setIgnoreIfOut(gMicOffWhenOutOfSight != 0);
+ Z2GetAudience()->setUsingOffMicVol(gMuffleOutOfRangeMic != 0);
+}
diff --git a/src/Z2AudioLib/Z2EnvSeMgr.cpp b/src/Z2AudioLib/Z2EnvSeMgr.cpp
index 0c6884b9a2..d6f68bcd95 100644
--- a/src/Z2AudioLib/Z2EnvSeMgr.cpp
+++ b/src/Z2AudioLib/Z2EnvSeMgr.cpp
@@ -3,92 +3,7 @@
#include "JSystem/JAudio2/JASCalc.h"
#include "d/d_save.h"
#include "d/d_com_inf_game.h"
-
-#if DEBUG
-static const char* sSpotName[] = {
- "F_SP00",
- "F_SP103",
- "R_SP01",
- "F_SP104",
- "R_SP107",
- "F_SP108",
- "R_SP108",
- "F_SP117",
- "F_SP109",
- "R_SP109",
- "R_SP209",
- "F_SP110",
- "R_SP110",
- "F_SP111",
- "F_SP128",
- "R_SP128",
- "F_SP115",
- "F_SP112",
- "F_SP126",
- "F_SP127",
- "R_SP127",
- "F_SP113",
- "F_SP116",
- "R_SP116",
- "R_SP160",
- "R_SP161",
- "F_SP114",
- "F_SP118",
- "F_SP124",
- "F_SP125",
- "F_SP121",
- "F_SP122",
- "F_SP123",
- "F_SP200",
- "F_SP102",
- "",
- "R_SP300",
- "R_SP301",
- "T_ENEMY",
- "D_MN54",
- "D_MN05",
- "D_MN05B",
- "D_MN05A",
- "D_MN04",
- "D_MN04B",
- "D_MN04A",
- "D_MN01",
- "D_MN01B",
- "D_MN01A",
- "D_MN10",
- "D_MN10B",
- "D_MN10A",
- "D_MN11",
- "D_MN11B",
- "D_MN11A",
- "D_MN06",
- "D_MN06B",
- "D_MN06A",
- "D_MN07",
- "D_MN07B",
- "D_MN07A",
- "D_MN08",
- "D_MN08B",
- "D_MN08C",
- "D_MN08A",
- "D_MN08D",
- "D_MN09",
- "D_MN09A",
- "D_MN09B",
- "D_MN09C",
- "D_SB00",
- "D_SB01",
- "D_SB02",
- "D_SB03",
- "D_SB04",
- "D_SB05",
- "D_SB06",
- "D_SB07",
- "D_SB08",
- "D_SB09",
- "D_SB10",
-};
-#endif
+#include "Z2AudioLib/SpotName.h"
Z2EnvSeBase::Z2EnvSeBase(Vec* posPtr) {
mPos = posPtr;
diff --git a/src/Z2AudioLib/Z2F1TestWindow.cpp b/src/Z2AudioLib/Z2F1TestWindow.cpp
new file mode 100644
index 0000000000..7cf5c5eb63
--- /dev/null
+++ b/src/Z2AudioLib/Z2F1TestWindow.cpp
@@ -0,0 +1,198 @@
+#include "Z2AudioLib/Z2F1TestWindow.h"
+#include "JSystem/JAHostIO/JAHioMessage.h"
+#include "JSystem/JAudio2/JASAudioThread.h"
+#include "JSystem/JKernel/JKRHeap.h"
+#include "Z2AudioLib/Z2Audience.h"
+
+f32 sF1_Diff = 0.01f;
+f32 sF1_i = 0.1f;
+f32 sF1_Geta = 0.2f;
+s32 sF1_Frame = 200;
+f32 sF1_Pitch_Width = 0.2f;
+f32 sF1_Pan_Width;
+
+Z2F1TestWindow::Z2F1TestWindow() : JAWWindow("Z2F1TestWindow", 500, 450) {}
+
+void Z2F1TestWindow::onDraw(JAWGraphContext*) {}
+
+void Z2F1TestWindow::frameWork() {}
+
+void Z2F1TestWindow::calcF1() {}
+
+void Z2F1TestWindow::onPadProc(const JUTGamePad&) {}
+
+f32 Z2F1TestWindow::tau(f32) {}
+
+f32 Z2F1TestWindow::calcThreshold(int) {}
+
+f32 Z2F1TestWindow::getRawX() const {
+ return field_0x3f0;
+}
+
+f32 Z2F1TestWindow::calcNoise() {
+ field_0x3f0 = field_0x3f4;
+ field_0x3f4 = tau(field_0x3f0);
+ return field_0x3f0;
+}
+
+void Z2F1TestWindow::setValue(f32 param_1, f32 param_2) {
+ field_0x3f0 = param_1;
+ field_0x3f4 = param_1;
+ field_0xbd4 = param_2;
+}
+
+void Z2F1TestWindow::onTrigY(const JUTGamePad&) {
+ for (u16 i = 0; i < 500; ++i)
+ field_0x3f8[i] = 0.0f;
+
+ field_0x3f0 = tau(sF1_i);
+ field_0x3f4 = tau(field_0x3f0);
+ field_0xbd4 = calcThreshold(sF1_Frame);
+}
+
+void Z2F1TestWindow::onTrigMenu(const JUTGamePad&) {
+ if (field_0xbd0)
+ field_0xbd0 = 0;
+ else
+ field_0xbd0 = 1;
+}
+
+Z2F1SwingTestNode::Z2F1SwingTestNode()
+ : JAHFrameNode("1/fゆらぎテスト"), field_0xc48(-1, NULL), field_0xcd0(-1, NULL) {
+ appendVirNode(&field_0xc48);
+ appendVirNode(&field_0xcd0);
+ mModulateVolume = 0;
+ mModulatePitch = 0;
+ mModulatePan = 0;
+ mModulateDolby = 0;
+ field_0xd5c = 0.0f;
+ field_0xd60 = 0.0f;
+ field_0xd64 = 0.0f;
+ field_0xd68 = 0.0f;
+}
+
+void Z2F1SwingTestNode::message(JAHControl& ctrl) {
+ ctrl.makeComment("--1/fゆらぎテスト--", 0, 5, 0);
+ ctrl.indent(1);
+ ctrl.makeSlider("Diff値", &sF1_Diff, 0.0, 0.1, 0);
+ ctrl.makeSlider("i値", &sF1_i, 0.0f, 1.0f, 0);
+ ctrl.makeSlider("Geta値", &sF1_Geta, 0.0f, 1.0f, 0);
+ ctrl.makeSlider("frame値", &sF1_Frame, 2, 200, 0);
+ ctrl.returnY(1);
+ ctrl.makeCheckBox("ボリューム変調", &mModulateVolume, 1, false, 0);
+ ctrl.makeCheckBox("ピッチ変調", &mModulatePitch, 1, false, 0);
+ ctrl.makeSlider("Pitch ゆらぎ幅", &sF1_Pitch_Width, 0.0f, 1.0f, 0);
+ ctrl.makeCheckBox("パン変調", &mModulatePan, 1, false, 0);
+ ctrl.makeSlider("パン移動幅", &sF1_Pan_Width, 0.0f, 1.0f, 0);
+ ctrl.makeCheckBox("ドルビー変調", &mModulateDolby, 1, false, 0);
+}
+
+void Z2F1SwingTestNode::onFrame() {
+ f32 fVar1 = 1.0;
+ f32 fVar2 = getValue() * (1.0f - sF1_Geta) + sF1_Geta;
+ f32 fVar3 = getValue2() * (1.0f - sF1_Geta) + sF1_Geta;
+ if (field_0xc48.unk40.isSoundAttached() && field_0xcd0.unk40.isSoundAttached()) {
+ fVar1 = 0.5f;
+ field_0xc48.unk40->getAuxiliary().moveVolume(fVar2 * fVar1, 0);
+ field_0xcd0.unk40->getAuxiliary().moveVolume(fVar3 * fVar1, 0);
+ } else if (field_0xc48.unk40.isSoundAttached()) {
+ fVar1 = 1.0f;
+ field_0xc48.unk40->getAuxiliary().moveVolume(fVar2 * fVar1, 0);
+ } else if (field_0xcd0.unk40.isSoundAttached()) {
+ fVar1 = 1.0f;
+ field_0xcd0.unk40->getAuxiliary().moveVolume(fVar3 * fVar1, 0);
+ }
+
+ if (field_0xc48.unk40.isSoundAttached()) {
+ if (mModulateVolume)
+ field_0xc48.unk40->getAuxiliary().moveVolume(fVar3 * fVar1, 0);
+ else
+ field_0xc48.unk40->getAuxiliary().moveVolume(0.5f, 0);
+
+ if (mModulatePitch)
+ field_0xc48.unk40->getAuxiliary().movePitch(
+ getValue2() * sF1_Pitch_Width + (1.0f - sF1_Pitch_Width), 0);
+ else
+ field_0xc48.unk40->getAuxiliary().movePitch(1.0f, 0);
+
+ if (mModulatePan)
+ field_0xc48.unk40->getAuxiliary().movePan(0.5f - getValue2() * sF1_Pan_Width / 2, 0);
+ else
+ field_0xc48.unk40->getAuxiliary().movePan(0.5f, 0);
+
+ if (mModulateDolby)
+ field_0xc48.unk40->getAuxiliary().moveDolby(fVar3, 0);
+ else
+ field_0xc48.unk40->getAuxiliary().moveDolby(0.0f, 0);
+ } else if (field_0xcd0.unk40.isSoundAttached()) {
+ if (mModulateVolume)
+ field_0xcd0.unk40->getAuxiliary().moveVolume(fVar3 * fVar1, 0);
+ else
+ field_0xcd0.unk40->getAuxiliary().moveVolume(0.5f, 0);
+
+ if (mModulatePitch)
+ field_0xcd0.unk40->getAuxiliary().movePitch(
+ getValue2() * sF1_Pitch_Width + (1.0f - sF1_Pitch_Width), 0);
+ else
+ field_0xcd0.unk40->getAuxiliary().movePitch(1.0f, 0);
+
+ if (mModulatePan)
+ field_0xcd0.unk40->getAuxiliary().movePan(0.5f + getValue2() * sF1_Pan_Width / 2, 0);
+ else
+ field_0xcd0.unk40->getAuxiliary().movePan(0.5f, 0);
+
+ if (mModulateDolby)
+ field_0xcd0.unk40->getAuxiliary().moveDolby(fVar3, 0);
+ else
+ field_0xcd0.unk40->getAuxiliary().moveDolby(0.0f, 0);
+ }
+}
+
+f32 Z2F1TestWindow::getValue2() {
+ return field_0x3f8[field_0xbcc];
+}
+
+f32 Z2F1TestWindow::getValue() {
+ return field_0x3f8[field_0xbc8];
+}
+
+Z2AudSettingView::Z2AudSettingView() : JAWWindow("Z2AudSettingView", 400, 300) {}
+
+void Z2AudSettingView::onDraw(JAWGraphContext* param_1) {
+ const Z2AudioCamera* this_00 = Z2GetAudience()->getAudioCamera(0);
+ Z2Audience3DSetting* pfVar2 = Z2GetAudience()->getSetting();
+ int l = 0;
+ param_1->print(0, l++, "<SETTING>");
+ param_1->print(0, l++, "far dist %.3f", pfVar2->field_0x0[0]);
+ param_1->print(0, l++, "near dist %.3f", pfVar2->field_0x3c);
+ param_1->print(0, l++, "frontDolbyZ %.3f", pfVar2->field_0x44);
+ param_1->print(0, l++, "behindDolbyZ %.3f", pfVar2->field_0x48);
+ param_1->print(0, l++, "centerDolby %.3f", pfVar2->field_0x4c);
+ ++l;
+ param_1->print(0, l++, "<AUD CAMERA>");
+ param_1->print(0, l++, "CamDist %.3f", this_00->getCamDist());
+ param_1->print(0, l++, "vel.x %.3f", this_00->getVel()->x);
+ param_1->print(0, l++, "vel.y %.3f", this_00->getVel()->y);
+ param_1->print(0, l++, "vel.z %.3f", this_00->getVel()->z);
+ param_1->print(0, l++, "TargetVolume %.3f", this_00->getTargetVolume());
+ param_1->print(0, l++, "VolCenterZ %.3f", this_00->getVolCenterZ());
+ param_1->print(0, l++, "DolbyCenterZ %.3f", this_00->getDolbyCenterZ());
+ param_1->print(0, l++, "getFovySin %.3f", this_00->getFovySin());
+}
+
+void Z2DSPCheck::onDraw(JAWGraphContext* param_1) {
+ u8* puVar1 = (u8*)JKRHeap::getAltAramStartAdr();
+ DCInvalidateRange(puVar1, 0x20);
+ int l = 0;
+ param_1->print(0, l++, "<DISP INFO>");
+ param_1->print(0, l++, "VARAM_TOP %08X", puVar1);
+ param_1->print(0, l++, "DSP state %04X", *(u16*)(puVar1 + 0));
+ param_1->print(0, l++, "DSP channel %04X", *(u8*)(puVar1 + 2));
+ param_1->print(0, l++, "DSP sub-fr %04X", *(u8*)(puVar1 + 3));
+ param_1->print(0, l++, "DSP cmd wr %04X", *(u16*)(puVar1 + 4));
+ param_1->print(0, l++, "DSP sub-rd %04X", *(u16*)(puVar1 + 6));
+ param_1->print(0, l++, "DSP cmd rest %04X", *(u16*)(puVar1 + 8));
+ l++;
+ param_1->print(0, l++, "<CPU AUDIO THREAD INFO>");
+ param_1->print(0, l++, "DSPSyncCount %2d", JASAudioThread::getDSPSyncCount());
+}
diff --git a/src/Z2AudioLib/Z2FxLineMgr.cpp b/src/Z2AudioLib/Z2FxLineMgr.cpp
index 61d37c6785..a995d5ac68 100644
--- a/src/Z2AudioLib/Z2FxLineMgr.cpp
+++ b/src/Z2AudioLib/Z2FxLineMgr.cpp
@@ -1,9 +1,15 @@
#include "Z2AudioLib/Z2FxLineMgr.h"
-#include "Z2AudioLib/Z2SceneMgr.h"
+#include "JSystem/JAHostIO/JAHUGlobal.h"
+#include "JSystem/JAHostIO/JAHioMessage.h"
+#include "JSystem/JAHostIO/JAHioUtil.h"
#include "JSystem/JAudio2/JASDSPInterface.h"
+#include "JSystem/JHostIO/JORFile.h"
#include "JSystem/JKernel/JKRArchive.h"
+#include "JSystem/JKernel/JKRExpHeap.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JSupport/JSUMemoryStream.h"
+#include "Z2AudioLib/SpotName.h"
+#include "Z2AudioLib/Z2SceneMgr.h"
Z2FxLineMgr::Z2FxLineMgr() : JASGlobalInstance<Z2FxLineMgr>(true) {
mConfig = NULL;
@@ -11,9 +17,9 @@ Z2FxLineMgr::Z2FxLineMgr() : JASGlobalInstance<Z2FxLineMgr>(true) {
mFxDataNum = 0;
mSetUnderWaterFx = false;
- #if DEBUG
+#if DEBUG
mHIOEdit = NULL;
- #endif
+#endif
}
void Z2FxLineMgr::initDataArc(JKRArchive* arc, JKRHeap* heap) {
@@ -35,42 +41,49 @@ void Z2FxLineMgr::initDataArc(JKRArchive* arc, JKRHeap* heap) {
for (u8 i = 0; i < mFxDataNum; i++) {
void* res = arc->getResource(i);
- u32 size = (arc->getResSize(res) + 0x1f) & ~0x1f;
+ u32 size = ALIGN_NEXT(arc->getResSize(res), 32);
JSUMemoryInputStream stream(res, size);
- stream >> mConfig[i].field_0x0;
- stream >> mConfig[i].field_0x1;
- stream >> mConfig[i].field_0x2;
- stream >> mConfig[i].field_0x3;
- stream >> mConfig[i].field_0x4;
- stream >> mConfig[i].field_0x6;
- stream >> mConfig[i].field_0x8[0];
- stream >> mConfig[i].field_0x8[1];
- stream >> mConfig[i].field_0x8[2];
- stream >> mConfig[i].field_0x8[3];
- stream >> mConfig[i].field_0x8[4];
- stream >> mConfig[i].field_0x8[5];
- stream >> mConfig[i].field_0x8[6];
- stream >> mConfig[i].field_0x8[7];
- stream >> mConfig[i].field_0x18;
- stream >> mConfig[i].field_0x19;
- stream >> mConfig[i].field_0x1a;
- stream >> mConfig[i].field_0x1b;
- stream >> mConfig[i].field_0x1c;
- stream >> mConfig[i].field_0x1e;
- stream >> mConfig[i].field_0x20[0];
- stream >> mConfig[i].field_0x20[1];
- stream >> mConfig[i].field_0x20[2];
- stream >> mConfig[i].field_0x20[3];
- stream >> mConfig[i].field_0x20[4];
- stream >> mConfig[i].field_0x20[5];
- stream >> mConfig[i].field_0x20[6];
- stream >> mConfig[i].field_0x20[7];
+ stream >> mConfig[i].unk0.unk0;
+ stream >> mConfig[i].unk0.unk1;
+ stream >> mConfig[i].unk0.unk2;
+ stream >> mConfig[i].unk0.unk3;
+ stream >> mConfig[i].unk0.unk4;
+ stream >> mConfig[i].unk0.unk6;
+ stream >> mConfig[i].unk0.unk8[0];
+ stream >> mConfig[i].unk0.unk8[1];
+ stream >> mConfig[i].unk0.unk8[2];
+ stream >> mConfig[i].unk0.unk8[3];
+ stream >> mConfig[i].unk0.unk8[4];
+ stream >> mConfig[i].unk0.unk8[5];
+ stream >> mConfig[i].unk0.unk8[6];
+ stream >> mConfig[i].unk0.unk8[7];
+ stream >> mConfig[i].unk18.unk0;
+ stream >> mConfig[i].unk18.unk1;
+ stream >> mConfig[i].unk18.unk2;
+ stream >> mConfig[i].unk18.unk3;
+ stream >> mConfig[i].unk18.unk4;
+ stream >> mConfig[i].unk18.unk6;
+ stream >> mConfig[i].unk18.unk8[0];
+ stream >> mConfig[i].unk18.unk8[1];
+ stream >> mConfig[i].unk18.unk8[2];
+ stream >> mConfig[i].unk18.unk8[3];
+ stream >> mConfig[i].unk18.unk8[4];
+ stream >> mConfig[i].unk18.unk8[5];
+ stream >> mConfig[i].unk18.unk8[6];
+ stream >> mConfig[i].unk18.unk8[7];
JKRFree(res);
}
setLineID(-1, false, false);
setLineID(-1, true, false);
+
+#if DEBUG
+ if (mHIOEdit)
+ mHIOEdit->update(false);
+ if (mHIOEdit)
+ mHIOEdit->update(true);
+#endif
}
void Z2FxLineMgr::setLineID(s8 fxID, bool param_1, bool param_2) {
@@ -101,51 +114,60 @@ void Z2FxLineMgr::setLine(Z2FxLineConfig* config, bool param_1, bool param_2) {
}
JASDsp::FxlineConfig_ dsp_config;
- dsp_config.field_0x0 = config->field_0x0;
- dsp_config.field_0x2 = config->field_0x1;
- dsp_config.field_0x6 = config->field_0x2;
+ dsp_config.field_0x0 = config->unk0.unk0;
+ dsp_config.field_0x2 = config->unk0.unk1;
+ dsp_config.field_0x6 = config->unk0.unk2;
if (param_2) {
dsp_config.field_0x4 = 0;
dsp_config.field_0x8 = 0;
} else {
- dsp_config.field_0x4 = config->field_0x4;
- dsp_config.field_0x8 = config->field_0x6;
+ dsp_config.field_0x4 = config->unk0.unk4;
+ dsp_config.field_0x8 = config->unk0.unk6;
}
- dsp_config.field_0xc = config->field_0x3;
- dsp_config.field_0x10[0] = config->field_0x8[0];
- dsp_config.field_0x10[1] = config->field_0x8[1];
- dsp_config.field_0x10[2] = config->field_0x8[2];
- dsp_config.field_0x10[3] = config->field_0x8[3];
- dsp_config.field_0x10[4] = config->field_0x8[4];
- dsp_config.field_0x10[5] = config->field_0x8[5];
- dsp_config.field_0x10[6] = config->field_0x8[6];
- dsp_config.field_0x10[7] = config->field_0x8[7];
+ dsp_config.field_0xc = config->unk0.unk3;
+ dsp_config.field_0x10[0] = config->unk0.unk8[0];
+ dsp_config.field_0x10[1] = config->unk0.unk8[1];
+ dsp_config.field_0x10[2] = config->unk0.unk8[2];
+ dsp_config.field_0x10[3] = config->unk0.unk8[3];
+ dsp_config.field_0x10[4] = config->unk0.unk8[4];
+ dsp_config.field_0x10[5] = config->unk0.unk8[5];
+ dsp_config.field_0x10[6] = config->unk0.unk8[6];
+ dsp_config.field_0x10[7] = config->unk0.unk8[7];
JASDsp::setFXLine(buf1, (s16*)mFxLineBuffer[buf1], &dsp_config);
+#if DEBUG
+ if (mHIOEdit)
+ mHIOEdit->syncSetting(buf1, &dsp_config);
+#endif
- dsp_config.field_0x0 = config->field_0x18;
- dsp_config.field_0x2 = config->field_0x19;
- dsp_config.field_0x6 = config->field_0x1a;
+ dsp_config.field_0x0 = config->unk18.unk0;
+ dsp_config.field_0x2 = config->unk18.unk1;
+ dsp_config.field_0x6 = config->unk18.unk2;
if (param_2) {
dsp_config.field_0x4 = 0;
dsp_config.field_0x8 = 0;
} else {
- dsp_config.field_0x4 = config->field_0x1c;
- dsp_config.field_0x8 = config->field_0x1e;
+ dsp_config.field_0x4 = config->unk18.unk4;
+ dsp_config.field_0x8 = config->unk18.unk6;
}
- dsp_config.field_0xc = config->field_0x1b;
- dsp_config.field_0x10[0] = config->field_0x20[0];
- dsp_config.field_0x10[1] = config->field_0x20[1];
- dsp_config.field_0x10[2] = config->field_0x20[2];
- dsp_config.field_0x10[3] = config->field_0x20[3];
- dsp_config.field_0x10[4] = config->field_0x20[4];
- dsp_config.field_0x10[5] = config->field_0x20[5];
- dsp_config.field_0x10[6] = config->field_0x20[6];
- dsp_config.field_0x10[7] = config->field_0x20[7];
+ dsp_config.field_0xc = config->unk18.unk3;
+ dsp_config.field_0x10[0] = config->unk18.unk8[0];
+ dsp_config.field_0x10[1] = config->unk18.unk8[1];
+ dsp_config.field_0x10[2] = config->unk18.unk8[2];
+ dsp_config.field_0x10[3] = config->unk18.unk8[3];
+ dsp_config.field_0x10[4] = config->unk18.unk8[4];
+ dsp_config.field_0x10[5] = config->unk18.unk8[5];
+ dsp_config.field_0x10[6] = config->unk18.unk8[6];
+ dsp_config.field_0x10[7] = config->unk18.unk8[7];
JASDsp::setFXLine(buf2, (s16*)mFxLineBuffer[buf2], &dsp_config);
+
+#if DEBUG
+ if (mHIOEdit)
+ mHIOEdit->syncSetting(buf2, &dsp_config);
+#endif
}
void Z2FxLineMgr::setFxForceOff(bool param_0) {
@@ -157,6 +179,11 @@ void Z2FxLineMgr::setUnderWaterFx(bool isUnderWaterFx) {
if (isUnderWaterFx) {
OS_REPORT("[Z2FxLineMgr::setUnderWaterFx] → underWaterFx!\n");
setLineID(12, true, false);
+
+#if DEBUG
+ if (mHIOEdit)
+ mHIOEdit->update(true);
+#endif
} else {
OS_REPORT("[Z2FxLineMgr::setUnderWaterFx] → sceneFx!\n");
setSceneFx(Z2GetSceneMgr()->getCurrentSceneNum());
@@ -188,7 +215,7 @@ void Z2FxLineMgr::setSceneFx(s32 sceneNo) {
case Z2SCENE_LAKE_LANTERN_CAVE:
case Z2SCENE_FARON_WOODS_CAVE:
if (Z2GetSceneMgr()->getCurrentRoomNum() == 2) {
- return;
+ break;
}
// fallthrough
case Z2SCENE_FARON_WOODS:
@@ -238,4 +265,298 @@ void Z2FxLineMgr::setSceneFx(s32 sceneNo) {
break;
}
}
+#if DEBUG
+ if (mHIOEdit)
+ mHIOEdit->update(true);
+#endif
+}
+
+Z2FxLineEditNode::Z2FxLineEditNode(JKRExpHeap* heap) : JAHFrameNode("FxLineEdit"), mHeap(heap) {
+ JUT_ASSERT(340, mHeap);
+ unk74 = new (mHeap, 0) LineStereo(false);
+ appendNode(unk74, NULL);
+ unk78 = new (mHeap, 0) LineStereo(true);
+ appendNode(unk78, NULL);
+ Z2GetFxLineMgr()->setHIOEdit(this);
+}
+
+void Z2FxLineEditNode::message(JAHControl& control) {
+ control.makeComment("Line0 : normal_mixing L", 0, 5, 0);
+ control.makeComment("Line1 : normal_mixing R", 0, 5, 0);
+ control.makeComment("Line2 : auto_mixing L", 0, 5, 0);
+ control.makeComment("Line3 : auto_mixing R", 0, 5, 0);
+ control.returnY(1);
+ control.makeComment("-- ミックスモード --", 0, 5, 0);
+ control.indent(1);
+ control.makeComment("DFX_MIX_STOP 非動作", 0, 5, 0);
+ control.makeComment("DFX_MIX_BEFORE 出力前にミキシング(第1反射音もFx効果あり)", 0, 5, 0);
+ control.makeComment("DFX_MIX_AFTER 出力後にミキシング(第1反射音はFx効果なし)", 0, 5, 0);
+ control.indent(-1);
+ control.makeComment("-- センド先 --", 0, 5, 0);
+ control.indent(1);
+ control.makeComment("DFXS_MAIN_L", 0, 5, 0);
+ control.makeComment("DFXS_MAIN_R", 0, 5, 0);
+ control.makeComment("DFXS_FX1", 0, 5, 0);
+ control.makeComment("DFXS_FX2", 0, 5, 0);
+ control.makeComment("DFXS_FX3", 0, 5, 0);
+ control.makeComment("DFXS_FX4", 0, 5, 0);
+ control.makeComment("DFXS_FM", 0, 5, 0);
+ control.makeComment("DFXS_DOLBY", 0, 5, 0);
+ control.makeComment("DFXS_REV", 0, 5, 0);
+ control.makeComment("DFXS_CHORUS", 0, 5, 0);
+ control.makeComment("DFXS_MONO", 0, 5, 0);
+ control.makeComment("DFXS_NONE", 0, 5, 0);
+ control.indent(-1);
+}
+
+void Z2FxLineEditNode::syncSetting(u8 param_1, JASDsp::FxlineConfig_* config) {
+ JUT_ASSERT(387, config);
+ Z2FxLineConfigSingle* line_HIO;
+ switch (param_1) {
+ case 0:
+ line_HIO = &unk74->unk70.unk0;
+ break;
+ case 1:
+ line_HIO = &unk74->unk70.unk18;
+ break;
+ case 2:
+ line_HIO = &unk78->unk70.unk0;
+ break;
+ case 3:
+ line_HIO = &unk78->unk70.unk18;
+ break;
+ }
+ JUT_ASSERT(407, line_HIO);
+ line_HIO->unk0 = config->field_0x0;
+ line_HIO->unk1 = config->field_0x2;
+ line_HIO->unk4 = config->field_0x4;
+ line_HIO->unk2 = config->field_0x6;
+ line_HIO->unk6 = config->field_0x8;
+ line_HIO->unk3 = config->field_0xc;
+ line_HIO->unk8[0] = config->field_0x10[0];
+ line_HIO->unk8[1] = config->field_0x10[1];
+ line_HIO->unk8[2] = config->field_0x10[2];
+ line_HIO->unk8[3] = config->field_0x10[3];
+ line_HIO->unk8[4] = config->field_0x10[4];
+ line_HIO->unk8[5] = config->field_0x10[5];
+ line_HIO->unk8[6] = config->field_0x10[6];
+ line_HIO->unk8[7] = config->field_0x10[7];
+}
+
+void Z2FxLineEditNode::update(bool param_1) {
+ if (param_1)
+ unk78->updateNode();
+ else
+ unk74->updateNode();
+}
+
+static const char* cBfcMask = "bfcファイル(*.bfc)\0*.bfc\0";
+
+void Z2FxLineEditNode::saveLine(LineStereo* node) {
+ JUT_ASSERT(436, node);
+ JORFile file;
+ if (file.open(NULL, 0x6, cBfcMask, NULL, NULL, NULL)) {
+ // clang-format off
+ JUT_ASSERT(441, mHeap!=0);
+ // clang-format on
+ u32 size = ALIGN_PREV(mHeap->getFreeSize(), 0x20);
+ JKRHeap* backup = JKRGetCurrentHeap();
+ JKRSetCurrentHeap(mHeap);
+ void* saveBuffer = JKRAlloc(size, -1);
+ JUT_ASSERT(452, saveBuffer);
+ JKRSetCurrentHeap(backup);
+
+ JSUMemoryOutputStream JStack_15c(saveBuffer, size);
+ JStack_15c << node->unk70.unk0.unk0;
+ JStack_15c << node->unk70.unk0.unk1;
+ JStack_15c << node->unk70.unk0.unk2;
+ JStack_15c << node->unk70.unk0.unk3;
+ JStack_15c << node->unk70.unk0.unk4;
+ JStack_15c << node->unk70.unk0.unk6;
+ JStack_15c << node->unk70.unk0.unk8[0];
+ JStack_15c << node->unk70.unk0.unk8[1];
+ JStack_15c << node->unk70.unk0.unk8[2];
+ JStack_15c << node->unk70.unk0.unk8[3];
+ JStack_15c << node->unk70.unk0.unk8[4];
+ JStack_15c << node->unk70.unk0.unk8[5];
+ JStack_15c << node->unk70.unk0.unk8[6];
+ JStack_15c << node->unk70.unk0.unk8[7];
+ JStack_15c << node->unk70.unk18.unk0;
+ JStack_15c << node->unk70.unk18.unk1;
+ JStack_15c << node->unk70.unk18.unk2;
+ JStack_15c << node->unk70.unk18.unk3;
+ JStack_15c << node->unk70.unk18.unk4;
+ JStack_15c << node->unk70.unk18.unk6;
+ JStack_15c << node->unk70.unk18.unk8[0];
+ JStack_15c << node->unk70.unk18.unk8[1];
+ JStack_15c << node->unk70.unk18.unk8[2];
+ JStack_15c << node->unk70.unk18.unk8[3];
+ JStack_15c << node->unk70.unk18.unk8[4];
+ JStack_15c << node->unk70.unk18.unk8[5];
+ JStack_15c << node->unk70.unk18.unk8[6];
+ JStack_15c << node->unk70.unk18.unk8[7];
+ file.writeData(saveBuffer, JStack_15c.getPosition());
+ file.close();
+ JKRFree(saveBuffer);
+ } else {
+ JAHUDialog_OK("セーブに失敗しました.", "save", NULL);
+ }
+}
+
+void Z2FxLineEditNode::loadLine(LineStereo* node) {
+ JUT_ASSERT(436, node);
+ JORFile file;
+ void* dataArray = NULL;
+ u32 length = 0;
+ if (file.open(NULL, 0x1, cBfcMask, NULL, NULL, NULL)) {
+ length = ALIGN_NEXT(file.getFileSize(), 0x20);
+ dataArray = JKRAllocFromHeap(mHeap, length, 0x20);
+ JUT_ASSERT(517, dataArray);
+ u32 readSize = file.readData(dataArray, 0);
+ file.close();
+ if (readSize < 1) {
+ JAHUDialog_OK("読み込み失敗。JORFile::readData()がfalseを返しました", "読み込み", NULL);
+ JKRFreeToHeap(mHeap, dataArray);
+ }
+ } else {
+ file.close();
+ JAHUDialog_OK(JAHioUtil::getString("%s を読み込めません", file.getFilename()),
+ "データを読み込む", NULL);
+ }
+
+ JSUMemoryInputStream stream(dataArray, length);
+
+ stream >> node->unk70.unk0.unk0;
+ stream >> node->unk70.unk0.unk1;
+ stream >> node->unk70.unk0.unk2;
+ stream >> node->unk70.unk0.unk3;
+ stream >> node->unk70.unk0.unk4;
+ stream >> node->unk70.unk0.unk6;
+ stream >> node->unk70.unk0.unk8[0];
+ stream >> node->unk70.unk0.unk8[1];
+ stream >> node->unk70.unk0.unk8[2];
+ stream >> node->unk70.unk0.unk8[3];
+ stream >> node->unk70.unk0.unk8[4];
+ stream >> node->unk70.unk0.unk8[5];
+ stream >> node->unk70.unk0.unk8[6];
+ stream >> node->unk70.unk0.unk8[7];
+ stream >> node->unk70.unk18.unk0;
+ stream >> node->unk70.unk18.unk1;
+ stream >> node->unk70.unk18.unk2;
+ stream >> node->unk70.unk18.unk3;
+ stream >> node->unk70.unk18.unk4;
+ stream >> node->unk70.unk18.unk6;
+ stream >> node->unk70.unk18.unk8[0];
+ stream >> node->unk70.unk18.unk8[1];
+ stream >> node->unk70.unk18.unk8[2];
+ stream >> node->unk70.unk18.unk8[3];
+ stream >> node->unk70.unk18.unk8[4];
+ stream >> node->unk70.unk18.unk8[5];
+ stream >> node->unk70.unk18.unk8[6];
+ stream >> node->unk70.unk18.unk8[7];
+
+ JKRFree(dataArray);
+ node->updateNode();
+}
+
+void Z2FxLineEditNode::LineStereo::message(JAHControl& control) {
+ control.makeButton("reset", 0, 3, 0);
+ control.makeButton("save file", 2, 3, 0);
+ control.makeButton("load file", 3, 3, 0);
+ control.returnY(1);
+ control.makeComment("----- Line L -----", 0, 5, 0);
+ control.indent(1);
+ lineEditSingle(&unk70.unk0, control);
+ control.indent(-1);
+ control.returnY(1);
+ control.makeComment("----- Line R -----", 0, 5, 0);
+ control.indent(1);
+ lineEditSingle(&unk70.unk18, control);
+ control.indent(-1);
+}
+
+void Z2FxLineEditNode::LineStereo::propertyEvent(JAH_P_Event param_1, u32 param_2) {
+ if (param_1 == JAH_P_EVENT0)
+ return;
+
+ Z2FxLineEditNode* parent = (Z2FxLineEditNode*)getParent();
+ switch (param_2) {
+ case 0:
+ Z2GetFxLineMgr()->setLineID(-1, mIsDolby, false);
+ break;
+
+ case 2:
+ parent->saveLine(this);
+ break;
+
+ case 3:
+ parent->loadLine(this);
+ break;
+ }
+
+ Z2GetFxLineMgr()->setLine(&unk70, mIsDolby, false);
+}
+
+void Z2FxLineEditNode::LineStereo::lineEditSingle(Z2FxLineConfigSingle* param_1,
+ JAHControl& param_2) {
+ if (param_1 == NULL)
+ return;
+
+ param_2.startComboBox("mixmode", &param_1->unk0, 3, 0);
+ param_2.makeComboBoxItem("DFX_MIX_STOP", (u8)0);
+ param_2.makeComboBoxItem("DFX_MIX_BEFORE", (u8)1);
+ param_2.makeComboBoxItem("DFX_MIX_AFTER", (u8)2);
+ param_2.endComboBox();
+
+ param_2.returnY(1);
+
+ param_2.startComboBox("send1", &param_1->unk1, 3, 0);
+ param_2.makeComboBoxItem("DFXS_MAIN_L", (u8)0);
+ param_2.makeComboBoxItem("DFXS_MAIN_R", (u8)1);
+ param_2.makeComboBoxItem("DFXS_FX1", (u8)2);
+ param_2.makeComboBoxItem("DFXS_FX2", (u8)3);
+ param_2.makeComboBoxItem("DFXS_FX3", (u8)4);
+ param_2.makeComboBoxItem("DFXS_FX4", (u8)5);
+ param_2.makeComboBoxItem("DFXS_FM", (u8)6);
+ param_2.makeComboBoxItem("DFXS_DOLBY", (u8)7);
+ param_2.makeComboBoxItem("DFXS_REV", (u8)8);
+ param_2.makeComboBoxItem("DFXS_CHORUS", (u8)9);
+ param_2.makeComboBoxItem("DFXS_MONO", (u8)10);
+ param_2.makeComboBoxItem("DFXS_NONE", (u8)11);
+ param_2.endComboBox();
+
+ param_2.returnY(1);
+ param_2.makeSlider("mix1", &param_1->unk4, 0, 0x7fff, 0);
+
+ param_2.startComboBox("send2", &param_1->unk2, 3, 0);
+ param_2.makeComboBoxItem("DFXS_MAIN_L", (u8)0);
+ param_2.makeComboBoxItem("DFXS_MAIN_R", (u8)1);
+ param_2.makeComboBoxItem("DFXS_FX1", (u8)2);
+ param_2.makeComboBoxItem("DFXS_FX2", (u8)3);
+ param_2.makeComboBoxItem("DFXS_FX3", (u8)4);
+ param_2.makeComboBoxItem("DFXS_FX4", (u8)5);
+ param_2.makeComboBoxItem("DFXS_FM", (u8)6);
+ param_2.makeComboBoxItem("DFXS_DOLBY", (u8)7);
+ param_2.makeComboBoxItem("DFXS_REV", (u8)8);
+ param_2.makeComboBoxItem("DFXS_CHORUS", (u8)9);
+ param_2.makeComboBoxItem("DFXS_MONO", (u8)10);
+ param_2.makeComboBoxItem("DFXS_NONE", (u8)11);
+ param_2.endComboBox();
+
+ param_2.returnY(1);
+ param_2.makeSlider("mix2", &param_1->unk6, 0, 0x7fff, 0);
+
+ if (mIsDolby)
+ param_2.makeSlider("feedback_frame", &param_1->unk3, 0, 120, 0);
+ else
+ param_2.makeSlider("feedback_frame", &param_1->unk3, 0, 64, 0);
+
+ param_2.makeSlider("feedback_filter 0", &param_1->unk8[0], -0x7fff, 0x7fff, 0);
+ param_2.makeSlider("feedback_filter 1", &param_1->unk8[1], -0x7fff, 0x7fff, 0);
+ param_2.makeSlider("feedback_filter 2", &param_1->unk8[2], -0x7fff, 0x7fff, 0);
+ param_2.makeSlider("feedback_filter 3", &param_1->unk8[3], -0x7fff, 0x7fff, 0);
+ param_2.makeSlider("feedback_filter 4", &param_1->unk8[4], -0x7fff, 0x7fff, 0);
+ param_2.makeSlider("feedback_filter 5", &param_1->unk8[5], -0x7fff, 0x7fff, 0);
+ param_2.makeSlider("feedback_filter 6", &param_1->unk8[6], -0x7fff, 0x7fff, 0);
+ param_2.makeSlider("feedback_filter 7", &param_1->unk8[7], -0x7fff, 0x7fff, 0);
}
diff --git a/src/Z2AudioLib/Z2SceneMgr.cpp b/src/Z2AudioLib/Z2SceneMgr.cpp
index 9e3bf2c91c..13a53790db 100644
--- a/src/Z2AudioLib/Z2SceneMgr.cpp
+++ b/src/Z2AudioLib/Z2SceneMgr.cpp
@@ -12,6 +12,7 @@
#include "Z2AudioLib/Z2StatusMgr.h"
#include "d/d_com_inf_game.h"
#include <cstring>
+#include "Z2AudioLib/SpotName.h"
Z2SceneMgr::Z2SceneMgr() : JASGlobalInstance<Z2SceneMgr>(true) {
sceneNum = -1;
@@ -46,90 +47,6 @@ void Z2SceneMgr::setInDarkness(bool inDarkness) {
}
}
-static char* sSpotName[81] = {
- "F_SP00",
- "F_SP103",
- "R_SP01",
- "F_SP104",
- "R_SP107",
- "F_SP108",
- "R_SP108",
- "F_SP117",
- "F_SP109",
- "R_SP109",
- "R_SP209",
- "F_SP110",
- "R_SP110",
- "F_SP111",
- "F_SP128",
- "R_SP128",
- "F_SP115",
- "F_SP112",
- "F_SP126",
- "F_SP127",
- "R_SP127",
- "F_SP113",
- "F_SP116",
- "R_SP116",
- "R_SP160",
- "R_SP161",
- "F_SP114",
- "F_SP118",
- "F_SP124",
- "F_SP125",
- "F_SP121",
- "F_SP122",
- "F_SP123",
- "F_SP200",
- "F_SP102",
- "",
- "R_SP300",
- "R_SP301",
- "T_ENEMY",
- "D_MN54",
- "D_MN05",
- "D_MN05B",
- "D_MN05A",
- "D_MN04",
- "D_MN04B",
- "D_MN04A",
- "D_MN01",
- "D_MN01B",
- "D_MN01A",
- "D_MN10",
- "D_MN10B",
- "D_MN10A",
- "D_MN11",
- "D_MN11B",
- "D_MN11A",
- "D_MN06",
- "D_MN06B",
- "D_MN06A",
- "D_MN07",
- "D_MN07B",
- "D_MN07A",
- "D_MN08",
- "D_MN08B",
- "D_MN08C",
- "D_MN08A",
- "D_MN08D",
- "D_MN09",
- "D_MN09A",
- "D_MN09B",
- "D_MN09C",
- "D_SB00",
- "D_SB01",
- "D_SB02",
- "D_SB03",
- "D_SB04",
- "D_SB05",
- "D_SB06",
- "D_SB07",
- "D_SB08",
- "D_SB09",
- "D_SB10",
-};
-
void Z2SceneMgr::setSceneExist(bool isSceneExist) {
sceneExist = isSceneExist;
timer = 0;
diff --git a/src/Z2AudioLib/Z2SeqMgr.cpp b/src/Z2AudioLib/Z2SeqMgr.cpp
index a9cad68b5e..16a9279cce 100644
--- a/src/Z2AudioLib/Z2SeqMgr.cpp
+++ b/src/Z2AudioLib/Z2SeqMgr.cpp
@@ -8,90 +8,7 @@
#include "Z2AudioLib/Z2Calc.h"
#include "JSystem/JAudio2/JAISoundChild.h"
#include "JSystem/JAudio2/JAISeq.h"
-
-static const char* sSpotName[] = {
- "F_SP00",
- "F_SP103",
- "R_SP01",
- "F_SP104",
- "R_SP107",
- "F_SP108",
- "R_SP108",
- "F_SP117",
- "F_SP109",
- "R_SP109",
- "R_SP209",
- "F_SP110",
- "R_SP110",
- "F_SP111",
- "F_SP128",
- "R_SP128",
- "F_SP115",
- "F_SP112",
- "F_SP126",
- "F_SP127",
- "R_SP127",
- "F_SP113",
- "F_SP116",
- "R_SP116",
- "R_SP160",
- "R_SP161",
- "F_SP114",
- "F_SP118",
- "F_SP124",
- "F_SP125",
- "F_SP121",
- "F_SP122",
- "F_SP123",
- "F_SP200",
- "F_SP102",
- "",
- "R_SP300",
- "R_SP301",
- "T_ENEMY",
- "D_MN54",
- "D_MN05",
- "D_MN05B",
- "D_MN05A",
- "D_MN04",
- "D_MN04B",
- "D_MN04A",
- "D_MN01",
- "D_MN01B",
- "D_MN01A",
- "D_MN10",
- "D_MN10B",
- "D_MN10A",
- "D_MN11",
- "D_MN11B",
- "D_MN11A",
- "D_MN06",
- "D_MN06B",
- "D_MN06A",
- "D_MN07",
- "D_MN07B",
- "D_MN07A",
- "D_MN08",
- "D_MN08B",
- "D_MN08C",
- "D_MN08A",
- "D_MN08D",
- "D_MN09",
- "D_MN09A",
- "D_MN09B",
- "D_MN09C",
- "D_SB00",
- "D_SB01",
- "D_SB02",
- "D_SB03",
- "D_SB04",
- "D_SB05",
- "D_SB06",
- "D_SB07",
- "D_SB08",
- "D_SB09",
- "D_SB10",
-};
+#include "Z2AudioLib/SpotName.h"
Z2SeqMgr::Z2SeqMgr() : JASGlobalInstance<Z2SeqMgr>(true) {
mMainBgmMaster.forceIn();
diff --git a/src/Z2AudioLib/Z2StatusMgr.cpp b/src/Z2AudioLib/Z2StatusMgr.cpp
index fd907b48c8..a044b552b6 100644
--- a/src/Z2AudioLib/Z2StatusMgr.cpp
+++ b/src/Z2AudioLib/Z2StatusMgr.cpp
@@ -3,90 +3,7 @@
#include "d/d_com_inf_game.h"
#include "d/d_s_play.h"
#include <cstring>
-
-static const char* sSpotName[] = {
- "F_SP00",
- "F_SP103",
- "R_SP01",
- "F_SP104",
- "R_SP107",
- "F_SP108",
- "R_SP108",
- "F_SP117",
- "F_SP109",
- "R_SP109",
- "R_SP209",
- "F_SP110",
- "R_SP110",
- "F_SP111",
- "F_SP128",
- "R_SP128",
- "F_SP115",
- "F_SP112",
- "F_SP126",
- "F_SP127",
- "R_SP127",
- "F_SP113",
- "F_SP116",
- "R_SP116",
- "R_SP160",
- "R_SP161",
- "F_SP114",
- "F_SP118",
- "F_SP124",
- "F_SP125",
- "F_SP121",
- "F_SP122",
- "F_SP123",
- "F_SP200",
- "F_SP102",
- "",
- "R_SP300",
- "R_SP301",
- "T_ENEMY",
- "D_MN54",
- "D_MN05",
- "D_MN05B",
- "D_MN05A",
- "D_MN04",
- "D_MN04B",
- "D_MN04A",
- "D_MN01",
- "D_MN01B",
- "D_MN01A",
- "D_MN10",
- "D_MN10B",
- "D_MN10A",
- "D_MN11",
- "D_MN11B",
- "D_MN11A",
- "D_MN06",
- "D_MN06B",
- "D_MN06A",
- "D_MN07",
- "D_MN07B",
- "D_MN07A",
- "D_MN08",
- "D_MN08B",
- "D_MN08C",
- "D_MN08A",
- "D_MN08D",
- "D_MN09",
- "D_MN09A",
- "D_MN09B",
- "D_MN09C",
- "D_SB00",
- "D_SB01",
- "D_SB02",
- "D_SB03",
- "D_SB04",
- "D_SB05",
- "D_SB06",
- "D_SB07",
- "D_SB08",
- "D_SB09",
- "D_SB10",
-};
+#include "Z2AudioLib/SpotName.h"
Z2StatusMgr::Z2StatusMgr() : JASGlobalInstance(true) {
mHour = 0;
diff --git a/src/Z2AudioLib/Z2WolfHowlMgr.cpp b/src/Z2AudioLib/Z2WolfHowlMgr.cpp
index 5f34fab19c..d76bd9b82f 100644
--- a/src/Z2AudioLib/Z2WolfHowlMgr.cpp
+++ b/src/Z2AudioLib/Z2WolfHowlMgr.cpp
@@ -6,6 +6,7 @@
#include "Z2AudioLib/Z2SoundMgr.h"
#include "Z2AudioLib/Z2Audience.h"
#include "d/d_demo.h"
+#include "Z2AudioLib/SpotName.h"
static f32 cPitchDown = 0.8909f;