fogón

← Gear3D assetfogon/arco-largo

Arco largo

by fogonCC01520 blocks
Arco largoDrag to turn it
// «Arco largo» · gpt-6-sol (medium)
// A longbow: a tall curved wooden bow (D shape) made of two shades of warm brown wood with a dark leather grip in the middle, the curve bulging toward -y and a thin straight light string closing it along y, with one arrow nocked across it. 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.

// A longbow laid flat: its wooden limb curves beside a straight bowstring.
const darkWood = "#754020";
const wood = "#a96530";
const lightWood = "#ca8544";
const edgeWood = "#dc9b55";
const leather = "#39231e";
const leatherLight = "#624032";
const brass = "#c89a43";

// Curved, solid wooden limb. Both ends meet the straight string.
for (let y = 3; y <= 44; y++) {
  const t = (y - 3) / 41;
  const cx = Math.round(23 + 13 * Math.pow(Math.sin(Math.PI * t), 1.08));
  const halfWidth = y < 7 || y > 40 ? 2 : 2 + (y >= 17 && y <= 30 ? 1 : 0);

  for (let x = cx - halfWidth; x <= cx + halfWidth; x++) {
    for (let z = 0; z <= 3; z++) {
      let color = z === 3 ? lightWood : z === 0 ? darkWood : wood;
      if (x === cx - halfWidth) color = darkWood;
      if (x === cx + halfWidth && z >= 2) color = edgeWood;
      if (z === 3 && rand() < 0.07) color = edgeWood;
      set(x, y, z, color);
    }
  }
}

// Leather grip follows the thick middle of the curved limb.
for (let y = 19; y <= 28; y++) {
  const cx = Math.round(23 + 13 * Math.pow(Math.sin(Math.PI * (y - 3) / 41), 1.08));
  for (let x = cx - 3; x <= cx + 3; x++) {
    for (let z = 0; z <= 4; z++) {
      set(x, y, z, z === 4 ? leatherLight : leather);
    }
  }
  if (y % 3 === 0) {
    for (let x = cx - 2; x <= cx + 2; x++) set(x, y, 5, "#866047");
  }
}
for (const y of [19, 28]) {
  const cx = Math.round(23 + 13 * Math.pow(Math.sin(Math.PI * (y - 3) / 41), 1.08));
  box(cx - 3, y, 4, cx + 3, y, 4, brass);
}

// Reinforced tips and the taut, pale string.
box(20, 3, 1, 24, 5, 3, darkWood);
box(20, 42, 1, 24, 44, 3, darkWood);
box(20, 3, 4, 23, 4, 4, brass);
box(20, 43, 4, 23, 44, 4, brass);
box(20, 5, 2, 21, 42, 2, "#e7cf9d");
for (let y = 7; y <= 40; y++) set(20, y, 3, "#fff0c7");

// Arrow nocked against the string and pointing toward the front (-y).
box(19, 11, 4, 21, 37, 5, "#af7136");
box(20, 12, 6, 20, 35, 6, "#e0a455");

// Broad, faceted steel arrowhead.
for (let y = 5; y <= 11; y++) {
  const width = Math.floor((y - 5) / 2);
  box(20 - width, y, 4, 20 + width, y, 5,
      y < 8 ? "#dae1df" : "#87969a");
  set(20, y, 6, "#eef1e7");
}
box(18, 11, 4, 22, 12, 5, "#657175");

// Sapphire-blue fletching, swept back along both sides of the shaft.
for (let y = 30; y <= 36; y++) {
  const spread = y <= 33 ? y - 29 : 37 - y;
  for (let d = 1; d <= spread; d++) {
    set(19 - d, y, 5, d === spread ? "#325b9c" : "#4788c5");
    set(21 + d, y, 5, d === spread ? "#325b9c" : "#4788c5");
    set(19 - d, y, 6, "#6cadd9");
    set(21 + d, y, 6, "#6cadd9");
  }
}

// Split nock at the arrow's rear.
box(18, 37, 4, 19, 39, 5, darkWood);
box(21, 37, 4, 22, 39, 5, darkWood);