← BásicoObjeto 3Dfogon/tijera
Tijera
Arrastrá para girarlo// «Tijera» · gpt-6-sol (medium)
// Scissors («Tijera»). 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.
// Two red finger loops, lying flat.
function fingerLoop(cx, cy, rx, ry, holeX, holeY, hx, hy) {
for (let x = Math.floor(cx - rx); x <= Math.ceil(cx + rx); x++) {
for (let y = Math.floor(cy - ry); y <= Math.ceil(cy + ry); y++) {
const outer = ((x - cx) / rx) ** 2 + ((y - cy) / ry) ** 2;
const inner = ((x - holeX) / hx) ** 2 + ((y - holeY) / hy) ** 2;
if (outer > 1 || inner < 1) continue;
for (let z = 0; z <= 7; z++) {
let color;
if (z <= 1) color = "#922a2b";
else if (z <= 4) color = y > cy ? "#b93534" : "#c9443c";
else color = y < cy ? "#ed6554" : "#df4c43";
// Dark inner walls make the holes legible from above.
if (inner < 1.45 && z < 7) color = "#a83230";
if (z === 7 && rand() < 0.13) color = "#f27760";
set(x, y, z, color);
}
}
}
}
fingerLoop(26, 29, 8, 9, 26, 29, 4.2, 5);
fingerLoop(35, 12, 10, 7, 35, 12, 6.2, 3.6);
// Narrow red shanks leading into the crossing.
line(19, 20, 7, 22, 24, 7, 1, "#c8423b");
line(19, 19, 8, 26, 16, 8, 1, "#d64b40");
box(17, 18, 7, 20, 21, 9, "#bb3935");
set(18, 19, 10, "#f06a50");
// Long, slim steel blade extending left from the joint.
for (let i = 0; i <= 25; i++) {
const t = i / 25;
const x = Math.round(18 - 17 * t);
const y = Math.round(19 + 17 * t);
const z = Math.round(10 - 2 * t);
set(x, y, z, i % 3 === 0 ? "#778996" : "#536674");
set(x, y, z + 1, i % 4 === 0 ? "#a3afb2" : "#788891");
if (i < 23) set(x + 1, y, z, "#354a59");
// Small regular notches along the outer edge.
if (i > 2 && i < 24 && i % 2 === 0)
set(x, y + 1, z, "#435967");
}
set(1, 36, 8, "#657783");
// The second blade rises sharply from the hinge, tapering to a fine point.
for (let z = 10; z <= 32; z++) {
const t = (z - 10) / 22;
const x = Math.round(18 - 2 * t);
const y = Math.round(19 + 3 * t);
const width = z < 19 ? 2 : z < 26 ? 1 : 0;
for (let dx = -width; dx <= width; dx++) {
if (dx === -width && z % 3 === 0 && z > 20) continue;
set(x + dx, y, z,
dx < 0 ? "#425969" : dx > 0 ? "#85959b" :
z % 4 === 0 ? "#d2d4c8" : "#a7b4b5");
}
}
set(16, 22, 33, "#dce0d5");
// Small warm brass fastening around the base of the upright blade.
for (let z = 15; z <= 18; z++) {
const x = z >= 17 ? 17 : 18;
box(x - 2, 18, z, x + 2, 20, z,
z === 15 ? "#94651d" : z === 18 ? "#f5c447" : "#d69a28");
}
set(18, 17, 17, "#ffe077");
set(19, 18, 16, "#ffd259");
set(17, 17, 18, "#fff0a1");import { draw } from "./assets/voxel";
import { tijera } from "./assets/tijera";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, tijera, 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 tijera
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["tijera"] })
# Queda en client/assets/tijera.ts
# https://fogon.page/object/tijera