fogón

← City3D assetfogon/hidrante

Hidrante

by fogonCC020569 blocks
HidranteDrag to turn it
// «Hidrante» · gpt-6-sol (medium)
// A chunky red fire hydrant standing on the sidewalk: a short thick cylinder with a domed cap on top, a wider flange ring near the bottom, and two side outlet nozzles with chained caps pointing left and right, plus a bigger front outlet facing -y. Bright red with darker red shading and silver bolts.

// A little stretch of Buenos Aires sidewalk and its bright red hydrant.
box(3, 3, 0, 44, 43, 2, "#555b60");

// Asphalt, concrete curb, and large paving slabs.
box(3, 3, 2, 44, 9, 2, "#62686b");
box(3, 10, 2, 44, 43, 3, "#a8aaa5");
box(3, 10, 4, 44, 11, 4, "#d6d2c6");
for (const [x0, x1] of [[4, 22], [24, 43]]) {
  for (const [y0, y1] of [[13, 25], [27, 42]]) {
    box(x0, y0, 4, x1, y1, 4, "#d4d1c7");
  }
}
for (let i = 0; i < 170; i++) {
  const x = 4 + Math.floor(rand() * 40);
  const y = 12 + Math.floor(rand() * 31);
  if (get(x, y, 4) === "#d4d1c7")
    set(x, y, 4, rand() < 0.5 ? "#c7c7bf" : "#e0ddd2");
}
// A few painted curb sections and road markings.
for (let x = 4; x <= 44; x += 8)
  box(x, 10, 3, Math.min(x + 3, 44), 10, 4, "#e9bc48");
box(7, 5, 2, 15, 5, 2, "#e4d5a3");
box(33, 5, 2, 40, 5, 2, "#e4d5a3");

// Heavy bolted foot and flared lower body.
cylinder(24, 24, 5, 12, 3, "#9f2525");
cylinder(24, 24, 8, 12, 2, "#e03a33");
cylinder(24, 24, 10, 10, 3, "#bb2928");
cylinder(24, 24, 12, 9, 20, "#d73530");
cylinder(24, 24, 29, 10, 3, "#ad2525");

// Rounded cap, with a crisp bright rim and top button.
cylinder(24, 24, 32, 9, 2, "#ed473c");
ellipsoid(24, 24, 33, 9, 9, 6, "#db3832");
cylinder(24, 24, 38, 3, 2, "#b92b28");
cylinder(24, 24, 40, 2, 2, "#ef5143");

// Subtle highlights and irregular paint on exposed red faces.
forEach((x, y, z, color) => {
  if (color === "#d73530" && get(x, y - 1, z) === undefined) {
    if (rand() < 0.16) set(x, y, z, "#e14338");
    else if (rand() < 0.07) set(x, y, z, "#c42c2a");
  }
  if (color === "#db3832" && get(x, y, z + 1) === undefined && rand() < 0.38)
    set(x, y, z, "#f05243");
});

// Side outlets: stout pipes, collars, and distinct capped ends.
cylinder(9, 24, 23, 4, 9, "#ad2928", "x");
cylinder(31, 24, 23, 4, 10, "#ad2928", "x");
cylinder(11, 24, 23, 6, 2, "#ee493d", "x");
cylinder(36, 24, 23, 6, 2, "#ee493d", "x");
cylinder(7, 24, 23, 6, 4, "#bc2a29", "x");
cylinder(39, 24, 23, 6, 4, "#bc2a29", "x");
cylinder(6, 24, 23, 5, 2, "#e33c34", "x");
cylinder(42, 24, 23, 5, 2, "#e33c34", "x");

// Raised fastening knobs on the two outer cap faces.
for (const x of [5, 43]) {
  for (const [dy, dz] of [[-4, 0], [4, 0], [0, -4], [0, 4]])
    box(x, 24 + dy, 23 + dz, x, 24 + dy + 1, 23 + dz + 1, "#c5c9c5");
  box(x, 23, 22, x, 25, 24, "#982321");
}

// The larger outlet projects toward the viewer.
cylinder(24, 13, 23, 5, 7, "#ad2928", "y");
cylinder(24, 11, 23, 7, 3, "#ef483a", "y");
cylinder(24, 8, 23, 7, 3, "#b92a28", "y");
cylinder(24, 7, 23, 6, 2, "#eb4438", "y");
cylinder(24, 6, 23, 4, 2, "#9e2525", "y");
cylinder(24, 5, 23, 2, 2, "#d13a32", "y");
for (const [dx, dz] of [[-5, 0], [5, 0], [0, -5], [0, 5]])
  box(24 + dx, 6, 23 + dz, 24 + dx + 1, 7, 23 + dz + 1, "#d4d5cd");

// Silver bolt heads around the foot and upper collar.
for (let i = 0; i < 8; i++) {
  const a = i * Math.PI / 4;
  const x = Math.round(24 + 10 * Math.cos(a));
  const y = Math.round(24 + 10 * Math.sin(a));
  box(x, y, 9, x + 1, y + 1, 10, "#c9ccc8");
}
for (const x of [18, 29]) {
  box(x, 16, 30, x + 1, 17, 31, "#bec2be");
}

// Two little drooping chains tether the side caps to the body.
// Alternating bright links and dark gaps keep them legible at game scale.
for (const side of [-1, 1]) {
  const p = (d, y, z) => [24 + side * d, y, z];
  const path = [
    p(18, 21, 20), p(16, 18, 17), p(14, 16, 15),
    p(11, 15, 14), p(9, 15, 14), p(7, 15, 16),
    p(6, 15, 20), p(6, 16, 23)
  ];
  for (let i = 0; i < path.length - 1; i++) {
    line(...path[i], ...path[i + 1], 0, "#626b6b");
    const [x, y, z] = path[i];
    set(x, y - 1, z, "#d1d2ca");
  }
  const [x, y, z] = path[path.length - 1];
  set(x, y - 1, z, "#d1d2ca");
}