fogón

← FantasíaObjeto 3Dfogon/duende

Duende

de fogonCC011469 bloques
DuendeArrastrá para girarlo
// «Duende» · gpt-6-sol (medium)
// A small mischievous cartoon leprechaun-like sprite facing front (-y): green jacket and pointy green hat with a gold buckle, orange sideburns, a big grin, pointy ears, and holding a tiny pot of gold coins under one arm.

const green = "#367b36", greenLight = "#56a348", greenDark = "#24582f";
const gold = "#f6c54e", goldLight = "#ffe483", goldDark = "#aa712d";

// Walking legs: each boot and trouser leg turns at its own hip.
function makeLeg(name, x, speed) {
  part(name, [x, 23, 11]);
  cylinder(x, 23, 5, 3, 7, "#315d38");
  box(x - 3, 19, 4, x + 3, 26, 6, "#275038");
  ellipsoid(x, 21, 2, 5, 6, 2, "#493527");
  ellipsoid(x, 17, 1, 4, 4, 1, "#62452c");
  box(x - 4, 16, 0, x + 4, 24, 0, "#32281f");
  box(x - 3, 15, 2, x + 3, 16, 2, "#795533");
  animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}
makeLeg("left leg", 18, 5);
makeLeg("right leg", 30, -5);
part("body");

// Rounded green coat, with slightly mottled cloth.
ellipsoid(24, 23, 17, 11, 8, 9, greenDark);
ellipsoid(24, 21, 18, 10, 7, 8, green);
forEach((x, y, z, color) => {
  if (color === green && rand() < 0.11)
    set(x, y, z, rand() < 0.55 ? "#448d3c" : "#306d35");
});
ellipsoid(24, 22, 11, 11, 7, 3, "#286332");

// Coat fronts and jaunty lapels.
box(17, 14, 15, 23, 15, 22, "#478b3c");
box(25, 14, 15, 31, 15, 22, "#397d37");
line(18, 15, 23, 23, 13, 18, 1, "#79b455");
line(30, 15, 23, 25, 13, 18, 1, "#69a84b");
box(21, 14, 18, 26, 14, 19, "#e8d2a0");
box(20, 14, 12, 28, 14, 13, "#49372a");
box(23, 12, 12, 26, 13, 14, goldDark);
box(24, 11, 13, 25, 12, 13, goldLight);
for (let z of [16, 19, 22]) set(25, 13, z, gold);

// Sleeves and little hands.
line(15, 23, 22, 11, 19, 16, 3, greenDark);
line(14, 21, 21, 11, 18, 17, 2, greenLight);
ellipsoid(10, 17, 15, 3, 3, 3, "#f3bf8a");
set(9, 14, 16, "#ffd5a0");

line(33, 22, 22, 38, 18, 18, 3, greenDark);
line(34, 20, 22, 38, 17, 19, 2, greenLight);
ellipsoid(38, 16, 18, 3, 3, 2, "#f2bd88");

// Oversized, friendly face and pointed ears.
ellipsoid(24, 21, 28, 10, 8, 8, "#dc9c6d");
ellipsoid(24, 19, 28, 9, 7, 8, "#f4c48f");
ellipsoid(24, 16, 25, 8, 3, 4, "#ffd09a");
ellipsoid(13, 20, 29, 3, 3, 3, "#edb684");
ellipsoid(35, 20, 29, 3, 3, 3, "#edb684");
line(12, 20, 30, 9, 20, 32, 1, "#f5c28b");
line(36, 20, 30, 39, 20, 32, 1, "#f5c28b");
set(11, 17, 30, "#ce8369");
set(37, 17, 30, "#ce8369");

