← Level pieces 23D assetfogon/nivel-bandera-de-inicio
Bandera de inicio
Drag to turn it// «Bandera de inicio» · gpt-6-sol (medium)
// A start line: a full 48 wide on x checkered black and white strip on the floor (y 18..29, z 0..1), and at both ends (x 2 and x 45) a tall grey pole 36 tall holding a horizontal banner across the top (z 30..37) that is green with a white big arrow pointing forward (-y).
// Full-width black-and-white start line.
for (let x = 0; x < 48; x++) {
for (let y = 18; y <= 29; y++) {
const white = (Math.floor(x / 3) + Math.floor((y - 18) / 3)) % 2 === 0;
box(x, y, 0, x, y, 1, white ? "#f7f7ef" : "#20242a");
}
}
// Steel-grey poles, centered at x=2 and x=45.
for (const x of [2, 45]) {
box(x - 2, 21, 2, x + 2, 26, 3, "#747e83");
box(x - 1, 22, 4, x + 1, 25, 35, "#aab4b6");
box(x - 1, 22, 4, x - 1, 25, 35, "#d5dddd");
box(x + 1, 22, 4, x + 1, 25, 35, "#758186");
box(x - 1, 22, 28, x + 1, 25, 29, "#69767a");
}
// The banner and its arrow swing together.
part("cartel", [24, 24, 34]);
// Upright, front-facing part of the banner.
box(4, 24, 30, 43, 26, 36, "#39c850");
box(4, 23, 30, 43, 23, 30, "#218f41");
box(4, 23, 31, 43, 23, 35, "#31ba49");
box(4, 23, 36, 43, 23, 36, "#72e36a");
box(4, 23, 31, 5, 23, 35, "#218f41");
box(42, 23, 31, 43, 23, 35, "#218f41");
// Chunky white START lettering on the front.
const letters = {
S: ["111", "100", "111", "001", "111"],
T: ["111", "010", "010", "010", "010"],
A: ["111", "101", "111", "101", "101"],
R: ["110", "101", "110", "101", "101"]
};
let cursor = 14;
for (const ch of "START") {
const glyph = letters[ch];
for (let row = 0; row < 5; row++) {
for (let col = 0; col < 3; col++) {
if (glyph[row][col] === "1")
set(cursor + col, 22, 35 - row, "#fffef0");
}
}
cursor += 4;
}
// Broad green top keeps the forward-pointing arrow readable from above.
box(4, 18, 36, 43, 29, 37, "#38c84d");
box(4, 18, 36, 43, 18, 36, "#249e41");
box(4, 29, 36, 43, 29, 36, "#66df61");
// Arrow points toward the viewer, along -y.
const arrowRows = [
[18, 23, 24],
[19, 22, 25],
[20, 20, 27],
[21, 18, 29],
[22, 16, 31],
[23, 14, 33],
[24, 14, 33],
[25, 21, 26],
[26, 21, 26],
[27, 21, 26],
[28, 21, 26],
[29, 21, 26]
];
for (const [y, left, right] of arrowRows)
box(left, y, 37, right, y, 37, "#fffef0");
animate("cartel", { type: "swing", axis: "x", amplitude: 0.12, speed: 2 });import { draw } from "./assets/voxel";
import { nivelBanderaDeInicio } from "./assets/nivel-bandera-de-inicio";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, nivelBanderaDeInicio, 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-bandera-de-inicio
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["nivel-bandera-de-inicio"] })
# It lands in client/assets/nivel-bandera-de-inicio.ts
# https://fogon.page/object/nivel-bandera-de-inicio