← AnimalesObjeto 3Dfogon/rana
Rana
Arrastrá para girarlo// «Rana» · gpt-6-sol (medium)
// A cartoon green frog sitting facing front (-y): a squat green body with a lighter yellow belly, big bulging round eyes on top of the head, a wide smile, front legs straight and big folded back legs with webbed feet. It sits on a round green lily pad.
// Lily pad
const padDark = "#2d8d38", padGreen = "#43ad45", padLight = "#72cb5a";
cylinder(24, 24, 0, 20, 2, padDark);
cylinder(24, 24, 2, 19, 1, padGreen);
// A little wedge-shaped notch in the edge of the leaf
for (let x = 34; x <= 45; x++) {
for (let y = 14; y <= 30; y++) {
if (Math.abs(y - 22) < (x - 34) * 0.55) {
for (let z = 0; z <= 2; z++) set(x, y, z, null);
}
}
}
for (let a = 0; a < 8; a++) {
const angle = a * Math.PI / 4;
line(24, 24, 3,
24 + 16 * Math.cos(angle), 24 + 16 * Math.sin(angle), 3,
0, "#62c457");
}
// The frog hops gently while the pad stays still.
part("frog", [24, 24, 3]);
animate("frog", { type: "bob", axis: "z", speed: 3, amplitude: 1 });
const dark = "#328d32", green = "#49b83f", light = "#70ce55";
const belly = "#e5db75", bellyShade = "#c5bd65";
// Big folded hind legs, set behind the body
for (const side of [-1, 1]) {
const thighX = 24 + side * 12;
ellipsoid(thighX, 28, 9, 5, 7, 7, dark);
ellipsoid(thighX, 27, 10, 4.5, 6, 5.5, green);
line(thighX, 29, 8, 24 + side * 15, 17, 5, 3, green);
const footX = 24 + side * 15;
ellipsoid(footX, 14, 4, 4, 5, 2, green);
for (let t = -1; t <= 1; t++) {
ellipsoid(footX + t * 2.5, 9 + Math.abs(t), 3,
1.8, 3, 1.5, light);
}
}
// Squat round body and broad yellow bib
ellipsoid(24, 25, 12, 11, 10, 9, dark);
ellipsoid(24, 24, 14, 10, 9, 8, green);
ellipsoid(24, 16, 11, 8.5, 3.5, 6.5, bellyShade);
ellipsoid(24, 15.5, 12, 7.5, 3.2, 5.5, belly);
// Straight little front legs
for (const x of [17, 31]) {
line(x, 18, 13, x, 13, 5, 2.4, dark);
line(x, 17, 13, x, 13, 6, 1.9, green);
ellipsoid(x, 11, 4, 3, 4, 2, green);
for (let t = -1; t <= 1; t++) {
ellipsoid(x + t * 2, 8, 3, 1.5, 2.4, 1.3, light);
}
}
// Oversized, cheerful head and softly rounded muzzle
ellipsoid(24, 19, 19, 13, 10, 8, dark);
ellipsoid(24, 19, 20, 12.5, 9.5, 7.5, green);
ellipsoid(24, 16, 22, 11, 8, 4.5, light);
ellipsoid(24, 14, 17.5, 11, 5, 4.5, green);
// Bulging eye turrets, white eyes, and simple black pupils
for (const x of [17, 31]) {
ellipsoid(x, 16, 27, 5.2, 5, 5.5, dark);
ellipsoid(x, 15.5, 27.7, 4.8, 4.7, 5.1, light);
ellipsoid(x, 11.5, 28, 3.2, 2, 3.5, "#fff9dd");
ellipsoid(x, 9.6, 28, 1.35, 1, 1.8, "#202b25");
set(x - 1, 8, 29, "#ffffff");
}
// Tiny nostrils
ellipsoid(20.5, 9.1, 21, 0.8, 0.5, 0.7, dark);
ellipsoid(27.5, 9.1, 21, 0.8, 0.5, 0.7, dark);
// A wide smile that follows the front curve of the face
for (let x = 15; x <= 33; x += 0.45) {
const dx = x - 24;
const z = 16.4 + 0.047 * dx * dx;
const y = 14 - 5 * Math.sqrt(Math.max(0.1,
1 - (dx * dx) / 121 - ((z - 17.5) ** 2) / 20.25));
sphere(x, y - 0.8, z, 0.65, "#276f30");
}
sphere(15, 12, 20, 0.9, dark);
sphere(33, 12, 20, 0.9, dark);
// Subtle toy-like mottling, only on exposed green blocks
forEach((x, y, z, color) => {
if (color === green && rand() < 0.035) {
set(x, y, z, rand() < 0.65 ? "#50bd43" : "#43ad3b");
}
});import { draw } from "./assets/voxel";
import { rana } from "./assets/rana";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, rana, 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 rana
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["rana"] })
# Queda en client/assets/rana.ts
# https://fogon.page/object/rana