1
0
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:
Ted John
2016-05-01 19:41:48 +01:00
parent 02a979cad5
commit a19e5feadf
6 changed files with 54 additions and 37 deletions

View File

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

View File

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

View File

@@ -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
///////////////////////////////////////////////////////////////////////////////

View File

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

View File

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

View File

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