mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-23 08:24:16 +00:00
Implement/match LegoCacheSound::Create and LegoLoadCacheSoundPresenter::StreamingTickle (#986)
* Implement/match LegoCacheSound::Create * Naming * Fix naming * Fix parens
This commit is contained in:
committed by
GitHub
parent
1423eb56fc
commit
03ffb9c5de
@@ -12,10 +12,9 @@ LegoCacheSound::LegoCacheSound()
|
||||
Init();
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10006630
|
||||
// FUNCTION: LEGO1 0x10006630
|
||||
LegoCacheSound::~LegoCacheSound()
|
||||
{
|
||||
// TODO
|
||||
Destroy();
|
||||
}
|
||||
|
||||
@@ -23,39 +22,85 @@ LegoCacheSound::~LegoCacheSound()
|
||||
void LegoCacheSound::Init()
|
||||
{
|
||||
m_dsBuffer = NULL;
|
||||
m_unk0x40 = NULL;
|
||||
m_data = NULL;
|
||||
m_unk0x58 = 0;
|
||||
memset(&m_unk0x59, 0, sizeof(m_unk0x59));
|
||||
memset(&m_wfx, 0, sizeof(m_wfx));
|
||||
m_unk0x6a = FALSE;
|
||||
m_unk0x70 = 0;
|
||||
m_isLooping = TRUE;
|
||||
m_unk0x6c = 79;
|
||||
m_volume = 79;
|
||||
m_unk0x84 = 0;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10006710
|
||||
// FUNCTION: LEGO1 0x10006710
|
||||
// FUNCTION: BETA10 0x10066505
|
||||
MxResult LegoCacheSound::FUN_10006710()
|
||||
MxResult LegoCacheSound::Create(
|
||||
LPPCMWAVEFORMAT p_pwfx,
|
||||
MxString p_mediaSrcPath,
|
||||
MxS32 p_volume,
|
||||
MxU8* p_data,
|
||||
MxU32 p_dataSize
|
||||
)
|
||||
{
|
||||
// TODO
|
||||
WAVEFORMATEX wfx;
|
||||
wfx.wFormatTag = p_pwfx->wf.wFormatTag;
|
||||
wfx.nChannels = p_pwfx->wf.nChannels;
|
||||
wfx.nSamplesPerSec = p_pwfx->wf.nSamplesPerSec;
|
||||
wfx.nAvgBytesPerSec = p_pwfx->wf.nAvgBytesPerSec;
|
||||
wfx.nBlockAlign = p_pwfx->wf.nBlockAlign;
|
||||
wfx.wBitsPerSample = p_pwfx->wBitsPerSample;
|
||||
wfx.cbSize = 0;
|
||||
|
||||
DSBUFFERDESC desc;
|
||||
memset(&desc, 0, sizeof(desc));
|
||||
desc.dwSize = sizeof(desc);
|
||||
|
||||
if (MxOmni::IsSound3D()) {
|
||||
desc.dwFlags = DSBCAPS_PRIMARYBUFFER | DSBCAPS_CTRL3D;
|
||||
desc.dwFlags =
|
||||
DSBCAPS_STATIC | DSBCAPS_LOCSOFTWARE | DSBCAPS_CTRL3D | DSBCAPS_CTRLFREQUENCY | DSBCAPS_CTRLVOLUME;
|
||||
}
|
||||
else {
|
||||
desc.dwFlags = DSBCAPS_PRIMARYBUFFER | DSBCAPS_CTRLVOLUME;
|
||||
desc.dwFlags = DSBCAPS_CTRLFREQUENCY | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME;
|
||||
}
|
||||
|
||||
desc.dwBufferBytes = p_dataSize;
|
||||
desc.lpwfxFormat = &wfx;
|
||||
|
||||
if (SoundManager()->GetDirectSound()->CreateSoundBuffer(&desc, &m_dsBuffer, NULL) != DS_OK) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
m_volume = p_volume;
|
||||
|
||||
MxS32 volume = m_volume * SoundManager()->GetVolume() / 100;
|
||||
MxS32 attenuation = SoundManager()->GetAttenuation(volume);
|
||||
m_dsBuffer->SetVolume(attenuation);
|
||||
|
||||
if (m_sound.Create(m_dsBuffer, NULL, m_volume) != SUCCESS) {
|
||||
m_dsBuffer->Release();
|
||||
m_dsBuffer = NULL;
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
if (p_data != NULL && p_dataSize != 0) {
|
||||
CopyData(p_data, p_dataSize);
|
||||
}
|
||||
|
||||
m_unk0x48 = FUN_10006d80(p_mediaSrcPath);
|
||||
m_wfx = *p_pwfx;
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100068e0
|
||||
// FUNCTION: BETA10 0x100667a0
|
||||
void LegoCacheSound::CopyData(MxU8* p_data, MxU32 p_dataSize)
|
||||
{
|
||||
delete[] m_data;
|
||||
m_dataSize = p_dataSize;
|
||||
m_data = new MxU8[m_dataSize];
|
||||
memcpy(m_data, p_data, m_dataSize);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10006920
|
||||
void LegoCacheSound::Destroy()
|
||||
{
|
||||
@@ -65,7 +110,7 @@ void LegoCacheSound::Destroy()
|
||||
m_dsBuffer = NULL;
|
||||
}
|
||||
|
||||
delete m_unk0x40;
|
||||
delete[] m_data;
|
||||
Init();
|
||||
}
|
||||
|
||||
@@ -81,7 +126,7 @@ MxResult LegoCacheSound::FUN_10006a30(const char* p_str, MxBool)
|
||||
{
|
||||
// TODO
|
||||
// gets param2 from FUN_1003db10
|
||||
if (!m_unk0x40 && !m_unk0x44) {
|
||||
if (m_data == NULL && m_dataSize == 0) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
@@ -102,8 +147,8 @@ void LegoCacheSound::FUN_10006b80()
|
||||
m_unk0x6a = FALSE;
|
||||
|
||||
m_sound.Reset();
|
||||
if (m_string0x74.GetLength() != 0) {
|
||||
m_string0x74 = "";
|
||||
if (m_unk0x74.GetLength() != 0) {
|
||||
m_unk0x74 = "";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,8 +170,8 @@ void LegoCacheSound::FUN_10006be0()
|
||||
if (dwStatus == 0) {
|
||||
m_dsBuffer->Stop();
|
||||
m_sound.Reset();
|
||||
if (m_string0x74.GetLength() != 0) {
|
||||
m_string0x74 = "";
|
||||
if (m_unk0x74.GetLength() != 0) {
|
||||
m_unk0x74 = "";
|
||||
}
|
||||
|
||||
m_unk0x58 = 0;
|
||||
@@ -134,7 +179,7 @@ void LegoCacheSound::FUN_10006be0()
|
||||
}
|
||||
}
|
||||
|
||||
if (m_string0x74.GetLength() != 0 && !m_unk0x84) {
|
||||
if (m_unk0x74.GetLength() != 0 && !m_unk0x84) {
|
||||
if (!m_sound.UpdatePosition(m_dsBuffer)) {
|
||||
if (m_unk0x6a) {
|
||||
return;
|
||||
@@ -160,3 +205,36 @@ void LegoCacheSound::SetDistance(MxS32 p_min, MxS32 p_max)
|
||||
void LegoCacheSound::FUN_10006cd0(undefined4, undefined4)
|
||||
{
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10006d80
|
||||
// FUNCTION: BETA10 0x100670e7
|
||||
MxString LegoCacheSound::FUN_10006d80(const MxString& p_str)
|
||||
{
|
||||
// TODO: Clean up code
|
||||
char* str = p_str.GetData();
|
||||
MxU32 length = strlen(str);
|
||||
|
||||
char* local28 = str + length;
|
||||
char* local14 = local28;
|
||||
char* pVar1 = local28;
|
||||
|
||||
do {
|
||||
local14 = pVar1;
|
||||
pVar1 = local14 + -1;
|
||||
|
||||
if (str == local14) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (*pVar1 == '.') {
|
||||
local28 = pVar1;
|
||||
}
|
||||
} while (*pVar1 != '\\');
|
||||
|
||||
local14 = pVar1;
|
||||
|
||||
MxString local24;
|
||||
local14++;
|
||||
*local28 = '\0';
|
||||
return local24 = local14;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user