Files

68 lines
1.5 KiB
C

#pragma once
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include "vftable.h"
#include "Common.h"
struct SoundHandle
{
BYTE data_x04[0x2C];
int unkBytePtr; // I don't know anything about this value (besides it being a pointer to some byte), but it gets nulled when the music stops playing.
inline bool FinishedPlaying()
{
return unkBytePtr == NULL || unkBytePtr == -1;
}
void ForcePause();
void ForceResume();
virtual void Vftable_x00();
virtual void Vftable_x04();
virtual DWORD __stdcall FreeReference();
virtual void Vftable_x0C();
FILL_VFTABLE(1)
FILL_VFTABLE(2)
FILL_VFTABLE(3)
FILL_VFTABLE(4)
FILL_VFTABLE(5)
virtual void Vftable_x60();
virtual void Vftable_x64();
virtual void Pause();
virtual void Resume();
virtual bool IsPaused();
};
struct TestSound
{
UINT idsName;
BYTE soundId;
};
struct FlSound
{
DWORD vftable;
UINT id;
LPCSTR filePath;
int unk_x0C;
float unk_x10;
float unk_x14;
};
FlSound* GetSound(const ID_String& ids);
bool GetBackgroundMusicHandle(SoundHandle **pHandle);
bool GetBackgroundAmbienceHandle(SoundHandle **pHandle);
bool GetBackgroundMusicHandle_Hook(SoundHandle **handle);
void StopMusicTestSound_Hook(BYTE soundId);
void InitTestSounds();
typedef bool (*GetSoundHandleFunc)(SoundHandle **pHandle);
void PauseSound(bool &shouldResume, GetSoundHandleFunc getHandle, bool force = false);
void ResumeSound(bool &shouldResume, GetSoundHandleFunc getHandle, bool force = false);