fogón

← Monstruos y enemigosObjeto 3Dfogon/hombre-lobo

Hombre lobo

de fogonCC012996 bloques
Hombre loboArrastrá para girarlo
// «Hombre lobo» · gpt-6-sol (medium)
// A hulking cartoon werewolf on two legs facing -y: shaggy dark brown-grey fur with a lighter chest, a wolf head with a long snout, black nose, pointed ears, glowing yellow eyes and white fangs, torn purple pants, big clawed hands and feet. Hunched forward with broad shoulders.

const fur = "#514940", furLight = "#665a4c", furDark = "#393530";
const mane = "#746552", chest = "#ae9672", chestLight = "#c5ac82";
const purple = "#65427e", purpleLight = "#80559a", purpleDark = "#473052";
const claw = "#e8dfc4", clawShade = "#bdb49d";

// Hunched, broad body.
ellipsoid(24, 25, 24, 11, 9, 11, furDark);
ellipsoid(24, 23, 26, 12, 9, 10, fur);
ellipsoid(24, 19, 27, 10, 5, 8, furLight);
ellipsoid(24, 16, 26, 7, 2, 7, chest);
ellipsoid(24, 15, 28, 5, 1, 5, chestLight);

// Shaggy chest and shoulder tufts.
for (let x of [18, 21, 24, 27, 30]) {
  line(x, 15, 25, x + (x < 24 ? -1 : x > 24 ? 1 : 0), 16, 20, 1, chest);
}
for (let x of [13, 16, 32, 35]) {
  line(x, 19, 31, x + (x < 24 ? -2 : 2), 20, 26, 1, mane);
}
for (let i = 0; i < 42; i++) {
  const x = 15 + Math.floor(rand() * 19);
  const z = 20 + Math.floor(rand() * 12);
  const y = 16 + Math.floor(rand() * 4);
  if (get(x, y, z) === furLight) set(x, y, z, rand() < 0.5 ? mane : fur);
}

// Torn waistband stays with the torso.
box(17, 21, 16, 31, 29, 19, purpleDark);
box(18, 20, 18, 30, 29, 19, purple);
box(21, 19, 18, 27, 20, 19, purpleLight);

// Oversized wolf head, thrust forward.
ellipsoid(24, 16, 36, 8, 7, 7, furDark);
ellipsoid(24, 14, 37, 8, 6, 6, fur);
ellipsoid(24, 11, 33, 7, 4, 4, furLight);
ellipsoid(24, 9, 32, 6, 3, 2, furDark); // lower jaw
box(20, 6, 31, 28, 10, 32, furLight);

// Tall pointed ears.
for (const side of [-1, 1]) {
  const cx = 24 + side * 6;
  for (let z = 40; z <= 45; z++) {
    const half = Math.max(0, 3 - Math.floor((z - 40) / 2));
    box(cx - half, 13, z, cx + half, 17, z, furDark);
    box(cx - Math.max(0, half - 1), 12, z,
        cx + Math.max(0, half - 1), 15, z, fur);
  }
  box(cx, 11, 41, cx, 12, 43, "#a77976");
  line(24 + side * 7, 16, 37, 24 + side * 9, 19, 32, 1, furLight);
}

// Eyes: dark sockets and heavy brows make the yellow pop.
for (const x of [20, 28]) {
  box(x - 2, 8, 36, x + 1, 10, 39, furDark);
  box(x - 1, 7, 37, x, 8, 38, "#ffdf55");
  set(x, 6, 38, "#fff39a");
  box(x - 2, 7, 40, x + 1, 9, 40, furDark);
}

// Long squared muzzle, black nose, friendly fang-filled grin.
box(21, 7, 33, 27, 11, 35, "#907b64");
box(22, 5, 33, 26, 8, 35, "#a58d70");
box(22, 4, 34, 26, 6, 35, "#25272a");
box(23, 4, 35, 25, 4, 35, "#383b3b");
box(21, 6, 31, 27, 7, 31, "#282626");
for (const x of [20, 28]) {
  box(x, 6, 31, x, 7, 32, claw);
  set(x, 6, 30, clawShade);
}
set(23, 6, 32, claw);
set(25, 6, 32, claw);

// Separate swinging legs, with ragged purple trouser cuffs.
function makeLeg(name, x, speed) {
  part(name, [x, 25, 17]);
  ellipsoid(x, 25, 13, 5, 5, 6, purpleDark);
  ellipsoid(x, 24, 14, 5, 5, 5, purple);
  box(x - 3, 20, 13, x + 2, 20, 16, purpleLight);
  for (let dx = -4; dx <= 4; dx += 2) {
    box(x + dx, 24 + (dx % 3), 8 + Math.abs(dx % 3),
        x + dx + 1, 28, 11, dx % 4 ? purple : purpleDark);
  }
  ellipsoid(x, 25, 7, 4, 4, 4, fur);
  ellipsoid(x, 22, 3, 5, 7, 3, furDark);
  ellipsoid(x, 20, 2, 5, 5, 2, furLight);
  for (const dx of [-3, 0, 3]) {
    box(x + dx - 1, 16, 1, x + dx + 1, 19, 2, furLight);
    line(x + dx, 17, 1, x + dx, 14, 0, 1, claw);
  }
  animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}
makeLeg("leftLeg", 18, 4);
makeLeg("rightLeg", 30, -4);

// Massive swinging arms and big three-clawed hands.
function makeArm(name, side, speed) {
  const shoulder = 24 + side * 12;
  part(name, [shoulder, 22, 30]);
  ellipsoid(shoulder, 22, 28, 5, 6, 6, furDark);
  ellipsoid(shoulder + side, 21, 26, 5, 5, 6, fur);
  line(shoulder + side * 2, 21, 25,
       shoulder + side * 4, 19, 17, 4, fur);
  ellipsoid(shoulder + side * 4, 18, 16, 4, 4, 5, furLight);
  ellipsoid(shoulder + side * 4, 17, 12, 4, 4, 4, furDark);
  box(shoulder + side * 2, 14, 11,
      shoulder + side * 6, 17, 13, furLight);

  for (let i = 0; i < 3; i++) {
    const x = shoulder + side * (2 + i * 2);
    line(x, 14, 11, x + side, 11, 8, 1, clawShade);
    set(x + side, 11, 7, claw);
  }
  // A few pointed fur locks along the outside.
  line(shoulder + side * 4, 24, 29,
       shoulder + side * 7, 25, 25, 1, furLight);
  line(shoulder + side * 6, 21, 21,
       shoulder + side * 8, 23, 18, 1, furDark);
  animate(name, { type: "swing", axis: "x", speed, amplitude: 0.4 });
}
makeArm("leftArm", -1, 4);
makeArm("rightArm", 1, -4);