fogón

← Monstruos y enemigosObjeto 3Dfogon/goblin

Goblin

de fogonCC06645 bloques
GoblinArrastrá para girarlo
// «Goblin» · gpt-6-sol (medium)
// A small sneaky cartoon goblin facing -y: yellow-green skin, a huge head with long pointy ears sticking out sideways, a big hooked nose, wide grin with crooked teeth, glowing orange eyes, a ragged brown tunic and a rope belt, holding a small rusty dagger.

// Short legs, each swinging from its own hip.
for (const [name, x, speed] of [["leftLeg", 20, 6], ["rightLeg", 28, -6]]) {
  part(name, [x, 23, 13]);
  box(x - 2, 21, 5, x + 2, 25, 13, "#654126");
  box(x - 2, 20, 4, x + 2, 25, 6, "#3f2b20");
  box(x - 1, 21, 2, x + 1, 24, 4, "#a9bb32");
  box(x - 2, 17, 0, x + 2, 26, 2, "#493322");
  box(x - 2, 17, 1, x + 2, 20, 2, "#69452a");
  animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}

part("body");

// Ragged brown tunic.
ellipsoid(24, 23, 19, 8, 6, 8, "#4c3021");
ellipsoid(24, 22, 20, 7, 5, 7, "#79502d");
box(17, 19, 13, 31, 27, 18, "#674128");
for (let x = 17; x <= 31; x++) {
  const hem = 12 + ((x * 7) % 4);
  box(x, 19, hem, x, 27, 15, x % 3 === 0 ? "#4b3021" : "#674128");
}
forEach((x, y, z, color) => {
  if (color === "#79502d" && rand() < 0.07)
    set(x, y, z, "#8c5c35");
});

// Rope belt, with a dangling knot on the front.
box(17, 17, 16, 31, 18, 17, "#ad7b37");
for (let x = 18; x <= 30; x += 3)
  box(x, 16, 16, x, 17, 17, "#e0ae55");
box(24, 15, 15, 26, 16, 18, "#e0ae55");
line(25, 15, 15, 27, 15, 11, 0, "#d6a04c");
box(19, 15, 21, 22, 17, 23, "#a9753c"); // tunic patch
set(20, 14, 22, "#d19a55");
set(22, 15, 22, "#d19a55");

// Free hand, curled near the belt.
ellipsoid(13, 22, 20, 3, 3, 3, "#563724");
line(12, 21, 19, 14, 18, 15, 2, "#aabb34");
ellipsoid(14, 17, 15, 2, 2, 2, "#c8d64c");

// Long pointed ears: thick at the head, thin and upswept at the tips.
for (const side of [-1, 1]) {
  for (let d = 0; d <= 21; d++) {
    const x = 24 + side * d;
    if (d < 7) continue;
    const t = (d - 7) / 14;
    const cz = 33 + Math.round(3 * t);
    const ry = Math.max(0, Math.round(2.5 * (1 - t)));
    const rz = Math.max(0, Math.round(3.2 * (1 - t)));
    for (let y = 22 - ry; y <= 22 + ry; y++)
      for (let z = cz - rz; z <= cz + rz; z++)
        if (ry === 0 || rz === 0 ||
            ((y - 22) ** 2 / (ry + 0.5) ** 2 +
             (z - cz) ** 2 / (rz + 0.5) ** 2 <= 1))
          set(x, y, z, z < cz ? "#829625" : "#b9d441");
    if (d >= 9 && d <= 18)
      set(x, 19 + Math.round(t), cz, "#69802c");
  }
}

// Huge head, shaded underneath with a bright forehead and cheeks.
ellipsoid(24, 22, 30, 10, 8, 9, "#758c25");
ellipsoid(24, 21, 32, 9, 7, 7, "#b7cf3b");
ellipsoid(24, 20, 27, 9, 6, 4, "#a4bb32");
ellipsoid(18, 17, 28, 3, 2, 2, "#b9cf41");
ellipsoid(30, 17, 28, 3, 2, 2, "#b9cf41");

// A broad dark grin with uneven little teeth.
ellipsoid(24, 13, 26, 7, 2, 2, "#382b23");
for (const [x, z] of [[19, 27], [21, 27], [23, 26], [26, 27], [29, 27]]) {
  box(x, 11, z, x + 1, 12, z, "#f3e4a3");
}
line(18, 15, 27, 20, 13, 28, 0, "#526b21");
line(28, 13, 28, 30, 15, 27, 0, "#526b21");

// Heavy brows, dark sockets and bright orange-yellow eyes.
for (const x of [20, 28]) {
  ellipsoid(x, 14, 33, 3, 2, 3, "#526321");
  ellipsoid(x, 12, 33, 2, 1, 2, "#ff781d");
  set(x, 11, 33, "#ffe55b");
  set(x - 1, 11, 34, "#ffae2b");
}
line(17, 13, 37, 22, 13, 36, 1, "#718a26");
line(26, 13, 36, 31, 13, 37, 1, "#718a26");

// Big hooked nose, hanging over the middle of the grin.
ellipsoid(24, 12, 30, 2, 3, 3, "#b7cd3d");
ellipsoid(24, 10, 27, 2, 2, 2, "#c8d944");
set(22, 9, 27, "#779026");
set(26, 9, 27, "#779026");

// Dagger arm: sleeve, green hand, crooked grip and rusty blade.
part("daggerArm", [34, 22, 22]);
ellipsoid(35, 22, 21, 3, 3, 3, "#674128");
line(36, 21, 20, 38, 18, 16, 2, "#a8bd32");
ellipsoid(38, 17, 16, 2, 2, 2, "#c4d545");

line(38, 16, 15, 40, 14, 12, 1, "#392a22");
line(37, 13, 12, 42, 13, 12, 1, "#d39b51");
box(39, 12, 12, 41, 14, 13, "#79502d");
for (let z = 7; z <= 11; z++) {
  const tip = (11 - z) / 4;
  const x = 41 + Math.round(2 * tip);
  box(x - (z > 8 ? 1 : 0), 12, z, x + 1, 13, z, "#9b9a80");
  set(x, 11, z, z % 2 ? "#b96d38" : "#c7b998");
}
set(43, 12, 6, "#c8bba0");
set(41, 11, 10, "#754731");
set(42, 11, 8, "#a65330");

animate("daggerArm", { type: "swing", axis: "x", speed: 5, amplitude: 0.4 });
part("body");