← Level pieces 23D assetfogon/nivel-piso-de-metal
Piso de metal
Drag to turn it// «Piso de metal» · gpt-6-sol (medium)
// A square ground tile that tiles seamlessly: a full 48x48 footprint (x 0..47, y 0..47), 8 blocks thick (z 0..7), a perfectly flat solid slab with straight vertical sides and no gaps. A sci-fi metal floor plate: light grey steel top divided into four 24x24 panels by darker 1-block seams, each panel with a raised diamond-tread pattern of lighter blocks and a small dark bolt at each corner; a yellow and black hazard stripe border 2 blocks wide along all four edges of the top; the sides dark grey metal.
// Solid, grid-aligned 48×48×8 floor tile.
box(0, 0, 0, 47, 47, 7, "#56636d");
// Straight metal sides with crisp horizontal bands.
for (let z = 0; z <= 6; z++) {
const color =
z === 1 ? "#414d57" :
z === 5 ? "#71818b" :
z === 6 ? "#485761" : "#56636d";
for (let i = 0; i < 48; i++) {
set(i, 0, z, color);
set(i, 47, z, color);
set(0, i, z, color);
set(47, i, z, color);
}
}
// Four light-steel panels, distinguished by subtle clean shading.
for (let y = 2; y <= 45; y++) {
for (let x = 2; x <= 45; x++) {
const panel = (x >= 24 ? 1 : 0) + (y >= 24 ? 2 : 0);
const shades = ["#b9c9d1", "#becdd5", "#b6c6ce", "#bbcad2"];
set(x, y, 7, shades[panel]);
}
}
// One-block seams and their bright machined edges.
for (let i = 2; i <= 45; i++) {
set(23, i, 7, "#526570");
set(i, 23, 7, "#526570");
set(22, i, 7, "#d8e2e5");
set(i, 22, 7, "#d8e2e5");
}
// Raised-looking diamond tread, kept within the tile's flat z=7 top.
const diamonds = [
[7, 13, 19], [29, 35, 41]
];
for (const xs of diamonds) {
for (const ys of diamonds) {
for (const cx of xs) {
for (const cy of ys) {
set(cx, cy - 2, 7, "#edf5f5");
set(cx - 1, cy - 1, 7, "#e4eef0");
set(cx + 1, cy - 1, 7, "#f1f7f6");
set(cx - 2, cy, 7, "#dce8eb");
set(cx + 2, cy, 7, "#eef6f6");
set(cx - 1, cy + 1, 7, "#dce8eb");
set(cx + 1, cy + 1, 7, "#e4eef0");
set(cx, cy + 2, 7, "#d4e2e6");
}
}
}
}
// Dark corner bolts on every panel, with a tiny steel highlight.
for (const x of [4, 20, 27, 44]) {
for (const y of [4, 20, 27, 44]) {
set(x, y, 7, "#374750");
set(x - 1, y - 1, 7, "#eef4f3");
}
}
// Two-block hazard border. The stripe period divides 48, so adjacent
// copies continue the same diagonal pattern seamlessly.
for (let y = 0; y < 48; y++) {
for (let x = 0; x < 48; x++) {
if (x < 2 || x >= 46 || y < 2 || y >= 46) {
const stripe = (x + y) % 8 < 4;
set(x, y, 7, stripe ? "#ffd43d" : "#303b43");
}
}
}import { draw } from "./assets/voxel";
import { nivelPisoDeMetal } from "./assets/nivel-piso-de-metal";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, nivelPisoDeMetal, x, y, { size: 64, angle: 0, t: performance.now() / 1000 });
// size: its longest side, in px
// angle: turn on the floor, in radians
// t: seconds; if it moves, that animates it# In a terminal, in the game's folder
fogon assets add nivel-piso-de-metal
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["nivel-piso-de-metal"] })
# It lands in client/assets/nivel-piso-de-metal.ts
# https://fogon.page/object/nivel-piso-de-metal