fogón

← Monstruos y enemigosObjeto 3Dfogon/alien

Alien

de fogonCC010022 bloques
AlienArrastrá para girarlo
// «Alien» · gpt-6-sol (medium)
// A cartoon grey alien facing -y: a slim pale green body, a huge bulb-shaped head with big glossy black almond eyes, a tiny mouth, a silver jumpsuit with a glowing purple emblem, holding a small ray gun with a glowing tip.

const green = "#a9d9ad", greenLight = "#c4efc4", greenDark = "#78ae89";
const silver = "#b9c4d1", silverLight = "#e2e9ed", silverDark = "#778799";
const purple = "#a34cff";

// Legs: separate parts pivoting at the hips.
for (const [name, cx, speed] of [["leftLeg", 20, 4], ["rightLeg", 28, -4]]) {
  part(name, [cx, 24, 13]);
  box(cx - 2, 21, 4, cx + 2, 26, 13, silverDark);
  box(cx - 2, 20, 6, cx + 2, 25, 12, silver);
  box(cx - 2, 20, 7, cx + 2, 20, 10, silverLight);
  box(cx - 3, 18, 0, cx + 2, 27, 4, "#526376");
  box(cx - 3, 17, 1, cx + 2, 23, 3, "#899aac");
  box(cx - 2, 18, 4, cx + 2, 26, 5, "#a7b4c1");
  animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}

part("body");

// Slim silver jumpsuit, with darker lower and side panels.
ellipsoid(24, 24, 19, 7, 6, 8, silverDark);
ellipsoid(24, 23, 20, 6, 6, 7, silver);
ellipsoid(24, 20, 20, 5, 2, 6, silverLight);
box(19, 19, 12, 29, 28, 14, "#66778a");
box(20, 18, 14, 28, 19, 15, silverLight);
box(22, 17, 13, 26, 17, 14, purple);
box(23, 16, 14, 25, 16, 14, "#ec9bff");

// Neck and collar.
cylinder(24, 23, 24, 3, 5, greenDark);
box(22, 19, 25, 26, 23, 28, green);
box(19, 18, 24, 29, 20, 25, silverLight);
box(20, 18, 24, 28, 18, 24, "#637586");

// Chunky arms, ending in little pale-green hands.
line(18, 23, 23, 13, 19, 17, 2, silverDark);
line(18, 21, 23, 13, 18, 18, 1, silverLight);
ellipsoid(12, 18, 16, 3, 3, 3, green);
line(30, 23, 23, 35, 18, 18, 2, silverDark);
line(30, 21, 23, 35, 17, 19, 1, silverLight);
ellipsoid(35, 16, 17, 3, 3, 3, green);

// Glowing diamond insignia on the front of the suit.
for (let z = 17; z <= 23; z++) {
  const half = 3 - Math.abs(z - 20);
  for (let x = 24 - half; x <= 24 + half; x++) {
    set(x, 16, z, "#59647e");
    if (Math.abs(x - 24) < half || half === 0)
      set(x, 15, z, z === 20 ? "#f2b5ff" : purple);
  }
}
set(24, 14, 20, "#ffffff");

// Huge bulb-shaped head. Its lower face is narrower than its cranium.
function headBlob(cx, cy, cz, rx, ry, rz) {
  for (let z = Math.ceil(cz - rz); z <= cz + rz; z++)
    for (let y = Math.ceil(cy - ry); y <= cy + ry; y++)
      for (let x = Math.ceil(cx - rx); x <= cx + rx; x++) {
        const d = ((x-cx)/rx)**2 + ((y-cy)/ry)**2 + ((z-cz)/rz)**2;
        if (d > 1) continue;
        let color = z < 29 ? greenDark : z > 38 || y < 19 ? greenLight : green;
        if (d > 0.76 && rand() < 0.11)
          color = z < 31 ? "#90c399" : "#b6e2b6";
        set(x, y, z, color);
      }
}
headBlob(24, 23, 34, 14, 10, 10);
headBlob(24, 21, 29, 10, 8, 6);
headBlob(24, 24, 37, 12, 9, 7);

// Find the face surface so the eyes follow its curve.
function faceY(x, z) {
  for (let y = 9; y <= 24; y++)
    if (get(x, y, z)) return y;
  return undefined;
}

// Broad tilted black almond eyes, with tiny bright cyan reflections.
for (const [cx, side] of [[17, -1], [31, 1]]) {
  for (let x = cx - 6; x <= cx + 6; x++)
    for (let z = 29; z <= 40; z++) {
      const dz = z - 34 - side * (x - cx) * 0.34;
      const shape = ((x-cx)/5.7)**2 + (dz/4.0)**2;
      const y = faceY(x, z);
      if (y === undefined || shape > 1) continue;
      set(x, y - 1, z, shape > 0.76 ? "#477c70" : "#080d20");
      if (shape < 0.70) set(x, y - 2, z, "#090d19");
    }
  const glintX = cx - 2;
  for (const [dx, dz, c] of [
    [0, 2, "#caffff"], [1, 2, "#68f4ff"],
    [0, 1, "#40d9f1"], [2, -1, "#258ea9"]
  ]) {
    const x = glintX + dx, z = 35 + dz, y = faceY(x, z);
    if (y !== undefined) set(x, y - 3, z, c);
  }
}

// Tiny nose and friendly little mouth.
for (const x of [22, 26]) {
  const y = faceY(x, 29);
  if (y !== undefined) set(x, y - 1, 29, "#668f77");
}
for (const [x, z] of [[22, 27], [23, 26], [24, 26], [25, 26], [26, 27]]) {
  const y = faceY(x, z);
  if (y !== undefined) set(x, y - 1, z, "#4b625e");
}

// Small, chunky ray gun held out in front.
box(33, 11, 17, 39, 18, 22, "#42465d");
box(34, 11, 19, 38, 17, 21, silver);
box(34, 12, 21, 38, 17, 22, silverLight);
box(35, 15, 14, 38, 18, 18, "#566377");
box(35, 14, 15, 37, 16, 17, "#a0afbd");
box(34, 9, 18, 38, 12, 21, "#666181");
box(35, 9, 19, 37, 11, 20, "#d4b1e8");
set(36, 13, 22, purple);

// The muzzle is its own pulsing, glowing part.
part("rayGunTip", [36, 9, 20]);
box(34, 7, 18, 38, 9, 21, "#ba55ed");
box(35, 6, 19, 37, 7, 20, "#f093ff");
set(36, 5, 20, "#ffffff");
animate("rayGunTip", {
  type: "colors",
  palette: ["#8434d6", "#c448f3", "#ff80df", "#ffffff"],
  pattern: "pulse",
  glow: 0.9
});