// === BUILD PLAN ===
// Style: modern alpine / brutalist-timber mountain infrastructure
// Footprint: L-composite — station hall 19x17 (x48-66, z28-44) + open boarding platform 14x13
// (x34-47, z30-42) cantilevered west on concrete piers + south panorama terrace
// Height: floor Y27, walk Y28, wall top Y34, shallow gable roof Y35->ridge Y40, gantry Y44
// Lower level: machinery floor carved in the rock, floor Y21, walk Y22, ceiling Y26
//
// GROUND FLOOR (top-down, 1 char = 1 block, z increases downward = toward camera):
// x: 34........47 48................66
// z28 #########W######### W = clerestory windows
// z31 PLATFORM # ticket counter # G = boarding gate (west portal)
// z34 [gondola] G . stair down # stair: staircase() x56-62 walk22->walk28
// z38 [ cabin ] G waiting hall #
// z43 # benches / rug #
// z44 ###GGGGGGGGGGGGG### G = panoramic glazing (+Z facade)
// z45..z50 PANORAMA TERRACE (railings, benches, lampposts, telescope)
//
// FRONT ELEVATION (+Z, the render camera side):
// ______/^\______ shallow gable, 2-block eave overhang both sides
// |GGGGGGGGGGGGG| panoramic glazing, spruce mullions
// |###GG###GG###| concrete plinth -> timber cladding gradient
// ================= polished deepslate plinth, wider than the wall (relief)
//
// MATERIALS PLAN:
// plinth/base : polished_deepslate + deepslate_tiles — WHY: reads as the rock anchor, dark = shadow low
// walls : gradientPalette Y28->Y34 gray_concrete -> light_gray_concrete -> stripped_spruce_log
// -> spruce_planks {noise:0.2} — WHY: literal concrete-below / timber-above
// cladding, and dark->light fakes AO up the wall
// roof : noisePalette spruce_stairs(55)+dark_oak_stairs(30)+deepslate_tile_stairs(15) — teja variation
// steel parts : iron_block / iron_bars / chain — WHY: contrast against concrete+timber
// terrain : patches(stone/andesite/gravel/deepslate) + snow_block above Y23
// accents : lanterns, red_concrete gondola (the only saturated color = focal point)
// Rooms: waiting hall (benches, rug, lanterns, plants), ticket counter (counter run, barrels,
// lectern, sign), machinery floor (bull-wheel drive, anvil, barrels, sea lanterns)
// STAIR PLAN: delta = 28-22 = 6 -> single straight flight east, 7 cells x56..x62 @ z32,
// staircase(56,32,22,28,"east") punches its own floor hole + headroom. Railed above.
// === END PLAN ===
var floorY = 27, walkY = 28, wallTopY = 34, roofBaseY = 35;
var bFloorY = 21, bWalkY = 22, bCeilY = 26;
var hx1 = 48, hx2 = 66, hz1 = 28, hz2 = 44;
// ---------------------------------------------------------------- TERRAIN (superpowers)
var hn = hills({ base: 0, amp: 4, scale: 0.055, seed: 11 });
var baseH = function (x, z) {
var v = 8 + x * 0.30 + hn(x, z);
if (v < 3) v = 3; if (v > 32) v = 32;
return Math.round(v);
};
var pad = flatten(baseH, { x0: 40, z0: 16, x1: 78, z1: 56 }, 26, 14);
var land = blob(40, 36, 46, { irregularity: 0.35, seed: 5 });
var rock = patches(['stone', 'andesite', 'gravel', 'deepslate'], 0.05, 3);
var matFn = function (x, z) {
var y = pad(x, z);
var p = rock(x, z);
var n = noise2d('perlin', x, z, { seed: 77, freq: 0.055 });
if (y >= 24) return n > -0.28 ? 'snow_block' : p;
if (y >= 17) return n > 0.18 ? 'snow_block' : p;
return n > 0.30 ? 'coarse_dirt' : p;
};
surface(land, pad, matFn, { sub: 'stone', deep: 'deepslate', depth: 5 });
checkpoint('TERRAIN');
// solid rock mass under the station so the machinery floor is carved, not floating
fill(45, 12, 25, 69, 26, 47, 'stone');
fill(45, 22, 25, 69, 26, 47, 'deepslate');
checkpoint('SPUR');
// ---------------------------------------------------------------- LOWER MACHINERY FLOOR
fill(49, bFloorY, 29, 65, bFloorY, 43, 'polished_andesite');
fill(49, bWalkY, 29, 65, bCeilY - 1, 43, 'air');
fill(49, bCeilY, 29, 65, bCeilY, 43, 'deepslate_tiles');
// rock walls dressed in tiles
fill(48, bWalkY, 28, 48, bCeilY - 1, 44, 'deepslate_bricks');
fill(66, bWalkY, 28, 66, bCeilY - 1, 44, 'deepslate_bricks');
fill(48, bWalkY, 28, 66, bCeilY - 1, 28, 'deepslate_bricks');
fill(48, bWalkY, 44, 66, bCeilY - 1, 44, 'deepslate_bricks');
checkpoint('BASEMENT_SHELL');
// ---------------------------------------------------------------- STATION FLOOR SLAB
fill(hx1, 26, hz1, hx2, 26, hz2, 'polished_deepslate');
fill(hx1, floorY, hz1, hx2, floorY, hz2,
noisePalette([{ block: 'polished_andesite', weight: 55 }, { block: 'smooth_stone', weight: 30 }, { block: 'polished_diorite', weight: 15 }], { seed: 7, freq: 0.18 }));
// plinth one block wider than the wall line => facade relief
fill(hx1 - 1, floorY, hz1 - 1, hx2 + 1, floorY, hz2 + 1, 'polished_deepslate');
fill(hx1, floorY, hz1, hx2, floorY, hz2,
noisePalette([{ block: 'polished_andesite', weight: 55 }, { block: 'smooth_stone', weight: 30 }, { block: 'polished_diorite', weight: 15 }], { seed: 7, freq: 0.18 }));
checkpoint('SLAB');
// ---------------------------------------------------------------- LAYERED: FORM IN PLACEHOLDER
makeWalls(hx1, walkY, hz1, hx2, wallTopY, hz2, 'blue_wool');
// carve openings (mask = only the placeholder, so nothing else is touched)
clearMasked(50, walkY + 1, hz2, 64, 33, hz2, onlyMaterial('blue_wool')); // panoramic +Z glazing
clearMasked(hx2, walkY + 1, 31, hx2, 32, 41, onlyMaterial('blue_wool')); // +X window band
clearMasked(52, 30, hz1, 62, 32, hz1, onlyMaterial('blue_wool')); // clerestory north
clearMasked(hx1, walkY, 33, hx1, 32, 39, onlyMaterial('blue_wool')); // boarding gate (west)
checkpoint('FORM_CARVED');
// TEXTURE LAST — gradient concrete -> timber up the wall
var wallPal = gradientPalette(walkY, wallTopY, [
{ block: 'gray_concrete', from: 0 },
{ block: 'light_gray_concrete', from: 0.22 },
{ block: 'stripped_spruce_log', from: 0.5 },
{ block: 'spruce_planks', from: 0.72 }
], { noise: 0.22, seed: 4 });
// FIX: replaceMasked + position-palette was a silent no-op -> the blue_wool placeholder stayed.
// Paint the wall planes directly with the gradient, then re-open the carved slots (the glazing
// pass further down re-glazes them with fillMasked(onlyAir)).
fill(hx1, walkY, hz1, hx2, wallTopY, hz1, wallPal);
fill(hx1, walkY, hz2, hx2, wallTopY, hz2, wallPal);
fill(hx1, walkY, hz1, hx1, wallTopY, hz2, wallPal);
fill(hx2, walkY, hz1, hx2, wallTopY, hz2, wallPal);
fill(50, walkY + 1, hz2, 64, 33, hz2, 'air');
fill(hx2, walkY + 1, 31, hx2, 32, 41, 'air');
fill(52, 30, hz1, 62, 32, hz1, 'air');
fill(hx1, walkY, 33, hx1, 32, 39, 'air');
replaceMasked(hx1 - 3, walkY, hz1 - 3, hx2 + 3, wallTopY + 2, hz2 + 3, 'light_gray_concrete', onlyMaterial('blue_wool'));
checkpoint('WALL_TEXTURE');
// wall depth: pilasters standing PROUD of the facade every 4 blocks + cornice
var px, pz;
for (px = hx1 + 2; px <= hx2 - 2; px += 4) {
fill(px, walkY, hz2 + 1, px, wallTopY, hz2 + 1, 'dark_oak_log[axis=y]');
fill(px, walkY, hz1 - 1, px, wallTopY, hz1 - 1, 'dark_oak_log[axis=y]');
}
for (pz = hz1 + 3; pz <= hz2 - 3; pz += 4) {
fill(hx2 + 1, walkY, pz, hx2 + 1, wallTopY, pz, 'dark_oak_log[axis=y]');
}
fill(hx1 - 1, wallTopY, hz1 - 1, hx2 + 1, wallTopY, hz2 + 1, 'dark_oak_slab[type=top]'); // cornice band
checkpoint('PILASTERS');
// glazing + mullions
fillMasked(50, walkY + 1, hz2, 64, 33, hz2, 'glass_pane', onlyAir());
fillMasked(hx2, walkY + 1, 31, hx2, 32, 41, 'glass_pane', onlyAir());
fillMasked(52, 30, hz1, 62, 32, hz1, 'glass_pane', onlyAir());
var mx;
for (mx = 53; mx <= 62; mx += 3) fill(mx, walkY + 1, hz2, mx, 33, hz2, 'stripped_spruce_log[axis=y]');
for (pz = 33; pz <= 39; pz += 3) fill(hx2, walkY + 1, pz, hx2, 32, pz, 'stripped_spruce_log[axis=y]');
checkpoint('GLAZING');
// ---------------------------------------------------------------- ROOF (shallow gable, 2-block eaves)
var rmat = noisePalette([{ block: 'spruce_stairs', weight: 55 }, { block: 'dark_oak_stairs', weight: 30 }, { block: 'deepslate_tile_stairs', weight: 15 }], { seed: 9, freq: 0.15 });
var smat = noisePalette([{ block: 'spruce_planks', weight: 55 }, { block: 'dark_oak_planks', weight: 30 }, { block: 'deepslate_tiles', weight: 15 }], { seed: 9, freq: 0.15 });
function roofYat(x) {
if (x <= 56) return roofBaseY + Math.floor((x - 46) / 2);
if (x >= 58) return roofBaseY + Math.floor((68 - x) / 2);
return 40;
}
var rx, rz, ry;
for (rz = 26; rz <= 46; rz++) {
for (rx = 46; rx <= 68; rx++) {
ry = roofYat(rx);
if (ry - 1 >= roofBaseY) fill(rx, roofBaseY, rz, rx, ry - 1, rz, smat); // solid wedge = no roof gaps
if (rx === 57) { pb(rx, ry, rz, 'dark_oak_log[axis=z]'); } // solid ridge beam
else if (rx < 57 && (rx - 46) % 2 === 0) roofStair(rx, ry, rz, rmat(rx, 0, rz), 'west');
else if (rx > 57 && (68 - rx) % 2 === 0) roofStair(rx, ry, rz, rmat(rx, 0, rz), 'east');
else pb(rx, ry, rz, smat(rx, ry, rz));
}
}
// soffit under the eaves
fill(46, wallTopY, 26, 47, wallTopY, 46, 'dark_oak_slab[type=top]');
fill(67, wallTopY, 26, 68, wallTopY, 46, 'dark_oak_slab[type=top]');
checkpoint('ROOF');
// ---------------------------------------------------------------- CLEAR INTERIOR + TRUSSES
fill(49, walkY, 29, 65, roofBaseY - 1, 43, 'air');
var tz;
for (tz = 31; tz <= 41; tz += 5) {
fill(49, roofBaseY - 1, tz, 65, roofBaseY - 1, tz, 'stripped_spruce_log[axis=x]');
fill(50, roofBaseY - 2, tz, 50, roofBaseY - 2, tz, 'spruce_fence');
fill(64, roofBaseY - 2, tz, 64, roofBaseY - 2, tz, 'spruce_fence');
}
checkpoint('CLEAR_TRUSS');
// ---------------------------------------------------------------- STAIR DOWN TO MACHINERY
staircase(56, 32, bWalkY, walkY, 'east', { width: 2, material: 'spruce_stairs', rail: true, support: 'deepslate_bricks' });
// FIX: the headroom carve of staircase() punched a hole clean through the ceiling AND the roof
// above the arrival cell (sky visible from inside). Re-lay the roof wedge over the stair bay.
var fxr, fzr, fry;
for (fxr = 54; fxr <= 66; fxr++) {
for (fzr = 28; fzr <= 36; fzr++) {
fry = roofYat(fxr);
fill(fxr, roofBaseY, fzr, fxr, fry - 1, fzr, smat);
if (fxr === 57) pb(fxr, fry, fzr, 'dark_oak_log[axis=z]');
else if (fxr < 57 && (fxr - 46) % 2 === 0) roofStair(fxr, fry, fzr, rmat(fxr, 0, fzr), 'west');
else if (fxr > 57 && (68 - fxr) % 2 === 0) roofStair(fxr, fry, fzr, rmat(fxr, 0, fzr), 'east');
else pb(fxr, fry, fzr, smat(fxr, fry, fzr));
}
}
// railing round the floor hole on the hall side
var gx;
for (gx = 55; gx <= 63; gx++) { pb(gx, walkY, 30, 'spruce_fence'); pb(gx, walkY, 34, 'spruce_fence'); }
pb(55, walkY, 31, 'spruce_fence'); pb(55, walkY, 33, 'spruce_fence');
ps(54, walkY, 32, 'oak_wall_sign[facing=west]');
checkpoint('STAIR');
// ---------------------------------------------------------------- INTERIOR: waiting hall (+Z)
rug(52, walkY, 37, 11, 5, 'red', 'orange');
var bz, bx2;
for (bz = 37; bz <= 41; bz += 4) {
for (bx2 = 52; bx2 <= 62; bx2++) {
chairStair(bx2, walkY, bz, 'spruce_stairs', 'south');
chairStair(bx2, walkY, bz + 1, 'spruce_stairs', 'north');
}
}
// backrest posts for the bench rows
for (bx2 = 52; bx2 <= 62; bx2 += 5) { pb(bx2, walkY + 1, 37, 'spruce_fence'); pb(bx2, walkY + 1, 42, 'spruce_fence'); }
// hanging lanterns from the trusses
var lx;
for (lx = 52; lx <= 62; lx += 5) {
pb(lx, roofBaseY - 2, 36, 'chain[axis=y]'); ps(lx, roofBaseY - 3, 36, 'lantern[hanging=true]');
pb(lx, roofBaseY - 2, 41, 'chain[axis=y]'); ps(lx, roofBaseY - 3, 41, 'lantern[hanging=true]');
}
// potted plants + luggage along the glazing
pb(50, walkY, 43, 'flower_pot'); pb(64, walkY, 43, 'flower_pot');
pb(51, walkY, 43, 'barrel'); pb(63, walkY, 43, 'barrel');
pb(50, walkY, 36, 'spruce_leaves'); pb(50, walkY - 1, 36, 'flower_pot');
checkpoint('WAITING_HALL');
// ---------------------------------------------------------------- INTERIOR: ticket counter (north)
var cx2;
for (cx2 = 50; cx2 <= 55; cx2++) {
pb(cx2, walkY, 31, 'stripped_spruce_log[axis=x]');
ps(cx2, walkY + 1, 31, 'spruce_stairs[facing=south,half=top]');
}
pb(52, walkY, 31, 'barrel');
ps(50, walkY + 1, 30, 'oak_wall_sign[facing=south]');
ps(54, walkY, 30, 'lectern[facing=south]');
pb(51, walkY, 30, 'chest'); pb(55, walkY, 30, 'bookshelf');
pb(53, roofBaseY - 2, 31, 'chain[axis=y]'); ps(53, roofBaseY - 3, 31, 'lantern[hanging=true]');
shelfWall(50, walkY, 29, 'east', 5, 2);
rug(50, walkY, 33, 5, 3, 'light_gray', 'gray');
// departure gate furniture near the west portal
pb(49, walkY, 32, 'spruce_fence'); pb(49, walkY, 40, 'spruce_fence');
ps(49, walkY + 1, 36, 'oak_wall_sign[facing=east]');
checkpoint('TICKET_HALL');
// ---------------------------------------------------------------- MACHINERY FLOOR CONTENT
function wheel(cx, cy, z, r, rim, spoke) {
var a, i, wx, wy;
for (a = 0; a < 360; a += 5) {
wx = cx + Math.round(r * Math.cos(a * Math.PI / 180));
wy = cy + Math.round(r * Math.sin(a * Math.PI / 180));
pb(wx, wy, z, rim);
}
for (a = 0; a < 360; a += 45) {
for (i = 1; i < r; i++) {
pb(cx + Math.round(i * Math.cos(a * Math.PI / 180)), cy + Math.round(i * Math.sin(a * Math.PI / 180)), z, spoke);
}
}
pb(cx, cy, z, 'iron_block');
}
wheel(54, bWalkY + 1, 33, 3, 'iron_block', 'iron_bars');
wheel(54, bWalkY + 1, 39, 3, 'iron_block', 'iron_bars');
fill(54, bWalkY + 1, 34, 54, bWalkY + 1, 38, 'iron_block'); // axle between the drums
fill(58, bWalkY, 31, 62, bWalkY, 31, 'iron_block'); // motor bed
ps(60, bWalkY + 1, 31, 'blast_furnace[facing=south,lit=false]');
ps(59, bWalkY, 33, 'anvil[facing=south]');
pb(61, bWalkY, 33, 'barrel'); pb(62, bWalkY, 33, 'chest');
pb(50, bWalkY, 41, 'barrel'); pb(51, bWalkY, 41, 'barrel'); pb(50, bWalkY + 1, 41, 'barrel');
ps(58, bWalkY, 41, 'cauldron[level=0]'); ps(52, bWalkY, 30, 'crafting_table');
var sy;
for (sy = 31; sy <= 41; sy += 5) { pb(51, bCeilY - 1, sy, 'sea_lantern'); pb(63, bCeilY - 1, sy, 'sea_lantern'); }
pb(56, bCeilY - 1, 36, 'sea_lantern');
// cable run from the drums up through the floor to the gantry (service shaft, boxed in)
fill(50, bWalkY, 35, 53, bWalkY, 35, 'iron_bars');
checkpoint('MACHINERY');
// ---------------------------------------------------------------- BOARDING PLATFORM (west)
var ppx, ppz;
fill(34, floorY, 30, 47, floorY, 42, 'smooth_stone');
fill(34, floorY, 30, 47, floorY, 42, noisePalette([{ block: 'smooth_stone', weight: 60 }, { block: 'polished_andesite', weight: 25 }, { block: 'gray_concrete', weight: 15 }], { seed: 3, freq: 0.2 }));
fill(34, 26, 30, 47, 26, 42, 'stone_bricks');
// concrete piers down to the natural slope
for (ppx = 35; ppx <= 46; ppx += 5) {
for (ppz = 31; ppz <= 41; ppz += 5) {
fill(ppx, pad(ppx, ppz), ppz, ppx, 25, ppz, 'stone_bricks');
fill(ppx, pad(ppx, ppz), ppz, ppx, 25, ppz, gradientPalette(pad(ppx, ppz), 25, [{ block: 'deepslate_bricks', from: 0 }, { block: 'stone_bricks', from: 0.45 }, { block: 'light_gray_concrete', from: 0.8 }], { noise: 0.2 }));
}
}
// platform railing (open on the docking side, x34..41)
for (ppx = 42; ppx <= 47; ppx++) { pb(ppx, walkY, 30, 'iron_bars'); pb(ppx, walkY, 42, 'iron_bars'); }
for (ppz = 30; ppz <= 42; ppz++) { pb(34, walkY, ppz, 'iron_bars'); }
for (ppz = 30; ppz <= 32; ppz++) { pb(41, walkY, ppz, 'iron_bars'); pb(41, walkY, 42 - (ppz - 30), 'iron_bars'); }
// canopy over the platform half next to the hall (x42..47)
for (ppx = 42; ppx <= 47; ppx += 5) {
for (ppz = 31; ppz <= 41; ppz += 10) {
fill(ppx, walkY, ppz, ppx, roofBaseY - 1, ppz, 'polished_andesite');
pb(ppx, roofBaseY - 1, ppz, 'iron_block');
}
}
fill(41, roofBaseY, 29, 47, roofBaseY, 43, 'smooth_stone_slab');
fill(41, roofBaseY - 1, 29, 41, roofBaseY - 1, 43, 'dark_oak_slab[type=top]');
lampPost(43, walkY, 30, 4, 'iron_bars');
lampPost(43, walkY, 42, 4, 'iron_bars');
pb(45, walkY, 32, 'barrel'); pb(45, walkY + 1, 32, 'barrel'); pb(46, walkY, 32, 'chest');
ps(44, walkY, 40, 'lectern[facing=west]');
checkpoint('PLATFORM');
// ---------------------------------------------------------------- GANTRY + BULL-WHEELS
var gz;
for (gz = 33; gz <= 39; gz += 6) {
fill(44, roofBaseY, gz, 44, 43, gz, 'iron_block');
fill(46, roofBaseY, gz, 46, 43, gz, 'iron_block');
fill(44, 43, gz, 46, 43, gz, 'iron_block');
}
fill(44, 43, 33, 44, 43, 39, 'iron_bars');
fill(46, 43, 33, 46, 43, 39, 'iron_bars');
wheel(45, 40, 34, 4, 'iron_block', 'iron_bars');
wheel(45, 40, 38, 4, 'iron_block', 'iron_bars');
fill(45, 40, 35, 45, 40, 37, 'iron_block');
checkpoint('GANTRY');
// ---------------------------------------------------------------- CABLES + PYLON + GONDOLA
drawLine(45, 40, 34, 13, 30, 34, 'chain[axis=x]');
drawLine(45, 40, 38, 13, 30, 38, 'chain[axis=x]');
drawLine(13, 30, 34, 0, 25, 34, 'chain[axis=x]');
drawLine(13, 30, 38, 0, 25, 38, 'chain[axis=x]');
// lattice pylon
var lz, ly;
for (lz = 33; lz <= 39; lz += 6) {
fill(11, pad(11, lz), lz, 11, 28, lz, 'iron_block');
fill(15, pad(15, lz), lz, 15, 28, lz, 'iron_block');
for (ly = pad(11, lz) + 2; ly <= 27; ly += 3) drawLine(11, ly, lz, 15, ly + 2, lz, 'iron_bars');
}
fill(11, 28, 33, 15, 28, 39, 'iron_bars');
fill(11, 29, 34, 15, 29, 34, 'iron_block');
fill(11, 29, 38, 15, 29, 38, 'iron_block');
pb(13, 30, 34, 'iron_block'); pb(13, 30, 38, 'iron_block');
checkpoint('PYLON');
// gondola cabin docked at the platform
fill(36, floorY + 1, 33, 40, floorY + 1, 38, 'smooth_stone');
makeWalls(36, 29, 33, 40, 32, 38, 'red_concrete');
fill(36, 30, 34, 36, 31, 37, 'glass_pane');
fill(40, 30, 34, 40, 31, 37, 'glass_pane');
fill(37, 30, 33, 39, 31, 33, 'glass_pane');
fill(37, 30, 38, 39, 31, 38, 'glass_pane');
fill(35, 33, 32, 41, 33, 39, 'smooth_stone_slab');
fill(36, 33, 33, 40, 33, 38, 'white_concrete');
fill(37, 34, 35, 39, 34, 36, 'iron_block');
fill(38, 35, 35, 38, 37, 35, 'chain[axis=y]');
fill(38, 35, 36, 38, 37, 36, 'chain[axis=y]');
ps(38, 29, 38, 'iron_door[facing=south,half=lower,hinge=left]');
ps(38, 30, 38, 'iron_door[facing=south,half=upper,hinge=left]');
checkpoint('GONDOLA');
// ---------------------------------------------------------------- PANORAMA TERRACE + SCENERY
fill(49, floorY, 45, 65, floorY, 50, noisePalette([{ block: 'polished_andesite', weight: 50 }, { block: 'smooth_stone', weight: 30 }, { block: 'stone_bricks', weight: 20 }], { seed: 6, freq: 0.2 }));
fill(48, 26, 45, 66, 26, 51, 'stone_bricks');
var ex;
for (ex = 49; ex <= 65; ex++) pb(ex, walkY, 50, 'iron_bars');
pb(48, walkY, 45, 'iron_bars'); pb(66, walkY, 45, 'iron_bars');
for (ex = 51; ex <= 63; ex += 6) {
chairStair(ex, walkY, 48, 'spruce_stairs', 'north');
chairStair(ex + 1, walkY, 48, 'spruce_stairs', 'north');
lampPost(ex - 1, walkY, 46, 4, 'iron_bars');
}
ps(57, walkY, 49, 'observer[facing=south]'); // panorama telescope base
pb(57, walkY + 1, 49, 'iron_bars');
// snow drift + rocks + trees down the slope
noisyScatter(30, 26, 20, 76, 27, 56, 'snow_block', 0.10, 21);
var tx, tz2;
for (tx = 6; tx <= 30; tx += 8) {
for (tz2 = 16; tz2 <= 56; tz2 += 13) {
if (pad(tx, tz2) < 19) placeTree(tx, pad(tx, tz2) + 1, tz2, 'spruce');
}
}
for (tx = 34; tx <= 44; tx += 5) {
pb(tx, pad(tx, 20) + 1, 20, 'stone'); pb(tx + 1, pad(tx + 1, 52) + 1, 52, 'cobblestone');
}
// stepped path from the terrace down the south slope
var sx2;
for (sx2 = 0; sx2 < 6; sx2++) {
fill(55, 26 - sx2, 51 + sx2, 59, 26 - sx2, 51 + sx2, 'stone_bricks');
fill(55, 25 - sx2, 51 + sx2, 59, 25 - sx2, 51 + sx2, 'cobblestone');
}
checkpoint('SCENERY');