// Bright orange hair, especially the big sideburns.
ellipsoid(16, 15, 29, 3, 3, 5, "#bd542c");
ellipsoid(32, 15, 29, 3, 3, 5, "#bd542c");
ellipsoid(16, 13, 27, 2, 2, 4, "#ec7934");
ellipsoid(32, 13, 27, 2, 2, 4, "#ec7934");
line(16, 13, 26, 15, 14, 23, 1, "#d75d2b");
line(32, 13, 26, 33, 14, 23, 1, "#d75d2b");
box(18, 13, 32, 30, 15, 33, "#dc6a2e");
line(18, 13, 33, 21, 12, 32, 1, "#f18b3f");

// Eyebrows and large, lively eyes.
line(18, 12, 32, 22, 12, 32, 1, "#a84b29");
line(26, 12, 32, 30, 12, 32, 1, "#a84b29");
ellipsoid(20, 12, 29, 2, 1, 2, "#fff6d8");
ellipsoid(28, 12, 29, 2, 1, 2, "#fff6d8");
box(20, 10, 28, 21, 10, 30, "#283b37");
box(27, 10, 28, 28, 10, 30, "#283b37");
set(20, 9, 30, "#ffffff");
set(27, 9, 30, "#ffffff");
ellipsoid(24, 11, 26, 2, 2, 2, "#f5b781");
set(23, 9, 27, "#ffdaa2");

// Wide, toothy grin with lifted corners.
box(20, 12, 23, 28, 12, 24, "#713c39");
box(21, 11, 24, 27, 11, 24, "#fff1cd");
box(22, 11, 23, 26, 11, 23, "#fff1cd");
set(19, 12, 25, "#a55343");
set(29, 12, 25, "#a55343");
set(20, 11, 26, "#eaa478");
set(28, 11, 26, "#eaa478");

// Broad brim and crooked, tapering pointed hat.
ellipsoid(24, 22, 35, 15, 10, 2, greenDark);
ellipsoid(24, 22, 36, 14, 9, 1, greenLight);
const widths = [10, 10, 9, 8, 7, 6, 5, 3, 2, 1];
for (let i = 0; i < widths.length; i++) {
  const z = 36 + i;
  const cx = 24 + Math.max(0, i - 5);
  const rx = widths[i], ry = Math.max(2, Math.round(rx * 0.75));
  for (let x = cx - rx; x <= cx + rx; x++)
    for (let y = 22 - ry; y <= 22 + ry; y++)
      if (((x - cx) / rx) ** 2 + ((y - 22) / ry) ** 2 <= 1)
        set(x, y, z, i > 6 ? "#4d9b42" : i > 3 ? greenLight : green);
}
line(28, 21, 44, 32, 20, 45, 1, "#65ac49");

// Dark hatband and unmistakable square gold buckle.
box(17, 14, 36, 31, 15, 38, "#244f31");
box(21, 12, 36, 27, 13, 39, goldDark);
box(22, 11, 37, 26, 11, 38, goldLight);
box(23, 10, 37, 25, 10, 38, "#254d30");
set(26, 10, 38, "#fff0aa");

// Tiny iron pot tucked beneath the right arm.
ellipsoid(39, 16, 15, 5, 5, 4, "#302e38");
ellipsoid(39, 14, 14, 5, 4, 3, "#48414a");
ellipsoid(39, 15, 18, 5, 5, 1, "#66616a");
ellipsoid(39, 15, 19, 4, 4, 1, "#272a30");
line(35, 11, 18, 35, 12, 14, 1, "#858087");
line(43, 11, 18, 43, 12, 14, 1, "#858087");
line(36, 15, 20, 37, 13, 22, 1, "#8c7550");
line(37, 13, 22, 41, 13, 22, 1, "#8c7550");
line(41, 13, 22, 43, 15, 20, 1, "#8c7550");

// Coins spill above the rim in warm, sparkling gold.
for (let i = 0; i < 22; i++) {
  const x = 36 + Math.floor(rand() * 7);
  const y = 12 + Math.floor(rand() * 6);
  const z = 19 + Math.floor(rand() * 3);
  set(x, y, z, rand() < 0.4 ? goldLight : gold);
}
set(38, 10, 20, "#fff4aa");
set(41, 11, 21, "#fff4aa");