← Level pieces 23D assetfogon/nivel-pozo-con-pinchos
Pozo con pinchos
Drag to turn it// «Pozo con pinchos» · gpt-6-sol (medium)
// A spike pit tile: a full 48x48 footprint, 12 thick (z 0..11). A stone border 6 blocks wide around all four edges with a grass top, and inside it a sunken pit (x 6..41, y 6..41) whose floor is at z 2, filled with a dense grid of sharp steel spikes (pyramids 3 wide at the base, 8 tall) in light silver with darker shading and a few red tips.
// Solid stone foundation and recessed pit floor.
box(0, 0, 0, 47, 47, 2, "#626d76");
box(6, 6, 2, 41, 41, 2, "#48545e");
// Six-block-wide stone rim.
box(0, 0, 3, 47, 5, 10, "#929da5");
box(0, 42, 3, 47, 47, 10, "#929da5");
box(0, 6, 3, 5, 41, 10, "#929da5");
box(42, 6, 3, 47, 41, 10, "#929da5");
// Crisp highlights along the inside walls.
box(5, 6, 9, 5, 41, 10, "#b4bec4");
box(42, 6, 9, 42, 41, 10, "#b4bec4");
box(6, 5, 9, 41, 5, 10, "#b4bec4");
box(6, 42, 9, 41, 42, 10, "#b4bec4");
// Grass cap, kept exactly within the tile footprint.
box(0, 0, 11, 47, 5, 11, "#58c94b");
box(0, 42, 11, 47, 47, 11, "#58c94b");
box(0, 6, 11, 5, 41, 11, "#58c94b");
box(42, 6, 11, 47, 41, 11, "#58c94b");
// Sparse, clean grass highlights.
for (let x = 0; x < 48; x++) {
for (let y = 0; y < 48; y++) {
if (get(x, y, 11) && rand() < 0.055) {
set(x, y, 11, rand() < 0.5 ? "#73dc59" : "#46b840");
}
}
}
// Dense, eight-block-tall steel spikes.
for (let cx = 7; cx <= 39; cx += 4) {
for (let cy = 7; cy <= 39; cy += 4) {
// Broad, shaded three-by-three base.
for (let z = 3; z <= 4; z++) {
for (let dx = -1; dx <= 1; dx++) {
for (let dy = -1; dy <= 1; dy++) {
set(cx + dx, cy + dy, z,
dy === -1 ? "#aebbc3" : dx === 1 ? "#778994" : "#93a4ae");
}
}
}
// Narrowing shoulder and bright, sharp point.
for (let z = 5; z <= 6; z++) {
set(cx - 1, cy - 1, z, "#e2edf0");
set(cx, cy - 1, z, "#c7d6dc");
set(cx - 1, cy, z, "#aabcc5");
set(cx, cy, z, "#81939e");
}
for (let z = 7; z <= 9; z++) {
set(cx, cy, z, z === 9 ? "#f2f8f8" : "#d8e5e9");
}
// A few ominous red tips, scattered but easy to read.
const red = ((cx * 7 + cy * 11) % 17 === 0);
set(cx, cy, 10, red ? "#ed4944" : "#f7fcfb");
if (red) set(cx, cy, 9, "#d46561");
}
}import { draw } from "./assets/voxel";
import { nivelPozoConPinchos } from "./assets/nivel-pozo-con-pinchos";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, nivelPozoConPinchos, 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-pozo-con-pinchos
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["nivel-pozo-con-pinchos"] })
# It lands in client/assets/nivel-pozo-con-pinchos.ts
# https://fogon.page/object/nivel-pozo-con-pinchos