← Asian3D assetfogon/mono-de-nieve
Mono de nieve
Drag to turn it// «Mono de nieve» · gpt-6-sol (medium)
// A Japanese snow monkey sitting, compact and round: thick fluffy grey-beige fur, a bright red-pink face and hands, small dark eyes, a few snowflakes of white blocks on its head and shoulders, arms wrapped around its knees.
const fur = "#b7ad98";
const lightFur = "#c9bea6";
const shadowFur = "#958c7a";
const pink = "#df6170";
const brightPink = "#ee7d89";
const deepPink = "#a94354";
function furTexture() {
forEach((x, y, z, color) => {
if (color !== fur && color !== lightFur && color !== shadowFur) return;
const exposed =
!get(x, y - 1, z) || !get(x - 1, y, z) ||
!get(x + 1, y, z) || !get(x, y, z + 1);
if (!exposed) return;
const n = rand();
if (n < 0.055) set(x, y, z, "#ded3bb");
else if (n < 0.125) set(x, y, z, z < 12 ? "#898273" : "#a29885");
else if (n < 0.19) set(x, y, z, "#cfc3aa");
});
}
// Round seated body and haunches.
ellipsoid(24, 27, 15, 14, 11, 13, fur);
ellipsoid(24, 29, 9, 15, 10, 8, shadowFur);
ellipsoid(14, 20, 9, 8, 10, 9, fur);
ellipsoid(34, 20, 9, 8, 10, 9, fur);
// Knees pulled up in front of the belly.
ellipsoid(15, 14, 11, 7, 7, 9, fur);
ellipsoid(33, 14, 11, 7, 7, 9, fur);
ellipsoid(15, 11, 13, 5, 4, 5, lightFur);
ellipsoid(33, 11, 13, 5, 4, 5, lightFur);
// Broad, flat feet on the floor.
ellipsoid(14, 10, 2, 7, 6, 2, shadowFur);
ellipsoid(34, 10, 2, 7, 6, 2, shadowFur);
ellipsoid(14, 8, 3, 6, 4, 2, fur);
ellipsoid(34, 8, 3, 6, 4, 2, fur);
// Soft pale chest, visible between the knees.
ellipsoid(24, 17, 19, 9, 3, 8, lightFur);
ellipsoid(24, 15, 15, 6, 2, 5, "#d6cab0");
// Short tail peeking out beside the body.
ellipsoid(38, 34, 8, 4, 4, 5, fur);
ellipsoid(40, 34, 7, 2, 3, 3, lightFur);
// Thick arms curl forward around the outside of the knees.
line(11, 24, 22, 9, 17, 18, 4, fur);
line(9, 17, 18, 12, 11, 10, 4, fur);
line(37, 24, 22, 39, 17, 18, 4, fur);
line(39, 17, 18, 36, 11, 10, 4, fur);
ellipsoid(11, 17, 17, 4, 5, 6, lightFur);
ellipsoid(37, 17, 17, 4, 5, 6, lightFur);
furTexture();
// Red-pink hands clasp the fronts of the knees.
ellipsoid(14, 8, 10, 4, 2, 3, deepPink);
ellipsoid(34, 8, 10, 4, 2, 3, deepPink);
ellipsoid(14, 7, 11, 4, 2, 2, pink);
ellipsoid(34, 7, 11, 4, 2, 2, pink);
for (const x of [12, 14, 16, 32, 34, 36]) {
line(x, 6, 9, x, 6, 7, 0, brightPink);
}
// A few flakes caught on the shoulders.
for (const [x, y, z] of [
[10, 23, 26], [12, 21, 27], [37, 23, 26],
[35, 20, 26], [9, 19, 22], [39, 19, 22]
]) {
set(x, y, z, "#f7f8f2");
if (rand() < 0.5) set(x + 1, y, z, "#e7f0ee");
}
// Only the head turns; its pivot sits at the neck.
part("head", [24, 22, 25]);
ellipsoid(24, 21, 30, 11, 9, 9, fur);
ellipsoid(24, 22, 34, 9, 8, 5, lightFur);
ellipsoid(13, 20, 30, 3, 3, 4, fur);
ellipsoid(35, 20, 30, 3, 3, 4, fur);
// Small rosy ears tucked into the cheek fur.
ellipsoid(12, 17, 30, 2, 1, 3, deepPink);
ellipsoid(36, 17, 30, 2, 1, 3, deepPink);
ellipsoid(12, 16, 30, 1, 1, 2, brightPink);
ellipsoid(36, 16, 30, 1, 1, 2, brightPink);
furTexture();
// Bright, unmistakable snow-monkey face.
ellipsoid(24, 12, 30, 8, 3, 7, deepPink);
ellipsoid(24, 10, 31, 7, 2, 6, pink);
ellipsoid(19, 9, 28, 3, 1, 3, brightPink);
ellipsoid(29, 9, 28, 3, 1, 3, brightPink);
ellipsoid(24, 9, 26, 4, 2, 2, brightPink);
ellipsoid(24, 7, 27, 2, 1, 1, "#a73d4d");
// Dark, close-set eyes under a gentle brow.
box(19, 8, 31, 21, 8, 32, "#463c3b");
box(27, 8, 31, 29, 8, 32, "#463c3b");
set(20, 7, 32, "#171b1d");
set(28, 7, 32, "#171b1d");
set(20, 7, 33, "#fff1df");
set(28, 7, 33, "#fff1df");
line(18, 8, 34, 21, 8, 34, 0, "#ad4554");
line(27, 8, 34, 30, 8, 34, 0, "#ad4554");
set(24, 6, 27, "#713640");
line(22, 7, 24, 26, 7, 24, 0, "#773c44");
set(24, 7, 23, "#b64d5c");
// Snowflakes resting on the crown.
for (const [x, y, z] of [
[19, 18, 39], [20, 18, 39], [25, 17, 39],
[29, 20, 38], [16, 20, 37], [32, 23, 36]
]) {
set(x, y, z, "#fcfffa");
}
set(25, 16, 38, "#e5f2ef");
set(29, 19, 38, "#e5f2ef");
animate("head", { type: "swing", axis: "z", speed: 1.5, amplitude: 0.3 });import { draw } from "./assets/voxel";
import { monoDeNieve } from "./assets/mono-de-nieve";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, monoDeNieve, 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 mono-de-nieve
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["mono-de-nieve"] })
# It lands in client/assets/mono-de-nieve.ts
# https://fogon.page/object/mono-de-nieve