← Animals3D assetfogon/mono
Mono
Drag to turn it// «Mono» · gpt-6-sol (medium)
// A playful cartoon brown monkey standing on two legs facing front (-y): a round body with a lighter tan belly, long arms, a round head with a big tan heart-shaped face, round ears, black dot eyes and a wide smile. A long curly tail rising behind it. It holds a yellow banana in one hand.
const fur = "#965329";
const furLight = "#ac6633";
const furDark = "#783c22";
const tan = "#edbd7e";
const tanLight = "#ffd29a";
const tanShade = "#dba567";
const ink = "#271b19";
function furry(cx, cy, cz, rx, ry, rz) {
for (let x = Math.ceil(cx - rx); x <= cx + rx; x++)
for (let y = Math.ceil(cy - ry); y <= cy + ry; y++)
for (let z = Math.ceil(cz - rz); z <= cz + rz; z++) {
const d = ((x - cx) / rx) ** 2 +
((y - cy) / ry) ** 2 +
((z - cz) / rz) ** 2;
if (d <= 1) {
let color = z > cz + 2 ? furLight : z < cz - 3 ? furDark : fur;
if (rand() < 0.075) color = color === furDark ? fur : furLight;
set(x, y, z, color);
}
}
}
part("body", [24, 23, 18]);
// Short legs and oversized forward-facing feet.
furry(18, 23, 7, 3.5, 3.5, 7);
furry(30, 23, 7, 3.5, 3.5, 7);
ellipsoid(18, 18, 2, 5, 6, 2.5, furDark);
ellipsoid(30, 18, 2, 5, 6, 2.5, furDark);
ellipsoid(18, 16, 3, 4, 4, 1.5, fur);
ellipsoid(30, 16, 3, 4, 4, 1.5, fur);
furry(24, 23, 16, 9, 7, 11);
ellipsoid(24, 16.5, 15, 7, 2.8, 8, tanShade);
ellipsoid(24, 14.8, 17, 6, 2, 6.5, tan);
// Round ears sit behind the enormous head.
furry(11, 22, 33, 4, 3.5, 5);
furry(37, 22, 33, 4, 3.5, 5);
ellipsoid(10, 18.8, 33, 2.5, 1.3, 3, tanShade);
ellipsoid(38, 18.8, 33, 2.5, 1.3, 3, tanShade);
furry(24, 22, 32, 11, 9, 9);
// Two upper lobes and a broad lower muzzle make the tan face heart-shaped.
ellipsoid(20, 13, 35, 5.3, 4, 5.2, tan);
ellipsoid(28, 13, 35, 5.3, 4, 5.2, tan);
ellipsoid(24, 12, 30, 7, 4, 5.5, tanShade);
ellipsoid(24, 10.8, 31, 6, 2.5, 4.5, tan);
ellipsoid(19, 10.5, 37, 2.2, 1, 1.5, tanLight);
ellipsoid(29, 10.5, 37, 2.2, 1, 1.5, tanLight);
// Shiny dot eyes, little nose, and an unmistakable wide grin.
ellipsoid(20, 8.5, 35, 1.3, 0.8, 1.5, ink);
ellipsoid(28, 8.5, 35, 1.3, 0.8, 1.5, ink);
set(20, 8, 36, "#ffffff");
set(28, 8, 36, "#ffffff");
ellipsoid(24, 8.3, 31, 1.6, 0.8, 1, "#543023");
const smile = [
[19, 29], [20, 28], [21, 27], [22, 27], [23, 26],
[24, 26], [25, 26], [26, 27], [27, 27], [28, 28], [29, 29]
];
for (const [x, z] of smile) set(x, 9, z, ink);
set(19, 9, 30, ink);
set(29, 9, 30, ink);
// Curly tail rises behind the monkey and peeks out beside its head.
part("tail", [29, 30, 13]);
const curl = [
[29, 30, 13], [33, 33, 14], [37, 35, 18],
[40, 35, 23], [40, 35, 28], [38, 35, 32],
[35, 35, 33], [33, 35, 31], [34, 35, 28]
];
for (let i = 0; i < curl.length - 1; i++) {
const a = curl[i], b = curl[i + 1];
line(...a, ...b, i < 3 ? 2.2 : 1.8, i % 3 === 0 ? furLight : fur);
}
sphere(34, 35, 28, 2, furDark);
animate("tail", { type: "swing", axis: "y", speed: 2, amplitude: 0.3 });
part("leftArm", [15, 22, 24]);
furry(12, 20, 19, 3.7, 3.5, 6);
line(12, 19, 17, 9, 16, 12, 2.5, fur);
sphere(9, 16, 12, 3, furLight);
// A chunky crescent banana held against the front of the body.
const banana = [
[9, 13, 12], [9, 12, 10], [11, 11, 8],
[14, 11, 8], [17, 12, 10], [18, 13, 13]
];
for (let i = 0; i < banana.length - 1; i++)
line(...banana[i], ...banana[i + 1], 1.8, i < 2 ? "#f5c735" : "#ffdb45");
line(9, 13, 12, 9, 14, 13, 0.7, "#77502a");
line(18, 13, 13, 19, 14, 14, 0.7, "#77502a");
animate("leftArm", { type: "swing", axis: "x", speed: 4, amplitude: 0.5 });
part("rightArm", [33, 22, 24]);
furry(36, 20, 19, 3.7, 3.5, 6);
line(36, 19, 17, 39, 16, 12, 2.5, fur);
sphere(39, 16, 12, 3, furLight);
animate("rightArm", { type: "swing", axis: "x", speed: -4, amplitude: 0.5 });
part("body", [24, 23, 18]);import { draw } from "./assets/voxel";
import { mono } from "./assets/mono";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, mono, 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
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["mono"] })
# It lands in client/assets/mono.ts
# https://fogon.page/object/mono