← AnimalesObjeto 3Dfogon/cuervo
Cuervo
Arrastrá para girarlo// «Cuervo» · gpt-6-sol (medium)
// A cartoon black crow standing on two thin legs facing front (-y): glossy black feathers with dark blue-purple shading, a thick dark grey beak and shiny eyes.
// Chunky body and a few long, rounded tail feathers.
ellipsoid(24, 25, 19, 10, 9, 12, "#151620");
ellipsoid(24, 17, 21, 7, 2, 7, "#1b1c2d");
ellipsoid(24, 17, 17, 5, 1, 5, "#191a27");
for (const [x, tipY, tipZ] of [[21, 40, 11], [24, 43, 10], [27, 40, 11]]) {
line(x, 31, 17, x, tipY, tipZ, 2, "#11131e");
line(x, 35, 15, x, tipY, tipZ + 1, 1, "#202137");
}
// Broad folded wings, with overlapping feather tips.
for (const side of [-1, 1]) {
const x = 24 + side * 11;
ellipsoid(x, 25, 21, 4, 7, 9, "#11131e");
ellipsoid(x + side, 23, 23, 2, 5, 6, "#202039");
for (let i = 0; i < 3; i++) {
line(
x + side * (i % 2), 26 + i, 19 - i,
x + side * (1 + i), 29 + i, 12 - i,
1, i === 1 ? "#24243d" : "#171928"
);
}
}
// Thin legs are separate swinging parts. Each foot has three forward toes.
for (const side of [-1, 1]) {
const x = 24 + side * 5;
const name = side < 0 ? "leftLeg" : "rightLeg";
part(name, [x, 25, 12]);
cylinder(x, 25, 3, 1, 10, "#292a32");
line(x, 25, 3, x, 23, 1, 1, "#34343d");
for (const spread of [-2, 0, 2]) {
line(x, 23, 1, x + spread, 18 - (spread === 0 ? 2 : 0), 0, 1, "#292a33");
set(x + spread, 18 - (spread === 0 ? 2 : 0), 0, "#3a3941");
}
line(x, 25, 1, x, 29, 0, 1, "#252630");
animate(name, { type: "swing", axis: "x", speed: side < 0 ? 5 : -5, amplitude: 0.3 });
}
// Oversized pecking head.
part("head", [24, 23, 28]);
ellipsoid(24, 21, 33, 11, 10, 10, "#151622");
// Subtle blue-purple shine across the crown and cheeks.
forEach((x, y, z, color) => {
if (
z >= 29 && z <= 43 &&
((x - 24) / 11) ** 2 + ((y - 21) / 10) ** 2 + ((z - 33) / 10) ** 2 <= 1.01
) {
const exposed = !get(x, y - 1, z) || !get(x, y, z + 1);
if (exposed && rand() < 0.55) {
set(x, y, z, z > 37
? (rand() < 0.35 ? "#292941" : "#202038")
: (rand() < 0.3 ? "#24233b" : "#1b1b2e"));
}
}
});
// A small, swept-back feather tuft.
ellipsoid(21, 23, 41, 3, 3, 3, "#1c1d30");
line(21, 23, 41, 18, 26, 44, 1, "#24243c");
line(24, 23, 41, 23, 26, 44, 1, "#191a2c");
// Thick, blunt charcoal beak: wide at the face, narrower at its tip.
box(20, 8, 29, 28, 12, 33, "#303139");
box(21, 5, 29, 27, 9, 33, "#393a42");
box(22, 3, 29, 26, 6, 32, "#35363e");
box(23, 2, 29, 25, 4, 31, "#303139");
box(21, 6, 33, 27, 10, 34, "#494a51");
box(22, 4, 32, 26, 7, 33, "#45464d");
line(22, 5, 29, 26, 5, 29, 0, "#22232b");
set(21, 7, 33, "#22232b");
set(27, 7, 33, "#22232b");
// Round shiny eyes, widely spaced so they remain readable beside the beak.
for (const x of [17, 31]) {
sphere(x, 11, 35, 3, "#222338");
sphere(x, 9, 35, 2, "#080a12");
set(x - 1, 7, 36, "#ffffff");
set(x, 7, 34, "#60647a");
}
animate("head", { type: "swing", axis: "x", speed: 4, amplitude: 0.3 });
part("body", [24, 24, 20]);import { draw } from "./assets/voxel";
import { cuervo } from "./assets/cuervo";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, cuervo, 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 cuervo
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["cuervo"] })
# Queda en client/assets/cuervo.ts
# https://fogon.page/object/cuervo