fogón

← Asian3D assetfogon/luchador-de-sumo

Luchador de sumo

by fogonCC018922 blocks
Luchador de sumoDrag to turn it
// «Luchador de sumo» · gpt-6-sol (medium)
// A big round cartoon sumo wrestler standing with legs apart: a huge round skin-toned belly and body, short thick legs, a dark blue mawashi belt wrapped around the waist with hanging cords at the front, black hair in a topknot, small happy eyes and rosy cheeks, thick arms slightly out.

// Skin palette
const skin = "#e8aa79";
const skinLight = "#f4bd8c";
const skinShade = "#cf895f";
const skinDeep = "#b97555";
const blue = "#172b51";
const blueLight = "#34537a";
const gold = "#e9bd65";

part("body", [24, 24, 22]);

// Round torso and prominent belly
ellipsoid(24, 24, 24, 15, 13, 15, skin);
ellipsoid(24, 18, 23, 14, 12, 12, skin);

// Thick arms held slightly away from the body
for (const side of [-1, 1]) {
  line(24 + side * 12, 23, 31, 24 + side * 17, 21, 26, 4, skin);
  ellipsoid(24 + side * 19, 19, 23, 3, 4, 4, skin);
  ellipsoid(24 + side * 19, 17, 21, 3, 3, 3, skinLight);
}

// Gentle variation over the large skin surfaces
forEach((x, y, z, color) => {
  if (color !== skin) return;
  if (z < 17 || y > 29) {
    if (rand() < 0.30) set(x, y, z, skinShade);
  } else if (z > 28 || y < 12) {
    if (rand() < 0.48) set(x, y, z, skinLight);
  } else if (rand() < 0.07) {
    set(x, y, z, rand() < 0.5 ? skinLight : skinShade);
  }
});

// Mawashi wraps around the lower belly
const skinColors = new Set([skin, skinLight, skinShade]);
forEach((x, y, z, color) => {
  if (skinColors.has(color) && z >= 14 && z <= 18 && x >= 10 && x <= 38) {
    set(x, y, z, z === 18 ? blueLight : blue);
  }
});

// Front knot and hanging, gold-edged cords
box(19, 7, 15, 29, 9, 17, blueLight);
box(21, 6, 16, 27, 7, 18, blue);
box(22, 5, 17, 26, 6, 18, gold);
for (const x of [20, 23, 26, 29]) {
  box(x, 6, 10, x + 1, 7, 15, blueLight);
  box(x, 5, 11, x, 5, 15, gold);
  box(x, 5, 10, x + 1, 6, 10, blue);
}
box(23, 5, 14, 26, 5, 16, blue);
set(24, 4, 15, gold);
set(25, 4, 15, gold);

// Head, round cheeks, and little ears
ellipsoid(24, 17, 35, 8, 8, 8, skinLight);
ellipsoid(16, 17, 35, 2, 2, 3, skin);
ellipsoid(32, 17, 35, 2, 2, 3, skin);
ellipsoid(18, 10, 33, 3, 2, 2, "#e99687");
ellipsoid(30, 10, 33, 3, 2, 2, "#e99687");

// Happy eyes and brows on the front (-y)
for (const x of [21, 27]) {
  box(x, 8, 37, x + 1, 8, 38, "#251e23");
  set(x, 7, 38, "#fff2db");
  box(x - 1, 9, 40, x + 1, 9, 40, "#30232a");
}
ellipsoid(24, 8, 34, 2, 2, 2, skin);
set(24, 6, 34, skinLight);

// Broad smiling mouth, with raised corners
box(21, 8, 31, 27, 8, 31, "#693c3c");
box(22, 7, 31, 26, 7, 31, "#8e4b4b");
set(20, 9, 32, "#693c3c");
set(28, 9, 32, "#693c3c");
box(23, 6, 31, 25, 6, 31, "#dc887c");

// Black hair, swept back into a topknot
ellipsoid(24, 19, 41, 8, 7, 3, "#22232a");
ellipsoid(24, 20, 42, 6, 5, 2, "#303038");
box(21, 16, 42, 27, 21, 44, "#24242b");
ellipsoid(24, 19, 45, 3, 3, 1, "#202127");
box(22, 16, 44, 26, 16, 44, "#424047");
for (const x of [18, 20, 28, 30]) {
  set(x, 16, 42, "#424047");
}

// Separate hip-pivoting legs, planted wide apart
function leg(name, cx, speed) {
  part(name, [cx, 24, 14]);
  ellipsoid(cx, 24, 10, 5, 5, 6, skin);
  ellipsoid(cx, 23, 5, 4, 4, 5, skinShade);
  ellipsoid(cx, 18, 2, 5, 7, 2, skin);
  ellipsoid(cx, 15, 2, 4, 3, 2, skinLight);

  // Small toe separations across the forward edge
  for (const dx of [-3, -1, 1, 3]) {
    set(cx + dx, 12, 1, skinShade);
    set(cx + dx, 13, 2, skinLight);
  }
  animate(name, { type: "swing", axis: "y", speed, amplitude: 0.25 });
}
leg("leftLeg", 16, 3);
leg("rightLeg", 32, -3);