← AnimalesObjeto 3Dfogon/oso-hormiguero
Oso hormiguero
Arrastrá para girarlo// «Oso hormiguero» · gpt-6-sol (medium)
// A cartoon giant anteater, horizontal along y, head at the front (-y): a grey-brown shaggy body with a black and white diagonal stripe across the shoulder, a very long narrow tube snout with a small black tip, tiny eyes and ears, four legs with curved claws and a huge bushy tail.
// Giant anteater: front is -y.
const fur = "#897965", furLight = "#a49378", furDark = "#6d604f";
const cream = "#eadfc0", black = "#292827";
// Rounded, solid body.
ellipsoid(24, 26, 21, 11, 11, 10, fur);
forEach((x, y, z, color) => {
if (color !== fur) return;
// The shoulder marking slopes backward as it runs down each side.
const stripe = 24 - 0.48 * (z - 21);
const d = y - stripe;
if (d > -4.3 && d < -2.5) set(x, y, z, cream);
else if (d >= -2.5 && d < 2.1) set(x, y, z, black);
else if (d >= 2.1 && d < 3.6) set(x, y, z, cream);
else if (rand() < 0.14) set(x, y, z, z > 23 ? furLight : furDark);
});
// A broad, shaggy tail, rising from the rump and drooping at its tip.
ellipsoid(24, 35, 21, 6, 5, 7, furDark);
ellipsoid(24, 40, 19, 9, 7, 9, "#766a56");
ellipsoid(24, 44, 16, 6, 3, 7, furDark);
forEach((x, y, z, color) => {
if (y < 35 || color !== "#766a56") return;
if (rand() < 0.18) set(x, y, z, z > 20 ? "#a08c6e" : furDark);
});
// Chunky tufts break up the tail's outline.
for (const side of [-1, 1]) {
for (let i = 0; i < 9; i++) {
const y = 36 + i * 1.2;
const x = 24 + side * (7 + (i % 3));
line(x - side, y - 1, 20 + (i % 4),
x + side, y + 1, 17 + (i % 4), 1,
i % 3 === 0 ? furLight : furDark);
}
}
line(22, 44, 13, 22, 47, 10, 1, furDark);
line(26, 44, 14, 27, 47, 11, 1, furDark);
// Each leg is a separate walking part, pivoting at its shoulder or hip.
function leg(name, x, y, speed) {
part(name, [x, y, 15]);
ellipsoid(x, y, 11, 3, 3, 5, furDark);
ellipsoid(x, y - 0.5, 6, 2.5, 2.5, 5, fur);
ellipsoid(x, y - 1.5, 2, 3, 3.5, 2, furDark);
// Three pale, forward-curving claws.
for (const dx of [-2, 0, 2]) {
line(x + dx, y - 3, 2, x + dx, y - 5, 1, 1, cream);
set(x + dx, y - 5, 0, "#c9b994");
}
animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
part("body");
}
leg("front-left", 17, 19, 3);
leg("front-right", 31, 19, -3);
leg("rear-left", 17, 33, -3);
leg("rear-right", 31, 33, 3);
// Neck and oversized, friendly head.
ellipsoid(24, 17, 24, 6, 7, 6, fur);
ellipsoid(24, 13, 25, 5, 5, 5, furLight);
ellipsoid(24, 15, 21, 4, 5, 3, furDark);
// Exceptionally long, narrow downturned snout.
line(24, 15, 23, 24, 4, 17, 2, furLight);
line(24, 10, 20, 24, 4, 17, 1, "#bcaa8d");
ellipsoid(24, 3, 17, 2, 2, 1.5, black);
set(23, 1, 17, "#393632");
set(24, 1, 17, "#393632");
set(25, 1, 17, "#393632");
// Small upright ears, with dark inner faces.
for (const x of [19, 29]) {
ellipsoid(x, 17, 30, 2, 2, 3, furDark);
ellipsoid(x, 15, 31, 1, 1, 2, "#aa8d7d");
}
// Tiny dot eyes and a glint on each side.
sphere(19, 11, 27, 1, black);
sphere(29, 11, 27, 1, black);
set(19, 10, 28, "#ffffff");
set(29, 10, 28, "#ffffff");import { draw } from "./assets/voxel";
import { osoHormiguero } from "./assets/oso-hormiguero";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, osoHormiguero, 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 oso-hormiguero
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["oso-hormiguero"] })
# Queda en client/assets/oso-hormiguero.ts
# https://fogon.page/object/oso-hormiguero