fogón

← EquipamientoObjeto 3Dfogon/espada-corta

Espada corta

de fogonCC03247 bloques
Espada cortaArrastrá 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");