// === BUILD PLAN ===
// Subject: COLOSSAL SECRETARY BIRD (Sagittarius serpentarius), mid-stride, stomping a snake.
// Scale: ~50 blocks tall. Legs = HALF the height (crane-like), body compact & HORIZONTAL,
// head small (~1/6), crest quills sweep BACK, tail two long central streamers.
// Facing +Z (the isometric/front cameras look at the +Z / +X faces).
//
// SIDE SILHOUETTE (Y up, Z -> tail left / head right):
// Y58 ((( quills sweeping back
// Y50 (OO)> head + hooked beak
// Y44 / S-curve neck
// Y36 \____#########____/ compact egg body, wings folded on the flanks
// Y28 \\ ##(black trousers)##
// Y20 \\ || || long bare legs (planted back / raised front)
// Y12 \\ || \__
// Y9 ~~~~~~~~~~||~~~~~~~~~~~~~~~~ savanna pad, snake under the raised foot
//
// FRONT SILHOUETTE (Y up, X ->):
// ....(OO).... head, orange-red face patch, black eye
// ...######... chest
// ..########.. body + folded wings (black tips)
// ...##..##... black thigh feathers
// ....|..|.... bare pink-grey legs, 2 wide
//
// MATERIALS PLAN:
// plumage : noisePalette light_gray_concrete(34)+light_gray_terracotta(24)+smooth_stone(20)+
// stone(12)+gray_concrete(10) - WHY: calm VALUE contrast; the silhouette does the work
// black : black_concrete(50)+black_terracotta(30)+blackstone(20) - WHY: trousers/wingtips/quills
// are the species' read; a solid black mass would flatten, the mix keeps volume
// legs : pink_terracotta + light_gray_terracotta banded - WHY: bare pinkish-grey tarsus
// face : orange_concrete + red_concrete patch, black eye on white - WHY: the one hot accent
// ground : terrain() savanna pad at Y8 so the planted foot rests clean and is never buried
// === END PLAN ===
var groundY = 8;
var footY = groundY + 1;
// ---------- palettes ----------
var plume = noisePalette([
{ block: 'light_gray_concrete', weight: 34 },
{ block: 'light_gray_terracotta', weight: 24 },
{ block: 'smooth_stone', weight: 20 },
{ block: 'stone', weight: 12 },
{ block: 'gray_concrete', weight: 10 }
], { seed: 3, freq: 0.14 });
var dark = noisePalette([
{ block: 'black_concrete', weight: 50 },
{ block: 'black_terracotta', weight: 30 },
{ block: 'blackstone', weight: 20 }
], { seed: 9, freq: 0.16 });
var belly = noisePalette([
{ block: 'white_concrete', weight: 40 },
{ block: 'light_gray_concrete', weight: 35 },
{ block: 'smooth_quartz', weight: 25 }
], { seed: 15, freq: 0.13 });
// ---------- helpers ----------
function ellipsoid(cx, cy, cz, rx, ry, rz, mat, shade) {
var x, y, z, dx, dy, dz, d;
for (x = Math.floor(cx - rx); x <= Math.ceil(cx + rx); x++) {
for (y = Math.floor(cy - ry); y <= Math.ceil(cy + ry); y++) {
for (z = Math.floor(cz - rz); z <= Math.ceil(cz + rz); z++) {
dx = (x - cx) / rx; dy = (y - cy) / ry; dz = (z - cz) / rz;
d = dx * dx + dy * dy + dz * dz;
if (d <= 1.0) {
if (shade && dy < -0.35) pb(x, y, z, belly(x, y, z));
else pb(x, y, z, typeof mat === 'function' ? mat(x, y, z) : mat);
}
}
}
}
}
// tapered limb: walks the segment and drops spheres of interpolated radius
function limb(x1, y1, z1, x2, y2, z2, r1, r2, mat) {
var steps = Math.round(Math.max(Math.abs(x2 - x1), Math.max(Math.abs(y2 - y1), Math.abs(z2 - z1))) * 2);
var i, t, cx, cy, cz, r;
if (steps < 1) steps = 1;
for (i = 0; i <= steps; i++) {
t = i / steps;
cx = x1 + (x2 - x1) * t;
cy = y1 + (y2 - y1) * t;
cz = z1 + (z2 - z1) * t;
r = r1 + (r2 - r1) * t;
ellipsoid(cx, cy, cz, r, r, r, mat, false);
}
}
// ===================== 1. SAVANNA GROUND =====================
var groundFn = terrain({
cx: 40, cz: 48, radius: 43, baseY: groundY, amp: 3, scale: 0.035, seed: 2, irregularity: 0.32,
surface: [
{ block: 'grass_block', w: 30 },
{ block: 'coarse_dirt', w: 26 },
{ block: 'dirt_path', w: 18 },
{ block: 'sand', w: 14 },
{ block: 'terracotta', w: 12 }
],
sub: 'dirt', deep: 'stone', depth: 4,
pads: [{ cx: 40, cz: 46, r: 17, y: groundY, falloff: 9 }]
});
// ===================== 2. LEGS (half the height, crane-like) =====================
// PLANTED leg (back, x=34) : foot z36 -> hock z40 -> hip z43
limb(34, footY, 36, 34, footY + 8, 38, 1.6, 1.4, noisePalette([
{ block: 'pink_terracotta', weight: 45 },
{ block: 'light_gray_terracotta', weight: 35 },
{ block: 'brown_terracotta', weight: 20 }
], { seed: 21, freq: 0.2 }));
limb(34, footY + 8, 38, 35, footY + 17, 42, 1.4, 2.2, noisePalette([
{ block: 'pink_terracotta', weight: 45 },
{ block: 'light_gray_terracotta', weight: 35 },
{ block: 'brown_terracotta', weight: 20 }
], { seed: 22, freq: 0.2 }));
// toes of the planted foot
limb(34, footY, 36, 34, footY, 41, 1.4, 0.9, 'light_gray_terracotta');
limb(34, footY, 36, 31, footY, 33, 1.3, 0.8, 'light_gray_terracotta');
limb(34, footY, 36, 37, footY, 33, 1.3, 0.8, 'light_gray_terracotta');
limb(34, footY, 36, 34, footY, 32, 1.2, 0.8, 'light_gray_terracotta');
// RAISED leg (front, x=46) : foot lifted to Y18 over the snake, knee forward
limb(46, footY + 9, 54, 46, footY + 14, 50, 1.5, 1.4, noisePalette([
{ block: 'pink_terracotta', weight: 45 },
{ block: 'light_gray_terracotta', weight: 35 },
{ block: 'brown_terracotta', weight: 20 }
], { seed: 23, freq: 0.2 }));
limb(46, footY + 14, 50, 45, footY + 17, 46, 1.4, 2.2, noisePalette([
{ block: 'pink_terracotta', weight: 45 },
{ block: 'light_gray_terracotta', weight: 35 },
{ block: 'brown_terracotta', weight: 20 }
], { seed: 24, freq: 0.2 }));
// splayed toes of the raised foot (mid-stomp)
limb(46, footY + 9, 54, 46, footY + 8, 58, 1.3, 0.8, 'light_gray_terracotta');
limb(46, footY + 9, 54, 43, footY + 8, 56, 1.2, 0.8, 'light_gray_terracotta');
limb(46, footY + 9, 54, 49, footY + 8, 56, 1.2, 0.8, 'light_gray_terracotta');
limb(46, footY + 9, 54, 46, footY + 9, 51, 1.2, 0.8, 'light_gray_terracotta');
// ===================== 3. BLACK THIGH FEATHERS ("trousers") =====================
ellipsoid(35, 27, 42, 4.2, 6.0, 4.6, dark, false);
ellipsoid(45, 27, 45, 4.2, 6.0, 4.6, dark, false);
// ===================== 4. BODY (compact egg, horizontal) =====================
ellipsoid(40, 33, 44, 8.2, 7.2, 13.0, plume, true);
// chest swell toward +Z
ellipsoid(40, 32, 52, 6.6, 6.0, 5.0, plume, true);
// rump taper
ellipsoid(40, 34, 33, 5.4, 5.0, 4.0, plume, false);
// ===================== 5. FOLDED WINGS with BLACK TIPS =====================
var wz, wy, side, sx;
for (side = 0; side < 2; side++) {
sx = side === 0 ? -1 : 1;
for (wz = 32; wz <= 54; wz++) {
for (wy = 28; wy <= 37; wy++) {
var span = 8.6 - Math.abs(wz - 45) * 0.16 - Math.abs(wy - 33) * 0.34;
if (span < 4) continue;
var wxp = 40 + sx * Math.round(span);
if (wz < 38) pb(wxp, wy, wz, dark(wxp, wy, wz));
else pb(wxp, wy, wz, plume(wxp, wy, wz));
}
}
// primary feather edge, stair detail along the trailing edge
for (wz = 31; wz <= 40; wz++) {
ps(40 + sx * 6, 28 - Math.floor((40 - wz) / 4), wz, 'polished_blackstone_slab[type=bottom]');
}
}
// ===================== 6. TAIL — two long central streamers + fan =====================
limb(39, 34, 32, 39, 17, 10, 2.2, 1.0, dark);
limb(41, 34, 32, 41, 15, 12, 2.2, 1.0, dark);
limb(37, 34, 32, 35, 24, 20, 2.0, 0.9, plume);
limb(43, 34, 32, 45, 24, 20, 2.0, 0.9, plume);
limb(40, 33, 32, 40, 27, 22, 3.0, 1.4, plume);
var ti;
for (ti = 0; ti < 10; ti++) {
ps(38, 33 - ti, 30 - ti * 2, 'polished_blackstone_slab[type=top]');
ps(42, 33 - ti, 30 - ti * 2, 'polished_blackstone_slab[type=top]');
}
// ===================== 7. NECK (S-curve) + HEAD =====================
limb(40, 38, 51, 40, 43, 55, 3.4, 2.8, plume);
limb(40, 43, 55, 40, 47, 56, 2.8, 2.6, plume);
ellipsoid(40, 50, 58, 4.0, 3.6, 4.4, plume, false);
// bare orange-red face patch + eyes
var fx, fy2;
for (fx = 37; fx <= 43; fx++) {
for (fy2 = 48; fy2 <= 52; fy2++) {
if ((fx - 40) * (fx - 40) / 9 + (fy2 - 50) * (fy2 - 50) / 4 <= 1) {
pb(fx, fy2, 61, 'orange_concrete');
pb(fx, fy2, 62, 'red_concrete');
}
}
}
pb(37, 51, 61, 'white_concrete'); pb(37, 51, 62, 'black_concrete');
pb(43, 51, 61, 'white_concrete'); pb(43, 51, 62, 'black_concrete');
pb(37, 50, 62, 'black_concrete'); pb(43, 50, 62, 'black_concrete');
// hooked beak
limb(40, 50, 62, 40, 50, 65, 2.0, 1.3, 'light_gray_concrete');
limb(40, 50, 65, 40, 48, 67, 1.3, 0.8, 'gray_concrete');
pb(40, 47, 67, 'black_concrete');
pb(40, 47, 66, 'black_concrete');
// ===================== 8. CREST — quills sweeping BACK =====================
var q, qx, qlen;
for (q = -3; q <= 3; q++) {
qx = 40 + q;
qlen = 12 - Math.abs(q);
limb(qx, 52, 55, qx + q, 52 + qlen, 55 - qlen, 1.3, 0.7, dark);
}
// a couple of loose quills for asymmetry
limb(38, 52, 55, 35, 61, 45, 1.1, 0.6, dark);
limb(42, 52, 55, 46, 60, 47, 1.1, 0.6, dark);
// ===================== 9. THE SNAKE UNDER THE RAISED FOOT =====================
var si, sz2, sxx, sy2;
for (si = 0; si <= 34; si++) {
sz2 = 62 - si;
sxx = 46 + Math.round(4.5 * Math.sin(si * 0.42));
sy2 = footY;
var srad = si < 4 ? 1.6 : (si > 28 ? 0.7 : 1.2);
ellipsoid(sxx, sy2, sz2, srad, srad * 0.8, srad, noisePalette([
{ block: 'moss_block', weight: 40 },
{ block: 'green_concrete', weight: 30 },
{ block: 'green_terracotta', weight: 20 },
{ block: 'yellow_terracotta', weight: 10 }
], { seed: 31, freq: 0.25 }), false);
}
pb(46, footY + 1, 62, 'green_concrete');
pb(45, footY + 1, 63, 'black_concrete');
pb(47, footY + 1, 63, 'black_concrete');
ps(46, footY + 1, 64, 'red_carpet');
// ===================== 10. SAVANNA DRESSING =====================
var trees = [[14, 70], [22, 20], [66, 74], [70, 26], [8, 44]];
var tr, tyv;
for (tr = 0; tr < trees.length; tr++) {
tyv = Math.round(groundFn(trees[tr][0], trees[tr][1])) + 1;
try { placeTree(trees[tr][0], tyv, trees[tr][1], 'acacia'); } catch (err) { }
}
var gx2, gz2, gy2, n;
for (gx2 = 2; gx2 < 78; gx2 += 2) {
for (gz2 = 2; gz2 < 94; gz2 += 2) {
if (gx2 > 26 && gx2 < 54 && gz2 > 28 && gz2 < 66) continue;
n = noise2d('perlin', gx2, gz2, { freq: 0.13, seed: 41 });
if (n > 0.12) {
gy2 = Math.round(groundFn(gx2, gz2)) + 1;
if (n > 0.55) pb(gx2, gy2, gz2, 'tall_grass');
else if (n > 0.35) pb(gx2, gy2, gz2, 'short_grass');
else if ((gx2 + gz2) % 7 === 0) pb(gx2, gy2, gz2, 'dead_bush');
}
}
}
// a few weathered rocks and bones
ellipsoid(24, groundY + 1, 60, 2.5, 1.4, 2.0, 'cobblestone', false);
ellipsoid(60, groundY + 1, 30, 3.0, 1.6, 2.4, 'andesite', false);
ps(58, groundY + 1, 62, 'bone_block[axis=x]');
ps(59, groundY + 1, 62, 'bone_block[axis=x]');