← Basics3D assetfogon/farol-v1
Farol
Drag to turn it// «Farol» · gpt-6-sol (medium)
// Lantern («Farol»). One of several variations of this object: follow the reference picture closely.
// Dark iron lantern with a stepped roof and a warm central flame.
const iron = "#27313a";
const shadow = "#19232b";
const edge = "#394652";
const lightEdge = "#53616b";
const gold = "#a7752c";
const goldLight = "#d5a34a";
// Solid, layered base.
box(10, 10, 0, 38, 38, 1, shadow);
box(9, 9, 2, 39, 39, 3, iron);
box(10, 10, 4, 38, 38, 5, edge);
box(12, 12, 5, 36, 36, 5, "#776647");
box(14, 14, 6, 34, 34, 6, "#a48851");
box(16, 16, 6, 32, 32, 6, "#bea16a");
// Crisp edges around the bottom frame.
box(9, 9, 2, 39, 9, 3, shadow);
box(9, 9, 2, 9, 39, 3, shadow);
box(10, 10, 4, 38, 10, 4, lightEdge);
box(10, 10, 4, 10, 38, 4, lightEdge);
box(10, 38, 4, 38, 38, 5, iron);
box(38, 10, 4, 38, 38, 5, iron);
// Narrow glass catches the light without filling the open interior.
box(13, 11, 9, 13, 11, 25, "#9bafa9");
box(34, 11, 8, 34, 11, 24, "#b8ccc4");
box(11, 15, 9, 11, 15, 24, "#849e9d");
box(11, 34, 9, 11, 34, 25, "#a2bcb5");
box(35, 35, 9, 35, 35, 24, "#b4c9c0");
box(16, 36, 19, 18, 36, 20, "#c9d7c8");
box(30, 36, 13, 31, 36, 17, "#b6cec4");
box(17, 11, 21, 18, 11, 23, "#d3dcd0");
box(11, 19, 17, 11, 19, 20, "#d0dcd0");
// Four stout corner uprights.
for (const x of [9, 36]) {
for (const y of [9, 36]) {
box(x, y, 6, x + 3, y + 3, 28, iron);
box(x, y, 7, x, y + 3, 27, lightEdge);
box(x, y, 6, x + 3, y, 28, edge);
box(x + 3, y + 1, 7, x + 3, y + 3, 27, shadow);
}
}
// Small brass fittings on the visible uprights.
for (const x of [10, 37]) {
for (const z of [10, 24]) {
box(x, 8, z, x + 1, 8, z + 2, gold);
set(x, 8, z + 2, goldLight);
}
}
for (const y of [11, 37]) {
for (const z of [10, 23]) {
box(39, y, z, 39, y + 1, z + 2, gold);
set(39, y, z + 2, goldLight);
}
}
// Brass oil-cup and its raised wick, visible through the glass.
box(19, 19, 7, 29, 29, 7, "#795722");
box(20, 20, 8, 28, 28, 8, goldLight);
box(21, 21, 9, 27, 27, 10, "#8d6327");
box(22, 22, 11, 26, 26, 13, "#c58e38");
box(23, 22, 14, 25, 25, 15, "#f3c86c");
box(23, 23, 16, 25, 24, 18, "#ffdf85");
box(24, 23, 19, 24, 24, 20, "#fff0af");
set(24, 23, 21, "#ffe5a0");
for (const [x, y] of [[18, 22], [29, 23], [22, 29], [26, 18]]) {
box(x, y, 7, x + 1, y + 1, 8, gold);
set(x, y, 9, goldLight);
}
// Broad overhanging eave and successive slate-colored roof steps.
box(5, 5, 28, 43, 43, 29, shadow);
box(5, 5, 30, 43, 43, 30, edge);
box(6, 6, 31, 42, 42, 31, lightEdge);
box(8, 8, 32, 40, 40, 32, iron);
box(9, 9, 33, 39, 39, 33, edge);
box(12, 12, 34, 36, 36, 34, iron);
box(13, 13, 35, 35, 35, 35, edge);
box(16, 16, 36, 32, 32, 36, iron);
box(17, 17, 37, 31, 31, 37, lightEdge);
box(20, 20, 38, 28, 28, 38, shadow);
// Dark lower edges give each roof tier its pronounced staircase profile.
for (const [a, b, z] of [[5, 43, 28], [8, 40, 32], [12, 36, 34], [16, 32, 36]]) {
box(a, a, z, b, a, z, shadow);
box(a, a, z, a, b, z, shadow);
}
box(6, 6, 31, 42, 6, 31, "#626d72");
box(9, 9, 33, 39, 9, 33, "#52606a");
box(13, 13, 35, 35, 13, 35, "#56636b");
// Square hanging ring on the crown, open through its middle.
box(20, 20, 39, 22, 28, 44, iron);
box(26, 20, 39, 28, 28, 44, shadow);
box(20, 20, 44, 28, 28, 45, edge);
box(21, 20, 45, 27, 27, 45, lightEdge);
box(20, 20, 39, 28, 22, 40, shadow);
box(20, 26, 39, 28, 28, 40, iron);
box(23, 19, 40, 25, 20, 42, gold);
box(23, 19, 42, 24, 19, 42, "#edb85b");import { draw } from "./assets/voxel";
import { farolV1 } from "./assets/farol-v1";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, farolV1, x, y, { size: 64, angle: 0, t: performance.now() / 1000 });
// size: its longest side, in px
// angle: turn on the floor, in radians
// t: seconds; if it moves, that animates it# In a terminal, in the game's folder
fogon assets add farol-v1
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["farol-v1"] })
# It lands in client/assets/farol-v1.ts
# https://fogon.page/object/farol-v1