// Ottoman hammam bathhouse
// simple approach: three rooms in a row, each with a dome on top
var Y = 5; // ground level
// ground
fill(0, Y - 1, 0, 79, Y - 1, 79, 'grass_block');
fill(0, Y - 4, 0, 79, Y - 2, 79, 'dirt');
// ---- hot room (back) ----
fill(28, Y, 10, 52, Y + 8, 34, 'sandstone');
fill(29, Y + 1, 11, 51, Y + 8, 33, 'air');
fill(29, Y, 11, 51, Y, 33, 'quartz_block');
// ---- cool passage (middle) ----
fill(34, Y, 35, 46, Y + 6, 45, 'sandstone');
fill(35, Y + 1, 36, 45, Y + 6, 44, 'air');
fill(35, Y, 36, 45, Y, 44, 'quartz_block');
// ---- changing room (front) ----
fill(28, Y, 46, 52, Y + 9, 70, 'sandstone');
fill(29, Y + 1, 47, 51, Y + 9, 69, 'air');
fill(29, Y, 47, 51, Y, 69, 'quartz_block');
// ---- domes ----
makeSphere(40, Y + 9, 22, 'gray_concrete', 11, true);
fill(28, Y, 10, 52, Y + 8, 34, 'air');
fill(28, Y, 10, 52, Y + 8, 10, 'sandstone');
fill(28, Y, 34, 52, Y + 8, 34, 'sandstone');
fill(28, Y, 10, 28, Y + 8, 34, 'sandstone');
fill(52, Y, 10, 52, Y + 8, 34, 'sandstone');
fill(29, Y, 11, 51, Y, 33, 'quartz_block');
makeSphere(40, Y + 7, 40, 'gray_concrete', 6, true);
makeSphere(40, Y + 10, 58, 'gray_concrete', 12, true);
// cut the bottom half of the spheres off so they are domes
fill(0, Y, 0, 79, Y + 8, 79, 'air');
// rebuild the walls after cutting (hot room)
fill(28, Y, 10, 52, Y + 8, 10, 'sandstone');
fill(28, Y, 34, 52, Y + 8, 34, 'sandstone');
fill(28, Y, 10, 28, Y + 8, 34, 'sandstone');
fill(52, Y, 10, 52, Y + 8, 34, 'sandstone');
// cool passage
fill(34, Y, 35, 46, Y + 6, 35, 'sandstone');
fill(34, Y, 45, 46, Y + 6, 45, 'sandstone');
fill(34, Y, 35, 34, Y + 6, 45, 'sandstone');
fill(46, Y, 35, 46, Y + 6, 45, 'sandstone');
// changing room
fill(28, Y, 46, 52, Y + 8, 46, 'sandstone');
fill(28, Y, 70, 52, Y + 8, 70, 'sandstone');
fill(28, Y, 46, 28, Y + 8, 70, 'sandstone');
fill(52, Y, 46, 52, Y + 8, 70, 'sandstone');
// floors
fill(29, Y, 11, 51, Y, 33, 'quartz_block');
fill(35, Y, 36, 45, Y, 44, 'quartz_block');
fill(29, Y, 47, 51, Y, 69, 'quartz_block');
// ground back
fill(0, Y - 1, 0, 79, Y - 1, 79, 'grass_block');
// roof slabs between the domes
fill(28, Y + 9, 10, 52, Y + 9, 34, 'sandstone');
fill(34, Y + 7, 35, 46, Y + 7, 45, 'sandstone');
fill(28, Y + 10, 46, 52, Y + 10, 70, 'sandstone');
// holes for the domes
makeCylinder(40, Y + 9, 22, 'air', 9, 1, false);
makeCylinder(40, Y + 7, 40, 'air', 5, 1, false);
makeCylinder(40, Y + 10, 58, 'air', 10, 1, false);
// ---- doors ----
fill(39, Y + 1, 34, 41, Y + 3, 35, 'air');
fill(39, Y + 1, 45, 41, Y + 3, 46, 'air');
fill(39, Y + 1, 70, 41, Y + 3, 70, 'air');
// ---- windows ----
var i;
for (i = 50; i <= 66; i = i + 4) {
fill(28, Y + 3, i, 28, Y + 5, i + 1, 'light_blue_stained_glass');
fill(52, Y + 3, i, 52, Y + 5, i + 1, 'light_blue_stained_glass');
}
for (i = 14; i <= 30; i = i + 4) {
fill(28, Y + 3, i, 28, Y + 5, i + 1, 'light_blue_stained_glass');
fill(52, Y + 3, i, 52, Y + 5, i + 1, 'light_blue_stained_glass');
}
// ---- oculi in the domes ----
var a;
for (a = 0; a < 8; a++) {
var ang = a * 0.785;
pb(40 + Math.round(8 * Math.cos(ang)), Y + 14, 58 + Math.round(8 * Math.sin(ang)), 'white_stained_glass');
pb(40 + Math.round(7 * Math.cos(ang)), Y + 13, 22 + Math.round(7 * Math.sin(ang)), 'white_stained_glass');
}
// ---- portico ----
for (i = 30; i <= 50; i = i + 5) {
fill(i, Y + 1, 74, i, Y + 7, 74, 'sandstone');
}
fill(30, Y + 8, 73, 50, Y + 8, 75, 'sandstone');
// voussoirs
for (i = 30; i <= 50; i++) {
if (i % 2 === 0) {
pb(i, Y + 7, 73, 'red_terracotta');
} else {
pb(i, Y + 7, 73, 'quartz_block');
}
}
// ---- interior: hot room platform ----
fill(36, Y + 1, 18, 44, Y + 2, 26, 'quartz_block');
// ---- basins ----
fill(31, Y + 1, 14, 31, Y + 1, 14, 'water');
fill(49, Y + 1, 14, 49, Y + 1, 14, 'water');
fill(31, Y + 1, 30, 31, Y + 1, 30, 'water');
fill(49, Y + 1, 30, 49, Y + 1, 30, 'water');
// ---- fountain in the changing room ----
fill(37, Y + 1, 55, 43, Y + 1, 61, 'water');
fill(40, Y + 1, 58, 40, Y + 3, 58, 'quartz_block');
// ---- stairs to the gallery ----
for (i = 0; i < 6; i++) {
ps(31, Y + 1 + i, 66 - i, 'spruce_stairs[facing=north]');
}
// gallery
fill(29, Y + 7, 47, 32, Y + 7, 69, 'spruce_planks');
fill(48, Y + 7, 47, 51, Y + 7, 69, 'spruce_planks');
// ---- lanterns ----
for (i = 50; i <= 66; i = i + 4) {
pb(30, Y + 5, i, 'lantern');
pb(50, Y + 5, i, 'lantern');
}
for (i = 14; i <= 30; i = i + 4) {
pb(30, Y + 5, i, 'lantern');
pb(50, Y + 5, i, 'lantern');
}