fogón

← Monsters and enemies3D assetfogon/yeti

Yeti

by fogonCC017200 blocks
YetiDrag to turn it
// «Yeti» · gpt-6-sol (medium)
// A big friendly-scary cartoon yeti facing -y: shaggy white fur with light blue shading, a blue-grey face with a big open mouth showing two fangs, small dark eyes under a heavy brow, very long arms with blue-grey hands, standing on big furry feet in a little patch of snow.

const fur = "#e9f8fb";
const furLight = "#ffffff";
const furBlue = "#c5e4ed";
const furShadow = "#91bccd";
const skin = "#7795a8";
const skinLight = "#9bb6c3";
const skinDark = "#405b70";

// A little uneven patch of snow.
for (let x = 5; x <= 43; x++) {
  for (let y = 7; y <= 41; y++) {
    const d = ((x - 24) / 19) ** 2 + ((y - 24) / 17) ** 2;
    if (d < 0.91 + rand() * 0.17)
      set(x, y, 0, rand() < 0.18 ? "#c6e9f3" : "#eefbff");
  }
}
for (let i = 0; i < 18; i++) {
  const x = 7 + Math.floor(rand() * 35);
  const y = 10 + Math.floor(rand() * 29);
  if (get(x, y, 0)) ellipsoid(x, y, 1, 2, 2, 1, "#ffffff");
}

// Separate swinging legs, including their oversized feet.
function makeLeg(name, x, speed) {
  part(name, [x, 24, 14]);
  ellipsoid(x, 24, 9, 5, 5, 7, furShadow);
  ellipsoid(x, 22, 10, 4, 5, 6, fur);
  ellipsoid(x, 19, 5, 5, 7, 4, furBlue);
  ellipsoid(x, 18, 5, 5, 7, 3, furLight);

  for (let dx = -3; dx <= 3; dx += 3) {
    ellipsoid(x + dx, 12, 2, 2, 3, 2, furLight);
    box(x + dx - 1, 9, 1, x + dx + 1, 10, 2, skinLight);
  }
  for (let i = 0; i < 7; i++) {
    const a = i * 2.4;
    line(x + Math.round(Math.sin(a) * 4), 20 + Math.round(Math.cos(a) * 3),
      8, x + Math.round(Math.sin(a) * 5), 20 + Math.round(Math.cos(a) * 3),
      5, 1, i % 2 ? furLight : furBlue);
  }
  animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}
makeLeg("left leg", 17, 3);
makeLeg("right leg", 31, -3);

part("body");
ellipsoid(24, 24, 22, 11, 9, 13, furShadow);
ellipsoid(24, 23, 24, 11, 9, 12, fur);
ellipsoid(24, 17, 22, 8, 3, 10, furLight);
ellipsoid(24, 30, 20, 8, 3, 10, furBlue);

// Shaggy lower edge and shoulders.
for (let x = 15; x <= 33; x += 3) {
  const z = 13 + Math.round(rand() * 2);
  line(x, 18, z + 3, x + (rand() < 0.5 ? -1 : 1),
    17, z - 2, 1, x % 2 ? furBlue : furLight);
}
for (const x of [14, 34]) {
  sphere(x, 23, 31, 4, furLight);
  line(x, 21, 30, x + (x < 24 ? -2 : 2), 20, 26, 1, furBlue);
}

// Long arms: each pivots at its shoulder.
function makeArm(name, side, speed) {
  const shoulder = 24 + side * 12;
  part(name, [shoulder, 23, 30]);
  ellipsoid(shoulder, 23, 27, 4, 5, 6, furBlue);
  ellipsoid(24 + side * 15, 22, 21, 4, 5, 7, fur);
  ellipsoid(24 + side * 17, 20, 15, 4, 5, 6, furBlue);

  const hx = 24 + side * 18;
  ellipsoid(hx, 19, 10, 4, 5, 5, skinDark);
  ellipsoid(hx, 17, 11, 4, 4, 4, skin);
  ellipsoid(hx - side, 15, 12, 2, 2, 2, skinLight);
  for (let i = -2; i <= 2; i += 2)
    ellipsoid(hx + i, 15, 7, 1, 2, 3, i === 0 ? skinLight : skin);
  ellipsoid(hx - side * 4, 17, 10, 2, 3, 2, skin);

  // Uneven tufts on the outside of the forearm.
  for (let i = 0; i < 5; i++) {
    const z = 17 + i * 3;
    line(24 + side * (17 - Math.floor(i / 2)), 23, z + 2,
      24 + side * (20 - Math.floor(i / 2)), 23, z,
      1, i % 2 ? furLight : furBlue);
  }
  animate(name, { type: "swing", axis: "x", speed, amplitude: 0.35 });
}
makeArm("left arm", -1, 3);
makeArm("right arm", 1, -3);

part("body");
// Oversized round head with an irregular furry outline.
ellipsoid(24, 21, 35, 10, 9, 9, furBlue);
ellipsoid(24, 20, 36, 10, 9, 9, fur);
ellipsoid(24, 19, 40, 8, 7, 4, furLight);
for (let i = 0; i < 19; i++) {
  const a = i * Math.PI * 2 / 19;
  const x = 24 + Math.round(Math.cos(a) * 9);
  const y = 21 + Math.round(Math.sin(a) * 8);
  const z = 34 + (i % 3) * 2;
  line(x, y, z + 2, x + Math.round(Math.cos(a) * 2),
    y + Math.round(Math.sin(a) * 2), z - 1,
    1, i % 3 ? furLight : furBlue);
}
for (const x of [18, 22, 27, 31])
  line(x, 20, 43, x + (x < 24 ? -1 : 1), 19, 45, 1, furLight);

// Blue-grey face set into the white fur.
ellipsoid(24, 12, 34, 7, 3, 7, skinDark);
ellipsoid(24, 10, 34, 7, 2, 6, skin);
ellipsoid(19, 10, 33, 3, 2, 3, skinLight);
ellipsoid(29, 10, 33, 3, 2, 3, skinLight);

// Broad, dark, open mouth; warm color keeps it playful.
ellipsoid(24, 8, 31, 5, 2, 4, "#243248");
ellipsoid(24, 7, 30, 4, 1, 3, "#111d34");
ellipsoid(24, 6, 28, 3, 1, 1, "#a65d87");
for (const x of [21, 27]) {
  box(x - 1, 6, 33, x + 1, 7, 34, furLight);
  box(x, 6, 31, x, 7, 32, "#d5f3fb");
}
box(23, 6, 28, 25, 6, 28, "#e9b0b7");

// Tiny glowing eyes tucked beneath a heavy shaggy brow.
for (const x of [20, 28]) {
  ellipsoid(x, 9, 37, 2, 1, 2, skinDark);
  box(x - 1, 7, 37, x + 1, 8, 38, "#49f7ed");
  set(x, 6, 38, "#d5ffff");
}
ellipsoid(24, 7, 35, 2, 1, 1, skinDark);
box(17, 8, 39, 22, 11, 40, furBlue);
box(26, 8, 39, 31, 11, 40, furBlue);
box(18, 7, 40, 22, 9, 41, furLight);
box(26, 7, 40, 30, 9, 41, furLight);