fogón

← Medieval3D assetfogon/caballo-medieval

Caballo

by fogonCC05789 blocks
CaballoDrag to turn it
// «Caballo» · gpt-6-sol (medium)
// A medieval knight's horse standing on four legs, body oriented left-to-right so its side profile reads clearly in 3/4 view: a horizontal barrel-shaped brown body about twice as long as tall, four straight slim legs with dark hooves, a thick neck rising at the front at a 45-degree angle to a long rectangular horse head pointing forward-down with ears on top, dark eyes and a darker muzzle, a dark brown mane along the top of the neck and a long flowing dark tail at the back. Over its back a cloth caparison in royal blue and red with gold trim hanging halfway down the sides, and a small brown saddle on top. Keep the horse silhouette (long head, long neck, long body) unmistakable; no hump.

const brown = "#855437";
const brownLight = "#a97449";
const brownDark = "#69402d";
const blue = "#244995";
const blueLight = "#3561b2";
const red = "#9e3037";
const gold = "#e3b654";
const goldDark = "#a77a32";
const mane = "#38251f";

// Far legs, paired diagonally with the near legs.
function leg(name, x, y, speed) {
  part(name, [x, y, 16]);
  box(x - 2, y - 2, 11, x + 1, y + 1, 17, brownDark);
  box(x - 1, y - 1, 4, x + 1, y + 1, 12, brown);
  box(x - 1, y - 1, 3, x + 1, y + 1, 5, brownLight);
  box(x - 2, y - 2, 0, x + 2, y + 1, 3, "#302b2a");
  box(x - 2, y - 2, 2, x + 2, y - 2, 3, "#48403a");
  animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}
leg("rear-right", 15, 29, 5);
leg("front-right", 30, 29, -5);

part("body");
ellipsoid(22, 24, 21, 12, 7, 7, brown);
ellipsoid(22, 24, 24, 11, 6, 4, brownLight);
ellipsoid(22, 24, 17, 10, 6, 3, brownDark);
ellipsoid(31, 23, 21, 4, 6, 6, brown);
ellipsoid(13, 24, 21, 4, 6, 6, brown);

// Sturdy sloping neck and a long, slightly lowered head.
line(30, 23, 23, 38, 21, 34, 3, brown);
line(32, 22, 26, 38, 20, 34, 2, brownLight);
box(37, 19, 30, 44, 25, 34, brown);
box(38, 19, 34, 43, 24, 35, brownLight);
box(43, 18, 27, 46, 25, 30, brownDark);
box(44, 18, 29, 46, 24, 30, "#785039");
box(45, 18, 28, 46, 19, 28, "#302724");

// Upright ears with warm inner faces.
box(38, 19, 35, 39, 21, 39, brownDark);
box(39, 19, 37, 39, 19, 39, "#bd8067");
box(41, 23, 35, 42, 25, 39, brownDark);
box(41, 23, 37, 41, 23, 39, "#bd8067");

// Shaggy mane follows the back edge of the rising neck.
line(29, 25, 27, 36, 22, 37, 1.5, mane);
for (let i = 0; i < 8; i++) {
  const x = 29 + i;
  const z = 27 + Math.round(i * 1.35);
  line(x, 24 - Math.floor(i / 4), z,
       x - 1, 24 - Math.floor(i / 4), z - 3, 0, i % 2 ? mane : "#513329");
}

// Flowing tail, tapering into separate locks.
line(11, 25, 24, 7, 26, 20, 2, mane);
line(7, 26, 20, 5, 27, 15, 1, mane);
line(9, 25, 21, 4, 24, 17, 1, "#4c3027");
line(7, 27, 19, 5, 29, 14, 1, mane);
line(6, 25, 18, 4, 25, 13, 0, "#4c3027");

// Near legs remain individually animated, with the hips tucked into the barrel.
leg("rear-left", 15, 18, -5);
leg("front-left", 30, 18, 5);
part("body");

// Blue-and-red caparison: two hanging side panels and a cloth-covered back.
for (const y of [16, 32]) {
  box(15, y, 17, 30, y, 25, blue);
  box(15, y, 18, 19, y, 24, red);
  box(15, y, 16, 30, y, 17, gold);
  box(15, y, 18, 15, y, 25, goldDark);
  box(30, y, 18, 30, y, 25, goldDark);
  box(19, y, 18, 19, y, 24, gold);
  box(16, y, 24, 29, y, 24, blueLight);

  // Small gold-bordered red heraldic diamond.
  for (let dz = -3; dz <= 3; dz++) {
    const width = 3 - Math.abs(dz);
    for (let dx = -width; dx <= width; dx++) {
      set(25 + dx, y + (y === 16 ? -1 : 1), 21 + dz,
          Math.abs(dx) === width || Math.abs(dz) === 3 ? gold : red);
    }
  }
  set(25, y + (y === 16 ? -2 : 2), 21, gold);
}
box(16, 19, 27, 29, 29, 28, blue);
box(17, 19, 28, 28, 29, 28, blueLight);
box(16, 19, 28, 16, 29, 28, gold);
box(29, 19, 28, 29, 29, 28, gold);

// Leather saddle and raised pommel.
box(20, 20, 29, 27, 28, 30, "#674029");
box(21, 21, 31, 26, 27, 31, "#94623c");
box(26, 20, 30, 28, 28, 32, "#593726");
box(20, 20, 30, 20, 28, 32, "#593726");
box(21, 19, 29, 26, 19, 29, goldDark);
box(21, 29, 29, 26, 29, 29, goldDark);
set(22, 19, 30, gold);
set(25, 19, 30, gold);

// Eye, bridle, cheek strap and bit on the viewer-facing side.
box(40, 18, 32, 41, 18, 33, "#241d1b");
set(40, 17, 33, "#f4e4b9");
line(42, 18, 34, 43, 18, 29, 0, "#493026");
line(39, 18, 31, 44, 18, 29, 0, "#493026");
box(43, 17, 28, 44, 17, 28, gold);
set(45, 17, 28, "#e8bd65");