fogón

← Fantasy3D assetfogon/elfo-arquero

Elfo arquero

by fogonCC09084 blocks
Elfo arqueroDrag to turn it
// «Elfo arquero» · gpt-6-sol (medium)
// A slender cartoon elf archer standing facing front (-y): long pointy ears, long blond hair, big friendly eyes, a forest-green hooded tunic with a brown leather belt, tall brown boots, a wooden longbow held in the left hand and a quiver of arrows with green feathers on the back.

// Storybook elf archer — front faces -y.
const green = "#326b48";
const lightGreen = "#45845a";
const darkGreen = "#244c3c";
const skin = "#efbd8d";
const skinShade = "#d99a72";
const gold = "#f5cf65";
const hairShade = "#dba846";
const leather = "#70462e";
const leatherLight = "#98613a";
const bootDark = "#4e342b";

// Walking legs, each pivoting at its hip.
part("leftLeg", [20, 24, 16]);
ellipsoid(20, 24, 12, 3, 3, 5, "#385b42");
box(18, 22, 5, 22, 26, 12, leather);
box(17, 20, 0, 22, 27, 6, bootDark);
box(17, 17, 0, 22, 24, 3, leather);
box(18, 17, 3, 21, 18, 3, leatherLight);
box(18, 20, 8, 22, 22, 9, leatherLight);
animate("leftLeg", { type: "swing", axis: "x", speed: 5, amplitude: 0.3 });

part("rightLeg", [28, 24, 16]);
ellipsoid(28, 24, 12, 3, 3, 5, "#385b42");
box(26, 22, 5, 30, 26, 12, leather);
box(26, 20, 0, 31, 27, 6, bootDark);
box(26, 17, 0, 31, 24, 3, leather);
box(27, 17, 3, 30, 18, 3, leatherLight);
box(26, 20, 8, 30, 22, 9, leatherLight);
animate("rightLeg", { type: "swing", axis: "x", speed: -5, amplitude: 0.3 });

part("body", [24, 24, 22]);

// Tunic: rounded shoulders, narrow waist, and a flared hem.
ellipsoid(24, 24, 24, 8, 6, 8, green);
ellipsoid(24, 24, 17, 8, 6, 4, darkGreen);
ellipsoid(24, 22, 18, 7, 5, 4, green);
for (let x = 18; x <= 30; x++) {
  const hem = 15 + Math.round(Math.abs(x - 24) / 3);
  set(x, 18, hem, lightGreen);
}
line(19, 18, 27, 24, 17, 22, 1, lightGreen);
line(29, 18, 27, 24, 17, 22, 1, lightGreen);
box(18, 18, 19, 30, 29, 20, leather);
box(22, 17, 19, 26, 18, 21, "#c99a48");
box(23, 16, 19, 25, 17, 20, "#f5d477");

// The free arm and its little leather glove.
ellipsoid(16, 23, 27, 3, 3, 3, darkGreen);
line(15, 22, 26, 13, 19, 20, 2, green);
ellipsoid(13, 18, 19, 2, 2, 2, leatherLight);
set(12, 16, 19, skin);

// Quiver sits behind the right shoulder, with arrows rising past the hood.
line(31, 31, 20, 27, 29, 27, 1, leatherLight);
ellipsoid(32, 32, 27, 3, 3, 7, leather);
box(30, 29, 22, 34, 32, 23, leatherLight);
box(30, 29, 31, 34, 32, 32, "#b77b44");
for (const [x, top] of [[30, 42], [32, 45], [34, 43]]) {
  line(x, 31, 29, x, 31, top - 2, 0, "#c79a57");
  line(x - 1, 31, top - 3, x, 31, top, 0, "#66ae68");
  line(x + 1, 31, top - 3, x, 31, top, 0, "#3c814f");
  set(x, 31, top, "#e4d6a3");
}

// Hood and long blond hair behind the face.
ellipsoid(24, 24, 35, 10, 9, 9, darkGreen);
ellipsoid(24, 23, 37, 9, 9, 7, green);
ellipsoid(17, 19, 29, 3, 4, 9, hairShade);
ellipsoid(31, 19, 29, 3, 4, 9, hairShade);
line(17, 15, 32, 17, 16, 25, 1, gold);
line(31, 15, 32, 31, 16, 25, 1, gold);

// Long pointed ears, backed by the hood.
line(17, 20, 35, 8, 19, 39, 2, skinShade);
line(17, 17, 35, 8, 17, 39, 1, skin);
line(31, 20, 35, 40, 19, 39, 2, skinShade);
line(31, 17, 35, 40, 17, 39, 1, skin);
line(13, 16, 37, 9, 16, 39, 0, "#c97878");
line(35, 16, 37, 39, 16, 39, 0, "#c97878");

// Big soft face and sweeping blond fringe.
ellipsoid(24, 17, 34, 7, 5, 7, skinShade);
ellipsoid(24, 15, 35, 7, 4, 7, skin);
ellipsoid(24, 17, 41, 7, 4, 2, gold);
line(18, 14, 40, 21, 12, 39, 1, gold);
line(29, 13, 40, 26, 12, 39, 1, hairShade);
for (const x of [18, 30]) {
  line(x, 14, 38, x, 13, 29, 1, gold);
  line(x, 13, 31, x, 12, 27, 0, hairShade);
}

// Friendly oversized eyes, rosy cheeks, nose, and smile.
for (const x of [21, 27]) {
  ellipsoid(x, 11, 35, 2, 1, 2, "#fff5dd");
  box(x, 10, 34, x + 1, 10, 36, "#354b46");
  set(x, 9, 36, "#ffffff");
}
set(18, 11, 32, "#d98984");
set(30, 11, 32, "#d98984");
set(24, 10, 32, skinShade);
line(22, 11, 30, 24, 10, 29, 0, "#a95752");
line(24, 10, 29, 26, 11, 30, 0, "#a95752");

// The bow, glove, and entire holding arm share one shoulder pivot.
part("bowArm", [32, 23, 28]);
ellipsoid(32, 23, 28, 3, 3, 3, darkGreen);
line(33, 22, 27, 36, 18, 23, 2, green);
line(36, 18, 23, 39, 16, 23, 1, skin);
ellipsoid(39, 16, 23, 2, 2, 2, leatherLight);

// Curved wooden longbow and a fine taut string.
const bow = [
  [39, 9], [41, 12], [43, 17], [44, 23],
  [43, 29], [41, 34], [39, 37]
];
for (let i = 0; i < bow.length - 1; i++) {
  line(bow[i][0], 16, bow[i][1],
       bow[i + 1][0], 16, bow[i + 1][1], 1, leather);
}
line(39, 15, 10, 39, 15, 36, 0, "#e6d6a5");
for (const [x, z] of bow) set(x, 15, z, leatherLight);
box(43, 15, 21, 44, 17, 25, leatherLight);
set(44, 14, 23, "#d8b56b");
animate("bowArm", { type: "swing", axis: "x", speed: 2, amplitude: 0.25 });