1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-16 03:23:15 +01:00

Integrate vehicle globals, part 2

This commit is contained in:
Ted John
2016-09-10 22:32:01 +01:00
parent e234dcbb10
commit ba453db01f
3 changed files with 127 additions and 125 deletions

View File

@@ -14,7 +14,6 @@
*****************************************************************************/
#pragma endregion
#include "../addresses.h"
#include "../world/sprite.h"
#include "cable_lift.h"
#include "ride.h"
@@ -220,8 +219,6 @@ static void cable_lift_update_arriving(rct_vehicle *vehicle)
static bool sub_6DF01A_loop(rct_vehicle* vehicle) {
rct_ride* ride = get_ride(vehicle->ride);
rct_xyz16 *unk_F64E20 = RCT2_ADDRESS(0x00F64E20, rct_xyz16);
for (; vehicle->remaining_distance >= 13962; _vehicleUnkF64E10++) {
uint8 trackType = vehicle->track_type >> 2;
if (trackType == TRACK_ELEM_CABLE_LIFT_HILL &&
@@ -234,8 +231,8 @@ static bool sub_6DF01A_loop(rct_vehicle* vehicle) {
const rct_vehicle_info *moveInfo = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, 0);
uint16 trackTotalProgress = vehicle_get_move_info_size(vehicle->var_CD, vehicle->track_type);
if (trackProgress >= trackTotalProgress) {
RCT2_GLOBAL(0x00F64E36, uint8) = TrackDefinitions[trackType].vangle_end;
RCT2_GLOBAL(0x00F64E37, uint8) = TrackDefinitions[trackType].bank_end;
_vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_end;
_vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_end;
rct_map_element* trackElement =
map_get_track_element_at_of_type_seq(
vehicle->track_x,
@@ -256,8 +253,8 @@ static bool sub_6DF01A_loop(rct_vehicle* vehicle) {
if (!track_block_get_next(&input, &output, &outputZ, &outputDirection))
return false;
if (TrackDefinitions[output.element->properties.track.type].vangle_start != RCT2_GLOBAL(0x00F64E36, uint8) ||
TrackDefinitions[output.element->properties.track.type].bank_start != RCT2_GLOBAL(0x00F64E37, uint8))
if (TrackDefinitions[output.element->properties.track.type].vangle_start != _vehicleVAngleEndF64E36 ||
TrackDefinitions[output.element->properties.track.type].bank_start != _vehicleBankEndF64E37)
return false;
vehicle->track_x = output.x;
@@ -282,17 +279,17 @@ static bool sub_6DF01A_loop(rct_vehicle* vehicle) {
uint8 bx = 0;
unk.z += RideData5[ride->type].z_offset;
if (unk.x != unk_F64E20->x)
if (unk.x != unk_F64E20.x)
bx |= (1 << 0);
if (unk.y != unk_F64E20->y)
if (unk.y != unk_F64E20.y)
bx |= (1 << 1);
if (unk.z != unk_F64E20->z)
if (unk.z != unk_F64E20.z)
bx |= (1 << 2);
vehicle->remaining_distance -= dword_9A2930[bx];
unk_F64E20->x = unk.x;
unk_F64E20->y = unk.y;
unk_F64E20->z = unk.z;
unk_F64E20.x = unk.x;
unk_F64E20.y = unk.y;
unk_F64E20.z = unk.z;
vehicle->sprite_direction = moveInfo->direction;
vehicle->bank_rotation = moveInfo->bank_rotation;
@@ -307,16 +304,14 @@ static bool sub_6DF01A_loop(rct_vehicle* vehicle) {
static bool sub_6DF21B_loop(rct_vehicle* vehicle) {
rct_ride* ride = get_ride(vehicle->ride);
rct_xyz16 *unk_F64E20 = RCT2_ADDRESS(0x00F64E20, rct_xyz16);
for (; vehicle->remaining_distance < 0; _vehicleUnkF64E10++) {
uint16 trackProgress = vehicle->track_progress - 1;
const rct_vehicle_info *moveInfo;
if ((sint16)trackProgress == -1) {
uint8 trackType = vehicle->track_type >> 2;
RCT2_GLOBAL(0x00F64E36, uint8) = TrackDefinitions[trackType].vangle_start;
RCT2_GLOBAL(0x00F64E37, uint8) = TrackDefinitions[trackType].bank_start;
_vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_start;
_vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_start;
rct_map_element* trackElement =
map_get_track_element_at_of_type_seq(
vehicle->track_x,
@@ -335,8 +330,8 @@ static bool sub_6DF21B_loop(rct_vehicle* vehicle) {
if (!track_block_get_previous(input.x, input.y, input.element, &output))
return false;
if (TrackDefinitions[output.begin_element->properties.track.type].vangle_end != RCT2_GLOBAL(0x00F64E36, uint8) ||
TrackDefinitions[output.begin_element->properties.track.type].bank_end != RCT2_GLOBAL(0x00F64E37, uint8))
if (TrackDefinitions[output.begin_element->properties.track.type].vangle_end != _vehicleVAngleEndF64E36 ||
TrackDefinitions[output.begin_element->properties.track.type].bank_end != _vehicleBankEndF64E37)
return false;
vehicle->track_x = output.begin_x;
@@ -368,17 +363,17 @@ static bool sub_6DF21B_loop(rct_vehicle* vehicle) {
uint8 bx = 0;
unk.z += RideData5[ride->type].z_offset;
if (unk.x != unk_F64E20->x)
if (unk.x != unk_F64E20.x)
bx |= (1 << 0);
if (unk.y != unk_F64E20->y)
if (unk.y != unk_F64E20.y)
bx |= (1 << 1);
if (unk.z != unk_F64E20->z)
if (unk.z != unk_F64E20.z)
bx |= (1 << 2);
vehicle->remaining_distance += dword_9A2930[bx];
unk_F64E20->x = unk.x;
unk_F64E20->y = unk.y;
unk_F64E20->z = unk.z;
unk_F64E20.x = unk.x;
unk_F64E20.y = unk.y;
unk_F64E20.z = unk.z;
vehicle->sprite_direction = moveInfo->direction;
vehicle->bank_rotation = moveInfo->bank_rotation;
@@ -397,7 +392,7 @@ static bool sub_6DF21B_loop(rct_vehicle* vehicle) {
*/
int cable_lift_update_track_motion(rct_vehicle *cableLift)
{
RCT2_GLOBAL(0x00F64E2C, uint8) = 0;
_vehicleF64E2C = 0;
gCurrentVehicle = cableLift;
_vehicleMotionTrackFlags = 0;
_vehicleStationIndex = 0xFF;
@@ -411,7 +406,7 @@ int cable_lift_update_track_motion(rct_vehicle *cableLift)
frontVehicle = vehicle_get_tail(cableLift);
}
RCT2_GLOBAL(0x00F64E00, rct_vehicle*) = frontVehicle;
_vehicleFrontVehicle = frontVehicle;
for (rct_vehicle* vehicle = frontVehicle;;) {
vehicle->acceleration = dword_9A2970[vehicle->vehicle_sprite_type];
@@ -419,10 +414,9 @@ int cable_lift_update_track_motion(rct_vehicle *cableLift)
vehicle->remaining_distance += _vehicleVelocityF64E0C;
if (vehicle->remaining_distance < 0 || vehicle->remaining_distance >= 13962) {
rct_xyz16 *unk_F64E20 = RCT2_ADDRESS(0x00F64E20, rct_xyz16);
unk_F64E20->x = vehicle->x;
unk_F64E20->y = vehicle->y;
unk_F64E20->z = vehicle->z;
unk_F64E20.x = vehicle->x;
unk_F64E20.y = vehicle->y;
unk_F64E20.z = vehicle->z;
invalidate_sprite_2((rct_sprite*)vehicle);
while (true) {
@@ -453,9 +447,9 @@ int cable_lift_update_track_motion(rct_vehicle *cableLift)
}
}
sprite_move(
unk_F64E20->x,
unk_F64E20->y,
unk_F64E20->z,
unk_F64E20.x,
unk_F64E20.y,
unk_F64E20.z,
(rct_sprite*)vehicle);
invalidate_sprite_2((rct_sprite*)vehicle);

View File

@@ -78,7 +78,6 @@ static bool vehicle_can_depart_synchronised(rct_vehicle *vehicle);
#define NO_SCREAM 254
rct_xyz16 *unk_F64E20 = RCT2_ADDRESS(0x00F64E20, rct_xyz16);
rct_vehicle *gCurrentVehicle;
static uint8 _vehicleBreakdown;
@@ -87,6 +86,11 @@ uint32 _vehicleMotionTrackFlags;
sint32 _vehicleVelocityF64E08;
sint32 _vehicleVelocityF64E0C;
sint32 _vehicleUnkF64E10;
uint8 _vehicleVAngleEndF64E36;
uint8 _vehicleBankEndF64E37;
uint8 _vehicleF64E2C;
rct_vehicle * _vehicleFrontVehicle;
rct_xyz16 unk_F64E20;
const uint8 byte_9A3A14[] = { SOUND_SCREAM_8, SOUND_SCREAM_1 };
const uint8 byte_9A3A16[] = { SOUND_SCREAM_1, SOUND_SCREAM_6 };
@@ -3524,8 +3528,8 @@ static void loc_6DA9F9(rct_vehicle *vehicle, int x, int y, int bx, int dx)
vehicle->track_progress = 0;
vehicle->status = VEHICLE_STATUS_TRAVELLING;
unk_F64E20->x = x;
unk_F64E20->y = y;
unk_F64E20.x = x;
unk_F64E20.y = y;
}
}
@@ -3550,9 +3554,9 @@ static void vehicle_update_motion_boat_hire(rct_vehicle *vehicle)
vehicle->remaining_distance += _vehicleVelocityF64E0C;
if (vehicle->remaining_distance >= 0x368A) {
vehicle->var_B8 &= ~(1 << 1);
unk_F64E20->x = vehicle->x;
unk_F64E20->y = vehicle->y;
unk_F64E20->z = vehicle->z;
unk_F64E20.x = vehicle->x;
unk_F64E20.y = vehicle->y;
unk_F64E20.z = vehicle->z;
vehicle_invalidate(vehicle);
for (;;) {
@@ -3684,11 +3688,11 @@ static void vehicle_update_motion_boat_hire(rct_vehicle *vehicle)
break;
}
if (bp <= 16) {
x = unk_F64E20->x;
y = unk_F64E20->y + 1;
x = unk_F64E20.x;
y = unk_F64E20.y + 1;
} else {
x = unk_F64E20->x;
y = unk_F64E20->y - 1;
x = unk_F64E20.x;
y = unk_F64E20.y - 1;
}
} else {
// loc_6DA9A2:
@@ -3698,19 +3702,19 @@ static void vehicle_update_motion_boat_hire(rct_vehicle *vehicle)
break;
}
if (bp <= 16) {
x = unk_F64E20->x + 1;
y = unk_F64E20->y;
x = unk_F64E20.x + 1;
y = unk_F64E20.y;
} else {
x = unk_F64E20->x - 1;
y = unk_F64E20->y;
x = unk_F64E20.x - 1;
y = unk_F64E20.y;
}
}
// loc_6DA9D1:
vehicle->remaining_distance = 0;
if (!vehicle_update_motion_collision_detection(vehicle, x, y, vehicle->z, NULL)) {
unk_F64E20->x = x;
unk_F64E20->y = y;
unk_F64E20.x = x;
unk_F64E20.y = y;
}
break;
}
@@ -3719,8 +3723,8 @@ static void vehicle_update_motion_boat_hire(rct_vehicle *vehicle)
}
vehicle->remaining_distance -= RCT2_ADDRESS(0x009A36C8, uint32)[edi * 2];
unk_F64E20->x = x;
unk_F64E20->y = y;
unk_F64E20.x = x;
unk_F64E20.y = y;
if (vehicle->remaining_distance < 0x368A) {
break;
}
@@ -3728,9 +3732,9 @@ static void vehicle_update_motion_boat_hire(rct_vehicle *vehicle)
}
sprite_move(
unk_F64E20->x,
unk_F64E20->y,
unk_F64E20->z,
unk_F64E20.x,
unk_F64E20.y,
unk_F64E20.z,
(rct_sprite*)vehicle
);
vehicle_invalidate(vehicle);
@@ -5415,10 +5419,9 @@ static int vehicle_update_motion_bumper_car(rct_vehicle* vehicle) {
if (vehicle->remaining_distance >= 13962) {
vehicle->var_B8 &= ~(1 << 1);
rct_xyz16 *unk_F64E20 = RCT2_ADDRESS(0x00F64E20, rct_xyz16);
unk_F64E20->x = vehicle->x;
unk_F64E20->y = vehicle->y;
unk_F64E20->z = vehicle->z;
unk_F64E20.x = vehicle->x;
unk_F64E20.y = vehicle->y;
unk_F64E20.z = vehicle->z;
vehicle_invalidate(vehicle);
@@ -5427,7 +5430,7 @@ static int vehicle_update_motion_bumper_car(rct_vehicle* vehicle) {
uint8 direction = vehicle->sprite_direction;
direction |= vehicle->var_35 & 1;
rct_xyz16 location = *unk_F64E20;
rct_xyz16 location = unk_F64E20;
location.x += RCT2_ADDRESS(0x009A36C4, sint16)[direction * 4];
location.y += RCT2_ADDRESS(0x009A36C6, sint16)[direction * 4];
@@ -5435,8 +5438,8 @@ static int vehicle_update_motion_bumper_car(rct_vehicle* vehicle) {
break;
vehicle->remaining_distance -= RCT2_ADDRESS(0x009A36C8, sint16)[direction * 4];
unk_F64E20->x = location.x;
unk_F64E20->y = location.y;
unk_F64E20.x = location.x;
unk_F64E20.y = location.y;
if (vehicle->remaining_distance < 13962) {
break;
}
@@ -5468,9 +5471,9 @@ static int vehicle_update_motion_bumper_car(rct_vehicle* vehicle) {
}
sprite_move(
unk_F64E20->x,
unk_F64E20->y,
unk_F64E20->z,
unk_F64E20.x,
unk_F64E20.y,
unk_F64E20.z,
(rct_sprite*)vehicle
);
vehicle_invalidate(vehicle);
@@ -6646,9 +6649,9 @@ static bool loc_6DB38B(rct_vehicle *vehicle, rct_map_element *mapElement)
int trackType = mapElement->properties.track.type;
int vangleStart = TrackDefinitions[trackType].vangle_start;
// ?
uint16 angleAndBank = vangleStart | (bankStart << 8);
if (angleAndBank != RCT2_GLOBAL(0x00F64E36, uint16)) {
if (vangleStart != _vehicleVAngleEndF64E36 ||
bankStart != _vehicleBankEndF64E37
) {
return false;
}
@@ -6724,9 +6727,9 @@ static void vehicle_update_play_water_splash_sound()
audio_play_sound_at_location(
SOUND_WATER_SPLASH,
unk_F64E20->x,
unk_F64E20->y,
unk_F64E20->z
unk_F64E20.x,
unk_F64E20.y,
unk_F64E20.z
);
}
@@ -7065,8 +7068,8 @@ static void sub_6DBF3E(rct_vehicle *vehicle)
static bool vehicle_update_track_motion_forwards_get_new_track(rct_vehicle *vehicle, uint16 trackType, rct_ride* ride, rct_ride_entry* rideEntry) {
registers regs = { 0 };
RCT2_GLOBAL(0x00F64E36, uint8) = TrackDefinitions[trackType].vangle_end;
RCT2_GLOBAL(0x00F64E37, uint8) = TrackDefinitions[trackType].bank_end;
_vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_end;
_vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_end;
rct_map_element *mapElement = map_get_track_element_at_of_type_seq(
vehicle->track_x,
vehicle->track_y,
@@ -7266,8 +7269,8 @@ loc_6DAEB9:
vehicle->acceleration = -_vehicleVelocityF64E08 * 16;
}
else if (!(gCurrentTicks & 0x0F)) {
if (RCT2_GLOBAL(0x00F64E2C, uint8) == 0) {
RCT2_GLOBAL(0x00F64E2C, uint8)++;
if (_vehicleF64E2C == 0) {
_vehicleF64E2C++;
audio_play_sound_at_location(SOUND_51, vehicle->x, vehicle->y, vehicle->z);
}
}
@@ -7336,9 +7339,9 @@ loc_6DAEB9:
trackType = vehicle->track_type >> 2;
regs.ebx = 0;
if (x != unk_F64E20->x) { regs.ebx |= 1; }
if (y != unk_F64E20->y) { regs.ebx |= 2; }
if (z != unk_F64E20->z) { regs.ebx |= 4; }
if (x != unk_F64E20.x) { regs.ebx |= 1; }
if (y != unk_F64E20.y) { regs.ebx |= 2; }
if (z != unk_F64E20.z) { regs.ebx |= 4; }
if (vehicle->var_CD == 15 &&
(trackType == TRACK_ELEM_LEFT_REVERSER ||
trackType == TRACK_ELEM_RIGHT_REVERSER) &&
@@ -7367,9 +7370,9 @@ loc_6DAEB9:
// loc_6DB8A5
regs.ebx = dword_9A2930[regs.ebx];
vehicle->remaining_distance -= regs.ebx;
unk_F64E20->x = x;
unk_F64E20->y = y;
unk_F64E20->z = z;
unk_F64E20.x = x;
unk_F64E20.y = y;
unk_F64E20.z = z;
vehicle->sprite_direction = moveInfo->direction;
vehicle->bank_rotation = moveInfo->bank_rotation;
vehicle->vehicle_sprite_type = moveInfo->vehicle_sprite_type;
@@ -7383,7 +7386,7 @@ loc_6DAEB9:
}
// vehicle == frontVehicle
if (vehicle == RCT2_GLOBAL(0x00F64E00, rct_vehicle*)) {
if (vehicle == _vehicleFrontVehicle) {
if (_vehicleVelocityF64E08 >= 0) {
regs.bp = vehicle->prev_vehicle_on_ride;
if (vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16 *)&regs.bp)) {
@@ -7444,8 +7447,8 @@ loc_6DB967:
* rct2: 0x006DBAA6
*/
static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle *vehicle, uint16 trackType, rct_ride* ride, rct_ride_entry* rideEntry, uint16* progress) {
RCT2_GLOBAL(0x00F64E36, uint8) = TrackDefinitions[trackType].vangle_start;
RCT2_GLOBAL(0x00F64E37, uint8) = TrackDefinitions[trackType].bank_start;
_vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_start;
_vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_start;
rct_map_element* mapElement = map_get_track_element_at_of_type_seq(
vehicle->track_x,
vehicle->track_y,
@@ -7497,8 +7500,8 @@ static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle *veh
int bank = TrackDefinitions[trackType].bank_end;
bank = track_get_actual_bank_2(ride->type, trackColour, bank);
int vAngle = TrackDefinitions[trackType].vangle_end;
if (RCT2_GLOBAL(0x00F64E36, uint8) != vAngle ||
RCT2_GLOBAL(0x00F64E37, uint8) != bank
if (_vehicleVAngleEndF64E36 != vAngle ||
_vehicleBankEndF64E37 != bank
) {
return false;
}
@@ -7638,14 +7641,14 @@ loc_6DBA33:;
sint16 z = vehicle->track_z + moveInfo->z + RideData5[ride->type].z_offset;
regs.ebx = 0;
if (x != unk_F64E20->x) { regs.ebx |= 1; }
if (y != unk_F64E20->y) { regs.ebx |= 2; }
if (z != unk_F64E20->z) { regs.ebx |= 4; }
if (x != unk_F64E20.x) { regs.ebx |= 1; }
if (y != unk_F64E20.y) { regs.ebx |= 2; }
if (z != unk_F64E20.z) { regs.ebx |= 4; }
vehicle->remaining_distance += dword_9A2930[regs.ebx];
unk_F64E20->x = x;
unk_F64E20->y = y;
unk_F64E20->z = z;
unk_F64E20.x = x;
unk_F64E20.y = y;
unk_F64E20.z = z;
vehicle->sprite_direction = moveInfo->direction;
vehicle->bank_rotation = moveInfo->bank_rotation;
regs.ebx = moveInfo->vehicle_sprite_type;
@@ -7657,7 +7660,7 @@ loc_6DBA33:;
vehicle->var_4E = 0;
}
if (vehicle == RCT2_GLOBAL(0x00F64E00, rct_vehicle*)) {
if (vehicle == _vehicleFrontVehicle) {
if (_vehicleVelocityF64E08 < 0) {
regs.bp = vehicle->next_vehicle_on_ride;
if (vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16*)&regs.bp)) {
@@ -7738,7 +7741,7 @@ static int vehicle_update_track_motion_mini_golf(rct_vehicle *vehicle, int* outS
if (_vehicleVelocityF64E08 < 0) {
vehicle = vehicle_get_tail(vehicle);
}
RCT2_GLOBAL(0x00F64E00, rct_vehicle*) = vehicle;
_vehicleFrontVehicle = vehicle;
loc_6DC40E:
regs.ebx = vehicle->vehicle_sprite_type;
@@ -7752,9 +7755,9 @@ loc_6DC40E:
goto loc_6DCE02;
}
vehicle->var_B8 &= ~(1 << 1);
unk_F64E20->x = vehicle->x;
unk_F64E20->y = vehicle->y;
unk_F64E20->z = vehicle->z;
unk_F64E20.x = vehicle->x;
unk_F64E20.y = vehicle->y;
unk_F64E20.z = vehicle->z;
vehicle_invalidate(vehicle);
loc_6DC462:
@@ -7834,8 +7837,8 @@ loc_6DC476:
}
uint16 trackType = vehicle->track_type >> 2;
RCT2_GLOBAL(0x00F64E36, uint8) = TrackDefinitions[trackType].vangle_end;
RCT2_GLOBAL(0x00F64E37, uint8) = TrackDefinitions[trackType].bank_end;
_vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_end;
_vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_end;
mapElement = map_get_track_element_at_of_type_seq(
vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3,
trackType, 0
@@ -7973,13 +7976,13 @@ loc_6DC743:
// Investigate redundant code
regs.ebx = 0;
if (regs.ax != unk_F64E20->x) {
if (regs.ax != unk_F64E20.x) {
regs.ebx |= 1;
}
if (regs.cx == unk_F64E20->y) {
if (regs.cx == unk_F64E20.y) {
regs.ebx |= 2;
}
if (regs.dx == unk_F64E20->z) {
if (regs.dx == unk_F64E20.z) {
regs.ebx |= 4;
}
regs.ebx = 0x368A;
@@ -7988,9 +7991,9 @@ loc_6DC743:
vehicle->remaining_distance = 0;
}
unk_F64E20->x = x;
unk_F64E20->y = y;
unk_F64E20->z = z;
unk_F64E20.x = x;
unk_F64E20.y = y;
unk_F64E20.z = z;
vehicle->sprite_direction = moveInfo->direction;
vehicle->bank_rotation = moveInfo->bank_rotation;
vehicle->vehicle_sprite_type = moveInfo->vehicle_sprite_type;
@@ -8003,7 +8006,7 @@ loc_6DC743:
}
}
if (vehicle == RCT2_GLOBAL(0x00F64E00, rct_vehicle*)) {
if (vehicle == _vehicleFrontVehicle) {
if (_vehicleVelocityF64E08 >= 0) {
regs.bp = vehicle->prev_vehicle_on_ride;
vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16*)&regs.bp);
@@ -8040,9 +8043,9 @@ loc_6DC9BC:
loc_6DCA7A:
vehicle->var_B8 &= ~(1 << 1);
unk_F64E20->x = vehicle->x;
unk_F64E20->y = vehicle->y;
unk_F64E20->z = vehicle->z;
unk_F64E20.x = vehicle->x;
unk_F64E20.y = vehicle->y;
unk_F64E20.z = vehicle->z;
vehicle_invalidate(vehicle);
loc_6DCA9A:
@@ -8052,8 +8055,8 @@ loc_6DCA9A:
}
trackType = vehicle->track_type >> 2;
RCT2_GLOBAL(0x00F64E36, uint8) = TrackDefinitions[trackType].vangle_end;
RCT2_GLOBAL(0x00F64E37, uint8) = TrackDefinitions[trackType].bank_end;
_vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_end;
_vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_end;
mapElement = map_get_track_element_at_of_type_seq(
vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3,
trackType, 0
@@ -8113,13 +8116,13 @@ loc_6DCC2C:
// Investigate redundant code
regs.ebx = 0;
if (regs.ax != unk_F64E20->x) {
if (regs.ax != unk_F64E20.x) {
regs.ebx |= 1;
}
if (regs.cx == unk_F64E20->y) {
if (regs.cx == unk_F64E20.y) {
regs.ebx |= 2;
}
if (regs.dx == unk_F64E20->z) {
if (regs.dx == unk_F64E20.z) {
regs.ebx |= 4;
}
regs.ebx = 0x368A;
@@ -8128,9 +8131,9 @@ loc_6DCC2C:
vehicle->remaining_distance = 0;
}
unk_F64E20->x = x;
unk_F64E20->y = y;
unk_F64E20->z = z;
unk_F64E20.x = x;
unk_F64E20.y = y;
unk_F64E20.z = z;
vehicle->sprite_direction = moveInfo->direction;
vehicle->bank_rotation = moveInfo->bank_rotation;
vehicle->vehicle_sprite_type = moveInfo->vehicle_sprite_type;
@@ -8143,7 +8146,7 @@ loc_6DCC2C:
}
}
if (vehicle == RCT2_GLOBAL(0x00F64E00, rct_vehicle*)) {
if (vehicle == _vehicleFrontVehicle) {
if (_vehicleVelocityF64E08 >= 0) {
regs.bp = vehicle->var_44;
if (vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16*)&regs.bp)) {
@@ -8186,7 +8189,7 @@ loc_6DCD6B:
goto loc_6DC99A;
loc_6DCDE4:
sprite_move(unk_F64E20->x, unk_F64E20->y, unk_F64E20->z, (rct_sprite*)vehicle);
sprite_move(unk_F64E20.x, unk_F64E20.y, unk_F64E20.z, (rct_sprite*)vehicle);
vehicle_invalidate(vehicle);
loc_6DCE02:
@@ -8366,7 +8369,7 @@ int vehicle_update_track_motion(rct_vehicle *vehicle, int *outStation)
return vehicle_update_track_motion_mini_golf(vehicle, outStation);
}
RCT2_GLOBAL(0x00F64E2C, uint8) = 0;
_vehicleF64E2C = 0;
gCurrentVehicle = vehicle;
_vehicleMotionTrackFlags = 0;
_vehicleStationIndex = 0xFF;
@@ -8380,7 +8383,7 @@ int vehicle_update_track_motion(rct_vehicle *vehicle, int *outStation)
}
// This will be the front vehicle even when traveling
// backwards.
RCT2_GLOBAL(0x00F64E00, rct_vehicle*) = vehicle;
_vehicleFrontVehicle = vehicle;
uint16 spriteId = vehicle->sprite_index;
while (spriteId != 0xFFFF) {
@@ -8406,9 +8409,9 @@ int vehicle_update_track_motion(rct_vehicle *vehicle, int *outStation)
car->remaining_distance = regs.eax;
car->var_B8 &= ~(1 << 1);
unk_F64E20->x = car->x;
unk_F64E20->y = car->y;
unk_F64E20->z = car->z;
unk_F64E20.x = car->x;
unk_F64E20.y = car->y;
unk_F64E20.z = car->z;
invalidate_sprite_2((rct_sprite*)car);
while (true) {
@@ -8445,7 +8448,7 @@ int vehicle_update_track_motion(rct_vehicle *vehicle, int *outStation)
}
}
// loc_6DBF20
sprite_move(unk_F64E20->x, unk_F64E20->y, unk_F64E20->z, (rct_sprite*)car);
sprite_move(unk_F64E20.x, unk_F64E20.y, unk_F64E20.z, (rct_sprite*)car);
invalidate_sprite_2((rct_sprite*)car);
loc_6DBF3E:

View File

@@ -391,6 +391,11 @@ extern uint32 _vehicleMotionTrackFlags;
extern sint32 _vehicleVelocityF64E08;
extern sint32 _vehicleVelocityF64E0C;
extern sint32 _vehicleUnkF64E10;
extern uint8 _vehicleVAngleEndF64E36;
extern uint8 _vehicleBankEndF64E37;
extern uint8 _vehicleF64E2C;
extern rct_vehicle * _vehicleFrontVehicle;
extern rct_xyz16 unk_F64E20;
/** Helper macro until rides are stored in this module. */
#define GET_VEHICLE(sprite_index) &(get_sprite(sprite_index)->vehicle)