From d225e74ad0951c9a7649733f1e75345b8bfa17b0 Mon Sep 17 00:00:00 2001 From: zsilencer Date: Fri, 29 Aug 2014 23:53:29 -0600 Subject: [PATCH 1/7] 0x00405465, 0x004016FF, 0x00405222 --- src/audio.c | 176 ++++++++++++++++++++++++++++++++++++++++++++++------ src/audio.h | 14 ++++- 2 files changed, 168 insertions(+), 22 deletions(-) diff --git a/src/audio.c b/src/audio.c index 0b89bc68d3..031e098bea 100644 --- a/src/audio.c +++ b/src/audio.c @@ -354,7 +354,7 @@ int map_sound_info(const char* filename) * * rct2: 0x00405383 */ -MMRESULT sub_405383(HMMIO hmmio, uint32 size, char* buffer, LPMMCKINFO a4, int* read) +MMRESULT mmio_read(HMMIO hmmio, uint32 size, char* buffer, LPMMCKINFO mmckinfo, int* read) { MMIOINFO mmioinfo; MMRESULT result; @@ -364,11 +364,11 @@ MMRESULT sub_405383(HMMIO hmmio, uint32 size, char* buffer, LPMMCKINFO a4, int* return 1; } int size2 = size; - if (size > a4->cksize) { - size2 = a4->cksize; + if (size > mmckinfo->cksize) { + size2 = mmckinfo->cksize; } int v8 = 0; - a4->cksize -= size2; + mmckinfo->cksize -= size2; if (size2) { while (1) { HPSTR p = mmioinfo.pchEndRead; @@ -416,21 +416,157 @@ MMRESULT sub_405383(HMMIO hmmio, uint32 size, char* buffer, LPMMCKINFO a4, int* /** * -* rct2: 0x00401822 +* rct2: 0x00405465 */ -int sub_401822(int channel, HMMIO* hmmio, LONG offset) +MMRESULT mmio_seek(HMMIO* hmmio, LPMMCKINFO mmckinfo1, LPMMCKINFO mmckinfo2, int offset) +{ + mmioSeek(*hmmio, mmckinfo2->dwDataOffset + 4, SEEK_SET); + mmckinfo1->ckid = 1635017060/*DATA*/; + MMRESULT result = mmioDescend(*hmmio, mmckinfo1, mmckinfo2, MMIO_FINDCHUNK); + if (!result) { + mmioSeek(*hmmio, offset, SEEK_CUR); + return 0; + } + return result; +} + +/** +* +* rct2: 0x004016FF +*/ +int sound_channel_load_file(int channel, char* filename, int offset) { rct_sound_channel* sound_channel = &RCT2_ADDRESS(0x014262E0, rct_sound_channel)[channel]; - LPMMCKINFO v4 = &sound_channel->mmckinfo2; - HMMIO* v5 = &sound_channel->hmmio; - if (RCT2_CALLFUNC_4(0x00405222, int, HMMIO*, HMMIO*, HGLOBAL*, LPMMCKINFO, hmmio, &sound_channel->hmmio, &sound_channel->hmem, &sound_channel->mmckinfo2)) { + sound_channel->hmem; + sound_channel->hmmio; + if (mmio_open(filename, &sound_channel->hmmio, &sound_channel->hmem, &sound_channel->mmckinfo2)) { return -100; } if (*(uint16*)sound_channel->hmem != 1) { sound_channel_free(&sound_channel->hmmio, &sound_channel->hmem); return -101; } - if (RCT2_CALLFUNC_4(0x00405465, int, HMMIO*, LPMMCKINFO, LPMMCKINFO, int, &sound_channel->hmmio, &sound_channel->mmckinfo1, &sound_channel->mmckinfo2, offset)) { + if (mmio_seek(&sound_channel->hmmio, &sound_channel->mmckinfo1, &sound_channel->mmckinfo2, offset)) { + sound_channel_free(&sound_channel->hmmio, &sound_channel->hmem); + return -103; + } + sound_channel->var_150 = 120 * *((uint32*)sound_channel->hmem + 2) / 100; + DSBUFFERDESC bufferdesc; + memset(&bufferdesc, 0, sizeof(bufferdesc)); + bufferdesc.dwFlags = RCT2_GLOBAL(0x009E1AA8, uint32) | DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLPAN | DSBCAPS_CTRLFREQUENCY; + bufferdesc.dwBufferBytes = sound_channel->var_150; + bufferdesc.lpwfxFormat = sound_channel->hmem; + bufferdesc.dwSize = sizeof(bufferdesc); + int ret = RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND)->lpVtbl->CreateSoundBuffer(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND), &bufferdesc, &RCT2_ADDRESS(RCT2_ADDRESS_DSOUND_BUFFERS, LPDIRECTSOUNDBUFFER)[channel], 0); + if (FAILED(ret)) { + return -102; + } + sound_channel->dsbuffer = RCT2_ADDRESS(RCT2_ADDRESS_DSOUND_BUFFERS, LPDIRECTSOUNDBUFFER)[channel]; + sound_channel->var_168 = 0; + sound_channel->var_15C = 0; + sound_channel->var_164 = 1; + RCT2_CALLPROC_1(0x004015E7, int, channel); + sound_channel->var_158 = offset; + sound_channel->var_160 = 0; + return 0; +} + +/** +* +* rct2: 0x00405222 +*/ +MMRESULT mmio_open(char* filename, HMMIO* hmmio, HGLOBAL* hmem, LPMMCKINFO mmckinfo) +{ + HGLOBAL* hmemold; + HGLOBAL hmemold2; + HMMIO hmmio1; + MMRESULT result; + MMCKINFO mmckinfo1; + rct_audio_info audio_info; + + hmemold = hmem; + *hmem = 0; + hmmio1 = mmioOpenA(filename, 0, MMIO_ALLOCBUF); + if (hmmio1) { + result = mmioDescend(hmmio1, mmckinfo, 0, 0); + if (result != MMSYSERR_NOERROR) { + goto label20; + } + if (mmckinfo->ckid != 1179011410/*RIFF*/ || mmckinfo->fccType != 1163280727/*WAVE*/) { + result = 57601; + goto label20; + } + mmckinfo1.ckid = 544501094/*fmt*/; + result = mmioDescend(hmmio1, &mmckinfo1, mmckinfo, MMIO_FINDCHUNK); + if (result != MMSYSERR_NOERROR) { + goto label20; + } + if (mmckinfo1.cksize < 16) { + label19: + result = 57601; + goto label20; + } + if (mmioRead(hmmio1, (HPSTR)&audio_info, 16) == 16) { + if (audio_info.var_0 == 1) { + //strcpy(audio_info.var_0, "\x01"); + hmem = 0; + label11: + hmemold2 = GlobalAlloc(0, (uint16)hmem + 18); + *hmemold = hmemold2; + if (!hmemold2) { + result = 57344; + goto label20; + } + memcpy(hmemold2, &audio_info, 16); + *((uint16*)*hmemold + 8) = (uint16)hmem; + if (!(uint16)hmem || mmioRead(hmmio1, (char*)*hmemold + 18, (uint16)hmem) == (uint16)hmem) { + result = mmioAscend(hmmio1, &mmckinfo1, 0); + if (!result) { + goto label24; + } + goto label20; + } + goto label19; + } + if (mmioRead(hmmio1, (HPSTR)&hmem, 2) == 2) { + goto label11; + } + } + result = 57602; + goto label20; + } + result = 57600; + label20: + if (*hmemold) { + GlobalFree(*hmemold); + *hmemold = 0; + } + if (hmmio1) { + mmioClose(hmmio1, 0); + hmmio1 = 0; + } + label24: + *hmmio = hmmio1; + return result; +} + +/** +* +* rct2: 0x00401822 +*/ +int mmio_open_channel(int channel, char* filename, LONG offset) +{ + rct_sound_channel* sound_channel = &RCT2_ADDRESS(0x014262E0, rct_sound_channel)[channel]; + LPMMCKINFO v4 = &sound_channel->mmckinfo2; + HMMIO* v5 = &sound_channel->hmmio; + if (mmio_open(filename, &sound_channel->hmmio, &sound_channel->hmem, &sound_channel->mmckinfo2)) { + return -100; + } + if (*(uint16*)sound_channel->hmem != 1) { + sound_channel_free(&sound_channel->hmmio, &sound_channel->hmem); + return -101; + } + if (mmio_seek(&sound_channel->hmmio, &sound_channel->mmckinfo1, &sound_channel->mmckinfo2, offset)) { sound_channel_free(&sound_channel->hmmio, &sound_channel->hmem); return -103; } @@ -449,14 +585,14 @@ int sub_40153B(int channel) if (sound_channel->hmmio) { sound_channel_free(&sound_channel->hmmio, &sound_channel->hmem); } - if (sub_401822(channel, (HMMIO*)&sound_channel->var_8, sound_channel->var_110)) { + if (mmio_open_channel(channel, sound_channel->filename, sound_channel->var_110)) { return 0; } sound_channel->var_164 = sound_channel->var_114; sound_channel->var_118 = sound_channel->var_110; sound_channel->var_4 = 0; } else { - int result = RCT2_CALLFUNC_4(0x00405465, int, HMMIO*, LPMMCKINFO, LPMMCKINFO, int, &sound_channel->hmmio, &sound_channel->mmckinfo1, &sound_channel->mmckinfo2, sound_channel->var_118); + int result = mmio_seek(&sound_channel->hmmio, &sound_channel->mmckinfo1, &sound_channel->mmckinfo2, sound_channel->var_118); sound_channel->var_158 = sound_channel->var_118; if (result) { return 0; @@ -469,7 +605,7 @@ int sub_40153B(int channel) * * rct2: 0x00401000 */ -void sub_401000(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2, int channel) +void audio_timefunc(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2, int channel) { rct_sound_channel* sound_channel = &RCT2_ADDRESS(0x014262E0, rct_sound_channel)[channel]; DWORD status; @@ -563,7 +699,7 @@ void sub_401000(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD } } int var7; - sub_405383(sound_channel->hmmio, buf1size, buf1, &sound_channel->mmckinfo1, &var7); + mmio_read(sound_channel->hmmio, buf1size, buf1, &sound_channel->mmckinfo1, &var7); if (var7 < buf1size) { if (!sound_channel->var_164) { int s = sound_channel->mmckinfo1.cksize; @@ -592,8 +728,8 @@ void sub_401000(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD do { v38 -= var7; v21 += var7; - sub_40153B(channel);//RCT2_CALLFUNC_1(0x0040153B, int, int, channel); - sub_405383(sound_channel->hmmio, v38, v21, &sound_channel->mmckinfo1, &var7); + sub_40153B(channel); + mmio_read(sound_channel->hmmio, v38, v21, &sound_channel->mmckinfo1, &var7); } while(var7 < v38); } label49: @@ -605,7 +741,7 @@ void sub_401000(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD } goto label68; } - sub_405383(sound_channel->hmmio, buf2size, buf2, &sound_channel->mmckinfo1, &var7); + mmio_read(sound_channel->hmmio, buf2size, buf2, &sound_channel->mmckinfo1, &var7); if (var7 >= buf2size) { label68: sound_channel->dsbuffer->lpVtbl->Unlock(sound_channel->dsbuffer, buf1, buf1size, buf2, buf2size); @@ -624,8 +760,8 @@ void sub_401000(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD do { v26 += var7; v27 -= var7; - sub_40153B(channel);//RCT2_CALLFUNC_1(0x0040153B, int, int, channel); - sub_405383(sound_channel->hmmio, v27, v26, &sound_channel->mmckinfo1, &var7); + sub_40153B(channel); + mmio_read(sound_channel->hmmio, v27, v26, &sound_channel->mmckinfo1, &var7); } while(var7 < v27); goto label68; } @@ -661,7 +797,7 @@ int CALLBACK audio_timer_callback(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DW for (int i = 0; i < 4; i++) { rct_sound_channel* sound_channel = &RCT2_ADDRESS(RCT2_ADDRESS_SOUND_CHANNEL_LIST, rct_sound_channel)[i]; if(sound_channel->var_0){ - sub_401000(uTimerID, uMsg, dwUser, dw1, dw2, i); + audio_timefunc(uTimerID, uMsg, dwUser, dw1, dw2, i); } } return _InterlockedExchange(&RCT2_GLOBAL(0x009E1AAC, LONG), 0); diff --git a/src/audio.h b/src/audio.h index 2848af7840..962d859bf1 100644 --- a/src/audio.h +++ b/src/audio.h @@ -70,8 +70,7 @@ typedef struct { typedef struct { uint32 var_0; uint32 var_4; - uint32 var_8; - uint8 pad_C[0x104]; + char filename[0x108]; // 0x8 uint32 var_110; uint32 var_114; uint32 var_118; @@ -112,6 +111,16 @@ typedef struct { } rct_other_sound; int get_dsound_devices(); +int dsound_create_primary_buffer(int a, int device, int channels, int samples, int bits); +void audio_timefunc(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2, int channel); +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 audio_remove_timer(); +void audio_close(); +LPVOID map_file(LPCSTR lpFileName, DWORD dwCreationDisposition, DWORD dwNumberOfBytesToMap); +int unmap_sound_info(); int sound_prepare(int sound_id, rct_sound *sound, int channels, int software); int sound_play_panned(int sound_id, int x); int sound_play(rct_sound* sound, int looping, int volume, int pan, int frequency); @@ -123,6 +132,7 @@ int sound_channel_play(int channel, int a2, int volume, int pan, int frequency); int sound_channel_set_frequency(int channel, int frequency); int sound_channel_set_pan(int channel, int pan); int sound_channel_set_volume(int channel, int volume); +int sound_channel_load_file(int channel, char* filename, int offset); void sound_channel_free(HMMIO* hmmio, HGLOBAL* hmem); int sound_stop(rct_sound *sound); int sound_stop_all(); From 4d29aaa6bd41495cdf09a078478183e421fde721 Mon Sep 17 00:00:00 2001 From: adrian17 Date: Sat, 30 Aug 2014 14:31:36 +0200 Subject: [PATCH 2/7] Fix #385, made widget_is_enabled return 1 if true --- src/input.c | 7 ++----- src/widget.c | 4 ++-- src/window.c | 4 ++-- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/input.c b/src/input.c index 38d75468f8..437a791c92 100644 --- a/src/input.c +++ b/src/input.c @@ -530,11 +530,8 @@ static void input_leftmousedown(int x, int y, rct_window *w, int widgetIndex) } break; default: - // comment check as it disables the rotate station/building button in construction window -// if (!widget_is_enabled(w, widgetIndex)) -// break; - if (widget_is_disabled(w, widgetIndex)) - break; + if (!widget_is_enabled(w, widgetIndex)) + break; sound_play_panned(SOUND_CLICK_1, w->x + (widget->left + widget->right) / 2); diff --git a/src/widget.c b/src/widget.c index 1006ca3f13..22226cd78f 100644 --- a/src/widget.c +++ b/src/widget.c @@ -946,12 +946,12 @@ static void widget_draw_image(rct_drawpixelinfo *dpi, rct_window *w, int widgetI int widget_is_enabled(rct_window *w, int widgetIndex) { - return w->enabled_widgets & (1LL << widgetIndex); + return (w->enabled_widgets & (1LL << widgetIndex)) ? 1 : 0; } int widget_is_disabled(rct_window *w, int widgetIndex) { - return w->disabled_widgets & (1LL << widgetIndex); + return (w->disabled_widgets & (1LL << widgetIndex)) ? 1 : 0; } int widget_is_pressed(rct_window *w, int widgetIndex) diff --git a/src/window.c b/src/window.c index 27429674d7..355d5770bf 100644 --- a/src/window.c +++ b/src/window.c @@ -1150,7 +1150,7 @@ void window_draw_widgets(rct_window *w, rct_drawpixelinfo *dpi) if ((w->flags & WF_TRANSPARENT) && !(w->flags & WF_5)) gfx_fill_rect(dpi, w->x, w->y, w->x + w->width - 1, w->y + w->height - 1, 0x2000000 | 51); - //some code missing here? Between 006EB18C and 006EB260 + //todo: some code missing here? Between 006EB18C and 006EB260 widgetIndex = 0; for (widget = w->widgets; widget->type != WWT_LAST; widget++) { @@ -1162,7 +1162,7 @@ void window_draw_widgets(rct_window *w, rct_drawpixelinfo *dpi) widgetIndex++; } - //something missing here too? Between 006EC32B and 006EC369 + //todo: something missing here too? Between 006EC32B and 006EC369 if (w->flags & WF_WHITE_BORDER_MASK) { gfx_fill_rect_inset(dpi, w->x, w->y, w->x + w->width - 1, w->y + w->height - 1, 2, 0x10); From 4cce2e38836abec452aea546969ccbfd8380f60a Mon Sep 17 00:00:00 2001 From: adrian17 Date: Sat, 30 Aug 2014 15:29:14 +0200 Subject: [PATCH 3/7] Fixed some buttons not working after last commit --- src/window_game_top_toolbar.c | 1 + src/window_options.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/window_game_top_toolbar.c b/src/window_game_top_toolbar.c index b7f624a598..4825f55128 100644 --- a/src/window_game_top_toolbar.c +++ b/src/window_game_top_toolbar.c @@ -170,6 +170,7 @@ void window_game_top_toolbar_open() (1 << WIDX_RIDES) | (1 << WIDX_PARK) | (1 << WIDX_STAFF) | + (1 << WIDX_GUESTS) | (1 << WIDX_CLEAR_SCENERY) | (1ULL << WIDX_FASTFORWARD) | (1ULL << WIDX_RESEARCH); diff --git a/src/window_options.c b/src/window_options.c index 8190d761ed..926b298c5b 100644 --- a/src/window_options.c +++ b/src/window_options.c @@ -230,6 +230,8 @@ void window_options_open() (1ULL << WIDX_MUSIC_DROPDOWN) | (1ULL << WIDX_SOUND_QUALITY) | (1ULL << WIDX_SOUND_QUALITY_DROPDOWN) | + (1ULL << WIDX_LANGUAGE) | + (1ULL << WIDX_LANGUAGE_DROPDOWN) | (1ULL << WIDX_CURRENCY) | (1ULL << WIDX_CURRENCY_DROPDOWN) | (1ULL << WIDX_DISTANCE) | From b253ad56cee021ffc185349cbb763a3b55f80726 Mon Sep 17 00:00:00 2001 From: hexdec Date: Sat, 30 Aug 2014 15:31:44 +0200 Subject: [PATCH 4/7] Fixed typo in window_staff_peep_stats_update. --- src/window_staff_peep.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/window_staff_peep.c b/src/window_staff_peep.c index c531f8d1e6..1195812b4b 100644 --- a/src/window_staff_peep.c +++ b/src/window_staff_peep.c @@ -691,7 +691,7 @@ void window_staff_peep_stats_update(rct_window* w) window_invalidate_by_id(0x697, w->number); rct_peep* peep = GET_PEEP(w->number); - if (peep->var_45 && 10) { + if (peep->var_45 & 0x10) { peep->var_45 &= 0xEF; window_invalidate(w); } From 81de6e12340bde133b1b866270ff9d8d96d3d3ba Mon Sep 17 00:00:00 2001 From: zsilencer Date: Sat, 30 Aug 2014 13:44:47 -0600 Subject: [PATCH 5/7] 0x004015E7 --- src/audio.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++--- src/audio.h | 2 ++ 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/audio.c b/src/audio.c index 031e098bea..6ad888b962 100644 --- a/src/audio.c +++ b/src/audio.c @@ -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; diff --git a/src/audio.h b/src/audio.h index 962d859bf1..6da01639df 100644 --- a/src/audio.h +++ b/src/audio.h @@ -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); From 858be90222d25a625c06dfaad1c8f4aede109ab9 Mon Sep 17 00:00:00 2001 From: hexdec Date: Sun, 31 Aug 2014 00:06:11 +0200 Subject: [PATCH 6/7] Added the missing enabled_widgets for window_staff_peep. --- src/window_staff_peep.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/window_staff_peep.c b/src/window_staff_peep.c index 1195812b4b..19a5d8076d 100644 --- a/src/window_staff_peep.c +++ b/src/window_staff_peep.c @@ -213,7 +213,12 @@ uint32 window_staff_peep_page_enabled_widgets[] = { (1 << WIDX_CLOSE) | (1 << WIDX_TAB_1) | (1 << WIDX_TAB_2) | - (1 << WIDX_TAB_3), + (1 << WIDX_TAB_3) | + (1 << WIDX_VIEWPORT) | // Sweep footpaths & Inspect rides + (1 << WIDX_BTM_LABEL) | // Water gardens & Fix rides + (1 << WIDX_PICKUP) | // Empty litter bins + (1 << WIDX_PATROL) | // Mow grass + (1 << WIDX_LOCATE), // Entertainer costume dropdown (1 << WIDX_CLOSE) | (1 << WIDX_TAB_1) | @@ -620,7 +625,6 @@ void window_staff_peep_orders_mouseup() case WIDX_BTM_LABEL: case WIDX_PICKUP: case WIDX_PATROL: - case WIDX_RENAME: window_staff_peep_set_order(w, widgetIndex - 8); break; } From d2e27c042809a1475dc3367ae98790ca0bcb8f38 Mon Sep 17 00:00:00 2001 From: hexdec Date: Sun, 31 Aug 2014 00:16:35 +0200 Subject: [PATCH 7/7] Added Widget enums for window_staff_peep. --- src/window_staff_peep.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/window_staff_peep.c b/src/window_staff_peep.c index 19a5d8076d..555818c920 100644 --- a/src/window_staff_peep.c +++ b/src/window_staff_peep.c @@ -50,7 +50,14 @@ enum WINDOW_STAFF_PEEP_WIDGET_IDX { WIDX_PATROL, WIDX_RENAME, WIDX_LOCATE, - WIDX_FIRE + WIDX_FIRE, + + WIDX_CHECKBOX_1 = 0x8, + WIDX_CHECKBOX_2, + WIDX_CHECKBOX_3, + WIDX_CHECKBOX_4, + + WIDX_COSTUME = 0xD, }; void window_staff_peep_emptysub(){}; @@ -214,11 +221,11 @@ uint32 window_staff_peep_page_enabled_widgets[] = { (1 << WIDX_TAB_1) | (1 << WIDX_TAB_2) | (1 << WIDX_TAB_3) | - (1 << WIDX_VIEWPORT) | // Sweep footpaths & Inspect rides - (1 << WIDX_BTM_LABEL) | // Water gardens & Fix rides - (1 << WIDX_PICKUP) | // Empty litter bins - (1 << WIDX_PATROL) | // Mow grass - (1 << WIDX_LOCATE), // Entertainer costume dropdown + (1 << WIDX_CHECKBOX_1) | + (1 << WIDX_CHECKBOX_2) | + (1 << WIDX_CHECKBOX_3) | + (1 << WIDX_CHECKBOX_4) | + (1 << WIDX_COSTUME), (1 << WIDX_CLOSE) | (1 << WIDX_TAB_1) | @@ -621,11 +628,11 @@ void window_staff_peep_orders_mouseup() case WIDX_TAB_3: window_staff_peep_set_page(w, widgetIndex - WIDX_TAB_1); break; - case WIDX_VIEWPORT: - case WIDX_BTM_LABEL: - case WIDX_PICKUP: - case WIDX_PATROL: - window_staff_peep_set_order(w, widgetIndex - 8); + case WIDX_CHECKBOX_1: + case WIDX_CHECKBOX_2: + case WIDX_CHECKBOX_3: + case WIDX_CHECKBOX_4: + window_staff_peep_set_order(w, widgetIndex - WIDX_CHECKBOX_1); break; } }