From 078c2d22c1e4b7bb95aeb5e367c9c20a3a4660a4 Mon Sep 17 00:00:00 2001 From: Michael Steenbeek Date: Mon, 4 Dec 2017 14:04:32 +0100 Subject: [PATCH] Make use of ride preview images clearer and more future-proof --- src/openrct2-ui/windows/NewRide.cpp | 16 ++++++++++------ src/openrct2/object/RideObject.cpp | 13 +++++++------ src/openrct2/ride/ride.h | 2 +- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/openrct2-ui/windows/NewRide.cpp b/src/openrct2-ui/windows/NewRide.cpp index c36d329746..60096b5037 100644 --- a/src/openrct2-ui/windows/NewRide.cpp +++ b/src/openrct2-ui/windows/NewRide.cpp @@ -863,13 +863,17 @@ static void window_new_ride_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, s // Draw ride image with feathered border rideEntry = get_ride_entry(listItem->entry_index); - sint32 image_id = rideEntry->images_offset; - if (listItem->type != rideEntry->ride_type[0]) { - image_id++; - if (listItem->type != rideEntry->ride_type[1]) - image_id++; + sint32 imageId = rideEntry->images_offset; + + for (size_t i = 0; i < MAX_RIDE_TYPES_PER_RIDE_ENTRY; i++) + { + if (rideEntry->ride_type[i] == listItem->type) + break; + else + imageId++; } - gfx_draw_sprite_raw_masked(dpi, x + 2, y + 2, SPR_NEW_RIDE_MASK, image_id); + + gfx_draw_sprite_raw_masked(dpi, x + 2, y + 2, SPR_NEW_RIDE_MASK, imageId); // Next position x += 116; diff --git a/src/openrct2/object/RideObject.cpp b/src/openrct2/object/RideObject.cpp index 7de634fffa..dddfc276a5 100644 --- a/src/openrct2/object/RideObject.cpp +++ b/src/openrct2/object/RideObject.cpp @@ -134,7 +134,7 @@ void RideObject::Load() _legacyType.images_offset = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); _legacyType.vehicle_preset_list = &_presetColours; - sint32 cur_vehicle_images_offset = _legacyType.images_offset + 3; + sint32 cur_vehicle_images_offset = _legacyType.images_offset + MAX_RIDE_TYPES_PER_RIDE_ENTRY; for (sint32 i = 0; i < RCT2_MAX_VEHICLES_PER_RIDE_ENTRY; i++) { rct_ride_entry_vehicle * vehicleEntry = &_legacyType.vehicles[i]; @@ -324,14 +324,15 @@ void RideObject::Unload() void RideObject::DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const { uint32 imageId = _legacyType.images_offset; - if (_legacyType.ride_type[0] == 0xFF) + + for (size_t i = 0; i < MAX_RIDE_TYPES_PER_RIDE_ENTRY; i++) { - imageId++; - if (_legacyType.ride_type[1] == 0xFF) - { + if (_legacyType.ride_type[i] != RIDE_TYPE_NULL) + break; + else imageId++; - } } + gfx_draw_sprite(dpi, imageId, 0, 0, 0); } diff --git a/src/openrct2/ride/ride.h b/src/openrct2/ride/ride.h index ed25298cdd..fd845755e6 100644 --- a/src/openrct2/ride/ride.h +++ b/src/openrct2/ride/ride.h @@ -96,7 +96,7 @@ assert_struct_size(rct_ride_name, 4); */ typedef struct rct_ride_entry { rct_ride_name naming; - uint32 images_offset; // 0x004 + uint32 images_offset; // 0x004. The first three images are previews. They correspond to the ride_type[] array. uint32 flags; // 0x008 uint8 ride_type[RCT2_MAX_RIDE_TYPES_PER_RIDE_ENTRY];// 0x00C uint8 min_cars_in_train; // 0x00F