fogón

← Level pieces 23D assetfogon/nivel-jaula

Jaula

by fogonCC07349 blocks
JaulaDrag to turn it
// «Jaula» · gpt-6-sol (medium)
// A cage: a square iron cage 36x36 and 36 tall, centered, made of vertical dark iron bars 2 blocks thick every 5 blocks, with a solid iron frame at the bottom and top, a domed top with a ring handle, and a front door section with a big gold padlock.

const iron = "#394c5b";
const ironDark = "#263744";
const ironLight = "#60798a";
const ironShine = "#8ca3ae";
const gold = "#f2ac25";
const goldLight = "#ffe06a";
const goldDark = "#b86e1d";

// The cage occupies x/y 6..41: a 36×36 footprint.
function squareRail(lo, hi, z0, z1, color, width = 2) {
  box(lo, lo, z0, hi, lo + width - 1, z1, color);
  box(lo, hi - width + 1, z0, hi, hi, z1, color);
  box(lo, lo, z0, lo + width - 1, hi, z1, color);
  box(hi - width + 1, lo, z0, hi, hi, z1, color);
}

// Chunky bottom frame and a sparse floor grate.
squareRail(6, 41, 0, 2, ironDark, 3);
box(7, 6, 2, 40, 6, 2, ironLight);
box(6, 7, 2, 6, 40, 2, ironLight);
for (let p = 10; p <= 38; p += 5) {
  box(p, 9, 0, p + 1, 38, 0, iron);
  box(9, p, 0, 38, p + 1, 0, iron);
}

// Two-block-thick vertical bars, spaced five blocks apart.
for (let p = 8; p <= 38; p += 5) {
  box(p, 7, 3, p + 1, 8, 24, iron);
  box(p, 39, 3, p + 1, 40, 24, ironDark);
  box(7, p, 3, 8, p + 1, 24, iron);
  box(39, p, 3, 40, p + 1, 24, ironDark);
  box(p, 7, 5, p, 7, 22, ironLight);
  box(7, p, 5, 7, p, 22, ironLight);
}

// Strong corner posts.
for (const x of [6, 39]) {
  for (const y of [6, 39]) {
    box(x, y, 3, x + 2, y + 2, 26, ironDark);
    box(x, y, 5, x, y, 24, ironLight);
  }
}

// Solid-looking top frame, with crisp highlights on its front edges.
squareRail(6, 41, 25, 27, ironDark, 3);
box(7, 6, 27, 40, 6, 27, ironShine);
box(6, 7, 27, 6, 40, 27, ironLight);
box(9, 8, 25, 38, 8, 25, ironLight);

// A clearly framed door in the front wall.
box(15, 6, 3, 16, 7, 24, ironDark);
box(31, 6, 3, 32, 7, 24, ironDark);
box(15, 6, 3, 32, 7, 4, ironDark);
box(15, 6, 23, 32, 7, 24, ironDark);
box(16, 6, 5, 16, 6, 22, ironShine);
box(16, 6, 24, 31, 6, 24, ironLight);
for (const x of [18, 23, 28]) {
  box(x, 6, 5, x + 1, 6, 22, iron);
  box(x, 6, 6, x, 6, 21, ironLight);
}
for (const z of [7, 19]) {
  box(13, 6, z, 16, 7, z + 2, ironLight);
  set(14, 6, z + 1, ironShine);
}
box(31, 6, 12, 35, 7, 15, ironLight); // Door latch.

// Open, stepped iron dome.
const dome = [
  [7, 40, 28],
  [9, 38, 29],
  [12, 35, 30],
  [15, 32, 31],
  [19, 28, 32]
];
for (const [lo, hi, z] of dome) {
  squareRail(lo, hi, z, z, iron, 2);
  box(lo + 2, lo, z, hi - 2, lo, z, ironLight);
}
// Ribs join the nested rings at the four compass points.
for (let i = 0; i < dome.length - 1; i++) {
  const [outer, far, z] = dome[i];
  const [inner, near] = dome[i + 1];
  line(23, outer, z, 23, inner, z + 1, 1, ironLight);
  line(23, far, z, 23, near, z + 1, 1, iron);
  line(outer, 23, z, inner, 23, z + 1, 1, ironLight);
  line(far, 23, z, near, 23, z + 1, 1, iron);
}
box(21, 21, 32, 26, 26, 32, ironDark);

// Upright ring handle, open through its center.
box(19, 21, 32, 20, 24, 34, ironDark);
box(27, 21, 32, 28, 24, 34, ironDark);
box(20, 21, 35, 27, 24, 35, iron);
box(20, 21, 35, 27, 21, 35, ironShine);
box(19, 21, 33, 19, 21, 34, ironLight);

// Oversized, shiny gold padlock on the door's front.
box(28, 6, 16, 29, 7, 19, goldDark);
box(33, 6, 16, 34, 7, 19, goldDark);
box(29, 6, 19, 33, 7, 20, goldLight);
box(29, 6, 17, 29, 6, 19, goldLight);
box(33, 6, 17, 33, 6, 19, gold);
box(27, 6, 9, 35, 7, 16, goldDark);
box(28, 6, 10, 34, 6, 16, gold);
box(28, 6, 16, 34, 6, 16, goldLight);
box(28, 6, 11, 28, 6, 15, goldLight);
box(29, 6, 10, 33, 6, 10, goldLight);
// Readable dark keyhole.
box(31, 6, 13, 32, 6, 14, ironDark);
set(31, 6, 12, ironDark);
set(32, 6, 12, ironDark);