← City3D assetfogon/rascacielos
Rascacielos
Drag to turn it// «Rascacielos» · gpt-6-sol (medium)
// A modern skyscraper: a very tall slender tower (the full height of the grid) of blue-tinted glass curtain walls in a grid of light and dark panels, with slim silver vertical fins, a stepped crown near the top with a helipad and a red blinking antenna light, and a tall glass lobby at the base facing -y.
const concrete = "#d8d5cb";
const silver = "#c6d1d5";
const steel = "#607580";
const dark = "#263c50";
// Concrete footing and a warm brick base.
box(15, 15, 0, 33, 33, 1, concrete);
box(16, 17, 2, 32, 33, 8, "#b76550");
box(17, 18, 2, 31, 32, 39, dark);
// Blue curtain walls: alternating panes, with a little variation in the glass.
const glass = ["#5598b8", "#69acc9", "#79bad3", "#4788a9", "#83c1d7"];
function pane(x, y, z, face) {
const lit = (Math.floor(x / 3) + Math.floor(y / 3) + Math.floor(z / 5)) % 3;
const color = glass[(lit + (rand() < 0.12 ? 2 : 0)) % glass.length];
if (face === "front") set(x, 17, z, color);
if (face === "back") set(x, 33, z, color);
if (face === "left") set(16, y, z, color);
if (face === "right") set(32, y, z, color);
}
for (let z = 10; z <= 38; z++) {
if ((z - 10) % 5 === 0) continue; // horizontal floor bands
for (let x = 18; x <= 30; x++) {
if ((x - 17) % 3) {
pane(x, 17, z, "front");
pane(x, 33, z, "back");
}
}
for (let y = 19; y <= 31; y++) {
if ((y - 18) % 3) {
pane(16, y, z, "left");
pane(32, y, z, "right");
}
}
}
// Crisp floor lines and projecting silver vertical fins.
for (let z = 10; z <= 39; z += 5) {
box(17, 16, z, 31, 17, z, steel);
box(17, 33, z, 31, 34, z, steel);
box(15, 18, z, 16, 32, z, steel);
box(32, 18, z, 33, 32, z, steel);
box(18, 16, z, 30, 16, z, silver);
}
for (let x = 17; x <= 32; x += 3) {
box(x, 16, 10, x, 16, 39, silver);
box(x, 34, 10, x, 34, 39, "#9aadb5");
}
for (let y = 18; y <= 33; y += 3) {
box(15, y, 10, 15, y, 39, silver);
box(33, y, 10, 33, y, 39, silver);
}
// Tall, transparent street-facing lobby.
box(16, 13, 1, 32, 18, 8, dark);
for (let x = 17; x <= 31; x++) {
for (let z = 2; z <= 7; z++) {
set(x, 12, z, (x + z) % 5 === 0 ? "#8bc8db" : "#6baac3");
}
}
for (let x = 16; x <= 32; x += 3)
box(x, 12, 1, x, 12, 8, silver);
box(16, 12, 5, 32, 12, 5, steel);
// Double entrance doors, handles, and a broad protective canopy.
box(21, 11, 1, 27, 11, 6, dark);
box(22, 10, 2, 23, 10, 5, "#8ac6d5");
box(25, 10, 2, 26, 10, 5, "#8ac6d5");
box(24, 10, 1, 24, 10, 6, silver);
set(23, 9, 3, "#e8c66b");
set(25, 9, 3, "#e8c66b");
box(15, 10, 8, 33, 18, 9, concrete);
box(15, 9, 8, 33, 9, 8, "#e5ba58");
box(16, 9, 7, 19, 9, 7, "#263c50");
box(29, 9, 7, 32, 9, 7, "#263c50");
box(20, 9, 7, 28, 9, 7, "#459caa");
box(20, 8, 0, 28, 10, 0, "#aaaeb0");
// Brick planters and dark green ironwork give the street edge some warmth.
for (const x of [13, 34]) {
box(x, 13, 0, x + 1, 16, 2, "#ad5b49");
box(x, 13, 3, x + 1, 16, 3, "#346c58");
box(x, 14, 4, x + 1, 15, 5, "#478964");
}
box(16, 15, 1, 19, 15, 3, "#345e53");
box(29, 15, 1, 32, 15, 3, "#345e53");
// Stepped crown, roof terrace, and raised helipad.
box(17, 18, 40, 31, 32, 40, concrete);
box(18, 19, 41, 30, 31, 41, "#aebcc1");
box(19, 20, 42, 29, 30, 42, steel);
box(20, 21, 43, 28, 29, 43, "#344f61");
// High-contrast H, readable from above.
box(22, 23, 44, 22, 27, 44, "#f4eee2");
box(26, 23, 44, 26, 27, 44, "#f4eee2");
box(23, 25, 44, 25, 25, 44, "#f4eee2");
// Short roof railings and an offset red obstruction beacon.
box(17, 18, 41, 17, 32, 41, silver);
box(31, 18, 41, 31, 32, 41, silver);
box(18, 32, 41, 30, 32, 41, silver);
box(30, 29, 43, 30, 29, 46, "#a5b6bc");
set(30, 29, 47, "#ff3838");
set(29, 29, 47, "#e53c40");import { draw } from "./assets/voxel";
import { rascacielos } from "./assets/rascacielos";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, rascacielos, 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 rascacielos
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["rascacielos"] })
# It lands in client/assets/rascacielos.ts
# https://fogon.page/object/rascacielos