fogón

← Level pieces 23D assetfogon/nivel-pendulo

Péndulo de hacha

by fogonCC07962 blocks
Péndulo de hachaDrag to turn it
// «Péndulo de hacha» · gpt-6-sol (medium)
// A swinging axe pendulum trap: a dark stone ceiling beam across the top (x 4..43, y 20..27, z 42..47) held by two stone pillars at x 4..9 and x 38..43 down to z 0. From the middle of the beam hangs a long iron chain (2 blocks thick) down to z 14, ending in a huge double-bladed steel axe head (about 24 wide on x, 14 tall) with a darker edge and a red center gem.

const stone = "#929fb2";
const stoneLight = "#b8c5d4";
const stoneDark = "#69788e";
const mortar = "#77869b";

// Fixed stone frame.
part("body", [24, 24, 42]);
box(4, 20, 0, 9, 27, 46, stone);
box(38, 20, 0, 43, 27, 46, stone);
box(4, 20, 42, 43, 27, 47, stone);

// Clean, chunky highlights and shadowed edges.
box(5, 20, 0, 6, 20, 41, stoneLight);
box(39, 20, 0, 40, 20, 41, stoneLight);
box(9, 20, 0, 9, 27, 41, stoneDark);
box(43, 20, 0, 43, 27, 41, stoneDark);
box(4, 20, 46, 43, 20, 47, stoneLight);
box(4, 21, 47, 43, 27, 47, stoneLight);
box(4, 27, 42, 43, 27, 46, stoneDark);

// Sparse block seams on the pillars and ceiling beam.
for (let z = 7; z < 42; z += 8) {
  box(4, 20, z, 9, 20, z, mortar);
  box(38, 20, z, 43, 20, z, mortar);
}
for (const x of [12, 20, 29, 37]) {
  box(x, 20, 43, x, 20, 45, mortar);
}
box(4, 20, 42, 43, 20, 42, stoneDark);

// Gold mounting plate at the hinge.
box(20, 19, 42, 27, 19, 45, "#bd812e");
box(21, 18, 43, 26, 18, 45, "#f4c556");
box(22, 17, 43, 25, 17, 44, "#ffe18a");
set(21, 17, 43, "#fff0a5");
set(26, 17, 43, "#fff0a5");

// Chain and axe swing as one rigid assembly.
part("pendulo", [24, 24, 42]);

// Two-block-thick iron chain, with alternating chunky links.
box(23, 23, 14, 24, 24, 41, "#526478");
for (let z = 16; z <= 40; z += 4) {
  box(23, 22, z, 24, 22, z + 1, "#8498a9");
  box(23, 25, z + 2, 24, 25, z + 3, "#36495d");
  box(23, 23, z + 1, 23, 23, z + 2, "#c0cdd5");
}

// Steel blade profiles, mirrored around the center.
const bladeRows = [
  [16, 19], [14, 20], [13, 21], [12, 21],
  [12, 21], [12, 21], [12, 21], [12, 21],
  [12, 21], [12, 21], [13, 21], [14, 20],
  [16, 19], [18, 20]
];
for (let i = 0; i < bladeRows.length; i++) {
  const z = 5 + i;
  const [outer, inner] = bladeRows[i];
  for (let x = outer; x <= inner; x++) {
    const edge = x <= outer + 1;
    const face = edge ? "#465c70" : x <= outer + 3 ? "#e0ebed" : "#9eb9c8";
    box(x, 21, z, x, 26, z, "#708da0");
    box(x, 21, z, x, 21, z, face);

    const mirror = 47 - x;
    box(mirror, 21, z, mirror, 26, z, "#708da0");
    box(mirror, 21, z, mirror, 21, z, face);
  }
}
// Shiny inset planes and crisp upper bevels.
for (let z = 8; z <= 15; z++) {
  box(16, 20, z, 19, 20, z, "#c7dce2");
  box(28, 20, z, 31, 20, z, "#c7dce2");
}
box(17, 20, 16, 19, 20, 16, "#eff8f4");
box(28, 20, 16, 30, 20, 16, "#eff8f4");

// Reinforced center and a large, readable red gem.
box(21, 21, 8, 26, 26, 18, "#40576d");
box(22, 20, 9, 25, 20, 17, "#8197a5");
box(22, 20, 17, 25, 20, 18, "#dbe6e6");
box(22, 20, 8, 25, 20, 9, "#526b7e");
box(22, 19, 10, 25, 19, 15, "#9e672d");
box(23, 18, 11, 24, 18, 14, "#e73543");
box(23, 17, 12, 24, 17, 13, "#ff6370");
set(23, 17, 14, "#ffbd9b");
set(24, 17, 11, "#aa192f");

// Rivets on the reinforced hub.
for (const z of [9, 17]) {
  set(21, 20, z, "#f5e4a4");
  set(26, 20, z, "#f5e4a4");
}

animate("pendulo", { type: "swing", axis: "y", amplitude: 0.6, speed: 2 });