mirror of https://github.com/OpenRCT2/OpenRCT2.git
0x006BBC6B, hook
This commit is contained in:
parent
48b13231b9
commit
298de189f5
|
@ -28,6 +28,7 @@
|
||||||
<ClInclude Include="..\src\game.h" />
|
<ClInclude Include="..\src\game.h" />
|
||||||
<ClInclude Include="..\src\gfx.h" />
|
<ClInclude Include="..\src\gfx.h" />
|
||||||
<ClInclude Include="..\src\graph.h" />
|
<ClInclude Include="..\src\graph.h" />
|
||||||
|
<ClInclude Include="..\src\hook.h" />
|
||||||
<ClInclude Include="..\src\input.h" />
|
<ClInclude Include="..\src\input.h" />
|
||||||
<ClInclude Include="..\src\intro.h" />
|
<ClInclude Include="..\src\intro.h" />
|
||||||
<ClInclude Include="..\src\language.h" />
|
<ClInclude Include="..\src\language.h" />
|
||||||
|
@ -79,6 +80,7 @@
|
||||||
<ClCompile Include="..\src\game.c" />
|
<ClCompile Include="..\src\game.c" />
|
||||||
<ClCompile Include="..\src\gfx.c" />
|
<ClCompile Include="..\src\gfx.c" />
|
||||||
<ClCompile Include="..\src\graph.c" />
|
<ClCompile Include="..\src\graph.c" />
|
||||||
|
<ClCompile Include="..\src\hook.c" />
|
||||||
<ClCompile Include="..\src\input.c" />
|
<ClCompile Include="..\src\input.c" />
|
||||||
<ClCompile Include="..\src\intro.c" />
|
<ClCompile Include="..\src\intro.c" />
|
||||||
<ClCompile Include="..\src\language.c" />
|
<ClCompile Include="..\src\language.c" />
|
||||||
|
|
|
@ -168,6 +168,12 @@
|
||||||
<ClInclude Include="..\src\window_scenery.h">
|
<ClInclude Include="..\src\window_scenery.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\scenery.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\hook.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\src\game.c">
|
<ClCompile Include="..\src\game.c">
|
||||||
|
@ -398,6 +404,15 @@
|
||||||
<ClCompile Include="..\libspeex\resample.c">
|
<ClCompile Include="..\libspeex\resample.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\mixer.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\window_scenery.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\hook.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\openrct2.exe">
|
<None Include="..\openrct2.exe">
|
||||||
|
@ -426,5 +441,6 @@
|
||||||
<Text Include="..\data\language\spanish_sp.txt">
|
<Text Include="..\data\language\spanish_sp.txt">
|
||||||
<Filter>Data\Language</Filter>
|
<Filter>Data\Language</Filter>
|
||||||
</Text>
|
</Text>
|
||||||
|
<Text Include="..\data\language\swedish.txt" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -1586,12 +1586,12 @@ void stop_vehicle_sounds()
|
||||||
for (int i = 0; i < 7; i++) {
|
for (int i = 0; i < 7; i++) {
|
||||||
rct_vehicle_sound* vehicle_sound = &RCT2_ADDRESS(RCT2_ADDRESS_VEHICLE_SOUND_LIST, rct_vehicle_sound)[i];
|
rct_vehicle_sound* vehicle_sound = &RCT2_ADDRESS(RCT2_ADDRESS_VEHICLE_SOUND_LIST, rct_vehicle_sound)[i];
|
||||||
if (vehicle_sound->id != 0xFFFF) {
|
if (vehicle_sound->id != 0xFFFF) {
|
||||||
if (vehicle_sound->var_18 != 0xFFFF) {
|
if (vehicle_sound->sound1_id != 0xFFFF) {
|
||||||
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
sound_stop(&vehicle_sound->sound1);
|
sound_stop(&vehicle_sound->sound1);
|
||||||
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
}
|
}
|
||||||
if (vehicle_sound->var_34 != 0xFFFF) {
|
if (vehicle_sound->sound2_id != 0xFFFF) {
|
||||||
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
sound_stop(&vehicle_sound->sound2);
|
sound_stop(&vehicle_sound->sound2);
|
||||||
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
|
|
22
src/audio.h
22
src/audio.h
|
@ -90,15 +90,15 @@ typedef struct {
|
||||||
uint16 id;
|
uint16 id;
|
||||||
uint16 var_2;
|
uint16 var_2;
|
||||||
rct_sound sound1; // 0x04
|
rct_sound sound1; // 0x04
|
||||||
uint16 var_18;
|
uint16 sound1_id; // 0x18
|
||||||
uint16 var_1A;
|
sint16 sound1_volume; // 0x1A
|
||||||
uint16 var_1C;
|
sint16 sound1_pan; // 0x1C
|
||||||
uint16 var_1D;
|
uint16 sound1_freq;
|
||||||
rct_sound sound2; // 0x20
|
rct_sound sound2; // 0x20
|
||||||
uint16 var_34;
|
uint16 sound2_id; // 0x34
|
||||||
uint16 pad_36;
|
sint16 sound2_volume; // 0x36
|
||||||
uint16 var_38;
|
sint16 sound2_pan; // 0x38
|
||||||
uint16 var_3A;
|
uint16 sound2_freq; // 0x3A
|
||||||
} rct_vehicle_sound;
|
} rct_vehicle_sound;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -108,11 +108,11 @@ typedef struct {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint16 id;
|
uint16 id;
|
||||||
sint16 var_2;
|
sint16 pan; // 0x2
|
||||||
sint16 var_4;
|
sint16 var_4;
|
||||||
uint16 frequency; // 0x6
|
uint16 frequency; // 0x6
|
||||||
sint16 var_8;
|
sint16 var_8;
|
||||||
uint16 next; // 0xA
|
uint16 next; // 0xA
|
||||||
} rct_sound_unknown;
|
} rct_sound_unknown;
|
||||||
|
|
||||||
int get_dsound_devices();
|
int get_dsound_devices();
|
||||||
|
|
|
@ -383,7 +383,7 @@ void game_logic_update()
|
||||||
RCT2_CALLPROC_EBPSAFE(0x006B5A2A);
|
RCT2_CALLPROC_EBPSAFE(0x006B5A2A);
|
||||||
RCT2_CALLPROC_EBPSAFE(0x006B6456); // update ride measurements
|
RCT2_CALLPROC_EBPSAFE(0x006B6456); // update ride measurements
|
||||||
RCT2_CALLPROC_EBPSAFE(0x0068AFAD);
|
RCT2_CALLPROC_EBPSAFE(0x0068AFAD);
|
||||||
RCT2_CALLPROC_EBPSAFE(0x006BBC6B); // vehicle and scream sounds
|
vehicle_sounds_update();//RCT2_CALLPROC_EBPSAFE(0x006BBC6B); // vehicle and scream sounds
|
||||||
peep_update_crowd_noise();
|
peep_update_crowd_noise();
|
||||||
climate_update_sound();
|
climate_update_sound();
|
||||||
news_item_update_current();
|
news_item_update_current();
|
||||||
|
|
|
@ -115,8 +115,8 @@ private:
|
||||||
SDL_AudioDeviceID deviceid;
|
SDL_AudioDeviceID deviceid;
|
||||||
AudioFormat format;
|
AudioFormat format;
|
||||||
uint8* effectbuffer;
|
uint8* effectbuffer;
|
||||||
Sample css1samples[63];
|
Sample css1samples[SOUND_MAXID];
|
||||||
Stream css1streams[63];
|
Stream css1streams[SOUND_MAXID];
|
||||||
Channel channels[10];
|
Channel channels[10];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
308
src/vehicle.c
308
src/vehicle.c
|
@ -63,8 +63,8 @@ void sub_6BB9FF(rct_vehicle* vehicle)
|
||||||
}
|
}
|
||||||
rct_sound_unknown* j = RCT2_GLOBAL(0x00F438B0, rct_sound_unknown*) - 1;
|
rct_sound_unknown* j = RCT2_GLOBAL(0x00F438B0, rct_sound_unknown*) - 1;
|
||||||
while (j >= i) {
|
while (j >= i) {
|
||||||
*(j + 1) = *j;
|
|
||||||
j--;
|
j--;
|
||||||
|
*(j + 1) = *j;
|
||||||
}
|
}
|
||||||
i->next = v9;
|
i->next = v9;
|
||||||
rct_widthheight v12;
|
rct_widthheight v12;
|
||||||
|
@ -78,7 +78,7 @@ void sub_6BB9FF(rct_vehicle* vehicle)
|
||||||
v14 = 64;
|
v14 = 64;
|
||||||
}
|
}
|
||||||
rct_widthheight v15;
|
rct_widthheight v15;
|
||||||
i->var_2 = (((v12.width << 16) / v14) - 0x8000) >> 4;
|
i->pan = (((((uint32)v12.width << 16) / v14) - 0x8000) >> 4);
|
||||||
v15.width = 0;
|
v15.width = 0;
|
||||||
v15.height = (RCT2_GLOBAL(0x009AF5A0, rct_widthheight).height / 2) + (RCT2_GLOBAL(0x009AF5A4, rct_widthheight).height / 2) - RCT2_GLOBAL(0x00F438A4, rct_viewport*)->view_y;
|
v15.height = (RCT2_GLOBAL(0x009AF5A0, rct_widthheight).height / 2) + (RCT2_GLOBAL(0x009AF5A4, rct_widthheight).height / 2) - RCT2_GLOBAL(0x00F438A4, rct_viewport*)->view_y;
|
||||||
v15.height >>= RCT2_GLOBAL(0x00F438A4, rct_viewport*)->zoom;
|
v15.height >>= RCT2_GLOBAL(0x00F438A4, rct_viewport*)->zoom;
|
||||||
|
@ -88,7 +88,7 @@ void sub_6BB9FF(rct_vehicle* vehicle)
|
||||||
if (v18 < 64) {
|
if (v18 < 64) {
|
||||||
v18 = 64;
|
v18 = 64;
|
||||||
}
|
}
|
||||||
i->var_4 = (sint16)((v15.both / v18) - 0x8000) >> 4;
|
i->var_4 = (sint16)(((v15.both / v18) - 0x8000) >> 4);
|
||||||
sint32 v19 = vehicle->var_28;
|
sint32 v19 = vehicle->var_28;
|
||||||
|
|
||||||
int testaddr = (vehicle->var_31 * 0x65);
|
int testaddr = (vehicle->var_31 * 0x65);
|
||||||
|
@ -153,6 +153,308 @@ int sub_6BC2F3(rct_vehicle* vehicle)
|
||||||
return result + 300;
|
return result + 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* rct2: 0x006BBC6B
|
||||||
|
*/
|
||||||
|
void vehicle_sounds_update()
|
||||||
|
{
|
||||||
|
uint16 result;
|
||||||
|
if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_SOUND_DEVICE, uint32) != -1 && !RCT2_GLOBAL(0x009AF59C, uint8) && RCT2_GLOBAL(0x009AF59D, uint8) & 1) {
|
||||||
|
RCT2_GLOBAL(0x00F438A4, rct_viewport*) = (rct_viewport*)-1;
|
||||||
|
rct_window* window = RCT2_GLOBAL(RCT2_ADDRESS_NEW_WINDOW_PTR, rct_window*);
|
||||||
|
rct_viewport* viewport = (rct_viewport*)-1;
|
||||||
|
for (window = RCT2_GLOBAL(RCT2_ADDRESS_NEW_WINDOW_PTR, rct_window*); window >= RCT2_ADDRESS(RCT2_ADDRESS_WINDOW_LIST, rct_window); window--) {
|
||||||
|
viewport = window->viewport;
|
||||||
|
if (viewport && viewport->flags & VIEWPORT_FLAG_SOUND_ON) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RCT2_GLOBAL(0x00F438A4, rct_viewport*) = viewport;
|
||||||
|
if (viewport != (rct_viewport*)-1) {
|
||||||
|
if (window) {
|
||||||
|
RCT2_GLOBAL(0x00F438A4, rct_viewport*) = window->viewport;
|
||||||
|
RCT2_GLOBAL(0x00F438A8, rct_window*) = window;
|
||||||
|
RCT2_GLOBAL(0x00F438AC, uint8) = 0;
|
||||||
|
if (viewport->zoom) {
|
||||||
|
RCT2_GLOBAL(0x00F438AC, uint8) = 35;
|
||||||
|
if (viewport->zoom != 1) {
|
||||||
|
RCT2_GLOBAL(0x00F438AC, uint8) = 70;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//label12:
|
||||||
|
RCT2_GLOBAL(0x00F438B0, rct_sound_unknown**) = &RCT2_GLOBAL(0x00F438B4, rct_sound_unknown*);
|
||||||
|
for (uint16 i = RCT2_GLOBAL(RCT2_ADDRESS_SPRITES_START_VEHICLE, uint16); i != SPRITE_INDEX_NULL; i = g_sprite_list[i].vehicle.next) {
|
||||||
|
sub_6BB9FF(&g_sprite_list[i].vehicle);
|
||||||
|
}
|
||||||
|
RCT2_ADDRESS_VEHICLE_SOUND_LIST;
|
||||||
|
for (rct_vehicle_sound* vehicle_sound = &RCT2_GLOBAL(RCT2_ADDRESS_VEHICLE_SOUND_LIST, rct_vehicle_sound); vehicle_sound != &RCT2_GLOBAL(0x009AF42C, rct_vehicle_sound); vehicle_sound++) {
|
||||||
|
if (vehicle_sound->id != (uint16)-1) {
|
||||||
|
for (rct_sound_unknown* sound_unknown = &RCT2_GLOBAL(0x00F438B4, rct_sound_unknown); sound_unknown != RCT2_GLOBAL(0x00F438B0, rct_sound_unknown*); sound_unknown++) {
|
||||||
|
if (vehicle_sound->id == sound_unknown->id) {
|
||||||
|
goto label26;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (vehicle_sound->sound1_id != (uint16)-1) {
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
|
sound_stop(&vehicle_sound->sound1);
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
|
}
|
||||||
|
if (vehicle_sound->sound2_id != (uint16)-1) {
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
|
sound_stop(&vehicle_sound->sound2);
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
|
}
|
||||||
|
vehicle_sound->id = (uint16)-1;
|
||||||
|
}
|
||||||
|
label26:
|
||||||
|
1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (rct_sound_unknown* sound_unknown = &RCT2_GLOBAL(0x00F438B4, rct_sound_unknown); sound_unknown != RCT2_GLOBAL(0x00F438B0, rct_sound_unknown*); sound_unknown++) {
|
||||||
|
label28:
|
||||||
|
result = (uint16)-1;
|
||||||
|
sint16 v = sound_unknown->var_4;
|
||||||
|
if (v < 0) {
|
||||||
|
v = -v;
|
||||||
|
}
|
||||||
|
if (v > 0xFFF) {
|
||||||
|
v = 0xFFF;
|
||||||
|
}
|
||||||
|
v -= 0x800;
|
||||||
|
if (v > 0) {
|
||||||
|
v -= 0x400;
|
||||||
|
v = -v;
|
||||||
|
(uint16)v /= 4;
|
||||||
|
result = MAKEWORD(LOBYTE(v), HIBYTE(result));
|
||||||
|
if (HIBYTE(v) != 0) {
|
||||||
|
result = MAKEWORD(0xFF, HIBYTE(result));
|
||||||
|
if (HIBYTE(v) < 0) {
|
||||||
|
result = MAKEWORD(0, HIBYTE(result));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sint16 w = sound_unknown->pan;
|
||||||
|
if (w < 0) {
|
||||||
|
w = -w;
|
||||||
|
}
|
||||||
|
if (w > 0xFFF) {
|
||||||
|
w = 0xFFF;
|
||||||
|
}
|
||||||
|
w -= 0x800;
|
||||||
|
if (w > 0) {
|
||||||
|
w -= 0x400;
|
||||||
|
w = -w;
|
||||||
|
(uint16)w /= 4;
|
||||||
|
result = MAKEWORD(LOBYTE(result), LOBYTE(w));
|
||||||
|
if (HIBYTE(w) != 0) {
|
||||||
|
result = MAKEWORD(LOBYTE(result), 0xFF);
|
||||||
|
if (HIBYTE(w) < 0) {
|
||||||
|
result = MAKEWORD(LOBYTE(result), 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (LOBYTE(result) >= HIBYTE(result)) {
|
||||||
|
result = MAKEWORD(HIBYTE(result), HIBYTE(result));
|
||||||
|
}
|
||||||
|
result = MAKEWORD(LOBYTE(result) - RCT2_GLOBAL(0x00F438AC, uint8), HIBYTE(result));
|
||||||
|
if (!LOBYTE(result)) {
|
||||||
|
result = MAKEWORD(0, HIBYTE(result));
|
||||||
|
}
|
||||||
|
|
||||||
|
rct_vehicle_sound* vehicle_sound = &RCT2_GLOBAL(RCT2_ADDRESS_VEHICLE_SOUND_LIST, rct_vehicle_sound);
|
||||||
|
while (sound_unknown->id != vehicle_sound->id) {
|
||||||
|
vehicle_sound++;
|
||||||
|
if (vehicle_sound >= &RCT2_GLOBAL(0x009AF42C, rct_vehicle_sound)) {
|
||||||
|
vehicle_sound = &RCT2_GLOBAL(RCT2_ADDRESS_VEHICLE_SOUND_LIST, rct_vehicle_sound);
|
||||||
|
int i = 0;
|
||||||
|
while (vehicle_sound->id != (uint16)-1) {
|
||||||
|
vehicle_sound++;
|
||||||
|
i++;
|
||||||
|
if (i >= RCT2_GLOBAL(0x009AAC75, sint8)) {
|
||||||
|
(int)sound_unknown += sound_unknown->next;
|
||||||
|
goto label28;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vehicle_sound->id = sound_unknown->id;
|
||||||
|
vehicle_sound->sound1_id = (uint16)-1;
|
||||||
|
vehicle_sound->sound2_id = (uint16)-1;
|
||||||
|
vehicle_sound->var_2 = 0x30;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8 v21 = LOBYTE(sound_unknown->var_8);
|
||||||
|
uint8 v22 = LOBYTE(vehicle_sound->var_2);
|
||||||
|
if (v22 != v21) {
|
||||||
|
if (v22 < v21) {
|
||||||
|
v22 += 4;
|
||||||
|
} else {
|
||||||
|
v22 -= 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vehicle_sound->var_2 = v22;
|
||||||
|
result = MAKEWORD(LOBYTE(result) - v22, HIBYTE(result));
|
||||||
|
if (!result) {
|
||||||
|
result = MAKEWORD(0, HIBYTE(result));
|
||||||
|
}
|
||||||
|
// do sound1 stuff, track noise
|
||||||
|
RCT2_ADDRESS_SPRITE_LIST;
|
||||||
|
rct_sprite* sprite = &g_sprite_list[sound_unknown->id];
|
||||||
|
sint16 volume = sprite->vehicle.var_BC;
|
||||||
|
volume *= LOBYTE(result);
|
||||||
|
(uint16)volume /= 8;
|
||||||
|
volume -= 0x1FFF;
|
||||||
|
if (volume < -10000) {
|
||||||
|
volume = -10000;
|
||||||
|
}
|
||||||
|
if (sprite->vehicle.var_BB == (uint8)-1) {
|
||||||
|
if (vehicle_sound->sound1_id != (uint16)-1) {
|
||||||
|
vehicle_sound->sound1_id = -1;
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
|
sound_stop(&vehicle_sound->sound1);
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (vehicle_sound->sound1_id == (uint16)-1) {
|
||||||
|
goto label69;
|
||||||
|
}
|
||||||
|
if (sprite->vehicle.var_BB != vehicle_sound->sound1_id) {
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
|
sound_stop(&vehicle_sound->sound1);
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
|
label69:
|
||||||
|
vehicle_sound->sound1_id = sprite->vehicle.var_BB;
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
|
sound_prepare(sprite->vehicle.var_BB, &vehicle_sound->sound1, 1, RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_SOUND_SW_BUFFER, uint32));
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
|
vehicle_sound->sound1_pan = sound_unknown->pan;
|
||||||
|
vehicle_sound->sound1_volume = volume;
|
||||||
|
vehicle_sound->sound1_freq = sound_unknown->frequency;
|
||||||
|
uint16 frequency = sound_unknown->frequency;
|
||||||
|
if (RCT2_ADDRESS(0x009AF51F, uint8)[2 * sprite->vehicle.var_BB] & 2) {
|
||||||
|
frequency = (frequency / 2) + 4000;
|
||||||
|
}
|
||||||
|
uint8 looping = RCT2_ADDRESS(0x009AF51E, uint8)[2 * sprite->vehicle.var_BB];
|
||||||
|
int pan = sound_unknown->pan;
|
||||||
|
if (!RCT2_GLOBAL(0x009AAC6D, uint8)) {
|
||||||
|
pan = 0;
|
||||||
|
}
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
|
sound_play(&vehicle_sound->sound1, looping, volume, pan, frequency);
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
|
goto label87;
|
||||||
|
}
|
||||||
|
if (volume != vehicle_sound->sound1_volume) {
|
||||||
|
vehicle_sound->sound1_volume = volume;
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
|
sound_set_volume(&vehicle_sound->sound1, volume);
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
|
}
|
||||||
|
if (sound_unknown->pan != vehicle_sound->sound1_pan) {
|
||||||
|
vehicle_sound->sound1_pan = sound_unknown->pan;
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
|
sound_set_pan(&vehicle_sound->sound1, sound_unknown->pan);
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
|
}
|
||||||
|
if (!(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 3) && sound_unknown->frequency != vehicle_sound->sound1_freq) {
|
||||||
|
vehicle_sound->sound1_freq = sound_unknown->frequency;
|
||||||
|
uint16 frequency = sound_unknown->frequency;
|
||||||
|
if (RCT2_GLOBAL(0x009AF51F, uint8*)[2 * sprite->vehicle.var_BB] & 2) {
|
||||||
|
frequency = (frequency / 2) + 4000;
|
||||||
|
}
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
|
sound_set_frequency(&vehicle_sound->sound1, frequency);
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
|
}
|
||||||
|
label87: // do sound2 stuff, screams
|
||||||
|
sprite = &g_sprite_list[sound_unknown->id];
|
||||||
|
volume = sprite->vehicle.var_BE;
|
||||||
|
volume *= LOBYTE(result);
|
||||||
|
(uint16)volume /= 8;
|
||||||
|
volume -= 0x1FFF;
|
||||||
|
if (volume < -10000) {
|
||||||
|
volume = -10000;
|
||||||
|
}
|
||||||
|
if (sprite->vehicle.var_BD == (uint8)-1) {
|
||||||
|
if (vehicle_sound->sound2_id != (uint16)-1) {
|
||||||
|
vehicle_sound->sound2_id = -1;
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
|
sound_stop(&vehicle_sound->sound2);
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (vehicle_sound->sound2_id == (uint16)-1) {
|
||||||
|
goto label93;
|
||||||
|
}
|
||||||
|
if (sprite->vehicle.var_BD != vehicle_sound->sound2_id) {
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
|
sound_stop(&vehicle_sound->sound2);
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
|
label93:
|
||||||
|
vehicle_sound->sound2_id = sprite->vehicle.var_BD;
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
|
sound_prepare(sprite->vehicle.var_BD, &vehicle_sound->sound2, 1, RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_SOUND_SW_BUFFER, uint32));
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
|
vehicle_sound->sound2_pan = sound_unknown->pan;
|
||||||
|
vehicle_sound->sound2_volume = volume;
|
||||||
|
vehicle_sound->sound2_freq = sound_unknown->frequency;
|
||||||
|
uint16 frequency = sound_unknown->frequency;
|
||||||
|
if (RCT2_ADDRESS(0x009AF51F, uint8)[2 * sprite->vehicle.var_BD] & 1) {
|
||||||
|
frequency = 12649;
|
||||||
|
}
|
||||||
|
frequency = (frequency * 2) - 3248;
|
||||||
|
if (frequency > 25700) {
|
||||||
|
frequency = 25700;
|
||||||
|
}
|
||||||
|
uint8 looping = RCT2_ADDRESS(0x009AF51E, uint8)[2 * sprite->vehicle.var_BD];
|
||||||
|
int pan = sound_unknown->pan;
|
||||||
|
if (!RCT2_GLOBAL(0x009AAC6D, uint8)) {
|
||||||
|
pan = 0;
|
||||||
|
}
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
|
sound_play(&vehicle_sound->sound2, looping, volume, pan, frequency);
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
|
goto label114;
|
||||||
|
}
|
||||||
|
if (volume != vehicle_sound->sound2_volume) {
|
||||||
|
vehicle_sound->sound2_volume = volume;
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
|
sound_set_volume(&vehicle_sound->sound2, volume);
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
|
}
|
||||||
|
if (sound_unknown->pan != vehicle_sound->sound2_pan) {
|
||||||
|
vehicle_sound->sound2_pan = sound_unknown->pan;
|
||||||
|
if (RCT2_GLOBAL(0x009AAC6D, uint8)) {
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
|
sound_set_pan(&vehicle_sound->sound2, sound_unknown->pan);
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 3) && sound_unknown->frequency != vehicle_sound->sound2_freq) {
|
||||||
|
vehicle_sound->sound2_freq = sound_unknown->frequency;
|
||||||
|
if (!(RCT2_ADDRESS(0x009AF51F, uint8)[2 * sprite->vehicle.var_BD] & 1)) {
|
||||||
|
uint16 frequency = (sound_unknown->frequency * 2) - 3248;
|
||||||
|
if (frequency > 25700) {
|
||||||
|
frequency = 25700;
|
||||||
|
}
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 1;
|
||||||
|
sound_set_frequency(&vehicle_sound->sound2, frequency);
|
||||||
|
RCT2_GLOBAL(0x014241BC, uint32) = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
label114:
|
||||||
|
1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* rct2: 0x006D4204
|
* rct2: 0x006D4204
|
||||||
|
|
|
@ -52,7 +52,9 @@ typedef struct {
|
||||||
uint8 pad_2C[0x04];
|
uint8 pad_2C[0x04];
|
||||||
uint8 ride; // 0x30
|
uint8 ride; // 0x30
|
||||||
uint8 var_31;
|
uint8 var_31;
|
||||||
uint8 pad_32[0x0C];
|
uint8 pad_32[0x02];
|
||||||
|
uint16 var_34;
|
||||||
|
uint8 pad_36[0x08];
|
||||||
uint16 next_vehicle_on_train; // 0x3E
|
uint16 next_vehicle_on_train; // 0x3E
|
||||||
uint32 var_40;
|
uint32 var_40;
|
||||||
uint16 var_44;
|
uint16 var_44;
|
||||||
|
@ -77,6 +79,8 @@ typedef struct {
|
||||||
|
|
||||||
void vehicle_update_all();
|
void vehicle_update_all();
|
||||||
int sub_6BC2F3(rct_vehicle* vehicle);
|
int sub_6BC2F3(rct_vehicle* vehicle);
|
||||||
|
void sub_6BB9FF(rct_vehicle* vehicle);
|
||||||
|
void vehicle_sounds_update();
|
||||||
|
|
||||||
/** Helper macro until rides are stored in this module. */
|
/** Helper macro until rides are stored in this module. */
|
||||||
#define GET_VEHICLE(sprite_index) &(g_sprite_list[sprite_index].vehicle)
|
#define GET_VEHICLE(sprite_index) &(g_sprite_list[sprite_index].vehicle)
|
||||||
|
|
Loading…
Reference in New Issue