← Ancient and prehistory3D assetfogon/tigre-dientes-de-sable
Tigre dientes de sable
Drag to turn it// «Tigre dientes de sable» · gpt-6-sol (medium)
// A chunky cartoon saber-toothed tiger on four strong legs, body horizontal along y with a heavy front: a big head at the front (-y) with two very long white curved fangs hanging below the jaw, tawny orange fur with a cream muzzle and belly and a few dark brown stripes, a short stubby tail.
const fur = "#c97832";
const furLight = "#dc9144";
const furDark = "#a85829";
const cream = "#f1dbad";
const creamShade = "#d8bd8e";
const stripe = "#54382b";
const ivory = "#fff7df";
// Horizontal, heavy-shouldered body.
ellipsoid(24, 26, 21, 10, 15, 9, fur);
ellipsoid(24, 17, 22, 11, 10, 10, furLight);
ellipsoid(24, 26, 15, 8, 12, 4, creamShade);
ellipsoid(24, 15, 16, 7, 8, 4, cream);
// Subtle fur variation, applied before the face and markings.
forEach((x, y, z, color) => {
if (color === fur || color === furLight) {
const n = rand();
if (n < 0.075) set(x, y, z, furDark);
else if (n < 0.17 && z > 20) set(x, y, z, furLight);
}
});
// Bold stripes wrapping down both flanks.
for (const side of [-1, 1]) {
for (const [y, top, bottom] of [
[21, 29, 21],
[28, 29, 20],
[35, 27, 19]
]) {
line(24 + side * 7, y - 1, top,
24 + side * 9, y + 1, bottom, 1, stripe);
}
}
line(20, 24, 30, 28, 24, 30, 1, stripe);
line(21, 31, 29, 27, 31, 29, 1, stripe);
// Short, blunt tail with a dark tip.
line(24, 39, 25, 24, 43, 28, 2, fur);
sphere(24, 44, 28, 2, stripe);
// Oversized friendly head and rounded ears.
ellipsoid(24, 12, 27, 11, 9, 10, furLight);
ellipsoid(16, 12, 37, 3, 3, 4, fur);
ellipsoid(32, 12, 37, 3, 3, 4, fur);
ellipsoid(16, 9, 38, 2, 1, 2, "#bc795e");
ellipsoid(32, 9, 38, 2, 1, 2, "#bc795e");
// Forehead markings.
line(23, 5, 35, 22, 8, 32, 1, stripe);
line(25, 5, 35, 26, 8, 32, 1, stripe);
line(14, 10, 33, 16, 8, 30, 1, stripe);
line(34, 10, 33, 32, 8, 30, 1, stripe);
// Big dot eyes, facing the viewer at -y.
for (const x of [18, 30]) {
sphere(x, 5, 29, 2, furDark);
box(x - 1, 3, 28, x + 1, 4, 30, "#242321");
set(x - 1, 2, 30, "#ffffff");
}
// Cream cheeks, muzzle, little nose, and smiling lower jaw.
ellipsoid(19, 5, 22, 5, 3, 4, cream);
ellipsoid(29, 5, 22, 5, 3, 4, cream);
box(22, 2, 23, 26, 3, 25, stripe);
box(23, 1, 24, 25, 2, 25, "#352a28");
box(22, 3, 18, 26, 4, 18, stripe);
ellipsoid(24, 7, 17, 5, 3, 2, creamShade);
// Two unmistakably long, slightly inward-curving saber teeth.
for (const side of [-1, 1]) {
const root = 24 + side * 7;
box(root - 1, 2, 18, root + 1, 4, 21, ivory);
box(root - 1, 2, 15, root + 1, 3, 17, ivory);
box(root, 2, 12, root + side, 3, 14, ivory);
box(root + side, 2, 10, root + side, 2, 11, creamShade);
}
// Four independently swinging, sturdy legs. Opposite diagonals walk together.
for (const [name, x, y, speed] of [
["frontLeft", 17, 16, 4],
["frontRight", 31, 16, -4],
["rearLeft", 17, 35, -4],
["rearRight", 31, 35, 4]
]) {
part(name, [x, y, 18]);
ellipsoid(x, y, 16, 4, 5, 5, fur);
box(x - 3, y - 3, 4, x + 3, y + 3, 16, fur);
box(x - 3, y - 3, 4, x + 3, y + 3, 7, furDark);
ellipsoid(x, y - 2, 2, 4, 5, 2, furLight);
// Light toes and three tiny dark claw marks.
for (const dx of [-2, 0, 2]) {
box(x + dx, y - 5, 1, x + dx + 1, y - 4, 2, cream);
set(x + dx, y - 6, 1, furDark);
}
animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}
part("body", [24, 24, 20]);import { draw } from "./assets/voxel";
import { tigreDientesDeSable } from "./assets/tigre-dientes-de-sable";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, tigreDientesDeSable, x, y, { size: 64, angle: 0, t: performance.now() / 1000 });
// size: its longest side, in px
// angle: turn on the floor, in radians
// t: seconds; if it moves, that animates it# In a terminal, in the game's folder
fogon assets add tigre-dientes-de-sable
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["tigre-dientes-de-sable"] })
# It lands in client/assets/tigre-dientes-de-sable.ts
# https://fogon.page/object/tigre-dientes-de-sable