← BásicoObjeto 3Dfogon/farol-v3
Farol
Arrastrá para girarlo// «Farol» · gpt-6-sol (medium)
// Lantern («Farol»). One of several variations of this object: follow the reference picture closely.
const iron = "#303b43";
const ironDark = "#202930";
const ironLight = "#52616a";
const ironEdge = "#697780";
const gold = "#bb8738";
const goldLight = "#e4b65b";
// Solid, stepped base.
box(10, 10, 0, 38, 38, 2, ironDark);
box(11, 11, 3, 37, 37, 4, iron);
box(13, 13, 5, 35, 35, 5, "#776443");
box(15, 15, 6, 33, 33, 6, "#94784b");
for (let i = 10; i <= 38; i++) {
for (const j of [10, 38]) {
set(i, j, 1, "#39464e");
set(i, j, 2, ironLight);
}
for (const j of [10, 38]) {
set(j, i, 1, "#39464e");
set(j, i, 2, ironLight);
}
}
for (let i = 11; i <= 37; i++) {
for (const j of [11, 37]) {
set(i, j, 4, ironLight);
set(j, i, 4, ironLight);
}
}
// Slender corner uprights leave the panes open so the candle is visible.
for (const x of [11, 35]) for (const y of [11, 35]) {
box(x, y, 5, x + 2, y + 2, 28, ironDark);
box(x + 1, y, 7, x + 2, y, 27, iron);
box(x, y + 1, 7, x, y + 2, 27, ironLight);
for (const z of [7, 19, 27]) {
set(x + 1, y, z, gold);
set(x + 1, y + 1, z, goldLight);
}
}
// Subtle blue-green glass edges and a few reflected glints.
for (const x of [14, 34]) for (const y of [14, 34]) {
box(x, y, 7, x, y, 25, "#648b8e");
for (const z of [12, 23]) set(x, y, z, "#a8c6bf");
}
for (const z of [13, 22]) {
line(17, 11, z, 18, 11, z + 2, 0, "#b6cfca");
line(37, 17, z, 37, 18, z + 2, 0, "#9dbbb8");
}
for (const z of [6, 27]) {
box(14, 11, z, 34, 11, z, "#53686c");
box(14, 37, z, 34, 37, z, "#344a50");
box(11, 14, z, 11, 34, z, "#53686c");
box(37, 14, z, 37, 34, z, "#53686c");
}
// Warm candle holder, candle, wick, and flame.
box(19, 19, 7, 29, 29, 7, "#795729");
box(20, 20, 8, 28, 28, 8, gold);
box(21, 21, 9, 27, 27, 9, goldLight);
box(22, 22, 10, 26, 26, 10, "#906321");
box(23, 23, 10, 25, 25, 18, "#e1bb69");
box(23, 23, 12, 23, 25, 17, "#f5db99");
box(24, 22, 11, 25, 22, 17, "#fff0b9");
box(24, 24, 19, 24, 24, 19, "#67441f");
set(24, 24, 20, "#ef9a38");
set(24, 24, 21, "#ffe28a");
set(24, 24, 22, "#fff1b5");
set(23, 24, 20, "#ffc65a");
// Deep overhanging eave and shallow, tiered pyramidal roof.
box(8, 8, 28, 40, 40, 29, ironDark);
for (let i = 8; i <= 40; i++) {
set(i, 8, 29, ironLight);
set(8, i, 29, ironLight);
set(i, 40, 29, "#354049");
set(40, i, 29, "#354049");
}
const tiers = [
[9, 39, 30], [11, 37, 31], [13, 35, 32],
[15, 33, 33], [17, 31, 34], [19, 29, 35]
];
for (const [lo, hi, z] of tiers) {
box(lo, lo, z, hi, hi, z, iron);
for (let i = lo; i <= hi; i++) {
set(i, lo, z, rand() < 0.15 ? ironEdge : ironLight);
set(lo, i, z, rand() < 0.12 ? ironEdge : "#46545d");
set(i, hi, z, "#253039");
set(hi, i, z, "#2b363e");
}
for (let k = 0; k < 8; k++) {
const x = lo + Math.floor(rand() * (hi - lo + 1));
const y = lo + Math.floor(rand() * (hi - lo + 1));
set(x, y, z, rand() < 0.5 ? "#46535b" : "#38464e");
}
}
box(21, 21, 36, 27, 27, 36, "#303a42");
box(22, 22, 37, 26, 26, 37, ironLight);
set(24, 21, 37, goldLight);
// Squared forged-metal hanging ring, upright above the roof.
box(20, 23, 38, 22, 25, 42, ironDark);
box(26, 23, 38, 28, 25, 42, ironDark);
box(21, 23, 43, 22, 25, 44, ironDark);
box(26, 23, 43, 27, 25, 44, ironDark);
box(22, 23, 44, 26, 25, 45, ironDark);
box(20, 23, 40, 20, 23, 42, ironLight);
box(22, 23, 45, 25, 23, 45, "#58636a");
set(27, 23, 41, "#4d5960");import { draw } from "./assets/voxel";
import { farolV3 } from "./assets/farol-v3";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, farolV3, 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 farol-v3
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["farol-v3"] })
# Queda en client/assets/farol-v3.ts
# https://fogon.page/object/farol-v3