fogón

← Farm3D assetfogon/granjero

Granjero

by fogonCC011535 blocks
GranjeroDrag to turn it
// «Granjero» · gpt-6-sol (medium)
// A friendly chunky cartoon farmer standing upright, facing front (-y): a wide-brimmed golden straw hat, a round face with skin tone, black dot eyes, a big brown mustache, a red-and-white checkered plaid shirt, blue denim overalls with straps and two buttons, brown boots, and arms at the sides holding a small pitchfork in the right hand.

const red = "#c93f36", redDark = "#ad302d", cream = "#fff3d7";
const skin = "#eeb680", skinLight = "#ffd09a", skinShade = "#d99567";
const blue = "#397ac0", blueLight = "#5296d5", blueDark = "#285b96";
const straw = "#edba40", strawLight = "#ffdb69", strawDark = "#b9862d";
const wood = "#986333", metal = "#b8c9ca";

// Shirt and neck
box(15, 19, 17, 31, 29, 27, red);
ellipsoid(23, 23, 25, 9, 7, 4, red);
box(20, 19, 27, 26, 25, 29, skinShade);

// Broad, readable checks on the exposed shirt.
for (let x = 15; x <= 31; x++)
  for (let z = 18; z <= 27; z++) {
    if (get(x, 18, z)) {
      const stripe = x % 5 === 2 || z % 5 === 0;
      if (stripe) set(x, 18, z, x % 5 === 2 && z % 5 === 0 ? cream : "#f4d9c4");
      else if (rand() < 0.12) set(x, 18, z, redDark);
    }
  }
for (const x of [15, 31])
  for (let y = 20; y <= 28; y++)
    for (let z = 19; z <= 26; z++)
      if (get(x, y, z) && (y % 5 === 2 || z % 5 === 0))
        set(x, y, z, cream);

// Hair behind the face, then a round, warm face.
ellipsoid(23, 21, 32, 8, 6, 6, "#81502e");
ellipsoid(23, 19, 31, 7, 6, 6, skin);
ellipsoid(23, 15, 32, 5, 2, 4, skinLight);
box(15, 18, 29, 16, 21, 32, skinShade);
box(30, 18, 29, 31, 21, 32, skinShade);
box(16, 15, 28, 17, 18, 32, "#87502b");
box(29, 15, 28, 30, 18, 32, "#87502b");
box(19, 13, 32, 20, 15, 33, "#222323");
box(26, 13, 32, 27, 15, 33, "#222323");
set(19, 13, 33, "#ffffff");
set(26, 13, 33, "#ffffff");
box(22, 12, 29, 24, 15, 30, skinLight);

// Two chunky, swept mustache halves and a little smile.
ellipsoid(20, 13, 28, 4, 2, 2, "#714221");
ellipsoid(26, 13, 28, 4, 2, 2, "#714221");
box(17, 13, 28, 19, 14, 29, "#8e572b");
box(27, 13, 28, 29, 14, 29, "#8e572b");
box(22, 13, 26, 24, 13, 26, "#914d3d");

// Wide, layered straw brim, brown hatband, and bright crown.
ellipsoid(23, 21, 37, 17, 13, 2, strawDark);
ellipsoid(23, 21, 38, 16, 12, 1, straw);
box(16, 16, 39, 30, 27, 43, straw);
box(17, 16, 44, 29, 26, 44, strawLight);
box(15, 15, 39, 31, 27, 40, "#96652c");
box(16, 14, 40, 30, 14, 40, "#a77330");
box(16, 16, 41, 30, 16, 43, strawLight);
for (let i = 0; i < 55; i++) {
  const x = 8 + Math.floor(rand() * 31);
  const y = 9 + Math.floor(rand() * 25);
  if (get(x, y, 38) === straw) set(x, y, 38, rand() < 0.5 ? strawLight : "#dba538");
}
box(23, 13, 39, 25, 14, 41, strawLight);

