From 669396e84199eceaaddfa789fa1b20626d5e437f Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 5 Sep 2016 21:45:50 +0100 Subject: [PATCH] Remove RCT_GLOBALs from track_design.c --- src/rct1/Tables.h | 12 ++++++- src/rct1/tables.cpp | 13 ++++++++ src/ride/track_design.c | 69 ++++++++++++++++++++--------------------- 3 files changed, 57 insertions(+), 37 deletions(-) diff --git a/src/rct1/Tables.h b/src/rct1/Tables.h index 1ad3aadff4..8a880eb78b 100644 --- a/src/rct1/Tables.h +++ b/src/rct1/Tables.h @@ -17,6 +17,9 @@ #pragma once #include "../common.h" + +#if __cplusplus + #include "../core/List.hpp" namespace RCT1 @@ -41,5 +44,12 @@ namespace RCT1 const List GetSceneryObjects(uint8 sceneryType); - const List GetPreferedRideEntryOrder(uint8 rideType); + const List GetPreferedRideEntryOrder(uint8 rideType); } + +#else + + const char * rct1_get_ride_type_object(uint8 rideType); + const char * rct1_get_vehicle_object(uint8 vehicleType); + +#endif diff --git a/src/rct1/tables.cpp b/src/rct1/tables.cpp index 0a92c4b360..7c6f734098 100644 --- a/src/rct1/tables.cpp +++ b/src/rct1/tables.cpp @@ -1110,3 +1110,16 @@ namespace RCT1 return map[sceneryType]; } } + +extern "C" +{ + const char * rct1_get_ride_type_object(uint8 rideType) + { + return RCT1::GetRideTypeObject(rideType); + } + + const char * rct1_get_vehicle_object(uint8 vehicleType) + { + return RCT1::GetVehicleObject(vehicleType); + } +} diff --git a/src/ride/track_design.c b/src/ride/track_design.c index 0c1988a697..6232992452 100644 --- a/src/ride/track_design.c +++ b/src/ride/track_design.c @@ -14,7 +14,6 @@ *****************************************************************************/ #pragma endregion -#include "../addresses.h" #include "../audio/audio.h" #include "../cheats.h" #include "../game.h" @@ -24,6 +23,7 @@ #include "../network/network.h" #include "../object/ObjectManager.h" #include "../rct1.h" +#include "../rct1/Tables.h" #include "../util/sawyercoding.h" #include "../util/util.h" #include "../windows/error.h" @@ -45,7 +45,7 @@ typedef struct map_backup { uint8 current_rotation; } map_backup; -static rct_track_td6 *track_design_open_from_buffer(uint8 *src, size_t srcLength); +static const rct_object_entry DefaultMazeObjectEntry = { 0x80, { "HMAZE " }, 0 }; rct_track_td6 *gActiveTrackDesign; uint8 gTrackDesignPlaceFlags; @@ -62,6 +62,7 @@ static money32 _trackDesignPlaceCost; static sint16 _trackDesignPlaceZ; static sint16 word_F44129; +static rct_track_td6 *track_design_open_from_buffer(uint8 *src, size_t srcLength); static map_backup *track_design_preview_backup_map(); static void track_design_preview_restore_map(map_backup *backup); static void track_design_preview_clear_map(); @@ -229,19 +230,17 @@ static rct_track_td6 *track_design_open_from_buffer(uint8 *src, size_t srcLength } // Convert RCT1 vehicle type to RCT2 vehicle type - rct_object_entry *vehicle_object; + rct_object_entry vehicleObject = { 0x80, { " " }, 0 }; if (td6->type == RIDE_TYPE_MAZE) { - vehicle_object = RCT2_ADDRESS(0x0097F66C, rct_object_entry); + const char * name = rct1_get_ride_type_object(td6->type); + assert(name != NULL); + memcpy(vehicleObject.name, name, min(strlen(name), 8)); } else { - int vehicle_type = td6->vehicle_type; - if (vehicle_type == RCT1_VEHICLE_TYPE_INVERTED_COASTER_TRAIN && - td6->type == RIDE_TYPE_INVERTED_ROLLER_COASTER - ) { - vehicle_type = RCT1_VEHICLE_TYPE_4_ACROSS_INVERTED_COASTER_TRAIN; - } - vehicle_object = &RCT2_ADDRESS(0x0097F0DC, rct_object_entry)[vehicle_type]; + const char * name = rct1_get_vehicle_object(td6->vehicle_type); + assert(name != NULL); + memcpy(vehicleObject.name, name, min(strlen(name), 8)); } - memcpy(&td6->vehicle_object, vehicle_object, sizeof(rct_object_entry)); + memcpy(&td6->vehicle_object, &vehicleObject, sizeof(rct_object_entry)); // Further vehicle colour fixes for (int i = 0; i < 32; i++) { @@ -1316,8 +1315,7 @@ static bool sub_6D2189(rct_track_td6 *td6, money32 *cost, uint8 *rideId, uint8 * } rct_ride *ride = get_ride(rideIndex); - const utf8 *ride_name = RCT2_ADDRESS(0x009E3504, const utf8); - rct_string_id new_ride_name = user_string_allocate(132, ride_name); + rct_string_id new_ride_name = user_string_allocate(132, ""); if (new_ride_name != 0) { rct_string_id old_name = ride->name; ride->name = new_ride_name; @@ -1685,9 +1683,6 @@ void track_design_draw_preview(rct_track_td6 *td6, uint8 *pixels) td6->cost = cost; td6->track_flags = flags & 7; - rct_viewport* view = RCT2_ADDRESS(0x9D8161, rct_viewport); - rct_drawpixelinfo* dpi = RCT2_ADDRESS(0x9D8151, rct_drawpixelinfo); - rct_xyz32 centre; centre.x = (gTrackPreviewMin.x + gTrackPreviewMax.x) / 2 + 16; centre.y = (gTrackPreviewMin.y + gTrackPreviewMax.y) / 2 + 16; @@ -1710,22 +1705,24 @@ void track_design_draw_preview(rct_track_td6 *td6, uint8 *pixels) width = 370 << zoom_level; height = 217 << zoom_level; - view->width = 370; - view->height = 217; - view->view_width = width; - view->view_height = height; - view->x = 0; - view->y = 0; - view->zoom = zoom_level; - view->flags = VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_INVISIBLE_SPRITES; + rct_viewport view; + view.width = 370; + view.height = 217; + view.view_width = width; + view.view_height = height; + view.x = 0; + view.y = 0; + view.zoom = zoom_level; + view.flags = VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_INVISIBLE_SPRITES; - dpi->zoom_level = zoom_level; - dpi->x = 0; - dpi->y = 0; - dpi->width = 370; - dpi->height = 217; - dpi->pitch = 0; - dpi->bits = pixels; + rct_drawpixelinfo dpi; + dpi.zoom_level = zoom_level; + dpi.x = 0; + dpi.y = 0; + dpi.width = 370; + dpi.height = 217; + dpi.pitch = 0; + dpi.bits = pixels; rct_xy32 offset = { width / 2, height / 2 }; for (int i = 0; i < 4; i++) { @@ -1740,11 +1737,11 @@ void track_design_draw_preview(rct_track_td6 *td6, uint8 *pixels) sint32 right = left + width; sint32 bottom = top + height; - view->view_x = left; - view->view_y = top; - viewport_paint(view, dpi, left, top, right, bottom); + view.view_x = left; + view.view_y = top; + viewport_paint(&view, &dpi, left, top, right, bottom); - dpi->bits += TRACK_PREVIEW_IMAGE_SIZE; + dpi.bits += TRACK_PREVIEW_IMAGE_SIZE; } ride_delete(rideIndex);