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* getVel() const { return &mVel; } + f32 getTargetVolume() const { return mTargetVolume; } + f32 getCamDist() const { return mCamDist; } + + /* 0x00 */ JGeometry::TPosition3f32 field_0x0; /* 0x30 */ JGeometry::TVec3 mVel; /* 0x3C */ JGeometry::TVec3 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 { 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(); void initDataArc(JKRArchive* arc, JKRHeap* heap); @@ -39,6 +96,8 @@ struct Z2FxLineMgr : public JASGlobalInstance { 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 { 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_ 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 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 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* getFrameNodeLink() { return &mFrameNodeLink; } /* 0x44 */ JSUTree 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 +template 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 +#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* getVirTree() { return &mTree; } + static u32 getVirNodeNum() { return smVirNodeNum; } + + static u32 smVirNodeNum; /* 0x04 */ JSUTree 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 #include 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 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 + 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 + 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 + 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 + 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 + 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 #include 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(bool param_0) : JASGlobalInstance(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_ 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 #endif #include -#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 +#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(¶m_0, 4); - } + s32 read(u32& param_0) { return read(¶m_0, 4); } // TODO: return value probably wrong s32 read(void*, s32); @@ -108,9 +102,9 @@ public: // move? /** -* @ingroup jsystem-jsupport -* -*/ + * @ingroup jsystem-jsupport + * + */ template 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 + +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 + +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::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::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::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 +#include +#include +#include + +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::getIns()->getNodeSysType() == 0) + generateTempChildren(context); + else + generateRealChildren(context); +} + +void JAHFrameNode::callAllVirtualMessages(JAHControl& control) { + if (mTree.getNumChildren() == 0) + return; + + for (JSUTreeIterator 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 iter = mTree.getFirstChild(); iter != mTree.getEndChild(); + ++iter) + { + iter->listenVirtualPropertyEvent(JAH_P_EVENT0, (u32)event->id); + } + + JAHioNode::listenPropertyEvent(event); + + for (JSUTreeIterator 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 iter = mTree.getFirstChild(); + iter != mTree.getEndChild(); ++iter) + iter->listenVirtualNodeEvent(JAH_N_EVENT0); + } else if (event->field_0x0 == 4) { + for (JSUTreeIterator iter = mTree.getFirstChild(); + iter != mTree.getEndChild(); ++iter) + iter->listenVirtualNodeEvent(JAH_N_EVENT1); + } else if (event->field_0x0 == 5) { + for (JSUTreeIterator 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 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 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 +#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::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::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::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::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 + +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::getInstance(); + if (starter) { + starter->startSound(unk58, &unk40, 0); + } +} + +void JAHUSeBox::message(JAHControl& control) { + if (!unk84 && JASGlobalInstance::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::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 +#include +#include + +u32 JAHVirtualNode::smVirNodeNum; + +void JAHVirtualNode::virtualMessage(JAHControl& control) { + message(control); + callAllVirtualMessages(control); +} + +void JAHVirtualNode::callAllVirtualMessages(JAHControl& control) { + if (mTree.getNumChildren() == 0) + return; + + for (JSUTreeIterator iter = mTree.getFirstChild(); iter != mTree.getEndChild(); + ++iter) + { + iter->message(control); + } +} + +JAHioNode* JAHVirtualNode::getMaster() { + JSUTree* it = mTree.getParent(); + while (it->getParent()) + it = it->getParent(); + return (JAHioNode*)it->getObject(); +} + +void JAHVirtualNode::framework() { + onFrame(); + for (JSUTreeIterator iter = getVirTree()->getFirstChild(); + iter != getVirTree()->getEndChild(); ++iter) + { + iter->framework(); + } +} + +void JAHVirtualNode::onFrame() {} + +void JAHVirtualNode::currentFramework() { + onCurrentNodeFrame(); + for (JSUTreeIterator 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 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 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::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 #include "JSystem/JAHostIO/JAHioMessage.h" #include "JSystem/JAHostIO/JAHioMgr.h" +#include "JSystem/JAHostIO/JAHioNode.h" #include "JSystem/JHostIO/JORServer.h" -#include + +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 +#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 #include -#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 +#include "global.h" #include #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 #include #include +#include "global.h" #include 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 #include +#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(true) { } +Z2DebugSys::Z2DebugSys() : JASGlobalInstance(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++, ""); + 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++, ""); + 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++, ""); + 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++, ""); + 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(true) { mConfig = NULL; @@ -11,9 +17,9 @@ Z2FxLineMgr::Z2FxLineMgr() : JASGlobalInstance(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", ¶m_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", ¶m_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", ¶m_1->unk4, 0, 0x7fff, 0); + + param_2.startComboBox("send2", ¶m_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", ¶m_1->unk6, 0, 0x7fff, 0); + + if (mIsDolby) + param_2.makeSlider("feedback_frame", ¶m_1->unk3, 0, 120, 0); + else + param_2.makeSlider("feedback_frame", ¶m_1->unk3, 0, 64, 0); + + param_2.makeSlider("feedback_filter 0", ¶m_1->unk8[0], -0x7fff, 0x7fff, 0); + param_2.makeSlider("feedback_filter 1", ¶m_1->unk8[1], -0x7fff, 0x7fff, 0); + param_2.makeSlider("feedback_filter 2", ¶m_1->unk8[2], -0x7fff, 0x7fff, 0); + param_2.makeSlider("feedback_filter 3", ¶m_1->unk8[3], -0x7fff, 0x7fff, 0); + param_2.makeSlider("feedback_filter 4", ¶m_1->unk8[4], -0x7fff, 0x7fff, 0); + param_2.makeSlider("feedback_filter 5", ¶m_1->unk8[5], -0x7fff, 0x7fff, 0); + param_2.makeSlider("feedback_filter 6", ¶m_1->unk8[6], -0x7fff, 0x7fff, 0); + param_2.makeSlider("feedback_filter 7", ¶m_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 +#include "Z2AudioLib/SpotName.h" Z2SceneMgr::Z2SceneMgr() : JASGlobalInstance(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(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 - -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;