fogón

← Fantasy3D assetfogon/grifo

Grifo

by fogonCC011908 blocks
GrifoDrag to turn it
// «Grifo» · gpt-6-sol (medium)
// A cartoon griffin: the body of a golden lion lying horizontal along y with four legs and a tufted tail at the back (+y), and at the front (-y) the white head of an eagle with a big yellow hooked beak and fierce friendly eyes, plus two big brown-and-white feathered wings rising from the shoulders.

// Golden lion body and warm, rounded chest.
ellipsoid(24, 25, 17, 10, 12, 8, "#c88738");
ellipsoid(24, 22, 20, 10, 11, 7, "#e5aa4d");
ellipsoid(24, 16, 20, 9, 7, 9, "#d99a43");
ellipsoid(24, 27, 13, 8, 9, 4, "#f0bb67");

// Four sturdy legs and oversized paws.
for (const x of [17, 31]) {
  for (const y of [16, 32]) {
    ellipsoid(x, y, 10, 3, 3, 7, "#b97732");
    ellipsoid(x, y - 1, 8, 3, 3, 7, "#dda04b");
    ellipsoid(x, y - 2, 2, 4, 4, 2, "#e9ad55");
    for (const dx of [-2, 0, 2]) {
      set(x + dx, y - 5, 1, "#fff0cb");
    }
  }
}

// Curved tail, ending in a dark, feathery tuft.
line(24, 35, 18, 24, 39, 16, 2, "#d99a43");
line(24, 39, 16, 25, 43, 19, 1, "#e8ad55");
ellipsoid(25, 43, 20, 3, 3, 4, "#78432e");
ellipsoid(25, 44, 21, 2, 2, 3, "#9a5834");
for (const [dx, dz] of [[-2, 1], [0, 3], [2, 0]]) {
  line(25 + dx, 43, 20 + dz, 25 + dx, 46, 19 + dz, 0, "#633b30");
}

// White eagle neck and big, soft head.
ellipsoid(24, 13, 25, 7, 6, 9, "#e2e3d9");
ellipsoid(24, 10, 29, 7, 7, 7, "#fff9e9");
ellipsoid(24, 8, 27, 6, 5, 5, "#f1f0e5");

// Little swept-back feather crests and cheek feathers.
for (const x of [19, 24, 29]) {
  line(x, 12, 34, x, 16, 37, 1, "#fff9e9");
  set(x, 16, 37, "#dddcd4");
}
for (const x of [18, 30]) {
  line(x, 11, 27, x, 15, 23, 1, "#fff9e9");
}

// Broad golden beak with a downward hooked tip.
ellipsoid(24, 5, 27, 4, 4, 3, "#f5bd37");
box(22, 2, 26, 26, 5, 28, "#ffd454");
ellipsoid(24, 3, 25, 3, 2, 2, "#eda727");
box(23, 2, 22, 25, 3, 25, "#d7871e");
set(22, 2, 27, "#8e5a25");
set(26, 2, 27, "#8e5a25");

// Large, friendly but determined eyes.
for (const x of [20, 28]) {
  ellipsoid(x, 5, 31, 2, 1, 2, "#755c45");
  box(x - 1, 3, 30, x + 1, 4, 31, "#fffdf1");
  box(x, 2, 30, x + 1, 3, 31, "#327e82");
  set(x, 2, 31, "#142d39");
  set(x + 1, 2, 31, "#ffffff");
  line(x - 2, 5, 33, x + 1, 4, 33, 0, "#817467");
}

// Each feathered wing is its own flapping part.
for (const side of [-1, 1]) {
  const rootX = 24 + side * 8;
  const wingName = side < 0 ? "leftWing" : "rightWing";
  part(wingName, [rootX, 21, 25]);

  ellipsoid(rootX, 22, 27, 3, 8, 5, "#704936");
  ellipsoid(rootX + side * 3, 21, 30, 4, 9, 5, "#966244");

  // Overlapping, upward-sweeping flight feathers.
  for (let i = 0; i < 10; i++) {
    const rootY = 16 + i;
    const tipY = 10 + i * 2;
    const outer = 10 + Math.round(Math.abs(i - 4.5) * 0.7);
    const tipZ = 36 + Math.round(4 * Math.sin((i + 1) * Math.PI / 11));
    const midX = rootX + side * 6;
    const tipX = rootX + side * outer;

    line(rootX, rootY, 28, midX, Math.round((rootY + tipY) / 2), 34,
         2, i % 3 === 0 ? "#784a36" : "#a36b49");
    line(midX, Math.round((rootY + tipY) / 2), 34,
         tipX, tipY, tipZ, 1, i % 2 ? "#f5eee0" : "#dedbd2");
    set(tipX, tipY, tipZ + 1, "#fff9eb");
  }

  // A bright row of smaller coverts makes the layering readable.
  for (let i = 0; i < 7; i++) {
    const y = 15 + i * 2;
    line(rootX + side * 2, y, 30,
         rootX + side * 6, y + 1, 34, 1,
         i % 2 ? "#eee6d7" : "#c7b9a6");
  }

  animate(wingName, {
    type: "swing",
    axis: "y",
    speed: side < 0 ? 4 : -4,
    amplitude: 0.5
  });
}

part("body", [24, 24, 18]);

// Sparse golden highlights on exposed fur.
forEach((x, y, z, color) => {
  if (color === "#d99a43" && rand() < 0.045 &&
      (!get(x, y - 1, z) || !get(x, y, z + 1))) {
    set(x, y, z, "#efb65e");
  }
});