diff --git a/src/ride/vehicle.c b/src/ride/vehicle.c index 138d0add76..895c7b8e6b 100644 --- a/src/ride/vehicle.c +++ b/src/ride/vehicle.c @@ -2444,8 +2444,73 @@ loc_6DCDE4: invalidate_sprite_2((rct_sprite*)vehicle); loc_6DCE02: + vehicle->var_2C /= RCT2_GLOBAL(0x00F64E10, uint32); + if (vehicle->var_CD == 2) { + goto loc_6DCEB2; + } + trackType = vehicle->track_type >> 2; + if (!(RCT2_GLOBAL(0x0099BA64 + (trackType * 16), uint32) & 0x10)) { + goto loc_6DCEB2; + } + RCT2_GLOBAL(0x00F64E18, uint32) |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_3; + if (trackType != TRACK_ELEM_END_STATION) { + goto loc_6DCEB2; + } + if (vehicle != RCT2_GLOBAL(0x00F64E04, rct_vehicle*)) { + goto loc_6DCEB2; + } + regs.ax = vehicle->var_34; + if (RCT2_GLOBAL(0x00F64E08, uint32) < 0) { + goto loc_6DCE62; + } + regs.cx = 8; + if (regs.ax > regs.cx) { + goto loc_6DCE68; + } + goto loc_6DCEB2; + +loc_6DCE62: + if (regs.ax > 11) { + goto loc_6DCEB2; + } + +loc_6DCE68: + RCT2_GLOBAL(0x00F64E18, uint32) |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_0; + regs.al = vehicle->track_x >> 5; + regs.ah = vehicle->track_y >> 5; + regs.dl = vehicle->track_z >> 3; + for (int i = 0; i < 4; i++) { + if ((uint16)regs.ax != ride->station_starts[i]) { + continue; + } + if ((uint16)regs.dl != ride->station_heights[i]) { + continue; + } + RCT2_GLOBAL(0x00F64E1C, uint32) = i; + } + +loc_6DCEB2: + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_0) { + RCT2_GLOBAL(0x00F64E18, uint32) |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_4; + } + if (RCT2_GLOBAL(0x00F64E08, sint32) >= 0) { + regs.si = vehicle->next_vehicle_on_train; + if (regs.si == SPRITE_INDEX_NULL) { + goto loc_6DCEFF; + } + vehicle = GET_VEHICLE(regs.si); + goto loc_6DC40E; + } + + if (vehicle == RCT2_GLOBAL(0x00F64E04, rct_vehicle*)) { + goto loc_6DCEFF; + } + vehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride); + goto loc_6DC40E; + +loc_6DCEFF: regs.esi = vehicle; - RCT2_CALLFUNC_Y(0x006DCE02, ®s); + RCT2_CALLFUNC_Y(0x006DCEFF, ®s); end: hook_setreturnregisters(®s); diff --git a/src/ride/vehicle.h b/src/ride/vehicle.h index 38c52d9ee9..833b7de61f 100644 --- a/src/ride/vehicle.h +++ b/src/ride/vehicle.h @@ -273,6 +273,7 @@ enum { VEHICLE_UPDATE_MOTION_TRACK_FLAG_1 = 1 << 1, VEHICLE_UPDATE_MOTION_TRACK_FLAG_2 = 1 << 2, VEHICLE_UPDATE_MOTION_TRACK_FLAG_3 = 1 << 3, + VEHICLE_UPDATE_MOTION_TRACK_FLAG_4 = 1 << 4, VEHICLE_UPDATE_MOTION_TRACK_FLAG_5 = 1 << 5, VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_DERAILED = 1 << 6, VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_COLLISION = 1 << 7,