a modern tui library written in zig
at v0.5.0 361 lines 60 kB view raw
1const std = @import("std"); 2const log = std.log.scoped(.main); 3const mem = std.mem; 4const process = std.process; 5 6const vaxis = @import("vaxis"); 7const View = vaxis.widgets.View; 8const Cell = vaxis.Cell; 9const border = vaxis.widgets.border; 10 11const Event = union(enum) { 12 key_press: vaxis.Key, 13 winsize: vaxis.Winsize, 14}; 15 16pub fn main() !void { 17 var gpa = std.heap.GeneralPurposeAllocator(.{}){}; 18 defer { 19 const deinit_status = gpa.deinit(); 20 if (deinit_status == .leak) { 21 log.err("memory leak", .{}); 22 } 23 } 24 const alloc = gpa.allocator(); 25 26 var world_map: []const u8 = lg_world_map; 27 var map_width = lg_map_width; 28 var map_height = lg_map_height; 29 var use_sm_map = false; 30 var use_mini_view = false; 31 32 var x: usize = 0; 33 var y: usize = 0; 34 var h: usize = 0; 35 var w: usize = 0; 36 defer log.info( 37 \\Results: 38 \\ - Map Size: {d}x{d} 39 \\ - Screen Size: {d}x{d} 40 \\ - Position: {d}, {d} 41 , .{ 42 map_width, map_height, 43 w, h, 44 x, y, 45 }); 46 47 var tty = try vaxis.Tty.init(); 48 defer tty.deinit(); 49 50 var buffered_writer = tty.bufferedWriter(); 51 const writer = buffered_writer.writer().any(); 52 53 // Initialize Vaxis 54 var vx = try vaxis.init(alloc, .{ 55 .kitty_keyboard_flags = .{ .report_events = true }, 56 }); 57 defer vx.deinit(alloc, tty.anyWriter()); 58 var loop: vaxis.Loop(Event) = .{ 59 .vaxis = &vx, 60 .tty = &tty, 61 }; 62 try loop.init(); 63 try loop.start(); 64 defer loop.stop(); 65 try vx.enterAltScreen(writer); 66 try buffered_writer.flush(); 67 try vx.queryTerminal(tty.anyWriter(), 20 * std.time.ns_per_s); 68 69 // Initialize Views 70 // - Large Map 71 var lg_map_view = try View.init(alloc, &vx.unicode, .{ .width = lg_map_width, .height = lg_map_height }); 72 defer lg_map_view.deinit(); 73 //w = lg_map_view.screen.width; 74 //h = lg_map_view.screen.height; 75 var lg_map_buf: [lg_map_width * lg_map_height]u8 = undefined; 76 _ = mem.replace(u8, lg_world_map, "\n", "", lg_map_buf[0..]); 77 _ = try lg_map_view.printSegment(.{ .text = lg_map_buf[0..] }, .{ .wrap = .grapheme }); 78 // - Small Map 79 var sm_map_view = try View.init(alloc, &vx.unicode, .{ .width = sm_map_width, .height = sm_map_height }); 80 defer sm_map_view.deinit(); 81 w = sm_map_view.screen.width; 82 h = sm_map_view.screen.height; 83 var sm_map_buf: [sm_map_width * sm_map_height]u8 = undefined; 84 _ = mem.replace(u8, sm_world_map, "\n", "", sm_map_buf[0..]); 85 _ = try sm_map_view.printSegment(.{ .text = sm_map_buf[0..] }, .{ .wrap = .grapheme }); 86 // - Active Map 87 var map_view = lg_map_view; 88 89 // TUI Loop 90 while (true) { 91 const event = loop.nextEvent(); 92 switch (event) { 93 .key_press => |key| { 94 // Close Demo 95 if (key.matches('c', .{ .ctrl = true })) break; 96 // Scroll 97 if (key.matches(vaxis.Key.left, .{})) x -|= 1; 98 if (key.matches(vaxis.Key.right, .{})) x +|= 1; 99 if (key.matches(vaxis.Key.up, .{})) y -|= 1; 100 if (key.matches(vaxis.Key.down, .{})) y +|= 1; 101 // Quick Scroll 102 if (key.matches(vaxis.Key.left, .{ .ctrl = true })) x -|= 30; 103 if (key.matches(vaxis.Key.right, .{ .ctrl = true })) x +|= 30; 104 if (key.matches(vaxis.Key.up, .{ .ctrl = true })) y -|= 10; 105 if (key.matches(vaxis.Key.down, .{ .ctrl = true })) y +|= 10; 106 // Goto Side 107 if (key.matches(vaxis.Key.left, .{ .shift = true })) x -|= map_width; 108 if (key.matches(vaxis.Key.right, .{ .shift = true })) x +|= map_width; 109 if (key.matches(vaxis.Key.up, .{ .shift = true })) y -|= map_height; 110 if (key.matches(vaxis.Key.down, .{ .shift = true })) y +|= map_height; 111 // Change Zoom (Swap Map Views) 112 if (key.matches('z', .{})) { 113 if (use_sm_map) { 114 world_map = lg_world_map; 115 map_width = lg_map_width; 116 map_height = lg_map_height; 117 map_view = lg_map_view; 118 } else { 119 world_map = sm_world_map; 120 map_width = sm_map_width; 121 map_height = sm_map_height; 122 map_view = sm_map_view; 123 } 124 use_sm_map = !use_sm_map; 125 w = map_width; 126 h = map_height; 127 } 128 // Mini View (Forced Width & Height Limits) 129 if (key.matches('m', .{})) use_mini_view = !use_mini_view; 130 }, 131 .winsize => |ws| try vx.resize(alloc, tty.anyWriter(), ws), 132 } 133 134 const win = vx.window(); 135 win.clear(); 136 137 const controls_win = win.child(.{ 138 .height = .{ .limit = 1 }, 139 }); 140 _ = try controls_win.print( 141 if (win.width >= 112) &.{ 142 .{ .text = "Controls:", .style = .{ .bold = true, .ul_style = .single } }, 143 .{ .text = " Exit: ctrl + c | Scroll: dpad | Quick Scroll: ctrl + dpad | Goto Side: shift + dpad | Zoom: z | Mini: m" }, 144 } else if (win.width >= 25) &.{ 145 .{ .text = "Controls:", .style = .{ .bold = true, .ul_style = .single } }, 146 .{ .text = " Win too small!" }, 147 } else &.{ 148 .{ .text = "" }, 149 }, 150 .{ .wrap = .none }, 151 ); 152 153 // Views require a Window to render to. 154 const map_win = if (use_mini_view) 155 win.child(.{ 156 .y_off = controls_win.height, 157 .border = .{ .where = .top }, 158 .width = .{ .limit = 45 }, 159 .height = .{ .limit = 15 }, 160 }) 161 else 162 win.child(.{ 163 .y_off = controls_win.height, 164 .border = .{ .where = .top }, 165 }); 166 167 // Clamp x and y 168 x = @min(x, map_width -| map_win.width); 169 y = @min(y, map_height -| map_win.height); 170 171 map_view.draw(map_win, .{ 172 .x_off = x, 173 .y_off = y, 174 }); 175 if (use_mini_view) { 176 _ = try win.printSegment( 177 .{ .text = "This is a mini portion of the View." }, 178 .{ .row_offset = 16, .col_offset = 5, .wrap = .word }, 179 ); 180 } 181 182 // Render the screen 183 try vx.render(writer); 184 try buffered_writer.flush(); 185 } 186} 187 188const sm_world_map = 189 \\ +NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN+ 190 \\ W................................................................................................E 191 \\ W................................................................................................E 192 \\ W............................ @:::::::::@ ..................... .............................E 193 \\ W..... . ..... ::: ...::::::: ........ ...... %@%...........:*%@ . ..............E 194 \\ W..@:::::::::::::::::::: ::: ::::@ @@ ..... %#%%%%%%%%%%%%...........................* .......E 195 \\ W ::::@::::::::::::: .. :: ... * ....... . %%% %%%%%%%%%%%%%..................... ..* .........E 196 \\ W .....@::::::::::::.=::::: ........... @% @. %% %%%-...................:%% @. ..........E 197 \\ W...... :::%@@:@:::::::::@ :-........... @%%%%%%%%%%%%%%%%........................ .. ..........E 198 \\ W......@::::@@@.=-:::::=: ............. %@%%@# %%%%%%%..%%%.........@............ @=............E 199 \\ W..... :::::::::::::: ................. %%% @ % ........................... . . .............E 200 \\ W..... #:::::::::::@ .................. @=====@ .........................@ .= ............E 201 \\ W...... :::::@ @ ................... ============== .... ..................... .. .............E 202 \\ W....... .::=.. :# ................. ================ ...... ............... .................E 203 \\ W......... ::::... @-............... ================- ....@ ...-... . ....@ .. ...............E 204 \\ W............. :=.. % ...............==================+ ......@. .... ... .. @ ..............E 205 \\ W............... ######@ ............ ========@=@@@======@........ @.... . .. ................E 206 \\ W................ ######### ................. ===========@............... .@ ..@ =..............E 207 \\ W............... #############= ............. ========== ................. . ..*. . --- .......E 208 \\ W................ ###@@@#@#####%.............. ======== .................... @.@.... .*-=- ......E 209 \\ W................. ##@##@@#@### .............. ========-. -...................... -- + ........E 210 \\ W................... ##########................=======% *= .................... @-------- .......E 211 \\ W................... #######* ................-====== .-+....................#-@--@-@#--- ......E 212 \\ W................... ####### .................. ====- ........................@----------- ......E 213 \\ W................... ###### ....................@-* .......................... = ----:..... .E 214 \\ W....................####@ ......................................................... - .... -@ E 215 \\ W.................... ###.................................................................%-@ ...E 216 \\ W..................... #@........................................................................E 217 \\ W...................... ......................................................................E 218 \\ +SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ 219 \\ 220; 221const sm_map_width = mapWidth: { 222 @setEvalBranchQuota(100_000); 223 break :mapWidth mem.indexOfScalar(u8, sm_world_map, '\n').?; 224}; 225const sm_map_height = mapHeight: { 226 @setEvalBranchQuota(100_000); 227 break :mapHeight mem.count(u8, sm_world_map, "\n"); 228}; 229 230const lg_world_map = 231 \\ +NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN+ 232 \\ W...........................................................................................................................................................................................................................................................................................................................................................................................................E 233 \\ W...........................................................................................................................................................................................................................................................................................................................................................................................................E 234 \\ W...........................................................................................................................................................................................................................................................................................................................................................................................................E 235 \\ W...........................................................................................................................................................................................................................................................................................................................................................................................................E 236 \\ W...........................................................................................................................................................................................................................................................................................................................................................................................................E 237 \\ W...........................................................................................................................................................................................................................................................................................................................................................................................................E 238 \\ W...........................................................................................................................................................................................................................................................................................................................................................................................................E 239 \\ W...........................................................................................................................................................................................................................................................................................................................................................................................................E 240 \\ W........................................................................................................................................................ ............................................................................................................................................................................................................................................E 241 \\ W................................................................................................................................ ................................................................................................................................................................................................................................E 242 \\ W........................................................................................................................... @@@@@@@@%-::::---::::::=#@@@@.... ................................................................................................................................................................................................................................E 243 \\ W..................................................................................................................... .@@@@:::::::::::::::::::::::::::::::::::::-@@ ...............................................................................................................................................................................................................................E 244 \\ W.................................................................................................................... %@@@#:::::::::::::::::::::::::::::::::::::@@- ...................................................................................... .........................................................................................................................E 245 \\ W................................................................................................................... @:::::::::::::::::::::::::::::::::::::::::@ .................................................................................... .@....@@: .......................................................................................................................E 246 \\ W............................................................................................... .... +:::::::::::::::::::::::::::::::::- ........................................................................... .. #@-.................@ ......................................................................................................E 247 \\ W......................................................................................... +@@@@@@@@@@ .... @:::::::::::::::::::::::::::::::@: ........................................................................ @@...........................%%%%*....%%@@= ..................................................................................E 248 \\ W........................ ... .................... @:::::::::::::@ ........ @::::::::::::::::::::::::::::+% ............................... ....................... @%%%%@@@%%%............................................-@@ %@@*******@@ .. ............................................................E 249 \\ W................... *@@#+++++++++@@%=== ======== ... @@::@ +::::::::::::::::-@ ....... *:::::::::::::::::::::::::::%@ ............................. %@@@@@= .. :@%%%%%%%%%%#.........................................................................+@= ................................................E 250 \\ W................ :@%=:::::::::::::::::::::::%%%-.:::::::::::::+%@@ =:::::--:::::@##%%::::::::@ ..... @:::::::::::::::::::::::%@+ ............................ @@%#%%%%%%%%%%#@@* +***@@%%%%%%%%%%%%%##..........................................................................................-%@@@@@+ .........................................E 251 \\ W............. .*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::%@@@=:::::::::::::::@@ @::::::::@ .... @:::::::::::::::::::@@. ...................... @%%%%%%%%%%%%%%%#%%%%%%%@@%%%%@@@%%%%%%%%%#%%%%%%%%%%%%=.....................................................................................................@@@%. ....................................E 252 \\ W............ =#-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::=@* @+:::::=:::+@ ... @::::::::::::::::@. @@@@@%%@@@ ................... @@%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%%%%%%%............................................................................................................@@@ ...................................E 253 \\ W......... *::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::@ *%::::::::::@ @@ ... *::::::::::@@@ ... %%%%%%%%@ ................ @@%%%%%##%* -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%......................................................................................................* @...@ ...................................E 254 \\ W....... =@@=::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::@ =@@@@ @:::::=@ ..... *:::::::::@ ....... :=@%%@ ............. %@%%%%%%%%%@: @%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#=.......................................................................................................@ ...................................E 255 \\ W...... @:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::@: @:::-@ @@* ........ @::::::@- .............. ............... @@@%%%%%%%%%%@ @%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%.....................................................................................................+@@ .......................................E 256 \\ W..... :@::::::::::::::::#%*::::::::::::::::::::::::::::::::::::::::::::::::::::@ ...... @:::::::@ .......... ..@:@: .............................. .... *@%%%%%%%%%%%@* +@%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%....................................................................................@ .@.=@.........@ .........................................E 257 \\ W.... @::::::::::=%@@ #%:::::::::::::::::::::::::::::::::::::::::::::- ........ @::::::::@:@=::@ ........... ................................ -@@ .. @%%%@@%%%%%%%=# @%%%%%%%%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%.........................................................................%@@@@@####@# +....#% ............................................E 258 \\ W. -@-:::*@- .. @::::::::::::::::::::::::::::::::::::::::::::@+ ..... @:::::::::::::::.- ................................................... @%%%@% ... @%%%@# #@%%% : : - %= :: : +%%%%%%%%%%%%%%%%%%%%%%.......................................................................-. @.....@ ...............................................E 259 \\ W @:::::%@ ............. ::::::::::::::::::::::::::::::::::::::::::::::::%+ +@:::::::::::::::::@ ............................................... %@%%%= ... %@ @%%%@ @%%%%% %. . - : . . +%%%%%%%%%%%%%%%#*%##%-.......................................................................:* ..... @......@: ..............................................E 260 \\ W@::::+@ .................. ::::::::::::::::::::::::::::::::::::::::::::::::::.+@ @*::::::::::::::::::::@ ........................................... :@@ @%%@# . #%%- @@@%%%%%% . . - # : . *#%%%%%%%%%%%#...............................................................................-@%% .... @........ ..............................................E 261 \\ W ...................... :::::::::::::::::::::::::::::::::::::::::::::::::::-. @::::::::::::::::::::::::* ........................................... @%%%@ @%%%@ @@@%%%%%%%%%%%%%%%%%%% @. . - : *#. *%%%%%%%%%%%%%#.........................................................................................@ .... @.....% ..............................................E 262 \\ W.. ......................... ::::::::::@:@:@@@:%@@%%@@@@@=@:::::::::::::::::::::= #=:::::::::::::::::::::::@ ........................................... :@%%%@ #%%%%%@ @@%%%%%%%%%%%%%%%%%%%%%% % % . .* += *%: -%%%%%%%%%#%............................................................................................@ ... +@..# ..............................................E 263 \\ W............................... .@.::::::::@#@.@+@@%@*@:%@:@@#@:::::::::::::::::::::::::::::::::::::::::::::::::@ ........................................... @@@ @@%@@@@ @@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%...............................................................................................@- .... @ ..............................................E 264 \\ W............................... @::::::::::@@@:@+@%%@%@:%@:@@@@:::::::::::::::::::::::::::::::::::::::%@@ @:::::@ ........................................... @@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%.................................................................................................@ ..... ...............................................E 265 \\ W............................... @:::::::::@=@:@*@#%@+@:%@:@@=@::::::::::::::::::::::::::::::::::::::*@ @::::::* ................................................ .@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##%##%%%%%%%%%%%%%.............................................................................................@@=.-: .........................................................E 266 \\ W............................... @:::::::::::::::::::::::::::.::::::::::::::::::::::::::::::::::::::. @@@:@-:+= ................................................ @%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%#.......*%##%%%%%%%#%...........................................................................................- @.@ .........................................................E 267 \\ W.............................. @::::::::.:@@::@@:@@+@@.@@@:@*:@@*:@@*:::::::::::::::::::::::::::::::::@ ............................................. . @%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%#............%%%%%%%%%%..............................@@.+@-@.@.@@@................................................@ .....................................................E 268 \\ W............................ -=:::::::::::@@*:@@*@@+@::@:@:@*@@=@:@@@::::::::::::::::::::::::::::::@@@ ..................................................... @%%%%%%%%%#%%%%%%@-@@%%%#%%%%%%%%%%%%%%%%%%%%##%#.........%#%%%%%%%%%=...........................@@=.@@..@.@.@...............................................@ *@@ ....................................................E 269 \\ W........................... @:::::::::::::@=@:@@@%@+@@.@@@:@*@@:::@.@:::::::::::::::::::::@@# :%@ ...................................................... @%%%%%%%%%%%%%@@@@@- *@%#@- .@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%........#%%%%%%%%%%..........................*@@@.:*@.@.@+@..............................................@ =....# ....................................................E 270 \\ W.......................... @:::::::::::::+@@@:@=@%@+@::@.@:@*#@=@:@@@:::::::::::::::::::.@ ........................................................ @%%%%%%%%%%%%%%@ #@%%@@ .@%%%%%%%%%%%%%%%#%%%%%%%%%%..........%%%%%%%#%=.........................@@=@.@@@.@.@.@............................................@ . =..++ .....................................................E 271 \\ W......................... @::::::::::::::-=:=:=:--=:==:=:=:=::*@::=:=::::::::::::::::@# ................................................................. @%%%%%%%%%%%@@- .... .@@%%@* @%%%%@@@***%%%#......................%%%%%%%%%..................................................................................% ... .....................................................E 272 \\ W......................... @.:::::::::::::::::::::::::::::::::::::::::::::::::::::::-% ................................................................... @%%%%%%%%%%%@ ....... @%@ @%%#@ -...............................#%%%%#.........................................................................% #*@@....+ ..... ..@ .....................................................E 273 \\ W......................... @::::::::::::::::::::::::::::::::::::::::::::::::::::::@ ....................................................................... @%%%%%%%%%@: @%%%%@ :%%% .@.............................................................................................................@ @....@ ... ...@ .....................................................E 274 \\ W.......................... @:::::::::::::::::::::::::::::::::::::::::::::::::::::- .......................................................................... ==-@@@@@ .@@+--*#####@# @%@ @@@ @................................................................................................................= @... +...@ .....................................................E 275 \\ W.......................... @::::::::::::::::::::::::::::::::::::::::::::::::::::.@ ........................................................................... %@@@@@@=-============@ . @+.=.....................................................................................................@ #..@ @@%....@ .....................................................E 276 \\ W.......................... =@::::::::::::::::::::::::::::::::::::::::::::::::::@ ........................................................................... @=====================@ .. ...... @......................................................................................................@ +- @.....@ .....................................................E 277 \\ W........................... *::::::::::::::::::::::::::::::::::::::::::::::@= ............................................................................ @-======================-@+.. ... @.......................................................................................................@ .@...%*+ .......................................................E 278 \\ W............................ *:::::::::::::::::::::::::::::::::::::::::::@ ............................................................................. :*-============================-@:. +====-@@@@@@@@* %.........................................................................................................@ .. @..-@ @@ .........................................................E 279 \\ W............................ @:::@@::::::::::::::::::::::::::::-*=:::::=. ............................................................................... @==================================--===============-@#..........................................................................................................- .. *@ @.@ .........................................................E 280 \\ W............................. @:@ @:::::::::::::::::::.@...... #@::: ............................................................................. ##=====================================================@ *................- #.....................................................................................= ... :.. .........................................................E 281 \\ W.............................. @:@ @::::::::::::::::@ :-:: ............................................................................ @@-======================================================% -...............@ @..................................................................................+. ... ............................................................E 282 \\ W.............................. @::@ %::::::::::::::+ ........... @.: .......................................................................... @=========================================================-@ %.................@# @.:@@:...........................................................................@ ...... ..............................................................E 283 \\ W.............................. @:.- *-:::::::::::.@ ............ .@ ......................................................................... @============================================================-= *+.................@ . ==@@......................................................................:. .........................................................................E 284 \\ W............................... =@:+% @::::::::::.@ ........... ........................................................................ @-============================================================-@. @................:%%:..:@ :+-...........................................................% .........................................................................E 285 \\ W................................ =.@ -@::::::::.% ..... -@::::*@@ .................................................................... #-===============================================================:@ @:........................+ .. %........................................................@% ...........................................................................E 286 \\ W................................. =::::::::.@ ... #@ @: -@:::@@: ............................................................. @=================================================================% @........................@ ...... @ .....................-@@-@.........................** ............................................................................E 287 \\ W....................................... @:::::::::.@ #::% *:::=: ........................................................... *-=================================================================- @.......................@ ........ ...................@ @..................@ -@@ ....... ....................................................................E 288 \\ W....................................... +@.:::::::::%@@@@@@:::@ ..... @::::@ .......................................................... @-=================================================================@. @....................@ ............ :@...............@ . :-...............- ........ ..................................................................E 289 \\ W........................................ -@::::::::::::::::@ ....... .-+@@-: ........................................................... :==================================================================-@ @.................@ ............. @..............@ .... *................+@ ......... @..@ ..................................................................E 290 \\ W.......................................... @@**+:.::::::::@ ......... ........................................................... @====================================================================-+ @.............@+ ............... :*..........*@ ....... +.................@ ........ +:..- .................................................................E 291 \\ W............................................. *%::::::::::@ ............................................................................. +-=====================================================================*@ #........-#@ .................. #........** ........ @..............- ....... @:..@# ................................................................E 292 \\ W.................................................... -@::::::::% ......... .............................................................. +-========================================================================% @...:@@ ...................... @.......@ ............. =.............+ ....... @@..# ...............................................................E 293 \\ W........................................................ @+::::@ ...... :+: ....................................................... @-========================================================================-@ =%- ....................... @......* ............... ..............@ ......... *@@ ...............................................................E 294 \\ W.......................................................... @:::@ ... @@%####@. ................................................... %+===================================@@=-@@=@@@-@@-@@@-@@@=================. .#@+-=@ ........................ @.....: ................ ..= @.......-= ........... ................................................................E 295 \\ W............................................................. -::+@ ###################@ ................................................... #-================================-@%%-@--@=@+@@=@-@-@+@-=========================@ .......................... @...@- ................ ..@ @...@@ ..................................................................................E 296 \\ W............................................................. -@@:+@@@#######################@ ................................................... *-================================@=@-@=-@=@+@@=@-=-@:@=========================@ ........................... @.% ................ ...@ @@: ........ ........................................................................E 297 \\ W............................................................... @%########################@ ............................................... --==============================*@*@-@--@=@+@@-@-@-@+@========================-* ............................. @+ ............. @...@ ......... : ......................................................................E 298 \\ W................................................................... =###########################@@* .............................................. @-================---========================================================@ ............................... *.- ........... %%...@ ......... #.@ ....................................................................E 299 \\ W....................................................................... .##############################+@ ............................................. @%=---=-*+--%@ @-====================================================-@ .................................. ........... @.@ @...@ ....... @#....-: ....................................................................E 300 \\ W...................................................................... @################################=@ ............................................... @-==============================================-@ .................................... .............. @..@ @..@ ... =@.....@ .. ..............................................................E 301 \\ W..................................................................... @##################################@ ................................................................... +============================================--* ......................................................... *...@ @.@ @........@ .............................................................E 302 \\ W.................................................................... @####################################@ .................................................................. *===========================================%# ............................................................ @..#@@ @............@ .++#@.@ .... ....................................................E 303 \\ W................................................................... @######################################@+ ............................................................. @==========================================-@ ............................................................... +....@ @..........@# *.....% .. ............................................E 304 \\ W................................................................... @#############################################%@+ ......................................................... @-========================================-@ .................................................................. @-...@- @.........+: @...*@ .. @---+: .......................................E 305 \\ W................................................................... @##################################################@@ ...................................................... =-=====================================-@ .................................................................... @....% @........@ @....# .... #+--+##---=@% .....................................E 306 \\ W................................................................... %##############%@@@#@@@#@%@%@@@#@%@@#################@. ..................................................... @-===================================-@ ........................................................................ %@..@ @@@@#@ .....+ ..... @+=-----------+@ ..................................E 307 \\ W................................................................... @###############@@###@#@#@%@%#@%#@@@@####################@= .................................................... @-==================================@ .......................................................................... @..@ .:@@@@ ...... @------------#@ .................................E 308 \\ W................................................................... +%################@@#@#@#@%@%#@%#@@@@#####################* ..................................................... :-=================================@ ............................................................................. *...:@@@@# ........... #-----------@ ................................E 309 \\ W.................................................................... @#############%@%@#@#@#@%@##@%#@%@@#####################@ ...................................................... @=================================@ .............................................................................. @........@# ...................... @------------@ ...............................E 310 \\ W..................................................................... #######################################################. ....................................................... @=================================@ .............................................................................. @@%.++@ ............... .. :+:@---@ @--*% ..............................E 311 \\ W..................................................................... @############@@#%@%%@%@@@#@@@#@#%@@%#@@##############% ........................................................ .*=================================== .................................................................................. .............. @%%@@ .............................E 312 \\ W....................................................................... @###########@@#%@@@@%@@##@#@#@#@%@@#@@@#############* ........................................................ %=================================-# .... ................................................................................................. %=@@@@= . :@ .............................E 313 \\ W........................................................................ @#########%@@@%@@@@%@@@%@@@#@#@%###@%@###########@ ........................................................ @-=================================% ... :*@ ........................................................................................ @------+ . -=-@ .... ...............................E 314 \\ W......................................................................... @########@@@@%@@@@%@@#%@#@#@#@%@@%@@@########### ......................................................... @===================================% @-=+ ....................................................................................... #@@@@%@--------: @--+ .....................................E 315 \\ W.......................................................................... @############################%#################+ ......................................................... ===================================-@ =@@===+ .................................................................................... %=--------------= .=---=+ ....................................E 316 \\ W........................................................................... @@#########################################** ......................................................... ==================================-@ @-======@ ................................................................................... %+------------------*@= @-----# ....................................E 317 \\ W.............................................................................. @#######################################@ ......................................................... +===============================-@ =======% ................................................................................. .@-----------------------------# ....................................E 318 \\ W................................................................................. =#######################################@ ......................................................... -+============================-@ . @=====+ ................................................................................ :@--------------------------------%* ..................................E 319 \\ W................................................................................. @#####################################@ ........................................................... --==========================@ .. @====-@ .............................................................................. @--------------------------------------@ .................................E 320 \\ W.................................................................................. @#####################################@ ............................................................. %==========================@ ... @-=====@ ............................................................................. @-----------------------------------------% ................................E 321 \\ W.................................................................................. @*#################################%@ .............................................................. %=========================@ ... +-====* ............................................................................. @-----+@@-@*@@-@@@*@@@*@@#-@@=-@--@-*@@-----=@ ...............................E 322 \\ W.................................................................................. :*############################+@* ................................................................ %========================-@ ... @-==-@ .............................................................................. *-----@+@-@*@@+@---#@-*@*@-@*#-@--@-@+@-------* ..............................E 323 \\ W.................................................................................. :*###########################@ ..................................................................... @-=======================* ..... @@-@ .............................................................................. *-----@-@-@*@@--@@-#@-*@%@-@=@-@--@-@-@-------@ ..............................E 324 \\ W.................................................................................. :*########################### ........................................................................ =+=====================@ ....... ............................................................................... @-----@#@+@#@@+@-@-#@-*@+@*@%@-@--@-@#@+------@ ..............................E 325 \\ W.................................................................................. :############################@ ........................................................................ #===================*. ................................................................................................ @---------------------------------------------= ...............................E 326 \\ W.................................................................................. %##########################@ ......................................................................... +================-@ ................................................................................................ =--------------------------------------------# ...............................E 327 \\ W.................................................................................. @#########################@ ........................................................................... @================@ .................................................................................................. @-------------------------------------------@ ................................E 328 \\ W................................................................................... @#######################%* ............................................................................. @-===========-@: .................................................................................................... *----------------------------------------+@ .................................E 329 \\ W................................................................................... @#######################* ............................................................................... *:=========-@* ...................................................................................................... *----% @--------------------@ .................. ..........E 330 \\ W................................................................................... @#####################%= ................................................................................ .@-=-#%%%%@ ........................................................................................................ :*... @------------------@ .................. @@ ..........E 331 \\ W................................................................................... @####################@ ................................................................................. ........................................................................................................... ........... @--------------@ .................... @--@ .........E 332 \\ W................................................................................... %#################### ..................................................................................... ...................................................................................................................................... @-----------=. ..................... @---@: .......E 333 \\ W................................................................................... @##################% ................................................................................................................................................................................................................................... .%=---------@ .................... @#-----@ .......E 334 \\ W.................................................................................... @##############%@- .................................................................................................................................................................................................................................... @@@ .................. ==----=@ .......E 335 \\ W.................................................................................... @#############@ ......................................................................................................................................................................................................................................... ................... @+----@ .........E 336 \\ W..................................................................................... @############ .................................................................................................................................................................................................................................................................... %@----*@: .............E 337 \\ W...................................................................................... %##########= ................................................................................................................................................................................................................................................................. @-----@ ...............E 338 \\ W...................................................................................... @#########@ ................................................................................................................................................................................................................................................................. =@-----#@# ..................E 339 \\ W....................................................................................... %#######@ ................................................................................................................................................................................................................................................................. %--+@#% ....................E 340 \\ W....................................................................................... @#######@@. ................................................................................................................................................................................................................................................................. ........................E 341 \\ W........................................................................................ @########@ .................................................................................................................................................................................................................................................................. .............................E 342 \\ W......................................................................................... @#####%. ....................................................................................................................................................................................................................................................................................................E 343 \\ W.......................................................................................... @#####+ ....................................................................................................................................................................................................................................................................................................E 344 \\ W........................................................................................... @#####@ .................................................................................................................................................................................................................................................................................................E 345 \\ W............................................................................................ +@@@##%@# ...............................................................................................................................................................................................................................................................................................E 346 \\ W............................................................................................. +@@@@@ ...............................................................................................................................................................................................................................................................................................E 347 \\ W................................................................................................. ................................................................................................................................................................................................................................................................................................E 348 \\ W...........................................................................................................................................................................................................................................................................................................................................................................................................E 349 \\ W...........................................................................................................................................................................................................................................................................................................................................................................................................E 350 \\ W...........................................................................................................................................................................................................................................................................................................................................................................................................E 351 \\ +SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ 352 \\ 353; 354const lg_map_width = mapWidth: { 355 @setEvalBranchQuota(100_000); 356 break :mapWidth mem.indexOfScalar(u8, lg_world_map, '\n').?; 357}; 358const lg_map_height = mapHeight: { 359 @setEvalBranchQuota(100_000); 360 break :mapHeight mem.count(u8, lg_world_map, "\n"); 361};