← Nature3D assetfogon/muneco-de-nieve
Muñeco de nieve
Drag to turn it// «Muñeco de nieve» · gpt-6-sol (medium)
// A snowman: three stacked white snowballs getting smaller, coal eyes and buttons, an orange carrot nose pointing forward, stick arms and a red scarf.
// Three chunky snowballs
ellipsoid(24, 25, 11, 11, 11, 11, "#eef8fc");
ellipsoid(24, 25, 26, 9, 9, 9, "#eef8fc");
ellipsoid(24, 25, 38, 7, 7, 7, "#eef8fc");
// Soft, sunlit snow with cool shadows
forEach((x, y, z, color) => {
if (color !== "#eef8fc") return;
const exposed = !get(x, y, z + 1) || !get(x, y - 1, z);
const n = rand();
let shade = z < 13 ? "#e6f2f8" : "#f2faff";
if (exposed && !get(x, y, z + 1)) shade = "#fffefd";
if (exposed && y > 27) shade = "#dcecf5";
if (exposed && n < 0.045) shade = "#d9eaf3";
if (exposed && n > 0.965) shade = "#ffffff";
set(x, y, z, shade);
});
// Branch arms, reaching up and out
line(16, 23, 28, 9, 22, 32, 1.4, "#80502d");
line(9, 22, 32, 5, 21, 35, 1.2, "#80502d");
line(9, 22, 32, 7, 20, 38, 0.8, "#704022");
line(7, 21, 34, 4, 19, 33, 0.7, "#704022");
line(32, 23, 28, 39, 22, 32, 1.4, "#80502d");
line(39, 22, 32, 44, 21, 35, 1.2, "#80502d");
line(39, 22, 32, 41, 20, 38, 0.8, "#704022");
line(42, 21, 34, 45, 19, 33, 0.7, "#704022");
line(11, 21, 32, 7, 20, 35, 0, "#b87b40");
line(36, 21, 30, 41, 20, 33, 0, "#b87b40");
// A thick scarf wrapped around the narrow neck
for (let z = 32; z <= 34; z++) {
for (let x = 16; x <= 32; x++) {
for (let y = 17; y <= 33; y++) {
const d = Math.hypot(x - 24, y - 25);
if (d >= 5.7 && d <= 7.4) {
set(x, y, z, z === 32 ? "#ae2638" : z === 34 ? "#fa5360" : "#df3548");
}
}
}
}
// Knot and dangling end on the front-right
ellipsoid(29, 17, 32, 2, 1.8, 2, "#e93d4c");
box(28, 15, 25, 30, 17, 30, "#d92e42");
box(28, 14, 24, 30, 16, 25, "#b92438");
box(28, 14, 28, 30, 14, 28, "#fa6970");
box(28, 14, 31, 29, 14, 32, "#ff7375");
// Glossy coal buttons
for (const [y, z] of [[15, 27], [16, 23], [13, 13], [14, 8]]) {
sphere(24, y, z, 1.45, "#273039");
set(23, y - 1, z + 1, "#687580");
}
// Coal eyes and a little dotted smile
sphere(21, 18, 40, 1.35, "#242b34");
sphere(27, 18, 40, 1.35, "#242b34");
set(20, 17, 41, "#77838b");
set(26, 17, 41, "#77838b");
for (const [x, y, z] of [
[20, 21, 36], [22, 19, 35], [24, 18, 35],
[26, 19, 35], [28, 21, 36]
]) {
set(x, y, z, "#34383d");
}
// Tapered carrot pointing straight toward the viewer (-y)
for (let y = 9; y <= 19; y++) {
const r = y >= 17 ? 2 : y >= 13 ? 1.4 : 0.6;
for (let x = 21; x <= 27; x++) {
for (let z = 35; z <= 40; z++) {
if ((x - 24) ** 2 + (z - 38) ** 2 <= r * r) {
set(x, y, z, z >= 38 ? "#ffad30" : "#ee731f");
}
}
}
}
for (const y of [14, 17]) {
set(23, y, 39, "#ffc04b");
}import { draw } from "./assets/voxel";
import { munecoDeNieve } from "./assets/muneco-de-nieve";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, munecoDeNieve, 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 muneco-de-nieve
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["muneco-de-nieve"] })
# It lands in client/assets/muneco-de-nieve.ts
# https://fogon.page/object/muneco-de-nieve