#ifndef Z2ENVSEMGR_H #define Z2ENVSEMGR_H #include "Z2AudioLib/Z2Calc.h" #include "Z2AudioLib/Z2SeMgr.h" enum WindType { WIND_TYPE_0, WIND_TYPE_1, WIND_TYPE_2, WIND_TYPE_3, }; struct Z2EnvSeBase { Z2EnvSeBase(Vec* posPtr = NULL); ~Z2EnvSeBase(); bool startEnvSe(JAISoundID soundID, f32 fxMix, f32 volume, f32 pan, f32 dolby, f32 pitch, u32 moveSteps); bool startEnvSeLevel(JAISoundID soundID, f32 fxMix, f32 volume, f32 pan, f32 dolby, f32 pitch, u32 moveSteps); JAISoundHandle* getHandle() { return &mHandle; } void setPos(Vec* pos) { mPos = pos; } /* 0x0 */ Vec* mPos; /* 0x4 */ JAISoundHandle mHandle; }; // Size: 0x8 struct Z2EnvSeAutoPan : public Z2EnvSeBase { Z2EnvSeAutoPan(); ~Z2EnvSeAutoPan(); void setPanParam(f32 pan, f32 dolby, bool, bool, f32, f32); void calcPan(); bool startEnvSeAutoPanLevel(JAISoundID soundID, f32 fxMix, f32 volume, f32 pitch); /* 0x08 */ f32 mPan; /* 0x0C */ f32 mDolby; /* 0x10 */ f32 field_0x10; /* 0x14 */ f32 field_0x14; /* 0x18 */ bool field_0x18; /* 0x19 */ bool field_0x19; }; // Size: 0x1C struct Z2EnvSeDir : public Z2EnvSeBase { Z2EnvSeDir(Vec* dir = NULL); ~Z2EnvSeDir(); void setPanDir(Vec* dir); void calcPan(f32); bool startEnvSeDirLevel(JAISoundID soundID, f32 fxMix, f32 volume); /* 0x08 */ f32 mPan; /* 0x0C */ f32 mDolby; /* 0x10 */ Vec mPanDir; }; // Size: 0x1C struct Z2EnvSeMgr : public JASGlobalInstance { Z2EnvSeMgr(); ~Z2EnvSeMgr(); void framework(); void resetScene(); void resetSceneInner(); void initSceneEnvSe(s32 sceneID, s8 room, f32); void playSceneEnvSe(); void initStaticEnvSe(u8, u8, u8, u8, Vec*); bool startStaticEnvSe(s8 reverb); void registWindowPos(Vec* posPtr); bool startRainSe(s32, s8); void startNearThunderSe(s8 reverb); void startFarThunderSe(Vec* posPtr, s8 reverb); void setSnowPower(s8 reverb); void initStrongWindSe(); void setWindDirection(Vec* dir); bool startStrongWindSe(s8 reverb); void initRiverSe(u8, u8, u8, u8); void registRiverSePos(Vec* posPtr); void setHyrulSewerOpen(bool isSewerOpen); bool startRiverSe(s8 reverb); void initFallSe(u8, u8, u8, u8); void registFallSePos(Vec* posPtr); bool startFallSe(s8 reverb); void initEtcSe(u8, u8, u8, u8); void registEtcSePos(Vec* posPtr); bool startEtcSe(s8 reverb); void registWolfSmellSePos(Vec* posPtr); void startFogWipeTrigger(Vec* pos); void setFogWipeWidth(f32 width); f32 getFogDensity(); bool startFogSe(); void initLv3WaterSe(u8, u8, u8, u8); void registLv3WaterSePos(u8, Vec* posPtr); void startLv3WaterSe(s8 reverb); void setWindType(u8 type) { mWindType = type; } void registSmellSePos(Vec* posPtr) { registEtcSePos(posPtr); } void startSmellSe(s8 reverb) { startEtcSe(reverb); } void initSmellSe(u8 param_0, u8 param_1, u8 param_2, u8 param_3) { initEtcSe(param_0, param_1, param_2, param_3); } /* 0x000 */ Z2EnvSeAutoPan field_0x0; /* 0x01C */ Z2EnvSeAutoPan field_0x1c; /* 0x038 */ u8 field_0x38; /* 0x039 */ u8 field_0x39; /* 0x03C */ Vec field_0x3c; /* 0x048 */ f32 field_0x48; /* 0x04C */ f32 field_0x4c; /* 0x050 */ f32 field_0x50; /* 0x054 */ f32 field_0x54; /* 0x058 */ f32 field_0x58; /* 0x05C */ f32 field_0x5c; /* 0x060 */ f32 field_0x60; /* 0x064 */ Z2MultiSeMgr field_0x64; /* 0x080 */ Z2EnvSeBase field_0x80; /* 0x088 */ Z2EnvSeBase field_0x88; /* 0x090 */ Z2Calc::FNoise1f field_0x90; /* 0x0A0 */ Z2Calc::FNoise1f field_0xa0; /* 0x0B0 */ Z2Calc::FNoise1f field_0xb0; /* 0x0C0 */ Z2Calc::FNoise1f field_0xc0; /* 0x0D0 */ Z2Calc::FNoise1f field_0xd0; /* 0x0E0 */ Z2Calc::FNoise1f field_0xe0; /* 0x0F0 */ Z2Calc::FNoise1f field_0xf0; /* 0x100 */ Z2Calc::FNoise1f field_0x100; /* 0x110 */ Z2EnvSeBase field_0x110; /* 0x118 */ Z2EnvSeBase field_0x118; /* 0x120 */ Z2Calc::FNoise1f field_0x120; /* 0x130 */ Z2Calc::FNoise1f field_0x130; /* 0x140 */ s8 field_0x140; /* 0x141 */ s8 mSnowPower; /* 0x144 */ Z2EnvSeDir field_0x144; /* 0x160 */ u8 mWindType; /* 0x164 */ Z2MultiSeMgr mRiverSeMgr; /* 0x180 */ Z2EnvSeBase field_0x180; /* 0x188 */ u8 field_0x188; /* 0x18C */ Z2Calc::FNoise1f field_0x18c; /* 0x19C */ Z2Calc::FNoise1f field_0x19c; /* 0x1AC */ f32 field_0x1ac; /* 0x1B0 */ f32 field_0x1b0; /* 0x1B4 */ f32 field_0x1b4; /* 0x1B8 */ s8 field_0x1b8; /* 0x1BC */ Z2MultiSeMgr mFallSeMgr; /* 0x1D8 */ Z2EnvSeBase field_0x1d8; /* 0x1E0 */ u8 field_0x1e0; /* 0x1E4 */ f32 field_0x1e4; /* 0x1E8 */ f32 field_0x1e8; /* 0x1EC */ f32 field_0x1ec; /* 0x1F0 */ Z2MultiSeMgr mEtcSeMgr; /* 0x20C */ Z2EnvSeBase field_0x20c; /* 0x214 */ u8 field_0x214; /* 0x218 */ f32 field_0x218; /* 0x21C */ f32 field_0x21c; /* 0x220 */ f32 field_0x220; /* 0x224 */ Z2MultiSeMgr field_0x224; /* 0x240 */ Z2EnvSeBase field_0x240; /* 0x248 */ u8 field_0x248; /* 0x24C */ f32 field_0x24c; /* 0x250 */ f32 field_0x250; /* 0x254 */ f32 field_0x254; /* 0x258 */ Z2MultiSeMgr field_0x258; /* 0x274 */ Z2EnvSeBase field_0x274; /* 0x27C */ u8 field_0x27c; /* 0x280 */ f32 field_0x280; /* 0x284 */ f32 field_0x284; /* 0x288 */ f32 field_0x288; /* 0x28C */ Z2MultiSeMgr field_0x28c; /* 0x2A8 */ Z2EnvSeBase field_0x2a8; /* 0x2B0 */ u8 field_0x2b0; /* 0x2B4 */ f32 field_0x2b4; /* 0x2B8 */ f32 field_0x2b8; /* 0x2BC */ f32 field_0x2bc; /* 0x2C0 */ Z2MultiSeMgr mWolfSmellSeMgr; /* 0x2DC */ Z2EnvSeBase field_0x2dc; /* 0x2E4 */ u8 field_0x2e4; /* 0x2E8 */ Z2Calc::FNoise1f field_0x2e8; /* 0x2F8 */ Z2Calc::FNoise1f field_0x2f8; /* 0x308 */ f32 mFogDensity; }; // Size: 0x30C STATIC_ASSERT(sizeof(Z2EnvSeMgr) == 0x30C); extern Z2EnvSeMgr g_mEnvSeMgr; inline Z2EnvSeMgr* Z2GetEnvSeMgr() { return JASGlobalInstance::getInstance(); } #endif /* Z2ENVSEMGR_H */