← Piratas y marObjeto 3Dfogon/pirata-con-garfio
Pirata con garfio
Arrastrá para girarlo// «Pirata con garfio» · gpt-6-sol (medium)
// A tall thin cartoon pirate facing -y with a long purple coat, a black tricorn hat with a big white feather, a thin curled black mustache, and a shiny silver hook instead of the left hand, the right hand holding a small pistol-shaped flintlock.
const purple = "#66359a";
const purpleLight = "#8753bb";
const purpleDark = "#47206f";
const gold = "#f4be3d";
const goldLight = "#ffe078";
const black = "#20212b";
const blackLight = "#393946";
const skin = "#e9ae78";
const skinLight = "#ffd09b";
const brown = "#70442f";
const silver = "#d9e8ed";
const silverDark = "#829ba8";
// Long coat and narrow torso.
box(17, 20, 18, 31, 29, 30, purple);
box(17, 19, 23, 31, 20, 30, purpleLight);
box(18, 20, 29, 30, 28, 31, purpleLight);
box(15, 21, 14, 19, 30, 21, purpleDark);
box(29, 21, 14, 33, 30, 21, purpleDark);
box(16, 20, 16, 19, 29, 20, purple);
box(29, 20, 16, 32, 29, 20, purple);
box(16, 20, 14, 19, 29, 14, gold);
box(29, 20, 14, 32, 29, 14, gold);
box(15, 19, 17, 15, 28, 20, gold);
box(33, 19, 17, 33, 28, 20, gold);
// Open lapels, striped shirt, and sash.
box(21, 18, 22, 27, 19, 29, "#fff0cf");
for (let z = 23; z <= 27; z += 2) box(22, 17, z, 26, 18, z, "#d84948");
line(18, 18, 29, 22, 17, 23, 1, purpleDark);
line(30, 18, 29, 26, 17, 23, 1, purpleDark);
line(19, 17, 29, 22, 16, 24, 0, gold);
line(29, 17, 29, 26, 16, 24, 0, gold);
box(18, 18, 20, 30, 29, 21, brown);
box(18, 17, 21, 30, 18, 21, gold);
box(23, 16, 19, 26, 17, 22, gold);
box(24, 15, 20, 25, 16, 21, brown);
for (let z of [24, 27]) {
set(20, 17, z, goldLight);
set(28, 17, z, goldLight);
}
// Neck and friendly face.
box(22, 21, 30, 26, 26, 33, skin);
ellipsoid(24, 23, 35, 6, 5, 5, skin);
box(20, 18, 36, 28, 19, 38, skinLight);
box(22, 16, 32, 26, 18, 35, skin);
box(23, 15, 33, 25, 16, 34, skinLight);
box(19, 21, 33, 19, 24, 35, skinLight);
box(29, 21, 33, 29, 24, 35, skinLight);
for (let x of [21, 27]) {
box(x, 17, 36, x + 1, 17, 37, black);
set(x, 16, 37, "#ffffff");
}
box(21, 17, 39, 22, 17, 39, brown);
box(27, 17, 39, 28, 17, 39, brown);
// A fine mustache with raised, curled ends.
line(20, 16, 32, 23, 15, 33, 0, black);
line(25, 15, 33, 28, 16, 32, 0, black);
set(19, 16, 33, black);
set(19, 16, 34, black);
set(29, 16, 33, black);
set(29, 16, 34, black);
box(23, 17, 31, 25, 17, 31, brown);
// Black tricorn: broad upturned corners and a raised crown.
box(17, 20, 39, 31, 29, 42, black);
box(19, 21, 43, 29, 27, 43, blackLight);
box(13, 16, 39, 35, 29, 40, black);
box(12, 15, 40, 36, 19, 41, blackLight);
for (let x = 10; x <= 38; x++) {
const tip = Math.abs(x - 24);
const bottom = tip > 10 ? 41 : 39;
const top = tip > 12 ? 44 : tip > 9 ? 43 : tip > 6 ? 42 : 41;
box(x, 15, bottom, x, 18, top, x % 5 === 0 ? blackLight : black);
set(x, 14, bottom, gold);
}
box(17, 14, 40, 31, 14, 40, gold);
box(21, 14, 41, 27, 14, 42, black);
set(23, 13, 42, "#ffffff");
set(25, 13, 42, "#ffffff");
box(23, 13, 41, 25, 13, 41, "#ffffff");
set(22, 13, 40, "#ffffff");
set(26, 13, 40, "#ffffff");
// Oversized white feather, arcing out of the hat.
line(29, 15, 41, 32, 14, 44, 0, silverDark);
line(32, 14, 44, 35, 14, 45, 0, silverDark);
line(29, 14, 42, 32, 13, 44, 1, "#ffffff");
line(31, 13, 44, 35, 13, 45, 1, "#fffdf1");
line(32, 13, 44, 36, 12, 44, 0, "#ffffff");
set(34, 12, 43, "#ffffff");
set(36, 13, 45, "#ffffff");
// Each leg pivots independently at the hip.
part("leftLeg", [20, 24, 17]);
box(17, 21, 7, 22, 27, 17, "#384253");
box(17, 20, 8, 22, 21, 15, "#515c6a");
box(17, 20, 0, 22, 28, 7, brown);
box(16, 16, 0, 23, 26, 3, "#583728");
box(17, 16, 3, 22, 18, 3, "#93613b");
box(17, 19, 7, 22, 28, 7, gold);
animate("leftLeg", { type: "swing", axis: "x", speed: 5, amplitude: 0.3 });
part("rightLeg", [28, 24, 17]);
box(26, 21, 7, 31, 27, 17, "#384253");
box(26, 20, 8, 31, 21, 15, "#515c6a");
box(26, 20, 0, 31, 28, 7, brown);
box(25, 16, 0, 32, 26, 3, "#583728");
box(26, 16, 3, 31, 18, 3, "#93613b");
box(26, 19, 7, 31, 28, 7, gold);
animate("rightLeg", { type: "swing", axis: "x", speed: -5, amplitude: 0.3 });
// Pirate's right arm (viewer left), holding a little flintlock.
part("rightArm", [16, 24, 29]);
box(12, 21, 21, 17, 28, 29, purple);
box(12, 20, 23, 13, 27, 28, purpleLight);
box(12, 20, 20, 17, 28, 21, gold);
box(13, 21, 17, 16, 25, 19, skin);
box(12, 18, 17, 15, 22, 19, skinLight);
// Brown grip, silver barrel pointing forward, and hammer.
box(11, 17, 15, 14, 21, 18, brown);
box(10, 12, 19, 14, 20, 20, brown);
box(10, 11, 20, 14, 19, 20, gold);
box(11, 9, 20, 13, 19, 21, silverDark);
box(11, 10, 21, 13, 17, 21, silver);
box(10, 9, 19, 14, 10, 21, gold);
box(13, 16, 22, 14, 18, 23, black);
set(14, 15, 23, silver);
animate("rightArm", { type: "swing", axis: "x", speed: 5, amplitude: 0.25 });
// Pirate's left arm (viewer right), ending in a bright silver hook.
part("leftArm", [32, 24, 29]);
box(31, 21, 21, 36, 28, 29, purple);
box(35, 20, 23, 36, 27, 28, purpleLight);
box(31, 20, 20, 36, 28, 21, gold);
box(33, 21, 17, 36, 26, 19, brown);
box(33, 20, 17, 36, 26, 17, gold);
box(34, 20, 15, 35, 23, 17, silverDark);
line(35, 21, 16, 38, 21, 16, 1, silver);
line(38, 21, 16, 40, 21, 19, 1, silver);
line(40, 21, 19, 39, 21, 21, 1, silver);
line(39, 21, 21, 37, 21, 22, 1, silver);
set(40, 20, 19, "#ffffff");
set(39, 20, 21, "#ffffff");
animate("leftArm", { type: "swing", axis: "x", speed: -5, amplitude: 0.25 });
part("body", [24, 24, 0]);import { draw } from "./assets/voxel";
import { pirataConGarfio } from "./assets/pirata-con-garfio";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, pirataConGarfio, x, y, { size: 64, angle: 0, t: performance.now() / 1000 });
// size: lo que mide en px su lado más largo
// angle: giro sobre el piso, en radianes
// t: segundos; si se mueve, se anima solo con eso# En una terminal, en la carpeta del juego
fogon assets add pirata-con-garfio
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["pirata-con-garfio"] })
# Queda en client/assets/pirata-con-garfio.ts
# https://fogon.page/object/pirata-con-garfio