Edit in JSFiddle

```/*
simplification of a larger scheme to generate life zones for a game
*/

'use strict';
var grid = [];
var _width = 75;
var _height = 75;
var geo = {};

window.run = function (land) {
var h = height();
var grid = rain(h, heat());
draw(document.getElementById("rain"), grid);
draw(document.getElementById("height"), h);
}

function draw(b, grid) {
b.innerHTML = '';
b.style.display = 'inline-block';
for (var x = 0; x < grid.length; x++) {
var e = document.createElement('div');
for (var y = 0; y < grid[0].length; y++) {
var d = document.createElement('div');
var c = ~~ (grid[x][y] * 255);
d.style.backgroundColor = 'rgb(' + c + ',' + c + ',' + c + ')';
d.innerHtml = '&nbps;'
d.style.width = '5px';
d.style.height = '5px';
d.style.float = 'left'
e.appendChild(d);
}
b.appendChild(e);
}
}

function heat() {
var n = noise();
var grid = [];
for (var x = 0; x < _width; x++) {
grid[x] = [];
for (var y = 0; y < _height; y++) {
var a = 1 - (Math.abs(_height / 2 - x) / (_height / 1.1));
grid[x][y] = a * n[x][y];
}
}
return grid; //normalizeHeat(grid);
}

function rain(h, t) {
var n = noise();
var dir = ((2 * Math.PI) / 360 * (Math.random() * 360))
var grid = [];
for (var x = 0; x < _width; x++) {
grid[x] = [];
for (var y = 0; y < _height; y++) {
var n1 = point(x, y, 2, dir);
var x1 = (n1.x >= 0 && n1.y >= 0 && n1.x < _width && n1.y < _height) ? h[n1.x][n1.y] : 0;

var x3 = h[x][y];

grid[x][y] = (x1 <= x3 && h[x][y] > 0.2)?(x3-x1)+t[x][y]:0.25;
grid[x][y] *= (n[x][y])
}
}
//return h;
return _normalize(grid);

function point(x, y, length, rad) {
return {
x: ~~ (x + (length * Math.sin(rad))),
y: ~~ (y + (length * Math.cos(rad)))
}
}
}

function height() {
var n = noise();
var grid = [];
for (var x = 0; x < r.length; x++) {
grid[x] = [];
for (var y = 0; y < r[x].length; y++) {
var rn = r[x][y] * n[x][y] * 1.3
grid[x][y] = (rn > 1) ? 1 : rn;
}
}

return grid; // normalizeHeight(grid);
}

function normalizeHeight(grid) {
var r = Math.random() * 0.6 + 1
for (var x = 0; x < grid.length; x++) {
for (var y = 0; y < grid[x].length; y++) {
//between -10000 and 9000
grid[x][y] = ~~ (((grid[x][y] * 19000) - 10000) * r)
}
}

return grid;
}

function normalizeRain(grid) {
var r = Math.random() * 0.2 + 0.8
for (var x = 0; x < grid.length; x++) {
for (var y = 0; y < grid[x].length; y++) {
//between 100 and 16000
grid[x][y] = ~~ (((grid[x][y] * 15900) + 100) * r)
}
}

return grid;
}

function normalizeHeat(grid) {
var r = Math.random() * 0.6 + 1
for (var x = 0; x < grid.length; x++) {
for (var y = 0; y < grid[x].length; y++) {
//between -30 and 50
grid[x][y] = ~~ (((grid[x][y] * 80) - 30) * r)
}
}

return grid;
}

function noise() {
var grid = [];
var reps = 1
var lvl = 0.0045;
var simplex = new SimplexNoise({
octaves: 20,
persistence: 0.4
});
for (var x = 0; x < _width; x++) {
grid[x] = [];
for (var y = 0; y < _height; y++) {
var fRds = _width / reps;
var fNX = x / fRds;
var fNY = y / fRds;
var fRdx = fNX * 2 * Math.PI;
var fRdy = fNY * 2 * Math.PI;
var a = fRds * Math.sin(fRdx);
var b = fRds * Math.cos(fRdx);
var c = fRds * Math.sin(fRdy);
var d = fRds * Math.cos(fRdy);
grid[x][y] = 1.1 * simplex.noise(a * lvl, b * lvl, c * lvl, d * lvl);
}
}

return grid;
}

var grid = [];
var _its = 2000;
var _life = 20;
var _edgex = _width * 0.15;
var _edgey = _height * 0.15;
var _blur1 = 0.85;
var _blur2 = 0.77;

for (var x = 0; x < _width; x++) {
grid[x] = [];
for (var y = 0; y < _height; y++) {
grid[x][y] = 0;
}
}

for (var i = 0; i < _its; i++) {
var x = ~~ (Math.random() * (_width - (_edgex * 2)) + _edgex);
var y = ~~ (Math.random() * (_height - (_edgey * 2)) + _edgey);

for (var j = 0; j < _life; j++) {
x += Math.round(Math.random() * 2 - 1);
y += Math.round(Math.random() * 2 - 1);

if (x < 1 || x > _width - 2 || y < 1 || y > _height - 2) continue;

var hood = _next(x, y);

for (var k = 0; k < hood.length; k++) {
if (grid[hood[k][0]][hood[k][1]] < grid[x][y]) {
x = hood[k][0];
y = hood[k][1];
continue;
}
}

grid[x][y]++;
}
}

return _normalize(grid);

function _range(min, max) {
return~~ ((max - min) * Math.random() + min);
}

function _next(x, y) {
var result = [];

for (var a = -1; a <= 1; a++) {
for (var b = -1; b <= 1; b++) {
if (a || b && (x + a >= 0 && x + a < _width && y + b >= 0 && y + b < _height)) {
result.push([x + a, y + b]);
}
}
}

return _shuffle(result);
};

function _shuffle(o) { //v1.0
for (var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
}

function _normalize(grid) {
var max = 0;
var min = 10000000;
for (var x = 0; x < grid.length; x++) {
for (var y = 0; y < grid[0].length; y++) {
if (x == 0 || x == _width - 1 || y == 0 || y == _height - 1) grid[x][y] *= 0.77;
else if (x == 1 || x == _width - 2 || y == 1 || y == _height - 2) grid[x][y] *= 0.85;
var g = grid[x][y];
if (g > max) max = g;
if (g < min) min = g;
}
}

for (var x = 0; x < grid.length; x++) {
for (var y = 0; y < grid[0].length; y++) {
grid[x][y] = (grid[x][y] - min) / (max - min);
}
}
return grid;
}
run();

function SimplexNoise(t){var e=t||{};e.rng=e.rng||Math,e.octaves=e.octaves||5,e.persistence=e.persistence||.2,e.level=t.level||.005,this.level=e.level;var n,r,o,i,s,a,f,h,l,u,c,M,v,p,g,d,m,b,q,S,w,x,N,k,D,G,R,j,y,T,z,A,B,C,E,F,H,I,J,K,L,O,P,Q,U,V,W,X,Y,Z,\$,_,te,ee,ne,re,oe,ie,se,ae,fe,he,le,ue,ce,Me,ve,pe=.5*(Math.sqrt(3)-1),ge=(3-Math.sqrt(3))/6,de=2*ge-1,me=1/3,be=1/6,qe=(Math.sqrt(5)-1)/4,Se=(5-Math.sqrt(5))/20,we=2*Se,xe=3*Se,Ne=4*Se-1,ke=[[1,1,0],[-1,1,0],[1,-1,0],[-1,-1,0],[1,0,1],[-1,0,1],[1,0,-1],[-1,0,-1],[0,1,1],[0,-1,1],[0,1,-1],[0,-1,-1]],De=[[0,1,1,1],[0,1,1,-1],[0,1,-1,1],[0,1,-1,-1],[0,-1,1,1],[0,-1,1,-1],[0,-1,-1,1],[0,-1,-1,-1],[1,0,1,1],[1,0,1,-1],[1,0,-1,1],[1,0,-1,-1],[-1,0,1,1],[-1,0,1,-1],[-1,0,-1,1],[-1,0,-1,-1],[1,1,0,1],[1,1,0,-1],[1,-1,0,1],[1,-1,0,-1],[-1,1,0,1],[-1,1,0,-1],[-1,-1,0,1],[-1,-1,0,-1],[1,1,1,0],[1,1,-1,0],[1,-1,1,0],[1,-1,-1,0],[-1,1,1,0],[-1,1,-1,0],[-1,-1,1,0],[-1,-1,-1,0]],Ge=[[0,1,2,3],[0,1,3,2],[0,0,0,0],[0,2,3,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,2,3,0],[0,2,1,3],[0,0,0,0],[0,3,1,2],[0,3,2,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,3,2,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,2,0,3],[0,0,0,0],[1,3,0,2],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,3,0,1],[2,3,1,0],[1,0,2,3],[1,0,3,2],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,0,3,1],[0,0,0,0],[2,1,3,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,0,1,3],[0,0,0,0],[0,0,0,0],[0,0,0,0],[3,0,1,2],[3,0,2,1],[0,0,0,0],[3,1,2,0],[2,1,0,3],[0,0,0,0],[0,0,0,0],[0,0,0,0],[3,1,0,2],[0,0,0,0],[3,2,0,1],[3,2,1,0]],Re=Math,je=1,ye=.5,Te=function(){var t,e;ce=[],Me=[],ve=0;for(var n=0;je>n;n++)t=Math.pow(2,n),e=Math.pow(ye,n),ve+=e,ce.push(t),Me.push(e);ve=1/ve},ze=function(t,e,n){return t[0]*e+t[1]*n},Ae=function(t,e,n,r){return t[0]*e+t[1]*n+t[2]*r},Be=function(t,e,n,r,o){return t[0]*e+t[1]*n+t[2]*r+t[3]*o},Ce=function(){var t,e=[];for(t=0;256>t;t++)e[t]=Math.floor(256*Re.random());for(n=[],t=0;512>t;t++)n[t]=e[255&t]},Ee=function(t,e){return h=(t+e)*pe,c=Math.floor(t+h),M=Math.floor(e+h),g=(c+M)*ge,d=t-(c-g),m=e-(M-g),d>m?(S=1,w=0):(S=0,w=1),A=d-S+ge,B=m-w+ge,F=d+de,H=m+de,X=255&c,Y=255&M,oe=.5-d*d-m*m,0>oe?o=0:(oe*=oe,_=n[X+n[Y]]%12,o=oe*oe*ze(ke[_],d,m)),ie=.5-A*A-B*B,0>ie?i=0:(ie*=ie,te=n[X+S+n[Y+w]]%12,i=ie*ie*ze(ke[te],A,B)),se=.5-F*F-H*H,0>se?s=0:(se*=se,ee=n[X+1+n[Y+1]]%12,s=se*se*ze(ke[ee],F,H)),70*(o+i+s)},Fe=function(t,e,r){return h=(t+e+r)*me,c=Math.floor(t+h),M=Math.floor(e+h),v=Math.floor(r+h),g=(c+M+v)*be,d=t-(c-g),m=e-(M-g),b=r-(v-g),d>=m?m>=b?(S=1,w=0,x=0,k=1,D=1,G=0):d>=b?(S=1,w=0,x=0,k=1,D=0,G=1):(S=0,w=0,x=1,k=1,D=0,G=1):b>m?(S=0,w=0,x=1,k=0,D=1,G=1):b>d?(S=0,w=1,x=0,k=0,D=1,G=1):(S=0,w=1,x=0,k=1,D=1,G=0),A=d-S+be,B=m-w+be,C=b-x+be,F=d-k+me,H=m-D+me,I=b-G+me,K=d-.5,L=m-.5,O=b-.5,X=255&c,Y=255&M,Z=255&v,oe=.6-d*d-m*m-b*b,0>oe?o=0:(oe*=oe,_=n[X+n[Y+n[Z]]]%12,o=oe*oe*Ae(ke[_],d,m,b)),ie=.6-A*A-B*B-C*C,0>ie?i=0:(ie*=ie,te=n[X+S+n[Y+w+n[Z+x]]]%12,i=ie*ie*Ae(ke[te],A,B,C)),se=.6-F*F-H*H-I*I,0>se?s=0:(se*=se,ee=n[X+k+n[Y+D+n[Z+G]]]%12,s=se*se*Ae(ke[ee],F,H,I)),ae=.6-K*K-L*L-O*O,0>ae?a=0:(ae*=ae,ne=n[X+1+n[Y+1+n[Z+1]]]%12,a=ae*ae*Ae(ke[ne],K,L,O)),32*(o+i+s+a)},He=function(t,e,r,he){return h=(t+e+r+he)*qe,c=Math.floor(t+h),M=Math.floor(e+h),v=Math.floor(r+h),p=Math.floor(he+h),g=(c+M+v+p)*Se,d=t-(c-g),m=e-(M-g),b=r-(v-g),q=he-(p-g),l=0,d>m&&(l=32),d>b&&(l|=16),m>b&&(l|=8),d>q&&(l|=4),m>q&&(l|=2),b>q&&(l|=1),u=Ge[l],S=u[0]>=3?1:0,w=u[1]>=3?1:0,x=u[2]>=3?1:0,N=u[3]>=3?1:0,k=u[0]>=2?1:0,D=u[1]>=2?1:0,G=u[2]>=2?1:0,R=u[3]>=2?1:0,j=u[0]>=1?1:0,y=u[1]>=1?1:0,T=u[2]>=1?1:0,z=u[3]>=1?1:0,A=d-S+Se,B=m-w+Se,C=b-x+Se,E=q-N+Se,F=d-k+we,H=m-D+we,I=b-G+we,J=q-R+we,K=d-j+xe,L=m-y+xe,O=b-T+xe,P=q-z+xe,Q=d+Ne,U=m+Ne,V=b+Ne,W=q+Ne,X=255&c,Y=255&M,Z=255&v,\$=255&p,oe=.6-d*d-m*m-b*b-q*q,0>oe?o=0:(oe*=oe,_=n[X+n[Y+n[Z+n[\$]]]]%32,o=oe*oe*Be(De[_],d,m,b,q)),ie=.6-A*A-B*B-C*C-E*E,0>ie?i=0:(ie*=ie,te=n[X+S+n[Y+w+n[Z+x+n[\$+N]]]]%32,i=ie*ie*Be(De[te],A,B,C,E)),se=.6-F*F-H*H-I*I-J*J,0>se?s=0:(se*=se,ee=n[X+k+n[Y+D+n[Z+G+n[\$+R]]]]%32,s=se*se*Be(De[ee],F,H,I,J)),ae=.6-K*K-L*L-O*O-P*P,0>ae?a=0:(ae*=ae,ne=n[X+j+n[Y+y+n[Z+T+n[\$+z]]]]%32,a=ae*ae*Be(De[ne],K,L,O,P)),fe=.6-Q*Q-U*U-V*V-W*W,0>fe?f=0:(fe*=fe,re=n[X+1+n[Y+1+n[Z+1+n[\$+1]]]]%32,f=fe*fe*Be(De[re],Q,U,V,W)),27*(o+i+s+a+f)};this.noise=function(t,e,n,o){for(he=0,r=0;je>r;r++)switch(le=ce[r],ue=Me[r],arguments.length){case 4:he+=ue*He(le*t,le*e,le*n,le*o);break;case 3:he+=ue*Fe(le*t,le*e,le*n);break;default:he+=ue*Ee(le*t,le*e)}return.5*(he*ve+1)},this.noiseDetail=function(t,e){je=t||je,ye=e||ye,Te()},this.setRng=function(t){Re=t,Ce()},this.toString=function(){return"[object SimplexNoise "+je+" "+ye+"]"},this.getGrid=function(t,e){var n=[];e=e||t;for(var r=0;t>r;r++){n[r]=[];for(var o=0;e>o;o++)n[r][o]=this.noise*this.level}},this.getTileableGrid=function(){},Ce(),this.setRng(e.rng),this.noiseDetail(e.octaves,e.persistence,e.level)}"undefined"!=typeof define&&define([],function(){"use strict";return SimplexNoise});```
```<button type="button" onclick="run(false)">Another one!</button>
<br>
<br>
<div id="rain"></div>
<br>
<div id="height"></div>```