Remove RCT_GLOBALs from track_design.c

This commit is contained in:
Ted John 2016-09-05 21:45:50 +01:00
parent db327d26c8
commit 669396e841
3 changed files with 57 additions and 37 deletions

View File

@ -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<const char *> GetSceneryObjects(uint8 sceneryType);
const List<const char *> GetPreferedRideEntryOrder(uint8 rideType);
const List<const char *> GetPreferedRideEntryOrder(uint8 rideType);
}
#else
const char * rct1_get_ride_type_object(uint8 rideType);
const char * rct1_get_vehicle_object(uint8 vehicleType);
#endif

View File

@ -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);
}
}

View File

@ -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);