← EquipamientoObjeto 3Dfogon/espada-corta
Espada corta
Arrastrá para girarlo// «Espada corta» · gpt-6-sol (medium)
// A short steel sword: a broad straight blade with a light grey edge and a darker grey center groove, a small brass crossguard, a brown leather-wrapped grip and a round brass pommel. 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.
// Short steel sword lying flat: tip toward -y, pommel toward +y.
const steelShadow = "#59626b";
const steelSide = "#87919a";
const steelFace = "#adb8c0";
const steelLight = "#dce5e9";
const groove = "#626d76";
const brassDark = "#80541f";
const brass = "#bd8733";
const brassLight = "#e8bd63";
const leatherDark = "#56331f";
const leather = "#87532e";
const leatherLight = "#a9703e";
// Broad, straight blade with a chunky tapered point.
for (let y = 3; y <= 29; y++) {
let halfWidth;
if (y === 3) halfWidth = 2;
else if (y === 4) halfWidth = 4;
else if (y === 5) halfWidth = 5;
else if (y === 6) halfWidth = 6;
else if (y === 7) halfWidth = 7;
else halfWidth = 8;
for (let x = 24 - halfWidth; x <= 24 + halfWidth; x++) {
const edgeDistance = halfWidth - Math.abs(x - 24);
for (let z = 0; z <= 4; z++) {
let color = z === 0 ? steelShadow : steelSide;
if (z === 4) {
if (edgeDistance <= 1) color = steelLight;
else if (edgeDistance === 2) color = "#cbd5da";
else color = rand() < 0.09 ? "#bac5cb" : steelFace;
}
set(x, y, z, color);
}
}
// Dark, recessed-looking center fuller, stopping before the point.
if (y >= 9 && y <= 27) {
for (let x = 23; x <= 25; x++) {
set(x, y, 4, x === 24 ? "#56616b" : groove);
}
set(22, y, 4, "#c4ced3");
set(26, y, 4, "#c4ced3");
}
}
// Ricasso just ahead of the guard.
for (let y = 28; y <= 29; y++) {
for (let x = 20; x <= 28; x++) set(x, y, 4, steelFace);
}
// Small but wide brass crossguard, with rounded-off ends.
const guardRows = [
[30, 15, 33],
[31, 12, 36],
[32, 11, 37],
[33, 12, 36],
[34, 17, 31]
];
for (const [y, left, right] of guardRows) {
for (let x = left; x <= right; x++) {
for (let z = 0; z <= 5; z++) {
let color = z < 2 ? brassDark : brass;
if (z === 5) color = rand() < 0.08 ? "#d5a34d" : brassLight;
if (x === left || x === right) color = z === 5 ? brass : brassDark;
set(x, y, z, color);
}
}
}
for (let x = 14; x <= 34; x++) set(x, 31, 5, brassLight);
for (let x = 17; x <= 31; x++) set(x, 33, 5, brass);
// Raised brass shoulders and a little ruby at the guard's center.
box(19, 30, 5, 21, 33, 6, brass);
box(27, 30, 5, 29, 33, 6, brass);
box(23, 31, 6, 25, 32, 6, "#8c2331");
set(24, 31, 6, "#ee5360");
// Leather-wrapped grip.
box(21, 34, 0, 27, 42, 4, leatherDark);
box(22, 35, 4, 26, 41, 4, leather);
for (let y = 35; y <= 41; y++) {
set(21, y, 4, leatherDark);
set(27, y, 4, leatherDark);
if (y % 2 === 0) {
for (let x = 22; x <= 26; x++) {
set(x, y, 4, x === 22 || x === 26 ? leatherDark : leatherLight);
}
} else {
set(23, y, 4, "#b47a44");
set(25, y, 4, "#b47a44");
}
}
// Brass collars at either end of the grip.
for (const y of [34, 41]) {
box(20, y, 0, 28, y, 4, brassDark);
box(20, y, 4, 28, y, 5, brass);
box(22, y, 5, 26, y, 5, brassLight);
}
// Round, substantial brass pommel.
ellipsoid(24, 44, 2, 5, 2, 3, brassDark);
ellipsoid(24, 44, 3, 4, 2, 2, brass);
for (let y = 43; y <= 45; y++) {
for (let x = 21; x <= 27; x++) {
if (get(x, y, 5)) set(x, y, 5, brassLight);
}
}
box(23, 44, 5, 25, 45, 5, "#f1cc79");import { draw } from "./assets/voxel";
import { espadaCorta } from "./assets/espada-corta";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, espadaCorta, 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 espada-corta
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["espada-corta"] })
# Queda en client/assets/espada-corta.ts
# https://fogon.page/object/espada-corta