← Farm3D assetfogon/chancho
Chancho
Drag to turn it// «Chancho» · gpt-6-sol (medium)
// A round chubby pink cartoon pig, horizontal: a fat oval barrel body about 1.5 times longer (along y) than tall, pink with lighter pink on top, standing on four very short stubby legs with dark hooves. A big round head at the front (-y) with a prominent flat round snout disc pointing forward (darker pink with two dark nostril holes), black dot eyes above the snout, and two small triangular ears flopping forward over the eyes. At the back only a SMALL thin curly tail (a little 3-4 block spiral), nothing large.
// Round barrel body and oversized head.
ellipsoid(24, 27, 18, 13, 16, 12, "#f3a4b2");
ellipsoid(24, 12, 22, 10, 10, 10, "#f8adba");
// Sunny top highlights, soft underside shading, and subtle variation.
forEach((x, y, z) => {
const isHead = y < 19 && z >= 13;
let color;
if (z >= (isHead ? 27 : 23)) color = isHead ? "#ffc5ca" : "#ffbdc4";
else if (z < (isHead ? 19 : 15)) color = isHead ? "#e995a8" : "#e58da1";
else color = isHead ? "#f8adba" : "#f3a4b2";
if (rand() < 0.065) color = z > 23 ? "#ffd0d0" : "#efa0ad";
set(x, y, z, color);
});
// Small triangular ears, tipped forward over the eyes.
for (const side of [-1, 1]) {
for (let z = 30; z <= 36; z++) {
const t = z - 30;
const cx = 24 + side * (5 + t * 0.45);
const halfWidth = 2.8 - t * 0.37;
const frontY = 6 - Math.floor(t / 2);
for (let x = Math.ceil(cx - halfWidth); x <= Math.floor(cx + halfWidth); x++) {
box(x, frontY, z, x, frontY + 3, z, "#e9899e");
if (z >= 31 && z <= 34 && Math.abs(x - cx) < halfWidth - 0.7) {
set(x, frontY, z, "#f7a8b7");
}
}
}
}
// Bright black dot eyes.
for (const x of [19, 29]) {
sphere(x, 4, 27, 1.5, "#302a31");
set(x, 3, 28, "#ffffff");
}
// Prominent flat snout, facing the viewer at -y.
cylinder(24, 1, 19, 6, 5, "#d9758d", "y");
cylinder(24, 0, 19, 5, 2, "#ed91a3", "y");
for (const x of [21, 27]) {
box(x - 1, 0, 18, x, 0, 20, "#793e4d");
set(x - 1, 0, 20, "#914b5a");
}
// Four independently swinging stubby legs.
for (const [name, x, y, speed] of [
["frontLeft", 16, 17, 5],
["frontRight", 32, 17, -5],
["rearLeft", 16, 36, -5],
["rearRight", 32, 36, 5]
]) {
part(name, [x, y, 9]);
ellipsoid(x, y, 7, 3.5, 3.5, 3.5, "#e992a6");
box(x - 3, y - 3, 2, x + 3, y + 3, 7, "#ee9dad");
box(x - 3, y - 3, 0, x + 3, y + 3, 2, "#654a4b");
box(x - 3, y - 3, 2, x + 3, y - 3, 3, "#775254");
set(x, y - 3, 0, "#443b3e");
animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}
// A tiny, thin corkscrew tail behind the rump.
part("tail", [24, 43, 21]);
const curl = [
[24, 43, 21], [24, 44, 21], [25, 45, 22],
[26, 45, 22], [27, 45, 21], [27, 45, 20],
[26, 45, 19], [25, 45, 20]
];
for (let i = 1; i < curl.length; i++) {
line(...curl[i - 1], ...curl[i], 0, i > 4 ? "#de7e95" : "#ef9cae");
}
animate("tail", { type: "spin", axis: "y", speed: 1 });
part("body", [24, 24, 18]);import { draw } from "./assets/voxel";
import { chancho } from "./assets/chancho";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, chancho, 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 chancho
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["chancho"] })
# It lands in client/assets/chancho.ts
# https://fogon.page/object/chancho