← City3D assetfogon/cabina-telefonica
Cabina telefónica
Drag to turn it// «Cabina telefónica» · gpt-6-sol (medium)
// A street phone booth: a tall narrow booth with a blue metal frame and glass panels on three sides, a small rounded roof with a white sign showing a phone handset, and inside a grey coin phone with a hanging handset and a short cord. Open front facing -y.
// Blue street phone booth, open toward -y.
const blue = "#176aab";
const blueLight = "#3189c5";
const blueDark = "#124b80";
const steel = "#82919a";
const steelLight = "#bac5c8";
const charcoal = "#303e48";
// Raised floor and threshold.
box(15, 14, 0, 32, 32, 1, blueDark);
box(17, 16, 1, 30, 30, 1, "#c9ccbf");
box(18, 16, 2, 29, 29, 2, "#e2dfce");
box(17, 14, 1, 30, 15, 2, "#e8ca66");
box(17, 14, 2, 30, 14, 2, blueDark);
// Three glazed sides. The front stays completely open.
for (let y = 18; y <= 29; y++) {
for (let z = 6; z <= 28; z++) {
const glint = (y === 21 || y === 22) && z > 10 && z < 27;
const shade = glint ? "#d8f1ed" :
rand() < 0.09 ? "#a5d7dd" : "#b9e3e5";
set(15, y, z, shade);
set(32, y, z, glint ? "#d2eeeb" : "#a9d6dc");
}
}
for (let x = 18; x <= 29; x++) {
for (let z = 6; z <= 28; z++) {
set(x, 32, z, x === 20 || x === 21 ? "#d8eeea" : "#acd7da");
}
}
// Chunky blue corner posts and the crisp framing around each pane.
for (const x of [15, 31]) {
for (const y of [14, 30]) box(x, y, 2, x + 1, y + 2, 32, blue);
}
for (const x of [15, 32]) {
for (const z of [5, 17, 29]) box(x, 17, z, x, 30, z + 1, blueLight);
for (const y of [17, 30]) box(x, y, 5, x, y, 30, blueDark);
}
for (const z of [5, 17, 29]) box(17, 32, z, 30, 32, z + 1, blueLight);
box(17, 32, 5, 17, 32, 30, blueDark);
box(30, 32, 5, 30, 32, 30, blueDark);
box(17, 14, 29, 30, 16, 30, blue);
box(18, 14, 29, 29, 14, 29, blueLight);
// Grey wall-mounted coin phone, facing the open doorway.
box(21, 28, 12, 28, 30, 25, "#697b86");
box(22, 27, 14, 27, 27, 24, steel);
box(22, 27, 24, 27, 27, 25, steelLight);
box(23, 26, 20, 26, 26, 22, "#344a59"); // display
box(24, 25, 21, 25, 25, 21, "#b7dcca");
box(26, 26, 23, 26, 26, 23, "#e9c866"); // coin slot
for (let z = 16; z <= 19; z++) {
for (let x = 23; x <= 26; x++) {
set(x, 26, z, (x + z) % 2 ? "#e2e8e3" : "#4e6673");
}
}
box(23, 26, 14, 26, 26, 14, "#354957");
// Hanging handset on the phone's left; the little cord loops below it.
box(18, 26, 16, 20, 27, 18, charcoal);
box(19, 26, 18, 19, 27, 22, charcoal);
box(18, 26, 22, 20, 27, 24, charcoal);
box(18, 25, 23, 20, 25, 24, "#637982");
box(18, 25, 16, 20, 25, 17, "#637982");
line(20, 26, 16, 20, 26, 12, 0, charcoal);
line(20, 26, 12, 21, 26, 11, 0, charcoal);
line(21, 26, 11, 23, 26, 11, 0, charcoal);
line(23, 26, 11, 24, 27, 13, 0, charcoal);
// Sign band and gently rounded, overhanging roof.
box(14, 13, 30, 33, 33, 33, blue);
box(15, 14, 34, 32, 32, 36, blueLight);
box(16, 15, 37, 31, 31, 38, blue);
box(18, 17, 39, 29, 29, 39, blueLight);
box(15, 13, 34, 32, 13, 34, "#f4ce69");
// White front sign with a bold, pixel-shaped blue phone handset.
box(17, 12, 31, 30, 12, 35, "#f6f4e7");
box(16, 12, 31, 16, 12, 35, blueDark);
box(31, 12, 31, 31, 12, 35, blueDark);
set(19, 12, 32, "#df886a");
set(28, 12, 32, "#df886a");
for (const [x, z] of [
[21, 34], [22, 34], [21, 33], [22, 32],
[23, 32], [24, 32], [25, 33], [26, 34], [27, 34]
]) set(x, 11, z, blueDark);
box(21, 11, 33, 21, 11, 34, blueDark);
box(27, 11, 33, 27, 11, 34, blueDark);
// Fine golden fileteado-inspired accents at the canopy corners.
for (const x of [14, 33]) {
set(x, 13, 32, "#e7b950");
set(x, 13, 34, "#e7b950");
}import { draw } from "./assets/voxel";
import { cabinaTelefonica } from "./assets/cabina-telefonica";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, cabinaTelefonica, 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 cabina-telefonica
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["cabina-telefonica"] })
# It lands in client/assets/cabina-telefonica.ts
# https://fogon.page/object/cabina-telefonica