// Overall waist and bib, with two separate shoulder straps.
box(16, 17, 14, 30, 29, 19, blue);
box(17, 16, 18, 29, 18, 23, blue);
box(18, 16, 24, 20, 18, 27, blueLight);
box(26, 16, 24, 28, 18, 27, blueLight);
box(18, 15, 18, 28, 15, 22, blueLight);
box(20, 14, 19, 26, 14, 21, blueDark);
box(21, 13, 20, 25, 13, 20, blueLight);
box(18, 14, 24, 20, 14, 25, blue);
box(26, 14, 24, 28, 14, 25, blue);
box(19, 13, 24, 20, 13, 25, "#e9c46d");
box(26, 13, 24, 27, 13, 25, "#e9c46d");
box(17, 15, 15, 18, 15, 17, blueDark);
box(28, 15, 15, 30, 15, 17, blueDark);

// Legs: each swings opposite the arm on its side.
part("leftLeg", [19, 23, 16]);
box(16, 20, 5, 22, 27, 16, blue);
box(16, 18, 6, 22, 19, 15, blueLight);
box(16, 18, 6, 16, 19, 14, blueDark);
box(18, 17, 8, 20, 17, 9, blueDark);
box(17, 18, 5, 21, 19, 5, "#c5a66e");
box(16, 18, 1, 22, 28, 5, "#754624");
box(15, 15, 0, 23, 27, 2, "#59371f");
box(16, 15, 3, 22, 19, 4, "#9a6231");
animate("leftLeg", { type: "swing", axis: "x", speed: -4, amplitude: 0.3 });

part("rightLeg", [27, 23, 16]);
box(24, 20, 5, 30, 27, 16, blue);
box(24, 18, 6, 30, 19, 15, blueLight);
box(30, 18, 6, 30, 19, 14, blueDark);
box(26, 17, 8, 28, 17, 9, blueDark);
box(25, 18, 5, 29, 19, 5, "#c5a66e");
box(24, 18, 1, 30, 28, 5, "#754624");
box(23, 15, 0, 31, 27, 2, "#59371f");
box(24, 15, 3, 30, 19, 4, "#9a6231");
animate("rightLeg", { type: "swing", axis: "x", speed: 4, amplitude: 0.3 });

part("leftArm", [14, 23, 26]);
box(9, 20, 20, 15, 27, 27, red);
box(9, 19, 23, 15, 19, 24, cream);
box(11, 19, 20, 12, 19, 27, cream);
box(9, 19, 19, 15, 27, 20, redDark);
box(10, 20, 14, 14, 25, 19, skin);
box(10, 19, 13, 14, 25, 15, skinLight);
box(11, 18, 12, 14, 24, 13, skinShade);
animate("leftArm", { type: "swing", axis: "x", speed: 4, amplitude: 0.35 });

part("rightArm", [32, 23, 26]);
box(31, 20, 20, 37, 27, 27, red);
box(31, 19, 23, 37, 19, 24, cream);
box(34, 19, 20, 35, 19, 27, cream);
box(31, 19, 19, 37, 27, 20, redDark);
box(33, 19, 14, 37, 25, 19, skin);
box(34, 18, 14, 38, 23, 17, skinLight);
box(36, 16, 15, 39, 19, 17, skinShade);

// The pitchfork stays in the farmer's swinging right hand.
box(39, 16, 8, 40, 17, 27, wood);
box(39, 15, 9, 39, 15, 25, "#c18b48");
box(39, 16, 27, 40, 17, 30, "#899fa3");
box(35, 16, 30, 43, 17, 31, metal);
for (const x of [35, 39, 43]) {
  box(x, 16, 31, x + 1, 17, 35, metal);
  box(x, 16, 36, x + 1, 17, 36, "#e0e8dc");
}
box(37, 15, 15, 39, 17, 17, skinLight);
animate("rightArm", { type: "swing", axis: "x", speed: -4, amplitude: 0.35 });

part("body", [23, 23, 20]);