Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/SokuAddresses.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ namespace SokuLib
ADDR_SWR_FONT_CREATE = 0x004116D0,
ADDR_SWR_FONT_DESTRUCT = 0x00411760,
ADDR_SWR_FONT_SET_INDIRECT = 0x00411840,
ADDR_SWR_CONVERT_VOLUME_TO_DSOUND = 0x00418B30,
ADDR_CNUMBER_RENDER = 0x00414940,
ADDR_GET_PACKAGED_BGM_CALLER = 0x00418BE1,
ADDR_GET_PACKAGED_SFL_CALLER = 0x00418F41,
Expand Down Expand Up @@ -140,6 +141,8 @@ namespace SokuLib
ADDR_VTBL_CDESIGN_SPRITE = 0x008710E4,
ADDR_VTBL_CDESIGN_GAUGE = 0x00871104,
ADDR_VTBL_CDESIGN_NUMBER = 0x00871124,
ADDR_VTBL_CDSBUFFER = 0x008713a8,
ADDR_VTBL_CDS3DBUFFER = 0x00871384,
ADDR_VTBL_BITMAPDATA = 0x00871474,
ADDR_VTBL_PACKAGEREADER = 0x0087148C,

Expand Down Expand Up @@ -167,6 +170,7 @@ namespace SokuLib
ADDR_RCHARID = 0x00899D30,
ADDR_INPUT_MANAGER_CLUSTER = 0x0089A248,
ADDR_MENU_LIST = 0x0089A884,
ADDR_SOUND_MANAGER = 0x0089F9F8,
ADDR_TEXTURE_MANAGER = 0x0089FF08,
ADDR_WINDOW_HWND = 0x0089FF90,
ADDR_LOAD_GRAPHICS_THREAD = 0x0089FFF4,
Expand Down
22 changes: 22 additions & 0 deletions src/SoundManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,26 @@ namespace SokuLib
{
void (* const playSEWaveBuffer)(int id) = reinterpret_cast<void (*)(int id)>(ADDR_PLAY_SE_WAVE_BUFFER);
void (* const playNetBell)(int id) = reinterpret_cast<void (*)(int id)>(ADDR_PLAY_NET_BELL);
void DSBuffer::Initialize(LPWAVEFORMATEX waveformatex, DWORD bufSize) {
(* ((void (__thiscall **)(DSBuffer* , LPWAVEFORMATEX, DWORD)) ADDR_VTBL_CDSBUFFER))(this, waveformatex, bufSize);
}
void DSBuffer::Delete(bool free) {
(* ((void (__thiscall **)(DSBuffer* , bool free)) (ADDR_VTBL_CDSBUFFER + 4)))(this, free);
}
void DS3DBuffer::Initialize(LPWAVEFORMATEX waveformatex, DWORD bufSize) {
(* ((void (__thiscall **)(DSBuffer* , LPWAVEFORMATEX, DWORD)) ADDR_VTBL_CDS3DBUFFER))(this, waveformatex, bufSize);
}
void DS3DBuffer::Delete(bool free) {
(* ((void (__thiscall **)(DSBuffer* , bool free)) (ADDR_VTBL_CDS3DBUFFER + 4)))(this, free);
}
int (__stdcall *const ConvertFloatVolumeToDSoundVolume)(float volume) = (int (__stdcall *)(float)) ADDR_SWR_CONVERT_VOLUME_TO_DSOUND;
bool SoundManager::SetVolumeByDSBufferManagerID(unsigned int id) {
if (!id)
return false;
DSBuffer **buffer = this->DSBufferManager.Get(id);
if (!buffer || !*buffer)
return false;
return (*buffer)->pIDirectSoundBuffer->SetVolume(ConvertFloatVolumeToDSoundVolume(this->SEVolume * this->SEVolumeCoefficient)) == DS_OK;
}
SoundManager &soundMgr = * (SoundManager *) ADDR_SOUND_MANAGER;
}
30 changes: 29 additions & 1 deletion src/SoundManager.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@

#ifndef SOKULIB_SOUNDMANAGER_HPP
#define SOKULIB_SOUNDMANAGER_HPP

#include "HandleManager.hpp"
#include "dsound.h"

namespace SokuLib
{
Expand All @@ -16,6 +17,33 @@ namespace SokuLib
{
((void (*)(const char *))0x43ff10)(path);
}

class WaveBuffer{};
class DSBuffer {
public:
IDirectSoundBuffer * pIDirectSoundBuffer = 0;
uint32_t sizeToLock = 0;
virtual void Initialize(LPWAVEFORMATEX waveformatex, DWORD bufSize);
virtual void Delete(bool free);
};
class DS3DBuffer : public DSBuffer {
public:
IDirectSound3DBuffer * pIDirectSound3DBuffer;
void Initialize(LPWAVEFORMATEX waveformatex, DWORD bufSize);
void Delete(bool free);
};
class SoundManager : public HandleManager<class WaveBuffer *> {
public:
HandleManager<class DSBuffer *> DSBufferManager;
DSBuffer DSBuffers[32];
DS3DBuffer DS3DBuffer[32];
char unknown[8];
float SEVolume;
float SEVolumeCoefficient;
bool SetVolumeByDSBufferManagerID(unsigned int id);
};
extern int (__stdcall *const ConvertFloatVolumeToDSoundVolume)(float volume);
extern SoundManager &soundMgr;
}


Expand Down