1use crate::sim::level::Level;
8
9pub const CAMPAIGN: &[&str] = &[
10 include_str!("../../levels/01_welcome_ashore.txt"),
11 include_str!("../../levels/02_first_turn.txt"),
12 include_str!("../../levels/03_follow_the_claw.txt"),
13 include_str!("../../levels/04_corner_pocket.txt"),
14 include_str!("../../levels/05_two_minds.txt"),
15 include_str!("../../levels/06_signpost_splitter.txt"),
16 include_str!("../../levels/07_family_outing.txt"),
17 include_str!("../../levels/08_detour.txt"),
18 include_str!("../../levels/09_both_lanes.txt"),
19 include_str!("../../levels/10_confluence.txt"),
20 include_str!("../../levels/11_break_the_loop.txt"),
21 include_str!("../../levels/12_merry_go_round.txt"),
22 include_str!("../../levels/13_crossroads.txt"),
23 include_str!("../../levels/14_right_of_way.txt"),
24 include_str!("../../levels/15_trust_the_claw.txt"),
25 include_str!("../../levels/16_island_keep.txt"),
26 include_str!("../../levels/17_two_doors.txt"),
27 include_str!("../../levels/18_rush_hour.txt"),
28 include_str!("../../levels/19_odd_couple.txt"),
29 include_str!("../../levels/20_pinch_point.txt"),
30 include_str!("../../levels/21_log_ride.txt"),
31 include_str!("../../levels/22_second_serving.txt"),
32 include_str!("../../levels/23_into_the_weeds.txt"),
33 include_str!("../../levels/24_dry_feet.txt"),
34 include_str!("../../levels/25_the_old_mill.txt"),
35 include_str!("../../levels/26_open_ocean.txt"),
36 include_str!("../../levels/27_follow_the_molt.txt"),
37 include_str!("../../levels/28_twin_logs.txt"),
38 include_str!("../../levels/29_golden_hour.txt"),
39 include_str!("../../levels/30_hunker_down.txt"),
40 include_str!("../../levels/31_crossfall.txt"),
41 include_str!("../../levels/32_mill_race.txt"),
42 include_str!("../../levels/33_rock_pool.txt"),
43 include_str!("../../levels/34_misroute.txt"),
44 include_str!("../../levels/35_pool_party.txt"),
45 include_str!("../../levels/36_gull_gauntlet.txt"),
46 include_str!("../../levels/37_half_measure.txt"),
47 include_str!("../../levels/38_kelp_keep.txt"),
48 include_str!("../../levels/39_toll_road.txt"),
49 include_str!("../../levels/40_molt_gather.txt"),
50 include_str!("../../levels/41_gold_rush.txt"),
51 include_str!("../../levels/42_long_way_round.txt"),
52 include_str!("../../levels/43_down_the_steps.txt"),
53 include_str!("../../levels/44_zigzag.txt"),
54 include_str!("../../levels/45_two_ladders.txt"),
55 include_str!("../../levels/46_cold_feet.txt"),
56 include_str!("../../levels/47_two_tides.txt"),
57 include_str!("../../levels/48_the_long_stair.txt"),
58 include_str!("../../levels/49_the_back_stair.txt"),
59 include_str!("../../levels/50_gold_ladder.txt"),
60 include_str!("../../levels/51_kelp_and_cross.txt"),
61 include_str!("../../levels/52_two_giants.txt"),
62 include_str!("../../levels/53_down_the_middle.txt"),
63 include_str!("../../levels/54_left_behind.txt"),
64 include_str!("../../levels/55_pincer.txt"),
65 include_str!("../../levels/56_weed_between.txt"),
66 include_str!("../../levels/57_slow_and_sure.txt"),
67 include_str!("../../levels/58_the_long_shelf.txt"),
68 include_str!("../../levels/59_quick_feet.txt"),
69 include_str!("../../levels/60_rock_row.txt"),
70 include_str!("../../levels/61_two_logs.txt"),
71 include_str!("../../levels/62_over_the_pool.txt"),
72 include_str!("../../levels/63_round_the_log.txt"),
73 include_str!("../../levels/64_deep_water.txt"),
74 include_str!("../../levels/65_two_giants_again.txt"),
75 include_str!("../../levels/66_castle_on_high.txt"),
76 include_str!("../../levels/67_three_ways_in.txt"),
77 include_str!("../../levels/68_the_far_corner.txt"),
78 include_str!("../../levels/69_weed_gate.txt"),
79 include_str!("../../levels/70_last_of_the_tide.txt"),
80 include_str!("../../levels/71_the_four_doors.txt"),
81 include_str!("../../levels/72_four_doors_up.txt"),
82 include_str!("../../levels/73_both_ways_home.txt"),
83 include_str!("../../levels/74_the_left_turn.txt"),
84 include_str!("../../levels/75_the_right_turn.txt"),
85 include_str!("../../levels/76_the_ragged_lanes.txt"),
86 include_str!("../../levels/77_one_down_three_up.txt"),
87 include_str!("../../levels/78_three_up_and_a_sidestep.txt"),
88 include_str!("../../levels/79_the_left_shoulder.txt"),
89 include_str!("../../levels/80_the_right_shoulder.txt"),
90 include_str!("../../levels/81_the_long_and_short.txt"),
91 include_str!("../../levels/82_the_last_lane.txt"),
92];
93
94pub const CHALLENGES: &[&str] = &[
98 include_str!("../../challenges/01_first_flood.txt"),
99 include_str!("../../challenges/02_fork_the_flow.txt"),
100 include_str!("../../challenges/03_hold_the_line.txt"),
101 include_str!("../../challenges/04_golden_ticket.txt"),
102 include_str!("../../challenges/05_torrent.txt"),
103 include_str!("../../challenges/06_gull_storm.txt"),
104 include_str!("../../challenges/07_double_gold.txt"),
105 include_str!("../../challenges/08_feeding_frenzy.txt"),
106];
107
108pub fn challenge_levels() -> Vec<Level> {
109 CHALLENGES
110 .iter()
111 .enumerate()
112 .map(|(i, text)| {
113 Level::parse(text).unwrap_or_else(|e| panic!("challenge stage {}: {e}", i + 1))
114 })
115 .collect()
116}
117
118pub fn campaign_levels() -> Vec<Level> {
121 CAMPAIGN
122 .iter()
123 .enumerate()
124 .map(|(i, text)| {
125 Level::parse(text).unwrap_or_else(|e| panic!("campaign level {}: {e}", i + 1))
126 })
127 .collect()
128}