Fix river raft painting

This commit is contained in:
Ted John 2016-10-01 12:32:06 +01:00
parent b940002dd7
commit ae062dea69
1 changed files with 209 additions and 122 deletions

View File

@ -116,56 +116,54 @@ enum {
SPR_RIVER_RAFTS_TURN_LEFT_5_TOP_NE_SE_SEQ_2 = 20946,
SPR_RIVER_RAFTS_TURN_LEFT_5_TOP_NE_SE_SEQ_0 = 20947,
SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_NW_NE_SEQ_0 = 20948,
SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_NW_NE_SEQ_1 = 20949,
SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_NW_NE_SEQ_2 = 20950,
SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_NW_NE_SEQ_3 = 20951,
SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_NW_NE_SE_SEQ_0 = 20952,
SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_NW_NE_SE_SEQ_1 = 20953,
SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_NW_NE_SE_SEQ_2 = 20954,
SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_NW_NE_SE_SEQ_3 = 20955,
SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_SE_NE_SEQ_0 = 20956,
SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_SE_NE_SEQ_1 = 20957,
SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_SE_NE_SEQ_2 = 20958,
SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_SE_NE_SEQ_3 = 20959,
SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_NW_SW_SE_SEQ_0 = 20960,
SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_NW_SW_SE_SEQ_1 = 20961,
SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_NW_SW_SE_SEQ_2 = 20962,
SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_NW_SW_SE_SEQ_3 = 20963,
SPR_RIVER_RAFTS_S_BEND_LEFT_SIDE_SW_NE_SEQ_0 = 20964,
SPR_RIVER_RAFTS_S_BEND_LEFT_SIDE_SW_NE_SEQ_1 = 20965,
SPR_RIVER_RAFTS_S_BEND_LEFT_SIDE_SW_NE_SEQ_2 = 20966,
SPR_RIVER_RAFTS_S_BEND_LEFT_SIDE_SW_NE_SEQ_3 = 20967,
SPR_RIVER_RAFTS_S_BEND_LEFT_SIDE_NW_SE_SEQ_0 = 20968,
SPR_RIVER_RAFTS_S_BEND_LEFT_SIDE_NW_SE_SEQ_1 = 20969,
SPR_RIVER_RAFTS_S_BEND_LEFT_SIDE_NW_SE_SEQ_2 = 20970,
SPR_RIVER_RAFTS_S_BEND_LEFT_SIDE_NW_SE_SEQ_3 = 20971,
SPR_RIVER_RAFTS_S_BEND_RIGHT_SIDE_SW_NE_SEQ_0 = 20972,
SPR_RIVER_RAFTS_S_BEND_RIGHT_SIDE_SW_NE_SEQ_1 = 20973,
SPR_RIVER_RAFTS_S_BEND_RIGHT_SIDE_SW_NE_SEQ_2 = 20974,
SPR_RIVER_RAFTS_S_BEND_RIGHT_SIDE_SW_NE_SEQ_3 = 20975,
SPR_RIVER_RAFTS_S_BEND_RIGHT_SIDE_NW_SE_SEQ_0 = 20976,
SPR_RIVER_RAFTS_S_BEND_RIGHT_SIDE_NW_SE_SEQ_1 = 20977,
SPR_RIVER_RAFTS_S_BEND_RIGHT_SIDE_NW_SE_SEQ_2 = 20978,
SPR_RIVER_RAFTS_S_BEND_RIGHT_SIDE_NW_SE_SEQ_3 = 20979,
SPR_RIVER_RAFTS_S_BEND_LEFT_NE_SE_SW_SEQ_3 = 20980,
SPR_RIVER_RAFTS_S_BEND_LEFT_NE_SE_SW_SEQ_2 = 20981,
SPR_RIVER_RAFTS_S_BEND_LEFT_NE_SE_SW_SEQ_1 = 20982,
SPR_RIVER_RAFTS_S_BEND_LEFT_NE_SE_SW_SEQ_0 = 20983,
SPR_RIVER_RAFTS_S_BEND_LEFT_SE_SW_NW_SEQ_3 = 20984,
SPR_RIVER_RAFTS_S_BEND_LEFT_SE_SW_NW_SEQ_2 = 20985,
SPR_RIVER_RAFTS_S_BEND_LEFT_SE_SW_NW_SEQ_1 = 20986,
SPR_RIVER_RAFTS_S_BEND_LEFT_SE_SW_NW_SEQ_0 = 20987,
SPR_RIVER_RAFTS_S_BEND_LEFT_NE_NW_SW_SEQ_3 = 20988,
SPR_RIVER_RAFTS_S_BEND_LEFT_NE_NW_SW_SEQ_2 = 20989,
SPR_RIVER_RAFTS_S_BEND_LEFT_NE_NW_SW_SEQ_1 = 20990,
SPR_RIVER_RAFTS_S_BEND_LEFT_NE_NW_SW_SEQ_0 = 20991,
SPR_RIVER_RAFTS_S_BEND_LEFT_SE_NE_NW_SEQ_3 = 20992,
SPR_RIVER_RAFTS_S_BEND_LEFT_SE_NE_NW_SEQ_2 = 20993,
SPR_RIVER_RAFTS_S_BEND_LEFT_SE_NE_NW_SEQ_1 = 20994,
SPR_RIVER_RAFTS_S_BEND_LEFT_SE_NE_NW_SEQ_0 = 20995,
SPR_RIVER_RAFTS_S_BEND_TOP_NE_NW_NE_SEQ_0 = 20948,
SPR_RIVER_RAFTS_S_BEND_TOP_NE_NW_NE_SEQ_1 = 20949,
SPR_RIVER_RAFTS_S_BEND_TOP_NE_NW_NE_SEQ_2 = 20950,
SPR_RIVER_RAFTS_S_BEND_TOP_NE_NW_NE_SEQ_3 = 20951,
SPR_RIVER_RAFTS_S_BEND_TOP_NW_SW_NW_SEQ_0 = 20952,
SPR_RIVER_RAFTS_S_BEND_TOP_NW_SW_NW_SEQ_1 = 20953,
SPR_RIVER_RAFTS_S_BEND_TOP_NW_SW_NW_SEQ_2 = 20954,
SPR_RIVER_RAFTS_S_BEND_TOP_NW_SW_NW_SEQ_3 = 20955,
SPR_RIVER_RAFTS_S_BEND_TOP_NE_SE_NE_SEQ_0 = 20956,
SPR_RIVER_RAFTS_S_BEND_TOP_NE_SE_NE_SEQ_1 = 20957,
SPR_RIVER_RAFTS_S_BEND_TOP_NE_SE_NE_SEQ_2 = 20958,
SPR_RIVER_RAFTS_S_BEND_TOP_NE_SE_NE_SEQ_3 = 20959,
SPR_RIVER_RAFTS_S_BEND_TOP_SE_SW_SE_SEQ_0 = 20960,
SPR_RIVER_RAFTS_S_BEND_TOP_SE_SW_SE_SEQ_1 = 20961,
SPR_RIVER_RAFTS_S_BEND_TOP_SE_SW_SE_SEQ_2 = 20962,
SPR_RIVER_RAFTS_S_BEND_TOP_SE_SW_SE_SEQ_3 = 20963,
SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_0 = 20964,
SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_1 = 20965,
SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_2 = 20966,
SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_3 = 20967,
SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_0 = 20968,
SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_1 = 20969,
SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_2 = 20970,
SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_3 = 20971,
SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_0 = 20972,
SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_1 = 20973,
SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_2 = 20974,
SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_3 = 20975,
SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_0 = 20976,
SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_1 = 20977,
SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_2 = 20978,
SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_3 = 20979,
SPR_RIVER_RAFTS_S_BEND_TOP_SW_SE_SW_SEQ_3 = 20980,
SPR_RIVER_RAFTS_S_BEND_TOP_SW_SE_SW_SEQ_2 = 20981,
SPR_RIVER_RAFTS_S_BEND_TOP_SW_SE_SW_SEQ_1 = 20982,
SPR_RIVER_RAFTS_S_BEND_TOP_SW_SE_SW_SEQ_0 = 20983,
SPR_RIVER_RAFTS_S_BEND_TOP_SE_NE_SE_SEQ_3 = 20984,
SPR_RIVER_RAFTS_S_BEND_TOP_SE_NE_SE_SEQ_2 = 20985,
SPR_RIVER_RAFTS_S_BEND_TOP_SE_NE_SE_SEQ_1 = 20986,
SPR_RIVER_RAFTS_S_BEND_TOP_SE_NE_SE_SEQ_0 = 20987,
SPR_RIVER_RAFTS_S_BEND_TOP_SW_NW_SW_SEQ_3 = 20988,
SPR_RIVER_RAFTS_S_BEND_TOP_SW_NW_SW_SEQ_2 = 20989,
SPR_RIVER_RAFTS_S_BEND_TOP_SW_NW_SW_SEQ_1 = 20990,
SPR_RIVER_RAFTS_S_BEND_TOP_SW_NW_SW_SEQ_0 = 20991,
SPR_RIVER_RAFTS_S_BEND_TOP_NW_NE_NW_SEQ_3 = 20992,
SPR_RIVER_RAFTS_S_BEND_TOP_NW_NE_NW_SEQ_2 = 20993,
SPR_RIVER_RAFTS_S_BEND_TOP_NW_NE_NW_SEQ_1 = 20994,
SPR_RIVER_RAFTS_S_BEND_TOP_NW_NE_NW_SEQ_0 = 20995,
};
static const sprite_bb RiverRaftsLeftQuarterTurn5_Top[4][5] = {
@ -342,15 +340,11 @@ static void paint_river_rafts_station(uint8 rideIndex, uint8 trackSequence, uint
sub_98196C(imageId, 0, 0, 32, 32, 1, height, get_current_rotation());
}
track_paint_util_draw_station_platform(ride, direction, height, 7, mapElement);
wooden_a_supports_paint_setup((direction & 1), 0, height, gTrackColours[SCHEME_SUPPORTS], NULL);
if (direction & 1) {
paint_util_push_tunnel_right(height, TUNNEL_6);
} else {
paint_util_push_tunnel_left(height, TUNNEL_6);
}
track_paint_util_draw_station_platform(ride, direction, height, 7, mapElement);
paint_util_push_tunnel_rotated(direction, height, TUNNEL_6);
paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0);
paint_util_set_general_support_height(height + 32, 0x20);
@ -383,6 +377,19 @@ static void paint_river_rafts_track_left_quarter_turn_5_tiles(uint8 rideIndex, u
case 6: paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); break;
}
switch (trackSequence) {
case 0:
if (direction == 0 || direction == 3) {
paint_util_push_tunnel_rotated(direction, height, TUNNEL_6);
}
break;
case 6:
if (direction == 2 || direction == 3) {
paint_util_push_tunnel_rotated(direction ^ 1, height, TUNNEL_6);
}
break;
}
paint_util_set_general_support_height(height + 32, 0x20);
}
@ -413,58 +420,16 @@ static void paint_river_rafts_track_right_quarter_turn_5_tiles(uint8 rideIndex,
case 6: paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); break;
}
paint_util_set_general_support_height(height + 32, 0x20);
}
static void paint_river_rafts_track_s_bend(uint32 baseImageId, uint8 trackSequence, uint8 direction, int height, const uint8 supportTypes[][4], uint16 ssegs1, uint16 ssegs2)
{
uint32 imageId = baseImageId;
imageId += (direction & 1) * 4;
imageId += (direction & 2) ? 35 : 0;
imageId += (direction & 2) ? -trackSequence : trackSequence;
imageId |= gTrackColours[SCHEME_TRACK];
uint32 sideImageId = imageId;
sideImageId += (direction & 2) ? -16 : 16;
switch (direction & 1) {
case 0:
switch (trackSequence) {
case 0: sub_98197C(imageId , 0, 0, 32, 27, 2, height, 0, 2, height , get_current_rotation());
sub_98197C(sideImageId, 0, 0, 32, 27, 0, height, 0, 2, height + 27, get_current_rotation()); break;
case 1: sub_98197C(imageId , 0, 0, 32, 26, 2, height, 0, 6, height , get_current_rotation());
sub_98197C(sideImageId, 0, 0, 32, 26, 0, height, 0, 6, height + 27, get_current_rotation()); break;
case 2: sub_98197C(imageId , 0, 0, 32, 26, 2, height, 0, 6, height , get_current_rotation());
sub_98197C(sideImageId, 0, 0, 32, 26, 0, height, 0, 6, height + 27, get_current_rotation()); break;
case 3: sub_98197C(imageId , 0, 0, 32, 27, 2, height, 0, 2, height , get_current_rotation());
sub_98197C(sideImageId, 0, 0, 32, 27, 0, height, 0, 2, height + 27, get_current_rotation()); break;
}
case 1:
switch (trackSequence) {
case 0: sub_98197C(imageId , 0, 0, 27, 32, 2, height, 2, 0, height , get_current_rotation());
sub_98197C(sideImageId, 0, 0, 27, 32, 0, height, 2, 0, height + 27, get_current_rotation()); break;
case 1: sub_98197C(imageId , 0, 0, 26, 32, 2, height, 6, 0, height , get_current_rotation());
sub_98197C(sideImageId, 0, 0, 26, 32, 0, height, 6, 0, height + 27, get_current_rotation()); break;
case 2: sub_98197C(imageId , 0, 0, 26, 32, 2, height, 6, 0, height , get_current_rotation());
sub_98197C(sideImageId, 0, 0, 26, 32, 0, height, 6, 0, height + 27, get_current_rotation()); break;
case 3: sub_98197C(imageId , 0, 0, 27, 32, 2, height, 2, 0, height , get_current_rotation());
sub_98197C(sideImageId, 0, 0, 27, 32, 0, height, 2, 0, height + 27, get_current_rotation()); break;
}
}
uint8 supportType = supportTypes[direction][trackSequence];
wooden_a_supports_paint_setup(supportType, 0, height, gTrackColours[SCHEME_SUPPORTS], NULL);
switch (trackSequence) {
case 0:
case 3:
paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0);
if (direction == 0 || direction == 3) {
paint_util_push_tunnel_rotated(direction, height, TUNNEL_6);
}
break;
case 1:
paint_util_set_segment_support_height(paint_util_rotate_segments(ssegs1, direction), 0xFFFF, 0);
break;
case 2:
paint_util_set_segment_support_height(paint_util_rotate_segments(ssegs2, direction), 0xFFFF, 0);
case 6:
if (direction == 0 || direction == 1) {
paint_util_push_tunnel_rotated(direction ^ 1, height, TUNNEL_6);
}
break;
}
@ -474,29 +439,151 @@ static void paint_river_rafts_track_s_bend(uint32 baseImageId, uint8 trackSequen
/** rct2: 0x0089B180 */
static void paint_river_rafts_track_s_bend_left(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement)
{
static const uint8 supportTypes[][4] = {
{ 0, 5, 3, 0 },
{ 1, 2, 4, 1 },
{ 0, 3, 5, 0 },
{ 1, 4, 2, 1 },
static const uint32 imageIds[4][4][2] =
{
{ { SPR_RIVER_RAFTS_S_BEND_TOP_NE_NW_NE_SEQ_0, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_0 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_NE_NW_NE_SEQ_1, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_1 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_NE_NW_NE_SEQ_2, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_2 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_NE_NW_NE_SEQ_3, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_3 } },
{ { SPR_RIVER_RAFTS_S_BEND_TOP_NW_SW_NW_SEQ_0, SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_0 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_NW_SW_NW_SEQ_1, SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_1 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_NW_SW_NW_SEQ_2, SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_2 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_NW_SW_NW_SEQ_3, SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_3 } },
{ { SPR_RIVER_RAFTS_S_BEND_TOP_SW_SE_SW_SEQ_0, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_3 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_SW_SE_SW_SEQ_1, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_2 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_SW_SE_SW_SEQ_2, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_1 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_SW_SE_SW_SEQ_3, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_0 } },
{ { SPR_RIVER_RAFTS_S_BEND_TOP_SE_NE_SE_SEQ_0, SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_3 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_SE_NE_SE_SEQ_1, SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_2 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_SE_NE_SE_SEQ_2, SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_1 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_SE_NE_SE_SEQ_3, SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_0 } },
};
paint_river_rafts_track_s_bend(SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_NW_NE_SEQ_0, trackSequence, direction, height, supportTypes,
SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_B8 | SEGMENT_C8 | SEGMENT_B4,
SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_C0 | SEGMENT_D4 | SEGMENT_BC);
uint32 imageId = imageIds[direction][trackSequence][0] | gTrackColours[SCHEME_TRACK];
uint32 frontImageId = imageIds[direction][trackSequence][1] | gTrackColours[SCHEME_TRACK];
sint16 bboy;
switch (trackSequence) {
case 0:
sub_98197C_rotated(direction, imageId, 0, 0, 32, 27, 2, height, 0, 2, height);
sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 27, 0, height, 0, 2, height + 27);
wooden_a_supports_paint_setup(direction & 1, 0, height, gTrackColours[SCHEME_SUPPORTS], NULL);
paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0);
break;
case 1:
bboy = (direction == 0 || direction == 1) ? 0 : 6;
sub_98197C_rotated(direction, imageId, 0, 0, 32, 26, 2, height, 0, bboy, height);
sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 26, 0, height, 0, bboy, height + 27);
static const int supportTypes1[] = { 5, 2, 3, 4 };
wooden_a_supports_paint_setup(supportTypes1[direction], 0, height, gTrackColours[SCHEME_SUPPORTS], NULL);
paint_util_set_segment_support_height(paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0);
break;
case 2:
bboy = (direction == 2 || direction == 3) ? 0 : 6;
sub_98197C_rotated(direction, imageId, 0, 0, 32, 26, 2, height, 0, bboy, height);
sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 26, 0, height, 0, bboy, height + 27);
static const int supportTypes2[] = { 3, 4, 5, 2 };
wooden_a_supports_paint_setup(supportTypes2[direction], 0, height, gTrackColours[SCHEME_SUPPORTS], NULL);
paint_util_set_segment_support_height(paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0);
break;
case 3:
sub_98197C_rotated(direction, imageId, 0, 0, 32, 27, 2, height, 0, 2, height);
sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 27, 0, height, 0, 2, height + 27);
wooden_a_supports_paint_setup(direction & 1, 0, height, gTrackColours[SCHEME_SUPPORTS], NULL);
paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0);
break;
}
if (trackSequence == 0) {
if (direction == 0 || direction == 3) {
paint_util_push_tunnel_rotated(direction, height, TUNNEL_6);
}
} else if (trackSequence == 3) {
if (direction == 1 || direction == 2) {
paint_util_push_tunnel_rotated(direction, height, TUNNEL_6);
}
}
paint_util_set_general_support_height(height + 32, 0x20);
}
/** rct2: 0x0089B190 */
static void paint_river_rafts_track_s_bend_right(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement)
{
static const uint8 supportTypes[][4] = {
{ 0, 4, 2, 0 },
{ 1, 5, 3, 1 },
{ 0, 2, 4, 0 },
{ 1, 3, 5, 1 },
static const uint32 imageIds[4][4][2] =
{
{ { SPR_RIVER_RAFTS_S_BEND_TOP_NE_SE_NE_SEQ_0, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_0 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_NE_SE_NE_SEQ_1, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_1 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_NE_SE_NE_SEQ_2, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_2 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_NE_SE_NE_SEQ_3, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_3 } },
{ { SPR_RIVER_RAFTS_S_BEND_TOP_SE_SW_SE_SEQ_0, SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_0 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_SE_SW_SE_SEQ_1, SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_1 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_SE_SW_SE_SEQ_2, SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_2 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_SE_SW_SE_SEQ_3, SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_3 } },
{ { SPR_RIVER_RAFTS_S_BEND_TOP_SW_NW_SW_SEQ_0, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_3 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_SW_NW_SW_SEQ_1, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_2 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_SW_NW_SW_SEQ_2, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_1 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_SW_NW_SW_SEQ_3, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_0 } },
{ { SPR_RIVER_RAFTS_S_BEND_TOP_NW_NE_NW_SEQ_0, SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_3 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_NW_NE_NW_SEQ_1, SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_2 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_NW_NE_NW_SEQ_2, SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_1 },
{ SPR_RIVER_RAFTS_S_BEND_TOP_NW_NE_NW_SEQ_3, SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_0 } },
};
paint_river_rafts_track_s_bend(SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_SE_NE_SEQ_0, trackSequence, direction, height, supportTypes,
SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_C0 | SEGMENT_D4 | SEGMENT_BC,
SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_B8 | SEGMENT_C8 | SEGMENT_B4);
uint32 imageId = imageIds[direction][trackSequence][0] | gTrackColours[SCHEME_TRACK];
uint32 frontImageId = imageIds[direction][trackSequence][1] | gTrackColours[SCHEME_TRACK];
sint16 bboy;
switch (trackSequence) {
case 0:
sub_98197C_rotated(direction, imageId, 0, 0, 32, 27, 2, height, 0, 2, height);
sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 27, 0, height, 0, 2, height + 27);
wooden_a_supports_paint_setup(direction & 1, 0, height, gTrackColours[SCHEME_SUPPORTS], NULL);
paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0);
break;
case 1:
bboy = (direction == 2 || direction == 3) ? 0 : 6;
sub_98197C_rotated(direction, imageId, 0, 0, 32, 26, 2, height, 0, bboy, height);
sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 26, 0, height, 0, bboy, height + 27);
static const int supportTypes1[] = { 4, 5, 2, 3 };
wooden_a_supports_paint_setup(supportTypes1[direction], 0, height, gTrackColours[SCHEME_SUPPORTS], NULL);
paint_util_set_segment_support_height(paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0);
break;
case 2:
bboy = (direction == 0 || direction == 1) ? 0 : 6;
sub_98197C_rotated(direction, imageId, 0, 0, 32, 26, 2, height, 0, bboy, height);
sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 26, 0, height, 0, bboy, height + 27);
static const int supportTypes2[] = { 2, 3, 4, 5 };
wooden_a_supports_paint_setup(supportTypes2[direction], 0, height, gTrackColours[SCHEME_SUPPORTS], NULL);
paint_util_set_segment_support_height(paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0);
break;
case 3:
sub_98197C_rotated(direction, imageId, 0, 0, 32, 27, 2, height, 0, 2, height);
sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 27, 0, height, 0, 2, height + 27);
wooden_a_supports_paint_setup(direction & 1, 0, height, gTrackColours[SCHEME_SUPPORTS], NULL);
paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0);
break;
}
if (trackSequence == 0) {
if (direction == 0 || direction == 3) {
paint_util_push_tunnel_rotated(direction, height, TUNNEL_6);
}
} else if (trackSequence == 3) {
if (direction == 1 || direction == 2) {
paint_util_push_tunnel_rotated(direction, height, TUNNEL_6);
}
}
paint_util_set_general_support_height(height + 32, 0x20);
}
/**