fogón

← Medieval3D assetfogon/mesa-de-taberna

Mesa de taberna

by fogonCC013222 blocks
Mesa de tabernaDrag to turn it
// «Mesa de taberna» · gpt-6-sol (medium)
// A rustic tavern table: a thick heavy rectangular plank top in warm brown with visible board lines, sturdy X-shaped trestle legs, two long wooden benches on both sides, and on the table two wooden tankards with foam, a round loaf of bread, a roasted chicken leg on a plate and a short candle.

// Rustic tavern table, built from chunky timber and worn iron.
const woodDark = "#49301f";
const woodShadow = "#5b3923";
const wood = "#81502c";
const woodWarm = "#a86d3a";
const woodLight = "#c18a50";
const grain = "#704323";
const iron = "#343432";
const ironLight = "#77716a";

// Two long benches, one on either side of the table.
function bench(y0) {
  const y1 = y0 + 7;

  for (const x of [10, 36]) {
    box(x, y0 + 1, 0, x + 3, y1 - 1, 12, woodDark);
    box(x, y0, 0, x + 3, y1, 2, woodShadow);
    box(x + 1, y0, 3, x + 2, y0, 10, wood);
  }

  box(12, y0 + 3, 5, 37, y0 + 4, 7, woodShadow);
  box(8, y0 + 1, 12, 39, y1 - 1, 13, woodDark);
  box(7, y0, 14, 40, y1, 15, woodShadow);

  // Two broad seat planks and a narrow dark join.
  box(7, y0, 16, 40, y0 + 2, 16, woodWarm);
  box(7, y0 + 3, 16, 40, y0 + 3, 16, grain);
  box(7, y0 + 4, 16, 40, y1, 16, wood);
  box(8, y0 + 1, 17, 39, y0 + 1, 17, woodLight);
  box(8, y0 + 5, 17, 39, y0 + 5, 17, woodWarm);

  for (const x of [9, 38]) {
    for (const y of [y0 + 1, y1 - 1]) set(x, y, 17, ironLight);
  }
}
bench(3);
bench(38);

// Two heavy X-shaped trestles beneath the table.
for (const x of [12, 35]) {
  box(x - 3, 15, 0, x + 3, 32, 2, woodDark);
  box(x - 2, 17, 3, x + 2, 30, 5, woodShadow);
  line(x, 16, 3, x, 31, 21, 1.35, woodDark);
  line(x, 31, 3, x, 16, 21, 1.35, woodDark);
  line(x, 16, 4, x, 30, 20, 0.45, woodWarm);
  box(x - 2, 22, 8, x + 2, 25, 12, woodDark);
  box(x - 3, 16, 19, x + 3, 31, 22, woodShadow);
  for (const y of [17, 30]) {
    set(x, y, 5, ironLight);
    set(x, y, 18, ironLight);
  }
}
box(13, 22, 8, 35, 25, 11, woodDark);
box(15, 22, 10, 33, 22, 10, woodWarm);

// Deep apron and thick, individual tabletop boards.
box(5, 13, 22, 42, 34, 23, woodDark);
box(4, 12, 24, 43, 35, 26, woodShadow);
for (const [a, b, color] of [
  [13, 18, woodWarm],
  [20, 24, wood],
  [26, 30, woodWarm],
  [32, 34, wood]
]) {
  box(5, a, 27, 42, b, 27, color);
  box(6, a, 25, 41, a, 26, woodLight);
}
for (const y of [19, 25, 31]) box(5, y, 27, 42, y, 27, woodDark);

// Hand-worn outer rim and iron-bound corners.
box(4, 12, 26, 43, 12, 27, woodDark);
box(4, 35, 26, 43, 35, 27, woodDark);
box(4, 12, 26, 4, 35, 27, woodDark);
box(43, 12, 26, 43, 35, 27, woodDark);
for (const x of [5, 41]) {
  for (const y of [13, 33]) {
    box(x, y, 27, x + 1, y + 1, 27, iron);
    set(x, y, 28, ironLight);
  }
}

// Scattered short grain marks keep the broad top from looking flat.
for (let i = 0; i < 90; i++) {
  const x = 7 + Math.floor(rand() * 34);
  const y = 14 + Math.floor(rand() * 20);
  if ([19, 25, 31].includes(y) || rand() < 0.35) continue;
  const c = rand() < 0.5 ? "#956039" : "#b47a43";
  set(x, y, 28, c);
  if (rand() < 0.4) set(x + 1, y, 28, c);
}

// Wooden tankards with iron hoops, square handles, and generous foam.
function tankard(x, y) {
  cylinder(x, y, 28, 2.5, 7, woodDark);
  cylinder(x, y, 29, 2.1, 5, wood);
  box(x - 1, y - 2, 29, x + 1, y - 2, 33, woodWarm);
  for (const z of [29, 33]) {
    cylinder(x, y, z, 2.55, 1, iron);
    box(x - 1, y - 3, z, x + 1, y - 3, z, ironLight);
  }
  box(x + 2, y - 1, 29, x + 4, y, 30, woodDark);
  box(x + 3, y - 1, 30, x + 4, y, 34, woodDark);
  box(x + 2, y - 1, 34, x + 4, y, 35, woodDark);
  ellipsoid(x, y, 35, 2.6, 2.5, 1.3, "#f2e3b8");
  ellipsoid(x - 1, y - 1, 36, 1.2, 1.1, 0.8, "#fff1cd");
  set(x + 1, y - 2, 34, "#fff1cd");
}
tankard(11, 18);
tankard(36, 19);

// A round, scored loaf.
ellipsoid(23, 18, 30, 4.3, 3.2, 2.5, "#80502c");
ellipsoid(23, 18, 31, 4, 3, 2.5, "#bc8145");
ellipsoid(22, 17, 32, 3, 2, 1.5, "#d79c59");
for (const x of [21, 24, 26]) {
  line(x - 1, 16, 34, x, 19, 33, 0, "#815029");
}

// Pewter plate and a browned roast chicken leg.
ellipsoid(30, 29, 28, 6, 3.5, 0.7, "#817a70");
ellipsoid(30, 29, 29, 5.2, 2.8, 0.4, "#aaa295");
ellipsoid(29, 29, 30, 3.4, 2.1, 1.8, "#77391f");
ellipsoid(28, 28, 31, 2.7, 1.5, 1.5, "#ad5626");
box(27, 27, 32, 29, 27, 32, "#ca7937");
line(31, 29, 30, 36, 29, 30, 0.6, "#e2d3ab");
sphere(36, 28, 30, 0.85, "#f1dfb4");
sphere(36, 30, 30, 0.85, "#f1dfb4");

// A short, dripping candle in a dark iron holder.
cylinder(16, 29, 28, 2, 1, iron);
cylinder(16, 29, 29, 1.25, 5, "#dfc99e");
cylinder(16, 29, 33, 1.25, 1, "#f1ddb3");
set(15, 28, 31, "#f1ddb3");
set(17, 29, 30, "#f1ddb3");
set(16, 29, 34, "#383027");
set(16, 29, 35, "#e99436");
set(16, 29, 36, "#ffd166");
set(16, 29, 37, "#fff1a3");