← Kit de nivelesObjeto 3Dfogon/nivel-piedra
Bloque de piedra
Arrastrá para girarlo// «Bloque de piedra» · gpt-6-sol (medium)
// A square stone ground tile that tiles seamlessly: a full 48x48 footprint (x 0..47, y 0..47), 8 blocks thick (z 0..7), flat with straight vertical sides. The top surface is made of large light-grey square flagstones about 12x12 blocks each, separated by 1-block darker grey grout lines that line up with the edges so neighboring tiles continue the pattern; a few thin dark cracks and a little moss green in some grout. The sides show stacked grey stone layers in 2-3 shades, darker toward the bottom.
// Full-size modular stone tile: 48 × 48 × 8.
const layers = [
"#737c80", "#7b8588", "#899397",
"#929da0", "#9da8aa",
"#a9b3b5", "#b3bdbf"
];
for (let z = 0; z < 7; z++) {
box(0, 0, z, 47, 47, z, layers[z]);
}
const flagColors = ["#c7d0cf", "#cbd3d2", "#d0d7d5", "#c4cecd"];
const edgeColors = ["#b5c0c0", "#bbc5c4", "#bfc9c7", "#b3bebe"];
for (let y = 0; y < 48; y++) {
for (let x = 0; x < 48; x++) {
const lx = x % 12;
const ly = y % 12;
if (lx === 0 || ly === 0) {
// One-block grout grid, repeated exactly at every tile boundary.
let color = "#747e80";
if (rand() < 0.12) color = "#808a89";
set(x, y, 7, color);
} else {
const stone = ((Math.floor(x / 12) * 3 + Math.floor(y / 12) * 5) % 4);
const edge = lx === 1 || lx === 11 || ly === 1 || ly === 11;
let color = edge ? edgeColors[stone] : flagColors[stone];
if (!edge && rand() < 0.035) color = "#d9dfdc";
set(x, y, 7, color);
}
}
}
// Sparse moss tucked into grout, not across the walking surface.
for (const [x0, y0, dx, dy, length] of [
[12, 5, 0, 1, 4], [29, 24, 1, 0, 4],
[36, 39, 0, 1, 3], [6, 12, 1, 0, 3],
[24, 17, 0, 1, 3]
]) {
for (let i = 0; i < length; i++) {
set(x0 + dx * i, y0 + dy * i, 7,
i % 3 === 0 ? "#668b69" : "#7a9b72");
}
}
// A few fine, short cracks confined to individual flagstones.
for (const [x, y] of [
[16, 5], [17, 5], [18, 6], [18, 7], [19, 7],
[39, 16], [38, 17], [37, 17], [37, 18],
[6, 30], [7, 31], [8, 31], [8, 32],
[29, 40], [30, 40], [31, 41]
]) {
set(x, y, 7, "#899395");
}
// Straight exposed sides with small, regularly spaced masonry joints.
for (const z of [1, 2, 4, 5]) {
const offset = z <= 2 ? 0 : 6;
for (let p = offset; p < 48; p += 12) {
const seam = z <= 2 ? "#626d72" : "#849093";
set(p, 0, z, seam);
set(p, 47, z, seam);
set(0, p, z, seam);
set(47, p, z, seam);
}
}import { draw } from "./assets/voxel";
import { nivelPiedra } from "./assets/nivel-piedra";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, nivelPiedra, 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 nivel-piedra
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["nivel-piedra"] })
# Queda en client/assets/nivel-piedra.ts
# https://fogon.page/object/nivel-piedra