diff --git a/src/ride/vehicle.c b/src/ride/vehicle.c index 152f5a21bc..84ded8b34f 100644 --- a/src/ride/vehicle.c +++ b/src/ride/vehicle.c @@ -3976,8 +3976,9 @@ static void vehicle_update_simulator_operating(rct_vehicle* vehicle) { if (RCT2_GLOBAL(0x00F64E34, uint8) == 0) return; - uint8* edi = RCT2_ADDRESS(0x009A0434, uint8); - uint8 al = edi[(uint16)(vehicle->current_time + 1)]; + assert(vehicle->current_time >= -1); + assert(vehicle->current_time < MotionSimulatorTimeToSpriteMapCount); + uint8 al = MotionSimulatorTimeToSpriteMap[vehicle->current_time + 1]; if (al != 0xFF) { vehicle->current_time++; if (al == vehicle->vehicle_sprite_type) diff --git a/src/ride/vehicle_data.c b/src/ride/vehicle_data.c index e2f8d2d872..8de601ac40 100644 --- a/src/ride/vehicle_data.c +++ b/src/ride/vehicle_data.c @@ -712,3 +712,89 @@ const top_spin_time_to_sprite_map * TopSpinTimeToSpriteMaps[] = { TopSpinTimeToSpriteMap_1, TopSpinTimeToSpriteMap_2, }; + +/** rct2: 0x009A0434 */ +const uint8 MotionSimulatorTimeToSpriteMap[] = { + 0, 0, 0, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, + 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, + 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 15, 15, 15, 15, 14, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, + 10, 10, 10, 10, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 25, 25, 25, 25, 24, 24, 24, + 24, 23, 23, 23, 23, 10, 10, 10, 10, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 31, 31, 31, 31, 30, 30, 30, 30, 29, 29, 29, 29, + 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, + 13, 13, 13, 12, 12, 12, 11, 11, 11, 10, 10, 10, 17, 17, 17, 18, 18, 18, 19, 19, 19, + 20, 20, 20, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 21, 21, 21, 20, 20, 20, 19, 19, 19, 18, 18, 18, 17, 17, 17, 10, 10, 10, + 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 11, 11, 11, 10, 10, 10, 9, 9, 8, 8, 7, 7, 6, 6, 7, 7, 8, 8, 9, 9, 29, + 29, 30, 30, 31, 31, 30, 30, 29, 29, 10, 10, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, + 22, 22, 21, 21, 20, 20, 19, 19, 18, 18, 17, 17, 10, 10, 11, 11, 12, 12, 12, 12, 12, + 12, 12, 11, 11, 10, 10, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, + 26, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 27, 27, 27, 27, 26, 26, 26, + 26, 25, 25, 25, 25, 24, 24, 24, 24, 23, 23, 23, 23, 10, 10, 10, 10, 29, 29, 29, 29, + 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 29, 29, 29, 29, + 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, + 16, 16, 16, 16, 16, 16, 15, 15, 15, 14, 14, 14, 13, 13, 13, 12, 12, 12, 11, 11, 11, + 10, 10, 10, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 19, 19, 19, 18, 18, 18, 17, 17, 17, 10, 10, 10, + 9, 9, 8, 8, 7, 7, 6, 6, 7, 7, 8, 8, 9, 9, 17, 17, 18, 18, 19, 19, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 19, 19, 18, 18, 17, 17, 10, 10, 23, 23, + 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 27, + 27, 26, 26, 25, 25, 24, 24, 23, 23, 10, 10, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, + 22, 22, 22, 21, 21, 20, 20, 19, 19, 18, 18, 17, 17, 10, 10, 11, 11, 12, 12, 13, 13, + 14, 14, 15, 15, 16, 16, 16, 15, 15, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10, 29, 29, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 29, 29, 10, 10, + 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 23, + 10, 10, 29, 29, 30, 30, 30, 30, 30, 30, 30, 29, 29, 10, 10, 23, 23, 24, 24, 24, 24, + 24, 24, 24, 23, 23, 10, 10, 29, 29, 30, 30, 30, 30, 30, 30, 30, 29, 29, 10, 10, 23, + 23, 24, 24, 24, 24, 24, 24, 24, 23, 23, 10, 10, 17, 17, 17, 17, 18, 18, 18, 18, 19, + 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 21, 21, 21, 21, 20, 20, 20, 20, 19, 19, 19, 19, + 18, 18, 18, 18, 17, 17, 17, 17, 10, 10, 10, 10, 17, 17, 18, 18, 19, 19, 20, 20, 21, + 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 21, 21, 20, + 20, 19, 19, 18, 18, 17, 17, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 14, 14, 13, 13, + 12, 12, 11, 11, 10, 10, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, + 26, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 27, 27, 27, 27, 26, 26, 26, 26, 25, 25, 25, 25, 24, 24, 24, 24, 23, 23, + 23, 23, 10, 10, 10, 10, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 32, 32, 32, + 32, 33, 33, 33, 33, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 33, 33, 33, 33, 32, 32, 32, 32, 31, 31, 31, 31, 30, 30, 30, 30, 29, 29, + 29, 29, 10, 10, 10, 10, 9, 9, 8, 8, 7, 7, 6, 6, 7, 7, 8, 8, 9, 9, 9, + 9, 8, 8, 7, 7, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9, 8, 8, 7, 7, 6, 6, + 7, 7, 8, 8, 9, 9, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, + 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20, 19, 19, + 19, 19, 19, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 10, 10, 10, 10, 10, 23, 23, 24, + 24, 25, 25, 26, 26, 27, 27, 28, 28, 27, 27, 26, 26, 25, 25, 24, 24, 23, 23, 10, 10, + 29, 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 33, 33, 32, 32, 31, + 31, 30, 30, 29, 29, 10, 10, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 19, 19, 19, 19, + 19, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20, 19, + 19, 19, 19, 19, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 10, 10, 10, 10, 10, 11, 11, + 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 15, 15, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10, 9, 9, 8, 8, 7, + 7, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9, 8, 8, 7, 7, 6, 6, 7, 7, 8, 8, + 9, 9, 23, 23, 24, 24, 25, 25, 24, 24, 23, 23, 10, 10, 29, 29, 30, 30, 31, 31, 30, + 30, 29, 29, 10, 10, 23, 23, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 24, 24, 23, 23, 10, 10, 29, 29, 30, 30, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 30, 30, 29, 29, 10, 10, 23, 23, 24, 24, + 24, 24, 24, 24, 24, 23, 23, 10, 10, 29, 29, 30, 30, 30, 30, 30, 30, 30, 29, 29, 10, + 10, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, + 23, 10, 10, 29, 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 33, 33, 32, 32, 31, 31, 30, 30, 29, 29, 10, 10, + 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 21, 21, 21, 20, 20, 20, 19, 19, 19, + 18, 18, 18, 17, 17, 17, 10, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, + 13, 13, 13, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 14, 14, 14, 14, + 14, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 9, 9, 9, 8, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, + 4, 0, 0, 0, + 0xFF, +}; + +const int MotionSimulatorTimeToSpriteMapCount = countof(MotionSimulatorTimeToSpriteMap); diff --git a/src/ride/vehicle_data.h b/src/ride/vehicle_data.h index 134d874bbc..759b72d66e 100644 --- a/src/ride/vehicle_data.h +++ b/src/ride/vehicle_data.h @@ -30,4 +30,7 @@ typedef struct top_spin_time_to_sprite_map { extern const top_spin_time_to_sprite_map * TopSpinTimeToSpriteMaps[]; +extern const uint8 MotionSimulatorTimeToSpriteMap[]; +extern const int MotionSimulatorTimeToSpriteMapCount; + #endif