diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index 9490124b8b..b622f3effb 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -17003,6 +17003,1008 @@ "y": -22, "palette": "keep" }, + { + "path": "track/boat_hire/small_turn_left_1_1.png", + "x": -25, + "y": -4, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_1_2.png", + "x": -9, + "y": -5, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_1_3.png", + "x": -19, + "y": 8, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_1_4.png", + "x": -20, + "y": 7, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_1_5.png", + "x": -9, + "y": 1, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_1_6.png", + "x": -25, + "y": 9, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_2_1.png", + "x": -9, + "y": 1, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_2_2.png", + "x": -25, + "y": 9, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_2_3.png", + "x": -8, + "y": 23, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_2_4.png", + "x": -16, + "y": 2, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_2_5.png", + "x": -24, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_2_6.png", + "x": -21, + "y": 9, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_3_1.png", + "x": -14, + "y": 1, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_3_2.png", + "x": -15, + "y": 9, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_3_3.png", + "x": 18, + "y": 8, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_3_4.png", + "x": 15, + "y": 7, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_3_5.png", + "x": 6, + "y": -4, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_3_6.png", + "x": -15, + "y": -5, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_4_1.png", + "x": -20, + "y": 5, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_4_2.png", + "x": -22, + "y": 15, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_4_3.png", + "x": -18, + "y": 19, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_4_4.png", + "x": -10, + "y": -2, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_4_5.png", + "x": -25, + "y": 5, + "palette": "keep" + }, + { + "path": "track/boat_hire/small_turn_left_4_6.png", + "x": -9, + "y": 15, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_1_1.png", + "x": -25, + "y": -1, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_1_2.png", + "x": -9, + "y": 4, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_1_3.png", + "x": -32, + "y": 14, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_1_4.png", + "x": -14, + "y": 1, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_1_5.png", + "x": -1, + "y": 11, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_1_6.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_1_7.png", + "x": -15, + "y": 6, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_1_8.png", + "x": -32, + "y": 14, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_1_9.png", + "x": -9, + "y": 1, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_1_10.png", + "x": -25, + "y": 9, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_2_1.png", + "x": -9, + "y": 1, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_2_2.png", + "x": -25, + "y": 9, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_2_3.png", + "x": -2, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_2_4.png", + "x": -20, + "y": 6, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_2_5.png", + "x": -32, + "y": 11, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_2_6.png", + "x": -11, + "y": 25, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_2_7.png", + "x": -4, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_2_8.png", + "x": -30, + "y": 5, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_2_9.png", + "x": -32, + "y": 1, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_2_10.png", + "x": -17, + "y": 9, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_3_1.png", + "x": -20, + "y": 1, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_3_2.png", + "x": -2, + "y": 9, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_3_3.png", + "x": 5, + "y": 6, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_3_4.png", + "x": 2, + "y": 14, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_3_5.png", + "x": -7, + "y": 6, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_3_6.png", + "x": -30, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_3_7.png", + "x": 29, + "y": 14, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_3_8.png", + "x": 2, + "y": 1, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_3_9.png", + "x": -2, + "y": -1, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_3_10.png", + "x": -19, + "y": 4, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_4_1.png", + "x": -16, + "y": 4, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_4_2.png", + "x": -32, + "y": 12, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_4_3.png", + "x": -24, + "y": 13, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_4_4.png", + "x": -12, + "y": 25, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_4_5.png", + "x": -8, + "y": -4, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_4_6.png", + "x": -32, + "y": 8, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_4_7.png", + "x": -21, + "y": 13, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_4_8.png", + "x": -4, + "y": 25, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_4_9.png", + "x": -25, + "y": 4, + "palette": "keep" + }, + { + "path": "track/boat_hire/medium_turn_left_4_10.png", + "x": -9, + "y": 12, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_1_1.png", + "x": -25, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_1_2.png", + "x": -9, + "y": 4, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_1_3.png", + "x": -31, + "y": 10, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_1_4.png", + "x": -12, + "y": -12, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_1_5.png", + "x": 2, + "y": 8, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_1_6.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_1_7.png", + "x": -14, + "y": 14, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_1_8.png", + "x": -13, + "y": 14, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_2_1.png", + "x": -9, + "y": 1, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_2_2.png", + "x": -25, + "y": 9, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_2_3.png", + "x": -4, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_2_4.png", + "x": -20, + "y": 7, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_2_5.png", + "x": -32, + "y": 14, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_2_6.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_2_7.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_2_8.png", + "x": -8, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_2_9.png", + "x": -20, + "y": 5, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_2_10.png", + "x": -28, + "y": 15, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_3_1.png", + "x": -22, + "y": 1, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_3_2.png", + "x": -6, + "y": 9, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_3_3.png", + "x": -8, + "y": 5, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_3_4.png", + "x": 18, + "y": 13, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_3_5.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_3_6.png", + "x": -21, + "y": 2, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_3_7.png", + "x": -10, + "y": -4, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_3_8.png", + "x": -13, + "y": -2, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_4_1.png", + "x": -14, + "y": 3, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_4_2.png", + "x": -30, + "y": 12, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_4_3.png", + "x": -32, + "y": 7, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_4_4.png", + "x": -20, + "y": 21, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_4_5.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_4_6.png", + "x": -14, + "y": 2, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_4_7.png", + "x": 0, + "y": 5, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_left_to_diag_4_8.png", + "x": 0, + "y": 17, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_1_1.png", + "x": -25, + "y": 3, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_1_2.png", + "x": -9, + "y": 12, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_1_3.png", + "x": -22, + "y": 7, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_1_4.png", + "x": -6, + "y": 21, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_1_5.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_1_6.png", + "x": -28, + "y": 2, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_1_7.png", + "x": -32, + "y": 5, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_1_8.png", + "x": -26, + "y": 17, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_2_1.png", + "x": -9, + "y": 1, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_2_2.png", + "x": -25, + "y": 9, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_2_3.png", + "x": -13, + "y": 5, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_2_4.png", + "x": -30, + "y": 13, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_2_5.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_2_6.png", + "x": 5, + "y": 2, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_2_7.png", + "x": 5, + "y": -4, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_2_8.png", + "x": -14, + "y": -2, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_3_1.png", + "x": -32, + "y": 1, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_3_2.png", + "x": -16, + "y": 9, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_3_3.png", + "x": -12, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_3_4.png", + "x": -30, + "y": 7, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_3_5.png", + "x": -18, + "y": 14, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_3_6.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_3_7.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_3_8.png", + "x": -12, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_3_9.png", + "x": 0, + "y": 5, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_3_10.png", + "x": 0, + "y": 15, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_4_1.png", + "x": -4, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_4_2.png", + "x": -20, + "y": 4, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_4_3.png", + "x": 21, + "y": 10, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_4_4.png", + "x": -12, + "y": -12, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_4_5.png", + "x": -20, + "y": 8, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_4_6.png", + "x": 0, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_4_7.png", + "x": 10, + "y": 14, + "palette": "keep" + }, + { + "path": "track/boat_hire/large_turn_right_to_diag_4_8.png", + "x": -13, + "y": 14, + "palette": "keep" + }, + { + "path": "track/boat_hire/flat_diag_1_1.png", + "x": -32, + "y": 5, + "palette": "keep" + }, + { + "path": "track/boat_hire/flat_diag_1_2.png", + "x": -32, + "y": 16, + "palette": "keep" + }, + { + "path": "track/boat_hire/flat_diag_2.png", + "x": -13, + "y": -2, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_left_1_1.png", + "x": -25, + "y": -1, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_left_1_2.png", + "x": -9, + "y": 7, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_left_1_3.png", + "x": -32, + "y": 3, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_left_1_4.png", + "x": -16, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_left_1_5.png", + "x": -1, + "y": 5, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_left_1_6.png", + "x": 4, + "y": 10, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_left_1_7.png", + "x": -22, + "y": 1, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_left_1_8.png", + "x": -4, + "y": 8, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_left_2_1.png", + "x": -9, + "y": 1, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_left_2_2.png", + "x": -25, + "y": 9, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_left_2_3.png", + "x": -2, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_left_2_4.png", + "x": -20, + "y": 6, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_left_2_5.png", + "x": -32, + "y": 12, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_left_2_6.png", + "x": -12, + "y": 25, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_left_2_7.png", + "x": -14, + "y": 3, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_left_2_8.png", + "x": -32, + "y": 12, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_right_1_1.png", + "x": -25, + "y": 3, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_right_1_2.png", + "x": -9, + "y": 12, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_right_1_3.png", + "x": -25, + "y": 12, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_right_1_4.png", + "x": -7, + "y": 25, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_right_1_5.png", + "x": -4, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_right_1_6.png", + "x": -32, + "y": 6, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_right_1_7.png", + "x": -32, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_right_1_8.png", + "x": -19, + "y": 9, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_right_2_1.png", + "x": -9, + "y": 1, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_right_2_2.png", + "x": -25, + "y": 9, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_right_2_3.png", + "x": -14, + "y": 5, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_right_2_4.png", + "x": -32, + "y": 10, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_right_2_5.png", + "x": 28, + "y": 14, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_right_2_6.png", + "x": 1, + "y": 0, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_right_2_7.png", + "x": -2, + "y": -1, + "palette": "keep" + }, + { + "path": "track/boat_hire/s_bend_right_2_8.png", + "x": -20, + "y": 7, + "palette": "keep" + }, { "path": "support/flat_to_steep_1_1.png", "x": -32, diff --git a/resources/g2/track/boat_hire/flat_diag_1_1.png b/resources/g2/track/boat_hire/flat_diag_1_1.png new file mode 100644 index 0000000000..93c86a41c9 Binary files /dev/null and b/resources/g2/track/boat_hire/flat_diag_1_1.png differ diff --git a/resources/g2/track/boat_hire/flat_diag_1_2.png b/resources/g2/track/boat_hire/flat_diag_1_2.png new file mode 100644 index 0000000000..ccaff52823 Binary files /dev/null and b/resources/g2/track/boat_hire/flat_diag_1_2.png differ diff --git a/resources/g2/track/boat_hire/flat_diag_2.png b/resources/g2/track/boat_hire/flat_diag_2.png new file mode 100644 index 0000000000..5e3478d8d3 Binary files /dev/null and b/resources/g2/track/boat_hire/flat_diag_2.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_1_1.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_1_1.png new file mode 100644 index 0000000000..52efa2f605 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_1_1.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_1_2.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_1_2.png new file mode 100644 index 0000000000..9710d93d04 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_1_2.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_1_3.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_1_3.png new file mode 100644 index 0000000000..bc51d79659 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_1_3.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_1_4.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_1_4.png new file mode 100644 index 0000000000..63b27ff102 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_1_4.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_1_5.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_1_5.png new file mode 100644 index 0000000000..43f85a938c Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_1_5.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_1_6.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_1_6.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_1_6.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_1_7.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_1_7.png new file mode 100644 index 0000000000..12b3bd8e47 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_1_7.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_1_8.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_1_8.png new file mode 100644 index 0000000000..20bc791f33 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_1_8.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_2_1.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_1.png new file mode 100644 index 0000000000..7d43e53a1f Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_1.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_2_10.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_10.png new file mode 100644 index 0000000000..998e05c38f Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_10.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_2_2.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_2.png new file mode 100644 index 0000000000..9b3dbdc144 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_2.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_2_3.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_3.png new file mode 100644 index 0000000000..75a5bfcec5 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_3.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_2_4.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_4.png new file mode 100644 index 0000000000..285e70f853 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_4.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_2_5.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_5.png new file mode 100644 index 0000000000..2281567949 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_5.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_2_6.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_6.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_6.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_2_7.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_7.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_7.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_2_8.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_8.png new file mode 100644 index 0000000000..a1bb81aa42 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_8.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_2_9.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_9.png new file mode 100644 index 0000000000..4a0184ae6d Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_2_9.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_3_1.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_3_1.png new file mode 100644 index 0000000000..93b3902909 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_3_1.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_3_2.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_3_2.png new file mode 100644 index 0000000000..89f7db7bd5 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_3_2.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_3_3.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_3_3.png new file mode 100644 index 0000000000..f54a0ef08e Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_3_3.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_3_4.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_3_4.png new file mode 100644 index 0000000000..76a1fe096b Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_3_4.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_3_5.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_3_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_3_5.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_3_6.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_3_6.png new file mode 100644 index 0000000000..f6f3f02c92 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_3_6.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_3_7.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_3_7.png new file mode 100644 index 0000000000..a6eea09be8 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_3_7.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_3_8.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_3_8.png new file mode 100644 index 0000000000..7c6eb15054 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_3_8.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_4_1.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_4_1.png new file mode 100644 index 0000000000..4c491bc676 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_4_1.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_4_2.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_4_2.png new file mode 100644 index 0000000000..d5918bdf8d Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_4_2.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_4_3.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_4_3.png new file mode 100644 index 0000000000..603d0805cd Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_4_3.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_4_4.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_4_4.png new file mode 100644 index 0000000000..bcf8f00f4c Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_4_4.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_4_5.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_4_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_4_5.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_4_6.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_4_6.png new file mode 100644 index 0000000000..a125a67085 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_4_6.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_4_7.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_4_7.png new file mode 100644 index 0000000000..2553222918 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_4_7.png differ diff --git a/resources/g2/track/boat_hire/large_turn_left_to_diag_4_8.png b/resources/g2/track/boat_hire/large_turn_left_to_diag_4_8.png new file mode 100644 index 0000000000..7cdddfa2c7 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_left_to_diag_4_8.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_1_1.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_1_1.png new file mode 100644 index 0000000000..2cdfb9acc8 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_1_1.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_1_2.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_1_2.png new file mode 100644 index 0000000000..3d6a5efb0b Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_1_2.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_1_3.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_1_3.png new file mode 100644 index 0000000000..876823a532 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_1_3.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_1_4.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_1_4.png new file mode 100644 index 0000000000..0acd5980b0 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_1_4.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_1_5.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_1_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_1_5.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_1_6.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_1_6.png new file mode 100644 index 0000000000..e8ae545fcb Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_1_6.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_1_7.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_1_7.png new file mode 100644 index 0000000000..0c35ad3216 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_1_7.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_1_8.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_1_8.png new file mode 100644 index 0000000000..57b2070a2e Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_1_8.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_2_1.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_2_1.png new file mode 100644 index 0000000000..dbf45ba645 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_2_1.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_2_2.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_2_2.png new file mode 100644 index 0000000000..654c4a0399 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_2_2.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_2_3.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_2_3.png new file mode 100644 index 0000000000..244af32485 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_2_3.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_2_4.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_2_4.png new file mode 100644 index 0000000000..1f4f234365 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_2_4.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_2_5.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_2_5.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_2_5.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_2_6.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_2_6.png new file mode 100644 index 0000000000..8aa6999a51 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_2_6.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_2_7.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_2_7.png new file mode 100644 index 0000000000..12113da0f5 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_2_7.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_2_8.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_2_8.png new file mode 100644 index 0000000000..a3fbf2ca20 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_2_8.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_3_1.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_1.png new file mode 100644 index 0000000000..999074e7d0 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_1.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_3_10.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_10.png new file mode 100644 index 0000000000..64e7db633f Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_10.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_3_2.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_2.png new file mode 100644 index 0000000000..d7a9fc1415 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_2.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_3_3.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_3.png new file mode 100644 index 0000000000..93dcbfad14 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_3.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_3_4.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_4.png new file mode 100644 index 0000000000..b695108b4e Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_4.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_3_5.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_5.png new file mode 100644 index 0000000000..35b0244333 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_5.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_3_6.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_6.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_6.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_3_7.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_7.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_7.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_3_8.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_8.png new file mode 100644 index 0000000000..8a01daf4f0 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_8.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_3_9.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_9.png new file mode 100644 index 0000000000..f00c854db0 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_3_9.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_4_1.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_4_1.png new file mode 100644 index 0000000000..d6e5fdcb86 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_4_1.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_4_2.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_4_2.png new file mode 100644 index 0000000000..93f4da3705 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_4_2.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_4_3.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_4_3.png new file mode 100644 index 0000000000..98149e701b Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_4_3.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_4_4.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_4_4.png new file mode 100644 index 0000000000..2c0c439714 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_4_4.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_4_5.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_4_5.png new file mode 100644 index 0000000000..6efdadf235 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_4_5.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_4_6.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_4_6.png new file mode 100644 index 0000000000..251476d353 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_4_6.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_4_7.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_4_7.png new file mode 100644 index 0000000000..86861600b5 Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_4_7.png differ diff --git a/resources/g2/track/boat_hire/large_turn_right_to_diag_4_8.png b/resources/g2/track/boat_hire/large_turn_right_to_diag_4_8.png new file mode 100644 index 0000000000..cb914354fa Binary files /dev/null and b/resources/g2/track/boat_hire/large_turn_right_to_diag_4_8.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_1_1.png b/resources/g2/track/boat_hire/medium_turn_left_1_1.png new file mode 100644 index 0000000000..d5ee3f12e6 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_1_1.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_1_10.png b/resources/g2/track/boat_hire/medium_turn_left_1_10.png new file mode 100644 index 0000000000..2aef658add Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_1_10.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_1_2.png b/resources/g2/track/boat_hire/medium_turn_left_1_2.png new file mode 100644 index 0000000000..df54682461 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_1_2.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_1_3.png b/resources/g2/track/boat_hire/medium_turn_left_1_3.png new file mode 100644 index 0000000000..034d380fb2 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_1_3.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_1_4.png b/resources/g2/track/boat_hire/medium_turn_left_1_4.png new file mode 100644 index 0000000000..5de803fa5b Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_1_4.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_1_5.png b/resources/g2/track/boat_hire/medium_turn_left_1_5.png new file mode 100644 index 0000000000..92e5db848f Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_1_5.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_1_6.png b/resources/g2/track/boat_hire/medium_turn_left_1_6.png new file mode 100644 index 0000000000..dc81f8861a Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_1_6.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_1_7.png b/resources/g2/track/boat_hire/medium_turn_left_1_7.png new file mode 100644 index 0000000000..1f7afe8b0b Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_1_7.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_1_8.png b/resources/g2/track/boat_hire/medium_turn_left_1_8.png new file mode 100644 index 0000000000..9c4503b375 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_1_8.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_1_9.png b/resources/g2/track/boat_hire/medium_turn_left_1_9.png new file mode 100644 index 0000000000..81e42dbc8c Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_1_9.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_2_1.png b/resources/g2/track/boat_hire/medium_turn_left_2_1.png new file mode 100644 index 0000000000..b6aec9ee92 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_2_1.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_2_10.png b/resources/g2/track/boat_hire/medium_turn_left_2_10.png new file mode 100644 index 0000000000..b619907ae0 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_2_10.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_2_2.png b/resources/g2/track/boat_hire/medium_turn_left_2_2.png new file mode 100644 index 0000000000..2d1742ebde Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_2_2.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_2_3.png b/resources/g2/track/boat_hire/medium_turn_left_2_3.png new file mode 100644 index 0000000000..920a7d36f2 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_2_3.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_2_4.png b/resources/g2/track/boat_hire/medium_turn_left_2_4.png new file mode 100644 index 0000000000..f8357ee1d7 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_2_4.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_2_5.png b/resources/g2/track/boat_hire/medium_turn_left_2_5.png new file mode 100644 index 0000000000..785087d18c Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_2_5.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_2_6.png b/resources/g2/track/boat_hire/medium_turn_left_2_6.png new file mode 100644 index 0000000000..14d8234a10 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_2_6.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_2_7.png b/resources/g2/track/boat_hire/medium_turn_left_2_7.png new file mode 100644 index 0000000000..5ff4414e30 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_2_7.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_2_8.png b/resources/g2/track/boat_hire/medium_turn_left_2_8.png new file mode 100644 index 0000000000..7a4a0364e2 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_2_8.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_2_9.png b/resources/g2/track/boat_hire/medium_turn_left_2_9.png new file mode 100644 index 0000000000..d454774feb Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_2_9.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_3_1.png b/resources/g2/track/boat_hire/medium_turn_left_3_1.png new file mode 100644 index 0000000000..a9190b532d Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_3_1.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_3_10.png b/resources/g2/track/boat_hire/medium_turn_left_3_10.png new file mode 100644 index 0000000000..d39ab57c0a Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_3_10.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_3_2.png b/resources/g2/track/boat_hire/medium_turn_left_3_2.png new file mode 100644 index 0000000000..f69912c6fb Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_3_2.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_3_3.png b/resources/g2/track/boat_hire/medium_turn_left_3_3.png new file mode 100644 index 0000000000..e36271cd2c Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_3_3.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_3_4.png b/resources/g2/track/boat_hire/medium_turn_left_3_4.png new file mode 100644 index 0000000000..e1aafc5931 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_3_4.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_3_5.png b/resources/g2/track/boat_hire/medium_turn_left_3_5.png new file mode 100644 index 0000000000..958e021e90 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_3_5.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_3_6.png b/resources/g2/track/boat_hire/medium_turn_left_3_6.png new file mode 100644 index 0000000000..2a4d35f021 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_3_6.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_3_7.png b/resources/g2/track/boat_hire/medium_turn_left_3_7.png new file mode 100644 index 0000000000..34b5796dc9 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_3_7.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_3_8.png b/resources/g2/track/boat_hire/medium_turn_left_3_8.png new file mode 100644 index 0000000000..b939435255 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_3_8.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_3_9.png b/resources/g2/track/boat_hire/medium_turn_left_3_9.png new file mode 100644 index 0000000000..585aaa79f3 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_3_9.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_4_1.png b/resources/g2/track/boat_hire/medium_turn_left_4_1.png new file mode 100644 index 0000000000..18d5a4dcb9 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_4_1.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_4_10.png b/resources/g2/track/boat_hire/medium_turn_left_4_10.png new file mode 100644 index 0000000000..09435e57d1 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_4_10.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_4_2.png b/resources/g2/track/boat_hire/medium_turn_left_4_2.png new file mode 100644 index 0000000000..de7a1148ff Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_4_2.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_4_3.png b/resources/g2/track/boat_hire/medium_turn_left_4_3.png new file mode 100644 index 0000000000..df2d3794d2 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_4_3.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_4_4.png b/resources/g2/track/boat_hire/medium_turn_left_4_4.png new file mode 100644 index 0000000000..87a6aff354 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_4_4.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_4_5.png b/resources/g2/track/boat_hire/medium_turn_left_4_5.png new file mode 100644 index 0000000000..786efdfd60 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_4_5.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_4_6.png b/resources/g2/track/boat_hire/medium_turn_left_4_6.png new file mode 100644 index 0000000000..ae1b3c350e Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_4_6.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_4_7.png b/resources/g2/track/boat_hire/medium_turn_left_4_7.png new file mode 100644 index 0000000000..dda475790a Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_4_7.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_4_8.png b/resources/g2/track/boat_hire/medium_turn_left_4_8.png new file mode 100644 index 0000000000..79d7a65137 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_4_8.png differ diff --git a/resources/g2/track/boat_hire/medium_turn_left_4_9.png b/resources/g2/track/boat_hire/medium_turn_left_4_9.png new file mode 100644 index 0000000000..b1f88f5338 Binary files /dev/null and b/resources/g2/track/boat_hire/medium_turn_left_4_9.png differ diff --git a/resources/g2/track/boat_hire/s_bend_left_1_1.png b/resources/g2/track/boat_hire/s_bend_left_1_1.png new file mode 100644 index 0000000000..749c1349b1 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_left_1_1.png differ diff --git a/resources/g2/track/boat_hire/s_bend_left_1_2.png b/resources/g2/track/boat_hire/s_bend_left_1_2.png new file mode 100644 index 0000000000..804273372c Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_left_1_2.png differ diff --git a/resources/g2/track/boat_hire/s_bend_left_1_3.png b/resources/g2/track/boat_hire/s_bend_left_1_3.png new file mode 100644 index 0000000000..f785b56cf1 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_left_1_3.png differ diff --git a/resources/g2/track/boat_hire/s_bend_left_1_4.png b/resources/g2/track/boat_hire/s_bend_left_1_4.png new file mode 100644 index 0000000000..6cce831e5f Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_left_1_4.png differ diff --git a/resources/g2/track/boat_hire/s_bend_left_1_5.png b/resources/g2/track/boat_hire/s_bend_left_1_5.png new file mode 100644 index 0000000000..f2338f312a Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_left_1_5.png differ diff --git a/resources/g2/track/boat_hire/s_bend_left_1_6.png b/resources/g2/track/boat_hire/s_bend_left_1_6.png new file mode 100644 index 0000000000..157ec85e76 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_left_1_6.png differ diff --git a/resources/g2/track/boat_hire/s_bend_left_1_7.png b/resources/g2/track/boat_hire/s_bend_left_1_7.png new file mode 100644 index 0000000000..b3dea4a2bc Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_left_1_7.png differ diff --git a/resources/g2/track/boat_hire/s_bend_left_1_8.png b/resources/g2/track/boat_hire/s_bend_left_1_8.png new file mode 100644 index 0000000000..450955c962 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_left_1_8.png differ diff --git a/resources/g2/track/boat_hire/s_bend_left_2_1.png b/resources/g2/track/boat_hire/s_bend_left_2_1.png new file mode 100644 index 0000000000..c5889ead76 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_left_2_1.png differ diff --git a/resources/g2/track/boat_hire/s_bend_left_2_2.png b/resources/g2/track/boat_hire/s_bend_left_2_2.png new file mode 100644 index 0000000000..4e72a66261 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_left_2_2.png differ diff --git a/resources/g2/track/boat_hire/s_bend_left_2_3.png b/resources/g2/track/boat_hire/s_bend_left_2_3.png new file mode 100644 index 0000000000..8dc33dbce0 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_left_2_3.png differ diff --git a/resources/g2/track/boat_hire/s_bend_left_2_4.png b/resources/g2/track/boat_hire/s_bend_left_2_4.png new file mode 100644 index 0000000000..2020cfcfc6 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_left_2_4.png differ diff --git a/resources/g2/track/boat_hire/s_bend_left_2_5.png b/resources/g2/track/boat_hire/s_bend_left_2_5.png new file mode 100644 index 0000000000..b9111e0273 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_left_2_5.png differ diff --git a/resources/g2/track/boat_hire/s_bend_left_2_6.png b/resources/g2/track/boat_hire/s_bend_left_2_6.png new file mode 100644 index 0000000000..457ec0cbce Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_left_2_6.png differ diff --git a/resources/g2/track/boat_hire/s_bend_left_2_7.png b/resources/g2/track/boat_hire/s_bend_left_2_7.png new file mode 100644 index 0000000000..225a3c0501 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_left_2_7.png differ diff --git a/resources/g2/track/boat_hire/s_bend_left_2_8.png b/resources/g2/track/boat_hire/s_bend_left_2_8.png new file mode 100644 index 0000000000..9079c53dd1 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_left_2_8.png differ diff --git a/resources/g2/track/boat_hire/s_bend_right_1_1.png b/resources/g2/track/boat_hire/s_bend_right_1_1.png new file mode 100644 index 0000000000..c6cb44874a Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_right_1_1.png differ diff --git a/resources/g2/track/boat_hire/s_bend_right_1_2.png b/resources/g2/track/boat_hire/s_bend_right_1_2.png new file mode 100644 index 0000000000..87e088ca75 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_right_1_2.png differ diff --git a/resources/g2/track/boat_hire/s_bend_right_1_3.png b/resources/g2/track/boat_hire/s_bend_right_1_3.png new file mode 100644 index 0000000000..d035540f61 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_right_1_3.png differ diff --git a/resources/g2/track/boat_hire/s_bend_right_1_4.png b/resources/g2/track/boat_hire/s_bend_right_1_4.png new file mode 100644 index 0000000000..9914ce8342 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_right_1_4.png differ diff --git a/resources/g2/track/boat_hire/s_bend_right_1_5.png b/resources/g2/track/boat_hire/s_bend_right_1_5.png new file mode 100644 index 0000000000..d2d2e26202 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_right_1_5.png differ diff --git a/resources/g2/track/boat_hire/s_bend_right_1_6.png b/resources/g2/track/boat_hire/s_bend_right_1_6.png new file mode 100644 index 0000000000..d766a89112 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_right_1_6.png differ diff --git a/resources/g2/track/boat_hire/s_bend_right_1_7.png b/resources/g2/track/boat_hire/s_bend_right_1_7.png new file mode 100644 index 0000000000..a9b108bc0c Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_right_1_7.png differ diff --git a/resources/g2/track/boat_hire/s_bend_right_1_8.png b/resources/g2/track/boat_hire/s_bend_right_1_8.png new file mode 100644 index 0000000000..9253d28729 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_right_1_8.png differ diff --git a/resources/g2/track/boat_hire/s_bend_right_2_1.png b/resources/g2/track/boat_hire/s_bend_right_2_1.png new file mode 100644 index 0000000000..35d455b10f Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_right_2_1.png differ diff --git a/resources/g2/track/boat_hire/s_bend_right_2_2.png b/resources/g2/track/boat_hire/s_bend_right_2_2.png new file mode 100644 index 0000000000..4a68ef77ae Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_right_2_2.png differ diff --git a/resources/g2/track/boat_hire/s_bend_right_2_3.png b/resources/g2/track/boat_hire/s_bend_right_2_3.png new file mode 100644 index 0000000000..0a7938d134 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_right_2_3.png differ diff --git a/resources/g2/track/boat_hire/s_bend_right_2_4.png b/resources/g2/track/boat_hire/s_bend_right_2_4.png new file mode 100644 index 0000000000..7fd3e1aac9 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_right_2_4.png differ diff --git a/resources/g2/track/boat_hire/s_bend_right_2_5.png b/resources/g2/track/boat_hire/s_bend_right_2_5.png new file mode 100644 index 0000000000..e9174b3483 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_right_2_5.png differ diff --git a/resources/g2/track/boat_hire/s_bend_right_2_6.png b/resources/g2/track/boat_hire/s_bend_right_2_6.png new file mode 100644 index 0000000000..3f3fad0d53 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_right_2_6.png differ diff --git a/resources/g2/track/boat_hire/s_bend_right_2_7.png b/resources/g2/track/boat_hire/s_bend_right_2_7.png new file mode 100644 index 0000000000..7013bdd8d4 Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_right_2_7.png differ diff --git a/resources/g2/track/boat_hire/s_bend_right_2_8.png b/resources/g2/track/boat_hire/s_bend_right_2_8.png new file mode 100644 index 0000000000..951ac2897b Binary files /dev/null and b/resources/g2/track/boat_hire/s_bend_right_2_8.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_1_1.png b/resources/g2/track/boat_hire/small_turn_left_1_1.png new file mode 100644 index 0000000000..188172dec2 Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_1_1.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_1_2.png b/resources/g2/track/boat_hire/small_turn_left_1_2.png new file mode 100644 index 0000000000..46d0af8371 Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_1_2.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_1_3.png b/resources/g2/track/boat_hire/small_turn_left_1_3.png new file mode 100644 index 0000000000..50becdad95 Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_1_3.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_1_4.png b/resources/g2/track/boat_hire/small_turn_left_1_4.png new file mode 100644 index 0000000000..2c5d454e0e Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_1_4.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_1_5.png b/resources/g2/track/boat_hire/small_turn_left_1_5.png new file mode 100644 index 0000000000..83d8837537 Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_1_5.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_1_6.png b/resources/g2/track/boat_hire/small_turn_left_1_6.png new file mode 100644 index 0000000000..69fdae5b07 Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_1_6.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_2_1.png b/resources/g2/track/boat_hire/small_turn_left_2_1.png new file mode 100644 index 0000000000..81be773d34 Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_2_1.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_2_2.png b/resources/g2/track/boat_hire/small_turn_left_2_2.png new file mode 100644 index 0000000000..3ae2cf835a Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_2_2.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_2_3.png b/resources/g2/track/boat_hire/small_turn_left_2_3.png new file mode 100644 index 0000000000..592be11f91 Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_2_3.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_2_4.png b/resources/g2/track/boat_hire/small_turn_left_2_4.png new file mode 100644 index 0000000000..cc002b219e Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_2_4.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_2_5.png b/resources/g2/track/boat_hire/small_turn_left_2_5.png new file mode 100644 index 0000000000..4ccd46e620 Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_2_5.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_2_6.png b/resources/g2/track/boat_hire/small_turn_left_2_6.png new file mode 100644 index 0000000000..39d6860e30 Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_2_6.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_3_1.png b/resources/g2/track/boat_hire/small_turn_left_3_1.png new file mode 100644 index 0000000000..9dff5077c8 Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_3_1.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_3_2.png b/resources/g2/track/boat_hire/small_turn_left_3_2.png new file mode 100644 index 0000000000..09c5a72917 Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_3_2.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_3_3.png b/resources/g2/track/boat_hire/small_turn_left_3_3.png new file mode 100644 index 0000000000..03dbb819c2 Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_3_3.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_3_4.png b/resources/g2/track/boat_hire/small_turn_left_3_4.png new file mode 100644 index 0000000000..71eddb8b89 Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_3_4.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_3_5.png b/resources/g2/track/boat_hire/small_turn_left_3_5.png new file mode 100644 index 0000000000..14c0febc5e Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_3_5.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_3_6.png b/resources/g2/track/boat_hire/small_turn_left_3_6.png new file mode 100644 index 0000000000..9fc72c2f0f Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_3_6.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_4_1.png b/resources/g2/track/boat_hire/small_turn_left_4_1.png new file mode 100644 index 0000000000..c297380723 Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_4_1.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_4_2.png b/resources/g2/track/boat_hire/small_turn_left_4_2.png new file mode 100644 index 0000000000..0420e0f32c Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_4_2.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_4_3.png b/resources/g2/track/boat_hire/small_turn_left_4_3.png new file mode 100644 index 0000000000..38241ff3ae Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_4_3.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_4_4.png b/resources/g2/track/boat_hire/small_turn_left_4_4.png new file mode 100644 index 0000000000..6f19fdf62a Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_4_4.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_4_5.png b/resources/g2/track/boat_hire/small_turn_left_4_5.png new file mode 100644 index 0000000000..b80ca59c59 Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_4_5.png differ diff --git a/resources/g2/track/boat_hire/small_turn_left_4_6.png b/resources/g2/track/boat_hire/small_turn_left_4_6.png new file mode 100644 index 0000000000..6971d8df5c Binary files /dev/null and b/resources/g2/track/boat_hire/small_turn_left_4_6.png differ diff --git a/src/openrct2/network/NetworkBase.cpp b/src/openrct2/network/NetworkBase.cpp index 48ac7304ca..881a2c5c0f 100644 --- a/src/openrct2/network/NetworkBase.cpp +++ b/src/openrct2/network/NetworkBase.cpp @@ -49,7 +49,7 @@ using namespace OpenRCT2; // It is used for making sure only compatible builds get connected, even within // single OpenRCT2 version. -constexpr uint8_t kNetworkStreamVersion = 5; +constexpr uint8_t kNetworkStreamVersion = 6; const std::string kNetworkStreamID = std::string(OPENRCT2_VERSION) + "-" + std::to_string(kNetworkStreamVersion); diff --git a/src/openrct2/paint/track/water/BoatHire.cpp b/src/openrct2/paint/track/water/BoatHire.cpp index 022b8dedb4..516ebc36a6 100644 --- a/src/openrct2/paint/track/water/BoatHire.cpp +++ b/src/openrct2/paint/track/water/BoatHire.cpp @@ -12,6 +12,7 @@ #include "../../../ride/Ride.h" #include "../../../ride/Track.h" #include "../../../ride/TrackPaint.h" +#include "../../../sprites.h" #include "../../Paint.h" #include "../../tile_element/Segment.h" #include "../../track/Segment.h" @@ -139,6 +140,1095 @@ static void PaintBoatHireTrackRightQuarterTurn1Tile( session, ride, trackSequence, (direction + 3) % 4, height, trackElement, supportType); } +static void PaintBoatHireTrackLeftQuarterTurn3Tiles( + PaintSession& session, const Ride& ride, uint8_t trackSequence, Direction direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 1)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 6)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 7)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 12)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 13)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 18)), + { 0, 0, height }, { { 0, 6, height }, { 32, 26, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 19)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 26, 0 } }); + break; + } + break; + case 1: + switch (direction) + { + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 8)), + { 0, 0, height }, { { 16, 16, height }, { 1, 1, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 21)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 16, 16, 0 } }); + break; + } + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 2)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 3)), + { 0, 0, height }, { { 16, 0, height + 15 }, { 16, 16, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 9)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 16, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 14)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 15)), + { 0, 0, height }, { { 0, 16, height + 15 }, { 16, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 20)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 0 } }); + break; + } + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 4)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 5)), + { 0, 0, height }, { { 6, 0, height + 15 }, { 20, 32, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 10)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 11)), + { 0, 0, height }, { { 6, 0, height + 15 }, { 20, 32, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 16)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 17)), + { 0, 0, height }, { { 6, 0, height + 15 }, { 20, 32, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 22)), + { 0, 0, height }, { { 6, 0, height }, { 26, 32, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 23)), + { 0, 0, height }, { { 6, 0, height + 15 }, { 26, 32, 0 } }); + break; + } + break; + } + + PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 16); +} + +static void PaintBoatHireTrackRightQuarterTurn3Tiles( + PaintSession& session, const Ride& ride, uint8_t trackSequence, Direction direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = kMapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + PaintBoatHireTrackLeftQuarterTurn3Tiles( + session, ride, trackSequence, DirectionPrev(direction), height, trackElement, supportType); +} + +static void PaintBoatHireTrackLeftQuarterTurn5Tiles( + PaintSession& session, const Ride& ride, uint8_t trackSequence, Direction direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 1)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 10)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 11)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 20)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 21)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 30)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 31)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + } + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 2)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 3)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 32, 16, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 12)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 13)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 32, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 22)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 23)), + { 0, 0, height }, { { 0, 16, height + 15 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 32)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 33)), + { 0, 0, height }, { { 0, 16, height + 15 }, { 32, 16, 0 } }); + break; + } + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 4)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 5)), + { 0, 0, height }, { { 0, 16, height + 15 }, { 16, 16, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 14)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 15)), + { 0, 0, height }, { { 16, 16, height + 15 }, { 16, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 24)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 25)), + { 0, 0, height }, { { 16, 0, height + 15 }, { 16, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 34)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 35)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 32, 32, 0 } }); + break; + } + break; + case 5: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 6)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 7)), + { 0, 0, height }, { { 16, 0, height + 15 }, { 16, 32, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 16)), + { 0, 0, height }, { { 0, 0, height }, { 16, 32, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 17)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 16, 32, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 26)), + { 0, 0, height }, { { 0, 0, height }, { 16, 32, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 27)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 16, 32, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 36)), + { 0, 0, height }, { { 16, 0, height }, { 16, 32, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 37)), + { 0, 0, height }, { { 16, 0, height + 15 }, { 16, 32, 0 } }); + break; + } + break; + case 6: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 8)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 9)), + { 0, 0, height }, { { 6, 0, height + 15 }, { 20, 32, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 18)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 19)), + { 0, 0, height }, { { 6, 0, height + 15 }, { 20, 32, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 28)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 29)), + { 0, 0, height }, { { 6, 0, height + 15 }, { 20, 32, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 38)), + { 0, 0, height }, { { 6, 0, height }, { 20, 32, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 39)), + { 0, 0, height }, { { 6, 0, height + 15 }, { 20, 32, 0 } }); + break; + } + break; + } + + PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 16); +} + +static void PaintBoatHireTrackRightQuarterTurn5Tiles( + PaintSession& session, const Ride& ride, uint8_t trackSequence, Direction direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = kMapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[trackSequence]; + PaintBoatHireTrackLeftQuarterTurn5Tiles( + session, ride, trackSequence, DirectionPrev(direction), height, trackElement, supportType); +} + +static void PaintBoatHireTrackLeftEighthToDiag( + PaintSession& session, const Ride& ride, uint8_t trackSequence, Direction direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 1)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 8)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 9)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 18)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 19)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 26)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 27)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + } + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 2)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 3)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 32, 16, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 10)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 11)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 32, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 20)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 21)), + { 0, 0, height }, { { 0, 16, height + 15 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 28)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 29)), + { 0, 0, height }, { { 0, 16, height + 15 }, { 32, 16, 0 } }); + break; + } + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 4)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 5)), + { 0, 0, height }, { { 0, 16, height + 15 }, { 16, 16, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 12)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 13)), + { 0, 0, height }, { { 16, 16, height + 15 }, { 16, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 22)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 23)), + { 0, 0, height }, { { 16, 0, height + 15 }, { 16, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 30)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 31)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 16, 16, 0 } }); + break; + } + break; + case 3: + switch (direction) + { + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 14)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 15)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 16, 16, 0 } }); + break; + } + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 6)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 0 } }); + PaintAddImageAsChildRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 7)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 16)), + { 0, 0, height }, { { 0, 16, height }, { 16, 18, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 17)), + { 0, 0, height }, { { 0, 16, height + 15 }, { 16, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 24)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 25)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 16, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 32)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 33)), + { 0, 0, height }, { { 16, 0, height + 15 }, { 16, 16, 0 } }); + break; + } + break; + } + + PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 16); +} + +static void PaintBoatHireTrackRightEighthToDiag( + PaintSession& session, const Ride& ride, uint8_t trackSequence, Direction direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 34)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 35)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 42)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 43)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 50)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 51)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 60)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 61)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + } + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 36)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 37)), + { 0, 0, height }, { { 0, 16, height + 15 }, { 32, 16, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 44)), + { 0, 0, height }, { { 0, 16, height }, { 32, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 45)), + { 0, 0, height }, { { 0, 16, height + 15 }, { 32, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 52)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 53)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 32, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 62)), + { 0, 0, height }, { { 0, 0, height }, { 32, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 63)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 32, 16, 0 } }); + break; + } + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 38)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 39)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 16, 16, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 46)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 47)), + { 0, 0, height }, { { 16, 0, height + 15 }, { 16, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 54)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 55)), + { 0, 0, height }, { { 16, 16, height + 15 }, { 16, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 64)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 65)), + { 0, 0, height }, { { 0, 16, height + 15 }, { 16, 16, 0 } }); + break; + } + break; + case 3: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 56)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 57)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 16, 16, 0 } }); + break; + } + break; + case 4: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 40)), + { 0, 0, height }, { { 16, 0, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 41)), + { 0, 0, height }, { { 16, 0, height + 15 }, { 16, 16, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 48)), + { 0, 0, height }, { { 0, 0, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 49)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 16, 16, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 58)), + { 0, 0, height }, { { 0, 16, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 59)), + { 0, 0, height }, { { 0, 16, height + 15 }, { 16, 16, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 66)), + { 0, 0, height }, { { 16, 16, height }, { 16, 16, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 67)), + { 0, 0, height }, { { 16, 16, height + 15 }, { 16, 16, 0 } }); + break; + } + break; + } + + PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 16); +} + +static void PaintBoatHireTrackLeftEighthToOrthogonal( + PaintSession& session, const Ride& ride, uint8_t trackSequence, Direction direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + PaintBoatHireTrackRightEighthToDiag( + session, ride, trackSequence, DirectionReverse(direction), height, trackElement, supportType); +} + +static void PaintBoatHireTrackRightEighthToOrthogonal( + PaintSession& session, const Ride& ride, uint8_t trackSequence, Direction direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence]; + PaintBoatHireTrackLeftEighthToDiag( + session, ride, trackSequence, DirectionPrev(direction), height, trackElement, supportType); +} + +static void PaintBoatHireTrackDiagFlat( + PaintSession& session, const Ride& ride, uint8_t trackSequence, Direction direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_BOAT_HIRE_TRACK_FLAT_DIAGONAL + 2), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 0 } }); + break; + } + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_BOAT_HIRE_TRACK_FLAT_DIAGONAL + 0), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_BOAT_HIRE_TRACK_FLAT_DIAGONAL + 1), + { -16, -16, height }, { { -16, -16, height + 15 }, { 32, 32, 0 } }); + break; + } + break; + case 2: + switch (direction) + { + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_BOAT_HIRE_TRACK_FLAT_DIAGONAL + 0), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_BOAT_HIRE_TRACK_FLAT_DIAGONAL + 1), + { -16, -16, height }, { { -16, -16, height + 15 }, { 32, 32, 0 } }); + break; + } + break; + case 3: + switch (direction) + { + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex(SPR_G2_BOAT_HIRE_TRACK_FLAT_DIAGONAL + 2), + { -16, -16, height }, { { -16, -16, height }, { 32, 32, 0 } }); + break; + } + break; + } + + PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 16); +} + +static void PaintBoatHireTrackSBendLeft( + PaintSession& session, const Ride& ride, uint8_t trackSequence, Direction direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 1)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 8)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 9)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 6)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 7)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 14)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 15)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + } + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 2)), + { 0, 0, height }, { { 0, 0, height }, { 32, 26, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 3)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 32, 26, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 10)), + { 0, 0, height }, { { 0, 0, height }, { 32, 26, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 11)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 32, 26, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 4)), + { 0, 0, height }, { { 0, 6, height }, { 32, 26, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 5)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 26, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 12)), + { 0, 0, height }, { { 0, 6, height }, { 32, 26, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 13)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 26, 0 } }); + break; + } + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 4)), + { 0, 0, height }, { { 0, 6, height }, { 32, 26, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 5)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 26, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 12)), + { 0, 0, height }, { { 0, 6, height }, { 32, 26, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 13)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 26, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 2)), + { 0, 0, height }, { { 0, 0, height }, { 32, 26, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 3)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 32, 26, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 10)), + { 0, 0, height }, { { 0, 0, height }, { 32, 26, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 11)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 32, 26, 0 } }); + break; + } + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 6)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 7)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 14)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 15)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 0)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 1)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 8)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 9)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + } + break; + } + + PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 16); +} + +static void PaintBoatHireTrackSBendRight( + PaintSession& session, const Ride& ride, uint8_t trackSequence, Direction direction, int32_t height, + const TrackElement& trackElement, SupportType supportType) +{ + switch (trackSequence) + { + case 0: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 16)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 17)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 24)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 25)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 22)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 23)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 30)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 31)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + } + break; + case 1: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 18)), + { 0, 0, height }, { { 0, 6, height }, { 32, 26, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 19)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 26, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 26)), + { 0, 0, height }, { { 0, 6, height }, { 32, 26, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 27)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 26, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 20)), + { 0, 0, height }, { { 0, 0, height }, { 32, 26, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 21)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 32, 26, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 28)), + { 0, 0, height }, { { 0, 0, height }, { 32, 26, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 29)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 32, 26, 0 } }); + break; + } + break; + case 2: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 20)), + { 0, 0, height }, { { 0, 0, height }, { 32, 26, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 21)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 32, 26, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 28)), + { 0, 0, height }, { { 0, 0, height }, { 32, 26, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 29)), + { 0, 0, height }, { { 0, 0, height + 15 }, { 32, 26, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 18)), + { 0, 0, height }, { { 0, 6, height }, { 32, 26, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 19)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 26, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 26)), + { 0, 0, height }, { { 0, 6, height }, { 32, 26, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 27)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 26, 0 } }); + break; + } + break; + case 3: + switch (direction) + { + case 0: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 22)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 23)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 1: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 30)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 31)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 2: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 16)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 17)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + case 3: + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 24)), + { 0, 0, height }, { { 0, 6, height }, { 32, 20, 0 } }); + PaintAddImageAsParentRotated( + session, direction, session.TrackColours.WithIndex((SPR_G2_BOAT_HIRE_TRACK_S_BEND + 25)), + { 0, 0, height }, { { 0, 6, height + 15 }, { 32, 20, 0 } }); + break; + } + break; + } + + PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 16); +} + /** * rct2: 0x008B0D60 */ @@ -158,6 +1248,41 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionBoatHire(OpenRCT2::TrackElemType track return PaintBoatHireTrackLeftQuarterTurn1Tile; case TrackElemType::RightQuarterTurn1Tile: return PaintBoatHireTrackRightQuarterTurn1Tile; + + // Added by OpenRCT2 + + // Small turns + case TrackElemType::LeftQuarterTurn3Tiles: + return PaintBoatHireTrackLeftQuarterTurn3Tiles; + case TrackElemType::RightQuarterTurn3Tiles: + return PaintBoatHireTrackRightQuarterTurn3Tiles; + + // Medium turns + case TrackElemType::LeftQuarterTurn5Tiles: + return PaintBoatHireTrackLeftQuarterTurn5Tiles; + case TrackElemType::RightQuarterTurn5Tiles: + return PaintBoatHireTrackRightQuarterTurn5Tiles; + + // Large turns + case TrackElemType::LeftEighthToDiag: + return PaintBoatHireTrackLeftEighthToDiag; + case TrackElemType::RightEighthToDiag: + return PaintBoatHireTrackRightEighthToDiag; + case TrackElemType::LeftEighthToOrthogonal: + return PaintBoatHireTrackLeftEighthToOrthogonal; + case TrackElemType::RightEighthToOrthogonal: + return PaintBoatHireTrackRightEighthToOrthogonal; + + // Diagonal + case TrackElemType::DiagFlat: + return PaintBoatHireTrackDiagFlat; + + // S bends + case TrackElemType::SBendLeft: + return PaintBoatHireTrackSBendLeft; + case TrackElemType::SBendRight: + return PaintBoatHireTrackSBendRight; + default: return nullptr; } diff --git a/src/openrct2/park/Legacy.cpp b/src/openrct2/park/Legacy.cpp index 4a5c34cb23..0105374d4c 100644 --- a/src/openrct2/park/Legacy.cpp +++ b/src/openrct2/park/Legacy.cpp @@ -2635,6 +2635,26 @@ bool TrackTypeMustBeMadeInvisible(ride_type_t rideType, OpenRCT2::TrackElemType break; } } + else if (rideType == RIDE_TYPE_BOAT_HIRE && parkFileVersion < kExtendedBoatHireVersion) + { + switch (trackType) + { + case TrackElemType::LeftQuarterTurn3Tiles: + case TrackElemType::RightQuarterTurn3Tiles: + case TrackElemType::LeftQuarterTurn5Tiles: + case TrackElemType::RightQuarterTurn5Tiles: + case TrackElemType::LeftEighthToDiag: + case TrackElemType::RightEighthToDiag: + case TrackElemType::LeftEighthToOrthogonal: + case TrackElemType::RightEighthToOrthogonal: + case TrackElemType::DiagFlat: + case TrackElemType::SBendLeft: + case TrackElemType::SBendRight: + return true; + default: + break; + } + } return false; } diff --git a/src/openrct2/park/ParkFile.h b/src/openrct2/park/ParkFile.h index 5d9a6d3ad5..1eb787d3f5 100644 --- a/src/openrct2/park/ParkFile.h +++ b/src/openrct2/park/ParkFile.h @@ -11,7 +11,7 @@ namespace OpenRCT2 struct GameState_t; // Current version that is saved. - constexpr uint32_t PARK_FILE_CURRENT_VERSION = 45; + constexpr uint32_t PARK_FILE_CURRENT_VERSION = 46; // The minimum version that is forwards compatible with the current version. constexpr uint32_t PARK_FILE_MIN_VERSION = 45; @@ -34,6 +34,7 @@ namespace OpenRCT2 constexpr uint16_t kWoodenRollerCoasterMediumLargeHalfLoopsVersion = 41; constexpr uint16_t kExtendedCorkscrewCoasterVersion = 42; constexpr uint16_t kExtendedTwisterCoasterVersion = 43; + constexpr uint16_t kExtendedBoatHireVersion = 46; } // namespace OpenRCT2 class ParkFileExporter diff --git a/src/openrct2/ride/rtd/water/BoatHire.h b/src/openrct2/ride/rtd/water/BoatHire.h index cafff1d78f..8f78ac2d38 100644 --- a/src/openrct2/ride/rtd/water/BoatHire.h +++ b/src/openrct2/ride/rtd/water/BoatHire.h @@ -22,7 +22,7 @@ constexpr RideTypeDescriptor BoatHireRTD = .StartTrackPiece = OpenRCT2::TrackElemType::EndStation, .TrackPaintFunctions = TrackDrawerDescriptor({ .Drawer = GetTrackPaintFunctionBoatHire, - .enabledTrackGroups = {TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::curveVerySmall}, + .enabledTrackGroups = {TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::curveVerySmall, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::sBend}, .extraTrackGroups = {}, }), .InvertedTrackPaintFunctions = {}, diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index daa0909219..fe29f564f8 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1494,9 +1494,17 @@ enum : ImageIndex SPR_G2_FLUME_60_25_NW_SE_BACK_WATER, SPR_G2_FLUME_60_25_NW_SE_BACK, + SPR_G2_BOAT_HIRE_BEGIN, + SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE = SPR_G2_BOAT_HIRE_BEGIN, + SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE = SPR_G2_BOAT_HIRE_TRACK_SMALL_CURVE + 24, + SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE = SPR_G2_BOAT_HIRE_TRACK_MEDIUM_CURVE + 40, + SPR_G2_BOAT_HIRE_TRACK_FLAT_DIAGONAL = SPR_G2_BOAT_HIRE_TRACK_LARGE_CURVE + 68, + SPR_G2_BOAT_HIRE_TRACK_S_BEND = SPR_G2_BOAT_HIRE_TRACK_FLAT_DIAGONAL + 3, + SPR_G2_BOAT_HIRE_END = SPR_G2_BOAT_HIRE_TRACK_S_BEND + 32, + // G2 Supports - SPR_G2_SUPPORT_WOODEN_TRUSS, + SPR_G2_SUPPORT_WOODEN_TRUSS = SPR_G2_BOAT_HIRE_END, SPR_G2_SUPPORT_WOODEN_MINE = SPR_G2_SUPPORT_WOODEN_TRUSS + 32, SPR_G2_SUPPORT_END = SPR_G2_SUPPORT_WOODEN_MINE + 32,