/** rct2: 0x */ static void paint_mini_helicopters_track_station(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element * mapElement) { uint32 imageId; if (direction == 0 || direction == 2) { imageId = SPR_STATION_BASE_B_SW_NE | gTrackColours[SCHEME_MISC]; sub_98197C(imageId, 0, 0, 32, 28, 1, height - 2, 0, 2, height, get_current_rotation()); imageId = SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_NE_SW | gTrackColours[SCHEME_TRACK]; sub_98199C(imageId, 0, 0, 32, 20, 1, height, 0, 0, height, get_current_rotation()); metal_a_supports_paint_setup(METAL_SUPPORTS_BOXED, 5, 0, height, gTrackColours[SCHEME_SUPPORTS]); metal_a_supports_paint_setup(METAL_SUPPORTS_BOXED, 8, 0, height, gTrackColours[SCHEME_SUPPORTS]); paint_util_push_tunnel_left(height, TUNNEL_6); } else if (direction == 1 || direction == 3) { imageId = SPR_STATION_BASE_B_NW_SE | gTrackColours[SCHEME_MISC]; sub_98197C(imageId, 0, 0, 28, 32, 1, height - 2, 2, 0, height, get_current_rotation()); imageId = SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_SE_NW | gTrackColours[SCHEME_TRACK]; sub_98199C(imageId, 0, 0, 20, 32, 1, height, 0, 0, height, get_current_rotation()); metal_a_supports_paint_setup(METAL_SUPPORTS_BOXED, 6, 0, height, gTrackColours[SCHEME_SUPPORTS]); metal_a_supports_paint_setup(METAL_SUPPORTS_BOXED, 7, 0, height, gTrackColours[SCHEME_SUPPORTS]); paint_util_push_tunnel_right(height, TUNNEL_6); } track_paint_util_draw_station(rideIndex, trackSequence, direction, height, mapElement); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 32, 0x20); }
/** rct2: 0x008112D4, 0x008112E4, 0x008112F4 */ static void paint_virginia_reel_station(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) { uint32 imageId; if (direction == 0 || direction == 2) { imageId = SPR_STATION_BASE_B_SW_NE | gTrackColours[SCHEME_MISC]; sub_98197C(imageId, 0, 0, 32, 28, 2, height - 2, 0, 2, height, get_current_rotation()); imageId = SPR_VIRGINIA_REEL_FLAT_SW_NE | gTrackColours[SCHEME_TRACK]; sub_98199C(imageId, 0, 0, 32, 20, 2, height, 0, 0, height, get_current_rotation()); paint_util_push_tunnel_left(height, TUNNEL_6); } else if (direction == 1 || direction == 3) { imageId = SPR_STATION_BASE_B_NW_SE | gTrackColours[SCHEME_MISC]; sub_98197C(imageId, 0, 0, 28, 32, 2, height - 2, 2, 0, height, get_current_rotation()); imageId = SPR_VIRGINIA_REEL_FLAT_NW_SE | gTrackColours[SCHEME_TRACK]; sub_98199C(imageId, 0, 0, 20, 32, 2, height, 0, 0, height, get_current_rotation()); paint_util_push_tunnel_right(height, TUNNEL_6); } wooden_a_supports_paint_setup((direction & 1), 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); track_paint_util_draw_station(rideIndex, trackSequence, direction, height, mapElement); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 32, 0x20); }
/** rct2: 0x0081F368 */ static void paint_mini_helicopters_track_flat_to_25_deg_up(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element * mapElement) { rct_xy16 position = {gPaintMapPosition.x, gPaintMapPosition.y}; uint32 imageId; switch (direction) { case 0: imageId = SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_TO_25_DEG_UP_SW_NE | gTrackColours[SCHEME_TRACK]; sub_98197C(imageId, 0, 0, 32, 20, 3, height, 0, 6, height, get_current_rotation()); paint_util_push_tunnel_left(height, TUNNEL_0); break; case 1: imageId = SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_TO_25_DEG_UP_NW_SE | gTrackColours[SCHEME_TRACK]; sub_98197C(imageId, 0, 0, 20, 32, 3, height, 6, 0, height, get_current_rotation()); paint_util_push_tunnel_right(height, TUNNEL_2); break; case 2: imageId = SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_TO_25_DEG_UP_NE_SW | gTrackColours[SCHEME_TRACK]; sub_98197C(imageId, 0, 0, 32, 20, 3, height, 0, 6, height, get_current_rotation()); paint_util_push_tunnel_left(height, TUNNEL_2); break; case 3: imageId = SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_TO_25_DEG_UP_SE_NW | gTrackColours[SCHEME_TRACK]; sub_98197C(imageId, 0, 0, 20, 32, 3, height, 6, 0, height, get_current_rotation()); paint_util_push_tunnel_right(height, TUNNEL_0); break; } if (track_paint_util_should_paint_supports(position)) { metal_a_supports_paint_setup(METAL_SUPPORTS_STICK, 4, -4, height, gTrackColours[SCHEME_SUPPORTS]); } paint_util_set_segment_support_height(paint_util_rotate_segments(SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC, direction), 0xFFFF, 0); paint_util_set_general_support_height(height + 48, 0x20); }
/** rct2: 0x008AE1DC */ static void paint_monorail_track_25_deg_up_to_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element * mapElement) { rct_xy16 position = {gPaintMapPosition.x, gPaintMapPosition.y}; uint32 imageId = monorail_track_pieces_25_deg_up_to_flat[direction] | gTrackColours[SCHEME_TRACK]; if (direction == 0 || direction == 2) { sub_98196C(imageId, 0, 6, 32, 20, 3, height, get_current_rotation()); } else { sub_98196C(imageId, 6, 0, 20, 32, 3, height, get_current_rotation()); } switch (direction) { case 0: paint_util_push_tunnel_left(height - 8, TUNNEL_6); break; case 1: paint_util_push_tunnel_right(height + 8, TUNNEL_14); break; case 2: paint_util_push_tunnel_left(height + 8, TUNNEL_14); break; case 3: paint_util_push_tunnel_right(height - 8, TUNNEL_6); break; } if (track_paint_util_should_paint_supports(position)) { metal_a_supports_paint_setup(METAL_SUPPORTS_BOXED, 4, 6, height, gTrackColours[SCHEME_SUPPORTS]); } paint_util_set_segment_support_height(paint_util_rotate_segments(SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC, direction), 0xFFFF, 0); paint_util_set_general_support_height(height + 40, 0x20); }
/** * * rct2: 0x0068B60E */ static void blank_tiles_paint(sint32 x, sint32 y) { rct_drawpixelinfo *dpi = unk_140E9A8; sint32 dx = 0; switch (get_current_rotation()) { case 0: dx = x + y; break; case 1: x += 32; dx = y - x; break; case 2: x += 32; y += 32; dx = -(x + y); break; case 3: y += 32; dx = x - y; break; } dx /= 2; dx -= 16; sint32 bx = dx + 32; if (bx <= dpi->y) return; dx -= 20; dx -= dpi->height; if (dx >= dpi->y) return; gUnk9DE568 = x; gUnk9DE56C = y; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_NONE; sub_98196C(3123, 0, 0, 32, 32, -1, 16, get_current_rotation()); }
/** rct2: 0x00770CDC */ static void paint_ghost_train_track_brakes(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element * mapElement) { rct_xy16 position = {gPaintMapPosition.x, gPaintMapPosition.y}; uint32 imageId = ghost_train_track_pieces_brakes[direction] | gTrackColours[SCHEME_TRACK]; if (direction == 0 || direction == 2) { sub_98197C(imageId, 0, 0, 32, 20, 3, height, 0, 6, height, get_current_rotation()); } else { sub_98197C(imageId, 0, 0, 20, 32, 3, height, 6, 0, height, get_current_rotation()); } if (direction == 0 || direction == 2) { paint_util_push_tunnel_left(height, TUNNEL_0); } else { paint_util_push_tunnel_right(height, TUNNEL_0); } if (track_paint_util_should_paint_supports(position)) { metal_a_supports_paint_setup(METAL_SUPPORTS_BOXED, 4, 0, height, gTrackColours[SCHEME_SUPPORTS]); } paint_util_set_segment_support_height(paint_util_rotate_segments(SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC, direction), 0xFFFF, 0); paint_util_set_general_support_height(height + 32, 0x20); }
static void paint_ghost_train_track_25_deg_up_to_flat_shared(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element * mapElement) { rct_xy16 position = {gPaintMapPosition.x, gPaintMapPosition.y}; uint32 imageId = ghost_train_track_pieces_25_deg_up_to_flat[direction][0] | gTrackColours[SCHEME_TRACK]; if (direction == 0 || direction == 2) { sub_98197C(imageId, 0, 0, 32, 20, 3, height, 0, 6, height, get_current_rotation()); } else { sub_98197C(imageId, 0, 0, 20, 32, 3, height, 6, 0, height, get_current_rotation()); } imageId = ghost_train_track_pieces_25_deg_up_to_flat[direction][1] | gTrackColours[SCHEME_TRACK]; if (direction == 0 || direction == 2) { sub_98197C(imageId, 0, 0, 32, 1, 15, height, 0, 27, height, get_current_rotation()); } else { sub_98197C(imageId, 0, 0, 1, 32, 15, height, 27, 0, height, get_current_rotation()); } if (track_paint_util_should_paint_supports(position)) { metal_a_supports_paint_setup(METAL_SUPPORTS_BOXED, 4, 6, height, gTrackColours[SCHEME_SUPPORTS]); } paint_util_set_segment_support_height(paint_util_rotate_segments(SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC, direction), 0xFFFF, 0); paint_util_set_general_support_height(height + 40, 0x20); }
static void paint_lift_cage(sint8 index, uint32 colourFlags, sint32 height, uint8 rotation) { uint32 imageId; imageId = lift_cage_sprites[1 + index][0] | colourFlags; sub_98197C(imageId, 0, 0, 2, 2, 30, height, 2, 2, height, get_current_rotation()); imageId = lift_cage_sprites[1 + index][1] | colourFlags; sub_98197C(imageId, 0, 0, 2, 2, 30, height, 28, 28, height, get_current_rotation()); }
/** rct2: 0x00767C40 */ static void paint_space_rings(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element * mapElement) { trackSequence = track_map_3x3[direction][trackSequence]; sint32 edges = edges_3x3[trackSequence]; rct_ride * ride = get_ride(rideIndex); rct_xy16 position = {gPaintMapPosition.x, gPaintMapPosition.y}; uint32 imageId; wooden_a_supports_paint_setup((direction & 1), 0, height, gTrackColours[SCHEME_MISC], NULL); track_paint_util_paint_floor(edges, gTrackColours[SCHEME_TRACK], height, floorSpritesCork, get_current_rotation()); switch (trackSequence) { case 7: if (track_paint_util_has_fence(EDGE_SW, position, mapElement, ride, get_current_rotation())) { imageId = SPR_SPACE_RINGS_FENCE_SW | gTrackColours[SCHEME_MISC]; sub_98197C(imageId, 0, 0, 1, 28, 7, height, 29, 0, height + 2, get_current_rotation()); } if (track_paint_util_has_fence(EDGE_SE, position, mapElement, ride, get_current_rotation())) { imageId = SPR_SPACE_RINGS_FENCE_SE | gTrackColours[SCHEME_MISC]; sub_98197C(imageId, 0, 0, 28, 1, 7, height, 0, 29, height + 2, get_current_rotation()); } break; default: track_paint_util_paint_fences(edges, position, mapElement, ride, gTrackColours[SCHEME_MISC], height, space_rings_fence_sprites, get_current_rotation()); break; } switch (trackSequence) { case 0: paint_space_rings_structure(ride, direction, 0, height + 3); break; case 5: paint_space_rings_structure(ride, direction, 1, height + 3); break; case 7: paint_space_rings_structure(ride, direction, 2, height + 3); break; case 8: paint_space_rings_structure(ride, direction, 3, height + 3); break; } sint32 cornerSegments = 0; switch (trackSequence) { case 0: cornerSegments = 0; break; case 1: cornerSegments = SEGMENT_B8 | SEGMENT_C8 | SEGMENT_B4 | SEGMENT_CC | SEGMENT_BC; break; case 2: cornerSegments = SEGMENT_B4 | SEGMENT_CC | SEGMENT_BC; break; case 3: cornerSegments = SEGMENT_B4 | SEGMENT_CC | SEGMENT_BC | SEGMENT_D4 | SEGMENT_C0; break; case 4: cornerSegments = SEGMENT_B4 | SEGMENT_C8 | SEGMENT_B8; break; case 5: cornerSegments = SEGMENT_BC | SEGMENT_D4 | SEGMENT_C0; break; case 6: cornerSegments = SEGMENT_B4 | SEGMENT_C8 | SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0; break; case 7: cornerSegments = SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0 | SEGMENT_D4 | SEGMENT_BC; break; case 8: cornerSegments = SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0; break; } paint_util_set_segment_support_height(cornerSegments, height + 2, 0x20); paint_util_set_segment_support_height(SEGMENTS_ALL & ~cornerSegments, 0xFFFF, 0); paint_util_set_general_support_height(height + 48, 0x20); }
/** rct2: 0x00886194 */ static void paint_roto_drop_base(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) { trackSequence = track_map_3x3[direction][trackSequence]; int edges = edges_3x3[trackSequence]; rct_ride * ride = get_ride(rideIndex); rct_xy16 position = {gPaintMapPosition.x, gPaintMapPosition.y}; wooden_a_supports_paint_setup((direction & 1), 0, height, gTrackColours[SCHEME_MISC], NULL); uint32 imageId = SPR_FLOOR_METAL_B | gTrackColours[SCHEME_SUPPORTS]; sub_98197C(imageId, 0, 0, 32, 32, 1, height, 0, 0, height, get_current_rotation()); track_paint_util_paint_fences(edges, position, mapElement, ride, gTrackColours[SCHEME_TRACK], height, fenceSpritesMetalB, get_current_rotation()); if (trackSequence == 0) { imageId = (direction & 1 ? SPR_ROTO_DROP_TOWER_BASE_90_DEG : SPR_ROTO_DROP_TOWER_BASE) | gTrackColours[SCHEME_TRACK]; sub_98197C(imageId, 0, 0, 2, 2, 27, height, 8, 8, height + 3, get_current_rotation()); imageId = (direction & 1 ? SPR_ROTO_DROP_TOWER_BASE_SEGMENT_90_DEG : SPR_ROTO_DROP_TOWER_BASE_SEGMENT) | gTrackColours[SCHEME_TRACK]; sub_98197C(imageId, 0, 0, 2, 2, 30, height + 32, 8, 8, height + 32, get_current_rotation()); imageId = (direction & 1 ? SPR_ROTO_DROP_TOWER_BASE_SEGMENT_90_DEG : SPR_ROTO_DROP_TOWER_BASE_SEGMENT) | gTrackColours[SCHEME_TRACK]; sub_98197C(imageId, 0, 0, 2, 2, 30, height + 64, 8, 8, height + 64, get_current_rotation()); paint_util_set_vertical_tunnel(height + 96); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); #ifdef __TESTPAINT__ paint_util_set_general_support_height(height + 32, 0x20); #else paint_util_set_general_support_height(height + 96, 0x20); #endif return; } int blockedSegments = 0; switch (trackSequence) { case 1: blockedSegments = SEGMENT_B8 | SEGMENT_C8 | SEGMENT_B4 | SEGMENT_CC | SEGMENT_BC; break; case 2: blockedSegments = SEGMENT_B4 | SEGMENT_CC | SEGMENT_BC; break; case 3: blockedSegments = SEGMENT_B4 | SEGMENT_CC | SEGMENT_BC | SEGMENT_D4 | SEGMENT_C0; break; case 4: blockedSegments = SEGMENT_B4 | SEGMENT_C8 | SEGMENT_B8; break; case 5: blockedSegments = SEGMENT_BC | SEGMENT_D4 | SEGMENT_C0; break; case 6: blockedSegments = SEGMENT_B4 | SEGMENT_C8 | SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0; break; case 7: blockedSegments = SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0 | SEGMENT_D4 | SEGMENT_BC; break; case 8: blockedSegments = SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0; break; } paint_util_set_segment_support_height(blockedSegments, 0xFFFF, 0); paint_util_set_segment_support_height(SEGMENTS_ALL & ~blockedSegments, height + 2, 0x20); paint_util_set_general_support_height(height + 32, 0x20); }
/** rct2: 0x00760260 */ static void paint_swinging_inverter_ship(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) { uint8 relativeTrackSequence = track_map_1x4[direction][trackSequence]; rct_ride * ride = get_ride(rideIndex); uint32 imageId; if (relativeTrackSequence != 1 && relativeTrackSequence != 3) { if (direction & 1) { metal_a_supports_paint_setup(0, 6, 0, height, gTrackColours[SCHEME_SUPPORTS]); metal_a_supports_paint_setup(0, 7, 0, height, gTrackColours[SCHEME_SUPPORTS]); } else { metal_a_supports_paint_setup(0, 5, 0, height, gTrackColours[SCHEME_SUPPORTS]); metal_a_supports_paint_setup(0, 8, 0, height, gTrackColours[SCHEME_SUPPORTS]); } imageId = SPR_STATION_BASE_D | gTrackColours[SCHEME_SUPPORTS]; sub_98196C(imageId, 0, 0, 32, 32, 1, height, get_current_rotation()); switch (direction) { case 0: imageId = SPR_STATION_PLATFORM_SW_NE | gTrackColours[SCHEME_TRACK]; sub_98196C(imageId, 0, 24, 32, 8, 1, height + 9, get_current_rotation()); break; case 1: imageId = SPR_STATION_PLATFORM_NW_SE | gTrackColours[SCHEME_TRACK]; sub_98196C(imageId, 24, 0, 8, 32, 1, height + 9, get_current_rotation()); break; case 2: imageId = SPR_STATION_PLATFORM_SW_NE | gTrackColours[SCHEME_TRACK]; sub_98199C(imageId, 0, 0, 32, 8, 1, height + 9, -2, 0, height, get_current_rotation()); break; case 3: imageId = SPR_STATION_PLATFORM_NW_SE | gTrackColours[SCHEME_TRACK]; sub_98199C(imageId, 0, 0, 8, 32, 1, height + 9, 0, -2, height, get_current_rotation()); break; } } switch (relativeTrackSequence) { case 1: paint_swinging_inverter_ship_structure(ride, direction, 48, height + 7); break; case 2: paint_swinging_inverter_ship_structure(ride, direction, 16, height + 7); break; case 0: paint_swinging_inverter_ship_structure(ride, direction, -16, height + 7); break; case 3: paint_swinging_inverter_ship_structure(ride, direction, -48, height + 7); break; } paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 176, 0x20); }
/** rct2: 0x006FD1F8 */ static void paint_launched_freefall_base(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element * mapElement) { trackSequence = track_map_3x3[direction][trackSequence]; sint32 edges = edges_3x3[trackSequence]; rct_ride * ride = get_ride(rideIndex); rct_xy16 position = {gPaintMapPosition.x, gPaintMapPosition.y}; wooden_a_supports_paint_setup((direction & 1), 0, height, gTrackColours[SCHEME_MISC], NULL); uint32 imageId = SPR_FLOOR_METAL | gTrackColours[SCHEME_SUPPORTS]; sub_98197C(imageId, 0, 0, 32, 32, 1, height, 0, 0, height, get_current_rotation()); track_paint_util_paint_fences(edges, position, mapElement, ride, gTrackColours[SCHEME_TRACK], height, launched_freefall_fence_sprites, get_current_rotation()); if (trackSequence == 0) { imageId = SPR_LAUNCHED_FREEFALL_TOWER_BASE | gTrackColours[SCHEME_TRACK]; sub_98197C(imageId, 0, 0, 2, 2, 27, height, 8, 8, height + 3, get_current_rotation()); height += 32; imageId = SPR_LAUNCHED_FREEFALL_TOWER_SEGMENT | gTrackColours[SCHEME_TRACK]; sub_98197C(imageId, 0, 0, 2, 2, 30, height, 8, 8, height, get_current_rotation()); height += 32; imageId = SPR_LAUNCHED_FREEFALL_TOWER_SEGMENT | gTrackColours[SCHEME_TRACK]; sub_98197C(imageId, 0, 0, 2, 2, 30, height, 8, 8, height, get_current_rotation()); paint_util_set_vertical_tunnel(height + 32); height -= 64; } sint32 blockedSegments = 0; switch (trackSequence) { case 0: blockedSegments = SEGMENTS_ALL; break; case 1: blockedSegments = SEGMENT_B8 | SEGMENT_C8 | SEGMENT_B4 | SEGMENT_CC | SEGMENT_BC; break; case 2: blockedSegments = SEGMENT_B4 | SEGMENT_CC | SEGMENT_BC; break; case 3: blockedSegments = SEGMENT_B4 | SEGMENT_CC | SEGMENT_BC | SEGMENT_D4 | SEGMENT_C0; break; case 4: blockedSegments = SEGMENT_B4 | SEGMENT_C8 | SEGMENT_B8; break; case 5: blockedSegments = SEGMENT_BC | SEGMENT_D4 | SEGMENT_C0; break; case 6: blockedSegments = SEGMENT_B4 | SEGMENT_C8 | SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0; break; case 7: blockedSegments = SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0 | SEGMENT_D4 | SEGMENT_BC; break; case 8: blockedSegments = SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0; break; } paint_util_set_segment_support_height(blockedSegments, 0xFFFF, 0); paint_util_set_segment_support_height(SEGMENTS_ALL & ~blockedSegments, height + 2, 0x20); paint_util_set_general_support_height(height + 32, 0x20); }
/** rct2: 0x00898514 */ static void paint_magic_carpet(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element * mapElement) { uint8 relativeTrackSequence = track_map_1x4[direction][trackSequence]; // The end tiles do not have a platform switch (relativeTrackSequence) { case 0: case 2: if (direction & 1) { metal_a_supports_paint_setup(METAL_SUPPORTS_TUBES, 6, 0, height, gTrackColours[SCHEME_SUPPORTS]); metal_a_supports_paint_setup(METAL_SUPPORTS_TUBES, 7, 0, height, gTrackColours[SCHEME_SUPPORTS]); } else { metal_a_supports_paint_setup(METAL_SUPPORTS_TUBES, 5, 0, height, gTrackColours[SCHEME_SUPPORTS]); metal_a_supports_paint_setup(METAL_SUPPORTS_TUBES, 8, 0, height, gTrackColours[SCHEME_SUPPORTS]); } uint32 imageId = SPR_STATION_BASE_D | gTrackColours[SCHEME_SUPPORTS]; sub_98196C(imageId, 0, 0, 32, 32, 1, height, get_current_rotation()); break; } rct_ride *ride = get_ride(rideIndex); switch (relativeTrackSequence) { case 3: paint_magic_carpet_structure(ride, direction, -48, height); break; case 0: paint_magic_carpet_structure(ride, direction, -16, height); break; case 2: paint_magic_carpet_structure(ride, direction, 16, height); break; case 1: paint_magic_carpet_structure(ride, direction, 48, height); break; } paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 176, 0x20); }
/* DDS3.2.12: Get Image Under Cursor */ struct image_set get_img_at_cursor(const struct cursor *cursor) { struct image_set set = { NULL, NULL, NULL }; const struct electorate *elec; elec = get_voter_electorate(); /* Are they on the group heading? */ if (cursor->screen_candidate_index == -1) { set.group = get_group_image(elec->code, cursor->group_index); } else { unsigned int dbci; struct ballot_contents *ballot; assert(cursor->screen_candidate_index >= 0); /* We need to know the number of candidates in this group */ ballot = get_ballot_contents(); /* They're on a candidate. Translate. */ dbci = translate_sci_to_dbci(ballot->num_candidates [cursor->group_index], cursor->screen_candidate_index, get_current_rotation()); set.candidate = get_candidate_image(elec->code, cursor->group_index, dbci); set.prefnumber = get_pref_img_for_candidate(elec, cursor->group_index, dbci); } return set; }
/* DDS3.18: Update DEO Preference */ void update_deo_preference(unsigned int pref) { struct cursor cursor; unsigned int group_index, dbci; int screen_candidate_index; const struct rotation *rotation; struct ballot_contents *ballot; cursor = get_cursor_position(); group_index = cursor.group_index; screen_candidate_index = cursor.screen_candidate_index; /* If screen candidate index is -1 then cursor is on a group heading */ if (screen_candidate_index > -1) { ballot = get_ballot_contents(); rotation = get_current_rotation(); /* SIPL 2011-06-28 Use updated translate function. */ dbci = translate_group_sci_to_dbci (group_index, screen_candidate_index, rotation); insert_preference_digit(group_index, dbci, pref); /* Redraw the candidates preference box with the new preference number */ draw_group_entry(cursor, YES, NO); } }
/** rct2: 0x0076C6CC */ static void paint_lift_base(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element * mapElement) { trackSequence = track_map_3x3[direction][trackSequence]; if (trackSequence == 0) { paint_lift_cage(direction, gTrackColours[SCHEME_TRACK], height, get_current_rotation()); paint_lift_cage(-1, gTrackColours[SCHEME_TRACK], height + 32, get_current_rotation()); paint_lift_cage(-1, gTrackColours[SCHEME_TRACK], height + 64, get_current_rotation()); paint_util_set_vertical_tunnel(height + 96); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); #ifdef __TESTPAINT__ paint_util_set_general_support_height(height + 32, 0x20); #else paint_util_set_general_support_height(height + 96, 0x20); #endif return; } sint32 edges = edges_3x3[trackSequence]; rct_ride * ride = get_ride(rideIndex); rct_xy16 position = {gPaintMapPosition.x, gPaintMapPosition.y}; uint32 imageId = SPR_FLOOR_METAL_B | gTrackColours[SCHEME_SUPPORTS]; sub_98197C(imageId, 0, 0, 32, 32, 1, height, 0, 0, height, get_current_rotation()); track_paint_util_paint_fences(edges, position, mapElement, ride, gTrackColours[SCHEME_TRACK], height, fenceSpritesMetalB, get_current_rotation()); sint32 blockedSegments = 0; switch (trackSequence) { case 1: blockedSegments = SEGMENT_B8 | SEGMENT_C8 | SEGMENT_B4 | SEGMENT_CC | SEGMENT_BC; break; case 2: blockedSegments = SEGMENT_B4 | SEGMENT_CC | SEGMENT_BC; break; case 3: blockedSegments = SEGMENT_B4 | SEGMENT_CC | SEGMENT_BC | SEGMENT_D4 | SEGMENT_C0; break; case 4: blockedSegments = SEGMENT_B4 | SEGMENT_C8 | SEGMENT_B8; break; case 5: blockedSegments = SEGMENT_BC | SEGMENT_D4 | SEGMENT_C0; break; case 6: blockedSegments = SEGMENT_B4 | SEGMENT_C8 | SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0; break; case 7: blockedSegments = SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0 | SEGMENT_D4 | SEGMENT_BC; break; case 8: blockedSegments = SEGMENT_B8 | SEGMENT_D0 | SEGMENT_C0; break; } paint_util_set_segment_support_height(blockedSegments, 0xFFFF, 0); paint_util_set_segment_support_height(SEGMENTS_ALL & ~blockedSegments, height + 2, 0x20); paint_util_set_general_support_height(height + 32, 0x20); }
/** rct2: 0x00768A3B */ static void paint_space_rings_structure(rct_ride * ride, uint8 direction, uint32 segment, sint32 height) { rct_map_element * savedMapElement = g_currently_drawn_item; uint32 vehicleIndex = (segment - direction) & 0x3; if (ride->num_stations == 0 || vehicleIndex < ride->num_vehicles) { rct_ride_entry * ride_type = get_ride_entry(ride->subtype); rct_vehicle * vehicle = NULL; sint32 frameNum = direction; uint32 baseImageId = ride_type->vehicles[0].base_image_id; if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && ride->vehicles[0] != SPRITE_INDEX_NULL) { gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; vehicle = GET_VEHICLE(ride->vehicles[vehicleIndex]); g_currently_drawn_item = vehicle; frameNum += (sint8) vehicle->vehicle_sprite_type * 4; } uint32 imageColourFlags = gTrackColours[SCHEME_MISC]; if ((ride->colour_scheme_type & 3) != RIDE_COLOUR_SCHEME_DIFFERENT_PER_TRAIN) { vehicleIndex = 0; } if (imageColourFlags == IMAGE_TYPE_REMAP) { imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(ride->vehicle_colours[vehicleIndex].body_colour, ride->vehicle_colours[0].trim_colour); } uint32 imageId = (baseImageId + frameNum) | imageColourFlags; sub_98197C(imageId, 0, 0, 20, 20, 23, height, -10, -10, height, get_current_rotation()); if (vehicle != NULL && vehicle->num_peeps > 0) { rct_peep * rider = GET_PEEP(vehicle->peep[0]); imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(rider->tshirt_colour, rider->trousers_colour); imageId = ((baseImageId & 0x7FFFF) + 352 + frameNum) | imageColourFlags; sub_98199C(imageId, 0, 0, 20, 20, 23, height, -10, -10, height, get_current_rotation()); } } g_currently_drawn_item = savedMapElement; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; }
/** * Paint Quadrant * rct2: 0x0069E8B0 */ void sprite_paint_setup(const uint16 eax, const uint16 ecx) { rct_drawpixelinfo* dpi; if ((eax & 0xe000) | (ecx & 0xe000)) return; uint16 sprite_idx = sprite_get_first_in_quadrant(eax, ecx); if (sprite_idx == SPRITE_INDEX_NULL) return; if (gTrackDesignSaveMode) return; if (gCurrentViewportFlags & VIEWPORT_FLAG_INVISIBLE_SPRITES) return; dpi = unk_140E9A8; if (dpi->zoom_level > 2) return; for (rct_sprite* spr = get_sprite(sprite_idx); sprite_idx != SPRITE_INDEX_NULL; sprite_idx = spr->unknown.next_in_quadrant) { spr = get_sprite(sprite_idx); dpi = unk_140E9A8; if (dpi->y + dpi->height <= spr->unknown.sprite_top) continue; if (spr->unknown.sprite_bottom <= dpi->y)continue; if (dpi->x + dpi->width <= spr->unknown.sprite_left)continue; if (spr->unknown.sprite_right <= dpi->x)continue; int image_direction = get_current_rotation(); image_direction <<= 3; image_direction += spr->unknown.sprite_direction; image_direction &= 0x1F; g_currently_drawn_item = spr; gUnk9DE568 = spr->unknown.x; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; gUnk9DE56C = spr->unknown.y; switch (spr->unknown.sprite_identifier) { case SPRITE_IDENTIFIER_VEHICLE: vehicle_paint((rct_vehicle*)spr, image_direction); break; case SPRITE_IDENTIFIER_PEEP: peep_paint((rct_peep*)spr, image_direction); break; case SPRITE_IDENTIFIER_MISC: misc_paint(spr, image_direction); break; case SPRITE_IDENTIFIER_LITTER: litter_paint((rct_litter*)spr, image_direction); break; default: assert(false); break; } } }
/** rct2: 0x00811294 */ static void paint_virginia_reel_track_25_deg_up_to_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) { const uint32 * sprites = virginia_reel_track_pieces_25_deg_up_to_flat; if (mapElement->type & 0x80) { sprites = virginia_reel_track_pieces_25_deg_up_to_flat_lift_hill; } uint32 imageId = sprites[direction] | gTrackColours[SCHEME_TRACK]; paint_struct * ps; if (direction & 1) { ps = sub_98197C(imageId, 0, 0, 27, 32, 2, height, 2, 0, height, get_current_rotation()); } else { ps = sub_98197C(imageId, 0, 0, 32, 27, 2, height, 0, 2, height, get_current_rotation()); } if (direction == 1 || direction == 2) { gWoodenSupportsPrependTo = ps; } switch (direction) { case 0: wooden_a_supports_paint_setup(0, 5, height, gTrackColours[SCHEME_SUPPORTS], NULL); paint_util_push_tunnel_left(height - 8, TUNNEL_6); break; case 1: wooden_a_supports_paint_setup(1, 6, height, gTrackColours[SCHEME_SUPPORTS], NULL); paint_util_push_tunnel_right(height + 8, TUNNEL_14); break; case 2: wooden_a_supports_paint_setup(0, 7, height, gTrackColours[SCHEME_SUPPORTS], NULL); paint_util_push_tunnel_left(height + 8, TUNNEL_14); break; case 3: wooden_a_supports_paint_setup(1, 8, height, gTrackColours[SCHEME_SUPPORTS], NULL); paint_util_push_tunnel_right(height - 8, TUNNEL_6); break; } paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 40, 0x20); }
/** rct2: 0x008861A4 */ static void paint_roto_drop_tower_section(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) { if (trackSequence == 1) { return; } uint32 imageId = SPR_ROTO_DROP_TOWER_SEGMENT | gTrackColours[SCHEME_TRACK]; sub_98197C(imageId, 0, 0, 2, 2, 30, height, 8, 8, height, get_current_rotation()); rct_map_element * nextMapElement = mapElement + 1; if (map_element_is_last_for_tile(mapElement) || mapElement->clearance_height != nextMapElement->base_height) { uint32 imageId = SPR_ROTO_DROP_TOWER_SEGMENT_TOP | gTrackColours[SCHEME_TRACK]; sub_98199C(imageId, 0, 0, 2, 2, 30, height, 8, 8, height, get_current_rotation()); } paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_vertical_tunnel(height + 32); paint_util_set_general_support_height(height + 32, 0x20); }
void window_player_overview_update(rct_window* w) { w->frame_no++; widget_invalidate(w, WIDX_TAB_1 + w->page); if (network_get_player_index((uint8)w->number) == -1) { window_close(w); return; } // Update viewport bool scroll = true; // Use this spare window field for rotation check if (w->var_4AE != get_current_rotation()) { w->var_4AE = get_current_rotation(); scroll = false; } window_player_update_viewport(w, scroll); }
/** * * rct2: 0x006D5B48 */ void vehicle_visual_virginia_reel(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) { int image_id; int baseImage_id = imageDirection; const uint8 rotation = get_current_rotation(); int ecx = ((vehicle->var_BA / 8) + (rotation * 8)) & 31; int j = 0; if (vehicle->vehicle_sprite_type == 0) { baseImage_id = ecx & 7; } else { if (vehicle->vehicle_sprite_type == 1 || vehicle->vehicle_sprite_type == 5) { if (vehicle->vehicle_sprite_type == 5){ baseImage_id = imageDirection ^ 16; } baseImage_id &= 24; j = (baseImage_id / 8) + 1; baseImage_id += (ecx & 7); baseImage_id += 8; } else if (vehicle->vehicle_sprite_type == 2 || vehicle->vehicle_sprite_type == 6) { if (vehicle->vehicle_sprite_type == 6){ baseImage_id = imageDirection ^ 16; } baseImage_id &= 24; j = (baseImage_id / 8) + 5; baseImage_id += (ecx & 7); baseImage_id += 40; } else { baseImage_id = ecx & 7; } } baseImage_id += vehicleEntry->base_image_id; const vehicle_boundbox *bb = &_virginiaReelBoundbox[j]; image_id = baseImage_id | (vehicle->colours.body_colour << 19) | (vehicle->colours.trim_colour << 24) | 0xA0000000; sub_98197C(image_id, 0, 0, bb->length_x, bb->length_y, bb->length_z, z, bb->offset_x, bb->offset_y, bb->offset_z + z, rotation); if (unk_140E9A8->zoom_level < 2 && vehicle->num_peeps > 0) { uint8 riding_peep_sprites[4] = {0xFF, 0xFF, 0xFF, 0xFF}; for (int i = 0; i < vehicle->num_peeps; i++) { riding_peep_sprites[((ecx / 8) + i) & 3] = vehicle->peep_tshirt_colours[i]; } int draw_order[4] = {0, 1, 3, 2}; for (int i = 0; i < countof(draw_order); i++) { if (riding_peep_sprites[draw_order[i]] != 0xFF) { image_id = (baseImage_id + ((draw_order[i] + 1) * 72)) | (riding_peep_sprites[draw_order[i]] << 19) | 0x20000000; sub_98199C(image_id, 0, 0, bb->length_x, bb->length_y, bb->length_z, z, bb->offset_x, bb->offset_y, bb->offset_z + z, rotation); } } } assert(vehicleEntry->effect_visual == 1); }
/** rct2: 0x00811264 */ static void paint_virginia_reel_track_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) { const uint32 * sprites = virginia_reel_track_pieces_flat; if (mapElement->type & 0x80) { sprites = virginia_reel_track_pieces_flat_lift_hill; } uint32 imageId = sprites[direction] | gTrackColours[SCHEME_TRACK]; if (direction & 1) { sub_98197C(imageId, 0, 0, 27, 32, 2, height, 2, 0, height, get_current_rotation()); paint_util_push_tunnel_right(height, TUNNEL_6); } else { sub_98197C(imageId, 0, 0, 32, 27, 2, height, 0, 2, height, get_current_rotation()); paint_util_push_tunnel_left(height, TUNNEL_6); } wooden_a_supports_paint_setup((direction & 1), 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 32, 0x20); }
/** * * rct2: 0x006D4295 */ void vehicle_visual_splash_boats_or_water_coaster(sint32 x, sint32 imageDirection, sint32 y, sint32 z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) { if (vehicle->is_child) { vehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride); } else { vehicle = GET_VEHICLE(vehicle->next_vehicle_on_ride); } g_currently_drawn_item = vehicle; imageDirection = ((get_current_rotation() * 8) + vehicle->sprite_direction) & 0x1F; gUnk9DE568 = vehicle->x; gUnk9DE56C = vehicle->y; vehicle_paint(vehicle, imageDirection); }
/** rct2: 0x0076C6DC */ static void paint_lift_tower_section(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element * mapElement) { if (trackSequence == 1) { return; } paint_lift_cage(-1, gTrackColours[SCHEME_TRACK], height, get_current_rotation()); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_vertical_tunnel(height + 32); paint_util_set_general_support_height(height + 32, 0x20); }
/** rct2: 0x0081F348 */ static void paint_mini_helicopters_track_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element * mapElement) { rct_xy16 position = {gPaintMapPosition.x, gPaintMapPosition.y}; uint32 imageId; if (direction & 1) { imageId = SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_SE_NW | gTrackColours[SCHEME_TRACK]; sub_98197C(imageId, 0, 0, 20, 32, 3, height, 6, 0, height, get_current_rotation()); paint_util_push_tunnel_right(height, TUNNEL_0); } else { imageId = SPR_TRACK_SUBMARINE_RIDE_MINI_HELICOPTERS_FLAT_NE_SW | gTrackColours[SCHEME_TRACK]; sub_98197C(imageId, 0, 0, 32, 20, 3, height, 0, 6, height, get_current_rotation()); paint_util_push_tunnel_left(height, TUNNEL_0); } if (track_paint_util_should_paint_supports(position)) { metal_a_supports_paint_setup((direction & 1) ? METAL_SUPPORTS_STICK_ALT : METAL_SUPPORTS_STICK, 4, -1, height, gTrackColours[SCHEME_SUPPORTS]); } paint_util_set_segment_support_height(paint_util_rotate_segments(SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC, direction), 0xFFFF, 0); paint_util_set_general_support_height(height + 32, 0x20); }
/** rct2: 0x008AE25C, 0x008AE26C, 0x008AE27C */ static void paint_monorail_station(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element * mapElement) { uint32 imageId; if (direction == 0 || direction == 2) { imageId = SPR_STATION_BASE_B_SW_NE | gTrackColours[SCHEME_MISC]; sub_98197C(imageId, 0, 0, 32, 28, 2, height - 2, 0, 2, height, get_current_rotation()); } else if (direction == 1 || direction == 3) { imageId = SPR_STATION_BASE_B_NW_SE | gTrackColours[SCHEME_MISC]; sub_98197C(imageId, 0, 0, 28, 32, 2, height - 2, 2, 0, height, get_current_rotation()); } imageId = monorail_track_pieces_flat[direction] | gTrackColours[SCHEME_TRACK]; if (direction == 0 || direction == 2) { sub_98199C(imageId, 0, 6, 32, 20, 2, height, 0, 0, height, get_current_rotation()); } else { sub_98199C(imageId, 6, 0, 20, 32, 2, height, 0, 0, height, get_current_rotation()); } if (direction == 0 || direction == 2) { paint_util_push_tunnel_left(height, TUNNEL_6); } else { paint_util_push_tunnel_right(height, TUNNEL_6); } if (direction == 0 || direction == 2) { metal_a_supports_paint_setup(METAL_SUPPORTS_BOXED, 5, 0, height, gTrackColours[SCHEME_SUPPORTS]); metal_a_supports_paint_setup(METAL_SUPPORTS_BOXED, 8, 0, height, gTrackColours[SCHEME_SUPPORTS]); } else { metal_a_supports_paint_setup(METAL_SUPPORTS_BOXED, 6, 0, height, gTrackColours[SCHEME_SUPPORTS]); metal_a_supports_paint_setup(METAL_SUPPORTS_BOXED, 7, 0, height, gTrackColours[SCHEME_SUPPORTS]); } track_paint_util_draw_station(rideIndex, trackSequence, direction, height, mapElement); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 32, 0x20); }
/** rct2: 0x00770CCC */ static void paint_ghost_train_track_spinning_tunnel(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element * mapElement) { uint32 imageId = ghost_train_track_pieces_spinning_tunnel_track[direction] | gTrackColours[SCHEME_TRACK]; if (direction == 0 || direction == 2) { sub_98197C(imageId, 0, 0, 28, 20, 3, height, 2, 6, height, get_current_rotation()); } else { sub_98197C(imageId, 0, 0, 20, 28, 3, height, 6, 2, height, get_current_rotation()); } track_paint_util_spinning_tunnel_paint(3, height, direction, get_current_rotation()); if (direction == 0 || direction == 2) { paint_util_push_tunnel_left(height, TUNNEL_0); } else { paint_util_push_tunnel_right(height, TUNNEL_0); } wooden_a_supports_paint_setup((direction & 1), 0, height, gTrackColours[SCHEME_MISC], NULL); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 32, 0x20); }
/** * * rct: 0x00673232 */ void money_effect_update(rct_money_effect *moneyEffect) { invalidate_sprite_2((rct_sprite*)moneyEffect); moneyEffect->wiggle++; if (moneyEffect->wiggle >= 22) moneyEffect->wiggle = 0; moneyEffect->move_delay++; if (moneyEffect->move_delay < 2) return; moneyEffect->move_delay = 0; int x = moneyEffect->x + _moneyEffectMoveOffset[get_current_rotation()].x; int y = moneyEffect->y + _moneyEffectMoveOffset[get_current_rotation()].y; int z = moneyEffect->z; sprite_move(x, y, z, (rct_sprite*)moneyEffect); moneyEffect->num_movements++; if (moneyEffect->num_movements < 55) return; sprite_remove((rct_sprite*)moneyEffect); }
/** rct2: 0x008AE2BC */ static void paint_monorail_track_diag_flat_to_25_deg_up(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element * mapElement) { if (monorail_diag_image_segment[direction][trackSequence]) { uint32 imageId = monorail_track_pieces_diag_flat_to_25_deg_up[direction] | gTrackColours[SCHEME_TRACK]; sub_98197C(imageId, -16, -16, 32, 32, 2, height, -16, -16, height, get_current_rotation()); } if (trackSequence == 3) { metal_b_supports_paint_setup(METAL_SUPPORTS_BOXED, monorail_diag_support_segment[direction], 0, height, gTrackColours[SCHEME_SUPPORTS]); } sint32 blockedSegments = monorail_diag_blocked_segments[trackSequence]; paint_util_set_segment_support_height(paint_util_rotate_segments(blockedSegments, direction), 0xFFFF, 0); paint_util_set_general_support_height(height + 48, 0x20); }