1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-19 13:03:11 +01:00

0x004015E7

This commit is contained in:
zsilencer
2014-08-30 13:44:47 -06:00
parent d225e74ad0
commit 81de6e1234
2 changed files with 51 additions and 3 deletions

View File

@@ -430,6 +430,52 @@ MMRESULT mmio_seek(HMMIO* hmmio, LPMMCKINFO mmckinfo1, LPMMCKINFO mmckinfo2, int
return result;
}
/**
*
* rct2: 0x004015E7
*/
int sub_4015E7(int channel)
{
char* buf1;
int buf1size;
char* buf2;
int buf2size;
int read;
int zero = 0;
rct_sound_channel* sound_channel = &RCT2_ADDRESS(0x014262E0, rct_sound_channel)[channel];
LPDIRECTSOUNDBUFFER dsbuffer = RCT2_ADDRESS(RCT2_ADDRESS_DSOUND_BUFFERS, LPDIRECTSOUNDBUFFER)[channel];
int result = dsbuffer->lpVtbl->Lock(dsbuffer, 0, sound_channel->var_150, (LPVOID*)&buf1, (LPDWORD)&buf1size, (LPVOID*)&buf2, (LPDWORD)&buf2size, 0);
if (SUCCEEDED(result)) {
if (buf1size) {
mmio_read(sound_channel->hmmio, buf1size, buf1, &sound_channel->mmckinfo1, &read);
int r = read;
if (read < buf1size) {
if (sound_channel->var_164) {
char* b = buf1;
int d = buf1size;
do {
d -= r;
b += r;
sub_40153B(channel);
mmio_read(sound_channel->hmmio, d, b, &sound_channel->mmckinfo1, &read);
r = read;
} while(read < d);
} else {
sound_channel->var_168 = 1;
sound_channel->var_15C = read;
rct_audio_info* audio_info = sound_channel->hmem;
uint16 v = ((audio_info->var_E != 8) - 1) & 0x80;
memset(&buf1[read], v, buf1size - r);
}
}
}
result = dsbuffer->lpVtbl->Unlock(dsbuffer, buf1, buf1size, buf2, zero);
sound_channel->var_158 = 0;
sound_channel->playpos = 0;
}
return result;
}
/**
*
* rct2: 0x004016FF
@@ -465,7 +511,7 @@ int sound_channel_load_file(int channel, char* filename, int offset)
sound_channel->var_168 = 0;
sound_channel->var_15C = 0;
sound_channel->var_164 = 1;
RCT2_CALLPROC_1(0x004015E7, int, channel);
sub_4015E7(channel);
sound_channel->var_158 = offset;
sound_channel->var_160 = 0;
return 0;
@@ -1052,9 +1098,9 @@ int sound_prepare(int sound_id, rct_sound *sound, int channels, int software)
bufferdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_STATIC;
if (channels) {
if (channels == 2) {
bufferdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLPAN | DSBCAPS_CTRLFREQUENCY | DSBCAPS_STATIC;
} else {
bufferdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRL3D | DSBCAPS_STATIC;
} else {
bufferdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLPAN | DSBCAPS_CTRLFREQUENCY | DSBCAPS_STATIC;
}
if (RCT2_GLOBAL(0x009E2B90, uint32)) {
bufferdesc.dwFlags |= DSBCAPS_CTRLPAN;

View File

@@ -117,6 +117,8 @@ int audio_release();
MMRESULT mmio_read(HMMIO hmmio, uint32 size, char* buffer, LPMMCKINFO mmckinfo, int* read);
MMRESULT mmio_seek(HMMIO* hmmio, LPMMCKINFO mmckinfo1, LPMMCKINFO mmckinfo2, int offset);
MMRESULT mmio_open(char* filename, HMMIO* hmmio, HGLOBAL* hmem, LPMMCKINFO mmckinfo);
int sub_40153B(int channel);
int sub_4015E7(int channel);
int audio_remove_timer();
void audio_close();
LPVOID map_file(LPCSTR lpFileName, DWORD dwCreationDisposition, DWORD dwNumberOfBytesToMap);