mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-20 21:43:06 +01:00
Implement vehicle ferris wheel rotating update
This commit is contained in:
@@ -48,6 +48,7 @@ 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_waiting_for_passengers(rct_vehicle* vehicle);
|
||||
static void vehicle_update_waiting_to_depart(rct_vehicle* vehicle);
|
||||
static void vehicle_update_ferris_wheel_rotating(rct_vehicle* vehicle);
|
||||
static void vehicle_update_bumpcar_mode(rct_vehicle* vehicle);
|
||||
static void vehicle_update_swinging(rct_vehicle* vehicle);
|
||||
static void vehicle_update_simulator_operating(rct_vehicle* vehicle);
|
||||
@@ -1063,15 +1064,16 @@ static void vehicle_update(rct_vehicle *vehicle)
|
||||
case VEHICLE_STATUS_TOP_SPIN_OPERATING:
|
||||
vehicle_update_top_spin_operating(vehicle);
|
||||
break;
|
||||
case VEHICLE_STATUS_FERRIS_WHEEL_ROTATING:
|
||||
vehicle_update_ferris_wheel_rotating(vehicle);
|
||||
break;
|
||||
case VEHICLE_STATUS_DEPARTING:
|
||||
case VEHICLE_STATUS_TRAVELLING:
|
||||
case VEHICLE_STATUS_ARRIVING:
|
||||
case VEHICLE_STATUS_UNLOADING_PASSENGERS:
|
||||
case VEHICLE_STATUS_TRAVELLING_07:
|
||||
case VEHICLE_STATUS_ROTATING:
|
||||
case VEHICLE_STATUS_FERRIS_WHEEL_ROTATING:
|
||||
case VEHICLE_STATUS_SPACE_RINGS_OPERATING:
|
||||
|
||||
case VEHICLE_STATUS_HAUNTED_HOUSE_OPERATING:
|
||||
case VEHICLE_STATUS_CROOKED_HOUSE_OPERATING:
|
||||
case VEHICLE_STATUS_TRAVELLING_15:
|
||||
@@ -1639,7 +1641,7 @@ static void vehicle_update_waiting_to_depart(rct_vehicle* vehicle) {
|
||||
vehicle_invalidate_window(vehicle);
|
||||
vehicle->var_CE = 0;
|
||||
vehicle->var_4C = 0x808;
|
||||
//6d9413
|
||||
vehicle_update_ferris_wheel_rotating(vehicle);
|
||||
break;
|
||||
case RIDE_MODE_3D_FILM_MOUSE_TAILS:
|
||||
case RIDE_MODE_3D_FILM_STORM_CHASERS:
|
||||
@@ -1758,6 +1760,84 @@ static void vehicle_update_swinging(rct_vehicle* vehicle) {
|
||||
vehicle_update_swinging(vehicle);
|
||||
}
|
||||
|
||||
/* rct2: 0x006D9413 */
|
||||
static void vehicle_update_ferris_wheel_rotating(rct_vehicle* vehicle) {
|
||||
if (RCT2_GLOBAL(0x00F64E34, uint8) == 0)
|
||||
return;
|
||||
|
||||
rct_ride* ride = GET_RIDE(vehicle->ride);
|
||||
if (((vehicle->var_4C -= 0x100) & 0xFF00) != 0)
|
||||
return;
|
||||
|
||||
sint8 var_4C = vehicle->var_4C & 0xFF;
|
||||
|
||||
if (var_4C == 3) {
|
||||
vehicle->var_4C = (0xFF & var_4C) | (0xFF00 & (var_4C << 8));
|
||||
}
|
||||
else if (var_4C < 3) {
|
||||
if (var_4C != -8)
|
||||
var_4C--;
|
||||
vehicle->var_4C = (0xFF & var_4C) | (0xFF00 & (-var_4C << 8));
|
||||
}
|
||||
else {
|
||||
var_4C--;
|
||||
vehicle->var_4C = (0xFF & var_4C) | (0xFF00 & (var_4C << 8));
|
||||
}
|
||||
|
||||
uint8 rotation = vehicle->var_1F;
|
||||
if (ride->mode & RIDE_MODE_FORWARD_ROTATION)
|
||||
rotation++;
|
||||
else
|
||||
rotation--;
|
||||
|
||||
rotation &= 0x7F;
|
||||
vehicle->var_1F = rotation;
|
||||
|
||||
if (rotation == vehicle->sub_state)
|
||||
vehicle->var_CE++;
|
||||
|
||||
invalidate_sprite_2((rct_sprite*)vehicle);
|
||||
|
||||
uint8 subState = vehicle->sub_state;
|
||||
if (ride->mode & RIDE_MODE_FORWARD_ROTATION)
|
||||
subState++;
|
||||
else
|
||||
subState--;
|
||||
subState &= 0x7F;
|
||||
|
||||
if (subState == vehicle->var_1F) {
|
||||
bool shouldStop = true;
|
||||
if (ride->status != RIDE_STATUS_CLOSED) {
|
||||
if (vehicle->var_CE <= ride->rotations)
|
||||
shouldStop = false;
|
||||
}
|
||||
|
||||
if (shouldStop) {
|
||||
var_4C = vehicle->var_4C;
|
||||
vehicle->var_4C &= 0xFF00;
|
||||
vehicle->var_4C |= 0xFF & (-abs(var_4C));
|
||||
}
|
||||
}
|
||||
|
||||
if ((sint8)(vehicle->var_4C & 0xFF) != -8)
|
||||
return;
|
||||
|
||||
subState = vehicle->sub_state;
|
||||
if (ride->mode & RIDE_MODE_FORWARD_ROTATION)
|
||||
subState += 8;
|
||||
else
|
||||
subState -= 8;
|
||||
subState &= 0x7F;
|
||||
|
||||
if (subState != vehicle->var_1F)
|
||||
return;
|
||||
|
||||
vehicle->status = VEHICLE_STATUS_ARRIVING;
|
||||
vehicle_invalidate_window(vehicle);
|
||||
vehicle->sub_state = 0;
|
||||
vehicle->var_C0 = 0;
|
||||
}
|
||||
|
||||
/* rct2: 0x006D94F2 */
|
||||
static void vehicle_update_simulator_operating(rct_vehicle* vehicle) {
|
||||
if (RCT2_GLOBAL(0x00F64E34, uint8) == 0)
|
||||
|
||||
Reference in New Issue
Block a user