Added vehicle update move to end of station

This commit is contained in:
Duncan Frost 2015-04-07 21:28:11 +01:00 committed by duncanspumpkin
parent 691914e4e4
commit d52a5a1850
2 changed files with 115 additions and 3 deletions

View File

@ -600,7 +600,7 @@ enum {
RIDE_MODE_ROTATING_LIFT,
RIDE_MODE_STATION_TO_STATION,
RIDE_MODE_SINGLE_RIDE_PER_ADMISSION,
RIDE_MODE_UNLIMITED_RIDES_PER_ADMISSION,
RIDE_MODE_UNLIMITED_RIDES_PER_ADMISSION = 10,
RIDE_MODE_MAZE,
RIDE_MODE_RACE,
RIDE_MODE_BUMPERCAR,
@ -610,7 +610,7 @@ enum {
RIDE_MODE_FORWARD_ROTATION,
RIDE_MODE_BACKWARD_ROTATION,
RIDE_MODE_FILM_AVENGING_AVIATORS,
RIDE_MODE_3D_FILM_MOUSE_TAILS,
RIDE_MODE_3D_FILM_MOUSE_TAILS = 20,
RIDE_MODE_SPACE_RINGS,
RIDE_MODE_BEGINNERS,
RIDE_MODE_LIM_POWERED_LAUNCH,
@ -620,7 +620,7 @@ enum {
RIDE_MODE_INTENSE,
RIDE_MODE_BERSERK,
RIDE_MODE_HAUNTED_HOUSE,
RIDE_MODE_CIRCUS_SHOW,
RIDE_MODE_CIRCUS_SHOW = 30,
RIDE_MODE_DOWNWARD_LAUNCH,
RIDE_MODE_CROOKED_HOUSE,
RIDE_MODE_FREEFALL_DROP,

View File

@ -43,6 +43,7 @@ static void vehicle_ride_null_update_travelling(rct_vehicle *vehicle);
static void vehicle_ride_null_update_arriving(rct_vehicle *vehicle);
static void vehicle_update_doing_circus_show(rct_vehicle *vehicle);
static void vehicle_update_moving_to_end_of_station(rct_vehicle *vehicle);
static void vehicle_update_sound(rct_vehicle *vehicle);
static int vehicle_update_scream_sound(rct_vehicle *vehicle);
@ -871,6 +872,8 @@ static void vehicle_update(rct_vehicle *vehicle)
switch (vehicle->status) {
case VEHICLE_STATUS_MOVING_TO_END_OF_STATION:
vehicle_update_moving_to_end_of_station(vehicle);
break;
case VEHICLE_STATUS_WAITING_FOR_PASSENGERS:
case VEHICLE_STATUS_WAITING_TO_DEPART:
case VEHICLE_STATUS_DEPARTING:
@ -932,6 +935,115 @@ static void vehicle_ride_null_update_arriving(rct_vehicle *vehicle)
vehicle->status = VEHICLE_STATUS_MOVING_TO_END_OF_STATION;
}
static void sub_6DAB4C(rct_vehicle* vehicle, int* eax, int* ebx){
int eax_, ebx_, ecx, edx, esi, ebp, edi;
esi = (int)vehicle;
RCT2_CALLFUNC_X(0x006DAB4C, &eax_, &ebx_, &ecx, &edx, &esi, &edi, &ebp);
*eax = eax_;
*ebx = ebx_;
}
/**
*
* rct2: 0x006D7BCC
*/
static void vehicle_update_moving_to_end_of_station(rct_vehicle *vehicle){
rct_ride* ride = GET_RIDE(vehicle->ride);
int eax, ebx;
switch (ride->mode){
case RIDE_MODE_UPWARD_LAUNCH:
case RIDE_MODE_ROTATING_LIFT:
case RIDE_MODE_DOWNWARD_LAUNCH:
case RIDE_MODE_FREEFALL_DROP:
if (vehicle->velocity >= -131940){
vehicle->var_2C = -3298;
}
if (vehicle->velocity < -131940){
vehicle->velocity = vehicle->velocity / 16;
vehicle->var_2C = 0;
}
sub_6DAB4C(vehicle, &eax, &ebx);
if (!(eax&(1 << 5)))
break;
//Fall through to next case
case RIDE_MODE_BUMPERCAR:
case RIDE_MODE_SWING:
case RIDE_MODE_ROTATION:
case RIDE_MODE_FORWARD_ROTATION:
case RIDE_MODE_BACKWARD_ROTATION:
case RIDE_MODE_FILM_AVENGING_AVIATORS:
case RIDE_MODE_FILM_THRILL_RIDERS:
case RIDE_MODE_BEGINNERS:
case RIDE_MODE_INTENSE:
case RIDE_MODE_BERSERK:
case RIDE_MODE_3D_FILM_MOUSE_TAILS:
case RIDE_MODE_3D_FILM_STORM_CHASERS:
case RIDE_MODE_3D_FILM_SPACE_RAIDERS:
case RIDE_MODE_SPACE_RINGS:
case RIDE_MODE_HAUNTED_HOUSE:
case RIDE_MODE_CROOKED_HOUSE:
case RIDE_MODE_CIRCUS_SHOW:
vehicle->current_station = 0;
vehicle->velocity = 0;
vehicle->var_2C = 0;
vehicle->status = VEHICLE_STATUS_WAITING_FOR_PASSENGERS;
vehicle->var_51 = 0;
vehicle_invalidate_window(vehicle);
break;
default:
{
rct_ride_type* rideEntry = GET_RIDE_ENTRY(vehicle->ride_subtype);
rct_ride_type_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type];
if (!(vehicleEntry->var_14 & (1 << 3))){
if (vehicle->velocity <= 131940){
vehicle->var_2C = 3298;
}
}
if (vehicle->velocity > 131940){
vehicle->velocity = vehicle->velocity / 16;
vehicle->var_2C = 0;
}
int station;
sub_6DAB4C(vehicle, &eax, &station);
if (eax & (1 << 1)){
vehicle->velocity = 0;
vehicle->var_2C = 0;
vehicle->var_51++;
if (ride->mode == RIDE_MODE_RACE &&
vehicle->var_51 >= 40){
vehicle->status = VEHICLE_STATUS_WAITING_FOR_PASSENGERS;
vehicle->var_51 = 0;
vehicle_invalidate_window(vehicle);
break;
}
}
else{
if (vehicle->velocity > 98955){
vehicle->var_51 = 0;
}
}
if (!(eax & (1 << 0)))
break;
vehicle->current_station = station;
vehicle->velocity = 0;
vehicle->var_2C = 0;
vehicle->status = VEHICLE_STATUS_WAITING_FOR_PASSENGERS;
vehicle->var_51 = 0;
vehicle_invalidate_window(vehicle);
break;
}
}
}
/**
*
* rct2: 0x006D95F7