← Fantasy3D assetfogon/druida
Druida
Drag to turn it// «Druida» · gpt-6-sol (medium)
// A cartoon druid facing front (-y): a hooded robe of mossy green and brown with leaves stitched on the shoulders, a crown of small antlers and leaves over the hood, a long grey beard, and a wooden staff with a curl at the top where small green leaves and a glowing green orb grow.
// Walking legs, pivoting beneath the robe.
part("leftLeg", [19, 23, 12]);
ellipsoid(19, 23, 6, 3, 3, 7, "#465039");
box(16, 19, 0, 21, 26, 3, "#483b30");
box(16, 19, 2, 21, 20, 3, "#6b5640");
animate("leftLeg", { type: "swing", axis: "x", speed: 5, amplitude: 0.3 });
part("rightLeg", [28, 23, 12]);
ellipsoid(28, 23, 6, 3, 3, 7, "#465039");
box(26, 19, 0, 31, 26, 3, "#483b30");
box(26, 19, 2, 31, 20, 3, "#6b5640");
animate("rightLeg", { type: "swing", axis: "x", speed: -5, amplitude: 0.3 });
part("body");
// Broad, rounded robe with a flared hem.
ellipsoid(23, 24, 12, 11, 9, 9, "#374b37");
ellipsoid(23, 24, 19, 9, 8, 12, "#536847");
ellipsoid(23, 23, 16, 9, 8, 10, "#60764c");
ellipsoid(23, 24, 7, 11, 9, 4, "#43573a");
ellipsoid(23, 24, 5, 11, 9, 2, "#788457");
ellipsoid(23, 24, 6, 10, 8, 2, "#354a36");
// Dark opening and two overlapping front panels.
ellipsoid(23, 16, 19, 5, 2, 10, "#293d32");
line(20, 15, 27, 23, 15, 8, 1, "#a2915b");
line(27, 15, 27, 23, 14, 8, 1, "#394a34");
line(23, 13, 9, 23, 13, 6, 0, "#bb9b61");
for (let z = 11; z <= 23; z += 4) {
set(21, 13, z, "#bca469");
set(21, 12, z, "#dfc583");
}
// Belt, buckle, and pouch.
box(15, 16, 14, 31, 18, 16, "#473a2e");
box(21, 14, 14, 25, 16, 17, "#aa8750");
box(22, 13, 15, 24, 14, 16, "#e1bd72");
ellipsoid(30, 17, 12, 3, 2, 4, "#735039");
box(29, 14, 13, 31, 15, 14, "#b28a52");
// Sleeves and hands.
ellipsoid(13, 23, 23, 5, 6, 7, "#465b3c");
ellipsoid(12, 20, 21, 4, 5, 5, "#667b4e");
ellipsoid(32, 22, 23, 5, 6, 7, "#465b3c");
line(33, 20, 22, 37, 17, 20, 3, "#61794c");
ellipsoid(37, 17, 19, 3, 3, 3, "#ad8462");
box(36, 14, 19, 38, 15, 20, "#d3a57c");
// Hood first, so the face sits visibly inside its opening.
ellipsoid(23, 22, 32, 10, 9, 8, "#344a39");
ellipsoid(23, 21, 34, 10, 9, 6, "#526a48");
ellipsoid(23, 15, 32, 7, 4, 6, "#273d34");
ellipsoid(23, 15, 32, 6, 3, 5, "#bd9571");
ellipsoid(23, 13, 30, 5, 2, 3, "#d4a681");
// Big friendly eyes.
for (const x of [20, 26]) {
ellipsoid(x, 11, 33, 2, 1, 2, "#f0dfbd");
set(x, 10, 33, "#354943");
set(x, 9, 34, "#ffffff");
}
ellipsoid(23, 10, 30, 2, 2, 2, "#d9ab81");
set(21, 10, 29, "#a56f65");
set(25, 10, 29, "#a56f65");
// Hood rim, brow, and long tapered grey beard.
line(16, 15, 34, 19, 12, 37, 2, "#78905a");
line(19, 12, 37, 27, 12, 37, 2, "#829a60");
line(27, 12, 37, 30, 15, 34, 2, "#587448");
ellipsoid(23, 12, 26, 6, 3, 6, "#6f7770");
ellipsoid(23, 10, 23, 5, 2, 7, "#9da69b");
ellipsoid(23, 11, 19, 3, 2, 6, "#bbc1ad");
line(20, 10, 27, 21, 9, 20, 1, "#d4d1ba");
line(26, 10, 27, 25, 9, 19, 1, "#777f78");
line(23, 9, 24, 23, 10, 15, 1, "#d0cdb5");
ellipsoid(20, 10, 29, 3, 2, 2, "#b0b4a4");
ellipsoid(26, 10, 29, 3, 2, 2, "#a6ad9f");
// Stitched leaves on the shoulders.
function leaf(x, y, z, rx, ry, rz, color) {
ellipsoid(x, y, z, rx, ry, rz, color);
line(x, y - 1, z - rz, x, y - 1, z + rz, 0, "#b6a56a");
}
leaf(13, 18, 27, 3, 1, 4, "#83a65d");
leaf(15, 16, 23, 2, 1, 3, "#aac16e");
leaf(33, 18, 27, 3, 1, 4, "#769953");
leaf(31, 16, 23, 2, 1, 3, "#abc574");
for (const x of [11, 14, 32, 35]) {
set(x, 16, 23, "#ddc381");
set(x, 16, 25, "#ddc381");
}
// Small branching antlers rising from the hood.
for (const side of [-1, 1]) {
const root = 23 + side * 6;
line(root, 19, 38, root + side * 2, 19, 43, 1, "#69503a");
line(root + side * 2, 19, 43, root + side * 5, 20, 46, 1, "#90704a");
line(root + side * 1, 19, 41, root - side * 1, 18, 45, 1, "#90704a");
line(root + side * 3, 20, 44, root + side * 3, 19, 46, 0, "#c09b67");
leaf(root + side * 4, 18, 42, 2, 1, 2, "#91b969");
}
leaf(23, 12, 39, 3, 1, 2, "#a9c976");
leaf(19, 14, 40, 2, 1, 2, "#628c55");
// Weathered staff, with a crooked, curling living tip.
line(39, 17, 0, 38, 17, 20, 2, "#4b392e");
line(38, 17, 20, 39, 18, 32, 2, "#604630");
line(39, 18, 32, 37, 18, 38, 2, "#765438");
line(37, 18, 38, 34, 18, 41, 1, "#82603d");
line(34, 18, 41, 32, 18, 40, 1, "#82603d");
line(32, 18, 40, 32, 18, 37, 1, "#82603d");
line(39, 16, 5, 38, 16, 17, 0, "#a37b4b");
line(39, 17, 24, 38, 17, 31, 0, "#a37b4b");
box(37, 15, 12, 40, 19, 13, "#ad8650");
box(37, 15, 10, 40, 19, 10, "#d1a968");
leaf(39, 17, 34, 3, 1, 2, "#81ae59");
leaf(35, 16, 43, 2, 1, 2, "#a0ca65");
leaf(31, 17, 41, 2, 1, 2, "#79aa5b");
// A bright orb nested inside the staff's curl.
part("orb", [33, 18, 38]);
sphere(33, 18, 38, 3, "#aaff4d");
set(32, 15, 39, "#efffb0");
animate("orb", {
type: "colors",
palette: ["#aaff4d", "#55ee79", "#f1ffad"],
pattern: "pulse",
glow: 0.7
});import { draw } from "./assets/voxel";
import { druida } from "./assets/druida";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, druida, 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 druida
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["druida"] })
# It lands in client/assets/druida.ts
# https://fogon.page/object/druida