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..40ee1e8b06 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 @@ -64708,7 +64708,7 @@ sBusTransactionMax__14J3DUMemRequest = .sbss:0x8074CBA8; // type:object size:0x4 soOutput_none___Q27JStudio14TVariableValue = .sbss:0x8074CBB0; // type:object size:0x4 scope:global hash:0x0D4DD37E dhash:0xBE028BCF lbl_8074CBB8 = .sbss:0x8074CBB8; // type:object size:0x1 data:byte hash:0xD1337E25 dhash:0xE17C2A90 sInstance__38JASGlobalInstance<17JAUSoundNameTable> = .sbss:0x8074CBBC; // type:object size:0x4 scope:global data:4byte hash:0xC9602A2E dhash:0x8CFDFF83 -lbl_8074CBC0 = .sbss:0x8074CBC0; // type:object size:0x1 data:byte hash:0xD7A40583 dhash:0x59B8D7B7 +@GUARD@adaptor_do_prepare__Q217JStudio_JParticle17TAdaptor_particleFv@aoData = .sbss:0x8074CBC0; // type:object size:0x1 data:byte hash:0xD7A40583 dhash:0x59B8D7B7 oColor_default_frame___Q218JStudioToolLibrary15TScroll_drawBar = .sbss:0x8074CBC8; // type:object size:0x4 scope:global hash:0x21F3055A dhash:0xF4CA98D4 oColor_default_background___Q218JStudioToolLibrary15TScroll_drawBar = .sbss:0x8074CBCC; // type:object size:0x4 scope:global hash:0x7BF46BA9 dhash:0x05043C07 oColor_default_foreground___Q218JStudioToolLibrary15TScroll_drawBar = .sbss:0x8074CBD0; // type:object size:0x4 scope:global hash:0xE3363F1C dhash:0xF78E1792 @@ -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/files.cmake b/files.cmake index d57eaec490..1302f3c71f 100644 --- a/files.cmake +++ b/files.cmake @@ -547,8 +547,17 @@ set(JSYSTEM_DEBUG_FILES libs/JSystem/src/JGadget/binary.cpp libs/JSystem/src/JGadget/define.cpp libs/JSystem/src/JGadget/linklist.cpp + libs/JSystem/src/JGadget/search.cpp libs/JSystem/src/JGadget/std-vector.cpp + libs/JSystem/src/JAHostIO/JAHFrameNode.cpp + libs/JSystem/src/JAHostIO/JAHioMessage.cpp + libs/JSystem/src/JAHostIO/JAHioMgr.cpp + libs/JSystem/src/JAHostIO/JAHioNode.cpp + libs/JSystem/src/JAHostIO/JAHioUtil.cpp + libs/JSystem/src/JAHostIO/JAHVirtualNode.cpp + libs/JSystem/src/JHostIO/JORFile.cpp libs/JSystem/src/JHostIO/JORHostInfo.cpp + libs/JSystem/src/JHostIO/JORMessageBox.cpp libs/JSystem/src/JHostIO/JORServer.cpp libs/JSystem/src/JHostIO/JHIhioASync.cpp libs/JSystem/src/JHostIO/JHIRMcc.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..694086a469 100644 --- a/include/Z2AudioLib/Z2DebugSys.h +++ b/include/Z2AudioLib/Z2DebugSys.h @@ -12,9 +12,8 @@ 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[0F] */ virtual void propertyEvent(JAH_P_Event, uintptr_t); /* 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..607398d15f 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, uintptr_t); + 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 3501627dff..e6291778d4 100644 --- a/include/global.h +++ b/include/global.h @@ -176,6 +176,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"); @@ -187,6 +188,7 @@ static const float INF = 2000000000.0f; } #define MULTI_CHAR(x) MultiCharLiteral(#x) #endif +#endif // potential fakematch? #if DEBUG @@ -196,9 +198,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 d2b0e6924a..43f34ab38b 100644 --- a/libs/JSystem/include/JSystem/JAHostIO/JAHPubDefine.h +++ b/libs/JSystem/include/JSystem/JAHostIO/JAHPubDefine.h @@ -4,18 +4,22 @@ #include "JSystem/JKernel/JKRHeap.h" #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 = JKR_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..53424daabc 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, uintptr_t); + 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..eee0ed94c0 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 propertyEvent(JAH_P_Event, uintptr_t); virtual void nodeEvent(JAH_N_Event); + virtual void virtualMessage(JAHControl&); + + void callAllVirtualMessages(JAHControl&); + JAHioNode* getMaster(); + void framework(); + void currentFramework(); + void listenVirtualPropertyEvent(JAH_P_Event, uintptr_t); + 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/JAHostIO/JAHioNode.h b/libs/JSystem/include/JSystem/JAHostIO/JAHioNode.h index c48861eee9..70fb1d07b5 100644 --- a/libs/JSystem/include/JSystem/JAHostIO/JAHioNode.h +++ b/libs/JSystem/include/JSystem/JAHostIO/JAHioNode.h @@ -31,7 +31,7 @@ public: /* vt[0C] */ virtual s32 getNodeType() { return 0; } /* vt[0D] */ virtual u32 getNodeKind() const; /* vt[0E] */ virtual u32 getNodeIcon() const { return 0; } - /* vt[0F] */ virtual void propertyEvent(JAH_P_Event, u32) {} + /* vt[0F] */ virtual void propertyEvent(JAH_P_Event, uintptr_t) {} /* vt[10] */ virtual void nodeEvent(JAH_N_Event) {} void updateNode(); void setNodeName(const char*); 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 0226a917f7..b7eaee0ffe 100644 --- a/libs/JSystem/include/JSystem/JAudio2/JAUSoundTable.h +++ b/libs/JSystem/include/JSystem/JAudio2/JAUSoundTable.h @@ -193,7 +193,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 f80e34e7e8..b3fd794500 100644 --- a/libs/JSystem/include/JSystem/JHostIO/JORMContext.h +++ b/libs/JSystem/include/JSystem/JHostIO/JORMContext.h @@ -8,7 +8,7 @@ #endif #include #include -#include "JSystem/JHostIO/JORReflexible.h" +#include "JSystem/JHostIO/JOREvent.h" #include "JSystem/JSupport/JSUMemoryStream.h" #define MCTX_MSG_RESET 0 @@ -195,9 +195,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, @@ -222,6 +220,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); @@ -271,6 +273,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) @@ -280,6 +283,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 === */ @@ -314,8 +327,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 6d65137e22..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,14 +24,8 @@ class JORReflexible : public JOREventListener { public: #if DEBUG JORReflexible() {} -#if TARGET_PC - static JORServer* getJORServer() { - OSPanic(__FILE__, __LINE__, "getJORServer is unimplemented"); - } -#else - static JORServer* getJORServer(); -#endif - + 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/JKRHeap.h b/libs/JSystem/include/JSystem/JKernel/JKRHeap.h index 419d49301d..d988f09d74 100644 --- a/libs/JSystem/include/JSystem/JKernel/JKRHeap.h +++ b/libs/JSystem/include/JSystem/JKernel/JKRHeap.h @@ -81,7 +81,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/JStudio/JStudio_JParticle/control.h b/libs/JSystem/include/JSystem/JStudio/JStudio_JParticle/control.h index 4dd6433d08..044b865f1b 100644 --- a/libs/JSystem/include/JSystem/JStudio/JStudio_JParticle/control.h +++ b/libs/JSystem/include/JSystem/JStudio/JStudio_JParticle/control.h @@ -27,7 +27,7 @@ struct TCreateObject : public JStudio::TCreateObject { createObject_JPA_PARTICLE_(JStudio::stb::data::TParse_TBlock_object const&, JStudio_JParticle::TCreateObject*); - const JStage::TSystem* get_pJSGSystem_() { return pJSGSystem_; } + const JStage::TSystem* get_pJSGSystem_() const { return pJSGSystem_; } bool isPermit_onExit_notEnd() { return mPermit_onExit_notEnd; } /* 0x0C */ JPAEmitterManager* pJPAEmitterManager_; @@ -35,107 +35,6 @@ struct TCreateObject : public JStudio::TCreateObject { /* 0x14 */ bool mPermit_onExit_notEnd; }; -struct TAdaptor_particle : public JStudio::TAdaptor_particle { - typedef JStudio::TObject_particle ObjectType; - - struct TJPACallback_emitter_ : public JPAEmitterCallBack { - TJPACallback_emitter_(TAdaptor_particle* param_1) { - pThis_ = param_1; - pOld = NULL; - JUT_ASSERT(113, pThis_!=NULL); - } - virtual void execute(JPABaseEmitter*); - virtual void executeAfter(JPABaseEmitter*); - virtual void draw(JPABaseEmitter*); - virtual void drawAfter(JPABaseEmitter*); - - JPAEmitterCallBack* getOld() { return pOld; } - void setOld(JPAEmitterCallBack* cb) { pOld = cb; } - - /* 0x4 */ TAdaptor_particle* pThis_; - /* 0x8 */ JPAEmitterCallBack* pOld; - }; - - struct TJPAEmitter_stopDrawParticle_ { - TJPAEmitter_stopDrawParticle_(JPABaseEmitter* emitter) : pJPAEmitter_(emitter) {} - ~TJPAEmitter_stopDrawParticle_() { - if (pJPAEmitter_ != NULL) { - pJPAEmitter_->stopDrawParticle(); - } - } - void set(JPABaseEmitter* emitter) { pJPAEmitter_ = emitter; } - /* 0x0 */ JPABaseEmitter* pJPAEmitter_; - }; - - TAdaptor_particle(JStudio_JParticle::TCreateObject*); - void beginParticle_fadeIn_(); - void endParticle_fadeOut_(u32); - - virtual ~TAdaptor_particle(); - virtual void adaptor_do_prepare(); - virtual void adaptor_do_end(); - virtual void adaptor_do_update(u32); - virtual void adaptor_do_PARTICLE(JStudio::data::TEOperationData, void const*, u32); - virtual void adaptor_do_BEGIN(JStudio::data::TEOperationData, void const*, u32); - virtual void adaptor_do_BEGIN_FADE_IN(JStudio::data::TEOperationData, void const*, - u32); - virtual void adaptor_do_END(JStudio::data::TEOperationData, void const*, u32); - virtual void adaptor_do_END_FADE_OUT(JStudio::data::TEOperationData, void const*, - u32); - virtual void adaptor_do_PARENT(JStudio::data::TEOperationData, void const*, u32); - virtual void adaptor_do_PARENT_NODE(JStudio::data::TEOperationData, void const*, - u32); - virtual void adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData, void const*, - u32); - virtual void adaptor_do_PARENT_FUNCTION(JStudio::data::TEOperationData, void const*, - u32); - virtual void adaptor_do_REPEAT(JStudio::data::TEOperationData, void const*, u32); - virtual void adaptor_do_ON_EXIT_NOT_END(JStudio::data::TEOperationData, void const*, - u32); - - static bool state_isFade_(u8 param_1) { - return param_1 == 1 || param_1 == 3; - } - - bool state_isFade_() { - return state_isFade_(field_0x1b8); - } - - void beginParticle_fadeIn_(u32 param_1) { - field_0x1c8 = param_1; - beginParticle_fadeIn_(); - } - - void beginParticle_() { - beginParticle_fadeIn_(0); - } - - void endParticle_() { - if (pJPAEmitter_ != NULL) { - pJPAEmitter_->becomeInvalidEmitter(); - } - } - - void set_bPermit_onExit_notEnd_(bool param_1) { field_0x1b4 = param_1; } - - /* 0x1A0 */ TCreateObject* pCreateObject_; - /* 0x1A4 */ JPABaseEmitter* pJPAEmitter_; - /* 0x1A8 */ TJPACallback_emitter_ field_0x1a8; - /* 0x1B4 */ u8 field_0x1b4; - /* 0x1B5 */ u8 field_0x1b5; - /* 0x1B6 */ u8 field_0x1b6; - /* 0x1B7 */ u8 field_0x1b7; - /* 0x1B8 */ u8 field_0x1b8; - /* 0x1BC */ u32 field_0x1bc; - /* 0x1C0 */ u32 u32FadeTime_end; - /* 0x1C4 */ u32 field_0x1c4; - /* 0x1C8 */ u32 field_0x1c8; - /* 0x1CC */ u32 field_0x1cc; - /* 0x1D0 */ JStage::TObject* field_0x1d0; - /* 0x1D4 */ u32 field_0x1d4; - /* 0x1D8 */ u8 field_0x1d8; -}; - }; // namespace JStudio_JParticle #endif /* JSTUDIO_JPARTICLE_CONTROL_H */ diff --git a/libs/JSystem/include/JSystem/JStudio/JStudio_JParticle/object-particle.h b/libs/JSystem/include/JSystem/JStudio/JStudio_JParticle/object-particle.h index c887a183ee..3dba0e0a31 100644 --- a/libs/JSystem/include/JSystem/JStudio/JStudio_JParticle/object-particle.h +++ b/libs/JSystem/include/JSystem/JStudio/JStudio_JParticle/object-particle.h @@ -3,4 +3,100 @@ #include "JSystem/JStudio/JStudio_JParticle/control.h" +namespace JStudio_JParticle { + +struct TAdaptor_particle : public JStudio::TAdaptor_particle { + typedef JStudio::TObject_particle ObjectType; + + struct TJPACallback_emitter_ : public JPAEmitterCallBack { + TJPACallback_emitter_(TAdaptor_particle* param_1) { + pThis_ = param_1; + pOld = NULL; + JUT_ASSERT(113, pThis_!=NULL); + } + virtual void execute(JPABaseEmitter*); + virtual void executeAfter(JPABaseEmitter*); + virtual void draw(JPABaseEmitter*); + virtual void drawAfter(JPABaseEmitter*); + + JPAEmitterCallBack* getOld() const { return pOld; } + void setOld(JPAEmitterCallBack* cb) { pOld = cb; } + + /* 0x4 */ TAdaptor_particle* pThis_; + /* 0x8 */ JPAEmitterCallBack* pOld; + }; + + TAdaptor_particle(JStudio_JParticle::TCreateObject*); + void beginParticle_fadeIn_(); + void endParticle_fadeOut_(u32); + + virtual ~TAdaptor_particle(); + virtual void adaptor_do_prepare(); + virtual void adaptor_do_end(); + virtual void adaptor_do_update(u32); + virtual void adaptor_do_PARTICLE(JStudio::data::TEOperationData, void const*, u32); + virtual void adaptor_do_BEGIN(JStudio::data::TEOperationData, void const*, u32); + virtual void adaptor_do_BEGIN_FADE_IN(JStudio::data::TEOperationData, void const*, + u32); + virtual void adaptor_do_END(JStudio::data::TEOperationData, void const*, u32); + virtual void adaptor_do_END_FADE_OUT(JStudio::data::TEOperationData, void const*, + u32); + virtual void adaptor_do_PARENT(JStudio::data::TEOperationData, void const*, u32); + virtual void adaptor_do_PARENT_NODE(JStudio::data::TEOperationData, void const*, + u32); + virtual void adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData, void const*, + u32); + virtual void adaptor_do_PARENT_FUNCTION(JStudio::data::TEOperationData, void const*, + u32); + virtual void adaptor_do_REPEAT(JStudio::data::TEOperationData, void const*, u32); + virtual void adaptor_do_ON_EXIT_NOT_END(JStudio::data::TEOperationData, void const*, + u32); + + static const char* toString_state_(int param_1); + + static bool state_isFade_(u8 param_1) { + return param_1 == 1 || param_1 == 3; + } + + bool state_isFade_() const { + return state_isFade_(field_0x1b8); + } + + void beginParticle_fadeIn_(u32 param_1) { + field_0x1c8 = param_1; + beginParticle_fadeIn_(); + } + + void beginParticle_() { + beginParticle_fadeIn_(0); + } + + void endParticle_() { + if (pJPAEmitter_ != NULL) { + pJPAEmitter_->becomeInvalidEmitter(); + } + } + + void set_bPermit_onExit_notEnd_(bool param_1) { field_0x1b4 = param_1; } + + /* 0x1A0 */ TCreateObject* pCreateObject_; + /* 0x1A4 */ JPABaseEmitter* pJPAEmitter_; + /* 0x1A8 */ TJPACallback_emitter_ field_0x1a8; + /* 0x1B4 */ u8 field_0x1b4; + /* 0x1B5 */ bool field_0x1b5; + /* 0x1B6 */ bool field_0x1b6; + /* 0x1B7 */ u8 field_0x1b7; + /* 0x1B8 */ u8 field_0x1b8; + /* 0x1BC */ u32 field_0x1bc; + /* 0x1C0 */ u32 u32FadeTime_end_; + /* 0x1C4 */ u32 u32FadeTime_current_; + /* 0x1C8 */ u32 field_0x1c8; + /* 0x1CC */ u32 field_0x1cc; + /* 0x1D0 */ JStage::TObject* field_0x1d0; + /* 0x1D4 */ u32 field_0x1d4; + /* 0x1D8 */ bool field_0x1d8; +}; + +} // namespace JStudio_JParticle + #endif /* OBJECT_PARTICLE_H */ diff --git a/libs/JSystem/include/JSystem/JSupport/JSUInputStream.h b/libs/JSystem/include/JSystem/JSupport/JSUInputStream.h index a1957a22ad..77c27d0530 100644 --- a/libs/JSystem/include/JSystem/JSupport/JSUInputStream.h +++ b/libs/JSystem/include/JSystem/JSupport/JSUInputStream.h @@ -5,9 +5,9 @@ #include "dusk/endian.h" /** -* @ingroup jsystem-jsupport -* -*/ + * @ingroup jsystem-jsupport + * + */ class JSUInputStream : public JSUIosBase { public: JSUInputStream() {} @@ -93,13 +93,9 @@ 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) { auto ret = read(¶m_0, 4); @@ -114,9 +110,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..502fb84005 --- /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, (uintptr_t)event->id); + } + + JAHioNode::listenPropertyEvent(event); + + for (JSUTreeIterator iter = mTree.getFirstChild(); iter != mTree.getEndChild(); + ++iter) + { + iter->listenVirtualPropertyEvent(JAH_P_EVENT1, (uintptr_t)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..b9cd8acb15 --- /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, uintptr_t 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, uintptr_t) {} + +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..66c9431a41 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()) { @@ -96,9 +100,9 @@ JAHioNode* JAHioNode::getParent() { } void JAHioNode::listenPropertyEvent(const JORPropertyEvent* event) { - propertyEvent(JAH_P_EVENT0, (u32)event->id); + propertyEvent(JAH_P_EVENT0, (uintptr_t)event->id); JORReflexible::listenPropertyEvent(event); - propertyEvent(JAH_P_EVENT1, (u32)event->id); + propertyEvent(JAH_P_EVENT1, (uintptr_t)event->id); } void JAHioNode::listenNodeEvent(const JORNodeEvent* event) { diff --git a/libs/JSystem/src/JAHostIO/JAHioUtil.cpp b/libs/JSystem/src/JAHostIO/JAHioUtil.cpp index 11c5fd4b52..9a0fdf027a 100644 --- a/libs/JSystem/src/JAHostIO/JAHioUtil.cpp +++ b/libs/JSystem/src/JAHostIO/JAHioUtil.cpp @@ -1,13 +1,23 @@ -#include "JSystem/JSystem.h" // IWYU pragma: keep +#include "JSystem/JSystem.h" // IWYU pragma: keep -#include "JSystem/JAHostIO/JAHioUtil.h" +#include #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); + va_start(args, msg); vsprintf(mStringBuffer, msg, args); va_end(args); return mStringBuffer; diff --git a/libs/JSystem/src/JStudio/JStudio_JParticle/control.cpp b/libs/JSystem/src/JStudio/JStudio_JParticle/control.cpp index cbaf5da404..13b565a3a1 100644 --- a/libs/JSystem/src/JStudio/JStudio_JParticle/control.cpp +++ b/libs/JSystem/src/JStudio/JStudio_JParticle/control.cpp @@ -4,9 +4,10 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep -#include "JSystem/JStudio/JStudio_JParticle/control.h" -#include "JSystem/JParticle/JPAEmitterManager.h" #include "JSystem/JGadget/pointer.h" +#include "JSystem/JParticle/JPAEmitterManager.h" +#include "JSystem/JStudio/JStudio_JParticle/control.h" +#include "JSystem/JStudio/JStudio_JParticle/object-particle.h" JStudio_JParticle::TCreateObject::~TCreateObject() {} diff --git a/libs/JSystem/src/JStudio/JStudio_JParticle/object-particle.cpp b/libs/JSystem/src/JStudio/JStudio_JParticle/object-particle.cpp index 14fffc12b6..36b5fd26cf 100644 --- a/libs/JSystem/src/JStudio/JStudio_JParticle/object-particle.cpp +++ b/libs/JSystem/src/JStudio/JStudio_JParticle/object-particle.cpp @@ -7,8 +7,36 @@ #include "JSystem/JStudio/JStudio_JParticle/object-particle.h" #include "JSystem/JStudio/JStudio_JStage/control.h" -JStudio_JParticle::TAdaptor_particle::TAdaptor_particle( - JStudio_JParticle::TCreateObject* param_1) : +namespace JStudio_JParticle { +namespace { + +struct TJPAEmitter_stopDrawParticle_ { + TJPAEmitter_stopDrawParticle_(JPABaseEmitter* emitter) : pJPAEmitter_(emitter) {} + ~TJPAEmitter_stopDrawParticle_() { + if (pJPAEmitter_ != NULL) { + pJPAEmitter_->stopDrawParticle(); + } + } + void set(JPABaseEmitter* emitter) { pJPAEmitter_ = emitter; } + /* 0x0 */ JPABaseEmitter* pJPAEmitter_; +}; + +class TToString_u32ID_ { +public: + TToString_u32ID_() {} + + const char* operator()(u32 param_1) { + snprintf(buf, sizeof(buf), "0x%08x", param_1); + return buf; + } + +private: + char buf[11]; +}; + +} // anonymous namespace + +TAdaptor_particle::TAdaptor_particle(TCreateObject* param_1) : pCreateObject_(param_1), pJPAEmitter_(NULL), field_0x1a8(this) { @@ -18,8 +46,8 @@ JStudio_JParticle::TAdaptor_particle::TAdaptor_particle( field_0x1b7 = 0; field_0x1b8 = 0; field_0x1bc = -1; - u32FadeTime_end = 0; - field_0x1c4 = 0; + u32FadeTime_end_ = 0; + u32FadeTime_current_ = 0; field_0x1c8 = 0; field_0x1cc = 0; field_0x1d0 = NULL; @@ -28,7 +56,7 @@ JStudio_JParticle::TAdaptor_particle::TAdaptor_particle( JUT_ASSERT(90, pCreateObject_!=NULL); } -JStudio_JParticle::TAdaptor_particle::~TAdaptor_particle() { +TAdaptor_particle::~TAdaptor_particle() { if (pJPAEmitter_ != NULL) { if (field_0x1b6 == 0) { pCreateObject_->emitter_destroy(pJPAEmitter_); @@ -36,48 +64,65 @@ JStudio_JParticle::TAdaptor_particle::~TAdaptor_particle() { pJPAEmitter_->setEmitterCallBackPtr(field_0x1a8.getOld()); pJPAEmitter_->quitImmortalEmitter(); } else { + JGADGET_WARNMSG(116, "not permitted : not-end on exit\n demo-object : " << adaptor_getID_string()); pCreateObject_->emitter_destroy(pJPAEmitter_); } } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_prepare() { - static JStudio::TAdaptor::TSetVariableValue_immediate aoData[18] = { - JStudio::TAdaptor::TSetVariableValue_immediate(0, 0.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(1, 0.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(2, 0.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(3, 0.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(4, 0.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(5, 0.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(6, 1.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(7, 1.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(8, 1.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(9, 255.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(10, 255.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(11, 255.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(12, 255.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(13, 255.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(14, 255.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(15, 255.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(16, 255.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(), +void TAdaptor_particle::adaptor_do_prepare() { + static TSetVariableValue_immediate aoData[18] = { + TSetVariableValue_immediate(0, 0.0f), + TSetVariableValue_immediate(1, 0.0f), + TSetVariableValue_immediate(2, 0.0f), + TSetVariableValue_immediate(3, 0.0f), + TSetVariableValue_immediate(4, 0.0f), + TSetVariableValue_immediate(5, 0.0f), + TSetVariableValue_immediate(6, 1.0f), + TSetVariableValue_immediate(7, 1.0f), + TSetVariableValue_immediate(8, 1.0f), + TSetVariableValue_immediate(9, 255.0f), + TSetVariableValue_immediate(10, 255.0f), + TSetVariableValue_immediate(11, 255.0f), + TSetVariableValue_immediate(12, 255.0f), + TSetVariableValue_immediate(13, 255.0f), + TSetVariableValue_immediate(14, 255.0f), + TSetVariableValue_immediate(15, 255.0f), + TSetVariableValue_immediate(16, 255.0f), + TSetVariableValue_immediate(), }; adaptor_setVariableValue_immediate(aoData); } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_end() { +void TAdaptor_particle::adaptor_do_end() { +#if DEBUG + if (field_0x1b8 == 0) { + JUT_ASSERT(160, pJPAEmitter_==NULL); + return; + } + + JUT_ASSERT(163, pJPAEmitter_!=NULL); + + if (!state_isFade_()) { + return; + } + + JUT_ASSERT(166, u32FadeTime_current_getControl(); - JUT_ASSERT(181, pControl != NULL); - if (u32FadeTime_end != 0 && field_0x1c4 < u32FadeTime_end) { + JUT_ASSERT(181, pControl!=NULL); + if (u32FadeTime_end_ != 0 && u32FadeTime_current_ < u32FadeTime_end_) { JUT_ASSERT(187, state_isFade_()); - JUT_ASSERT(188, pJPAEmitter_ != NULL); - field_0x1c4 += param_1; - if (field_0x1c4 >= u32FadeTime_end) { + JUT_ASSERT(188, pJPAEmitter_!=NULL); + u32FadeTime_current_ += param_1; + if (u32FadeTime_current_ >= u32FadeTime_end_) { switch (field_0x1b8) { case 1: field_0x1b8 = 2; @@ -87,9 +132,11 @@ void JStudio_JParticle::TAdaptor_particle::adaptor_do_update(u32 param_1) { pJPAEmitter_ = NULL; field_0x1b8 = 0; break; + default: + JUT_ASSERT(203, false); } - u32FadeTime_end = 0; - field_0x1c4 = 0; + u32FadeTime_end_ = 0; + u32FadeTime_current_ = 0; } } else { JUT_ASSERT(210, !state_isFade_()); @@ -99,139 +146,206 @@ void JStudio_JParticle::TAdaptor_particle::adaptor_do_update(u32 param_1) { } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARTICLE( +void TAdaptor_particle::adaptor_do_PARTICLE( JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { - if (param_1 == JStudio::data::UNK_0x19) { - JUT_ASSERT(232, uSize==4); - JUT_ASSERT(233, pContent!=NULL); - field_0x1bc = *(BE(u32)*)pContent; + switch (param_1) { + case JStudio::data::UNK_0x19: { + JUT_ASSERT(232, pContent!=NULL); + JUT_ASSERT(233, uSize==4); + u32 var_r29 = *(BE(u32)*)pContent; + field_0x1bc = var_r29; + break; + } + default: + JGADGET_WARNMSG(241, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_BEGIN(JStudio::data::TEOperationData param_1, +void TAdaptor_particle::adaptor_do_BEGIN(JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { switch (param_1) { case JStudio::data::UNK_0x1: JUT_ASSERT(253, uSize==0); beginParticle_(); break; + default: + JGADGET_WARNMSG(259, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_BEGIN_FADE_IN( +void TAdaptor_particle::adaptor_do_BEGIN_FADE_IN( JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { switch (param_1) { - case JStudio::data::UNK_0x2: + case JStudio::data::UNK_0x2: { JUT_ASSERT(272, pContent!=NULL); JUT_ASSERT(273, uSize==4); - beginParticle_fadeIn_(*(BE(f32)*)pContent); + u32 var_r29 = *(BE(f32)*)pContent; + beginParticle_fadeIn_(var_r29); break; } + default: + JGADGET_WARNMSG(282, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); + } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_END(JStudio::data::TEOperationData param_1, +void TAdaptor_particle::adaptor_do_END(JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { - if (param_1 == JStudio::data::UNK_0x1) { + switch (param_1) { + case JStudio::data::UNK_0x1: JUT_ASSERT(294, uSize==0); endParticle_(); + break; + default: + JGADGET_WARNMSG(300, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_END_FADE_OUT( +void TAdaptor_particle::adaptor_do_END_FADE_OUT( JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { switch (param_1) { - case JStudio::data::UNK_0x2: - JUT_ASSERT(336, pContent!=NULL); - JUT_ASSERT(337, uSize==4); - endParticle_fadeOut_(*(BE(f32)*)pContent); + case JStudio::data::UNK_0x2: { + JUT_ASSERT(313, pContent!=NULL); + JUT_ASSERT(314, uSize==4); + u32 var_r29 = *(BE(f32)*)pContent; + endParticle_fadeOut_(var_r29); break; } + default: + JGADGET_WARNMSG(323, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); + } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT( +void TAdaptor_particle::adaptor_do_PARENT( JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { switch (param_1) { - case JStudio::data::UNK_0x18: - JUT_ASSERT(313, pContent!=NULL); - JUT_ASSERT(314, uSize>0); + case JStudio::data::UNK_0x18: { + JUT_ASSERT(336, pContent!=NULL); + JUT_ASSERT(337, uSize>0); + + const char* szID = (const char*)pContent; + JGADGET_ASSERTWARN(339, szID[uSize-1]=='\0'); + field_0x1d0 = NULL; const JStage::TSystem* pJSGSystem = pCreateObject_->get_pJSGSystem_(); JUT_ASSERT(345, pJSGSystem!=NULL); JStage::TObject* pJSGObject; - if (pJSGSystem->JSGFindObject(&pJSGObject, (const char*)pContent, JStage::OBJECT_UNDEFINED) == 0) { - JUT_ASSERT(354, pJSGObject!=NULL); - field_0x1d0 = pJSGObject; + if (pJSGSystem->JSGFindObject(&pJSGObject, szID, JStage::OBJECT_UNDEFINED) != 0) { + JGADGET_WARNMSG(351, "object not found as parent : " << szID << "\n demo-object : " << adaptor_getID_string()); + break; } + + JUT_ASSERT(354, pJSGObject!=NULL); + field_0x1d0 = pJSGObject; break; } + default: + JGADGET_WARNMSG(361, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); + } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT_NODE( +void TAdaptor_particle::adaptor_do_PARENT_NODE( JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { switch (param_1) { - case JStudio::data::UNK_0x18: - if (field_0x1d0 != NULL) { - JUT_ASSERT(380, pContent!=NULL); - JUT_ASSERT(381, uSize>0); - field_0x1d4 = field_0x1d0->JSGFindNodeID((const char*)pContent); - if (field_0x1d4 == -1) { - return; - } + case JStudio::data::UNK_0x18: { + if (field_0x1d0 == NULL) { + JGADGET_WARNMSG(377, "object not specified as parent\n demo-object : " << adaptor_getID_string()); + break; } - break; + JUT_ASSERT(380, pContent!=NULL); + JUT_ASSERT(381, uSize>0); + const char* szID = (const char*)pContent; + JGADGET_ASSERTWARN(383, szID[uSize-1]=='\0'); + field_0x1d4 = field_0x1d0->JSGFindNodeID(szID); + if (field_0x1d4 != -1) { + return; + } else { + JGADGET_WARNMSG(388, "node not found about parent : " << szID << "\n demo-object : " << adaptor_getID_string()); + return; + } + } case JStudio::data::UNK_0x19: - JUT_ASSERT(397, uSize==4); - JUT_ASSERT(396, pContent!=NULL); + JUT_ASSERT(396, uSize==4); + JUT_ASSERT(397, pContent!=NULL); field_0x1d4 = *(BE(u32)*)pContent; break; + default: + JGADGET_WARNMSG(404, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData param_1, +const char* TAdaptor_particle::toString_state_(int param_1) { + static const char* const asz[] = {"none", "begin", "stable", "end"}; + return JGadget::toStringFromIndex(param_1, asz, ARRAY_SIZE(asz), "(undefined)"); +} + +void TAdaptor_particle::adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { - if (param_1 == JStudio::data::UNK_0x2) { + switch (param_1) { + case JStudio::data::UNK_0x2: { JUT_ASSERT(417, uSize==4); JUT_ASSERT(418, pContent!=NULL); - field_0x1d8 = *(BE(u32)*)pContent ? 1 : 0; + u32 var_r29 = *(BE(u32)*)pContent; + field_0x1d8 = var_r29 != 0; + break; + } + default: + JGADGET_WARNMSG(426, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT_FUNCTION(JStudio::data::TEOperationData param_1, +void TAdaptor_particle::adaptor_do_PARENT_FUNCTION(JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { - if (param_1 == JStudio::data::UNK_0x2) { + switch (param_1) { + case JStudio::data::UNK_0x2: { JUT_ASSERT(439, uSize==4); - JUT_ASSERT(439, pContent!=NULL); - field_0x1cc = *(BE(u32)*)pContent; + JUT_ASSERT(440, pContent!=NULL); + u32 var_r29 = *(BE(u32)*)pContent; + field_0x1cc = var_r29; + break; + } + default: + JGADGET_WARNMSG(447, "unknown data-type : " << param_1); } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_REPEAT(JStudio::data::TEOperationData param_1, +void TAdaptor_particle::adaptor_do_REPEAT(JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { - if (param_1 == JStudio::data::UNK_0x2) { + switch (param_1) { + case JStudio::data::UNK_0x2: { JUT_ASSERT(460, uSize==4); JUT_ASSERT(461, pContent!=NULL); - field_0x1b5 = *(BE(u32)*)pContent ? 1 : 0; + u32 var_r29 = *(BE(u32)*)pContent; + field_0x1b5 = var_r29 != 0; + break; + } + default: + JGADGET_WARNMSG(469, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_ON_EXIT_NOT_END(JStudio::data::TEOperationData param_1, +void TAdaptor_particle::adaptor_do_ON_EXIT_NOT_END(JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { - if (param_1 == JStudio::data::UNK_0x2) { - JUT_ASSERT(460, uSize==4); - JUT_ASSERT(461, pContent!=NULL); - field_0x1b6 = *(BE(u32)*)pContent ? 1 : 0; + switch (param_1) { + case JStudio::data::UNK_0x2: { + JUT_ASSERT(482, uSize==4); + JUT_ASSERT(483, pContent!=NULL); + u32 var_r29 = *(BE(u32)*)pContent; + field_0x1b6 = var_r29 != 0; + break; + } + default: + JGADGET_WARNMSG(491, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); } } -void -JStudio_JParticle::TAdaptor_particle::TJPACallback_emitter_::execute(JPABaseEmitter* pJPAEmitter) { +void TAdaptor_particle::TJPACallback_emitter_::execute(JPABaseEmitter* pJPAEmitter) { JUT_ASSERT(518, pJPAEmitter==pThis_->pJPAEmitter_); if (pJPAEmitter->isEnableDeleteEmitter()) { pThis_->pCreateObject_->emitter_destroy(pJPAEmitter); pThis_->pJPAEmitter_ = NULL; pThis_->field_0x1b8 = 0; - pThis_->u32FadeTime_end = 0; - pThis_->field_0x1c4 = 0; + pThis_->u32FadeTime_end_ = 0; + pThis_->u32FadeTime_current_ = 0; return; } const JStudio::TObject* pObject = pThis_->adaptor_getObject(); @@ -258,34 +372,45 @@ JStudio_JParticle::TAdaptor_particle::TJPACallback_emitter_::execute(JPABaseEmit break; case 1: break; + default: + JUT_ASSERT(566, false); } pJPAEmitter->setGlobalTranslation(pVVar9->translation); - int rotx = 65536.0 * (pVVar9->rotation.x / 360.0); - int roty = 65536.0 * (pVVar9->rotation.y / 360.0); - int rotz = 65536.0 * (pVVar9->rotation.z / 360.0); - pJPAEmitter->setGlobalRotation(JGeometry::TVec3(rotx, roty, rotz)); + pJPAEmitter->setGlobalRotation(JGeometry::TVec3( + 65536.0 * (pVVar9->rotation.x / 360.0), + 65536.0 * (pVVar9->rotation.y / 360.0), + 65536.0 * (pVVar9->rotation.z / 360.0) + )); pJPAEmitter->setGlobalScale(pVVar9->scaling); } else { Mtx afStack_1f0; if (JStudio_JStage::transform_toGlobalFromLocal(afStack_1f0, VStack_19c, pThis_->field_0x1d0, pThis_->field_0x1d4) == 0) { + JGADGET_WARNMSG(583, "can\'t transform about parent\n demo-object : " << pThis_->adaptor_getID_string()); return; } pJPAEmitter->setGlobalSRTMatrix(afStack_1f0); } + f64 alpha = 1.0; - u32 u32FadeTime_end = pThis_->u32FadeTime_end; - f64 dVar16 = u32FadeTime_end; - f64 dVar15 = pThis_->field_0x1c4; - switch(pThis_->field_0x1b8) { + u32 u32FadeTime_end = pThis_->u32FadeTime_end_; + u32 u32FadeTime_current = pThis_->u32FadeTime_current_; + f64 var_f30 = u32FadeTime_end; + f64 var_f29 = u32FadeTime_current; + switch (pThis_->field_0x1b8) { case 1: JUT_ASSERT(606, u32FadeTime_end>0); - alpha = dVar15 / dVar16; + alpha = var_f29 / var_f30; + break; + case 2: break; case 3: JUT_ASSERT(611, u32FadeTime_end>0); - alpha = (dVar16 - dVar15) / dVar16; + alpha = (var_f30 - var_f29) / var_f30; + break; + default: + JUT_ASSERT(619, false); } u8 globalAlpha = 255; @@ -302,48 +427,53 @@ JStudio_JParticle::TAdaptor_particle::TJPACallback_emitter_::execute(JPABaseEmit } } -void -JStudio_JParticle::TAdaptor_particle::TJPACallback_emitter_::executeAfter(JPABaseEmitter* pJPAEmitter) { +void TAdaptor_particle::TJPACallback_emitter_::executeAfter(JPABaseEmitter* pJPAEmitter) { if (pOld != NULL) { pOld->executeAfter(pJPAEmitter); } } -void -JStudio_JParticle::TAdaptor_particle::TJPACallback_emitter_::draw(JPABaseEmitter* pJPAEmitter) { +void TAdaptor_particle::TJPACallback_emitter_::draw(JPABaseEmitter* pJPAEmitter) { if (pOld != NULL) { pOld->draw(pJPAEmitter); } } -void -JStudio_JParticle::TAdaptor_particle::TJPACallback_emitter_::drawAfter(JPABaseEmitter* pJPAEmitter) { +void TAdaptor_particle::TJPACallback_emitter_::drawAfter(JPABaseEmitter* pJPAEmitter) { if (pOld != NULL) { pOld->drawAfter(pJPAEmitter); } } -void JStudio_JParticle::TAdaptor_particle::beginParticle_fadeIn_() { +void TAdaptor_particle::beginParticle_fadeIn_() { if (pJPAEmitter_ != NULL) { + JGADGET_WARNMSG(686, + "past emitter already exist\n demo-object : " << adaptor_getID_string() << + "\n begin prepare particle-ID : " << TToString_u32ID_()(field_0x1bc)); pCreateObject_->emitter_destroy(pJPAEmitter_); } JPABaseEmitter* pEmitter = pCreateObject_->emitter_create(field_0x1bc); pJPAEmitter_ = pEmitter; - if (pEmitter != NULL) { - field_0x1a8.setOld(pEmitter->getEmitterCallBackPtr()); - pEmitter->setEmitterCallBackPtr(&field_0x1a8); - pEmitter->becomeImmortalEmitter(); - field_0x1b7 = 1; - field_0x1b8 = 1; - if (field_0x1c8 == 0) { - field_0x1b8 = 2; - } - u32FadeTime_end = field_0x1c8; - field_0x1c4 = 0; + if (pEmitter == NULL) { + JGADGET_WARNMSG(696, + "can\'t create emitter : " << TToString_u32ID_()(field_0x1bc) << + "\n demo-object : " << adaptor_getID_string()); + return; } + + field_0x1a8.setOld(pEmitter->getEmitterCallBackPtr()); + pEmitter->setEmitterCallBackPtr(&field_0x1a8); + pEmitter->becomeImmortalEmitter(); + field_0x1b7 = 1; + field_0x1b8 = 1; + if (field_0x1c8 == 0) { + field_0x1b8 = 2; + } + u32FadeTime_end_ = field_0x1c8; + u32FadeTime_current_ = 0; } -void JStudio_JParticle::TAdaptor_particle::endParticle_fadeOut_(u32 param_1) { +void TAdaptor_particle::endParticle_fadeOut_(u32 param_1) { if (pJPAEmitter_ == NULL) { return; } @@ -351,14 +481,15 @@ void JStudio_JParticle::TAdaptor_particle::endParticle_fadeOut_(u32 param_1) { pCreateObject_->emitter_destroy(pJPAEmitter_); pJPAEmitter_ = NULL; field_0x1b8 = 0; - u32FadeTime_end = 0; - field_0x1c4 = 0; + u32FadeTime_end_ = 0; + u32FadeTime_current_ = 0; return; } u8 eState_old = field_0x1b8 & 0xff; field_0x1b8 = 3; - if (field_0x1c4 == 0) { - u32FadeTime_end = param_1; + if (u32FadeTime_current_ == 0) { + JUT_ASSERT(731, !state_isFade_(eState_old)); + u32FadeTime_end_ = param_1; return; } JUT_ASSERT(735, state_isFade_(eState_old)); @@ -366,13 +497,17 @@ void JStudio_JParticle::TAdaptor_particle::endParticle_fadeOut_(u32 param_1) { switch(eState_old) { case 1: - u32Denominator = field_0x1c4; + u32Denominator = u32FadeTime_current_; break; case 3: - u32Denominator = u32FadeTime_end - field_0x1c4; + u32Denominator = u32FadeTime_end_ - u32FadeTime_current_; break; + default: + JUT_ASSERT(791, false); } JUT_ASSERT(793, u32Denominator!=0); - u32FadeTime_end = ((f64)param_1 * (f64)u32FadeTime_end) / u32Denominator; - field_0x1c4 = u32FadeTime_end - param_1; + u32FadeTime_end_ = ((f64)param_1 * (f64)u32FadeTime_end_) / u32Denominator; + u32FadeTime_current_ = u32FadeTime_end_ - param_1; } + +} // namespace JStudio_JParticle 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 32fa4de849..3ef726dda7 100644 --- a/src/Z2AudioLib/Z2AudioMgr.cpp +++ b/src/Z2AudioLib/Z2AudioMgr.cpp @@ -20,6 +20,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 67d51d9b59..2764365bc4 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 de133cabd9..fce45d1a79 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" #include "os_report.h" Z2FxLineMgr::Z2FxLineMgr() : JASGlobalInstance(true) { @@ -12,9 +18,9 @@ Z2FxLineMgr::Z2FxLineMgr() : JASGlobalInstance(true) { mFxDataNum = 0; mSetUnderWaterFx = false; - #if DEBUG +#if DEBUG mHIOEdit = NULL; - #endif +#endif } void Z2FxLineMgr::initDataArc(JKRArchive* arc, JKRHeap* heap) { @@ -36,42 +42,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) { @@ -102,51 +115,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) { @@ -158,6 +180,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()); @@ -189,7 +216,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: @@ -239,4 +266,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 = JKR_NEW_ARGS(mHeap, 0) LineStereo(false); + appendNode(unk74, NULL); + unk78 = JKR_NEW_ARGS(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, uintptr_t 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 5a240cf402..a31cd534ca 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 643b3840c7..a3e45d8acd 100644 --- a/src/Z2AudioLib/Z2SeqMgr.cpp +++ b/src/Z2AudioLib/Z2SeqMgr.cpp @@ -8,94 +8,11 @@ #include "Z2AudioLib/Z2Calc.h" #include "JSystem/JAudio2/JAISoundChild.h" #include "JSystem/JAudio2/JAISeq.h" +#include "Z2AudioLib/SpotName.h" #include "os_report.h" #include "dusk/audio.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", -}; - Z2SeqMgr::Z2SeqMgr() : JASGlobalInstance(true) { mMainBgmMaster.forceIn(); mSubBgmMaster.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 7214ab20cf..4b546fc54a 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" #include "os_report.h" static f32 cPitchDown = 0.8909f; diff --git a/src/dusk/stubs.cpp b/src/dusk/stubs.cpp index f4d1b2688b..6a5a8f86e1 100644 --- a/src/dusk/stubs.cpp +++ b/src/dusk/stubs.cpp @@ -429,10 +429,6 @@ s32 JSUMemoryOutputStream::getAvailable() const { return mLength - mPosition; } -s32 JSUMemoryOutputStream::getPosition() const { - return mPosition; -} - #pragma mark JSURandomOutputStream #include s32 JSUMemoryOutputStream::seek(s32 offset, JSUStreamSeekFrom origin) {