← City3D assetfogon/pizzeria
Pizzería
Drag to turn it// «Pizzería» · gpt-6-sol (medium)
// A classic Buenos Aires pizzeria: a one-story corner shop with a red and white facade, a big window (-y) showing a counter with whole pizzas on trays, a brick oven visible inside with a little orange glow, a sign on top with a big pizza slice and the word PIZZERIA, and a small table with two chairs on the sidewalk.
// Pavement and a strip of road
box(3, 0, 0, 45, 3, 0, "#62666b");
box(3, 4, 0, 45, 13, 0, "#c9c6ba");
box(3, 14, 0, 8, 40, 0, "#c9c6ba");
for (let x = 4; x <= 44; x += 6) {
box(x, 1, 0, x + 2, 1, 0, "#e9bd45");
}
for (let x = 4; x <= 44; x += 5) {
line(x, 4, 0, x, 13, 0, 0, "#aaa9a0");
}
for (let y = 5; y <= 38; y += 5) {
line(3, y, 0, 8, y, 0, 0, "#aaa9a0");
}
// Shop floor and solid brick walls
box(9, 14, 0, 43, 41, 2, "#e4d5b8");
for (let x = 10; x <= 42; x += 4) {
for (let y = 16; y <= 39; y += 4) {
box(x, y, 3, x + 1, y + 1, 3, "#cfbea6");
}
}
box(9, 14, 3, 11, 41, 26, "#b94c3e");
box(41, 14, 3, 43, 41, 26, "#ad4639");
box(9, 39, 3, 43, 41, 26, "#b65343");
for (let z = 5; z <= 25; z += 3) {
for (let y = 17; y <= 39; y += 5) {
set(9, y + ((z / 3) % 2 | 0), z, "#d47860");
set(43, y, z, "#d47860");
}
}
box(10, 14, 25, 43, 41, 27, "#e9e1cc");
box(12, 17, 25, 31, 37, 27, null); // Open roof shows the pizzas and oven
box(10, 14, 27, 43, 16, 28, "#b43834");
box(10, 38, 27, 43, 41, 28, "#bbafa0");
box(9, 14, 28, 43, 41, 28, "#fbf2de");
box(12, 17, 28, 31, 37, 28, null);
// Red-and-white storefront, with a large unobstructed display window
box(9, 13, 3, 43, 15, 6, "#bd3834");
box(9, 13, 23, 43, 15, 27, "#f3ead9");
box(9, 13, 7, 11, 15, 22, "#f2e7d3");
box(31, 13, 7, 33, 15, 22, "#f2e7d3");
box(41, 13, 7, 43, 15, 22, "#f2e7d3");
box(11, 13, 7, 31, 13, 8, "#365d57");
box(11, 13, 21, 31, 13, 22, "#365d57");
box(11, 13, 9, 11, 13, 20, "#365d57");
box(31, 13, 9, 31, 13, 20, "#365d57");
box(21, 13, 9, 21, 13, 20, "#365d57");
box(12, 13, 20, 16, 13, 20, "#a9d9d2");
box(23, 13, 19, 26, 13, 19, "#a9d9d2");
box(9, 12, 5, 43, 13, 6, "#e6c29d");
box(9, 12, 24, 43, 13, 25, "#b73532");
// Door, glass upper panel, and brass handle
box(34, 13, 3, 40, 14, 21, "#30554b");
box(35, 12, 4, 39, 12, 10, "#af5942");
box(35, 12, 12, 39, 12, 20, "#466c6b");
box(36, 11, 17, 38, 11, 19, "#83b2a9");
set(39, 11, 11, "#f8c75c");
box(33, 12, 21, 41, 13, 22, "#e9dbc1");
box(34, 12, 3, 40, 12, 3, "#d3aa68");
// Side-facing corner window
box(8, 22, 8, 8, 34, 19, "#315a58");
box(8, 23, 9, 8, 33, 18, "#80a7a0");
box(7, 22, 8, 8, 34, 8, "#eee4cc");
box(8, 28, 9, 8, 28, 18, "#315a58");
box(8, 24, 17, 8, 26, 17, "#b4d4c5");
// Interior counter and three whole pizzas
box(12, 20, 4, 32, 24, 7, "#a74c3d");
box(12, 19, 7, 32, 25, 8, "#f1dec0");
box(12, 19, 8, 32, 19, 9, "#fff0d2");
for (let i = 0; i < 3; i++) {
const x = 16 + i * 7;
cylinder(x, 21, 9, 3, 1, "#89918b");
cylinder(x, 21, 10, 2.5, 1, "#d49243");
cylinder(x, 21, 11, 2, 1, "#f5ca5d");
set(x - 1, 20, 12, "#d84b36");
set(x + 1, 21, 12, "#cc4432");
set(x, 22, 12, "#d84b36");
set(x + 1, 20, 12, "#4d8845");
}
box(13, 19, 5, 31, 19, 5, "#df7862");
// Brick oven at the back: dark arched mouth and warm fire
ellipsoid(22, 33, 11, 10, 7, 10, "#b75b45");
ellipsoid(22, 33, 15, 8, 6, 5, "#d7805a");
box(17, 28, 4, 28, 34, 7, "#9d493d");
box(18, 27, 7, 27, 30, 14, "#342e2b");
box(19, 27, 15, 26, 28, 16, "#e29a66");
box(17, 27, 7, 18, 28, 14, "#db805b");
box(27, 27, 7, 28, 28, 14, "#db805b");
box(20, 27, 7, 25, 29, 8, "#ef862f");
box(21, 27, 8, 24, 28, 10, "#ffd061");
set(22, 26, 11, "#ffeb91");
for (let z = 9; z <= 19; z += 3) {
for (let x = 15; x <= 29; x += 4) {
set(x + ((z / 3) % 2 | 0), 29, z, "#e79772");
}
}
box(18, 27, 5, 27, 27, 6, "#e9b47b");
// Bold rooftop sign
box(9, 11, 28, 44, 15, 37, "#f4e6cc");
box(10, 10, 29, 43, 11, 36, "#b93232");
box(11, 9, 30, 42, 9, 35, "#cf4540");
box(10, 9, 28, 43, 10, 29, "#f5d190");
box(10, 9, 36, 43, 10, 37, "#f5d190");
for (let x = 11; x <= 42; x += 5) {
set(x, 8, 28, "#f9e7a1");
set(x, 8, 37, "#f9e7a1");
}
// Chunky 3×5 lettering: PIZZERIA
const glyphs = {
P: ["111", "101", "111", "100", "100"],
I: ["111", "010", "010", "010", "111"],
Z: ["111", "001", "010", "100", "111"],
E: ["111", "100", "110", "100", "111"],
R: ["110", "101", "110", "101", "101"],
A: ["010", "101", "111", "101", "101"]
};
const word = "PIZZERIA";
for (let i = 0; i < word.length; i++) {
const rows = glyphs[word[i]];
for (let row = 0; row < 5; row++) {
for (let col = 0; col < 3; col++) {
if (rows[row][col] === "1") {
set(12 + i * 4 + col, 8, 35 - row, "#fff1c7");
}
}
}
}
// Oversized pizza-slice silhouette rising above the sign
for (let z = 38; z <= 43; z++) {
const half = z - 37;
box(18 - half, 12, z, 18 + half, 14, z, "#edb45b");
}
box(11, 11, 44, 25, 15, 45, "#bd7041");
box(12, 10, 44, 24, 10, 45, "#e4a568");
for (const [x, z] of [[17, 41], [20, 42], [14, 43], [22, 43]]) {
box(x, 10, z, x + 1, 10, z, "#ce4940");
}
set(18, 10, 43, "#66a05a");
set(20, 10, 44, "#66a05a");
// Café table and two dark-green iron chairs on the sidewalk
box(17, 7, 1, 18, 8, 5, "#315b47");
cylinder(17.5, 7.5, 6, 3, 1, "#376b50");
cylinder(17.5, 7.5, 7, 2, 1, "#e9dfc0");
set(17, 7, 8, "#f6f0d7");
for (const x of [11, 24]) {
for (const dx of [-1, 1]) {
for (const dy of [-1, 1]) {
box(x + dx, 7 + dy, 1, x + dx, 7 + dy, 3, "#294a3d");
}
}
box(x - 2, 5, 4, x + 2, 9, 4, "#397259");
box(x - 2, 9, 5, x + 2, 9, 9, "#315f4c");
box(x - 2, 9, 9, x + 2, 9, 9, "#68a074");
}
// A small striped awning over the entrance
for (let x = 33; x <= 41; x += 2) {
box(x, 10, 23, x + 1, 13, 23, "#f7e7cb");
box(x, 10, 24, x + 1, 13, 24, "#c74239");
}
box(33, 10, 22, 41, 10, 22, "#8e3433");import { draw } from "./assets/voxel";
import { pizzeria } from "./assets/pizzeria";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, pizzeria, 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 pizzeria
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["pizzeria"] })
# It lands in client/assets/pizzeria.ts
# https://fogon.page/object/pizzeria