createCanvas(windowWidth, windowHeight);
nNX = 90 ; nNY = 45 ; nN = nNX*nNY ; noSmooth()
nx = [] ; ny = [] ; nc = [] ; nv = [] ; ns = [] ; npop = [] ; npath = [] ; ncx = [] ; ncy = [] ; nox = []
nnam = [] ; nnamI = [] ; nnamY = [] ; nnamS = []
nx[i] = windowWidth*(ix-.75+random(0))/(nNX-2.5)
ny[i] = windowHeight*(iy-1+random(0)+(ix % 2)/2)/(nNY-2.5)
nc[i] = color(random(255),200-200*sq(random()),255-150*sq(random()))
ns[i] = -2 ; ncx[i] = 0 ; ncy[i] = 0
stN = 1 ; stc = [] ; stnam = [] ; stcp = []
NAMinitial = ["St","B","Bl","Br","Ch","Cr","D","F","Fl","G","H","J","K","L","M","N","P","Pr","R","S","Sl","T","Tr","W"]
NAMsyllable1 = ["ace","ack","ain","air","aith","ake","akes","ale","all","am","an","ana","and","ar","are","ark","at","atch","ate","ath","augh","ave","ay","aya","ea","eace","ead","ean","ear","eart","eath","eb","ed","ee","el","elf","ell","en","er","esk","ess","est","et","eus","ey","ick","ide","ie","ife","ift","ig","igh","ight","ill","ilm","ime","in","ind","ine","ing","ink","ip","ird","ire","irl","irth","ish","iss","ist","ive","ix","oard","oat","ock","od","og","oint","okus","ole","olf","ome","on","one","ong","onn","onth","oo","ood","ook","oom","oon","oot","ope","or","ords","ork","orn","ose","ough","oul","ouse","outh","ove","ow","own","ox","oy","uck","ul","un","up","us","ush","ut"]
NAMsyllable2 = ["ady","afe","ala","ali","ama","ami","ana","ani","any","ara","ary","asa","ata","ava","azy","eau","ego","eme","emo","ene","era","ero","eta","ial","ian","ida","ina","ino","ism","ita","ity","iva","oco","ody","olo","oma","ono","ony","ora","ory","oto","uba","una","ury","yle","ype","abel","able","agon","aker","ally","alve","ancy","ange","ante","arry","arty","ason","asta","asty","ater","aven","avid","egan","ella","ello","elly","emon","enny","enty","enus","erry","erve","etal","eter","even","ever","evil","ider","iger","iley","illy","inge","irty","isis","iver","obby","ogan","oken","olly","oman","ommy","oney","oral","oron","orry","oser","over","ower","ozen","unge","upid","abies","actor","adder","agger","aking","allen","allet","alley","allow","amber","anger","annon","arrot","arrow","arson","aster","ation","eagle","eason","eater","egion","icket","ickle","iddle","iller","illow","imple","inger","ingle","inner","inter","ipple","irate","issue","itter","ocket","ollow","onkey","oodle","opper","organ","orrow","oster","other","otion","ouble","oving","umber","under","utter","action","adness","aining","alling","anging","easure","eather","ooking","othing","urning","aughter","istress","ountain"]
NAMsuffix = ["gow","ley","ton","raer","fries","ey","by","cester","ness","thorpe","ing","chester","toft","wold","gae","bury","eter","wich","ia","ium","on","ee","ok","a","o","e","edo","isle","rose","wick","house","vine","port","haven","ham","pool","sea","mills","ford","borough","bridge","thing","bourne","stone","mouth","ville","town","burg","field","brook","side","home","castle"]
hexthrough = [nNY-.5,-1,-.5-nNY,.5-nNY,1,.5+nNY]
ax = nx[i] ; ay = ny[i] ;
lnx = [] ; lny = [] ; lni = [] ; lnn = 0
ni = i+floor(hexthrough[ii]+nox[i]/2)
bx = nx[ni] ; by = ny[ni]
if (sqrt(sq(ax-bx)+sq(ay-by)) < 50)
lni[lnn] = ni ; lnx[lnn] = bx ; lny[lnn++] = by
vertex((ax+lnx[ii]+lnx[(ii+1) % lnn])/3,(ay+lny[ii]+lny[(ii+1) % lnn])/3)
nx[i] += 15-random(30) ; ny[i] += 15-random(30)
for(i=0;i<nN;i++) renderHex(i)
if (step >= 3 && step < 5)
nc[i] = (nv[i].length > 4 ? -1 : color(170,120,150))
ns[i] = (nv[i].length > 4 ? -2 : -1)
for(var rpn=0;rpn<.8*nN*(step-2.9);rpn++)
ln = nv[i] ; lnn = ln.length
nc[i] = lerpColor(nc[ln[ii]],color(random(255),255-255*sq(random()),255-255*sq(random())),ns[i]>-1 ? .05 : .02)
if (nc[i] == -1 && random() < .008)
nc[i] = color(160+random(10),120+random(10),180+random(20))
nc[i] = lerpColor(color(80-random(10),250-random(50),125+random(25)),color(40-random(10),75,220-random(50)),random())
stcp[stN] = color(random(255),255-255*sq(random()),255-255*sq(random()))
nc[i] = lerpColor(nc[i],stcp[stN],.1+random()/3)
ln = nv[i] ; lnn = ln.length
if (ns[ln[ii]]*ns[i] >= 0 && nc[i] != -1 && nc[ln[ii]] != -1) {nc[i] = lerpColor(nc[i],nc[ln[ii]],random(.035))}
for(i=0;i<nN;i++) {renderHex(i)}
cinit = NAMinitial[floor(random(NAMinitial.length))]
csyll = (random() < .7 ? NAMsyllable1[floor(random(NAMsyllable1.length))] : NAMsyllable2[floor(random(NAMsyllable2.length))])
csuff = NAMsuffix[floor(random(NAMsuffix.length))]
name = cinit+csyll+csuff ; stnam[si] = name
for(i=0;i<nN;i++) if (ns[i] == si) {sx += nx[i] ; sy += ny[i] ; nnam[i] = name ; nnamI[i] = cinit ; nnamY[i] = csyll ; nnamS[i] = csuff ; sn++}
textSize(8+floor(sqrt(sn*2))) ; textFont('Arial Black') ; textStyle(BOLD)
applyMatrix(cos(angle),sin(angle),-sin(angle),cos(angle),sx/sn,sy/sn);
fill(color(hue(stcp[si]),saturation(stcp[si]),brightness(stcp[si]),28))
fill(color(hue(stcp[si]),saturation(stcp[si])/2,32,28))
for(var rpn=0;rpn<.005*nN*(step-3.9);rpn++)
i = floor(random(nN)) ; lni = nv[i]
if (npop[i] == 0 && ns[i] > -1 && npop[lni[0]] == 0 && npop[lni[1]] == 0 && npop[lni[2]] == 0 && npop[lni[3]] == 0 && npop[lni[4]] == 0 && npop[lni[5]] == 0)
npop[i] = 1+sq(random()) ;
stroke(color(0,64,64)) ; fill(stcp[ns[i]])
ellipse(ncx[i],ncy[i],2.5+sq(1.5*npop[i]))
cinit = random() > .6 ? nnamI[i] : NAMinitial[floor(random(NAMinitial.length))]
csyll = random() > .6 ? nnamY[i] : (random() < .7 ? NAMsyllable1[floor(random(NAMsyllable1.length))] : NAMsyllable2[floor(random(NAMsyllable2.length))])
csuff = random() > .6 ? nnamS[i] : NAMsuffix[floor(random(NAMsuffix.length))]
name = cinit+csyll+csuff ; nnam[i] = name
fill(color(0,0,0,128)) ; noStroke(color(0))
textSize(4+4*npop[i]) ; textFont('Arial') ; textStyle(BOLD)
text(name,ncx[i],ncy[i]+6+6*npop[i])
step = floor(step*10+1)/10
saveCanvas("Tilemap "+stnam[1],"png")