fogón

← Ancient and prehistory3D assetfogon/camello

Camello

by fogonCC011652 blocks
CamelloDrag to turn it
// «Camello» · gpt-6-sol (medium)
// A chunky cartoon camel on four long thin legs, body horizontal along y with two big humps on the back, a long curved neck at the front (-y) with a sleepy friendly face, sandy tan fur with lighter belly. A colorful red and gold striped blanket rests between the humps.

const tan = "#d8a65e";
const lightTan = "#e8bd79";
const sunlit = "#f2cc8a";
const shadow = "#b98347";
const belly = "#f2d9a9";
const red = "#a93632";
const deepRed = "#792b30";
const gold = "#f5c653";
const darkGold = "#bd852d";
const turquoise = "#36a9a3";
const hoof = "#594536";

// Body and pale underside.
ellipsoid(24, 25, 23, 11, 15, 7, tan);
ellipsoid(24, 25, 19, 9, 13, 3, belly);
ellipsoid(24, 25, 27, 10, 14, 4, lightTan);

// Two tall, separate humps leave a low saddle between them.
ellipsoid(24, 19, 29, 8, 7, 9, tan);
ellipsoid(24, 33, 29, 8, 7, 10, tan);
ellipsoid(24, 19, 33, 6, 5, 5, lightTan);
ellipsoid(24, 33, 34, 6, 5, 5, lightTan);
ellipsoid(24, 18, 35, 4, 3, 3, sunlit);
ellipsoid(24, 33, 36, 4, 3, 3, sunlit);

// Sparse flecks give the large sandy surfaces a little fur texture.
forEach((x, y, z, color) => {
  if (color === tan && rand() < 0.045) set(x, y, z, lightTan);
  if (color === lightTan && rand() < 0.025) set(x, y, z, sunlit);
});

// A woven blanket across the saddle, with cloth hanging down both sides.
const stripe = y => {
  if (y === 24 || y === 29) return deepRed;
  if (y === 26 || y === 27) return gold;
  return red;
};
for (let y = 24; y <= 29; y++) {
  for (let x = 16; x <= 32; x++) {
    const z = 31 + Math.round(1.5 * (1 - Math.abs(x - 24) / 9));
    set(x, y, z, stripe(y));
  }
  for (let z = 25; z <= 30; z++) {
    const reach = Math.round(11 * Math.sqrt(Math.max(0, 1 - ((z - 24) / 7) ** 2)));
    for (let d = 0; d <= 1; d++) {
      set(24 - reach - d, y, z, stripe(y));
      set(24 + reach + d, y, z, stripe(y));
    }
  }
}
for (let x = 16; x <= 32; x++) {
  set(x, 25, 33, darkGold);
  set(x, 28, 33, darkGold);
}
for (const y of [24, 29]) {
  for (let z = 25; z <= 29; z++) {
    set(12, y, z, turquoise);
    set(36, y, z, turquoise);
  }
}
for (let y = 24; y <= 29; y++) {
  set(12, y, 24, gold);
  set(36, y, 24, gold);
}

// Little tufted tail.
line(24, 39, 25, 24, 43, 22, 1, shadow);
ellipsoid(24, 44, 20, 2, 2, 3, tan);
ellipsoid(24, 44, 18, 2, 2, 2, shadow);

// Four independently swinging legs.
function leg(name, x, y, speed) {
  part(name, [x, y, 19]);
  ellipsoid(x, y, 18, 3, 3, 4, tan);
  box(x - 2, y - 2, 5, x + 2, y + 2, 17, tan);
  box(x - 2, y - 2, 3, x + 2, y + 1, 8, shadow);
  box(x - 2, y - 3, 4, x + 2, y - 2, 14, lightTan);
  ellipsoid(x, y - 1, 3, 3, 3, 2, tan);
  box(x - 3, y - 4, 0, x + 3, y + 2, 2, hoof);
  box(x - 3, y - 4, 2, x + 3, y + 1, 3, shadow);
  set(x, y - 4, 0, "#392f29"); // split toe
  animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
  part("body");
}
leg("front-left", 17, 16, 4);
leg("front-right", 31, 16, -4);
leg("rear-left", 17, 34, -4);
leg("rear-right", 31, 34, 4);

// Curved neck and friendly head share a single pivot.
part("head-and-neck", [24, 12, 24]);
ellipsoid(24, 11, 26, 5, 5, 6, tan);
line(24, 11, 26, 24, 8, 32, 4, tan);
line(24, 8, 31, 24, 9, 36, 4, lightTan);
ellipsoid(24, 7, 36, 6, 5, 4, lightTan);
ellipsoid(24, 4, 33, 5, 4, 3, sunlit);

// Upright ears with pinkish inner fur.
ellipsoid(17, 10, 40, 2, 2, 3, tan);
ellipsoid(31, 10, 40, 2, 2, 3, tan);
box(17, 8, 40, 17, 9, 42, shadow);
box(31, 8, 40, 31, 9, 42, shadow);

// Half-lidded black eyes, each with a white glint.
for (const x of [21, 27]) {
  box(x - 1, 3, 37, x + 1, 3, 37, shadow);
  box(x, 3, 35, x + 1, 3, 36, "#252522");
  set(x, 2, 36, "#fff8df");
}
set(22, 0, 34, shadow);
set(26, 0, 34, shadow);
line(22, 1, 32, 24, 0, 31, 0, shadow);
line(24, 0, 31, 26, 1, 32, 0, shadow);

// Gold-and-turquoise neck band.
line(20, 9, 28, 28, 9, 28, 0, darkGold);
line(21, 8, 29, 27, 8, 29, 0, gold);
for (const x of [21, 24, 27]) set(x, 7, 28, turquoise);
animate("head-and-neck", { type: "swing", axis: "x", speed: 2, amplitude: 0.15 });
part("body");