View of passing landscape from a train window. Winter is coming: wait for lakes, the night and more.
for(_='[fB40@sBl$](k$ckjfor(``f=_0)+K6^iJa[wt]H0*Gf/1e4Fb[~~lE]+B[D/LZ30Y(7-i)/X0,Wo/2Vi*VWU--;)T]=S&&R);QMath.P),OPrandom()N*N,0%",e+2GN+"%)"],80"10*Psin(f*Pcos(fs[lekjMoNjWWM,o$ySC(r/l%1*E=u=a[cnokO[dwak"#eee",s[gbAS[i]w=s[caLikWWWoOr=M;0<(r-=s=u[gCtk"2d"i=-1;6>i++;),I-d*b-NZ *(1-F="hsl("+[200function(l){Ow[aCok1e4;fTc[tnakWo+IOc[slk1,-1)Q)d=o/8G(5K5*20K1G@0)O,oWh1,mO)t=WA=`f in l)selfB[0]+f[3D6]D16]]Sf},A(aOA(cOC=return E]-]++1]},setInterval(if(!t)`e=5+@n=.6h+l"5e*=4,m+1{_bBSN;`M=H+@G(C=i*i/(J?8:2)OL=8GX(o=a[hg]Og=N,pu[hgSu[wtS6WOA(120)Wm1,hO!iRw,f=Y0;fT`r=Y;f/9<rTjY+r))OY+rO.9,.9Q`a),f=,80>eRNQ_g*bOsp,Y*N*o/b-2GV,F*V-VWV+N*VON*V)/4Qif(i){`u[wtSM,I=V+UJ||(I=.2ZYKg/2<NRJRsp,r-NZ *3-3Z,6Z,YZQ_n>.5Rl=Z,NQ`M,5r QWoO$kOs[gbCpS"source-atop",n,l,OX9}}`ca,-t*C,0OI=V-Un<.5Rb>.8Ri%2R(,ca,W2*UH,I,WI,H,IOQcBlckH*@-H*++t/1WWH,oOt%=@0},16)';g=/[-N-ZD-HJK_`jk$@B]/.exec(_);)with(_.split(g))_=join(shift());eval(_)
Zm9yKF89J1tmQjQwQHNCbCRdKGskY2tqZm9yKGBgZj1fMCkrSzZeaUphW3d0XUgwKkdmLzFlNEZiW35+bEVdK0JbRC9MWjMwWSg3LWkpL1gwLFdvLzJWaSpWV1UtLTspVF09UyYmUik7UU1hdGguUCksT1ByYW5kb20oKU4qTiwfMCUiLGUrMkdOKyIlKSJdLB44MB8iMTAeHSpQc2luKGYcKlBjb3MoZhtzW2xlaxpqTR9vH04ZaldXTSxvGCR5UxdDKHIvFmwlMSpFFT11PWFbY25va08UW2R3YWsTFyIjZWVlIiwSc1tnYkFTEVtpXRB3PXNbY2FMaWtXV1cPb09yPU07MDwoci09DnM9dVtnQ3RrIjJkIgxpPS0xOzY+aSsrOykLLEktZCpiEC1OWgkqKDEtRgg9ImhzbCgiK1syMDAHZnVuY3Rpb24obCl7Bk93W2FDb2sFMWU0O2ZUBGNbdG5ha1dvK0lPY1tzbGsxLC0xKQNRKWQ9by84RygWNUs1KhYyMEsxRxZAMClPAiwXD28FV2gFMSxtTxgpAXQ9V0E9BmBmIGluIGwpc2VsZkJbMF0rZlszRDZdRDE2XV1TZn0sQShhT0EoY09DPQZyZXR1cm4gRV0tFV0rFSsxXX0sc2V0SW50ZXJ2YWwoBmlmKCF0KWBlPTUrQB9uPS42H2gHKx1sBx8iNR5lKj00LG0HKzEdC3tfBGJCU047YE09SCtARyhDED1pKmkvKEo/ODoyKU9MPThHWChvPWFbaGddT2c9TixwFHVbaGdTdVt3dFM2VwxPQSgPMTIwKQVXbQUxLGhPFyFpUncsZj1ZMDtmVGByPVk7Zi85PHJUalkrchspGxwpT1krchxPLjksLjlRYGEQFAwpASwSZj0EGSw4MD5lUk5RXwQRZypiEAhPcxNwLFkqTipvL2IQLTJHVixGKlYtVldWK04qVghPTipWCCkvNFFpZihpKXtgdVt3dFNNLEk9VitVSnx8KEk9Di4yWgIWWUtnLzI8TlJKUnMTcCxyLU5aCSozLTNaLDZaLFlaUV9uPi41UgRsPRIZWixOUWAaTSwONQIacglRGldvTyRrT3NbZ2JDcFMic291cmNlLWF0b3AiLBFuLBdsLBhPEVg5AX19YAtjE2EQLC10KkMQLDBPST1WLVVuPC41UmIQPi44UmklMlIoAyxjE2EsVzIqVUgsSSxXSSxILElPA1FjQmxja0gqQC1IKisrdC8xV1dILG9PdCU9QDB9LDE2KSc7Zz0vWwEtH04tWkQtSEpLX2BqayRAQl0vLmV4ZWMoXyk7KXdpdGgoXy5zcGxpdChnKSlfPWpvaW4oc2hpZnQoKSk7ZXZhbChfKQ==
t = 0,
// hash function
H = function(l) {
for(f in l) self[f[0]+f[3]+[f[6]]+[f[16]]]=f
},
H(a), H(c),
// linear interpolation of heightmap
N = function(l) {
return b[~~l] -l%1 * b[~~l] + l%1 * b[~~l+1]
},
setInterval(function(l) {
if ( !t )
for (
// random colors
e = 5+40 * Math.random(),
n = .6 * Math.random(),
h = "hsl(" + [200 + 80 * Math.random(), "100%", e + 20 * Math.random() + "%)"],
l = "hsl(" + [200 * Math.random(), "50%", e+20 * Math.random()+"%)"],
e *= 4,
m = "hsl(" + [200 + 180 * Math.random(), "100%", e + 20 * Math.random() + "%)"],
i = -1; 6 > i++;) {
// heightmap values for layer
for (f = 1e4; f--;) b[f] = Math.random();
// setup layer and draw sprite (used for clouds and trees)
for (
M = a[wt] + 400 * (N[i] = i * i / (6 ^ i ? 8 : 2)),
S = 80 * (7 - i) / (o = a[hg]),
g = Math.random(),
Z = z = a[cno](),
z[hg] = z[wt] = 60,
s = z[gCt]("2d"),
H(w = s[caLi](0, 0, 0, 120)),
w[aCo](0, m),
w[aCo](1, h),
s[fly] = !i&&w,
f = 300; f--;)
for (x = 30; f / 9 < x--;)
s[flc](30 + x * Math.cos(f) * Math.cos(f * Math.sin(f)), 30 + x * Math.sin(f), .9, .9);
// stars
for (
a[i] = z = a[cno](),
s = z[gCt]("2d"),
s[fly] = w = s[caLi](0, 0, 0, o),
w[aCo](0, h),
w[aCo](1, m),
s[flc](0, 0, M, o),
s[fly] = "#eee", f = 1e4; f--;)
s[flc]( M * Math.random(), o*Math.random(), Math.random(), 80>e && Math.random() );
// clouds
for (
f = 1e4; f--;)
s[gbA] = g * b[i] * (1 - f / 1e4),
s[dwa](Z, 30 * Math.random() * o / b[i] - 20 * o / 2, f / 1e4 * o / 2 - o / 20, o / 2 + Math.random() * o / 2 * (1 - f / 1e4), Math.random() * o / 2 * (1 - f / 1e4) / 4);
if (i) {
// trees
for (
z[wt] = M,
I = o / 2 + i * o / 20,
6 ^ i || (I = o),
x = M; 0 < (x -= .2 / S );)
W = o/80 * (N(x / 50) + 5 * N(x / 200) + 10 * N(x / 400)),
N(x / 300) + g/2 < Math.random()
&& 6 ^ i
&& s[dwa](Z, x - Math.random() / S, I - W * b[i] - Math.random() / S*3 - 3/S , 6 / S, 30 / S);
// snow
for(f=n>.5&&1e4;f--;)
l = s[fly] = "#eee",
s[flc]( M * Math.random(), o*Math.random(), Math.random()/S, Math.random() );
// height map
for (
s[le](M, o),
x = M; 0 < (x -= 5);)
W = o/80 * (N(x / 50) + 5 * N(x / 200) + 10 * N(x / 400)),
s[le](x, I - W * b[i] - Math.random() / S);
s[le](0, o),
s[fl](),
s[gbCp] = "source-atop",
s[gbA] = n,
s[fly] = l,
s[flc](0, 0, M, o),
s[gbA] = (7-i)/9,
s[fly] = w = s[caLi](0, 0, 0, o),
w[aCo](0, h),
w[aCo](1, m),
s[flc](0, 0, M, o)
}
}
// draw layers
for (i = -1; 6 > i++;)
c[dwa](a[i], -t * N[i], 0),
// reflections (only for landscape without snow)
I = o / 2 - i * o / 20,
n < .5 && b[i] > .8 && i%2 && (
c[tna](0, o+I),
c[sl](1, -1),
c[dwa](a, 0, 2*i * o / 20, a[wt], I, 0, I, a[wt], I),
c[tna](0, o+I),
c[sl](1, -1)
);
// tunnel
c[flc]( a[wt]*40-a[wt]*++t/10,0, a[wt], o),
t %= 400
}, 16)