← Gear3D assetfogon/botas-de-cuero
Botas de cuero
Drag to turn it// «Botas de cuero» · gpt-6-sol (medium)
// A pair of tall brown leather boots standing side by side facing -y, with turned-down cuffs, buckled straps, darker soles and heels.
const leather = "#92532f";
const toeLeather = "#a8653b";
const cuffLeather = "#ba7949";
const sole = "#332823";
const soleEdge = "#4a352a";
const brass = "#c9943f";
const brassLight = "#f2ca70";
for (const cx of [14, 34]) {
const cy = 27;
// Thick, rounded soles with distinct raised heels.
ellipsoid(cx, 19, 2, 8, 13, 2, sole);
box(cx - 6, 27, 0, cx + 6, 35, 4, sole);
box(cx - 6, 24, 1, cx + 6, 29, 3, sole);
ellipsoid(cx, 19, 4, 8, 12, 2, soleEdge);
box(cx - 6, 27, 4, cx + 6, 35, 5, soleEdge);
// Rounded toes and tall, sturdy shafts.
cylinder(cx, cy, 6, 7.5, 29, leather);
ellipsoid(cx, 17, 9, 8, 11, 6, toeLeather);
ellipsoid(cx, 16, 12, 6, 8, 2, "#b87647");
// Subtle leather grain, applied before the hardware.
forEach((x, y, z, color) => {
if (x < cx - 9 || x > cx + 9) return;
if (color === leather && rand() < 0.075)
set(x, y, z, rand() < 0.55 ? "#9e6038" : "#824628");
if (color === toeLeather && rand() < 0.07)
set(x, y, z, "#b57445");
});
// Two broad straps around each shaft.
for (const z of [17, 26]) {
cylinder(cx, cy, z, 8, 3, "#663d2b");
box(cx - 6, 18, z, cx + 6, 19, z + 2, "#784529");
box(cx - 5, 17, z + 2, cx + 5, 18, z + 2, "#a7673b");
// Oversized brass buckle: dark opening, bright rim and prong.
const bx = cx - 2;
box(bx - 3, 16, z - 1, bx + 3, 16, z + 4, brass);
box(bx - 2, 15, z, bx + 2, 15, z + 3, "#493326");
box(bx - 3, 15, z + 4, bx + 3, 15, z + 4, brassLight);
box(bx - 3, 15, z - 1, bx - 3, 15, z + 4, brassLight);
box(bx - 1, 14, z + 1, bx + 2, 14, z + 1, brass);
set(bx + 3, 15, z + 2, "#f5d585");
}
// Turned-down cuff, wider than the shaft, with a heavy folded hem.
cylinder(cx, cy, 32, 9, 7, "#70412a");
cylinder(cx, cy, 34, 9, 5, cuffLeather);
cylinder(cx, cy, 38, 8.5, 1, "#d29358");
cylinder(cx, cy, 39, 6, 1, "#513425"); // Shadowed opening.
box(cx - 6, 17, 32, cx + 6, 18, 34, "#865031");
box(cx - 6, 16, 34, cx + 6, 17, 37, cuffLeather);
box(cx - 5, 16, 37, cx + 5, 16, 38, "#d29258");
box(cx - 5, 16, 32, cx + 5, 16, 32, "#583322");
// Chunky stitching on the cuff and along the toe seam.
for (let x = cx - 5; x <= cx + 5; x += 2) {
set(x, 16, 33, "#573522");
set(x, 11, 12, "#704329");
}
for (let z = 8; z <= 30; z += 3) {
set(cx - 7, 25, z, "#593923");
set(cx + 7, 25, z, "#593923");
}
// A clean, lighter edge above the dark sole.
for (let x = cx - 5; x <= cx + 5; x++) {
set(x, 8, 4, "#765039");
}
}import { draw } from "./assets/voxel";
import { botasDeCuero } from "./assets/botas-de-cuero";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, botasDeCuero, 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 botas-de-cuero
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["botas-de-cuero"] })
# It lands in client/assets/botas-de-cuero.ts
# https://fogon.page/object/botas-de-cuero