1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-24 07:14:31 +01:00

implement sub_6DEDE8

This commit is contained in:
IntelOrca
2015-12-14 12:30:28 +00:00
parent 656bc61a6a
commit 490bdc85a6

View File

@@ -27,10 +27,12 @@
#include "../openrct2.h"
#include "../scenario.h"
#include "../world/map_animation.h"
#include "../world/scenery.h"
#include "../world/sprite.h"
#include "ride.h"
#include "ride_data.h"
#include "track.h"
#include "track_data.h"
#include "vehicle.h"
rct_xyz16 *unk_F64E20 = (rct_xyz16*)0x00F64E20;
@@ -47,6 +49,17 @@ typedef struct {
static void vehicle_update(rct_vehicle *vehicle);
const uint8 DoorOpenSoundIds[] = {
SOUND_WATER_2,
SOUND_DOOR_OPEN
};
const uint8 DoorCloseSoundIds[] = {
SOUND_62,
SOUND_DOOR_CLOSE,
SOUND_62
};
/**
*
* rct2: 0x006BB9FF
@@ -845,6 +858,38 @@ static void sub_6D63D4(rct_vehicle *vehicle)
RCT2_CALLPROC_X(0x006D63D4, 0, 0, 0, 0, (int)vehicle, 0, 0);
}
/**
*
* rct2: 0x006DEDB1
*/
static vehicle_play_scenery_door_open_sound(rct_vehicle *vehicle, rct_map_element *mapElement)
{
rct_scenery_entry *wallEntry = g_wallSceneryEntries[mapElement->properties.fence.type];
int doorSoundType = (wallEntry->wall.flags2 >> 1) & 3;
if (doorSoundType != 0) {
int soundId = DoorOpenSoundIds[doorSoundType];
if (soundId != 255) {
audio_play_sound_at_location(doorSoundType, vehicle->x, vehicle->track_y, vehicle->track_z);
}
}
}
/**
*
* rct2: 0x006DED7A
*/
static vehicle_play_scenery_door_close_sound(rct_vehicle *vehicle, rct_map_element *mapElement)
{
rct_scenery_entry *wallEntry = g_wallSceneryEntries[mapElement->properties.fence.type];
int doorSoundType = (wallEntry->wall.flags2 >> 1) & 3;
if (doorSoundType != 0) {
int soundId = DoorCloseSoundIds[doorSoundType];
if (soundId != 255) {
audio_play_sound_at_location(doorSoundType, vehicle->x, vehicle->track_y, vehicle->track_z);
}
}
}
/**
*
* rct2: 0x006DEE93
@@ -911,7 +956,30 @@ static void vehicle_trigger_on_ride_photo(rct_vehicle *vehicle, rct_map_element
*/
static void sub_6DEDE8(rct_vehicle *vehicle)
{
RCT2_CALLPROC_X(0x006DEDE8, 0, 0, 0, 0, (int)vehicle, 0, 0);
int trackType = vehicle->track_type >> 2;
rct_preview_track *trackBlock = TrackBlocks[trackType];
rct_track_coordinates *trackCoordinates = &TrackCoordinates[trackType];
int x = vehicle->x;
int y = vehicle->y;
int z = (vehicle->z - trackBlock->z + trackCoordinates->z_begin) >> 3;
int direction = (vehicle->track_direction + trackCoordinates->rotation_begin) & 3;
direction ^= 2;
rct_map_element *mapElement = map_get_fence_element_at(x, y, z, direction);
if (mapElement == NULL) {
return;
}
if (vehicle->next_vehicle_on_train != SPRITE_INDEX_NULL) {
mapElement->properties.fence.item[3] &= 7;
mapElement->properties.fence.item[3] |= 0x88;
map_animation_create(MAP_ANIMATION_TYPE_WALL_UNKNOWN, x, y, z);
vehicle_play_scenery_door_open_sound(vehicle, mapElement);
} else {
mapElement->properties.fence.item[3] &= 7;
mapElement->properties.fence.item[3] |= 0xB0;
vehicle_play_scenery_door_close_sound(vehicle, mapElement);
}
}
static void vehicle_update_play_water_splash_sound()