Implement disable train length limits cheat

This commit is contained in:
X7123M3-256 2016-03-28 21:57:00 +01:00 committed by Michał Janiszewski
parent 8f6089818f
commit 35ccd0b8e1
2 changed files with 30 additions and 15 deletions

View File

@ -4571,7 +4571,7 @@ train_ref vehicle_create_train(int rideIndex, int x, int y, int z, int vehicleIn
{
rct_ride *ride = get_ride(rideIndex);
uint8 trainLayout[42];
uint8 trainLayout[RIDE_MAX_CARS_PER_TRAIN];//TODO -work out what's going on here
ride_entry_get_train_layout(ride->subtype, ride->num_cars_per_train, trainLayout);
train_ref train = { NULL, NULL };
@ -7437,7 +7437,7 @@ void ride_update_max_vehicles(int rideIndex)
rct_ride *ride;
rct_ride_entry *rideEntry;
rct_ride_entry_vehicle *vehicleEntry;
uint8 trainLayout[16], numCarsPerTrain, numVehicles;
uint8 trainLayout[RIDE_MAX_CARS_PER_TRAIN], numCarsPerTrain, numVehicles;
int trainLength, maxNumTrains;
ride = get_ride(rideIndex);
@ -7445,6 +7445,7 @@ void ride_update_max_vehicles(int rideIndex)
return;
rideEntry = get_ride_entry(ride->subtype);
if (rideEntry->cars_per_flat_ride == 0xFF) {
ride->num_cars_per_train = max(rideEntry->min_cars_in_train, ride->num_cars_per_train);
ride->min_max_cars_per_train = rideEntry->max_cars_in_train | (rideEntry->min_cars_in_train << 4);
@ -7474,7 +7475,9 @@ void ride_update_max_vehicles(int rideIndex)
}
int newCarsPerTrain = max(ride->proposed_num_cars_per_train, rideEntry->min_cars_in_train);
maxCarsPerTrain = max(maxCarsPerTrain, rideEntry->min_cars_in_train);
newCarsPerTrain = min(maxCarsPerTrain, newCarsPerTrain);
if(!gCheatsDisableTrainLengthLimit) {
newCarsPerTrain = min(maxCarsPerTrain, newCarsPerTrain);
}
ride->min_max_cars_per_train = maxCarsPerTrain | (rideEntry->min_cars_in_train << 4);
switch (ride->mode) {
@ -7692,7 +7695,9 @@ money32 ride_set_vehicles(uint8 rideIndex, uint8 setting, uint8 value, uint32 fl
invalidate_test_results(rideIndex);
rideEntry = get_ride_entry(ride->subtype);
value = clamp(rideEntry->min_cars_in_train, value, rideEntry->max_cars_in_train);
if(!gCheatsDisableTrainLengthLimit) {
value = clamp(rideEntry->min_cars_in_train, value, rideEntry->max_cars_in_train);
}
ride->proposed_num_cars_per_train = value;
break;
case RIDE_SET_VEHICLES_COMMAND_TYPE_RIDE_ENTRY:
@ -7718,7 +7723,9 @@ money32 ride_set_vehicles(uint8 rideIndex, uint8 setting, uint8 value, uint32 fl
preset = ride_get_unused_preset_vehicle_colour(ride->type, ride->subtype);
}
ride_set_vehicle_colours_to_random_preset(ride, preset);
ride->proposed_num_cars_per_train = clamp(rideEntry->min_cars_in_train, ride->proposed_num_cars_per_train, rideEntry->max_cars_in_train);
if(!gCheatsDisableTrainLengthLimit) {
ride->proposed_num_cars_per_train = clamp(rideEntry->min_cars_in_train, ride->proposed_num_cars_per_train, rideEntry->max_cars_in_train);
}
break;
default:
log_error("Unknown vehicle command.");

View File

@ -1048,7 +1048,7 @@ static void window_ride_draw_tab_vehicle(rct_drawpixelinfo *dpi, rct_window *w)
ride = get_ride(w->number);
uint8 trainLayout[16];
uint8 trainLayout[RIDE_MAX_CARS_PER_TRAIN];
ride_entry_get_train_layout(ride->subtype, ride->num_cars_per_train, trainLayout);
rideEntry = get_ride_entry_by_ride(ride);
@ -2470,9 +2470,13 @@ static void window_ride_vehicle_mousedown(int widgetIndex, rct_window *w, rct_wi
dropdown_set_checked(ride->num_vehicles - 1, true);
break;
case WIDX_VEHICLE_CARS_PER_TRAIN_DROPDOWN:
minCars = (ride->min_max_cars_per_train >> 4);
maxCars = (ride->min_max_cars_per_train & 0x0F);
if(!gCheatsDisableTrainLengthLimit) {
minCars=(ride->min_max_cars_per_train >> 4);
maxCars=(ride->min_max_cars_per_train & 0x0F);
} else {
minCars=rideEntry->zero_cars+1;
maxCars=RIDE_MAX_CARS_PER_TRAIN;
}
window_dropdown_show_text_custom_width(
w->x + dropdownWidget->left,
w->y + dropdownWidget->top,
@ -2483,7 +2487,7 @@ static void window_ride_vehicle_mousedown(int widgetIndex, rct_window *w, rct_wi
widget->right - dropdownWidget->left
);
for (i = 0; i < 12; i++) {
for (i = 0; i < maxCars; i++) {
cars = minCars + i;
gDropdownItemsFormat[i] = 1142;
@ -2522,7 +2526,11 @@ static void window_ride_vehicle_dropdown(rct_window *w, int widgetIndex, int dro
ride_set_num_vehicles(w->number, dropdownIndex + 1);
break;
case WIDX_VEHICLE_CARS_PER_TRAIN_DROPDOWN:
ride_set_num_cars_per_vehicle(w->number, rideEntry->min_cars_in_train + dropdownIndex);
if(gCheatsDisableTrainLengthLimit) {
ride_set_num_cars_per_vehicle(w->number, rideEntry->zero_cars + 1 + dropdownIndex);
} else {
ride_set_num_cars_per_vehicle(w->number, rideEntry->min_cars_in_train + dropdownIndex);
}
break;
}
}
@ -2592,7 +2600,7 @@ static void window_ride_vehicle_invalidate(rct_window *w)
}
// Cars per train
if (rideEntry->zero_cars + 1 < rideEntry->max_cars_in_train) {
if (rideEntry->zero_cars + 1 < rideEntry->max_cars_in_train||gCheatsDisableTrainLengthLimit) {
window_ride_vehicle_widgets[WIDX_VEHICLE_CARS_PER_TRAIN].image = carsPerTrain > 1 ? 1023 : 1022;
window_ride_vehicle_widgets[WIDX_VEHICLE_CARS_PER_TRAIN].type = WWT_DROPDOWN;
window_ride_vehicle_widgets[WIDX_VEHICLE_CARS_PER_TRAIN_DROPDOWN].type = WWT_DROPDOWN_BUTTON;
@ -2694,7 +2702,7 @@ static void window_ride_vehicle_scrollpaint(rct_window *w, rct_drawpixelinfo *dp
// Background
gfx_fill_rect(dpi, dpi->x, dpi->y, dpi->x + dpi->width, dpi->y + dpi->height, 12);
uint8 trainLayout[16];
uint8 trainLayout[RIDE_MAX_CARS_PER_TRAIN];
ride_entry_get_train_layout(ride->subtype, ride->num_cars_per_train, trainLayout);
widget = &window_ride_vehicle_widgets[WIDX_VEHICLE_TRAINS_PREVIEW];
@ -4206,7 +4214,7 @@ static void window_ride_colour_invalidate(rct_window *w)
window_ride_colour_widgets[WIDX_VEHICLE_MAIN_COLOUR].type = WWT_COLOURBTN;
window_ride_colour_widgets[WIDX_VEHICLE_MAIN_COLOUR].image = window_ride_get_colour_button_image(vehicleColour.main);
uint8 trainLayout[16];
uint8 trainLayout[RIDE_MAX_CARS_PER_TRAIN];
ride_entry_get_train_layout(ride->subtype, ride->num_cars_per_train, trainLayout);
uint32 colourFlags = 0;
@ -4395,7 +4403,7 @@ static void window_ride_colour_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi
x = (vehiclePreviewWidget->right - vehiclePreviewWidget->left) / 2;
y = vehiclePreviewWidget->bottom - vehiclePreviewWidget->top - 15;
uint8 trainLayout[16];
uint8 trainLayout[RIDE_MAX_CARS_PER_TRAIN];
ride_entry_get_train_layout(ride->subtype, ride->num_cars_per_train, trainLayout);
// ?