fogón

← Fantasy3D assetfogon/fenix

Fénix

by fogonCC08703 blocks
FénixDrag to turn it
// «Fénix» · gpt-6-sol (medium)
// A cartoon phoenix bird with spread wings facing front (-y): a body of bright orange and red feathers, a golden crest of flame-like feathers on the head, a short yellow beak, and a long trailing tail of flame feathers going from red to yellow, perched on a small dark rock.

const stone = ["#34383f", "#42464c", "#51545a"];
const moss = ["#55704b", "#72925b", "#8ca965"];

// Small, mossy perch.
ellipsoid(24, 25, 2, 9, 7, 3, stone[1]);
ellipsoid(20, 25, 2, 5, 5, 3, stone[0]);
ellipsoid(29, 27, 2, 5, 4, 3, stone[2]);
forEach((x, y, z, color) => {
  if (z >= 3 && z <= 5 && stone.includes(color) && !get(x, y, z + 1) && rand() < 0.22)
    set(x, y, z, moss[Math.floor(rand() * moss.length)]);
});

// Tiny mushrooms tucked beside the perch.
for (const [x, y] of [[17, 21], [31, 24]]) {
  box(x, y, 4, x, y, 6, "#e9d7ad");
  ellipsoid(x, y, 7, 2, 2, 1, "#ae4b69");
  set(x, y - 2, 7, "#f8d68a");
}

// Fanned flame-tail: red at the base, glowing yellow at the tips.
part("tail", [24, 29, 17]);
for (const [dx, endY, endZ] of [
  [-13, 35, 10], [-9, 38, 8], [-5, 41, 7], [0, 43, 6],
  [5, 41, 7], [9, 38, 8], [13, 35, 10]
]) {
  const midX = 24 + dx * 0.48;
  const midY = 32 + (endY - 32) * 0.43;
  line(24, 29, 18, midX, midY, 15, 2, "#b92e36");
  line(midX, midY, 15, 24 + dx * 0.78, endY - 3, endZ + 3, 2, "#ef642c");
  line(24 + dx * 0.78, endY - 3, endZ + 3,
       24 + dx, endY, endZ, 1, "#ffc044");
  ellipsoid(24 + dx, endY, endZ, 2, 2, 2, "#ffdb61");
  set(24 + dx, endY, endZ, "#fff0b0");
}
animate("tail", {
  type: "colors",
  palette: ["#d63032", "#ff752c", "#ffcf43", "#fff4c3"],
  pattern: "flicker",
  glow: 1
});

// Broad, individually flapping wings.
for (const side of [-1, 1]) {
  const name = side < 0 ? "leftWing" : "rightWing";
  part(name, [24 + side * 6, 23, 29]);

  // Rounded leading edge.
  line(24 + side * 6, 23, 29, 24 + side * 20, 23, 34, 3, "#b93335");
  line(24 + side * 7, 21, 30, 24 + side * 20, 21, 35, 2, "#f26b2b");

  // Overlapping, scalloped flight feathers.
  for (let d = 9; d <= 20; d += 2) {
    const upper = 33 + (d - 9) * 0.2;
    const tip = 18 + (d - 9) * 0.8;
    const center = (upper + tip) / 2;
    ellipsoid(24 + side * d, 23, center, 2, 3, (upper - tip) / 2, "#c73a36");
    ellipsoid(24 + side * d, 20, center + 1, 1.5, 1.5,
              Math.max(2, (upper - tip) / 2 - 2), "#eb592e");
    ellipsoid(24 + side * d, 19, upper - 2, 1, 1, 2, "#ffad3c");
  }
  ellipsoid(24 + side * 20, 22, 33, 3, 2, 4, "#e74c31");
  ellipsoid(24 + side * 21, 20, 35, 2, 1, 2, "#ffbd48");

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

part("body");

// Sturdy little legs and forward-reaching golden toes.
for (const x of [21, 27]) {
  cylinder(x, 22, 6, 2, 6, "#b76729");
  ellipsoid(x, 19, 7, 2, 3, 1, "#f5ad37");
  for (const offset of [-1, 1])
    line(x, 19, 7, x + offset * 2, 16, 6, 0, "#ffd060");
}

// Plump red-orange body and sunny breast.
ellipsoid(24, 24, 19, 8, 7, 11, "#ae3034");
ellipsoid(24, 21, 21, 7, 6, 9, "#ed592e");
ellipsoid(24, 18, 19, 5, 3, 8, "#ff9237");
ellipsoid(24, 16, 17, 3, 1, 5, "#ffbb4c");
for (const [x, z] of [[21, 14], [27, 15], [20, 21], [28, 22], [24, 25]])
  ellipsoid(x, 16, z, 1, 1, 2, "#ffd06a");

// Big, friendly head with warm feathered cheeks.
ellipsoid(24, 21, 32, 7, 6, 7, "#d84131");
ellipsoid(24, 18, 33, 6, 4, 6, "#ff7932");
ellipsoid(19, 17, 30, 2, 2, 2, "#f69b3d");
ellipsoid(29, 17, 30, 2, 2, 2, "#f69b3d");

// Flame-shaped golden crest, with staggered pointed tips.
for (const [x, baseZ, tipZ] of [
  [19, 37, 41], [21, 38, 44], [24, 38, 46],
  [27, 38, 44], [29, 37, 41]
]) {
  ellipsoid(x, 20, baseZ + 1, 2, 2, 3, "#f29330");
  line(x, 20, baseZ + 1, x + (x - 24) * 0.25, 21, tipZ, 1, "#ffcd4c");
  set(x + Math.round((x - 24) * 0.25), 21, tipZ, "#fff19a");
}

// Large cream eyes, dark pupils, and crisp little catchlights.
for (const x of [21, 27]) {
  ellipsoid(x, 15, 34, 2, 1, 3, "#82343a");
  ellipsoid(x, 14, 34, 2, 1, 2, "#fff1cc");
  ellipsoid(x, 13, 34, 1, 1, 2, "#302b35");
  set(x - 1, 12, 35, "#ffffff");
}
ellipsoid(19, 15, 30, 2, 1, 1, "#ffae69");
ellipsoid(29, 15, 30, 2, 1, 1, "#ffae69");

// Short, rounded yellow beak.
ellipsoid(24, 13, 30, 2, 3, 2, "#ffc746");
ellipsoid(24, 11, 29, 1, 1, 1, "#f3982e");
set(24, 10, 30, "#fff0a2");