← Level pieces 23D assetfogon/nivel-hielo
Bloque de hielo
Drag to turn it// «Bloque de hielo» · 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. Entirely translucent-looking pale cyan ice in 3 shades (light cyan, sky blue, deeper blue near the bottom), with a few white diagonal crack lines and small white highlight blocks scattered on the smooth flat top; the sides show faint horizontal darker blue layers. Very clean and glossy.
// Solid, grid-aligned ice tile: every layer fills the full 48×48 footprint.
const layers = [
"#68bad8", // deeper blue at the bottom
"#74c5df",
"#80cde4",
"#75c1dc", // faint horizontal side band
"#91d9e9",
"#9cdeed",
"#a9e7f1",
"#c5f5f8" // smooth, pale-cyan top
];
for (let z = 0; z < 8; z++) {
box(0, 0, z, 47, 47, z, layers[z]);
}
// Sparse, subtle blue glints visible beneath the white surface details.
for (let i = 0; i < 85; i++) {
const x = 2 + Math.floor(rand() * 44);
const y = 2 + Math.floor(rand() * 44);
set(x, y, 7, rand() < 0.55 ? "#b5ecf5" : "#d8fafb");
}
// Fine diagonal cracks, kept away from all four tile edges.
function crack(points) {
for (let i = 0; i < points.length - 1; i++) {
const [x0, y0] = points[i];
const [x1, y1] = points[i + 1];
const steps = Math.max(Math.abs(x1 - x0), Math.abs(y1 - y0));
for (let j = 0; j <= steps; j++) {
const t = j / steps;
const x = Math.round(x0 + (x1 - x0) * t);
const y = Math.round(y0 + (y1 - y0) * t);
set(x, y, 7, "#f5ffff");
}
}
}
crack([[8, 13], [14, 19], [17, 21], [22, 27], [28, 31]]);
crack([[16, 20], [20, 18], [24, 15]]);
crack([[26, 30], [30, 28], [34, 25]]);
crack([[30, 9], [34, 13], [37, 15]]);
crack([[11, 35], [15, 32], [18, 30]]);
// Small, crisp specular highlights on the perfectly flat top.
for (const [x, y] of [
[7, 8], [8, 8], [38, 9], [39, 9],
[33, 19], [12, 27], [39, 35],
[20, 39], [21, 39], [34, 40]
]) {
set(x, y, 7, "#ffffff");
}import { draw } from "./assets/voxel";
import { nivelHielo } from "./assets/nivel-hielo";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, nivelHielo, 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-hielo
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["nivel-hielo"] })
# It lands in client/assets/nivel-hielo.ts
# https://fogon.page/object/nivel-hielo