From 328bef6a77d6e4d6818792320e77e212cfd498ff Mon Sep 17 00:00:00 2001 From: BagelOrb Date: Sun, 4 Jan 2015 22:38:41 +0100 Subject: [PATCH] links and stuff --- 10year_anniversary-PC.scad | 1853 +++++++++++++++++ ...King & Robber Board Game BoardGameGeek.URL | 6 + ... Halb so wild Board Game BoardGameGeek.URL | 6 + ...and Gatherers Board Game BoardGameGeek.URL | 6 + ...tle Buildings Board Game BoardGameGeek.URL | 6 + ...sonne The Festival Image BoardGameGeek.URL | 6 + ...ini Expansion Board Game BoardGameGeek.URL | 6 + kingandscout.jpg | Bin 0 -> 38995 bytes 8 files changed, 1889 insertions(+) create mode 100644 10year_anniversary-PC.scad create mode 100644 Carcassonne Count, King & Robber Board Game BoardGameGeek.URL create mode 100644 Carcassonne Halb so wild Board Game BoardGameGeek.URL create mode 100644 Carcassonne Hunters and Gatherers Board Game BoardGameGeek.URL create mode 100644 Carcassonne Little Buildings Board Game BoardGameGeek.URL create mode 100644 Carcassonne The Festival Image BoardGameGeek.URL create mode 100644 Carcassonne The Mini Expansion Board Game BoardGameGeek.URL create mode 100644 kingandscout.jpg diff --git a/10year_anniversary-PC.scad b/10year_anniversary-PC.scad new file mode 100644 index 0000000..71e3a40 --- /dev/null +++ b/10year_anniversary-PC.scad @@ -0,0 +1,1853 @@ +$fs=0.4;$fa=5; + +//Layer heights: +//Grass 0.0-1.0mm +//Roads 1.0-1.3mm +//Shields 1.3-1.6mm +//City 1.6-2.0mm +//Buildings 2.0-100mm +//translate([-25,-25,-0.5]) color([1,0,0]) cube([50,50,1.6]); + +//Helper modules + +module bottom(top=0,right=0,bottom=0,left=0,shield=0) { + //translate([0,0,-1]) scale([1,1,2]) + bottom_o(top,right,bottom,left,shield); + +} +module bottom_o(top=0,right=0,bottom=0,left=0,shield=0) { + render() difference() { + union() { + cube([40, 40, 1],center=true); + translate([0,-10,0]) cube([44, 5, 1],center=true); + translate([0, 10,0]) cube([44, 5, 1],center=true); + translate([-10,0,0]) cube([5, 44, 1],center=true); + translate([ 10,0,0]) cube([5, 44, 1],center=true); + if (top == 3) translate([20,10,0]) rotate(a=45, v=[0,0,1]) cube([sqrt(2)*5, sqrt(2)*5,1],center=true); + if (bottom == 3) translate([-20,-10,0]) rotate(a=45, v=[0,0,1]) cube([sqrt(2)*5, sqrt(2)*5,1],center=true); + if (right == 3) translate([-10, 20,0]) rotate(a=45, v=[0,0,1]) cube([sqrt(2)*5, sqrt(2)*5,1],center=true); + if (left == 3) translate([ 10,-20,0]) rotate(a=45, v=[0,0,1]) cube([sqrt(2)*5, sqrt(2)*5,1],center=true); + + + } + if (top == 0) translate([25, 0,0]) cube([10,50,10],center=true); + if (top == 1) translate([25, 10,0]) cube([14.4, 5.4,10],center=true); + if (top == 2) translate([25,-10,0]) cube([14.4, 5.4,10],center=true); + if (top == 3) translate([20,-10,0]) rotate(a=45, v=[0,0,1]) cube([sqrt(2)*5, sqrt(2)*5,10],center=true); + + if (bottom == 0) translate([-25, 0,0]) cube([10,50,10],center=true); + if (bottom == 1) translate([-25,-10,0]) cube([14.4, 5.4,10],center=true); + if (bottom == 2) translate([-25, 10,0]) cube([14.4, 5.4,10],center=true); + if (bottom == 3) translate([-20, 10,0]) rotate(a=45, v=[0,0,1]) cube([sqrt(2)*5, sqrt(2)*5,10],center=true); + + if (right == 0) translate([ 0, 25,0]) cube([50,10,10],center=true); + if (right == 1) translate([-10, 25,0]) cube([ 5.2,14.4,10],center=true); + if (right == 2) translate([ 10, 25,0]) cube([ 5.2,14.4,10],center=true); + if (right == 3) translate([ 10, 20,0]) rotate(a=45, v=[0,0,1]) cube([sqrt(2)*5, sqrt(2)*5,10],center=true); + + if (left == 0) translate([ 0,-25,0]) cube([50,10,10],center=true); + if (left == 1) translate([ 10,-25,0]) cube([ 5.2,14.4,10],center=true); + if (left == 2) translate([-10,-25,0]) cube([ 5.2,14.4,10],center=true); + if (left == 3) translate([-10,-20,0]) rotate(a=45, v=[0,0,1]) cube([sqrt(2)*5, sqrt(2)*5,10],center=true); + + if (shield) translate([13-(5*(shield-1)),13,0.5]) { + linear_extrude(height = 0.8,center=true) difference() { + intersection() { + translate([0,2,0]) circle(r=5); + translate([0,-2,0]) circle(r=5); + } + translate([5.5,0]) circle(r=5); + } + } + } + if (shield) translate([13-(5*(shield-1)),13,0.5]) { + %linear_extrude(height = 10,center=true) difference() { + intersection() { + translate([0,2,0]) circle(r=5); + translate([0,-2,0]) circle(r=5); + } + translate([5.5,0]) circle(r=5); + } + } +} + +module singleCityWall() { + render() intersection() { + translate([0,0,1]) bottom(1,0,0,0); + translate([ 40,0,0]) cylinder(r=30,h=10,$fn=22); + } + roundCityWall(); +} + +module roundCityWall() { + render(convexity=2) intersection() { + union() { + difference() { + translate([ 40,0,0]) cylinder(r=30,h=8,$fn=22); + translate([ 40,0,0]) cylinder(r=28,h=12,$fn=22); + for(i=[0:10]) + translate([ 40,0,8]) rotate([0,0,360/22*(0.5+i)]) cube([60,3,2],center=true); + } + translate([ 20, 20]) cylinder(r=3,h=9); + translate([ 20,-20]) cylinder(r=3,h=9); + } + cube([40,40,40],center=true); + } +} + +module wallTower(rot=10,type=0) { + translate([40,0,0]) rotate(rot) translate([-28,0,0]) difference() { + union() { + cylinder(r=3,h=10,$fn=8); + if (type == 0) { + translate([0,0,10]) cylinder(r1=3,r2=4,h=2,$fn=8); + translate([0,0,12]) cylinder(r=4,h=2,$fn=8); + } + if (type == 1) { + translate([0,0,10]) cylinder(r1=3.5,r2=1,h=5,$fn=8); + } + } + if (type == 0) { + translate([0,0,12]) cylinder(r=2.7,h=4,$fn=8); + for(i=[0:3]) translate([0,0,14]) rotate(360/16+i*360/8) cube([20,0.8,2],center=true); + } + } +} + +module cornerWall(shield=0) { + render() difference() { + intersection() { + color([0.7,0.7,0.7]) translate([0,0,1]) bottom(1,1,0,0, shield); + union() { + rotate([0,0,90]) translate([40,0,0]) cylinder(r=29,h=10,$fn=22); + rotate([0,0, 0]) translate([40,0,0]) cylinder(r=29,h=10,$fn=22); + difference() { + cube([20,20,10]); + cylinder(r=11,h=10,$fn=12); + } + } + } + } + render() difference() { + union() { + roundCityWall(); + rotate(90) roundCityWall(); + } + cube([25,25,20]); + } + + render(convexity=2) intersection() { + union() { + difference() { + translate([ 0,0,0]) cylinder(r=12,h=8,$fn=12); + translate([ 0,0,0]) cylinder(r=10,h=12,$fn=12); + for(i=[0:2]) + translate([ 0,0,8]) rotate([0,0,360/12*(0.5+i)]) cube([60,3,2],center=true); + } + } + cube([40,40,40]); + } +} + +module road(seed=0, length=40) { + d = [[0,0],[10, 1],[length-10, 1],[length, 0]]; + + off1 = rands(-10,10,3, seed)[0]; + off2 = rands(-10,10,3, seed)[1]; + off3 = rands(-30,30,3, seed)[2]; + scale3 = rands(1,3,1, seed+1)[0]; + + linear_extrude(height=0.8) intersection() { + translate([0,-20]) for(i=[0:length-1]) hull() { + translate([sin(i*off1)*2*sign(off3)*lookup(i,d)+sin(i*off2)*2*sign(off3)*lookup(i,d)+sin(i*off3)*scale3*lookup(i,d),i]) circle(r=1); + translate([sin((i+1)*off1)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off2)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off3)*scale3*lookup((i+1),d),(i+1)]) circle(r=1); + } + square([40,40],center=true); + } +} + +module roadCorner(seed=2) { + a = [[0,0],[10,10],[20,10],[30,10]]; + b = [[0,0],[10, 0],[20,10],[30,10]]; + c = [[0,0],[10, 0],[20, 0],[30,10]]; + d = [[0,0],[10, 1],[20, 1],[30, 0]]; + + off1 = rands(-30,30,3, seed)[0]; + off2 = rands(-30,30,3, seed)[1]; + off3 = rands(-50,50,3, seed)[2]; + scale3 = rands(1,10,1, seed+1)[0]; + + linear_extrude(height=0.8) intersection() { + translate([-20,-20]) for(i=[0:29]) hull() { + translate([10,lookup(i,a)]) rotate(lookup(i,b)*9) translate([10+sin(i*off1)*2*sign(off3)*lookup(i,d)+sin(i*off2)*2*sign(off3)*lookup(i,d)+sin(i*off3)*scale3*lookup(i,d),lookup(i,c)]) circle(r=1); + translate([10,lookup((i+1),a)]) rotate(lookup((i+1),b)*9) translate([10+sin((i+1)*off1)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off2)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off3)*scale3*lookup((i+1),d),lookup((i+1),c)]) circle(r=1); + } + square([40,40],center=true); + } +} + +module house() { + render() scale(0.3) translate([0,0,4]) union() { + difference() { + cube([7,15,8],center=true); + translate([4,3,0]) cube([3,5,2],center=true); + translate([-4,-3,0]) cube([3,5,2],center=true); + translate([-4,3,-2]) cube([3,3,5],center=true); + translate([4,-4,0]) cube([3,3,2],center=true); + } + translate([0,0,5.2]) rotate([0,-90,90]) cylinder(h=16,r=5,center=true,$fn=3); + } +} + +module cloister() { + difference() { + union() { + translate([0,-2,3.5]) cube([7,15,7],center=true); + translate([-2,5,6]) cube([7,7,12],center=true); + translate([-2,5,12]) rotate([0,0,45]) cylinder(r1=5.5,r2=1,h=5,$fn=4); + translate([ 2,5,4.5]) cube([4,4,9],center=true); + translate([ 2,5,9]) rotate([0,0,45]) cylinder(r1=3.5,r2=1,h=2,$fn=4); + + hull() { + translate([ 0,3,7]) rotate([0,0,45]) cylinder(r1=5.5,r2=1,h=3,$fn=4); + translate([ 0,-6,7]) rotate([0,0,45]) cylinder(r1=5.5,r2=1,h=3,$fn=4); + } + } + hull() { + translate([-2,9,0]) cube(2,center=true); + translate([-2,9,5]) rotate([90,0,0]) cylinder(r=1,h=2,center=true); + } + translate([-2,9,9]) rotate([90,0,0]) cylinder(r=1,h=2,center=true); + for(i=[0:2]) translate([-6,5,6+i*2]) cube([2,3,1],center=true); + + for(i=[0:2]) hull() { + translate([-3.5,i*-3.5,3]) cube(2,center=true); + translate([-3.5,i*-3.5,5]) rotate([90,0,90]) cylinder(r=1,h=2,center=true); + } + for(i=[0:2]) hull() { + translate([ 3.5,i*-3.5,3]) cube(2,center=true); + translate([ 3.5,i*-3.5,5]) rotate([90,0,90]) cylinder(r=1,h=2,center=true); + } + hull() { + translate([0,-10,2.5]) cube([3,2,2],center=true); + translate([0,-10,4.5]) rotate([90,0,0]) cylinder(r=1.5,h=2,center=true); + } + } +} + +/* tile modules */ + +module cccc(seed=5) { + color([0.3,0.7,0.3]) bottom(1,1,1,1); + color([0.7,0.7,0.7]) translate([0,0,1]) bottom(1,1,1,1, 1); + offX = rands(-1.5,1.5,7*7,seed); + offY = rands(-1.5,1.5,7*7,seed+1); + rots = rands(0,360,7*7,seed+2); + for(x=[-3:3]) + for(y=[-3:3]) + if (x < 2 || y < 2) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); +} + +//cccf x3 +x1 shield +module cccf(seed=0, shield=0) { + color([0.3,0.7,0.3]) bottom(1,1,1,0); + render() difference() { + color([0.7,0.7,0.7]) translate([0,0,1]) bottom(1,1,1,0, shield); + rotate([0,0,-90]) translate([40,0,0]) cylinder(r=29,h=10,$fn=22); + } + offX = rands(-1.5,1.5,7*7,seed); + offY = rands(-1.5,1.5,7*7,seed+1); + rots = rands(0,360,7*7,seed+2); + rotate([0,0,-90]) roundCityWall(); + if (seed == 1) rotate([0,0,-90]) wallTower(10,0); + if (seed == 2) rotate([0,0,-90]) wallTower(-20,0); + if (seed == 3) rotate([0,0,-90]) wallTower(15,1); + for(x=[-3:3]) + for(y=[-2:3]) + if (((x < 2 || y < 2) || !shield) && (y > -2 || abs(x) == 3)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); +} + +//cccr x1 +x2 shield +module cccr(seed=10, shield=0) { + color([0.3,0.7,0.3]) bottom(1,1,1,2); + render() difference() { + color([0.7,0.7,0.7]) translate([0,0,1]) bottom(1,1,1,2, shield); + rotate([0,0,-90]) translate([40,0,0]) cylinder(r=29,h=10,$fn=22); + } + offX = rands(-1.5,1.5,7*7,seed); + offY = rands(-1.5,1.5,7*7,seed+1); + rots = rands(0,360,7*7,seed+2); + rotate([0,0,-90]) roundCityWall(); + for(x=[-3:3]) + for(y=[-2:3]) + if (((x < 2 || y < 2) || !shield) && (y > -2 || abs(x) == 3)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); + road(seed+3); +} + +//ccff x3, +x2 shield +module ccff(seed=0,shield=0) { + color([0.3,0.7,0.3]) bottom(1,1,0,0); + cornerWall(shield); + + if (seed == 1) wallTower(20); + if (seed == 2) rotate(90) wallTower(-15, 1); + + if (seed == 10) rotate(90) wallTower(-20); + if (seed == 10) wallTower(5); + if (seed == 11) rotate(90) wallTower(0, 1); + + offX = rands(-1.5,1.5,7*7,seed); + offY = rands(-1.5,1.5,7*7,seed+1); + rots = rands(0,360,7*7,seed+2); + for(x=[-3:3]) + for(y=[-3:3]) + if ((((x > -2 && (x < 2)) || (y > -2 && y < 2)) && (x == 3 || y == 3)) + || (!shield && x > 1 && y > 1)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); +} + +//ccff_alt x2 +module ccff_alt(seed=0) { + color([0.3,0.7,0.3]) bottom(1,1,0,0); + singleCityWall(); + rotate([0,0,90]) singleCityWall(); + + if (seed == 2) wallTower(-35); + + offX = rands(-1.5,1.5,7*7,seed); + offY = rands(-1.5,1.5,7*7,seed+1); + rots = rands(0,360,7*7,seed+2); + for(x=[-3:3]) + for(y=[-3:3]) + if (((x > -2 && x < 2) || (y > -2 && y < 2)) && (x == 3 || y == 3)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); +} + +module ccrr(seed=0, shield=0) { + color([0.3,0.7,0.3]) bottom(1,1,2,2); + cornerWall(shield); + + if (seed == 1) wallTower(10); + if (seed == 2) rotate(90) wallTower(-10, 1); + + if (seed == 11) wallTower(10); + if (seed == 11) rotate(90) wallTower(-10); + + offX = rands(-1.5,1.5,7*7,seed+20); + offY = rands(-1.5,1.5,7*7,seed+21); + rots = rands(0,360,7*7,seed+22); + for(x=[-3:3]) + for(y=[-3:3]) + if ((((x > -2 && (x < 2)) || (y > -2 && y < 2)) && (x == 3 || y == 3)) + || (!shield && x > 1 && y > 1)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); + roadCorner(seed+23); +} + +module cfcf(seed=0,shield=0) { + color([0.3,0.7,0.3]) bottom(0,1,0,1); + + rotate([0,0, 0]) roundCityWall(); + rotate([0,0,180]) roundCityWall(); + + if (seed == 10) wallTower(10); + if (seed == 10) rotate(180) wallTower(15); + if (seed == 11) wallTower(25, 1); + if (seed == 11) wallTower(-25, 1); + + render() difference() { + if (shield) color([0.7,0.7,0.7]) translate([0,0,1]) bottom(0,1,0,1, 2); + else color([0.7,0.7,0.7]) translate([0,0,1]) bottom(0,1,0,1, 0); + rotate([0,0, 0]) translate([40,0,0]) cylinder(r=29,h=10,$fn=22); + rotate([0,0,180]) translate([40,0,0]) cylinder(r=29,h=10,$fn=22); + } + + offX = rands(-1.5,1.5,7*7,seed); + offY = rands(-1.5,1.5,7*7,seed+1); + rots = rands(0,360,7*7,seed+2); + for(x=[-3:3]) + for(y=[-3:3]) + if (x>-3&&x<3 && ((x>-2&&x<2) || y>2 || y<-2) && (!shield || x<1||y<2)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); +} + +//cfcf_alt x3 +module cfcf_alt(seed=0) { + color([0.3,0.7,0.3]) bottom(1,0,1,0); + + singleCityWall(); + rotate([0,0,180]) singleCityWall(); + + if (seed == 1) wallTower(15); + if (seed == 2) wallTower(20, 1); + if (seed == 2) rotate(180) wallTower(25); + + offX = rands(-1.5,1.5,7*7,seed+20); + offY = rands(-1.5,1.5,7*7,seed+21); + rots = rands(0,360,7*7,seed+22); + for(x=[-3:3]) + for(y=[-3:3]) + if ((y > -2 && y < 2) && (x == 3 || x == -3)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); +} + +//cfff x3 +module cfff(seed=0) { + color([0.3,0.7,0.3]) bottom(1,0,0,0); + singleCityWall(); + + if (seed == 1) wallTower(15); + if (seed == 2) wallTower(-10); + if (seed == 3) wallTower(20, 1); + if (seed == 4) wallTower( 15); + if (seed == 4) wallTower(-15); + + offX = rands(-1.5,1.5,7*7,seed+30); + offY = rands(-1.5,1.5,7*7,seed+31); + rots = rands(0,360,7*7,seed+32); + for(x=[-3:3]) + for(y=[-3:3]) + if ((y > -2 && y < 2) && (x == 3)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); +} + +module cfrr(seed=0) { + color([0.3,0.7,0.3]) bottom(1,2,2,0); + singleCityWall(); + rotate([0,0,-90]) roadCorner(seed+115); + + if (seed == 1) wallTower(15); + if (seed == 2) wallTower(-10, 1); + + offX = rands(-1.5,1.5,7*7,seed+40); + offY = rands(-1.5,1.5,7*7,seed+41); + rots = rands(0,360,7*7,seed+42); + for(x=[-3:3]) + for(y=[-3:3]) + if ((y > -2 && y < 2) && (x == 3)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); +} + +module crfr(seed=0) { + color([0.3,0.7,0.3]) bottom(1,2,0,2); + singleCityWall(); + road(seed+215); + + if (seed == 1) wallTower( 20, 1); + if (seed == 1) wallTower(-20, 1); + if (seed == 2) wallTower(-5); + if (seed == 3) wallTower( 5, 1); + + offX = rands(-1.5,1.5,7*7,seed+50); + offY = rands(-1.5,1.5,7*7,seed+51); + rots = rands(0,360,7*7,seed+52); + for(x=[-3:3]) + for(y=[-3:3]) + if ((y > -2 && y < 2) && (x == 3)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); +} + +module crrf(seed=0) { + color([0.3,0.7,0.3]) bottom(1,0,2,2); + singleCityWall(); + roadCorner(seed+145); + + if (seed == 1) wallTower( 30); + if (seed == 1) wallTower(-10); + if (seed == 2) wallTower( 30); + if (seed == 2) wallTower( 10); + if (seed == 2) wallTower(-20); + + offX = rands(-1.5,1.5,7*7,seed+60); + offY = rands(-1.5,1.5,7*7,seed+61); + rots = rands(0,360,7*7,seed+62); + for(x=[-3:3]) + for(y=[-3:3]) + if ((y > -2 && y < 2) && (x == 3)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); +} + +module crrr(seed=0) { + color([0.3,0.7,0.3]) bottom(1,2,2,2); + singleCityWall(); + + road(seed+115, 17); + rotate(-90) road(seed+126, 17); + rotate(180) road(seed+137, 17); + + if (seed == 0) { + translate([3,-1,0.5]) rotate(20) house(); + translate([-4,-5,0.5]) rotate(170) house(); + translate([-5,4,0.5]) rotate(110) house(); + } + if (seed == 1) { + wallTower( 15); + wallTower(-15); + + translate([3,1,0.5]) rotate(10) house(); + translate([-5,-4,0.5]) rotate(210) house(); + translate([-4,4,0.5]) rotate(120) house(); + } + if (seed == 2) { + translate([-12,0,0]) wallTower(0); + } + + offX = rands(-1.5,1.5,7*7,seed+70); + offY = rands(-1.5,1.5,7*7,seed+71); + rots = rands(0,360,7*7,seed+72); + for(x=[-3:3]) + for(y=[-3:3]) + if ((y > -2 && y < 2) && (x == 3)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); +} + +module ffff(seed=0) { + color([0.3,0.7,0.3]) bottom(0,0,0,0); + rot = rands(0,360,seed+1,seed+83)[seed]; + rotate(rot) translate([0,0,0.5]) cloister(); +} + +module fffr(seed=0) { + color([0.3,0.7,0.3]) bottom(0,0,0,2); + translate([-3,0,0]) rotate(180) cloister(); + intersection() { + road(seed+312); + translate([-20,-20]) cube([40,20,20]); + } +} + +module ffrr(seed=0) { + color([0.3,0.7,0.3]) bottom(0,0,2,2); + roadCorner(seed+300); +} + +module frfr(seed=0) { + color([0.3,0.7,0.3]) bottom(0,2,0,2); + road(seed+400); +} + +module frrr(seed=0) { + color([0.3,0.7,0.3]) bottom(0,2,2,2); + + road(seed+420, 17); + rotate(-90) road(seed+430, 17); + rotate(180) road(seed+440, 17); +} + +module rrrr(seed=0) { + color([0.3,0.7,0.3]) bottom(2,2,2,2); + + road(seed+450, 17); + rotate( 90) road(seed+460, 17); + rotate(-90) road(seed+470, 17); + rotate(180) road(seed+480, 17); +} + +//Testing a single tile +//cccf(0); + +module plate1() { + translate([ 0, 0]) cccc(); + translate([ 50, 0]) cccf(0,0); + translate([100, 0]) cccf(1,0); + translate([150, 0]) cccf(2,0); + + translate([ 0, 50]) cccf(3,1); + translate([ 50, 50]) cccr(10,0); + translate([100, 50]) cccr(16,1); + translate([150, 50]) cccr(4,1); + + translate([ 0,100]) ccff(0,0); + translate([ 50,100]) ccff(1,0); + translate([100,100]) ccff(2,0); + translate([150,100]) ccff(10,1); + + translate([ 0,150]) ccff(11,1); + translate([ 50,150]) ccff_alt(1,0); + translate([100,150]) ccff_alt(2,0); + translate([150,150]) ccrr(0,0); +} + +module plate2() { + translate([ 0, 0]) ccrr(1,0); + translate([ 50, 0]) ccrr(2,0); + translate([100, 0]) ccrr(10,1); + translate([150, 0]) ccrr(11,1); + + translate([ 0, 50]) cfcf(0,0); + translate([ 50, 50]) cfcf(10,1); + translate([100, 50]) cfcf(11,1); + translate([150, 50]) cfcf_alt(0); + + translate([ 0,100]) cfcf_alt(1); + translate([ 50,100]) cfcf_alt(2); + translate([100,100]) cfff(0); + translate([150,100]) cfff(1); + + translate([ 0,150]) cfff(2); + translate([ 50,150]) cfff(3); + translate([100,150]) cfff(4); + translate([150,150]) cfrr(0); +} + +module plate3() { + translate([ 0, 0]) cfrr(1); + translate([ 50, 0]) cfrr(2); + translate([100, 0]) crfr(0); + translate([150, 0]) crfr(1); + + translate([ 0, 50]) crfr(2); + translate([ 50, 50]) crfr(3); + translate([100, 50]) crrf(0); + translate([150, 50]) crrf(1); + + translate([ 0,100]) crrf(2); + translate([ 50,100]) crrr(0); + translate([100,100]) crrr(1); + translate([150,100]) crrr(2); + + translate([ 0,150]) ffff(0); + translate([ 50,150]) ffff(1); + translate([100,150]) ffff(2); + translate([150,150]) ffff(3); +} + +module plate4() { + translate([ 0, 0]) fffr(0); + translate([ 50, 0]) fffr(1); + translate([100, 0]) ffrr(0); + translate([150, 0]) ffrr(1); + + translate([ 0, 50]) ffrr(2); + translate([ 50, 50]) ffrr(3); + translate([100, 50]) ffrr(4); + translate([150, 50]) ffrr(5); + + translate([ 0,100]) ffrr(6); + translate([ 50,100]) ffrr(7); + translate([100,100]) ffrr(8); + translate([150,100]) frfr(0); + + translate([ 0,150]) frfr(1); + translate([ 50,150]) frfr(2); + translate([100,150]) frfr(3); + translate([150,150]) frfr(4); +} + +module plate5() { + translate([ 0, 0]) frfr(5); + translate([ 50, 0]) frfr(6); + translate([100, 0]) frfr(7); + translate([150, 0]) frrr(0); + + translate([ 0, 50]) frrr(2); + translate([ 50, 50]) frrr(3); + translate([100, 50]) frrr(4); + translate([150, 50]) rrrr(5); + + //translate([ 0,100]) ????(0); + //translate([ 50,100]) ????(0); + //translate([100,100]) ????(0); + //translate([150,100]) ????(0); + + //translate([ 0,150]) ????(0); + //translate([ 50,150]) ????(0); + //translate([100,150]) ????(0); + //translate([150,150]) ????(0); +} + +//plate1(); +//translate([220,0]) +//plate2(); +//translate([0,220]) +//plate3(); +//translate([220,220]) +//plate4(); +//translate([0,440]) +//plate5(); + + + + + + + + + + + + + +module road_mid(seed=0, length=40) { + d = [[0,0],[5, 1],[length/2, 0],[length-5, 1],[length, 0]]; + + off1 = rands(-5,5,3, seed)[0]; + off2 = rands(-5,5,3, seed)[1]; + off3 = rands(-30,30,3, seed)[2]; + scale3 = rands(1,3,1, seed+1)[0]; + + linear_extrude(height=0.8) intersection() { + translate([0,-20]) for(i=[0:length-1]) hull() { + translate([sin(i*off1)*2*sign(off3)*lookup(i,d)+sin(i*off2)*2*sign(off3)*lookup(i,d)+sin(i*off3)*scale3*lookup(i,d),i]) circle(r=1); + translate([sin((i+1)*off1)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off2)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off3)*scale3*lookup((i+1),d),(i+1)]) circle(r=1); + } + square([40,40],center=true); + } +} + + + +module road_side(seed=0, length=40) { + d = [[0,0],[10, 1],[length-10, 1],[length, 0]]; + + off1 = rands(-5,5,3, seed)[0]; + off2 = rands(-5,5,3, seed)[1]; + off3 = rands(-30,30,3, seed)[2]; + scale3 = rands(1,3,1, seed+1)[0]; + + linear_extrude(height=0.8) intersection() { + translate([0,-20]) for(i=[0:length-1]) hull() { + translate([sin(i*off1)*2*sign(off3)*lookup(i,d)+sin(i*off2)*2*sign(off3)*lookup(i,d)+sin(i*off3)*scale3*lookup(i,d),i]) circle(r=1); + translate([sin((i+1)*off1)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off2)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off3)*scale3*lookup((i+1),d),(i+1)]) circle(r=1); + } + square([40,40],center=true); + } +} + + + + + +function square(in) = in*in; +function rr(seed, i, length) = (square(rands(0,1,1,seed)[0])+rands(0,1,1,seed+200)[0] -0.5) *i/length *(1 - i/length)* 4 +2; + + +module riverCorner(seed=2, length = 45) { + a = [[0,0],[length/3,10],[length/3*2,10],[length,10]]; + b = [[0,0],[length/3, 0],[length/3*2,10],[length,10]]; + c = [[0,0],[length/3, 0],[length/3*2, 0],[length,10]]; + d = [[0,0],[length/3, 1],[length/3*2, 1],[length, 0]]; + + off1 = rands(-30,30,3, seed)[0]; + off2 = rands(-30,30,3, seed)[1]; + off3 = rands(-50,50,3, seed)[2]; + scale3 = rands(1,10,1, seed+1)[0]; + + linear_extrude(height=0.8) intersection() { + translate([-20,-20]) + for(i=[0:length-1]) hull() { + translate([10,lookup(i,a)]) rotate(lookup(i,b)*9) translate([10+sin(i*off1)*2*sign(off3)*lookup(i,d)+sin(i*off2)*2*sign(off3)*lookup(i,d)+sin(i*off3)*scale3*lookup(i,d),lookup(i,c)]) circle(r=rr(seed+i,i,length)); + translate([10,lookup((i+1),a)]) rotate(lookup((i+1),b)*9) translate([10+sin((i+1)*off1)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off2)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off3)*scale3*lookup((i+1),d),lookup((i+1),c)]) circle(r=rr(seed+i+1, i+1, length)); + } + square([40,40],center=true); + } +} + +module riverSplit(seed, pos, angle, size, length, depth, maxdepth) { + + r = rands(-40,40,2,seed+875); + r2 = rands(-5,5,1,seed+875); + + table = [[0,angle], [length/3,angle+r[0]],[length/3*2,angle+r[1]], [length,angle+r2] ]; + + l = pow(rands(.3,.5,1, seed+523)[0], 1/(depth+2)) * .7 ; + + + for(i=[0:length-1]) hull() { + translate(pos + l*i*size*[sin(lookup(i,table)),cos(lookup(i,table))]) + translate(rands(-1,1,2, i)*size/5) + circle(r=pow(.9,i)*size /2 * rands(.7,1.2,1, i)[0]); + translate(pos + l*(i+1)*size*[sin(lookup(i+1,table)),cos(lookup(i+1,table))]) + translate(rands(-1,1,2, i+1)*size/5) + circle(r=pow(.9,(i+1))*size /2 * rands(.7,1.2,1, i+1)[0]); + //if (rands(0,1,1, seed+523)[0] < 0.5 && depth < maxdepth) + // extraSplit(seed,i,table,pos,l,size,length,depth,maxdepth); + + } + + endAngle = angle + rands(-5,5,1,seed+421)[0]; + //atan2( +// length*sin(fa) - (length-1)*sin(lookup(length-1,table)) +// , +// length*cos(fa) - (length-1)*cos(lookup(length-1,table)) +// ); + endPos = pos + l*length*size*[sin(lookup(length,table)),cos(lookup(length,table))]; + if (depth < maxdepth) { + riverSplit(seed+521, endPos, endAngle-45, .5*size, length+depth*2, depth+1, maxdepth); + riverSplit(seed+614, endPos, endAngle+30, .5*size, length+depth*2, depth+1, maxdepth); + } +//rands(-25,-10,1, seed+53)[0] + +} + +module extraSplit(seed,i,table,pos,l,size,length,depth,maxdepth) +{ + endAngleT = atan2( + i*sin(lookup(i,table)) - (i-1)*sin(lookup(i-1,table)) + , + i*cos(lookup(i,table)) - (i-1)*cos(lookup(i-1,table)) + ); + endPosT = pos + l*i*size*[sin(lookup(i,table)),cos(lookup(i,table))]; + riverSplit(seed+51, endPosT, endAngleT+45, .3*size, length, depth+1, maxdepth); +} + + + + + +function rr2(seed, i, length) = rands(-2,3,1, seed)[0]*i/length*(length-i)/length*2 + 2; + +module river(seed=0, length=40) { + d = [[0,0],[10, 1],[length-10, 1],[length, 0]]; + + off1 = rands(-10,10,3, seed)[0]; + off2 = rands(-10,10,3, seed)[1]; + off3 = rands(-30,30,3, seed)[2]; + scale3 = rands(1,3,1, seed+1)[0]; + +// translate([0,0,-0.4]) + linear_extrude(height=0.8) intersection() { + translate([0,-20]) for(i=[0:length-1]) hull() { + translate([sin(i*off1)*2*sign(off3)*lookup(i,d)+sin(i*off2)*2*sign(off3)*lookup(i,d)+sin(i*off3)*scale3*lookup(i,d),i]) circle(r=rr2(seed+i, i, length)); + translate([sin((i+1)*off1)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off2)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off3)*scale3*lookup((i+1),d),(i+1)]) circle(r=rr2(seed+i+100, i, length)); + } + square([41,41],center=true); + } +} + +module river_half(seed=0, length=40) { + d = [[0,0],[10, 1],[length-10, 1],[length, 0]]; + + off1 = rands(-10,10,3, seed)[0]; + off2 = rands(-10,10,3, seed)[1]; + off3 = rands(-30,30,3, seed)[2]; + scale3 = rands(1,3,1, seed+1)[0]; + +// translate([0,0,-0.4]) + linear_extrude(height=0.8) intersection() { + translate([0,-20]) for(i=[0:length/2-1]) hull() { + translate([sin(i*off1)*2*sign(off3)*lookup(i,d)+sin(i*off2)*2*sign(off3)*lookup(i,d)+sin(i*off3)*scale3*lookup(i,d),i]) circle(r=rr2(seed+i, i, length)); + translate([sin((i+1)*off1)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off2)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off3)*scale3*lookup((i+1),d),(i+1)]) circle(r=rr2(seed+i+100, i, length)); + } + square([41,41],center=true); + } +} + + +module bridge() { + + scale([1,.5,1]) + translate([0,0,-7]) + difference() { + union(){ + rotate([90,0,0]) + cylinder(h=10,r=10, center = true); + translate([0,4,0]) + rotate([90,0,0]) + cylinder(h=2,r=11, center = true); + translate([0,-4,0]) + rotate([90,0,0]) + cylinder(h=2,r=11, center = true); + + } + rotate([90,0,0]) + cylinder(h=20,r=9, center = true); + translate([0,0,-3]) cube([40,40,20], center = true); + } +} + + +function mapAngle(a, seed=561) = rands(-5,5,2, seed+53) +[rands(10,30,2, seed+a*37)[0]*sin(a), rands(15,25,2, seed+a*37)[0]*cos(a)]; + +module lake(seed=0, length=40) { + points = [ + mapAngle( 0, seed), + mapAngle( 40, seed), + mapAngle( 80, seed), + mapAngle(120, seed), + mapAngle(160, seed), + mapAngle(200, seed), + mapAngle(240, seed), + mapAngle(280, seed), + mapAngle(320, seed) + ]; + tableX = [ + [ 0, mapAngle( 0, seed)[0] ], + [ 40, mapAngle(40, seed)[0] ], + [ 80, mapAngle(80, seed)[0] ], + [120,mapAngle(120, seed)[0] ], + [160,mapAngle(160, seed)[0] ], + [200,mapAngle(200, seed)[0] ], + [240,mapAngle(240, seed)[0] ], + [280,mapAngle(280, seed)[0] ], + [320,mapAngle(320, seed)[0] ], + [360, mapAngle( 0, seed)[0] ] + ]; + tableY = [ + [ 0, mapAngle( 0, seed)[1] ], + [ 40, mapAngle(40, seed)[1] ], + [ 80, mapAngle(80, seed)[1] ], + [120,mapAngle(120, seed)[1] ], + [160,mapAngle(160, seed)[1] ], + [200,mapAngle(200, seed)[1] ], + [240,mapAngle(240, seed)[1] ], + [280,mapAngle(280, seed)[1] ], + [320,mapAngle(320, seed)[1] ], + [360, mapAngle( 0, seed)[1] ] + ]; + r = 10; + + linear_extrude(height=0.8) { + union() { + polygon(points); + + for(i=[0: length-1]) { + assign(s = rands(3,10,1,seed+325+i)[0]) + translate([lookup(i*360/length, tableX)*(1.2-s/20),lookup(i*360/length, tableY)*(1.2-s/20)] + rands(-2,2,2,seed+541)) + circle(r=s); + } + } + } + + +} + + +module fffw(seed=123) +{ + difference() { + color([0.3,0.7,0.3]) bottom(0,0,0,3); + + linear_extrude(height=0.8) + riverSplit(seed, pos=[0,-20] , angle=0, size=5, length=8, depth=0, maxdepth=2); + + } + +} + +module fffw_alt(seed=123) +{ + difference() { + color([0.3,0.7,0.3]) bottom(0,0,0,3); + scale([.5,.5,1]) lake(seed); + river_half(seed, 40); + } + +} + + +module ffww(seed=0) { + difference() { + color([0.3,0.7,0.3]) bottom(0,0,3,3); + riverCorner(seed+300); + } +} + +module fwfw(seed=0) { + difference() { + color([0.3,0.7,0.3]) bottom(0,3,0,3); + river(seed+40); + } +} + + + + +module rwrw(seed=0) { + union() { + difference() { + + union(){ + color([0.3,0.7,0.3]) bottom(2,3,2,3); + rotate([0,0,90]) + road_mid(seed+477,40); + } + river(seed+41); + } + bridge(); + } +} + + +module rrww(seed=127) { + difference() { + union(){ + color([0.3,0.7,0.3]) bottom(2,2,3,3); + rotate([0,0,180]) + roadCorner(seed+7,40); + } + riverCorner(seed+41); + } +} + + +module door() { + union() { + intersection () { + translate([0,-2.5,5]) rotate([0,90,0]) cylinder(h=15,r=5); + translate([0, 2.5,5]) rotate([0,90,0]) cylinder(h=15,r=5); + } + translate([0,-2.5,0]) cube([15,5,5]); + } +} +module cityEntrance(seed=0) { + singleCityWall(); + + translate([-6,0,0]) scale([1.5,1.5,1.3]) wallTower(0,1); + + offX = rands(-1.5,1.5,7*7,seed+30); + offY = rands(-1.5,1.5,7*7,seed+31); + rots = rands(0,360,7*7,seed+32); + for(x=[-3:3]) + for(y=[-3:3]) + if ((y > -2 && y < 2) && (x == 3)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); + +} + +module cwrw(seed=1) { + + difference() { + cityEntrance(seed); + translate([5,0,1.5]) door(); + } + + union() { + difference() { + + union(){ + color([0.3,0.7,0.3]) bottom(1,3,2,3); + rotate([0,0,90]) + road_mid(seed+477,40); + } + river(seed+41); + } + bridge(); + } +} + + + + +module cwcw(seed=0) { + difference() { + color([0.3,0.7,0.3]) bottom(1,3,1,3); + river(seed); + } + + singleCityWall(); + rotate([0,0,180]) singleCityWall(); + + //if (seed == 1) wallTower(15); + //if (seed == 2) + wallTower(0); + //if (seed == 2) + rotate(180) wallTower(0); + + offX = rands(-1.5,1.5,7*7,seed+20); + offY = rands(-1.5,1.5,7*7,seed+21); + rots = rands(0,360,7*7,seed+22); + for(x=[-3:3]) + for(y=[-3:3]) + if ((y > -2 && y < 2) && (x == 3 || x == -3)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); +} + + + +module ccww(seed=93, shield=0) { + difference() { + color([0.3,0.7,0.3]) bottom(1,1,3,3); + riverCorner(seed+23); + } + + cornerWall(shield); + + //if (seed == 1) wallTower(10); + //if (seed == 2) + rotate(90) wallTower(-10, 1); + + //if (seed == 11) wallTower(10); + //if (seed == 11) rotate(90) wallTower(-10); + + offX = rands(-1.5,1.5,7*7,seed+20); + offY = rands(-1.5,1.5,7*7,seed+21); + rots = rands(0,360,7*7,seed+22); + for(x=[-3:3]) + for(y=[-3:3]) + if ((((x > -2 && (x < 2)) || (y > -2 && y < 2)) && (x == 3 || y == 3)) + || (!shield && x > 1 && y > 1)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); + + +} + + +module wfwr(seed=0) { + //color([0.3,0.7,0.3]) bottom(0,0,0,2); + translate([-13,8,0]) rotate(180) cloister(); + + union() { + difference() { + + union(){ + color([0.3,0.7,0.3]) bottom(2,3,0,3); + rotate([0,0,90]) + intersection() { + road_side(seed+47,40); + translate([-20,-20]) cube([40,20,20]); + } + + } + river(seed+4351); + } + translate([3,-1,0]) bridge(); + } + +} + + +module plate6() { + translate([ 0, 0]) ffww(); + translate([ 50, 0]) ffww(513); + translate([100, 0]) fffw(); + translate([150, 0]) fffw_alt(); + + translate([ 0, 50]) fwfw(); + translate([ 50, 50]) fwfw(32); + translate([100, 50]) cwcw(); + translate([150, 50]) ccww(); + + translate([ 0,100]) wfwr(); + translate([ 50,100]) cwrw(); + translate([100,100]) rwrw(); + translate([150,100]) rrww(); + + //translate([ 0,150]) ????(0); + //translate([ 50,150]) ????(0); + //translate([100,150]) ????(0); + //translate([150,150]) ????(0); +} + + +//plate6(); +//ccrr(); + + + + + + + + + + + + + + + + + + + + + + + + +function rr3(seed, i, length) = rands(-3,-1,1, seed)[0]*i/length*(length-i)/length*2 + 2; + +module river_isle(seed=315, length=40) { + d = [[0,0],[10, 1],[length-10, 1],[length, 0]]; + + off1 = rands(-1,10,3, seed)[0]; + off2 = rands(-1,10,3, seed)[1]; + off3 = rands(-2,10,3, seed)[2]; + scale3 = rands(1,8,1, seed+1)[0]; + +// translate([0,0,-0.4]) + linear_extrude(height=0.8) + intersection() { + union() { + translate([0,-20]) + for(i=[0:length-1]) + hull() { + translate([sin(i*off1)*2*sign(off3)*lookup(i,d)+sin(i*off2)*2*sign(off3)*lookup(i,d)+sin(i*off3)*scale3*lookup(i,d),i]) + circle(r=rr3(seed+i, i, length)); + translate([sin((i+1)*off1)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off2)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off3)*scale3*lookup((i+1),d),(i+1)]) + circle(r=rr3(seed+i, i+1, length)); + } + translate([0,-20]) + for(i=[0:length-1]) + hull() { + translate([-(sin(i*off1)*2*sign(off3)*lookup(i,d)+sin(i*off2)*2*sign(off3)*lookup(i,d)+sin(i*off3)*scale3*lookup(i,d)),length-i]) + circle(r=rr3(seed+i+100, i, length)); + translate([-(sin((i+1)*off1)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off2)*2*sign(off3)*lookup((i+1),d)+sin((i+1)*off3)*scale3*lookup((i+1),d)),length-(i+1)]) + circle(r=rr3(seed+i+100, i+1, length)); + } + } + square([41,41],center=true); + } +} + + + + + +// override the old version! +module singleCityWall() { + render() intersection() { + translate([0,0,.5]) + scale([1,1,2]) + bottom(1,0,0,0); + translate([ 40,0,-1]) cylinder(r=30,h=10,$fn=22); + } + roundCityWall(); +} + +module mountain(radius, height, peekedness = .8) { + rotate_extrude(convexity = 10, $fn = 12) + polygon(points = [for (i = [-3:.2:1]) [ + (i>0.01)? 0 : i/3*radius, + (i>0.01)? 0 : height * pow(exp(-i*i),peekedness) ] ]); + + +} + + +module vulcano(radius = 18, height = 10, peekedness =.8, seed = 0) { + rots = rands(0,360,4, seed); + + difference() { + union() { + mountain(radius, height, peekedness); + + rotate([0,0,rots[3]]) + intersection() + { + mountain(radius, height+1, peekedness); + linear_extrude(20) + union() { + rotate([0,rots[0]]) + polygon(points = [[0,1],[0,0],[20,20],[10,25]] ); + rotate([0,rots[1]]) + polygon(points = [[1,-1],[1,0],[20,-20],[10,-25]] ); + rotate([0,rots[2]]) + polygon(points = [[0,2],[-1,-1],[-20,-5],[-20,5]] ); + + } + } + } + translate([0,0,height-2]) cylinder(h=3,r1=2, r2= 3, $fn=12); + } +} + + +module fffw_vulcano(seed=13) { + difference() { + union() { + color([0.3,0.7,0.3]) bottom(0,0,0,3); + vulcano(); + } + + linear_extrude(height=20) + //translate([0,-10]) + //scale([1,.5]) + riverSplit(seed, pos=[0,-20] , angle=0, size=5, length=5, depth=0, maxdepth=2); + + } + translate([0,0,-.4]) + difference() { + mountain(18, 10, .8); + translate([0,0,10-2]) cylinder(h=3,r1=2, r2= 3, $fn=12); + } +} + + + +module fence(amax=360, steps = 10, r = 10, seed =623) { + xoff = rands(-1,1,steps+1,seed); + yoff = rands(-1,1,steps+1,seed+steps*2); + linear_extrude(height=1) + for (i=[0:steps-1]) + hull() { + translate([r*sin(i/steps*amax) + xoff[i], r*cos(i/steps*amax) + yoff[i] ]) + circle(r=.1); + translate([r*sin((i+1)/steps*amax) + xoff[i+1], r*cos((i+1)/steps*amax) + yoff[i+1] ]) + circle(r=.1); + } + +} + +module farmhouse() { + translate([-2,-2]) + difference() + { + union(){ + cube([4,4,2]); + translate([2,4,2]) + rotate([90,0]) + linear_extrude(height=4) + polygon([[-2,0],[2,0],[0,1]]); + } + translate([1,-1,0]) + cube([1,2,1.5]); + translate([1,3,0]) + cube([1,2,1.5]); + } +} + +module farm(seed= 1243) { + farmhouse(); + translate([0,-8]) + rotate([0,0,-10]) + fence(amax=340, steps = 8, r=8); + +} + +module ffww_farm(seed=632) { + ffww(seed); + translate([10,10]) + rotate([0,0,-45]) + farm(); +} + + + + + +module fwww(seed=1) { + difference() + { + color([0.3,0.7,0.3]) bottom(0,3,3,3); + riverCorner(seed+300); + river(seed); + } +} + + +module cfwf(seed=54) { + difference() { + color([0.3,0.7,0.3]) bottom(1,0,3,0); + translate([10,0]) + scale([.5,.5,1]) lake(seed); + rotate([0,0,-90]) + river_half(seed+32, 40); + } + singleCityWall(); + + wallTower(20, 1); + wallTower(-20); + + offX = rands(-1.5,1.5,7*7,seed+30); + offY = rands(-1.5,1.5,7*7,seed+31); + rots = rands(0,360,7*7,seed+32); + for(x=[-3:3]) + for(y=[-3:3]) + if ((y > -2 && y < 2) && (x == 3)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); + +} + + + + + + + + + +module gaussian_bridge(length = 15, height=10, width = 10, peekedness = .1) +{ + translate([0,width/2]) + rotate([90,0]) + linear_extrude(height = width, $fn = 12) + polygon(points = [for (i = [-4:.2:4]) + (i<-3)? [-length,0] : + (i>3)? [length,0] : + [i/3*length, + height * pow(exp(-i*i),peekedness)] ]); + +} + +module city_bridge(length = 30, width=20) { + wallthickness = 1.5; + wallh=4; + squeeze=6; + + intersection() { + + translate([0,0,-4]) + difference() { + union() { + gaussian_bridge(length/2,10,width); + intersection() { + union() { + + translate([0,width/2-wallthickness,6]) + rotate([90,0]) + gaussian_bridge(length/2,squeeze,20); + translate([-length/2,width/2-wallthickness,0]) + cube([length,wallthickness,20]); + translate([0,-width/2+wallthickness,6]) + rotate([-90,0]) + gaussian_bridge(length/2,squeeze,20); + translate([-length/2,-width/2,0]) + cube([length,wallthickness,20]); + } + translate([0,0,wallh]) + gaussian_bridge(length/2,10,width); + } + } + translate([0,width/2,5]) + rotate([90,0]) + gaussian_bridge(length/2,squeeze,30); + translate([0,-width/2,5]) + rotate([-90,0]) + gaussian_bridge(length/2,squeeze,30); + + translate([-5,0,3]) + rotate([90,0]) + cylinder(h=20,r=4.5,center=true); + translate([5,0,3]) + rotate([90,0]) + cylinder(h=20,r=4.5,center=true); + } + + translate([0,0,10]) + cube([length-2,length-2,20],center=true); + } +} + +module cwcw_connected(seed = 16) { + difference() { + union() { + color([0.3,0.7,0.3]) bottom(1,3,1,3); + difference() + { + singleCityWall(); + translate([10,0,5.5]) + cube([8,8,8],center=true); + } + wallTower(12); + wallTower(-12); + rotate([0,0,180]) { + difference() + { + singleCityWall(); + translate([10,0,5.5]) + cube([8,8,8],center=true); + } + wallTower(12); + wallTower(-12); + } + city_bridge(); + translate([17,2,1.5]) + rotate([0,0,29]) + house(); + translate([18,-10,1.5]) + rotate([0,0,-7]) + house(); + translate([-18,10,1.5]) + rotate([0,0,10]) + house(); + translate([-17,3,1.5]) + rotate([0,0,78]) + house(); + } + + + river_isle(); + } + +} + + + + +module fwfw_cloister() { + fwfw(386);//386 + translate([10,0]) + rotate([0,0,-18]) + cloister(); +} + + + +module rwrw_alt(seed=171) { + union() { + difference() { + + union(){ + color([0.3,0.7,0.3]) bottom(2,3,2,3); + rotate([0,0,90]) + road_mid(seed+477,40); + } + river(seed+41); + } + translate([-2,1]) + rotate([0,0,-7]) + bridge(); + } +} + +module rwrw_inn(seed=253) { + rwrw_alt(seed); +} +//rrr= round(rands(0,1000,1)[0]); +//echo(rrr); +//rwrw_inn(); + +module river_II() { + translate([ 0, 0]) fffw_vulcano(); + translate([ 50, 0]) ffww_farm(); + translate([100, 0]) fwww(); + translate([150, 0]) cfwf(); + + translate([ 0, 50]) cwcw_connected(); + translate([ 50, 50]) fwfw_cloister(); + translate([100, 50]) cwrw(84); // old exp + translate([150, 50]) rrww(15); // old exp + + translate([ 0,100]) fffw(51); // old exp + translate([ 50,100]) ffww(14); // old exp + translate([100,100]) rwrw_inn(); + translate([150,100]) ccww(92, 1); // old exp +} + + +//river_II(); + + + + + + + + +rrr = round(rands(0,1000,1)[0]); +echo(rrr); + + + + + + + + + + + + + + + + + + + + + + + + + + +module roundCityWall2() { + rr = 21; + render(convexity=2) intersection() { + union() { + difference() { + translate([ 24,0,0]) + //rotate([0,0,360/22*16]) + cylinder(r=rr,h=8,$fn=16); + translate([ 24,0,0]) + //rotate([0,0,360/22*16]) + cylinder(r=rr-2,h=12,$fn=16); + + for(i=[0:10]) + translate([ 24,0,8]) rotate([0,0,360/16*(0.5+i)]) cube([60,3,2],center=true); + } + translate([ 20, 20]) cylinder(r=3,h=9); + translate([ 20,-20]) cylinder(r=3,h=9); + } + cube([40,40,40],center=true); + } +} + + + + + + + +module rrrr_alt(seed=129) +{ + color([0.3,0.7,0.3]) bottom(2,2,2,2); + roadCorner(seed+300); + rotate([0,0,180]) + roadCorner(seed+900); +} + +module rrff_cloister(seed = 188) +{ + ffrr(seed); + translate([0,0]) + rotate([0,0,-30]) + cloister(); +} + +module cffr() +{ + +} + +module crff() +{ + +} + +module crcr() +{ + +} + +module cccf_sadface(seed=123) { + color([0.3,0.7,0.3]) bottom(1,1,0,1); + + rotate([0,0, 0]) roundCityWall(); + rotate([0,0, 0]) roundCityWall2(); + rotate([0,0,180]) roundCityWall(); + + if (seed == 10) wallTower(10); + if (seed == 10) rotate(180) wallTower(15); + if (seed == 11) wallTower(25, 1); + if (seed == 11) wallTower(-25, 1); + + render() difference() { + if (shield) color([0.7,0.7,0.7]) translate([0,0,1]) bottom(1,1,0,1, 2); + else color([0.7,0.7,0.7]) translate([0,0,1]) bottom(1,1,0,1, 0); + rotate([0,0, 0]) translate([24,0,0]) cylinder(r=21,h=10,$fn=22); + rotate([0,0,180]) translate([40,0,0]) cylinder(r=29,h=10,$fn=22); + } + intersection() { + color([0.7,0.7,0.7]) translate([0,0,1]) bottom(1,1,0,1, 0); + translate([40,0,0]) cylinder(r=29,h=10,$fn=22); + } + + offX = rands(-1.5,1.5,7*7,seed); + offY = rands(-1.5,1.5,7*7,seed+1); + rots = rands(0,360,7*7,seed+2); + for(x=[-3:3]) + for(y=[-3:3]) + if (x>-3&&x<3 && ((x>-2&&x<2) || y>2 || y<-2) && (!shield || x<1||y<2) && rands(0,1,1,seed+y*7+x*13)[0]<.4) + translate([((x+3)/6*5-3)*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); + + for (x=[-12:9:10]) + translate([16,x]+rands(-1,1,2,seed+x+4312)) + rotate([0,0,rands(0,360,1)[0]]) + house(); +} + + +module cccc_mouth(seed=213, shield=0) +{ + color([0.3,0.7,0.3]) bottom(1,1,0,0); + cornerWall(shield); + + if (seed == 1) + wallTower(20); + if (seed == 2) rotate(90) wallTower(-15, 1); + + if (seed == 10) rotate(90) wallTower(-20); + if (seed == 10) wallTower(5); + //if (seed == 11) + rotate(90) wallTower(0, 1); + + offX = rands(-1.5,1.5,7*7,seed); + offY = rands(-1.5,1.5,7*7,seed+1); + rots = rands(0,360,7*7,seed+2); + for(x=[-3:3]) + for(y=[-3:3]) + if ((((x > -2 && (x < 2)) || (y > -2 && y < 2)) && (x == 3 || y == 3)) + || (!shield && x > 1 && y > 1)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); + + + seed = seed+1234; + rotate([0,0,180]) + { + cornerWall(shield); + + //if (seed == 1) + wallTower(5); + //if (seed == 2) + rotate(90) wallTower(-15, 1); + + if (seed == 10) rotate(90) wallTower(-20); + if (seed == 10) wallTower(5); + if (seed == 11) rotate(90) wallTower(0, 1); + + offX = rands(-1.5,1.5,7*7,seed); + offY = rands(-1.5,1.5,7*7,seed+1); + rots = rands(0,360,7*7,seed+2); + for(x=[-3:3]) + for(y=[-3:3]) + if ((((x > -2 && (x < 2)) || (y > -2 && y < 2)) && (x == 3 || y == 3)) + || (!shield && x > 1 && y > 1)) + translate([x*5+offX[x+3+(y+3)*7],y*5+offY[x+3+(y+3)*7],1.5]) + rotate([0,0,rots[x+3+(y+3)*7]]) house(); + } +} + +module cfrf() +{ + +} + + + + + + + + + + + + + + + +module anniversary() { + translate([ 0, 0]) rrrr_alt(); + translate([ 50, 0]) rrff_cloister(); + translate([100, 0]) cffr(); + translate([150, 0]) crff(); + + translate([ 0, 50]) cfrr(); // existing + translate([ 50, 50]) crcr(); + translate([100, 50]) cccf_sadface(); + translate([150, 50]) cccc_mouth(); + + translate([ 0,100]) crrf(); // existing + translate([ 50,100]) cfrf(); +} + +//anniversary(); + + + + + + + + + + + + + + + + + + + + + + + +module nice_house() +{ + difference() + { + union() { + translate([3,6,2.5]) cube([4,4,5],center=true); + translate([0,0,4]) cube([10,10,8],center=true); + intersection() { + hull() { + translate([0,0,10]) rotate([0,0,45]) + cylinder(h=4,r1=sqrt(2)*5, r2=0, $fn=4, center=true); + translate([-10,0,10]) rotate([0,0,45]) + cylinder(h=4,r1=sqrt(2)*5, r2=0, $fn=4, center=true); + } + cube([10,10,30],center=true); + } + translate([-5,-2,5]) + scale([.5,1,1]) + rotate([0,0,45]) + cylinder(h=1,r1=sqrt(2)*2, r2=0, $fn=4, center=true); + + + translate([-6,-1]) cube([2,1,4.5]); + translate([-6,-4]) cube([2,1,4.5]); + + translate([4,0]) cube([1,10,3]); + translate([-10,9]) cube([15,1,3]); + translate([-10,0]) cube([1,9,3]); + translate([-10,-5]) cube([15,1,3]); + translate([-10,-4,2]) cube([1.5,1.5,4],center=true); + translate([-10,0,2]) cube([1.5,1.5,4],center=true); + } + + //front + translate([-8,-3]) cube([4,2,4]); + translate([-8,1,1.5]) cube([4,2,2]); + translate([-8,1,5]) cube([4,2,2]); + translate([-6,0,9]) rotate([0,90]) cylinder(h=4,r=1, center=true); //cube([4,2,2]); + + //back + translate([4,1]) cube([4,2,4]); + translate([4,-3,1.5]) cube([4,2,2]); + translate([4,-3,5]) cube([4,2,2]); + + //sides + translate([-1,-8,5]) cube([2,4,2]); + translate([-2,-8,1.5]) cube([4,4,2]); + translate([-2,4,1.5]) cube([2,4,2]); + translate([-2,4,5]) cube([2,4,2]); + + } +} + + +module little_buildings() // small expansion +{ + sf1=1.5; + for (x = [0:5]) + translate([x*20 - 20,0,0]) scale([sf1,sf1,sf1]) wallTower(); + sf2=3; + for (x = [0:5]) + translate([x*20,10,0]) scale([sf2,sf2,sf2]) farmhouse(); + sf3=1; + for (x = [0:5]) + translate([x*20,30,0]) scale([sf3,sf3,sf3]) nice_house(); + + +} +little_buildings(); + diff --git a/Carcassonne Count, King & Robber Board Game BoardGameGeek.URL b/Carcassonne Count, King & Robber Board Game BoardGameGeek.URL new file mode 100644 index 0000000..9b4865c --- /dev/null +++ b/Carcassonne Count, King & Robber Board Game BoardGameGeek.URL @@ -0,0 +1,6 @@ +[InternetShortcut] +URL=http://boardgamegeek.com/boardgameexpansion/33458/carcassonne-count-king-robber +IDList= +HotKey=0 +IconFile=C:\Users\TK\AppData\Local\Mozilla\Firefox\Profiles\533h6x35.default\shortcutCache\Gv3ZDmHeEHZpdOZIyajNrg==.ico +IconIndex=0 diff --git a/Carcassonne Halb so wild Board Game BoardGameGeek.URL b/Carcassonne Halb so wild Board Game BoardGameGeek.URL new file mode 100644 index 0000000..fb106d6 --- /dev/null +++ b/Carcassonne Halb so wild Board Game BoardGameGeek.URL @@ -0,0 +1,6 @@ +[InternetShortcut] +URL=http://boardgamegeek.com/boardgameexpansion/166052/carcassonne-halb-so-wild +IDList= +HotKey=0 +IconFile=C:\Users\TK\AppData\Local\Mozilla\Firefox\Profiles\533h6x35.default\shortcutCache\7g3dM0yKH1Vojef6U3dGWw==.ico +IconIndex=0 diff --git a/Carcassonne Hunters and Gatherers Board Game BoardGameGeek.URL b/Carcassonne Hunters and Gatherers Board Game BoardGameGeek.URL new file mode 100644 index 0000000..51a9ad8 --- /dev/null +++ b/Carcassonne Hunters and Gatherers Board Game BoardGameGeek.URL @@ -0,0 +1,6 @@ +[InternetShortcut] +URL=http://boardgamegeek.com/boardgame/4390/carcassonne-hunters-and-gatherers +IDList= +HotKey=0 +IconFile=C:\Users\TK\AppData\Local\Mozilla\Firefox\Profiles\533h6x35.default\shortcutCache\8aMw7opBHz7JVc5+boJZjQ==.ico +IconIndex=0 diff --git a/Carcassonne Little Buildings Board Game BoardGameGeek.URL b/Carcassonne Little Buildings Board Game BoardGameGeek.URL new file mode 100644 index 0000000..f98ee31 --- /dev/null +++ b/Carcassonne Little Buildings Board Game BoardGameGeek.URL @@ -0,0 +1,6 @@ +[InternetShortcut] +URL=http://boardgamegeek.com/boardgameexpansion/130998/carcassonne-little-buildings +IDList= +HotKey=0 +IconFile=C:\Users\TK\AppData\Local\Mozilla\Firefox\Profiles\533h6x35.default\shortcutCache\rGO02TClgnsDt2vTpKq2_Q==.ico +IconIndex=0 diff --git a/Carcassonne The Festival Image BoardGameGeek.URL b/Carcassonne The Festival Image BoardGameGeek.URL new file mode 100644 index 0000000..b523712 --- /dev/null +++ b/Carcassonne The Festival Image BoardGameGeek.URL @@ -0,0 +1,6 @@ +[InternetShortcut] +URL=http://boardgamegeek.com/image/2209101/carcassonne-festival +IDList= +HotKey=0 +IconFile=C:\Users\TK\AppData\Local\Mozilla\Firefox\Profiles\533h6x35.default\shortcutCache\B7592NQM5ZO_389r_fXJog==.ico +IconIndex=0 diff --git a/Carcassonne The Mini Expansion Board Game BoardGameGeek.URL b/Carcassonne The Mini Expansion Board Game BoardGameGeek.URL new file mode 100644 index 0000000..74828f5 --- /dev/null +++ b/Carcassonne The Mini Expansion Board Game BoardGameGeek.URL @@ -0,0 +1,6 @@ +[InternetShortcut] +URL=http://boardgamegeek.com/boardgameexpansion/26615/carcassonne-mini-expansion +IDList= +HotKey=0 +IconFile=C:\Users\TK\AppData\Local\Mozilla\Firefox\Profiles\533h6x35.default\shortcutCache\OQKrOl9BQm31OY_e9b6ZIQ==.ico +IconIndex=0 diff --git a/kingandscout.jpg b/kingandscout.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6ceffc0b02202791bf2e53e07bdef99ce0bebba GIT binary patch literal 38995 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 z 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