mirror of https://github.com/OpenRCT2/OpenRCT2.git
Merge remote-tracking branch 'IntelOrca/master'
This commit is contained in:
commit
094a5083ae
226
src/audio.c
226
src/audio.c
|
@ -354,7 +354,7 @@ int map_sound_info(const char* filename)
|
||||||
*
|
*
|
||||||
* rct2: 0x00405383
|
* 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;
|
MMIOINFO mmioinfo;
|
||||||
MMRESULT result;
|
MMRESULT result;
|
||||||
|
@ -364,11 +364,11 @@ MMRESULT sub_405383(HMMIO hmmio, uint32 size, char* buffer, LPMMCKINFO a4, int*
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
int size2 = size;
|
int size2 = size;
|
||||||
if (size > a4->cksize) {
|
if (size > mmckinfo->cksize) {
|
||||||
size2 = a4->cksize;
|
size2 = mmckinfo->cksize;
|
||||||
}
|
}
|
||||||
int v8 = 0;
|
int v8 = 0;
|
||||||
a4->cksize -= size2;
|
mmckinfo->cksize -= size2;
|
||||||
if (size2) {
|
if (size2) {
|
||||||
while (1) {
|
while (1) {
|
||||||
HPSTR p = mmioinfo.pchEndRead;
|
HPSTR p = mmioinfo.pchEndRead;
|
||||||
|
@ -416,21 +416,203 @@ 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: 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
|
||||||
|
*/
|
||||||
|
int sound_channel_load_file(int channel, char* filename, int offset)
|
||||||
{
|
{
|
||||||
rct_sound_channel* sound_channel = &RCT2_ADDRESS(0x014262E0, rct_sound_channel)[channel];
|
rct_sound_channel* sound_channel = &RCT2_ADDRESS(0x014262E0, rct_sound_channel)[channel];
|
||||||
LPMMCKINFO v4 = &sound_channel->mmckinfo2;
|
sound_channel->hmem;
|
||||||
HMMIO* v5 = &sound_channel->hmmio;
|
sound_channel->hmmio;
|
||||||
if (RCT2_CALLFUNC_4(0x00405222, int, HMMIO*, HMMIO*, HGLOBAL*, LPMMCKINFO, hmmio, &sound_channel->hmmio, &sound_channel->hmem, &sound_channel->mmckinfo2)) {
|
if (mmio_open(filename, &sound_channel->hmmio, &sound_channel->hmem, &sound_channel->mmckinfo2)) {
|
||||||
return -100;
|
return -100;
|
||||||
}
|
}
|
||||||
if (*(uint16*)sound_channel->hmem != 1) {
|
if (*(uint16*)sound_channel->hmem != 1) {
|
||||||
sound_channel_free(&sound_channel->hmmio, &sound_channel->hmem);
|
sound_channel_free(&sound_channel->hmmio, &sound_channel->hmem);
|
||||||
return -101;
|
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;
|
||||||
|
sub_4015E7(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);
|
sound_channel_free(&sound_channel->hmmio, &sound_channel->hmem);
|
||||||
return -103;
|
return -103;
|
||||||
}
|
}
|
||||||
|
@ -449,14 +631,14 @@ int sub_40153B(int channel)
|
||||||
if (sound_channel->hmmio) {
|
if (sound_channel->hmmio) {
|
||||||
sound_channel_free(&sound_channel->hmmio, &sound_channel->hmem);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
sound_channel->var_164 = sound_channel->var_114;
|
sound_channel->var_164 = sound_channel->var_114;
|
||||||
sound_channel->var_118 = sound_channel->var_110;
|
sound_channel->var_118 = sound_channel->var_110;
|
||||||
sound_channel->var_4 = 0;
|
sound_channel->var_4 = 0;
|
||||||
} else {
|
} 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;
|
sound_channel->var_158 = sound_channel->var_118;
|
||||||
if (result) {
|
if (result) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -469,7 +651,7 @@ int sub_40153B(int channel)
|
||||||
*
|
*
|
||||||
* rct2: 0x00401000
|
* 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];
|
rct_sound_channel* sound_channel = &RCT2_ADDRESS(0x014262E0, rct_sound_channel)[channel];
|
||||||
DWORD status;
|
DWORD status;
|
||||||
|
@ -563,7 +745,7 @@ void sub_401000(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int var7;
|
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 (var7 < buf1size) {
|
||||||
if (!sound_channel->var_164) {
|
if (!sound_channel->var_164) {
|
||||||
int s = sound_channel->mmckinfo1.cksize;
|
int s = sound_channel->mmckinfo1.cksize;
|
||||||
|
@ -592,8 +774,8 @@ void sub_401000(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD
|
||||||
do {
|
do {
|
||||||
v38 -= var7;
|
v38 -= var7;
|
||||||
v21 += var7;
|
v21 += var7;
|
||||||
sub_40153B(channel);//RCT2_CALLFUNC_1(0x0040153B, int, int, channel);
|
sub_40153B(channel);
|
||||||
sub_405383(sound_channel->hmmio, v38, v21, &sound_channel->mmckinfo1, &var7);
|
mmio_read(sound_channel->hmmio, v38, v21, &sound_channel->mmckinfo1, &var7);
|
||||||
} while(var7 < v38);
|
} while(var7 < v38);
|
||||||
}
|
}
|
||||||
label49:
|
label49:
|
||||||
|
@ -605,7 +787,7 @@ void sub_401000(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD
|
||||||
}
|
}
|
||||||
goto label68;
|
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) {
|
if (var7 >= buf2size) {
|
||||||
label68:
|
label68:
|
||||||
sound_channel->dsbuffer->lpVtbl->Unlock(sound_channel->dsbuffer, buf1, buf1size, buf2, buf2size);
|
sound_channel->dsbuffer->lpVtbl->Unlock(sound_channel->dsbuffer, buf1, buf1size, buf2, buf2size);
|
||||||
|
@ -624,8 +806,8 @@ void sub_401000(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD
|
||||||
do {
|
do {
|
||||||
v26 += var7;
|
v26 += var7;
|
||||||
v27 -= var7;
|
v27 -= var7;
|
||||||
sub_40153B(channel);//RCT2_CALLFUNC_1(0x0040153B, int, int, channel);
|
sub_40153B(channel);
|
||||||
sub_405383(sound_channel->hmmio, v27, v26, &sound_channel->mmckinfo1, &var7);
|
mmio_read(sound_channel->hmmio, v27, v26, &sound_channel->mmckinfo1, &var7);
|
||||||
} while(var7 < v27);
|
} while(var7 < v27);
|
||||||
goto label68;
|
goto label68;
|
||||||
}
|
}
|
||||||
|
@ -661,7 +843,7 @@ int CALLBACK audio_timer_callback(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DW
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
rct_sound_channel* sound_channel = &RCT2_ADDRESS(RCT2_ADDRESS_SOUND_CHANNEL_LIST, rct_sound_channel)[i];
|
rct_sound_channel* sound_channel = &RCT2_ADDRESS(RCT2_ADDRESS_SOUND_CHANNEL_LIST, rct_sound_channel)[i];
|
||||||
if(sound_channel->var_0){
|
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);
|
return _InterlockedExchange(&RCT2_GLOBAL(0x009E1AAC, LONG), 0);
|
||||||
|
@ -916,9 +1098,9 @@ int sound_prepare(int sound_id, rct_sound *sound, int channels, int software)
|
||||||
bufferdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_STATIC;
|
bufferdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_STATIC;
|
||||||
if (channels) {
|
if (channels) {
|
||||||
if (channels == 2) {
|
if (channels == 2) {
|
||||||
bufferdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLPAN | DSBCAPS_CTRLFREQUENCY | DSBCAPS_STATIC;
|
|
||||||
} else {
|
|
||||||
bufferdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRL3D | DSBCAPS_STATIC;
|
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)) {
|
if (RCT2_GLOBAL(0x009E2B90, uint32)) {
|
||||||
bufferdesc.dwFlags |= DSBCAPS_CTRLPAN;
|
bufferdesc.dwFlags |= DSBCAPS_CTRLPAN;
|
||||||
|
|
16
src/audio.h
16
src/audio.h
|
@ -70,8 +70,7 @@ typedef struct {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32 var_0;
|
uint32 var_0;
|
||||||
uint32 var_4;
|
uint32 var_4;
|
||||||
uint32 var_8;
|
char filename[0x108]; // 0x8
|
||||||
uint8 pad_C[0x104];
|
|
||||||
uint32 var_110;
|
uint32 var_110;
|
||||||
uint32 var_114;
|
uint32 var_114;
|
||||||
uint32 var_118;
|
uint32 var_118;
|
||||||
|
@ -112,6 +111,18 @@ typedef struct {
|
||||||
} rct_other_sound;
|
} rct_other_sound;
|
||||||
|
|
||||||
int get_dsound_devices();
|
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 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);
|
||||||
|
int unmap_sound_info();
|
||||||
int sound_prepare(int sound_id, rct_sound *sound, int channels, int software);
|
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_panned(int sound_id, int x);
|
||||||
int sound_play(rct_sound* sound, int looping, int volume, int pan, int frequency);
|
int sound_play(rct_sound* sound, int looping, int volume, int pan, int frequency);
|
||||||
|
@ -123,6 +134,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_frequency(int channel, int frequency);
|
||||||
int sound_channel_set_pan(int channel, int pan);
|
int sound_channel_set_pan(int channel, int pan);
|
||||||
int sound_channel_set_volume(int channel, int volume);
|
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);
|
void sound_channel_free(HMMIO* hmmio, HGLOBAL* hmem);
|
||||||
int sound_stop(rct_sound *sound);
|
int sound_stop(rct_sound *sound);
|
||||||
int sound_stop_all();
|
int sound_stop_all();
|
||||||
|
|
|
@ -530,11 +530,8 @@ static void input_leftmousedown(int x, int y, rct_window *w, int widgetIndex)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// comment check as it disables the rotate station/building button in construction window
|
if (!widget_is_enabled(w, widgetIndex))
|
||||||
// if (!widget_is_enabled(w, widgetIndex))
|
break;
|
||||||
// break;
|
|
||||||
if (widget_is_disabled(w, widgetIndex))
|
|
||||||
break;
|
|
||||||
|
|
||||||
sound_play_panned(SOUND_CLICK_1, w->x + (widget->left + widget->right) / 2);
|
sound_play_panned(SOUND_CLICK_1, w->x + (widget->left + widget->right) / 2);
|
||||||
|
|
||||||
|
|
|
@ -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)
|
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)
|
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)
|
int widget_is_pressed(rct_window *w, int widgetIndex)
|
||||||
|
|
|
@ -1150,7 +1150,7 @@ void window_draw_widgets(rct_window *w, rct_drawpixelinfo *dpi)
|
||||||
if ((w->flags & WF_TRANSPARENT) && !(w->flags & WF_5))
|
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);
|
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;
|
widgetIndex = 0;
|
||||||
for (widget = w->widgets; widget->type != WWT_LAST; widget++) {
|
for (widget = w->widgets; widget->type != WWT_LAST; widget++) {
|
||||||
|
@ -1162,7 +1162,7 @@ void window_draw_widgets(rct_window *w, rct_drawpixelinfo *dpi)
|
||||||
widgetIndex++;
|
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) {
|
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);
|
gfx_fill_rect_inset(dpi, w->x, w->y, w->x + w->width - 1, w->y + w->height - 1, 2, 0x10);
|
||||||
|
|
|
@ -170,6 +170,7 @@ void window_game_top_toolbar_open()
|
||||||
(1 << WIDX_RIDES) |
|
(1 << WIDX_RIDES) |
|
||||||
(1 << WIDX_PARK) |
|
(1 << WIDX_PARK) |
|
||||||
(1 << WIDX_STAFF) |
|
(1 << WIDX_STAFF) |
|
||||||
|
(1 << WIDX_GUESTS) |
|
||||||
(1 << WIDX_CLEAR_SCENERY) |
|
(1 << WIDX_CLEAR_SCENERY) |
|
||||||
(1ULL << WIDX_FASTFORWARD) |
|
(1ULL << WIDX_FASTFORWARD) |
|
||||||
(1ULL << WIDX_RESEARCH);
|
(1ULL << WIDX_RESEARCH);
|
||||||
|
|
|
@ -230,6 +230,8 @@ void window_options_open()
|
||||||
(1ULL << WIDX_MUSIC_DROPDOWN) |
|
(1ULL << WIDX_MUSIC_DROPDOWN) |
|
||||||
(1ULL << WIDX_SOUND_QUALITY) |
|
(1ULL << WIDX_SOUND_QUALITY) |
|
||||||
(1ULL << WIDX_SOUND_QUALITY_DROPDOWN) |
|
(1ULL << WIDX_SOUND_QUALITY_DROPDOWN) |
|
||||||
|
(1ULL << WIDX_LANGUAGE) |
|
||||||
|
(1ULL << WIDX_LANGUAGE_DROPDOWN) |
|
||||||
(1ULL << WIDX_CURRENCY) |
|
(1ULL << WIDX_CURRENCY) |
|
||||||
(1ULL << WIDX_CURRENCY_DROPDOWN) |
|
(1ULL << WIDX_CURRENCY_DROPDOWN) |
|
||||||
(1ULL << WIDX_DISTANCE) |
|
(1ULL << WIDX_DISTANCE) |
|
||||||
|
|
|
@ -50,7 +50,14 @@ enum WINDOW_STAFF_PEEP_WIDGET_IDX {
|
||||||
WIDX_PATROL,
|
WIDX_PATROL,
|
||||||
WIDX_RENAME,
|
WIDX_RENAME,
|
||||||
WIDX_LOCATE,
|
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(){};
|
void window_staff_peep_emptysub(){};
|
||||||
|
@ -213,7 +220,12 @@ uint32 window_staff_peep_page_enabled_widgets[] = {
|
||||||
(1 << WIDX_CLOSE) |
|
(1 << WIDX_CLOSE) |
|
||||||
(1 << WIDX_TAB_1) |
|
(1 << WIDX_TAB_1) |
|
||||||
(1 << WIDX_TAB_2) |
|
(1 << WIDX_TAB_2) |
|
||||||
(1 << WIDX_TAB_3),
|
(1 << WIDX_TAB_3) |
|
||||||
|
(1 << WIDX_CHECKBOX_1) |
|
||||||
|
(1 << WIDX_CHECKBOX_2) |
|
||||||
|
(1 << WIDX_CHECKBOX_3) |
|
||||||
|
(1 << WIDX_CHECKBOX_4) |
|
||||||
|
(1 << WIDX_COSTUME),
|
||||||
|
|
||||||
(1 << WIDX_CLOSE) |
|
(1 << WIDX_CLOSE) |
|
||||||
(1 << WIDX_TAB_1) |
|
(1 << WIDX_TAB_1) |
|
||||||
|
@ -616,12 +628,11 @@ void window_staff_peep_orders_mouseup()
|
||||||
case WIDX_TAB_3:
|
case WIDX_TAB_3:
|
||||||
window_staff_peep_set_page(w, widgetIndex - WIDX_TAB_1);
|
window_staff_peep_set_page(w, widgetIndex - WIDX_TAB_1);
|
||||||
break;
|
break;
|
||||||
case WIDX_VIEWPORT:
|
case WIDX_CHECKBOX_1:
|
||||||
case WIDX_BTM_LABEL:
|
case WIDX_CHECKBOX_2:
|
||||||
case WIDX_PICKUP:
|
case WIDX_CHECKBOX_3:
|
||||||
case WIDX_PATROL:
|
case WIDX_CHECKBOX_4:
|
||||||
case WIDX_RENAME:
|
window_staff_peep_set_order(w, widgetIndex - WIDX_CHECKBOX_1);
|
||||||
window_staff_peep_set_order(w, widgetIndex - 8);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -691,7 +702,7 @@ void window_staff_peep_stats_update(rct_window* w)
|
||||||
window_invalidate_by_id(0x697, w->number);
|
window_invalidate_by_id(0x697, w->number);
|
||||||
|
|
||||||
rct_peep* peep = GET_PEEP(w->number);
|
rct_peep* peep = GET_PEEP(w->number);
|
||||||
if (peep->var_45 && 10) {
|
if (peep->var_45 & 0x10) {
|
||||||
peep->var_45 &= 0xEF;
|
peep->var_45 &= 0xEF;
|
||||||
window_invalidate(w);
|
window_invalidate(w);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue