Started work on 6d6d1f

This commit is contained in:
Duncan Frost 2015-04-05 09:38:37 +01:00 committed by duncanspumpkin
parent 5e198dfa1f
commit 2ab0c7684b
3 changed files with 105 additions and 5 deletions

View File

@ -232,13 +232,20 @@ typedef struct {
// (in RCT2, display_speed = (max_speed * 9) >> 18)
sint32 max_speed; // 0x0D8
sint32 average_speed; // 0x0DC
uint8 pad_0E0[4];
uint8 var_0E0;
uint8 var_0E1;
uint8 pad_0E2[0x2];
sint32 length[4]; // 0x0E4
uint16 time[4]; // 0x0F4
fixed16_2dp max_positive_vertical_g; // 0x0FC
fixed16_2dp max_negative_vertical_g; // 0x0FE
fixed16_2dp max_lateral_g; // 0x100
uint8 pad_102[0xC];
fixed16_2dp previous_vertical_g;// 0x102
fixed16_2dp previous_lateral_g; // 0x104
uint8 pad_106[0x2];
uint32 var_108;
// x y map location
uint16 var_10C;
uint16 var_10E;
uint16 var_110;
uint16 var_112;
@ -253,7 +260,7 @@ typedef struct {
uint8 var_116;
uint8 highest_drop_height; // 0x117
sint32 sheltered_length; // 0x118
uint8 pad_11C[0x2];
uint16 var_11C;
uint8 num_sheltered_sections; // 0x11E
uint8 var_11F;
sint16 var_120;
@ -358,7 +365,7 @@ typedef struct {
uint32 lifecycle_flags; // 0x1D0
uint8 vehicle_colours_extended[32]; // 0x1D4
uint16 total_air_time; // 0x1F4
uint8 pad_1F6;
uint8 var_1F6;
uint8 num_circuits; // 0x1F7
sint16 cable_lift_x; // 0x1F8
sint16 cable_lift_y; // 0x1FA

View File

@ -475,6 +475,99 @@ static void sub_6D6D1F(rct_vehicle *vehicle)
rct_ride *ride;
ride = GET_RIDE(vehicle->ride);
if (vehicle->status == VEHICLE_STATUS_TRAVELLING_07){
ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED;
ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS;
ride->lifecycle_flags &= ~RIDE_LIFECYCLE_TEST_IN_PROGRESS;
vehicle->var_48 &= ~(1 << 1);
window_invalidate_by_number(WC_RIDE, vehicle->ride);
return;
}
uint8 entrance = ride->var_1F6;
if (ride->entrances[entrance] != 0xFFFF){
//ecx
uint8 var_E0 = ride->var_0E0;
ride->var_0E1++;
if (ride->var_0E1 >= 32)ride->var_0E1 = 0;
sint32 velocity = abs(vehicle->velocity);
if (velocity > ride->max_speed){
ride->max_speed = velocity;
}
if (ride->var_0E1 == 0 && velocity > 0x8000){
ride->average_speed += velocity;
ride->time[var_E0]++;
}
sint32 distance = abs(((vehicle->velocity + vehicle->var_2C) / 1024) * 42);
if (vehicle->var_CE != 0){
ride->length[var_E0] += distance;
}
if (RCT2_ADDRESS(RCT2_ADDRESS_RIDE_FLAGS, uint32)[ride->type * 2] & RIDE_TYPE_FLAG_HAS_G_FORCES){
int vertical_g, lateral_g;
vehicle_get_g_forces(vehicle, &vertical_g, &lateral_g);
vertical_g += ride->previous_vertical_g;
lateral_g += ride->previous_lateral_g;
vertical_g /= 2;
lateral_g /= 2;
ride->previous_vertical_g = vertical_g;
ride->previous_lateral_g = lateral_g;
if (vertical_g <= 0){
ride->total_air_time++;
}
if (vertical_g > ride->max_positive_vertical_g)
ride->max_positive_vertical_g = vertical_g;
if (vertical_g < ride->max_negative_vertical_g)
ride->max_negative_vertical_g = vertical_g;
lateral_g = abs(lateral_g);
if (lateral_g > ride->max_lateral_g)
ride->max_lateral_g = lateral_g;
}
}
uint16 map_location = (vehicle->var_38 / 32) | ((vehicle->var_3A / 32) << 8);
if (vehicle->var_3C / 8 != ride->var_11F && map_location != ride->var_10C){
ride->var_11F = vehicle->var_3C / 8;
ride->var_10C = map_location;
if (ride->entrances[ride->var_1F6] != 0xFFFF){
sint16 var_36 = vehicle->var_36 / 4;
if (var_36 == 182 || !(vehicle->var_48 & (1<<0))){
if (!(ride->var_108 & (1 << 6))){
ride->var_108 |= (1 << 6);
if (ride->drops + 64 < 0xFF){
ride->drops += 64;
}
}
}
else{
ride->var_108 &= ~(1 << 6);
}
if (ride->type == RIDE_TYPE_WATER_COASTER){
if (var_36 >= 68 && var_36 < 87){
ride->special_track_elements |= (1 << 5);
}
}
//0x6d6edf
}
}
//6d7211
RCT2_CALLPROC_X(0x006D6D1F, 0, 0, 0, 0, (int)vehicle, (int)ride, 0);
}

View File

@ -106,7 +106,7 @@ typedef struct {
uint8 pad_21[3];
uint32 var_24;
sint32 velocity; // 0x28
uint32 var_2C;
sint32 var_2C;
uint8 ride; // 0x30
uint8 vehicle_type; // 0x31
rct_vehicle_colour colours; // 0x32