mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-15 11:03:00 +01:00
fix track design mirror and ride name
This commit is contained in:
@@ -227,7 +227,7 @@ static void set_all_land_owned()
|
||||
{
|
||||
int mapSize = gMapSize;
|
||||
|
||||
game_do_command(64, 1, 64, 2, GAME_COMMAND_SET_LAND_OWNERSHIP, (mapSize - 2) * 32, (mapSize - 2) * 32);
|
||||
game_do_command(64, 1, 64, 2, GAME_COMMAND_SET_LAND_OWNERSHIP, (mapSize - 3) * 32, (mapSize - 3) * 32);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -68,6 +68,8 @@ bool track_design_open(rct_track_td6 *td6, const utf8 *path)
|
||||
} else {
|
||||
track_design_open_from_buffer(td6, decoded, decodedLength);
|
||||
free(decoded);
|
||||
|
||||
td6->name = track_design_get_name_from_path(path);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -264,6 +266,15 @@ static bool td4_track_has_boosters(rct_track_td6* track_design, uint8* track_ele
|
||||
return false;
|
||||
}
|
||||
|
||||
void track_design_dispose(rct_track_td6 *td6)
|
||||
{
|
||||
if (td6 != NULL) {
|
||||
free(td6->elements);
|
||||
free(td6->name);
|
||||
free(td6);
|
||||
}
|
||||
}
|
||||
|
||||
uint32 *sub_6AB49A(rct_object_entry* entry)
|
||||
{
|
||||
rct_object_entry* object_list_entry = object_list_find(entry);
|
||||
@@ -1559,7 +1570,7 @@ money32 place_track_design(sint16 x, sint16 y, sint16 z, uint8 flags, uint8 *out
|
||||
ride->vehicle_colours_extended[i] = td6->vehicle_additional_colour[i];
|
||||
}
|
||||
|
||||
ride_set_name(rideIndex, RCT2_ADDRESS(0x009E3504, const char));
|
||||
ride_set_name(rideIndex, td6->name);
|
||||
|
||||
gCommandExpenditureType = RCT_EXPENDITURE_TYPE_RIDE_CONSTRUCTION;
|
||||
*outRideIndex = rideIndex;
|
||||
|
||||
@@ -122,6 +122,8 @@ typedef struct {
|
||||
rct_td6_track_element *track_elements;
|
||||
rct_td6_entrance_element *entrance_elements;
|
||||
rct_td6_scenery_element *scenery_elements;
|
||||
|
||||
utf8 *name;
|
||||
} rct_track_td6;
|
||||
|
||||
typedef struct{
|
||||
@@ -159,14 +161,11 @@ extern rct_track_td6 *gActiveTrackDesign;
|
||||
extern money32 gTrackDesignCost;
|
||||
extern uint8 gTrackDesignPlaceFlags;
|
||||
|
||||
// void track_load_list(ride_list_item item);
|
||||
// rct_track_design *track_get_info(int index, uint8** preview);
|
||||
rct_track_design *temp_track_get_info(char* path, uint8** preview);
|
||||
// int track_rename(const char *text);
|
||||
int track_delete();
|
||||
void track_design_mirror();
|
||||
void track_design_mirror(rct_track_td6 *td6);
|
||||
bool track_design_open(rct_track_td6 *td6, const utf8 *path);
|
||||
void draw_track_preview(rct_track_td6 *td6, uint8** preview);
|
||||
void track_design_dispose(rct_track_td6 *td6);
|
||||
|
||||
int sub_6D01B3(rct_track_td6 *td6, uint8 bl, uint8 rideIndex, int x, int y, int z);
|
||||
int install_track(char* source_path, char* dest_name);
|
||||
@@ -179,6 +178,11 @@ utf8 *track_design_get_name_from_path(const utf8 *path);
|
||||
void game_command_place_track_design(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp);
|
||||
void game_command_place_maze_design(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Track design preview
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
void draw_track_preview(rct_track_td6 *td6, uint8** preview);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Track design saving
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -97,7 +97,7 @@ ride_list_item _window_track_list_item;
|
||||
static track_design_file_ref *_trackDesigns = NULL;
|
||||
static size_t _trackDesignsCount = 0;
|
||||
static uint16 _loadedTrackDesignIndex;
|
||||
static rct_track_td6 _loadedTrackDesign;
|
||||
static rct_track_td6 *_loadedTrackDesign;
|
||||
static uint8 _loadedTrackDesignPreview[4][TRACK_PREVIEW_IMAGE_SIZE];
|
||||
|
||||
static void track_list_load_designs(ride_list_item item);
|
||||
@@ -151,8 +151,8 @@ void window_track_list_open(ride_list_item item)
|
||||
*/
|
||||
static void window_track_list_close(rct_window *w)
|
||||
{
|
||||
// Dispose loaded track
|
||||
SafeFree(_loadedTrackDesign.elements);
|
||||
free(_loadedTrackDesign);
|
||||
_loadedTrackDesign = NULL;
|
||||
|
||||
// Dispose track list
|
||||
for (size_t i = 0; i < _trackDesignsCount; i++) {
|
||||
@@ -202,7 +202,7 @@ static void window_track_list_select(rct_window *w, int index)
|
||||
return;
|
||||
}
|
||||
|
||||
if (_loadedTrackDesignIndex != -1 && _loadedTrackDesign.track_flags & 4) {
|
||||
if (_loadedTrackDesignIndex != -1 && (_loadedTrackDesign->track_flags & 4)) {
|
||||
window_error_open(STR_THIS_DESIGN_WILL_BE_BUILT_WITH_AN_ALTERNATIVE_VEHICLE_TYPE, STR_NONE);
|
||||
}
|
||||
|
||||
@@ -384,7 +384,6 @@ static void window_track_list_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
||||
colour = ColourMapA[w->colours[0]].darkest;
|
||||
gfx_fill_rect(dpi, x, y, x + 369, y + 216, colour);
|
||||
|
||||
rct_track_td6 *td6 = &_loadedTrackDesign;
|
||||
if (_loadedTrackDesignIndex != trackIndex) {
|
||||
uint8 *path = _trackDesigns[trackIndex].path;
|
||||
if (track_list_load_design_for_preview(path)) {
|
||||
@@ -395,11 +394,12 @@ static void window_track_list_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
||||
}
|
||||
}
|
||||
|
||||
rct_track_td6 *td6 = _loadedTrackDesign;
|
||||
if (td6 == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
uint8 *image = _loadedTrackDesignPreview[_currentTrackPieceDirection];
|
||||
// trackDesign = track_get_info(trackIndex, &image);
|
||||
// if (trackDesign == NULL) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
rct_g1_element *substituteElement = &g1Elements[0];
|
||||
rct_g1_element tmpElement = *substituteElement;
|
||||
@@ -617,15 +617,20 @@ static void track_list_load_designs(ride_list_item item)
|
||||
static bool track_list_load_design_for_preview(utf8 *path)
|
||||
{
|
||||
// Dispose currently loaded track
|
||||
SafeFree(_loadedTrackDesign.elements);
|
||||
track_design_dispose(_loadedTrackDesign);
|
||||
_loadedTrackDesign = NULL;
|
||||
|
||||
if (track_design_open(&_loadedTrackDesign, path)) {
|
||||
_loadedTrackDesign = calloc(sizeof(rct_track_td6), 1);
|
||||
if (track_design_open(_loadedTrackDesign, path)) {
|
||||
// Load in a new preview image, calculate cost variable, calculate var_06
|
||||
draw_track_preview(&_loadedTrackDesign, (uint8**)_loadedTrackDesignPreview);
|
||||
draw_track_preview(_loadedTrackDesign, (uint8**)_loadedTrackDesignPreview);
|
||||
|
||||
_loadedTrackDesign.cost = gTrackDesignCost;
|
||||
_loadedTrackDesign.track_flags = RCT2_GLOBAL(0x00F44151, uint8) & 7;
|
||||
_loadedTrackDesign->cost = gTrackDesignCost;
|
||||
_loadedTrackDesign->track_flags = RCT2_GLOBAL(0x00F44151, uint8) & 7;
|
||||
return true;
|
||||
} else {
|
||||
track_design_dispose(_loadedTrackDesign);
|
||||
_loadedTrackDesign = NULL;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -16,18 +16,19 @@
|
||||
|
||||
#include "../addresses.h"
|
||||
#include "../audio/audio.h"
|
||||
#include "../cheats.h"
|
||||
#include "../game.h"
|
||||
#include "../input.h"
|
||||
#include "../interface/themes.h"
|
||||
#include "../interface/viewport.h"
|
||||
#include "../interface/widget.h"
|
||||
#include "../interface/window.h"
|
||||
#include "../localisation/localisation.h"
|
||||
#include "../sprites.h"
|
||||
#include "../ride/track.h"
|
||||
#include "../ride/track_data.h"
|
||||
#include "../ride/track_design.h"
|
||||
#include "../interface/themes.h"
|
||||
#include "../cheats.h"
|
||||
#include "../sprites.h"
|
||||
#include "../util/util.h"
|
||||
|
||||
#define TRACK_MINI_PREVIEW_WIDTH 168
|
||||
#define TRACK_MINI_PREVIEW_HEIGHT 78
|
||||
@@ -142,7 +143,8 @@ void window_track_place_open(utf8 *tdPath)
|
||||
|
||||
_trackDesign = malloc(sizeof(rct_track_td6));
|
||||
if (!track_design_open(_trackDesign, tdPath)) {
|
||||
SafeFree(_trackDesign);
|
||||
track_design_dispose(_trackDesign);
|
||||
_trackDesign = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -169,6 +171,9 @@ void window_track_place_open(utf8 *tdPath)
|
||||
_window_track_place_last_x = 0xFFFF;
|
||||
_currentTrackPieceDirection = (2 - get_current_rotation()) & 3;
|
||||
window_track_place_draw_mini_preview(_trackDesign);
|
||||
|
||||
char *title = (char*)language_get_string(3155);
|
||||
format_string(title, STR_TRACK_LIST_NAME_FORMAT, &_trackDesign->name);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -183,7 +188,8 @@ static void window_track_place_close(rct_window *w)
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16) &= ~6;
|
||||
hide_gridlines();
|
||||
SafeFree(_window_track_place_mini_preview);
|
||||
SafeFree(_trackDesign);
|
||||
track_design_dispose(_trackDesign);
|
||||
_trackDesign = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -204,7 +210,7 @@ static void window_track_place_mouseup(rct_window *w, int widgetIndex)
|
||||
window_track_place_draw_mini_preview(_trackDesign);
|
||||
break;
|
||||
case WIDX_MIRROR:
|
||||
track_design_mirror();
|
||||
track_design_mirror(_trackDesign);
|
||||
_currentTrackPieceDirection = (0 - _currentTrackPieceDirection) & 3;
|
||||
window_invalidate(w);
|
||||
_window_track_place_last_x = 0xFFFF;
|
||||
|
||||
@@ -1820,16 +1820,7 @@ money32 map_set_land_ownership(uint8 flags, sint16 x1, sint16 y1, sint16 x2, sin
|
||||
y1 = clamp(0, y1, gMapSizeUnits);
|
||||
x2 = min(x2, gMapSizeUnits);
|
||||
y2 = min(y2, gMapSizeUnits);
|
||||
for (sint16 y = y1; y <= y2; y += 32) {
|
||||
for (sint16 x = x1; x <= x2; x += 32) {
|
||||
if (x > gMapSizeUnits)
|
||||
continue;
|
||||
if (y > gMapSizeUnits)
|
||||
continue;
|
||||
|
||||
map_buy_land_rights(x, y, x2, y2, 6, flags | (newOwnership << 8));
|
||||
}
|
||||
}
|
||||
map_buy_land_rights(x1, y1, x2, y2, 6, flags | (newOwnership << 8));
|
||||
|
||||
if (!(RCT2_GLOBAL(0x9E2E28, uint8) & 1)) {
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user