← BásicoObjeto 3Dfogon/taladro-manual
Taladro manual
Arrastrá para girarlo// «Taladro manual» · gpt-6-sol (medium)
// Hand drill («Taladro manual»).
// Hand drill, pointing toward the front (-y).
const black = "#161c20";
const dark = "#252c30";
const charcoal = "#343c40";
const steel = "#77868c";
const silver = "#adb9bb";
const gold = "#e8ae08";
const yellow = "#ffd017";
const lightYellow = "#ffe34a";
// Battery pack: broad, heavy base with a raised yellow lip.
box(17, 22, 0, 32, 39, 5, black);
box(16, 23, 1, 33, 38, 6, dark);
box(17, 22, 2, 32, 22, 5, charcoal);
box(17, 39, 2, 32, 40, 5, black);
box(18, 24, 6, 32, 38, 8, black);
box(17, 24, 7, 33, 37, 8, gold);
box(19, 25, 8, 31, 36, 9, yellow);
box(17, 24, 7, 19, 36, 8, lightYellow);
box(31, 24, 7, 33, 36, 8, gold);
box(18, 22, 4, 31, 23, 6, "#424a4b");
// Grip: slightly tapered, with chunky rubber finger grooves.
box(20, 28, 9, 29, 37, 14, black);
box(21, 29, 14, 28, 36, 28, black);
box(22, 30, 14, 28, 36, 27, dark);
box(20, 28, 9, 29, 29, 13, charcoal);
box(21, 29, 15, 21, 36, 26, charcoal);
box(28, 29, 15, 29, 36, 27, "#11171a");
for (let z = 12; z <= 25; z += 3) {
box(28, 29, z, 30, 35, z + 1, "#101619");
box(21, 29, z, 22, 34, z, "#4b5353");
}
box(21, 27, 25, 30, 37, 29, black);
box(22, 27, 27, 29, 29, 30, charcoal);
// Trigger under the front of the housing.
box(20, 25, 25, 25, 28, 28, "#101619");
box(22, 24, 24, 25, 26, 27, "#596164");
// Yellow motor housing, built with stepped edges instead of a plain cuboid.
box(16, 18, 30, 32, 40, 42, gold);
box(14, 20, 31, 34, 38, 41, yellow);
box(16, 19, 29, 32, 39, 42, yellow);
box(17, 20, 42, 31, 38, 43, lightYellow);
box(15, 21, 40, 34, 37, 41, lightYellow);
box(16, 19, 30, 32, 20, 31, "#bd8300");
box(17, 39, 31, 31, 40, 40, "#bc8508");
box(16, 21, 29, 32, 38, 30, "#b17c0a");
// Panel on the visible right side, with a raised golden border.
box(34, 22, 32, 35, 38, 40, "#bd8708");
box(35, 23, 33, 35, 37, 39, yellow);
box(36, 25, 33, 36, 36, 38, "#7b590a");
box(37, 26, 34, 37, 35, 37, black);
box(36, 24, 40, 36, 36, 40, lightYellow);
box(36, 38, 34, 36, 39, 38, "#a36e08");
// Pixel lettering, read across the side of the housing.
function sideGlyph(x, y, z, rows, color) {
for (let dz = 0; dz < rows.length; dz++)
for (let dy = 0; dy < rows[dz].length; dy++)
if (rows[dz][dy] === "1") set(x, y + dy, z + rows.length - 1 - dz, color);
}
sideGlyph(38, 26, 34, ["111", "001", "111", "100", "111"], "#d6d2a5"); // 2
sideGlyph(38, 30, 34, ["111", "101", "101", "101", "111"], "#d6d2a5"); // 0
sideGlyph(38, 34, 34, ["101", "101", "101", "101", "010"], "#d6d2a5"); // V
// Dark seams and protective corners.
box(14, 19, 32, 15, 20, 40, "#947015");
box(16, 18, 32, 31, 18, 39, "#b88a0b");
box(16, 18, 40, 32, 19, 41, lightYellow);
box(15, 38, 32, 17, 40, 39, "#b27b09");
box(31, 38, 32, 33, 40, 39, "#c58d06");
box(17, 40, 34, 31, 40, 38, "#dda509");
box(18, 40, 39, 30, 40, 40, lightYellow);
// Shallow molded channels across the top.
box(19, 20, 43, 20, 38, 43, "#b88005");
box(21, 21, 43, 21, 37, 43, lightYellow);
box(29, 20, 43, 30, 38, 43, "#bd8908");
box(17, 23, 43, 19, 25, 44, "#5d5130");
box(17, 23, 44, 19, 25, 44, black);
// Top-mounted reverse selector.
box(23, 30, 43, 29, 35, 44, charcoal);
box(24, 31, 45, 28, 34, 45, black);
box(25, 31, 45, 27, 32, 45, steel);
// Front mounting plate and circular, ribbed chuck.
box(17, 17, 32, 31, 19, 39, dark);
cylinder(24, 15, 35, 6, 4, "#20272b", "y");
cylinder(24, 14, 35, 5, 3, charcoal, "y");
cylinder(24, 12, 35, 4, 4, "#515d61", "y");
cylinder(24, 11, 35, 3, 3, steel, "y");
cylinder(24, 10, 35, 2, 3, "#3d494e", "y");
for (const [dx, dz] of [[-5, 0], [5, 0], [0, -5], [0, 5],
[-3, -4], [3, 4], [-3, 4], [3, -4]]) {
box(24 + dx, 15, 35 + dz, 24 + dx, 17, 35 + dz, "#11191d");
}
box(21, 13, 34, 21, 15, 36, silver);
box(27, 13, 34, 27, 15, 36, "#192024");
// Metal bit: stepped shaft, narrow pointed cutting end.
box(23, 7, 34, 25, 11, 36, "#526168");
box(23, 8, 36, 24, 10, 36, silver);
box(24, 3, 35, 24, 8, 35, steel);
box(23, 5, 35, 25, 6, 35, silver);
box(24, 2, 35, 24, 3, 35, "#c1ccca");
set(23, 4, 35, "#34444c");
set(25, 5, 35, "#34444c");
// Battery rating, on its visible right face.
box(34, 25, 2, 34, 37, 6, "#12191c");
sideGlyph(35, 26, 2, ["010", "110", "010", "010", "111"], "#e1ded0"); // 1
sideGlyph(35, 30, 2, ["111", "101", "111", "101", "111"], "#e1ded0"); // 8
sideGlyph(35, 34, 2, ["101", "101", "101", "101", "010"], "#e1ded0"); // V
box(34, 24, 6, 34, 37, 7, "#5b6260");
box(34, 38, 2, 34, 39, 5, steel);
box(16, 38, 2, 17, 39, 5, "#667073");
// Restrained flecks and edge highlights on the yellow casting.
for (let i = 0; i < 75; i++) {
const y = 21 + Math.floor(rand() * 17);
const z = 32 + Math.floor(rand() * 8);
const x = rand() < 0.5 ? 14 : 34;
if (get(x, y, z) === yellow && rand() < 0.35)
set(x, y, z, rand() < 0.5 ? "#f1ba0c" : "#ffda29");
}import { draw } from "./assets/voxel";
import { taladroManual } from "./assets/taladro-manual";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, taladroManual, 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 taladro-manual
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["taladro-manual"] })
# Queda en client/assets/taladro-manual.ts
# https://fogon.page/object/taladro-manual