← Fantasy3D assetfogon/grifo
Grifo
Drag to turn it// «Grifo» · gpt-6-sol (medium)
// A cartoon griffin: the body of a golden lion lying horizontal along y with four legs and a tufted tail at the back (+y), and at the front (-y) the white head of an eagle with a big yellow hooked beak and fierce friendly eyes, plus two big brown-and-white feathered wings rising from the shoulders.
// Golden lion body and warm, rounded chest.
ellipsoid(24, 25, 17, 10, 12, 8, "#c88738");
ellipsoid(24, 22, 20, 10, 11, 7, "#e5aa4d");
ellipsoid(24, 16, 20, 9, 7, 9, "#d99a43");
ellipsoid(24, 27, 13, 8, 9, 4, "#f0bb67");
// Four sturdy legs and oversized paws.
for (const x of [17, 31]) {
for (const y of [16, 32]) {
ellipsoid(x, y, 10, 3, 3, 7, "#b97732");
ellipsoid(x, y - 1, 8, 3, 3, 7, "#dda04b");
ellipsoid(x, y - 2, 2, 4, 4, 2, "#e9ad55");
for (const dx of [-2, 0, 2]) {
set(x + dx, y - 5, 1, "#fff0cb");
}
}
}
// Curved tail, ending in a dark, feathery tuft.
line(24, 35, 18, 24, 39, 16, 2, "#d99a43");
line(24, 39, 16, 25, 43, 19, 1, "#e8ad55");
ellipsoid(25, 43, 20, 3, 3, 4, "#78432e");
ellipsoid(25, 44, 21, 2, 2, 3, "#9a5834");
for (const [dx, dz] of [[-2, 1], [0, 3], [2, 0]]) {
line(25 + dx, 43, 20 + dz, 25 + dx, 46, 19 + dz, 0, "#633b30");
}
// White eagle neck and big, soft head.
ellipsoid(24, 13, 25, 7, 6, 9, "#e2e3d9");
ellipsoid(24, 10, 29, 7, 7, 7, "#fff9e9");
ellipsoid(24, 8, 27, 6, 5, 5, "#f1f0e5");
// Little swept-back feather crests and cheek feathers.
for (const x of [19, 24, 29]) {
line(x, 12, 34, x, 16, 37, 1, "#fff9e9");
set(x, 16, 37, "#dddcd4");
}
for (const x of [18, 30]) {
line(x, 11, 27, x, 15, 23, 1, "#fff9e9");
}
// Broad golden beak with a downward hooked tip.
ellipsoid(24, 5, 27, 4, 4, 3, "#f5bd37");
box(22, 2, 26, 26, 5, 28, "#ffd454");
ellipsoid(24, 3, 25, 3, 2, 2, "#eda727");
box(23, 2, 22, 25, 3, 25, "#d7871e");
set(22, 2, 27, "#8e5a25");
set(26, 2, 27, "#8e5a25");
// Large, friendly but determined eyes.
for (const x of [20, 28]) {
ellipsoid(x, 5, 31, 2, 1, 2, "#755c45");
box(x - 1, 3, 30, x + 1, 4, 31, "#fffdf1");
box(x, 2, 30, x + 1, 3, 31, "#327e82");
set(x, 2, 31, "#142d39");
set(x + 1, 2, 31, "#ffffff");
line(x - 2, 5, 33, x + 1, 4, 33, 0, "#817467");
}
// Each feathered wing is its own flapping part.
for (const side of [-1, 1]) {
const rootX = 24 + side * 8;
const wingName = side < 0 ? "leftWing" : "rightWing";
part(wingName, [rootX, 21, 25]);
ellipsoid(rootX, 22, 27, 3, 8, 5, "#704936");
ellipsoid(rootX + side * 3, 21, 30, 4, 9, 5, "#966244");
// Overlapping, upward-sweeping flight feathers.
for (let i = 0; i < 10; i++) {
const rootY = 16 + i;
const tipY = 10 + i * 2;
const outer = 10 + Math.round(Math.abs(i - 4.5) * 0.7);
const tipZ = 36 + Math.round(4 * Math.sin((i + 1) * Math.PI / 11));
const midX = rootX + side * 6;
const tipX = rootX + side * outer;
line(rootX, rootY, 28, midX, Math.round((rootY + tipY) / 2), 34,
2, i % 3 === 0 ? "#784a36" : "#a36b49");
line(midX, Math.round((rootY + tipY) / 2), 34,
tipX, tipY, tipZ, 1, i % 2 ? "#f5eee0" : "#dedbd2");
set(tipX, tipY, tipZ + 1, "#fff9eb");
}
// A bright row of smaller coverts makes the layering readable.
for (let i = 0; i < 7; i++) {
const y = 15 + i * 2;
line(rootX + side * 2, y, 30,
rootX + side * 6, y + 1, 34, 1,
i % 2 ? "#eee6d7" : "#c7b9a6");
}
animate(wingName, {
type: "swing",
axis: "y",
speed: side < 0 ? 4 : -4,
amplitude: 0.5
});
}
part("body", [24, 24, 18]);
// Sparse golden highlights on exposed fur.
forEach((x, y, z, color) => {
if (color === "#d99a43" && rand() < 0.045 &&
(!get(x, y - 1, z) || !get(x, y, z + 1))) {
set(x, y, z, "#efb65e");
}
});import { draw } from "./assets/voxel";
import { grifo } from "./assets/grifo";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, grifo, 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 grifo
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["grifo"] })
# It lands in client/assets/grifo.ts
# https://fogon.page/object/grifo