fogón

← Ancient and prehistory3D assetfogon/t-rex

Tiranosaurio

by fogonCC014450 blocks
TiranosaurioDrag to turn it
// «Tiranosaurio» · gpt-6-sol (medium)
// A friendly chunky cartoon T-rex standing on two thick hind legs, body leaning forward and horizontal along y with the big head at the front (-y) and a long thick tail stretching back (+y) to balance. Huge boxy head with a wide grin showing a row of white blocky teeth, small black dot eyes with a white glint, tiny two-fingered arms. Olive green with a lighter yellow-green belly and darker green stripes on the back.

const green = "#718d42";
const lightGreen = "#819b4c";
const darkGreen = "#496635";
const belly = "#b9c878";
const bellyShade = "#9eae65";
const mouth = "#402f32";
const tooth = "#fff5d6";

part("body");

ellipsoid(24, 24, 22, 11, 12, 9, green);
ellipsoid(24, 17, 25, 9, 9, 8, green);

// A broad, lighter belly and chest.
ellipsoid(24, 17, 19, 8, 10, 6, bellyShade);
ellipsoid(24, 13, 24, 7, 6, 6, belly);
forEach((x, y, z, color) => {
  if (color === green && rand() < 0.055) set(x, y, z, lightGreen);
  if (color === bellyShade && rand() < 0.045) set(x, y, z, belly);
});

// Short dark bands across the rounded back.
for (const y of [22, 26, 30]) {
  for (let x = 16; x <= 32; x++) {
    for (let z = 27; z <= 33; z++) {
      if (get(x, y, z) === green || get(x, y, z) === lightGreen) {
        set(x, y, z, darkGreen);
      }
    }
  }
}

// Tiny two-fingered arms, one on each side.
for (const side of [-1, 1]) {
  const shoulderX = 24 + side * 10;
  ellipsoid(shoulderX, 16, 24, 3, 3, 4, green);
  box(shoulderX + side, 12, 21, shoulderX + side * 2, 16, 23, lightGreen);
  box(shoulderX + side, 10, 20, shoulderX + side, 13, 21, green);
  box(shoulderX + side * 2, 10, 20, shoulderX + side * 2, 13, 21, green);
}

// Independent, chunky walking legs.
for (const [name, x, speed] of [
  ["leftLeg", 18, 4],
  ["rightLeg", 30, -4]
]) {
  part(name, [x, 24, 18]);
  ellipsoid(x, 24, 13, 5, 6, 7, green);
  ellipsoid(x, 22, 7, 4, 4, 6, lightGreen);
  box(x - 4, 17, 0, x + 4, 27, 4, darkGreen);
  box(x - 4, 13, 0, x + 4, 23, 3, green);
  box(x - 4, 15, 4, x + 4, 23, 5, lightGreen);
  for (const dx of [-3, 0, 3]) {
    box(x + dx - 1, 12, 0, x + dx + 1, 14, 2, "#d8d5a5");
  }
  animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}

// A long, solid tail that tapers to a rounded tip.
part("tail", [24, 31, 24]);
for (let y = 30; y <= 47; y++) {
  const t = (y - 30) / 17;
  const cx = 24;
  const cz = 24 - Math.round(t * 5);
  const rx = Math.max(1, Math.round(7 * (1 - t)));
  const rz = Math.max(1, Math.round(5 * (1 - t)));
  for (let x = cx - rx; x <= cx + rx; x++) {
    for (let z = cz - rz; z <= cz + rz; z++) {
      const d = ((x - cx) / rx) ** 2 + ((z - cz) / rz) ** 2;
      if (d <= 1.12) {
        let color = z < cz - 1 ? bellyShade : green;
        if (z >= cz && [34, 38, 42, 45].includes(y)) color = darkGreen;
        else if (color === green && rand() < 0.045) color = lightGreen;
        set(x, y, z, color);
      }
    }
  }
}
animate("tail", { type: "swing", axis: "z", speed: 2, amplitude: 0.25 });

// Oversized boxy head, mounted at the neck.
part("head", [24, 17, 31]);
box(16, 13, 28, 32, 21, 37, darkGreen);
box(14, 9, 28, 34, 19, 39, green);
box(16, 8, 34, 32, 17, 40, lightGreen);
box(13, 10, 28, 16, 17, 35, green);
box(32, 10, 28, 35, 17, 35, green);

// Long upper muzzle, dark grin, and projecting lower jaw.
box(14, 4, 29, 34, 13, 35, green);
box(15, 4, 34, 33, 11, 35, lightGreen);
box(14, 5, 27, 34, 15, 28, mouth);
box(14, 4, 27, 34, 5, 28, mouth);
box(14, 5, 23, 34, 16, 26, green);
box(15, 4, 24, 33, 14, 26, lightGreen);
box(19, 5, 27, 29, 10, 27, "#ad756b");

// White blocky teeth along the front and both sides of the smile.
for (const x of [16, 20, 24, 28, 32]) {
  box(x, 3, 27, x + 1, 4, 28, tooth);
}
for (const y of [7, 10, 13]) {
  box(13, y, 27, 13, y + 1, 28, tooth);
  box(35, y, 27, 35, y + 1, 28, tooth);
}
box(14, 7, 26, 14, 9, 26, tooth);
box(34, 7, 26, 34, 9, 26, tooth);

// Big friendly eyes, each with a single bright glint.
for (const x of [18, 30]) {
  box(x - 2, 7, 38, x + 2, 9, 38, darkGreen);
  box(x - 1, 7, 35, x + 1, 7, 37, "#212824");
  set(x - 1, 6, 37, "#ffffff");
}
box(12, 11, 35, 12, 13, 36, "#212824");
set(12, 11, 36, "#ffffff");
box(36, 11, 35, 36, 13, 36, "#212824");
set(36, 11, 36, "#ffffff");

// Small nostrils and smile dimples.
set(19, 3, 32, darkGreen);
set(29, 3, 32, darkGreen);
set(13, 15, 29, darkGreen);
set(35, 15, 29, darkGreen);

animate("head", { type: "swing", axis: "x", speed: 2, amplitude: 0.15 });