mirror of https://github.com/OpenRCT2/OpenRCT2.git
Fix intro crash. Caused by incorrect pointer address. Fixed crash on freeing unallocated memory. Fixed audio issue when channels set to zero.
This commit is contained in:
parent
1ece6e4a70
commit
e6f966f395
|
@ -693,32 +693,32 @@ int sound_prepare(int sound_id, rct_sound *sound, int channels, int software)
|
|||
rct_sound_effect* sound_effect = sound_get_effect(sound_id);
|
||||
if (sound_effect) {
|
||||
if (sound_effect_loadvars(sound_effect, &bufferdesc.lpwfxFormat, &buffer, &bufferdesc.dwBufferBytes)) {
|
||||
bufferdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_STATIC;
|
||||
if (channels) {
|
||||
if (channels == 2) {
|
||||
if (channels == 0){
|
||||
bufferdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_STATIC;
|
||||
}
|
||||
else if (channels == 2) {
|
||||
bufferdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRL3D | DSBCAPS_STATIC;
|
||||
} else {
|
||||
} else {
|
||||
bufferdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLPAN | DSBCAPS_CTRLFREQUENCY | DSBCAPS_STATIC;
|
||||
}
|
||||
if (RCT2_GLOBAL(0x009E2B90, uint32)) {
|
||||
bufferdesc.dwFlags |= DSBCAPS_CTRLPAN;
|
||||
}
|
||||
if (software) {
|
||||
bufferdesc.dwFlags |= DSBCAPS_LOCSOFTWARE;
|
||||
}
|
||||
if (SUCCEEDED(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND)->lpVtbl->CreateSoundBuffer(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND), &bufferdesc, &sound->dsbuffer, 0))) {
|
||||
if (sound_fill_buffer(sound->dsbuffer, buffer, bufferdesc.dwBufferBytes)) {
|
||||
sound->id = sound_id;
|
||||
DSBCAPS caps;
|
||||
caps.dwSize = sizeof(caps);
|
||||
sound->dsbuffer->lpVtbl->GetCaps(sound->dsbuffer, &caps);
|
||||
sound->has_caps = caps.dwFlags;
|
||||
sound_add(sound);
|
||||
return 1;
|
||||
}
|
||||
if (RCT2_GLOBAL(0x009E2B90, uint32)) {
|
||||
bufferdesc.dwFlags |= DSBCAPS_CTRLPAN;
|
||||
}
|
||||
if (software) {
|
||||
bufferdesc.dwFlags |= DSBCAPS_LOCSOFTWARE;
|
||||
}
|
||||
if (SUCCEEDED(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND)->lpVtbl->CreateSoundBuffer(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND), &bufferdesc, &sound->dsbuffer, 0))) {
|
||||
if (sound_fill_buffer(sound->dsbuffer, buffer, bufferdesc.dwBufferBytes)) {
|
||||
sound->id = sound_id;
|
||||
DSBCAPS caps;
|
||||
caps.dwSize = sizeof(caps);
|
||||
sound->dsbuffer->lpVtbl->GetCaps(sound->dsbuffer, &caps);
|
||||
sound->has_caps = caps.dwFlags;
|
||||
sound_add(sound);
|
||||
return 1;
|
||||
}
|
||||
sound->dsbuffer->lpVtbl->Release(sound->dsbuffer);
|
||||
sound->dsbuffer = 0;
|
||||
}
|
||||
sound->dsbuffer->lpVtbl->Release(sound->dsbuffer);
|
||||
sound->dsbuffer = 0;
|
||||
}
|
||||
sound->dsbuffer = 0;
|
||||
}
|
||||
|
|
|
@ -136,7 +136,7 @@ void gfx_transpose_palette(int pal, unsigned char product)
|
|||
rct_g1_element g1 = RCT2_ADDRESS(RCT2_ADDRESS_G1_ELEMENTS, rct_g1_element)[pal];
|
||||
int width = g1.width;
|
||||
int x = g1.x_offset;
|
||||
uint8* dest_pointer = (uint8*)&(RCT2_ADDRESS(0x014124680,uint8)[x]);
|
||||
uint8* dest_pointer = (uint8*)&(RCT2_ADDRESS(0x01424680, uint8)[x * 4]);
|
||||
uint8* source_pointer = g1.offset;
|
||||
|
||||
for (; width > 0; width--) {
|
||||
|
|
|
@ -70,7 +70,7 @@ __declspec(dllexport) int StartOpenRCT(HINSTANCE hInstance, HINSTANCE hPrevInsta
|
|||
// Get command line arguments in standard form
|
||||
argv = CommandLineToArgvA(lpCmdLine, &argc);
|
||||
runGame = cmdline_run(argv, argc);
|
||||
LocalFree(argv);
|
||||
//LocalFree(argv);
|
||||
|
||||
if (runGame)
|
||||
openrct2_launch();
|
||||
|
|
Loading…
Reference in New Issue