fogón

← Monstruos y enemigosObjeto 3Dfogon/robot-asesino

Robot asesino

de fogonCC011024 bloques
Robot asesinoArrastrá para girarlo
// «Robot asesino» · gpt-6-sol (medium)
// A cartoon killer robot facing -y: a boxy gunmetal grey body with yellow-black hazard stripes, a square head with a single wide glowing red visor, an antenna, a buzz saw for the right hand and a pincer claw for the left, walking on two thick piston legs.

const dark = "#252c35";
const shadow = "#39434d";
const steel = "#56636e";
const light = "#7d8992";
const shine = "#aab5ba";
const black = "#171d23";
const yellow = "#ffd33f";
const yellowDark = "#b78b23";
const red = "#fa3545";

// Two independently swinging piston legs.
function leg(name, x, speed) {
  part(name, [x, 24, 17]);
  animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });

  box(x - 3, 20, 13, x + 3, 28, 17, dark);
  box(x - 2, 19, 12, x + 2, 27, 16, light);
  box(x - 2, 21, 5, x + 2, 27, 12, shadow);
  box(x - 1, 19, 7, x + 1, 20, 13, shine); // exposed piston
  box(x - 3, 18, 5, x + 3, 27, 8, steel);
  box(x - 3, 18, 5, x + 3, 18, 6, dark);

  // Oversized, forward-pointing boot.
  box(x - 4, 14, 0, x + 4, 29, 3, dark);
  box(x - 4, 15, 2, x + 4, 28, 4, steel);
  box(x - 3, 14, 1, x + 3, 15, 2, light);
  box(x - 2, 14, 3, x + 2, 15, 3, yellow);
  box(x - 3, 20, 8, x + 3, 20, 9, dark);
  box(x - 1, 20, 9, x + 1, 20, 9, yellow);
}

leg("left leg", 20, 4);
leg("right leg", 29, -4);
part("body");

// Broad, boxy torso with a dark lower outline and bright upper edges.
box(16, 19, 17, 32, 30, 29, dark);
box(17, 18, 19, 31, 29, 29, steel);
box(18, 18, 27, 30, 28, 29, light);
box(17, 17, 19, 31, 18, 26, shadow);
box(18, 16, 24, 30, 17, 27, steel);
box(19, 16, 27, 29, 17, 28, shine);
box(18, 17, 18, 30, 17, 18, black);

// Bold diagonal hazard band across the front.
box(17, 16, 19, 31, 16, 23, black);
for (let x = 18; x <= 30; x++) {
  for (let z = 20; z <= 22; z++) {
    if ((x + z * 2) % 6 < 3) set(x, 15, z, yellow);
    else set(x, 15, z, black);
  }
}
box(17, 15, 19, 31, 15, 19, yellowDark);
box(17, 15, 23, 31, 15, 23, yellowDark);

// Chest fittings and bolts.
box(22, 15, 25, 26, 15, 26, dark);
box(23, 14, 25, 25, 14, 25, "#45dddc");
for (const x of [18, 30]) {
  set(x, 16, 25, shine);
  set(x, 16, 18, light);
}

// Chunky left arm and open pincer claw.
box(11, 20, 23, 17, 29, 28, dark);
box(11, 19, 24, 15, 27, 27, light);
box(9, 19, 20, 13, 26, 24, steel);
box(9, 18, 20, 12, 19, 23, shadow);
box(7, 18, 18, 10, 25, 22, dark);
box(7, 17, 19, 10, 24, 21, light);
box(4, 18, 22, 8, 23, 23, steel);
box(3, 18, 20, 5, 23, 22, shine);
box(4, 18, 16, 8, 23, 17, steel);
box(3, 18, 17, 5, 23, 19, shine);
box(3, 17, 20, 4, 18, 20, dark);
box(3, 17, 19, 4, 18, 19, dark);
set(12, 18, 25, yellow);

// Right arm and fixed saw mounting.
box(32, 20, 23, 37, 29, 28, dark);
box(33, 19, 24, 37, 27, 27, light);
box(36, 20, 20, 40, 26, 24, steel);
box(37, 19, 20, 40, 21, 23, shadow);
box(38, 18, 19, 41, 20, 22, dark);
set(35, 19, 25, yellow);

// Big square head, slightly wider than the torso.
box(15, 17, 29, 33, 30, 40, dark);
box(16, 17, 31, 32, 29, 39, steel);
box(17, 18, 39, 31, 28, 40, light);
box(16, 16, 32, 32, 17, 38, shadow);
box(18, 16, 38, 30, 18, 39, shine);
box(16, 16, 30, 32, 17, 31, dark);

// One continuous glowing red visor in a deep black recess.
box(17, 15, 33, 31, 16, 38, black);
box(18, 14, 34, 30, 15, 37, "#8c1e30");
box(19, 13, 35, 29, 14, 37, red);
box(20, 12, 36, 28, 13, 37, "#ff6870");
box(20, 12, 37, 28, 12, 37, "#ffb0a0");
box(18, 15, 38, 30, 15, 38, light);

// Small speaker grille below the visor.
box(21, 15, 30, 27, 15, 32, black);
for (const x of [22, 24, 26]) set(x, 14, 31, light);
for (const x of [16, 32]) {
  set(x, 15, 32, shine);
  set(x, 15, 39, yellow);
}

// Antenna with a bright warning beacon.
box(27, 22, 41, 29, 24, 42, dark);
box(28, 23, 42, 28, 23, 45, shine);
box(27, 22, 45, 29, 24, 46, yellowDark);
box(28, 22, 46, 28, 23, 46, yellow);

// Spinning buzz saw: its pivot is exactly at the axle.
part("buzz saw", [40, 18, 20]);
animate("buzz saw", { type: "spin", axis: "y", speed: 8 });

for (let dx = -5; dx <= 5; dx++) {
  for (let dz = -5; dz <= 5; dz++) {
    const d2 = dx * dx + dz * dz;
    if (d2 <= 23) {
      const c = d2 > 15 ? shadow : d2 > 6 ? light : steel;
      box(40 + dx, 17, 20 + dz, 40 + dx, 19, 20 + dz, c);
      if (d2 > 9 && d2 < 18 && dz >= 0)
        set(40 + dx, 16, 20 + dz, shine);
    }
  }
}
// Twelve distinct chunky cutting teeth.
for (let i = 0; i < 12; i++) {
  const a = i * Math.PI / 6;
  const x = Math.round(40 + Math.cos(a) * 5.5);
  const z = Math.round(20 + Math.sin(a) * 5.5);
  box(x, 17, z, x, 19, z, i % 2 ? shine : light);
}
box(38, 16, 18, 42, 16, 22, dark);
box(39, 15, 19, 41, 15, 21, yellowDark);
set(40, 14, 20, red);