← Antiguo y prehistoriaObjeto 3Dfogon/templo-egipcio
Templo egipcio
Arrastrá para girarlo// «Templo egipcio» · gpt-6-sol (medium)
// An Egyptian temple front: two massive sloping pylon towers of sandstone on either side of a tall doorway, with painted reliefs in blue, red and gold, and a row of thick lotus-topped columns in front. Two small seated statues guard the entrance on the front (-y).
const sand = "#d9aa62";
const light = "#edc681";
const shade = "#bd8749";
const deep = "#98683e";
const gold = "#f6cb43";
const goldDark = "#bb842b";
const turquoise = "#32b9b2";
const blue = "#245e9d";
const lapis = "#193b73";
const red = "#bd5140";
const front = z => 16 + Math.floor(z / 12);
const face = (x, z, color) => set(x, front(z) - 1, z, color);
// Stone platform and the shallow stair leading to the doorway.
box(2, 14, 0, 45, 37, 1, shade);
box(2, 14, 2, 45, 35, 2, sand);
box(17, 4, 0, 30, 16, 0, light);
box(18, 7, 1, 29, 16, 1, sand);
box(19, 11, 2, 28, 17, 2, light);
for (let y = 5; y <= 13; y += 4)
box(18, y, y === 5 ? 0 : y === 9 ? 1 : 2,
29, y, y === 5 ? 0 : y === 9 ? 1 : 2, goldDark);
// The two battered, solid pylon towers.
for (let z = 3; z <= 35; z++) {
const inset = Math.floor(z / 10);
const inner = Math.floor(z / 19);
const yf = front(z);
const yb = 35 - Math.floor(z / 20);
const spans = [
[3 + inset, 19 - inner],
[28 + inner, 44 - inset]
];
for (const [a, b] of spans) {
box(a, yf, z, b, yb, z, z % 9 === 0 ? light : sand);
for (let x = a; x <= b; x++) {
const grain = rand();
if (grain < 0.085) set(x, yf, z, light);
else if (grain < 0.16) set(x, yf, z, shade);
}
if (rand() < 0.35) set(a, yf + 3, z, shade);
}
}
// High projecting cornices, with a bright gold edge.
for (const [a, b] of [[6, 18], [29, 41]]) {
box(a, 18, 36, b, 35, 36, light);
box(a, 18, 37, b, 35, 37, goldDark);
box(a + 1, 18, 38, b - 1, 34, 38, gold);
box(a, 17, 35, b, 17, 35, turquoise);
}
// Horizontal painted courses across each tower.
for (const z of [5, 30, 33]) {
for (const [a, b] of [[5, 18], [29, 42]]) {
for (let x = a; x <= b; x++)
face(x, z, z === 30 ? turquoise : goldDark);
}
}
// Framed painted relief panels on the tower fronts.
for (const cx of [11, 36]) {
for (let z = 8; z <= 25; z++) {
face(cx - 5, z, goldDark);
face(cx + 5, z, goldDark);
face(cx - 4, z, turquoise);
face(cx + 4, z, turquoise);
}
for (let x = cx - 5; x <= cx + 5; x++) {
face(x, 8, goldDark);
face(x, 25, goldDark);
}
// Large, simple cartouche: a blue field around a golden figure.
for (let z = 12; z <= 22; z++)
for (let x = cx - 2; x <= cx + 2; x++)
face(x, z, blue);
for (let z = 12; z <= 22; z++) {
face(cx - 3, z, gold);
face(cx + 3, z, gold);
}
for (let x = cx - 2; x <= cx + 2; x++) {
face(x, 11, gold);
face(x, 23, gold);
}
face(cx, 20, gold);
face(cx - 1, 19, gold);
face(cx, 19, gold);
face(cx + 1, 19, gold);
face(cx, 18, red);
face(cx, 17, gold);
face(cx, 16, gold);
face(cx - 1, 15, gold);
face(cx + 1, 15, gold);
face(cx - 1, 13, gold);
face(cx + 1, 13, gold);
// Sun disk and outspread red-and-gold wings above the relief.
for (let dx = -2; dx <= 2; dx++)
face(cx + dx, 28, Math.abs(dx) < 2 ? gold : goldDark);
face(cx, 27, gold);
face(cx, 29, gold);
for (let dx = 3; dx <= 6; dx++)
face(cx + dx, 28 - (dx > 4 ? 1 : 0), dx % 2 ? red : gold);
for (let dx = -6; dx <= -3; dx++)
face(cx + dx, 28 - (dx < -4 ? 1 : 0), dx % 2 ? red : gold);
}
// Recessed, tall entrance and its painted jambs.
box(20, 17, 3, 27, 31, 26, deep);
box(21, 16, 3, 26, 30, 25, lapis);
box(21, 29, 3, 26, 30, 25, "#102947");
box(20, 15, 3, 20, 17, 26, goldDark);
box(27, 15, 3, 27, 17, 26, goldDark);
box(21, 15, 3, 21, 15, 25, turquoise);
box(26, 15, 3, 26, 15, 25, turquoise);
box(19, 15, 26, 28, 20, 29, sand);
box(19, 14, 26, 28, 14, 26, goldDark);
box(19, 14, 29, 28, 14, 29, gold);
box(21, 14, 27, 26, 14, 27, blue);
for (let x = 22; x <= 25; x++)
set(x, 13, 28, x % 2 ? gold : red);
// Four chunky columns, each crowned with a turquoise lotus.
for (const cx of [9, 16, 32, 39]) {
const cy = 10;
box(cx - 3, cy - 3, 2, cx + 3, cy + 3, 3, shade);
box(cx - 2, cy - 2, 4, cx + 2, cy + 2, 5, light);
cylinder(cx, cy, 6, 2, 13, sand);
for (const [dx, dy] of [[-2, 0], [2, 0], [0, -2], [0, 2]])
line(cx + dx, cy + dy, 6, cx + dx, cy + dy, 18, 0, shade);
cylinder(cx, cy, 18, 3, 2, goldDark);
cylinder(cx, cy, 20, 3, 3, turquoise);
cylinder(cx, cy, 23, 2, 2, gold);
for (const [dx, dy] of [[-3, 0], [3, 0], [0, -3], [0, 3]]) {
set(cx + dx, cy + dy, 21, blue);
set(cx + dx, cy + dy, 22, turquoise);
}
set(cx, cy - 3, 21, light);
}
// Two small seated guardian statues beside the entrance.
for (const cx of [20, 28]) {
const cy = 8;
box(cx - 2, cy - 2, 2, cx + 2, cy + 2, 3, goldDark);
box(cx - 1, cy - 2, 4, cx + 1, cy + 1, 5, shade); // knees
box(cx - 1, cy, 5, cx + 1, cy + 1, 9, sand);
box(cx - 2, cy - 1, 6, cx - 2, cy, 8, light);
box(cx + 2, cy - 1, 6, cx + 2, cy, 8, light);
box(cx - 1, cy - 1, 9, cx + 1, cy + 1, 12, light);
box(cx - 2, cy - 1, 12, cx + 2, cy + 1, 13, blue); // headdress
box(cx - 1, cy - 2, 10, cx + 1, cy - 2, 10, gold);
set(cx - 1, cy - 2, 11, lapis);
set(cx + 1, cy - 2, 11, lapis);
set(cx, cy - 2, 9, red);
set(cx, cy - 2, 7, turquoise);
}import { draw } from "./assets/voxel";
import { temploEgipcio } from "./assets/templo-egipcio";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, temploEgipcio, x, y, { size: 64, angle: 0, t: performance.now() / 1000 });
// size: lo que mide en px su lado más largo
// angle: giro sobre el piso, en radianes
// t: segundos; si se mueve, se anima solo con eso# En una terminal, en la carpeta del juego
fogon assets add templo-egipcio
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["templo-egipcio"] })
# Queda en client/assets/templo-egipcio.ts
# https://fogon.page/object/templo-egipcio