From 35ccd0b8e1f765b31657359cf6acd03eb7087f42 Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Mon, 28 Mar 2016 21:57:00 +0100 Subject: [PATCH] Implement disable train length limits cheat --- src/ride/ride.c | 17 ++++++++++++----- src/windows/ride.c | 28 ++++++++++++++++++---------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/ride/ride.c b/src/ride/ride.c index 0d010494c8..83ef7ed8d3 100644 --- a/src/ride/ride.c +++ b/src/ride/ride.c @@ -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."); diff --git a/src/windows/ride.c b/src/windows/ride.c index f545047455..b3acde7f2c 100644 --- a/src/windows/ride.c +++ b/src/windows/ride.c @@ -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); // ?