From 772502309f7337129fee5558a10dc3c321e545d3 Mon Sep 17 00:00:00 2001 From: duncanspumpkin Date: Thu, 18 Feb 2016 20:58:22 +0000 Subject: [PATCH] Label ride offsets --- src/rct1.c | 4 ++-- src/ride/ride.c | 16 ++++++++-------- src/ride/ride.h | 16 +++++++++------- src/ride/vehicle.c | 19 ++++++++++--------- 4 files changed, 29 insertions(+), 26 deletions(-) diff --git a/src/rct1.c b/src/rct1.c index c5310efc29..41d9406d6b 100644 --- a/src/rct1.c +++ b/src/rct1.c @@ -714,8 +714,8 @@ static void rct1_fix_z() } ride->start_drop_height /= 2; ride->highest_drop_height = 1; - if (ride->var_11F != 255) { - ride->var_11F /= 2; + if (ride->cur_test_track_z != 255) { + ride->cur_test_track_z /= 2; } ride->chairlift_bullwheel_z[0] /= 2; ride->chairlift_bullwheel_z[1] /= 2; diff --git a/src/ride/ride.c b/src/ride/ride.c index 4ff1bc1f52..d519eba3f6 100644 --- a/src/ride/ride.c +++ b/src/ride/ride.c @@ -5817,10 +5817,10 @@ foundRideEntry: ride->vehicle_change_timeout = 0; ride->num_stations = 0; ride->num_vehicles = 1; - ride->var_0CA = 32; + ride->proposed_num_vehicles = 32; ride->max_trains = 32; ride->num_cars_per_train = 1; - ride->var_0CB = 12; + ride->proposed_num_cars_per_train = 12; ride->min_waiting_time = 10; ride->max_waiting_time = 60; ride->depart_flags = RIDE_DEPART_WAIT_FOR_MINIMUM_LENGTH | 3; @@ -7326,7 +7326,7 @@ void ride_update_max_vehicles(int rideIndex) break; } } - int newCarsPerTrain = max(ride->var_0CB, rideEntry->min_cars_in_train); + 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); ride->min_max_cars_per_train = maxCarsPerTrain | (rideEntry->min_cars_in_train << 4); @@ -7395,13 +7395,13 @@ void ride_update_max_vehicles(int rideIndex) } ride->max_trains = maxNumTrains; - numCarsPerTrain = min(ride->var_0CB, newCarsPerTrain); - numVehicles = min(ride->var_0CA, maxNumTrains); + numCarsPerTrain = min(ride->proposed_num_cars_per_train, newCarsPerTrain); + numVehicles = min(ride->proposed_num_vehicles, maxNumTrains); } else { ride->max_trains = rideEntry->cars_per_flat_ride; ride->min_max_cars_per_train = rideEntry->max_cars_in_train | (rideEntry->min_cars_in_train << 4); numCarsPerTrain = rideEntry->max_cars_in_train; - numVehicles = min(ride->var_0CA, rideEntry->cars_per_flat_ride); + numVehicles = min(ride->proposed_num_vehicles, rideEntry->cars_per_flat_ride); } // Refresh new current num vehicles / num cars per vehicle @@ -7524,7 +7524,7 @@ void game_command_set_ride_vehicles(int *eax, int *ebx, int *ecx, int *edx, int switch (commandType) { case RIDE_SET_VEHICLES_COMMAND_TYPE_NUM_TRAINS: - ride->var_0CA = value; + ride->proposed_num_vehicles = value; if (ride->type != RIDE_TYPE_SPACE_RINGS) { gfx_invalidate_screen(); } @@ -7533,7 +7533,7 @@ void game_command_set_ride_vehicles(int *eax, int *ebx, int *ecx, int *edx, int invalidate_test_results(rideIndex); rideEntry = get_ride_entry(ride->subtype); value = clamp(rideEntry->min_cars_in_train, value, rideEntry->max_cars_in_train); - ride->var_0CB = value; + ride->proposed_num_cars_per_train = value; break; case RIDE_SET_VEHICLES_COMMAND_TYPE_RIDE_ENTRY: invalidate_test_results(rideIndex); diff --git a/src/ride/ride.h b/src/ride/ride.h index bc4647b2e4..ad9719e4ea 100644 --- a/src/ride/ride.h +++ b/src/ride/ride.h @@ -157,8 +157,8 @@ typedef struct { uint8 num_stations; // 0x0C7 uint8 num_vehicles; // 0x0C8 uint8 num_cars_per_train; // 0x0C9 - uint8 var_0CA; - uint8 var_0CB; + uint8 proposed_num_vehicles; // 0x0CA + uint8 proposed_num_cars_per_train; // 0x0CB uint8 max_trains; // 0x0CC uint8 min_max_cars_per_train; // 0x0CD uint8 min_waiting_time; // 0x0CE @@ -185,7 +185,7 @@ typedef struct { sint32 max_speed; // 0x0D8 sint32 average_speed; // 0x0DC uint8 current_test_segment; // 0x0E0 - uint8 var_0E1; + uint8 average_speed_test_timeout; // 0x0E1 uint8 pad_0E2[0x2]; sint32 length[4]; // 0x0E4 uint16 time[4]; // 0x0F4 @@ -196,8 +196,9 @@ typedef struct { fixed16_2dp previous_lateral_g; // 0x104 uint8 pad_106[0x2]; uint32 testing_flags; // 0x108 - // x y map location - uint16 var_10C; + // x y map location of the current track piece during a test + // this is to prevent counting special tracks multiple times + rct_xy8 cur_test_track_location; // 0x10C // Next 3 variables are related (XXXX XYYY ZZZa aaaa) uint16 turn_count_default; // 0x10E X = current turn count uint16 turn_count_banked; // 0x110 @@ -214,10 +215,11 @@ typedef struct { uint8 start_drop_height; // 0x116 uint8 highest_drop_height; // 0x117 sint32 sheltered_length; // 0x118 + // Unused always 0? Should affect nausea uint16 var_11C; uint8 num_sheltered_sections; // 0x11E (?abY YYYY) - // z related to var_10C - uint8 var_11F; + // see cur_test_track_location + uint8 cur_test_track_z; // 0x11F // Customer counter in the current 960 game tick (about 30 seconds) interval uint16 cur_num_customers; // 0x120 // Counts ticks to update customer intervals, resets each 960 game ticks. diff --git a/src/ride/vehicle.c b/src/ride/vehicle.c index f04c2a1dbf..4408045445 100644 --- a/src/ride/vehicle.c +++ b/src/ride/vehicle.c @@ -751,15 +751,15 @@ static void vehicle_update_measurements(rct_vehicle *vehicle) if (ride->entrances[stationId] != 0xFFFF){ uint8 test_segment = ride->current_test_segment; - ride->var_0E1++; - if (ride->var_0E1 >= 32)ride->var_0E1 = 0; + ride->average_speed_test_timeout++; + if (ride->average_speed_test_timeout >= 32)ride->average_speed_test_timeout = 0; sint32 velocity = abs(vehicle->velocity); if (velocity > ride->max_speed){ ride->max_speed = velocity; } - if (ride->var_0E1 == 0 && velocity > 0x8000){ + if (ride->average_speed_test_timeout == 0 && velocity > 0x8000){ ride->average_speed += velocity; ride->time[test_segment]++; } @@ -798,10 +798,11 @@ static void vehicle_update_measurements(rct_vehicle *vehicle) } } + // If we have already evaluated this track piece skip to next section uint16 map_location = (vehicle->track_x / 32) | ((vehicle->track_y / 32) << 8); - if (vehicle->track_z / 8 != ride->var_11F || map_location != ride->var_10C){ - ride->var_11F = vehicle->track_z / 8; - ride->var_10C = map_location; + if (vehicle->track_z / 8 != ride->cur_test_track_z || map_location != ride->cur_test_track_location.xy){ + ride->cur_test_track_z = vehicle->track_z / 8; + ride->cur_test_track_location.xy = map_location; if (ride->entrances[ride->current_test_station] == 0xFFFF) return; @@ -2037,15 +2038,15 @@ void vehicle_test_reset(rct_vehicle* vehicle) { ride->max_speed = 0; ride->average_speed = 0; ride->current_test_segment = 0; - ride->var_0E1 = 0; + ride->average_speed_test_timeout = 0; ride->max_positive_vertical_g = FIXED_2DP(1, 0); ride->max_negative_vertical_g = FIXED_2DP(1, 0); ride->max_lateral_g = 0; ride->previous_vertical_g = 0; ride->previous_lateral_g = 0; ride->testing_flags = 0; - ride->var_10C = 0xFFFF; - ride->var_11F = 0xFF; + ride->cur_test_track_location.xy = 0xFFFF; + ride->cur_test_track_z = 0xFF; ride->turn_count_default = 0; ride->turn_count_banked = 0; ride->turn_count_sloped = 0;