← Animals3D assetfogon/pinguino
Pingüino
Drag to turn it// «Pingüino» · gpt-6-sol (medium)
// A chubby cartoon penguin standing upright facing front (-y): a black back and head, a big white belly and face, an orange beak, black dot eyes with pink cheeks, two black flipper wings at the sides and orange feet.
// Chubby penguin: front faces -y.
const black = "#202630";
const white = "#f7f5ec";
const orange = "#f68b24";
part("body", [24, 24, 20]);
// Rounded body and oversized head.
ellipsoid(24, 24, 17, 12, 10, 15, black);
ellipsoid(24, 23, 31, 12, 10, 11, black);
// Bright belly and broad white face.
ellipsoid(24, 15.5, 16, 9, 3.5, 12, white);
ellipsoid(24, 14, 32, 9, 3.5, 8, white);
// Gentle color variation on the large surfaces.
forEach((x, y, z, color) => {
if (color === black) {
if (z > 32 && rand() < 0.28) set(x, y, z, "#2d3540");
else if (z < 12 && rand() < 0.22) set(x, y, z, "#171d26");
} else if (color === white) {
if (z < 15 && rand() < 0.18) set(x, y, z, "#e8e8df");
else if (z > 29 && rand() < 0.12) set(x, y, z, "#ffffff");
}
});
// Short legs and big, forward-pointing webbed feet.
for (const cx of [19, 29]) {
ellipsoid(cx, 23, 3, 4, 4, 3, "#d96b1b");
ellipsoid(cx, 17, 2, 5, 8, 2, orange);
for (const dx of [-3, 0, 3]) {
ellipsoid(cx + dx, 11, 1, 2, 4, 1, "#ff9c32");
}
box(cx - 3, 17, 4, cx + 3, 22, 4, "#ffae43");
}
// Rosy cheeks, placed on the front of the white face.
ellipsoid(16, 11.5, 29, 2, 1, 2, "#f7a4ac");
ellipsoid(32, 11.5, 29, 2, 1, 2, "#f7a4ac");
set(15, 10, 30, "#ffc3c8");
set(31, 10, 30, "#ffc3c8");
// Simple shiny black dot eyes.
for (const x of [19, 29]) {
ellipsoid(x, 10.5, 34, 1.5, 1.5, 2, "#101820");
set(x - 1, 9, 35, "#ffffff");
}
// Chunky orange beak with a projecting tip.
box(21, 9, 26, 27, 12, 29, "#dc6819");
box(22, 7, 27, 26, 10, 29, orange);
box(23, 6, 27, 25, 8, 28, "#ffae38");
box(22, 8, 29, 26, 10, 29, "#ffb247");
// Each flipper is hinged at its shoulder.
part("leftFlipper", [13, 23, 26]);
ellipsoid(9, 24, 20, 5, 4, 10, "#202630");
ellipsoid(7, 24, 14, 4, 3, 5, "#202630");
ellipsoid(8, 20, 22, 3, 1, 6, "#303946");
animate("leftFlipper", { type: "swing", axis: "y", speed: 5, amplitude: 0.4 });
part("rightFlipper", [35, 23, 26]);
ellipsoid(39, 24, 20, 5, 4, 10, "#202630");
ellipsoid(41, 24, 14, 4, 3, 5, "#202630");
ellipsoid(40, 20, 22, 3, 1, 6, "#303946");
animate("rightFlipper", { type: "swing", axis: "y", speed: -5, amplitude: 0.4 });
animate("body", { type: "bob", axis: "z", speed: 5, amplitude: 0.5 });import { draw } from "./assets/voxel";
import { pinguino } from "./assets/pinguino";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, pinguino, 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 pinguino
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["pinguino"] })
# It lands in client/assets/pinguino.ts
# https://fogon.page/object/pinguino