← Gear3D assetfogon/hacha-de-batalla
Hacha de batalla
Drag to turn it// «Hacha de batalla» · gpt-6-sol (medium)
// A battle axe: a long dark wooden haft with iron bands, and at the front end a big double-bladed steel axe head (two wide crescent blades, one to each side along x) with a lighter sharp edge and a small spike on the tip. It LIES FLAT horizontally on the ground (z=0), as a chunky toy-like item seen from above: tip/front toward -y, handle/back toward +y, centered on x, using most of the grid along y, at least 4-5 blocks thick so it reads at small size. No hands, no stand, no base plate.
const woodDark = "#35231d";
const wood = "#68432c";
const woodLight = "#8a5a36";
const steelDark = "#515d68";
const steel = "#83929e";
const steelLight = "#b7c7d0";
const edge = "#d9e5e8";
const brass = "#b78943";
const brassLight = "#e2ba69";
// Long, solid wooden haft.
box(21, 14, 0, 26, 45, 4, woodDark);
box(22, 15, 4, 25, 44, 5, wood);
for (let y = 17; y <= 43; y++) {
if (rand() < 0.55) set(23 + Math.floor(rand() * 2), y, 5, woodLight);
if (y > 26 && y < 40 && y % 4 === 0) {
set(22, y, 5, woodDark);
set(23, y + 1, 5, woodDark);
set(24, y + 2, 5, woodDark);
set(25, y + 3, 5, woodDark);
}
}
// Iron bands and a capped butt.
for (const y of [22, 26, 39, 43]) {
box(20, y, 0, 27, y + 1, 5, steelDark);
box(21, y, 5, 26, y, 6, steel);
box(22, y, 6, 25, y, 6, brass);
}
box(20, 44, 0, 27, 46, 5, steelDark);
box(21, 44, 5, 26, 45, 6, steel);
box(22, 45, 6, 25, 45, 6, brassLight);
// Matching crescent blades. Their cutting edges curve inward at the middle
// and flare out into two broad points at either end.
for (let y = 5; y <= 25; y++) {
const t = Math.abs(y - 15) / 10;
const outer = Math.round(7 + 5 * (1 - t));
const inner = Math.round(9 + 13 * Math.pow(1 - t, 0.75));
for (let x = outer; x <= inner; x++) {
const rim = x - outer;
const color = rim <= 1 ? steelLight : rim <= 3 ? steel : steelDark;
for (const bx of [x, 47 - x]) {
box(bx, y, 0, bx, y, 4, color);
set(bx, y, 5,
rim <= 1 ? edge :
rim <= 3 ? steelLight :
rand() < 0.16 ? steelLight : steel);
}
}
}
// Raised central sockets anchor both blades to the haft.
box(18, 12, 0, 29, 20, 5, steelDark);
box(19, 13, 5, 28, 19, 6, steel);
box(20, 14, 6, 27, 18, 6, steelLight);
for (const x of [18, 29]) {
box(x, 13, 2, x, 19, 5, brass);
box(x, 14, 5, x, 18, 5, brassLight);
}
// Short pointed spike at the front of the axe head.
for (let y = 2; y <= 13; y++) {
const halfWidth = y < 5 ? 1 : y < 8 ? 2 : 3;
box(23 - halfWidth, y, 1, 24 + halfWidth, y, 4, steelDark);
box(23 - halfWidth, y, 4, 24 + halfWidth, y, 5,
y < 5 ? edge : steelLight);
}
box(20, 11, 1, 27, 12, 5, brass);
box(21, 11, 5, 26, 11, 6, brassLight);
// Chunky raised boss with a small sapphire inset.
box(21, 14, 6, 26, 19, 7, brass);
box(22, 15, 8, 25, 18, 8, brassLight);
box(23, 16, 9, 24, 17, 9, "#225578");
set(23, 16, 9, "#65b9d5");import { draw } from "./assets/voxel";
import { hachaDeBatalla } from "./assets/hacha-de-batalla";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, hachaDeBatalla, 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 hacha-de-batalla
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["hacha-de-batalla"] })
# It lands in client/assets/hacha-de-batalla.ts
# https://fogon.page/object/hacha-de-batalla