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 #pragma once
#include "../common.h" #include "../common.h"
#if __cplusplus
#include "../core/List.hpp" #include "../core/List.hpp"
namespace RCT1 namespace RCT1
@ -41,5 +44,12 @@ namespace RCT1
const List<const char *> GetSceneryObjects(uint8 sceneryType); 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]; 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 #pragma endregion
#include "../addresses.h"
#include "../audio/audio.h" #include "../audio/audio.h"
#include "../cheats.h" #include "../cheats.h"
#include "../game.h" #include "../game.h"
@ -24,6 +23,7 @@
#include "../network/network.h" #include "../network/network.h"
#include "../object/ObjectManager.h" #include "../object/ObjectManager.h"
#include "../rct1.h" #include "../rct1.h"
#include "../rct1/Tables.h"
#include "../util/sawyercoding.h" #include "../util/sawyercoding.h"
#include "../util/util.h" #include "../util/util.h"
#include "../windows/error.h" #include "../windows/error.h"
@ -45,7 +45,7 @@ typedef struct map_backup {
uint8 current_rotation; uint8 current_rotation;
} map_backup; } 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; rct_track_td6 *gActiveTrackDesign;
uint8 gTrackDesignPlaceFlags; uint8 gTrackDesignPlaceFlags;
@ -62,6 +62,7 @@ static money32 _trackDesignPlaceCost;
static sint16 _trackDesignPlaceZ; static sint16 _trackDesignPlaceZ;
static sint16 word_F44129; 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 map_backup *track_design_preview_backup_map();
static void track_design_preview_restore_map(map_backup *backup); static void track_design_preview_restore_map(map_backup *backup);
static void track_design_preview_clear_map(); 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 // 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) { 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 { } else {
int vehicle_type = td6->vehicle_type; const char * name = rct1_get_vehicle_object(td6->vehicle_type);
if (vehicle_type == RCT1_VEHICLE_TYPE_INVERTED_COASTER_TRAIN && assert(name != NULL);
td6->type == RIDE_TYPE_INVERTED_ROLLER_COASTER memcpy(vehicleObject.name, name, min(strlen(name), 8));
) {
vehicle_type = RCT1_VEHICLE_TYPE_4_ACROSS_INVERTED_COASTER_TRAIN;
}
vehicle_object = &RCT2_ADDRESS(0x0097F0DC, rct_object_entry)[vehicle_type];
} }
memcpy(&td6->vehicle_object, vehicle_object, sizeof(rct_object_entry)); memcpy(&td6->vehicle_object, &vehicleObject, sizeof(rct_object_entry));
// Further vehicle colour fixes // Further vehicle colour fixes
for (int i = 0; i < 32; i++) { 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); 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, "");
rct_string_id new_ride_name = user_string_allocate(132, ride_name);
if (new_ride_name != 0) { if (new_ride_name != 0) {
rct_string_id old_name = ride->name; rct_string_id old_name = ride->name;
ride->name = new_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->cost = cost;
td6->track_flags = flags & 7; td6->track_flags = flags & 7;
rct_viewport* view = RCT2_ADDRESS(0x9D8161, rct_viewport);
rct_drawpixelinfo* dpi = RCT2_ADDRESS(0x9D8151, rct_drawpixelinfo);
rct_xyz32 centre; rct_xyz32 centre;
centre.x = (gTrackPreviewMin.x + gTrackPreviewMax.x) / 2 + 16; centre.x = (gTrackPreviewMin.x + gTrackPreviewMax.x) / 2 + 16;
centre.y = (gTrackPreviewMin.y + gTrackPreviewMax.y) / 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; width = 370 << zoom_level;
height = 217 << zoom_level; height = 217 << zoom_level;
view->width = 370; rct_viewport view;
view->height = 217; view.width = 370;
view->view_width = width; view.height = 217;
view->view_height = height; view.view_width = width;
view->x = 0; view.view_height = height;
view->y = 0; view.x = 0;
view->zoom = zoom_level; view.y = 0;
view->flags = VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_INVISIBLE_SPRITES; view.zoom = zoom_level;
view.flags = VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_INVISIBLE_SPRITES;
dpi->zoom_level = zoom_level; rct_drawpixelinfo dpi;
dpi->x = 0; dpi.zoom_level = zoom_level;
dpi->y = 0; dpi.x = 0;
dpi->width = 370; dpi.y = 0;
dpi->height = 217; dpi.width = 370;
dpi->pitch = 0; dpi.height = 217;
dpi->bits = pixels; dpi.pitch = 0;
dpi.bits = pixels;
rct_xy32 offset = { width / 2, height / 2 }; rct_xy32 offset = { width / 2, height / 2 };
for (int i = 0; i < 4; i++) { 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 right = left + width;
sint32 bottom = top + height; sint32 bottom = top + height;
view->view_x = left; view.view_x = left;
view->view_y = top; view.view_y = top;
viewport_paint(view, dpi, left, top, right, bottom); viewport_paint(&view, &dpi, left, top, right, bottom);
dpi->bits += TRACK_PREVIEW_IMAGE_SIZE; dpi.bits += TRACK_PREVIEW_IMAGE_SIZE;
} }
ride_delete(rideIndex); ride_delete(rideIndex);