← AnimalesObjeto 3Dfogon/gorila
Gorila
Arrastrá para girarlo// «Gorila» · gpt-6-sol (medium)
// A big chunky cartoon gorilla standing on its knuckles facing front (-y): a massive black body with a silver-grey back, very long thick arms, short legs, a dark grey leathery face and chest, a big brow, small eyes and a wide flat nose.
// Big, knuckle-walking silverback gorilla.
const fur = "#222326";
const furLight = "#303135";
const furDark = "#17181b";
const silver = "#929795";
const silverLight = "#b4b8b3";
const silverDark = "#737a79";
const skin = "#626567";
const skinLight = "#797b7a";
const skinDark = "#414346";
// Short, sturdy legs and broad feet.
for (const x of [18, 30]) {
ellipsoid(x, 25, 8, 5, 5, 8, fur);
ellipsoid(x, 19, 3, 5, 7, 3, furDark);
for (const dx of [-3, 0, 3]) {
ellipsoid(x + dx, 13, 2, 2, 3, 2, "#38393b");
}
}
// Barrel-shaped body, with the silver saddle high on its back.
ellipsoid(24, 25, 22, 12, 11, 15, fur);
ellipsoid(24, 29, 28, 10, 7, 10, silverDark);
ellipsoid(24, 29, 29, 9, 6, 9, silver);
ellipsoid(24, 29, 34, 7, 5, 4, silverLight);
// A little irregular fur texture, only on exposed blocks.
forEach((x, y, z, color) => {
if (
(color === fur || color === silver || color === silverDark) &&
(!get(x, y - 1, z) || !get(x, y, z + 1) ||
!get(x + 1, y, z) || !get(x - 1, y, z))
) {
const n = rand();
if (color === fur && n < 0.13) set(x, y, z, n < 0.04 ? furDark : furLight);
if (color === silver && n < 0.13)
set(x, y, z, n < 0.035 ? silverDark : silverLight);
if (color === silverDark && n < 0.09) set(x, y, z, silver);
}
});
// Broad leathery chest, divided into two soft pectoral shapes.
ellipsoid(24, 15, 19, 8, 2, 7, skinDark);
ellipsoid(20, 15, 25, 5, 3, 7, skin);
ellipsoid(28, 15, 25, 5, 3, 7, skin);
ellipsoid(20, 13, 27, 4, 1, 4, skinLight);
ellipsoid(28, 13, 27, 4, 1, 4, skinLight);
line(24, 12, 28, 24, 13, 22, 0, skinDark);
// Oversized head and projecting, friendly gorilla face.
ellipsoid(24, 19, 35, 10, 9, 9, fur);
for (const x of [14, 34]) {
ellipsoid(x, 17, 35, 3, 2, 4, fur);
ellipsoid(x, 14, 35, 2, 1, 3, skin);
ellipsoid(x, 13, 35, 1, 1, 2, skinDark);
}
ellipsoid(24, 10, 35, 8, 3, 7, skinDark);
ellipsoid(24, 8, 35, 7, 2, 6, skin);
ellipsoid(24, 7, 32, 6, 3, 3, skinLight);
// Heavy brow over small, bright dot eyes.
box(17, 7, 40, 31, 9, 41, fur);
ellipsoid(20, 7, 40, 4, 2, 2, furDark);
ellipsoid(28, 7, 40, 4, 2, 2, furDark);
for (const x of [21, 27]) {
ellipsoid(x, 5, 38, 1, 1, 2, "#111214");
set(x, 4, 39, "#ffffff");
}
// Wide flat nose, nostrils, and a small curved smile.
ellipsoid(24, 5, 34, 5, 2, 2, skinDark);
box(20, 4, 34, 28, 5, 35, skinLight);
for (const x of [21, 27]) ellipsoid(x, 3, 34, 1, 1, 1, "#252627");
line(20, 5, 29, 24, 4, 28, 0, skinDark);
line(24, 4, 28, 28, 5, 29, 0, skinDark);
// Each huge arm is hinged at its shoulder and rests on its knuckles.
for (const side of [-1, 1]) {
const sx = 24 + side * 14;
const name = side < 0 ? "leftArm" : "rightArm";
part(name, [sx, 23, 32]);
ellipsoid(sx, 23, 30, 5, 6, 6, fur);
line(sx, 22, 30, sx + side, 19, 17, 4, fur);
ellipsoid(sx + side, 19, 18, 5, 5, 8, furLight);
line(sx + side, 19, 17, sx + side, 13, 5, 4, fur);
ellipsoid(sx + side, 12, 4, 5, 5, 4, furDark);
ellipsoid(sx + side, 9, 3, 5, 3, 3, skin);
for (const dx of [-3, 0, 3]) {
ellipsoid(sx + side + dx, 7, 2, 2, 2, 2, skinLight);
set(sx + side + dx, 5, 2, skinDark);
}
animate(name, {
type: "swing",
axis: "x",
speed: side < 0 ? 3 : -3,
amplitude: 0.3
});
}
part("body");import { draw } from "./assets/voxel";
import { gorila } from "./assets/gorila";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, gorila, 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 gorila
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["gorila"] })
# Queda en client/assets/gorila.ts
# https://fogon.page/object/gorila