← Gear3D assetfogon/mochila-de-aventurero
Mochila de aventurero
Drag to turn it// «Mochila de aventurero» · gpt-6-sol (medium)
// A big chunky adventurer's backpack standing upright facing -y: brown leather with a flap and two buckled straps, a rolled blanket tied on top, a small pot and a lantern hanging from the sides. It stands upright on the floor (z=0), facing front (-y), centered, chunky and readable.
// Chunky leather body, with a little grain on the broad surfaces.
for (let z = 2; z <= 35; z++) {
for (let y = 14; y <= 35; y++) {
for (let x = 11; x <= 37; x++) {
let c = "#88512f";
if (z >= 32) c = "#a46a3d";
else if (z <= 6) c = "#684027";
else if (y === 14) c = "#a2673b";
else if (x === 37 || y === 35) c = "#704329";
if (rand() < 0.055) c = z > 27 ? "#ad7142" : "#925a34";
set(x, y, z, c);
}
}
}
// Reinforced base and its two feet.
box(11, 13, 2, 37, 35, 5, "#613a27");
box(12, 13, 5, 36, 15, 6, "#b17a47");
box(12, 19, 0, 17, 31, 3, "#51372b");
box(31, 19, 0, 36, 31, 3, "#51372b");
box(12, 13, 6, 13, 34, 32, "#684029");
box(35, 13, 6, 36, 34, 32, "#684029");
box(14, 13, 7, 34, 13, 8, "#c08a50");
// Bulging side pockets.
box(7, 17, 6, 12, 31, 18, "#74452c");
box(7, 16, 10, 12, 18, 18, "#9c6037");
box(7, 16, 15, 12, 19, 17, "#ad7041");
box(36, 17, 6, 41, 31, 18, "#71442d");
box(36, 16, 10, 41, 18, 18, "#a0643a");
box(36, 16, 15, 41, 19, 17, "#b07845");
box(8, 15, 11, 11, 15, 13, "#54362a");
box(37, 15, 11, 40, 15, 13, "#54362a");
// Broad, rounded-looking flap and its dark stitched edge.
box(12, 10, 27, 36, 15, 35, "#75442a");
box(13, 9, 26, 35, 13, 33, "#a96c3e");
box(14, 9, 23, 34, 12, 28, "#a96c3e");
box(16, 9, 22, 32, 11, 25, "#a96c3e");
box(13, 8, 27, 35, 9, 28, "#603a29");
box(15, 8, 23, 33, 9, 24, "#603a29");
box(14, 9, 29, 34, 9, 32, "#b87b47");
for (let x = 16; x <= 32; x += 3) set(x, 8, 23, "#d0a16b");
// Small front pouch, tucked between the straps.
box(20, 10, 6, 28, 14, 16, "#70442d");
box(21, 9, 8, 27, 10, 14, "#a06439");
box(20, 8, 14, 28, 11, 17, "#77452b");
box(22, 8, 13, 26, 8, 14, "#b77942");
box(23, 7, 12, 25, 8, 13, "#c59a50");
// Two thick straps running down the face.
for (const x of [15, 30]) {
box(x, 7, 15, x + 3, 9, 34, "#603923");
box(x, 6, 16, x + 2, 7, 33, "#a96c3b");
box(x + 3, 7, 15, x + 3, 9, 33, "#764526");
box(x, 7, 11, x + 3, 10, 16, "#80502e");
// Brass buckle: a heavy outline, dark opening, and central tongue.
box(x - 1, 5, 22, x + 4, 6, 28, "#755020");
box(x - 1, 4, 23, x + 4, 5, 27, "#e4b95d");
box(x, 3, 24, x + 3, 4, 26, "#604128");
box(x + 1, 2, 25, x + 2, 3, 25, "#f4d484");
box(x - 1, 4, 22, x + 4, 5, 22, "#bd883a");
box(x - 1, 4, 28, x + 4, 5, 28, "#f0ca70");
for (const z of [18, 20]) set(x + 1, 5, z, "#493020");
}
// Rolled sage-green blanket across the top.
cylinder(10, 24, 39, 5, 29, "#536c62", "x");
cylinder(11, 24, 39, 4, 27, "#758d78", "x");
box(12, 19, 39, 36, 20, 41, "#91a88b");
box(12, 23, 43, 36, 25, 44, "#91a88b");
for (const x of [16, 32]) {
cylinder(x, 24, 39, 5, 3, "#684126", "x");
box(x, 23, 44, x + 2, 25, 44, "#ae7542");
}
// Visible spiral on the left end.
cylinder(9, 24, 39, 4, 1, "#394e49", "x");
cylinder(8, 24, 39, 3, 1, "#91a88b", "x");
cylinder(7, 24, 39, 2, 1, "#526c61", "x");
set(7, 24, 39, "#adbaa0");
// Hanging iron cooking pot on the left.
line(11, 22, 26, 6, 22, 25, 1, "#65432a");
line(6, 22, 25, 5, 22, 22, 1, "#b6b9ad");
line(3, 18, 21, 3, 18, 25, 1, "#828987");
line(3, 18, 25, 9, 18, 25, 1, "#c6cbc2");
line(9, 18, 25, 9, 18, 21, 1, "#828987");
cylinder(6, 23, 12, 4, 9, "#777f7e");
cylinder(6, 23, 12, 3, 9, "#a4acab");
box(3, 19, 13, 4, 20, 18, "#c6cbc2");
cylinder(6, 23, 20, 5, 2, "#c2c8c2");
cylinder(6, 23, 21, 3, 1, "#343d3f");
box(3, 18, 18, 4, 20, 20, "#d6d8c9");
// Brass-framed lantern hanging on the right.
line(37, 23, 27, 43, 23, 27, 1, "#b28a4c");
line(43, 23, 27, 43, 23, 22, 1, "#b28a4c");
box(40, 19, 21, 45, 25, 23, "#565a55");
box(41, 18, 22, 44, 25, 23, "#c8a95c");
box(40, 18, 11, 45, 25, 13, "#545a58");
box(41, 17, 12, 44, 25, 13, "#d4ae60");
box(40, 18, 14, 45, 25, 20, "#b47732");
box(41, 17, 15, 44, 18, 19, "#f2c554");
box(42, 16, 16, 43, 17, 18, "#ffe799");
box(40, 16, 14, 41, 18, 21, "#767a6c");
box(44, 16, 14, 45, 18, 21, "#767a6c");
box(42, 16, 14, 43, 17, 15, "#e6c279");
box(40, 17, 20, 45, 19, 21, "#d9b36b");
box(41, 19, 23, 44, 24, 24, "#6b7069");import { draw } from "./assets/voxel";
import { mochilaDeAventurero } from "./assets/mochila-de-aventurero";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, mochilaDeAventurero, 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 mochila-de-aventurero
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["mochila-de-aventurero"] })
# It lands in client/assets/mochila-de-aventurero.ts
# https://fogon.page/object/mochila-de-aventurero