fogón

← Ancient and prehistory3D assetfogon/mamut

Mamut

by fogonCC020496 blocks
MamutDrag to turn it
// «Mamut» · gpt-6-sol (medium)
// A big chunky cartoon woolly mammoth on four thick legs, body horizontal along y, covered in shaggy reddish-brown fur in several shades with a high domed head. At the front (-y) a long trunk hanging down and two huge curved cream tusks curling forward and up, small dark eyes, small ears, a short tail.

const fur = "#99502d";
const furLight = "#b96a3a";
const furDark = "#71391f";
const furGold = "#ce8247";
const ivory = "#f5e6bd";
const ivoryShade = "#d8c69d";

// Broad, horizontal body and a high, domed forehead.
ellipsoid(24, 25, 26, 15, 14, 11, fur);
ellipsoid(24, 25, 30, 13, 12, 7, furLight);
ellipsoid(24, 13, 32, 10, 10, 10, fur);
ellipsoid(24, 14, 37, 9, 8, 6, furLight);
ellipsoid(24, 7, 30, 8, 4, 8, "#a95b32");

// Subtle color variation, with darker fur underneath.
forEach((x, y, z, color) => {
  if (color === fur || color === furLight) {
    if (z < 20 && rand() < 0.52) set(x, y, z, furDark);
    else if (z > 32 && rand() < 0.12) set(x, y, z, furGold);
    else if (rand() < 0.07) set(x, y, z, color === fur ? furLight : fur);
  }
});

// Pointed locks along the sides and hanging belly fringe.
for (let y = 15; y <= 35; y += 3) {
  for (const side of [-1, 1]) {
    const x = 24 + side * (12 + (y > 32 ? -2 : 0));
    const top = 23 + Math.floor(rand() * 5);
    line(x, y, top, x + side, y + 1, top - 5, 1,
         rand() < 0.5 ? furDark : fur);
    line(x - side, y - 1, top + 3, x, y, top - 1, 1,
         rand() < 0.5 ? furLight : furGold);
  }
}
for (let y = 17; y <= 34; y += 3) {
  for (let x = 14; x <= 34; x += 4) {
    line(x, y, 18, x + (rand() < 0.5 ? -1 : 1), y + 1, 14, 1, furDark);
  }
}

// Shaggy crown and cheek ruffs.
for (let x = 17; x <= 31; x += 3) {
  line(x, 13, 41, x - 1, 11, 43, 1, furGold);
}
for (const side of [-1, 1]) {
  for (let y = 8; y <= 19; y += 3) {
    line(24 + side * 9, y, 32, 24 + side * 10, y + 1, 27,
         1, y % 2 ? furDark : furLight);
  }
}

// Little ears, with warm inner fur visible from the front.
for (const x of [12, 36]) {
  ellipsoid(x, 15, 34, 4, 2, 5, furDark);
  ellipsoid(x, 12, 34, 3, 1, 4, furGold);
  ellipsoid(x, 11, 34, 2, 1, 3, "#b76541");
}

// Friendly eyes and heavy eyebrows.
for (const x of [17, 31]) {
  ellipsoid(x, 4, 34, 2, 1, 2, furDark);
  box(x, 3, 33, x + 1, 3, 35, "#211c19");
  set(x, 2, 35, "#ffffff");
  line(x - 2, 5, 37, x + 2, 5, 37, 1, furLight);
}

// Short tail with a shaggy dark tip.
line(24, 37, 28, 24, 41, 24, 1, furDark);
line(24, 41, 24, 24, 42, 19, 2, fur);
ellipsoid(24, 42, 19, 2, 2, 3, furDark);
line(23, 42, 19, 23, 43, 16, 0, furDark);

// Four independent, chunky walking legs.
for (const [name, x, y, speed] of [
  ["front-left", 15, 15, 4],
  ["front-right", 33, 15, -4],
  ["rear-left", 15, 33, -4],
  ["rear-right", 33, 33, 4]
]) {
  part(name, [x, y, 19]);
  ellipsoid(x, y, 16, 5, 5, 7, furDark);
  ellipsoid(x, y, 13, 4, 4, 7, fur);
  ellipsoid(x, y - 1, 5, 4, 5, 5, furLight);
  ellipsoid(x, y - 2, 2, 5, 5, 2, furDark);
  box(x - 4, y - 5, 0, x + 4, y + 1, 1, furDark);
  for (const dx of [-2, 0, 2]) {
    box(x + dx, y - 6, 0, x + dx + 1, y - 5, 2, ivoryShade);
    set(x + dx, y - 6, 2, ivory);
  }
  animate(name, {type: "swing", axis: "x", speed, amplitude: 0.3});
}
part("body");

// Two enormous tusks: outward, forward, then dramatically upward.
for (const side of [-1, 1]) {
  const x = 24 + side * 7;
  line(x, 7, 26, x + side * 2, 4, 21, 3, ivoryShade);
  line(x + side * 2, 4, 21, x + side * 4, 2, 17, 3, ivory);
  line(x + side * 4, 2, 17, x + side * 6, 1, 19, 2, ivory);
  line(x + side * 6, 1, 19, x + side * 7, 1, 24, 2, ivory);
  line(x + side * 7, 1, 24, x + side * 7, 1, 28, 1, ivory);
  set(x + side * 7, 1, 29, "#fff5da");
}

// Hanging trunk, hinged at the face.
part("trunk", [24, 5, 30]);
line(24, 5, 30, 24, 3, 25, 3, fur);
line(24, 3, 25, 24, 3, 19, 3, furLight);
line(24, 3, 19, 24, 4, 13, 3, fur);
ellipsoid(24, 3, 12, 3, 3, 2, furDark);
for (const z of [17, 21, 25]) {
  line(21, 2, z, 27, 2, z, 0, furDark);
}
box(22, 0, 11, 23, 0, 12, "#482c25");
box(25, 0, 11, 26, 0, 12, "#482c25");
animate("trunk", {type: "swing", axis: "x", speed: 2, amplitude: 0.3});