← Basics3D assetfogon/silla-adirondack
Silla Adirondack
Drag to turn it// «Silla Adirondack» · gpt-6-sol (medium)
// Adirondack chair («Silla Adirondack»).
// Adirondack chair — warm red-orange painted wood
const top = "#f47b58";
const light = "#e96b4b";
const wood = "#ca563e";
const shade = "#a94735";
const dark = "#80382e";
function plank(x0, y0, z0, x1, y1, z1) {
box(x0, y0, z0, x1, y1, z1, wood);
box(x0, y0, z1, x1, y1, z1, top);
box(x0, y0, z0, x1, y0, z1 - 1, light);
box(x0, y1, z0, x1, y1, z1 - 1, shade);
box(x0, y0, z0, x0, y1, z0, shade);
}
// Four stout legs, with the rear pair set back.
for (const x of [12, 35]) {
box(x, 11, 0, x + 3, 15, 21, shade);
box(x, 11, 1, x + 3, 11, 20, wood);
box(x, 11, 20, x + 3, 15, 21, light);
box(x, 12, 3, x, 14, 17, dark);
box(x, 34, 0, x + 3, 38, 18, shade);
box(x, 34, 1, x + 3, 34, 17, wood);
box(x, 34, 18, x + 3, 38, 18, light);
}
// Side rails supporting the gently reclining seat.
for (const x of [13, 36]) {
line(x, 13, 18, x, 34, 15, 2, shade);
line(x, 13, 20, x, 33, 17, 1, wood);
}
// Separate crosswise seat boards and the broad front edge.
for (let y = 12; y <= 32; y += 4) {
const z = 20 - Math.floor((y - 12) / 7);
plank(14, y, z - 2, 37, y + 2, z);
box(16, y, z, 34, y, z, light);
}
plank(12, 10, 17, 39, 12, 20);
box(15, 10, 18, 36, 10, 18, dark);
// Seven distinct back slats, fanning up to a softly arched outline.
const heights = [34, 38, 42, 43, 42, 38, 34];
for (let i = 0; i < 7; i++) {
const x = 12 + i * 4;
const h = heights[i];
for (let z = 17; z <= h; z++) {
const y = 30 + Math.floor((z - 17) / 5);
box(x, y, z, x + 2, y + 2, z, wood);
set(x, y, z, light);
set(x + 2, y + 2, z, shade);
// Small shaded divisions give the painted slats their stacked detail.
if ((z - 18) % 5 === 0 && z < h - 1) {
box(x, y, z, x + 2, y, z, shade);
set(x + 1, y, z, dark);
}
}
const capY = 30 + Math.floor((h - 17) / 5);
box(x, capY, h, x + 2, capY + 2, h, top);
box(x, capY + 2, h - 1, x + 2, capY + 2, h - 1, dark);
}
// Back cross-braces, visible between the slats.
for (const z of [21, 29]) {
box(12, 32 + Math.floor((z - 17) / 5), z,
38, 33 + Math.floor((z - 17) / 5), z + 1, shade);
}
// Uprights beneath the wide, flat armrests.
for (const x of [9, 39]) {
box(x, 16, 17, x + 2, 19, 25, shade);
box(x, 16, 19, x + 2, 16, 24, wood);
box(x, 28, 18, x + 2, 31, 25, shade);
box(x, 28, 19, x + 2, 28, 24, wood);
}
// Broad arm paddles: widened at the front, narrower near the back.
for (const left of [true, false]) {
const outer = left ? 6 : 35;
plank(outer, 11, 25, outer + 8, 19, 27);
plank(left ? 9 : 35, 20, 25, left ? 15 : 41, 33, 27);
box(outer + 1, 11, 27, outer + 7, 12, 27, "#ff8962");
// Subtle fasteners and irregularities in the paint.
for (const y of [16, 28]) {
set(left ? 12 : 38, y, 27, shade);
}
}
for (let i = 0; i < 22; i++) {
const x = 14 + Math.floor(rand() * 24);
const y = 12 + Math.floor(rand() * 20);
const c = get(x, y, 20);
if (c === top || c === light) set(x, y, 20, rand() < 0.5 ? light : "#f88860");
}import { draw } from "./assets/voxel";
import { sillaAdirondack } from "./assets/silla-adirondack";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, sillaAdirondack, 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 silla-adirondack
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["silla-adirondack"] })
# It lands in client/assets/silla-adirondack.ts
# https://fogon.page/object/silla-adirondack