Implement steep to flat pieces

This commit is contained in:
Ted John 2016-10-03 23:02:07 +01:00
parent 3c43bb5522
commit 475a142bf7
1 changed files with 152 additions and 24 deletions

View File

@ -38,9 +38,9 @@ enum {
SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_NE_SW = 28543,
SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_FRONT_NE_SW = 28544,
SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_NE_SW = 28545,
SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_FRONT_NE_SW = 28546,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_FRONT_NE_SW = 28546,
SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_SW_NE = 28547,
SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_SW_NE = 28548,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_SW_NE = 28548,
SPR_WOODEN_WILD_MOUSE_25_DEG_NW_SE = 28549,
SPR_WOODEN_WILD_MOUSE_60_DEG_NW_SE = 28550,
SPR_WOODEN_WILD_MOUSE_25_DEG_SE_NW = 28551,
@ -50,14 +50,25 @@ enum {
SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_SE_NW = 28555,
SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_SE_NW = 28556,
SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_SE_NW = 28557,
SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_SE_NW = 28558,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_SE_NW = 28558,
SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_NW_SE = 28559,
SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_FRONT_NW_SE = 28560,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_FRONT_NW_SE = 28560,
SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_NE_SW = 28561,
SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_NE_SW = 28562,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_NE_SW = 28562,
SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_NW_SE = 28563,
SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_NW_SE = 28564,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_NW_SE = 28564,
SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_SW_NE = 28565,
SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_NW_SE = 28566,
SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_NE_SW = 28567,
SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_SE_NW = 28568,
SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_FRONT_NW_SE = 28569,
SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_FRONT_NE_SW = 28570,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_SW_NE = 28571,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_NW_SE = 28572,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_NE_SW = 28573,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_SE_NW = 28574,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_FRONT_NW_SE = 28575,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_FRONT_NE_SW = 28576,
SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_SW_NE = 28577,
SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_SW_NE = 28578,
SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_SW_NE = 28579,
@ -67,9 +78,9 @@ enum {
SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_NE_SW = 28583,
SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_FRONT_NE_SW = 28584,
SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_CHAIN_NE_SW = 28585,
SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_FRONT_NE_SW = 28586,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_FRONT_NE_SW = 28586,
SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_CHAIN_SW_NE = 28587,
SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_SW_NE = 28588,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_SW_NE = 28588,
SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_NW_SE = 28589,
SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_NW_SE = 28590,
SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_SE_NW = 28591,
@ -79,13 +90,25 @@ enum {
SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_SE_NW = 28595,
SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_SE_NW = 28596,
SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_CHAIN_SE_NW = 28597,
SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_SE_NW = 28598,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_SE_NW = 28598,
SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_CHAIN_NW_SE = 28599,
SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_FRONT_NW_SE = 28600,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_FRONT_NW_SE = 28600,
SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_NE_SW = 28601,
SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_NE_SW = 28602,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_NE_SW = 28602,
SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_NW_SE = 28603,
SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_NW_SE = 28604,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_NW_SE = 28604,
SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_SW_NE = 28605,
SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_NW_SE = 28606,
SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_NE_SW = 28607,
SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_SE_NW = 28608,
SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_FRONT_NW_SE = 28609,
SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_FRONT_NE_SW = 28610,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_SW_NE = 28611,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_NW_SE = 28612,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_NE_SW = 28613,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_SE_NW = 28614,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_FRONT_NW_SE = 28615,
SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_FRONT_NE_SW = 28616,
};
static void wooden_wild_mouse_track_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement)
@ -268,20 +291,20 @@ static void wooden_wild_mouse_track_25_deg_up_to_60_deg_up(uint8 rideIndex, uint
paint_util_set_general_support_height(height + 72, 0x20);
}
static void wooden_wild_mouse_track_60_deg_up_to_25_deg_up(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement)
static void wooden_wild_mouse_track_60_DEG_TO_25_DEG_up(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement)
{
static const uint32 imageIds[2][4][2] = {
{
{ SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_SW_NE, 0 },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_NW_SE, SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_FRONT_NW_SE },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_NE_SW, SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_FRONT_NE_SW },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_SE_NW, 0 },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_SW_NE, 0 },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_NW_SE, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_FRONT_NW_SE },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_NE_SW, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_FRONT_NE_SW },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_SE_NW, 0 },
},
{
{ SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_SW_NE, 0 },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_NW_SE, SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_FRONT_NW_SE },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_NE_SW, SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_FRONT_NE_SW },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_SE_NW, 0 },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_SW_NE, 0 },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_NW_SE, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_FRONT_NW_SE },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_NE_SW, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_FRONT_NE_SW },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_SE_NW, 0 },
},
};
@ -359,7 +382,7 @@ static void wooden_wild_mouse_track_flat_to_25_deg_down(uint8 rideIndex, uint8 t
static void wooden_wild_mouse_track_25_deg_down_to_60_deg_down(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement)
{
wooden_wild_mouse_track_60_deg_up_to_25_deg_up(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement);
wooden_wild_mouse_track_60_DEG_TO_25_DEG_up(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement);
}
static void wooden_wild_mouse_track_60_deg_down_to_25_deg_down(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement)
@ -372,6 +395,98 @@ static void wooden_wild_mouse_track_25_deg_down_to_flat(uint8 rideIndex, uint8 t
wooden_wild_mouse_track_flat_to_25_deg_up(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement);
}
static void wooden_wild_mouse_track_flat_to_60_deg_up(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement)
{
static const uint32 imageIds[2][4][2] = {
{
{ SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_SW_NE, 0 },
{ SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_NW_SE, SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_FRONT_NW_SE },
{ SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_NE_SW, SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_FRONT_NE_SW },
{ SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_SE_NW, 0 },
},
{
{ SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_SW_NE, 0 },
{ SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_NW_SE, SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_FRONT_NW_SE },
{ SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_NE_SW, SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_FRONT_NE_SW },
{ SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_SE_NW, 0 },
},
};
uint8 isChained = track_element_is_lift_hill(mapElement) ? 1 : 0;
uint32 imageId;
if (direction == 0 || direction == 3) {
imageId = imageIds[isChained][direction][0] | gTrackColours[SCHEME_TRACK];
sub_98197C_rotated(direction, imageId, 0, 2, 32, 25, 1, height, 0, 3, height);
} else {
imageId = imageIds[isChained][direction][0] | gTrackColours[SCHEME_TRACK];
sub_98197C_rotated(direction, imageId, 0, 6, 2, 24, 43, height, 28, 4, height + 2);
imageId = imageIds[isChained][direction][1] | gTrackColours[SCHEME_TRACK];
sub_98197C_rotated(direction, imageId, 0, 6, 32, 2, 43, height, 0, 4, height);
}
wooden_a_supports_paint_setup(direction & 1, 29 + direction, height, gTrackColours[SCHEME_SUPPORTS], NULL);
if (direction == 0 || direction == 3) {
paint_util_push_tunnel_rotated(direction, height, TUNNEL_0);
} else {
paint_util_push_tunnel_rotated(direction, height + 24, TUNNEL_2);
}
paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0);
paint_util_set_general_support_height(height + 64, 0x20);
}
static void wooden_wild_mouse_track_60_deg_up_to_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement)
{
static const uint32 imageIds[2][4][2] = {
{
{ SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_SW_NE, 0 },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_NW_SE, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_FRONT_NW_SE },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_NE_SW, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_FRONT_NE_SW },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_SE_NW, 0 },
},
{
{ SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_SW_NE, 0 },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_NW_SE, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_FRONT_NW_SE },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_NE_SW, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_FRONT_NE_SW },
{ SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_SE_NW, 0 },
},
};
uint8 isChained = track_element_is_lift_hill(mapElement) ? 1 : 0;
uint32 imageId;
if (direction == 0 || direction == 3) {
imageId = imageIds[isChained][direction][0] | gTrackColours[SCHEME_TRACK];
sub_98197C_rotated(direction, imageId, 0, 2, 32, 25, 1, height, 0, 3, height);
} else {
imageId = imageIds[isChained][direction][0] | gTrackColours[SCHEME_TRACK];
sub_98197C_rotated(direction, imageId, 0, 6, 2, 24, 43, height, 28, 4, height + 2);
imageId = imageIds[isChained][direction][1] | gTrackColours[SCHEME_TRACK];
sub_98197C_rotated(direction, imageId, 0, 6, 32, 2, 43, height, 0, 4, height);
}
wooden_a_supports_paint_setup(direction & 1, 33 + direction, height, gTrackColours[SCHEME_SUPPORTS], NULL);
if (direction == 0 || direction == 3) {
paint_util_push_tunnel_rotated(direction, height - 8, TUNNEL_1);
} else {
paint_util_push_tunnel_rotated(direction, height + 24, TUNNEL_0);
}
paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0);
paint_util_set_general_support_height(height + 72, 0x20);
}
static void wooden_wild_mouse_track_flat_to_60_deg_down(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement)
{
wooden_wild_mouse_track_60_deg_up_to_flat(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement);
}
static void wooden_wild_mouse_track_60_deg_down_to_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement)
{
wooden_wild_mouse_track_flat_to_60_deg_up(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement);
}
TRACK_PAINT_FUNCTION get_track_paint_function_wooden_wild_mouse(int trackType, int direction)
{
switch (trackType) {
@ -390,7 +505,7 @@ TRACK_PAINT_FUNCTION get_track_paint_function_wooden_wild_mouse(int trackType, i
case TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP:
return wooden_wild_mouse_track_25_deg_up_to_60_deg_up;
case TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP:
return wooden_wild_mouse_track_60_deg_up_to_25_deg_up;
return wooden_wild_mouse_track_60_DEG_TO_25_DEG_up;
case TRACK_ELEM_25_DEG_UP_TO_FLAT:
return wooden_wild_mouse_track_25_deg_up_to_flat;
case TRACK_ELEM_25_DEG_DOWN:
@ -405,6 +520,19 @@ TRACK_PAINT_FUNCTION get_track_paint_function_wooden_wild_mouse(int trackType, i
return wooden_wild_mouse_track_60_deg_down_to_25_deg_down;
case TRACK_ELEM_25_DEG_DOWN_TO_FLAT:
return wooden_wild_mouse_track_25_deg_down_to_flat;
case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES:
case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES:
case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE:
case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE:
return NULL;
case TRACK_ELEM_FLAT_TO_60_DEG_UP:
return wooden_wild_mouse_track_flat_to_60_deg_up;
case TRACK_ELEM_60_DEG_UP_TO_FLAT:
return wooden_wild_mouse_track_60_deg_up_to_flat;
case TRACK_ELEM_FLAT_TO_60_DEG_DOWN:
return wooden_wild_mouse_track_flat_to_60_deg_down;
case TRACK_ELEM_60_DEG_DOWN_TO_FLAT:
return wooden_wild_mouse_track_60_deg_down_to_flat;
}
return NULL;
}