← Animals3D assetfogon/loro
Loro
Drag to turn it// «Loro» · gpt-6-sol (medium)
// A bright cartoon parrot perched upright facing front (-y): green body, red head and chest, a big curved hooked beak in pale grey, white eye patches with black eyes, blue and yellow wing feathers folded at the sides, and a long red and blue tail hanging down behind. Grey feet gripping a short wooden perch bar.
// Wooden stand and short perch
box(15, 24, 0, 33, 28, 2, "#80502b");
box(18, 24, 2, 30, 28, 3, "#a66a36");
box(22, 24, 3, 26, 28, 8, "#8a552e");
cylinder(7, 25, 9, 2, 35, "#a96c38", "x");
line(9, 25, 10, 39, 25, 10, 0, "#ca8749");
// Long tail feathers hang down behind the perch
for (const [x, y, z, color] of [
[20, 34, 14, "#bd273a"], [23, 36, 12, "#e33745"],
[27, 36, 12, "#2874cc"], [30, 34, 14, "#1759ad"]
]) {
line(x, 31, 22, x, y + 2, z - 8, 2, color);
line(x, y, z - 3, x, y + 2, z - 8, 1, color);
}
line(23, 35, 15, 24, 40, 4, 1, "#f05257");
line(28, 35, 15, 30, 39, 5, 1, "#46a2e5");
// Chunky green body, with a subtly mottled surface
ellipsoid(24, 24, 21, 10, 8, 12, "#308d43");
ellipsoid(24, 24, 24, 10, 8, 10, "#40b954");
ellipsoid(24, 22, 28, 8, 7, 6, "#55cb60");
forEach((x, y, z, color) => {
if (color === "#40b954" && rand() < 0.065)
set(x, y, z, z > 25 ? "#58c962" : "#319e49");
});
// Rounded red bib and oversized head
ellipsoid(24, 16.7, 23, 7, 3, 9, "#bc3039");
ellipsoid(24, 15.5, 25, 6, 2, 7, "#ed4548");
ellipsoid(24, 20, 35, 9, 8, 9, "#cf303a");
ellipsoid(24, 19, 37, 8, 7, 7, "#ed4148");
ellipsoid(24, 18, 41, 6, 5, 2, "#f45b58");
// Folded wings, each hinged at its shoulder
part("leftWing", [15, 23, 30]);
ellipsoid(11, 23, 25, 5, 5, 9, "#1462ad");
ellipsoid(9, 22, 22, 5, 4, 8, "#237fd0");
ellipsoid(12, 19, 29, 3, 2, 5, "#f5cf3d");
line(9, 19, 27, 7, 19, 17, 2, "#f1c735");
line(12, 18, 25, 10, 19, 15, 2, "#ffdf54");
line(7, 22, 22, 6, 24, 13, 1, "#12559f");
animate("leftWing", { type: "swing", axis: "y", speed: 4, amplitude: 0.4 });
part("rightWing", [33, 23, 30]);
ellipsoid(37, 23, 25, 5, 5, 9, "#1462ad");
ellipsoid(39, 22, 22, 5, 4, 8, "#237fd0");
ellipsoid(36, 19, 29, 3, 2, 5, "#f5cf3d");
line(39, 19, 27, 41, 19, 17, 2, "#f1c735");
line(36, 18, 25, 38, 19, 15, 2, "#ffdf54");
line(41, 22, 22, 42, 24, 13, 1, "#12559f");
animate("rightWing", { type: "swing", axis: "y", speed: -4, amplitude: 0.4 });
part("body");
// White eye patches and simple, shiny black dot eyes
for (const x of [18, 30]) {
ellipsoid(x, 11.5, 37, 3, 2, 3, "#fff5e4");
ellipsoid(x, 9.7, 37, 1.3, 1, 1.5, "#151b24");
set(x - 1, 8, 38, "#ffffff");
}
// Big pale hooked beak: broad at the top, curling down to a point
ellipsoid(24, 9, 33, 5, 5, 4, "#b5bec1");
ellipsoid(24, 7, 34, 4, 3, 2, "#e4e9e5");
ellipsoid(24, 7, 30, 3, 2.5, 4, "#cbd3d2");
ellipsoid(24, 8, 27, 1.7, 1.7, 3, "#a1aaad");
set(24, 8, 24, "#929da1");
line(21, 6, 31, 27, 6, 31, 0, "#818c91");
set(20, 11, 33, "#555d61");
set(28, 11, 33, "#555d61");
// Little grey legs and toes curled over the wooden bar
for (const x of [19, 29]) {
box(x - 1, 22, 10, x + 1, 25, 15, "#848d91");
box(x - 2, 20, 10, x + 2, 24, 12, "#abb3b4");
for (const dx of [-2, 0, 2]) {
line(x + dx, 21, 11, x + dx, 19, 9, 0, "#778186");
}
}import { draw } from "./assets/voxel";
import { loro } from "./assets/loro";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, loro, 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 loro
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["loro"] })
# It lands in client/assets/loro.ts
# https://fogon.page/object/loro