← BásicoObjeto 3Dfogon/excavadora
Excavadora
Arrastrá para girarlo// «Excavadora» · gpt-6-sol (medium)
// Tracked excavator («Excavadora»). Be faithful to the reference: keep thin parts thin (1–2 blocks: strings, necks, handles, legs, rods), keep its exact proportions and silhouette, and every visible detail (books on shelves, sound holes, tuning pegs, valves). Don't make it chunkier than the reference.
// Tracked excavator — cab faces right, with the boom behind it.
const yellow = "#f5ba25";
const bright = "#ffd44a";
const ochre = "#c98513";
const shadow = "#986112";
const steel = "#303a3d";
const steelLight = "#566267";
const rubber = "#242b2d";
// Two long, low tracks. The nearer track projects farther to the right.
function track(x0, x1, y0) {
for (let x = x0; x <= x1; x++) {
const end = Math.min(x - x0, x1 - x);
const bottom = end < 2 ? 2 - end : 0;
const top = end < 3 ? 6 + end : 9;
for (let y = y0; y <= y0 + 8; y++) {
for (let z = bottom; z <= top; z++) {
const edge = y === y0 || y === y0 + 8;
let c = edge ? "#343d40" : rubber;
if (z === top) c = x % 4 === 0 ? "#647074" : "#485256";
if (z <= bottom + 1) c = "#1c2224";
set(x, y, z, c);
}
}
}
// Raised individual tread plates and the gaps between them.
for (let x = x0 + 3; x <= x1 - 3; x += 4) {
box(x, y0, 8, x + 2, y0 + 8, 9, "#626d70");
box(x, y0, 3, x + 1, y0, 7, "#4e595c");
box(x + 3, y0, 3, x + 3, y0, 8, "#202729");
}
box(x0 + 3, y0 - 1, 2, x1 - 3, y0 - 1, 7, "#22292b");
for (let x = x0 + 5; x < x1 - 3; x += 5) {
box(x, y0 - 1, 3, x + 2, y0 - 1, 4, "#758185");
set(x + 1, y0 - 2, 3, "#a0aaab");
}
box(x0 + 2, y0, 7, x1 - 2, y0, 7, "#768184");
}
track(6, 37, 32);
track(10, 43, 8);
// Chassis and turntable above the tracks.
box(12, 17, 9, 37, 33, 12, "#343b3a");
box(14, 18, 12, 36, 32, 14, "#58605b");
box(13, 13, 13, 37, 35, 16, ochre);
box(14, 12, 16, 38, 35, 17, yellow);
box(16, 12, 17, 38, 34, 18, "#e39c18");
box(17, 13, 18, 38, 34, 18, bright);
box(15, 12, 13, 38, 12, 14, "#995d12");
// Rear engine housing, with stepped and striped hood.
box(9, 16, 18, 25, 33, 24, ochre);
box(10, 15, 20, 24, 33, 25, yellow);
box(11, 15, 24, 25, 33, 26, bright);
box(11, 15, 26, 24, 32, 27, "#f4b821");
box(11, 14, 19, 22, 14, 23, "#b67313");
box(12, 14, 23, 23, 14, 24, "#ffcd37");
box(12, 15, 26, 23, 15, 26, "#ffe057");
for (let x = 12; x < 22; x += 3) {
box(x, 14, 25, x, 17, 26, "#c88314");
}
box(9, 20, 20, 11, 30, 24, "#d58a11");
box(24, 16, 20, 26, 31, 26, "#b47212");
box(25, 15, 20, 26, 31, 24, "#f1b321");
// Small bolts and side panels on the engine.
box(12, 13, 17, 21, 13, 19, "#a66c17");
for (let x = 13; x <= 21; x += 4) {
box(x, 12, 17, x + 1, 12, 18, "#e7a920");
}
box(17, 14, 21, 21, 14, 23, "#a66b15");
box(18, 13, 21, 20, 13, 22, "#d48d16");
// Cab: dark glass recessed between thin yellow posts.
box(25, 14, 19, 38, 33, 30, "#b87713");
box(26, 13, 20, 37, 33, 29, "#263f4b");
box(27, 12, 21, 36, 12, 28, "#315b6c");
box(28, 11, 22, 31, 11, 27, "#477a88");
box(33, 11, 22, 35, 11, 27, "#3f7080");
box(29, 11, 27, 34, 11, 28, "#578897");
box(36, 12, 21, 37, 12, 28, "#24424f");
box(32, 11, 21, 32, 11, 28, "#243a43");
box(26, 12, 20, 27, 12, 29, "#e3a221");
box(37, 12, 20, 38, 12, 29, "#c08016");
box(25, 12, 19, 38, 13, 20, "#e5a621");
// Right-facing windshield and its narrow frame.
box(39, 17, 21, 39, 30, 28, "#274753");
box(40, 19, 23, 40, 27, 27, "#3b7181");
box(39, 17, 20, 40, 30, 21, "#d59619");
box(39, 17, 28, 40, 30, 29, "#e9aa20");
box(40, 17, 21, 40, 18, 28, "#a96a13");
// Wide overhanging roof, with a pale top and dark lower lip.
box(24, 11, 29, 39, 34, 30, "#a96512");
box(23, 10, 30, 39, 34, 31, yellow);
box(24, 11, 32, 38, 33, 32, "#ffe15b");
box(23, 10, 30, 39, 10, 30, "#ffcd37");
box(25, 12, 33, 37, 31, 33, "#f8c737");
box(24, 11, 31, 39, 11, 31, "#ffd94d");
box(27, 14, 33, 35, 27, 33, "#ffe56c");
box(23, 10, 29, 39, 10, 29, "#805318");
// Step, handhold and dark exhausts behind the cab.
box(24, 11, 16, 31, 13, 18, "#c58112");
box(26, 10, 17, 29, 10, 18, "#ffd044");
box(13, 22, 27, 14, 23, 33, "#343b3a");
box(12, 21, 32, 15, 24, 33, "#42494a");
box(18, 29, 27, 19, 30, 35, "#353c3c");
box(17, 28, 34, 19, 31, 35, "#414948");
box(21, 21, 27, 23, 24, 29, "#d08212");
box(22, 21, 29, 23, 23, 30, "#ffdb3d");
// Rear-mounted boom, rising high above the roof.
line(25, 33, 27, 24, 33, 35, 1, ochre);
line(24, 33, 35, 28, 33, 42, 1, ochre);
line(28, 33, 42, 31, 33, 44, 1, ochre);
line(31, 33, 44, 36, 33, 41, 1, ochre);
line(36, 33, 41, 39, 33, 35, 1, ochre);
line(39, 33, 35, 39, 33, 29, 1, ochre);
// Thin bright outside edge and darker inner edge of the arm.
line(24, 32, 35, 28, 32, 42, 0, bright);
line(28, 32, 42, 31, 32, 44, 0, "#ffe267");
line(31, 32, 44, 36, 32, 41, 0, bright);
line(36, 32, 41, 39, 32, 35, 0, yellow);
line(27, 35, 36, 30, 35, 43, 0, shadow);
line(30, 35, 43, 36, 35, 40, 0, shadow);
line(36, 35, 40, 40, 35, 31, 0, shadow);
for (let i = 0; i < 5; i++) {
box(25 + i, 31, 35 + i * 2, 26 + i, 31, 36 + i * 2, "#f8c22e");
}
box(30, 31, 43, 32, 34, 44, "#e7a41c");
set(31, 31, 45, "#ffdc50");
// Hydraulic cylinder and exposed silver ram.
line(26, 30, 29, 32, 30, 37, 1, "#333d40");
line(32, 30, 37, 37, 30, 40, 0, "#89999a");
line(35, 31, 39, 40, 31, 32, 1, "#4e5b5e");
line(39, 30, 34, 42, 30, 27, 0, "#abb5b0");
for (const [x, z] of [[25, 29], [32, 37], [36, 40], [39, 30]]) {
box(x - 1, 29, z - 1, x + 1, 30, z + 1, "#414a4a");
set(x, 28, z, "#acb5ad");
}
// Slim, dark digging bucket curled inward at the far end.
box(40, 31, 24, 43, 36, 29, "#414a4b");
box(42, 30, 23, 44, 36, 27, "#303a3c");
box(41, 30, 27, 43, 30, 29, "#667173");
box(43, 30, 22, 44, 36, 23, "#273033");
box(40, 31, 25, 40, 36, 27, "#687374");
for (let y = 31; y <= 35; y += 2) {
box(43, y, 21, 44, y, 23, "#394345");
set(44, y, 21, "#657074");
}
set(40, 29, 28, "#b6bbb0");import { draw } from "./assets/voxel";
import { excavadora } from "./assets/excavadora";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, excavadora, 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 excavadora
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["excavadora"] })
# Queda en client/assets/excavadora.ts
# https://fogon.page/object/excavadora