From ec6b73831764ad9f26f28cd9c1b9a84e281da153 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Sat, 20 Apr 2019 22:43:28 +0200 Subject: [PATCH] Fix #8079: Crash when unloading buggy custom rides --- distribution/changelog.txt | 1 + src/openrct2/peep/Guest.cpp | 34 +++++++++++++++++++--------------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index b41c9335e9..bd469e201b 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -13,6 +13,7 @@ - Fix: [#6006] Objects higher than 6 metres are considered trees (original bug). - Fix: [#7884] Unfinished preserved rides can be demolished with quick demolish. - Fix: [#7913] RCT1/RCT2 title sequence timing is off. +- Fix: [#8079, #8969] Crash when unloading buggy custom rides. - Fix: [#8219] Faulty folder recreation in "save" folder. - Fix: [#8537] Imported RCT1 rides/shops are all numbered 1. - Fix: [#8649] Setting date does not work in multiplayer. diff --git a/src/openrct2/peep/Guest.cpp b/src/openrct2/peep/Guest.cpp index 6d19e463a0..9fa5bf938e 100644 --- a/src/openrct2/peep/Guest.cpp +++ b/src/openrct2/peep/Guest.cpp @@ -4028,22 +4028,26 @@ void Guest::UpdateRideLeaveVehicle() platformLocation.x = vehicle->x + word_981D6C[platformLocation.direction].x * 12; platformLocation.y = vehicle->y + word_981D6C[platformLocation.direction].y * 12; - int8_t loadPosition = vehicle_entry->peep_loading_positions[current_seat]; - - switch (vehicle->sprite_direction / 8) + // This can evaluate to false with buggy custom rides. + if (current_seat < vehicle_entry->peep_loading_positions.size()) { - case 0: - platformLocation.x -= loadPosition; - break; - case 1: - platformLocation.y += loadPosition; - break; - case 2: - platformLocation.x += loadPosition; - break; - case 3: - platformLocation.y -= loadPosition; - break; + int8_t loadPosition = vehicle_entry->peep_loading_positions[current_seat]; + + switch (vehicle->sprite_direction / 8) + { + case 0: + platformLocation.x -= loadPosition; + break; + case 1: + platformLocation.y += loadPosition; + break; + case 2: + platformLocation.x += loadPosition; + break; + case 3: + platformLocation.y -= loadPosition; + break; + } } platformLocation.z = ride->stations[current_ride_station].Height * 8;