← EquipamientoObjeto 3Dfogon/mandoble
Mandoble
Arrastrá para girarlo// «Mandoble» · gpt-6-sol (medium)
// A huge two-handed greatsword: a very long and wide steel blade filling almost the whole length, a long double-width grip wrapped in dark brown leather, a big flat iron crossguard with curled ends and a heavy iron 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.
// Greatsword lying flat: tip toward -y, pommel toward +y.
const steelDark = "#68737d";
const steelMid = "#929da7";
const steelLight = "#c5d0d7";
const steelEdge = "#e0e8e9";
const ironDark = "#454d55";
const ironMid = "#717c83";
const ironLight = "#aab5b8";
const brass = "#b88b43";
const gold = "#e3ba65";
// Broad, solid blade with a tapered point, beveled edges, and a raised spine.
for (let y = 1; y <= 29; y++) {
let half;
if (y <= 9) half = Math.min(9, y);
else if (y <= 26) half = 9;
else half = y <= 28 ? 8 : 7;
for (let x = 24 - half; x <= 24 + half; x++) {
const edgeDistance = half - Math.abs(x - 24);
let top = edgeDistance === 0 ? 2 : edgeDistance === 1 ? 3 : 4;
if (Math.abs(x - 24) <= 1 && y >= 6) top = 5;
for (let z = 0; z <= top; z++) {
let color = steelDark;
if (z === top) {
if (edgeDistance === 0) color = steelEdge;
else if (Math.abs(x - 24) <= 1 && y >= 6) color = steelLight;
else if (x < 24) color = rand() < 0.09 ? "#aab7c0" : steelMid;
else color = rand() < 0.09 ? "#a8b3bc" : "#84919c";
}
set(x, y, z, color);
}
}
}
// Long, subtle channels flanking the bright central ridge.
for (let y = 12; y <= 27; y++) {
set(21, y, 5, "#72818e");
set(27, y, 5, "#72818e");
set(23, y, 5, "#d5dfe2");
set(24, y, 5, steelEdge);
}
// A small engraved mark near the blade's heel.
for (let y = 25; y <= 28; y++) set(24, y, 6, brass);
set(23, 26, 6, gold);
set(25, 26, 6, gold);
// Flat iron crossguard, wide enough to dominate the silhouette.
box(10, 30, 0, 38, 33, 4, ironDark);
box(11, 30, 4, 37, 33, 4, ironMid);
box(12, 30, 5, 36, 30, 5, ironLight);
box(12, 33, 5, 36, 33, 5, "#89969a");
for (let x = 11; x <= 37; x++) {
if (x >= 19 && x <= 29) continue;
set(x, 31, 5, x % 5 === 0 ? ironLight : ironMid);
set(x, 32, 5, ironMid);
}
// Thick, hooked ends curl toward the blade and back toward the grip.
for (const [y, xmin, xmax] of [
[28, 7, 9], [29, 5, 9], [30, 5, 10], [31, 5, 10],
[32, 6, 10], [33, 6, 10], [34, 7, 10],
[35, 7, 9], [36, 8, 9]
]) {
for (let x = xmin; x <= xmax; x++) {
for (const xx of [x, 48 - x]) {
box(xx, y, 0, xx, y, 4, ironDark);
set(xx, y, 5, x === xmin || y === 28 ? ironLight : ironMid);
}
}
}
for (const x of [6, 42]) {
box(x, 30, 6, x + 1, 31, 6, ironLight);
}
// Raised central socket and restrained brass decoration.
box(18, 30, 0, 30, 34, 5, ironDark);
box(19, 30, 5, 29, 34, 5, ironMid);
box(21, 31, 6, 27, 33, 6, brass);
box(22, 31, 7, 26, 33, 7, gold);
box(23, 31, 8, 25, 33, 8, "#a92932");
set(24, 31, 9, "#e76161");
set(24, 32, 9, "#cf4148");
for (const x of [14, 16, 32, 34]) {
box(x, 31, 5, x, 32, 5, brass);
}
// Long, double-width leather grip, solid and chunky.
box(20, 34, 0, 28, 45, 4, "#452c24");
box(21, 35, 5, 27, 44, 5, "#79513a");
for (let y = 36; y <= 43; y++) {
for (let x = 21; x <= 27; x++) {
set(x, y, 5, rand() < 0.13 ? "#98684a" : "#79513a");
}
set(20, y, 4, "#583728");
set(28, y, 4, "#533326");
}
// Angled-looking broad leather wraps and dark stitches.
for (let y = 36; y <= 43; y += 3) {
for (let x = 20; x <= 28; x++) {
const yy = y + (x >= 25 ? 1 : 0);
if (yy <= 44) set(x, yy, x === 20 || x === 28 ? 5 : 6,
x % 3 === 0 ? "#a57250" : "#4e3026");
}
}
for (let y = 37; y <= 43; y += 3) {
set(22, y, 6, "#30211e");
set(26, y + 1, 6, "#30211e");
}
// Sturdy metal collars at both ends of the grip.
box(19, 34, 0, 29, 35, 5, ironDark);
box(20, 34, 6, 28, 34, 6, ironLight);
box(20, 35, 6, 28, 35, 6, brass);
box(19, 43, 0, 29, 44, 5, ironDark);
box(20, 43, 6, 28, 43, 6, ironLight);
box(20, 44, 6, 28, 44, 6, brass);
// Heavy faceted iron pommel, finishing at the back of the grid.
box(19, 44, 0, 29, 46, 5, ironDark);
box(20, 44, 5, 28, 46, 5, ironMid);
box(21, 46, 0, 27, 47, 4, ironDark);
box(21, 47, 4, 27, 47, 4, ironLight);
box(21, 45, 6, 27, 46, 6, ironLight);
box(22, 45, 7, 26, 46, 7, brass);
box(23, 45, 8, 25, 46, 8, "#24567f");
set(24, 45, 9, "#64a8d1");import { draw } from "./assets/voxel";
import { mandoble } from "./assets/mandoble";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, mandoble, 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 mandoble
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["mandoble"] })
# Queda en client/assets/mandoble.ts
# https://fogon.page/object/mandoble