← AsiáticoObjeto 3Dfogon/puente-arqueado
Puente arqueado
Arrastrá para girarlo// «Puente arqueado» · gpt-6-sol (medium)
// A red arched wooden footbridge over a small pond: a high curved deck with planks, red railings with dark posts, stone feet at both ends and blue water with two lily pads under the arch.
// Pond and irregular pale-stone shoreline.
for (let x = 2; x <= 46; x++) {
for (let y = 6; y <= 42; y++) {
const d = ((x - 24) / 21) ** 2 + ((y - 24) / 16) ** 2;
const wobble = 0.025 * Math.sin(x * 1.7 + y * 0.8);
if (d > 1.07 + wobble) continue;
if (d > 0.85 + wobble) {
set(x, y, 0, "#776f67");
set(x, y, 1, rand() < 0.35 ? "#f0e9d9" : rand() < 0.55 ? "#bcb8aa" : "#d8d3c4");
if (rand() < 0.13) set(x, y, 2, "#eee8d9");
} else {
set(x, y, 0, "#174d65");
set(x, y, 1, rand() < 0.12 ? "#429aaf" : rand() < 0.33 ? "#287b98" : "#206c89");
if (rand() < 0.035) set(x, y, 2, "#77c3c6");
}
}
}
// Two lily pads, visible in the water beneath the span.
function lily(cx, cy, flower) {
for (let x = cx - 3; x <= cx + 3; x++) {
for (let y = cy - 2; y <= cy + 2; y++) {
const d = ((x - cx) / 3) ** 2 + ((y - cy) / 2.3) ** 2;
if (d <= 1 && !(x >= cx + 1 && y === cy)) {
set(x, y, 2, d > 0.65 ? "#245d3c" : rand() < 0.3 ? "#80b65b" : "#4d914c");
}
}
}
set(cx, cy, 2, "#a6c66a");
if (flower) {
set(cx - 1, cy, 3, "#f6a6b0");
set(cx + 1, cy, 3, "#f6a6b0");
set(cx, cy - 1, 3, "#ffd2cf");
set(cx, cy + 1, 3, "#e77f99");
set(cx, cy, 3, "#f8d878");
}
}
lily(16, 13, true);
lily(32, 14, false);
// White-stone bridge feet and their darker masonry joints.
for (const [a, b] of [[5, 10], [38, 43]]) {
box(a, 17, 0, b, 32, 2, "#aaa9a0");
box(a, 17, 3, b, 32, 4, "#e0ddd0");
box(a + 1, 18, 5, b - 1, 31, 5, "#f2ecdf");
for (let x = a; x <= b; x += 2) {
set(x, 17, 2, "#777b79");
set(x, 32, 2, "#777b79");
}
box(a, 16, 0, b, 16, 1, "#d3d0c5");
box(a, 33, 0, b, 33, 1, "#d3d0c5");
}
function arch(x) {
return Math.round(5 + 9 * (1 - ((x - 24) / 18) ** 2));
}
// Solid curved red deck, with individual transverse planks.
for (let x = 7; x <= 41; x++) {
const z = arch(x);
box(x, 18, z - 2, x, 30, z - 1, "#672c27");
box(x, 18, z, x, 30, z, "#a8322d");
const seam = (x - 7) % 3 === 0;
for (let y = 19; y <= 29; y++) {
set(x, y, z + 1, seam ? "#613028" : rand() < 0.16 ? "#e5734b" : "#c75439");
}
set(x, 18, z + 1, "#e3a64f");
set(x, 30, z + 1, "#e3a64f");
// The arched side beams remain visible below the railing.
set(x, 17, z - 1, "#8d2929");
set(x, 17, z, "#bf3830");
set(x, 31, z - 1, "#8d2929");
set(x, 31, z, "#bf3830");
}
// Curved lacquered rails on both sides.
for (const y of [17, 31]) {
for (let x = 7; x <= 41; x++) {
const z = arch(x);
box(x, y, z + 3, x, y, z + 4, "#ac302e");
box(x, y, z + 7, x, y, z + 8, "#c83e35");
set(x, y, z + 9, "#e5a84f");
if (x % 3 === 0) set(x, y, z + 8, "#df6640");
}
for (const x of [8, 14, 20, 26, 32, 38, 41]) {
const z = arch(x);
box(x, y, z + 1, x + 1, y + 1, z + 8, "#422b29");
box(x, y, z + 3, x, y, z + 7, "#922d2b");
box(x, y, z + 9, x + 1, y + 1, z + 9, "#edb755");
set(x, y, z + 10, "#f5d278");
}
// Gold-capped, slightly taller terminal posts.
for (const x of [7, 40]) {
const z = arch(x);
box(x, y, z + 2, x + 1, y + 1, z + 10, "#8f2929");
box(x, y, z + 11, x + 1, y + 1, z + 11, "#edb755");
set(x, y, z + 12, "#f6d879");
}
}
// A few bright ripples at the open front of the pond.
for (const [x, y, n] of [[11, 12, 3], [25, 10, 4], [35, 12, 3], [21, 37, 4]]) {
for (let i = 0; i < n; i++) {
if (get(x + i, y, 1)) set(x + i, y, 2, "#73bac0");
}
}import { draw } from "./assets/voxel";
import { puenteArqueado } from "./assets/puente-arqueado";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, puenteArqueado, x, y, { size: 64, angle: 0, t: performance.now() / 1000 });
// size: lo que mide en px su lado más largo
// angle: giro sobre el piso, en radianes
// t: segundos; si se mueve, se anima solo con eso# En una terminal, en la carpeta del juego
fogon assets add puente-arqueado
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["puente-arqueado"] })
# Queda en client/assets/puente-arqueado.ts
# https://fogon.page/object/puente-arqueado