diff --git a/src/ride/track_design.c b/src/ride/track_design.c index f7d1256455..2b4423526f 100644 --- a/src/ride/track_design.c +++ b/src/ride/track_design.c @@ -22,7 +22,6 @@ static rct_track_td6 *track_design_open_from_buffer(uint8 *src, size_t srcLength rct_map_element **gTrackSavedMapElements = (rct_map_element**)0x00F63674; rct_track_td6 *gActiveTrackDesign; -money32 gTrackDesignCost; uint8 gTrackDesignPlaceFlags; bool gTrackDesignSceneryToggle; rct_xyz16 gTrackPreviewMin; @@ -1290,9 +1289,9 @@ int sub_6D01B3(rct_track_td6 *td6, uint8 bl, uint8 rideIndex, int x, int y, int * ebx = ride_id * cost = edi */ -bool sub_6D2189(rct_track_td6 *td6, money32 *cost, uint8 *rideId) +bool sub_6D2189(rct_track_td6 *td6, money32 *cost, uint8 *rideId, uint8 *flags) { - RCT2_GLOBAL(0x00F44151, uint8) = 0; + *flags = 0; uint8 entry_type, entry_index; if (!find_object_in_entry_group(&td6->vehicle_object, &entry_type, &entry_index)) { @@ -1339,8 +1338,8 @@ bool sub_6D2189(rct_track_td6 *td6, money32 *cost, uint8 *rideId) _currentTrackPieceDirection = 0; int z = sub_6D01B3(td6, PTD_OPERATION_GET_PLACE_Z, 0, mapSize, mapSize, 16); - if (RCT2_GLOBAL(0x00F4414E, uint8) & 4){ - RCT2_GLOBAL(0x00F44151, uint8) |= 2; + if (RCT2_GLOBAL(0x00F4414E, uint8) & 4) { + *flags |= 2; } z += 16 - RCT2_GLOBAL(0xF44129, uint16); @@ -1348,7 +1347,7 @@ bool sub_6D2189(rct_track_td6 *td6, money32 *cost, uint8 *rideId) int operation = PTD_OPERATION_GET_COST; if (RCT2_GLOBAL(0x00F4414E, uint8) & 2) { operation |= 0x80; - RCT2_GLOBAL(0x00F44151, uint8) |= 1; + *flags |= 1; } money32 resultCost = sub_6D01B3(td6, operation, rideIndex, mapSize, mapSize, z); @@ -1356,7 +1355,7 @@ bool sub_6D2189(rct_track_td6 *td6, money32 *cost, uint8 *rideId) if (resultCost != MONEY32_UNDEFINED) { if (!find_object_in_entry_group(&td6->vehicle_object, &entry_type, &entry_index)){ - RCT2_GLOBAL(0x00F44151, uint8) |= 4; + *flags |= 4; } _currentTrackPieceDirection = backup_rotation; @@ -1648,7 +1647,7 @@ void game_command_place_maze_design(int* eax, int* ebx, int* ecx, int* edx, int* * * rct2: 0x006D1EF0 */ -void draw_track_preview(rct_track_td6 *td6, uint8** preview) +void track_design_draw_preview(rct_track_td6 *td6, uint8 *pixels) { // Make a copy of the map if (!track_design_preview_backup_map()) { @@ -1661,13 +1660,15 @@ void draw_track_preview(rct_track_td6 *td6, uint8** preview) } money32 cost; - uint8 ride_id; - if (!sub_6D2189(td6, &cost, &ride_id)) { - memset(preview, 0, TRACK_PREVIEW_IMAGE_SIZE * 4); + uint8 rideIndex; + uint8 flags; + if (!sub_6D2189(td6, &cost, &rideIndex, &flags)) { + memset(pixels, 0, TRACK_PREVIEW_IMAGE_SIZE * 4); track_design_preview_restore_map(); return; } - gTrackDesignCost = cost; + td6->cost = cost; + td6->track_flags = flags & 7; rct_viewport* view = RCT2_ADDRESS(0x9D8161, rct_viewport); rct_drawpixelinfo* dpi = RCT2_ADDRESS(0x9D8151, rct_drawpixelinfo); @@ -1716,7 +1717,7 @@ void draw_track_preview(rct_track_td6 *td6, uint8** preview) dpi->width = 370; dpi->height = 217; dpi->pitch = 0; - dpi->bits = (uint8*)preview; + dpi->bits = pixels; top = y; left = x; @@ -1770,7 +1771,7 @@ void draw_track_preview(rct_track_td6 *td6, uint8** preview) viewport_paint(view, dpi, left, top, right, bottom); - sub_6D235B(ride_id); + sub_6D235B(rideIndex); track_design_preview_restore_map(); } diff --git a/src/ride/track_design.h b/src/ride/track_design.h index e64118a1be..fc001db158 100644 --- a/src/ride/track_design.h +++ b/src/ride/track_design.h @@ -158,17 +158,16 @@ enum { extern rct_map_element **gTrackSavedMapElements; extern rct_track_td6 *gActiveTrackDesign; -extern money32 gTrackDesignCost; extern uint8 gTrackDesignPlaceFlags; extern bool gTrackDesignSceneryToggle; extern rct_xyz16 gTrackPreviewMin; extern rct_xyz16 gTrackPreviewMax; -rct_track_design *temp_track_get_info(char* path, uint8** preview); -void track_design_mirror(rct_track_td6 *td6); rct_track_td6 *track_design_open(const utf8 *path); void track_design_dispose(rct_track_td6 *td6); +void track_design_mirror(rct_track_td6 *td6); + int sub_6D01B3(rct_track_td6 *td6, uint8 bl, uint8 rideIndex, int x, int y, int z); void track_design_index_create(); @@ -185,7 +184,7 @@ void game_command_place_maze_design(int* eax, int* ebx, int* ecx, int* edx, int* /////////////////////////////////////////////////////////////////////////////// // Track design preview /////////////////////////////////////////////////////////////////////////////// -void draw_track_preview(rct_track_td6 *td6, uint8** preview); +void track_design_draw_preview(rct_track_td6 *td6, uint8 *pixels); /////////////////////////////////////////////////////////////////////////////// // Track design saving diff --git a/src/windows/install_track.c b/src/windows/install_track.c index 08fd9d7e5e..612c60be79 100644 --- a/src/windows/install_track.c +++ b/src/windows/install_track.c @@ -375,9 +375,7 @@ static void window_install_track_text_input(rct_window *w, int widgetIndex, char static void window_install_track_update_preview() { - draw_track_preview(_trackDesign, (uint8**)_trackDesignPreviewPixels); - _trackDesign->cost = gTrackDesignCost; - _trackDesign->track_flags = RCT2_GLOBAL(0x00F44151, uint8) & 7; + track_design_draw_preview(_trackDesign, _trackDesignPreviewPixels); } static void window_install_track_design(rct_window *w) diff --git a/src/windows/track_list.c b/src/windows/track_list.c index ef6628fc4a..9a86e11919 100644 --- a/src/windows/track_list.c +++ b/src/windows/track_list.c @@ -620,11 +620,7 @@ static bool track_list_load_design_for_preview(utf8 *path) _loadedTrackDesign = track_design_open(path); if (_loadedTrackDesign != NULL) { - // Load in a new preview image, calculate cost variable, calculate var_06 - draw_track_preview(_loadedTrackDesign, (uint8**)_trackDesignPreviewPixels); - - _loadedTrackDesign->cost = gTrackDesignCost; - _loadedTrackDesign->track_flags = RCT2_GLOBAL(0x00F44151, uint8) & 7; + track_design_draw_preview(_loadedTrackDesign, _trackDesignPreviewPixels); return true; } return false;