← AnimalesObjeto 3Dfogon/gato
Gato
Arrastrá para girarlo// «Gato» · gpt-6-sol (medium)
// A chunky cartoon orange tabby cat, horizontal along y, head at the front (-y): a compact box body with darker orange stripes across the back, a big round head with two pointy triangular ears (pink inside), green eyes with black slit pupils, a small pink nose and white whiskers, white paws and a white chest. A long tail curving up at the back.
const orange = "#ee8628";
const lightOrange = "#ffad43";
const darkOrange = "#b85420";
const stripe = "#a9471b";
const white = "#fff4df";
const shadowWhite = "#e5ddcf";
part("body", [24, 24, 15]);
// Compact, rounded body.
ellipsoid(24, 27, 15, 12, 13, 9, orange);
forEach((x, y, z) => {
if (y < 14 || y > 40 || z < 6 || z > 24) return;
if (z >= 18 && ((y >= 21 && y <= 23) ||
(y >= 28 && y <= 30) ||
(y >= 35 && y <= 37))) {
set(x, y, z, stripe);
} else if (z >= 20 && rand() < 0.19) {
set(x, y, z, lightOrange);
} else if (z <= 10 && rand() < 0.24) {
set(x, y, z, darkOrange);
}
});
// Oversized head and its bold tabby markings.
ellipsoid(24, 12, 21, 12, 10, 11, orange);
forEach((x, y, z) => {
if (y > 21 || z < 11 || z > 32) return;
const forehead = z >= 26 && y <= 14 &&
(Math.abs(x - 24) <= 1 ||
(x >= 15 && x <= 17 && y >= 6) ||
(x >= 31 && x <= 33 && y >= 6));
const cheek = z >= 18 && z <= 23 && y <= 11 &&
((x >= 12 && x <= 14) || (x >= 34 && x <= 36));
if (forehead || cheek) set(x, y, z, stripe);
else if (z >= 27 && rand() < 0.17) set(x, y, z, lightOrange);
});
// Pointed ears, with inset pink faces.
for (const cx of [16, 32]) {
for (let z = 29; z <= 39; z++) {
const half = Math.max(0, 5 - Math.floor((z - 29) / 2));
const front = 7 + Math.floor((z - 29) / 4);
const back = 15 - Math.floor((z - 29) / 4);
for (let x = cx - half; x <= cx + half; x++) {
for (let y = front; y <= back; y++) {
const pinkInside = z >= 32 && z <= 37 &&
y === front && Math.abs(x - cx) <= half - 1;
set(x, y, z, pinkInside ? "#f58e9a" :
z >= 35 ? lightOrange : orange);
}
}
}
}
// White bib, cheeks, and little muzzle.
ellipsoid(24, 13, 10, 6, 7, 6, shadowWhite);
ellipsoid(24, 11, 12, 5, 5, 5, white);
ellipsoid(21, 3, 16, 4, 2, 3, white);
ellipsoid(27, 3, 16, 4, 2, 3, white);
// Big green eyes with vertical slit pupils.
for (const x of [18, 30]) {
ellipsoid(x, 3, 23, 3, 2, 3, "#387b36");
ellipsoid(x, 1, 23, 2, 1, 3, "#81ce55");
box(x, 0, 21, x, 0, 25, "#17251b");
set(x - 1, 0, 25, "#ffffff");
}
ellipsoid(24, 0, 18, 2, 1, 1, "#f38b99");
line(24, 0, 17, 24, 0, 15, 0, "#68402c");
set(23, 0, 14, "#68402c");
set(25, 0, 14, "#68402c");
// Whiskers extend beyond the cheeks for a readable silhouette.
for (const z of [15, 17]) {
line(17, 1, z, 8, 0, z + (z === 17 ? 1 : -1), 0, white);
line(31, 1, z, 40, 0, z + (z === 17 ? 1 : -1), 0, white);
}
// Four separate short walking legs, each hinged at its shoulder or hip.
function leg(name, x, y, speed) {
part(name, [x, y, 10]);
ellipsoid(x, y, 5, 4, 4, 5, orange);
box(x - 3, y - 2, 1, x + 3, y + 2, 4, darkOrange);
ellipsoid(x, y - 2, 2, 4, 5, 2, white);
box(x - 3, y - 5, 0, x + 3, y + 1, 1, shadowWhite);
animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}
leg("front-left", 16, 18, 5);
leg("front-right", 32, 18, -5);
leg("rear-left", 16, 35, -5);
leg("rear-right", 32, 35, 5);
// Long tail curls upward and forward behind the body.
part("tail", [24, 38, 17]);
line(24, 38, 17, 24, 42, 19, 3, orange);
line(24, 42, 19, 24, 44, 24, 3, darkOrange);
line(24, 44, 24, 24, 43, 29, 3, orange);
line(24, 43, 29, 24, 40, 32, 3, stripe);
sphere(24, 40, 32, 3, lightOrange);
animate("tail", { type: "swing", axis: "y", speed: 2, amplitude: 0.3 });import { draw } from "./assets/voxel";
import { gato } from "./assets/gato";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, gato, x, y, { size: 64, angle: 0, t: performance.now() / 1000 });
// size: lo que mide en px su lado más largo
// angle: giro sobre el piso, en radianes
// t: segundos; si se mueve, se anima solo con eso# En una terminal, en la carpeta del juego
fogon assets add gato
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["gato"] })
# Queda en client/assets/gato.ts
# https://fogon.page/object/gato