--- /dev/null
+$$$;$X#X$;$$$;;;$;;;$X#X$:::$X#X$;;;$$X$$:::$$X$$$$$$$$$$;;;$$$;$X#X$:::$X#X$;;;$$$$$;;;$$X$$$X$
+;$;;;$X$;;$$$;;$$$;;$X##X$:;$X##X$$$$$$$;::;$X$;;;;$$$;;;;;$XX$;$XXX$:.:;$X$;:::::;;;;::;$$$$$XX
+;;;:;$X$$;$$$;$$$;;$XX###X$$XX###XXXX$;;;;;;$$$$$;;;$;;;$$XX##X$$$X$$;;;$$$$$;::::;;$;::;;$;$$XX
+;;;:;$$$$$$;;;$$;:;$$XXXXX$$$XXXXXXX$;::;$$$;;$X$;;;;;;;$XXXXXX$$;$$$;$$$;;$$$;:::;$$$;:;$;:;$$$
+$$$;$$X$$$$$$$X$$;;;$$$$$$$$$$$$$$X$$:::$X#X$;$$$;;;$;;;$$X$$$X$$;$$$;$$$;;;$$$$$$$$$;;;$$$;$$$;
+XX$$$XX;;;;$$$XX$;:::::;;;;;;;;;;;$$;::$X#@#X$$$;:;$$$::;$$;:;$$$;$$$;$$;::;;;$XX$$;::::;$$$$$;:
+##X$XX#$$;;;$$X$$;:.::::;;;:;;;;$$$;;;$X##@##X$$$;;;$$;:;;$:::;$X$$$XXXX$;;;$$X##X$::.::;;;;$;::
+X$;;$X#X$;::;$$;;::::;;;;$;;;$$;$$;:;$$XXXXXX$$;$$;:;;;;;$X$::;$$$$$$X#X$;;$$$XXX$$;:::;;:;;;:.:
+$;;;$X#X$:::$$X$$;;;$$$;$$$;$$$;$$$;$$X$$$$$$;;;$$$;$$$;$X#X$;;;$;;;$X#X$;;;$$X$$;$$$;$$$;$$$:::
+;::;$XX$;::;$XX$$$$$XX$;$$$;$$;::;$$XX$;:::::::::;;$$X$;;$##X$;;;;::;$$;::::;;$$;;$XX$XX$$$X$;:;
+;:;$XX$;;:;;XXX;$$XX##X$XXX$X$;:::$X##$::...:::.::;;XXX;;;$X#XX$$;::;;;::.::;;$$$;$X####X$;;$;$$
+;:;$$$;;;$;;$$;;;$XXXXX$$$$$$$;::;$$XX$;::..:;;::::;$XX$;::$XXX$$$;:;$;::;;;;$X$$$$$X##X$;::;$$$
+$;;;$;;;$$$;$$$;$$X$$$$$$$$$$$$$$$$$$$$$$;;;$$X$$;;;$X#X$:::$$X$$;;;$$$;$$$;$$X$$;;;$X#X$:::$$X$
+$;:;;::;$$;;;$$$$X$;;;:::::::;$$X$$;::;$$$$$$XXXX$;;;$#X$;::;$$;:::;$$$$$X$;$$$;;;:::$X$;::;XXX;
+X$$;;:;;$;;:;;;$XX$;;;:.:::.::$X#X$::::;$$XXXX###X;:;;XXX;::;;$::.:$XX$;$$;;$$X$$;:.::$;;::$###$
+$$X$;;;$$;::;;:;$$$;;$;::;:::;$XX$$;::::;$XX$;$XX$;:;;$X$;::;$X$:::$$$$;;;:;$$X$$$;::;$$;::;X##$
+$$X$$;$$$;;;$;;;$$$;$$$;$$$;$$X$$$$$$;;;$X#X$;$$$;;;$$X$$:::$X#X$;;;$$$$$;;;$$X$$$$$$$X$$:::$X#X
+;;$$;;$$$;;$$$;:;$;;;$$$$X$$XX$;::;$$$;;$XX$;;;;;:;$XXX$;:.:;$##X$;;;;;$$$;;$$$;::;$$$XX$;::;$XX
+$;;;;;$XX$XXX$;:;;::;$XXX$XX##$::::;$$$$$$$;;:::;;X##XX$;:::;;$X#XX;;:;$$;;;$;;::::;$$XXX$$$$$XX
+$$;:;$$X$XXX$;::;:::;$XX$;;$XX$;::::;$X$;:::;:::;$##X$$;;::;;::$X##$;;;;;:;$$;::::::;$;;$X#X$;$$
+$;;;$$X$$$X$$;;;$;;;$X#X$;;;$$$$$;;;$X#X$;;;$;;;$X#X$;$$$;$$$:::$X#X$;$$$;$$$;;;$;;;$$$;$X#X$;;;
+:::$XXX;;;$$;;;$$$$$$X#X$;::;;$$X$$;$X#X$;;$$$;;$XX$;:$X$$XXX;:.:$XX$;$X$;$$$;;$X$;;$X$;$XX$;:::
+:.:$###$$;;;;;$XX$$$XX#XX;::;;$X##X$$$$$$;$$XXX$XX$;;;$$XX###$:.::$XX$X$$;$$$;$X#X$;$$X$XX#X$:..
+:.:;X#X$$$;:;$XX$;$$$;$X$;::;$$$X##$;:.:;;;;$XXX$$;;;$$;$X##X$:::;$$$$X$;:;$$;;$X$;:;$X$$XXX$;..
+$:::$$X$$;;;$X#X$;$$$;$$$:::$$$;$X#X$:::$$$;$$X$$;;;$$$;$X#X$;;;$$$$$$X$$;$$$;;;$;;;$$X$$$X$$:::
+$;::;$$;::;$X##$;;$$$;;$;:.:;$;;;$XX$;;$XX$;$$$;::::;$$;$XX;:::$$$;::;$X$$$$$:::;;:;$X$;;;;;:..;
+X;;;$$$::.;$##X;;;$XX$$$$;::;$$$$$$$$;$$###$XX$::..:;;$$XX$::::;$$;.:;XXX$$$$:::;;;;$$$:;;;::.::
+$;;$$$$;::;$X$;:;$$X$$$$$$::;$XX$;::;$$$X#XX$X$;:..:;;$$$$;::;;:;;;::$XX$;$$$:.:;$;:;$;;;$;::;::
+$;;;$$X$$;;;$;;;$$X$$$$$$;;;$X#X$:::$$$;$$X$$$X$$;;;$$$$$;;;$$$;$$$;$X#X$;$$$:::$$$;$$$;$$$;$$$;
+;:::;;$XX$;:::;$XXX;::;;;;;$$XX$:.:;XX$;;$$;;;XXX$$$$$;;;;;;$X$;$X$$$X#X$;$$$;:;$$$$XX$;$$$$$X$$
+;::;;:$X#X$:::;X##X;:.;$$;$$X$$::.:$###$$$$$$$X##XXXX$;:;;;;$$;;$$$;$X#XX$$$X$$$XXXX##X$XX$;$$XX
+;:;$;::$XX$;:;;$XXX;::;$$$$$$;:::::$X##X$;;$$$XXXXXX$;::;$$;;;::;$;:;$XX$$$$$XXX$$XXXXX$$$$;;;$$
+$;$$$:::$$X$$$$$$$X$$;$$$;$$$;;;$;;;$X#X$;;;$$$$$$X$$:::$$X$$;;;$$$;$$X$$;;;$$X$$$$$$$$$$$$$$$$$
+$$$$$;..:;$$$$;;:;$X$;;;;:;$$;;$$$;:;$X$;::;;;;;;;$$$;:;$XX$$$;;$XX$XXX;::.:;$$;;;;;;;:::;;$$$;;
+XXXXX$:.::;;$$;:::;$$;;:;;$XX$$$$;;;$$X$$;;;$;;;$$$$$;$$XXX$$;;;$$XX##X;:...;$$$$;;:;;:.::$$$;;;
+$XXX$$;:::::;$$;::;;;;::;$XX$$$$;:;$$$$X$;;$$$;;$X$;$$X$$$$;;;::;$XXXXX;:..:;$X$$$;:;$;::;$$;:;$
+$$X$$$$$$;;;$$X$$$$$$;;;$$X$$$X$$;$$$;$$$;;;$;;;$$$;$$X$$$$$$;;;$$X$$$X$$:::$$X$$;;;$$$;$X#X$;$$
+;$$;::;$$$;;$XX$$$$$$$;;$$$;:;$X$;$$;::;:::;;;:::;;;;$;;:;;$$$$$XXX;;;$XX$:;$X$;;;::;$$$X##X$;$$
+;;;::::;$$$$$;;;$$X$$;;;$;;:::;$$;$$$::.::;;$;:.::;;;::.::;;$$XX##X;;;$X#X$$XXX$$;::;$XX###X$;$$
+;;;;::::;$X$;:.:;$X$;:;$$;;;::;;;:$X$;..:;$$$$;::;;;;:..:;;:;$XXXXX$;;;$XX$$$$$$$$::;$XXXXX$;:;$
+$$X$$;;;$X#X$:::$X#X$;$$$;$$$;$$$;$$$:::$$X$$$$$$$X$$:::$$$;$$X$$$X$$;;;$$$$$$$$$;;;$$X$$$X$$;$$
+$XX$$$;;$X#X$;;;$X#X$;$$$;$X$$XXX$;;:.:;$X$;::;$XX#X$;;$XX$$$X$;;;$$$:::::;;;;;;;;;$XX$;;;XX$$$$
+XXX$$;;;$$X$$$$$$$X$$;$XX$$$$$X##$;::::;$$$::.;X####X$$X##X$XX$;;;X$$::.::;;;:;;$$$X#X$;;;XXX$;;
+$X$;;;::;$;;;$X$;;;$;:;$$$$;;;XXX;:::;;;;;$;::;$XXXX$;;$X$;;$$$;;$XX$::::;$$;:;$$$$XX$;;;$XX$;:;
+$$X$$;;;$$$;$X#X$;$$$;;;$$$$$$X$$:::$$X$$$X$$;;;$$X$$;;;$;;;$$$;$X#X$;;;$$X$$;;;$$$$$;;;$X#X$:::
+$XXX$$;;$X$$X##X$$$X$;;;;;$$$$$$;:.;$XX$$$XX$;:::;$$$;::;:::;$;;;$X$$;;$XXXX$;:;;;;;;:::;$XX$;::
+XXX$XX$;$$XX###$$$$$$$$$$$$$$;$;;::;$$X$$;$$$;::::$XX$;:;;;:;;::;$$$$$$X###XX$$;$$$;;:..;$XXX$;;
+$$;;$$;:;$$$XX$;;;;:;$$$$$$$;:;$;::;;;$$;::;;;;::;;$$$;:;$$;;:::;;;;$$$$X##X$$$$$$X$;:..;$XX$$;;
--- /dev/null
+#load "core/std"
+#load "modules/perlin/module"
+
+use package core
+perlin :: package perlin
+
+char_map :: (x: f64) -> u8 {
+ switch cast(i32) math.floor(x) {
+ case 0 do return #char " ";
+ case 1 do return #char ".";
+ case 2 do return #char ":";
+ case 3 do return #char ";";
+ case 4 do return #char "$";
+ case 5 do return #char "X";
+ case 6 do return #char "#";
+ case 7 do return #char "@";
+ case #default do return #char " ";
+ }
+}
+
+main :: (args) => {
+ for y: 48 {
+ for x: 96 {
+ fx := cast(f64) x;
+ fy := cast(f64) y;
+ n := perlin.noise(fx / 4, fy / 4, 0);
+ char_map(n * 4 + 4) |> print();
+ }
+ print("\n");
+ }
+}
+