Skip to content

Greybox layout ​

The greybox is the mall made of plain boxes. We use it to tune movement, the camera and navigation before any art exists (roadmap Phase 1). It's generated by pnpm greybox from tools/greybox/layout.ts, which writes:

FileWhat
client/public/assets/mall/greybox.glbVisual model: one mesh per material (~14 draw calls)
client/public/assets/mall/greybox.collision.glbCollision triangles for the player and camera (≤ 5k tris)
client/public/assets/mall/mall.meta.jsonSlots, seats, spawns, zones, escalators (schema)

The Blender mall (Phase 2) replaces these files with the same names and formats. Nothing in the client changes.

Conventions ​

  • Metres, Y up. The entrance is at z = 0 and the mall runs along −Z.
  • Yaw is in radians around +Y. yaw = 0 faces −Z (into the mall) and yaw = π/2 faces −X. Forward is (−sin yaw, 0, −cos yaw), the same as a Three.js object's default facing.
  • West (−X) is on your left as you walk in. East (+X) is on your right.

Plan (ground floor, seen from above) ​

 z=−64 ┌──────────────────────────────── north wall ────────────────────────────┐
       │                    FLAGSHIP  (stage with 3 steps at the back)          │
 z=−54 ├───────────┬────────────┬── doorway 10 m ──┬────────────┬───────────────┤
       │ (closed)  │            │    fountain      │            │   (closed)    │
 z=−52 ├───────────┤            │                  │            ├───────────────┤
       │   w5      │            │  esc B ↑ (to −32)│            │      e5       │
       │   w4      │  concourse │                  │            │      e4       │
       │   w3      │   12 m     │ (under the bridge│            │      e3       │
       │   w2      │   wide     │   −25 … −32)     │            │      e2       │
       │   w1      │            │  esc A ↑ (to −25)│            │      e1       │
       │   w0      │            │                  │            │      e0       │
 z=−4  ├───────────┤            │                  │            ├───────────────┤
       │ (closed)  │  planter   │   spawn ↑        │            │   (closed)    │
 z=0   └───────────┴────────────┴── glass doors ───┴────────────┴───────────────┘
      x=−16      x=−6         x=−3               x=3          x=6            x=16
ThingWhereSize
Shop unitsw0–w5 at x ∈ [−16, −6], e0–e5 at x ∈ [6, 16]; unit i spans z ∈ [−4 − 8i − 8, −4 − 8i]10 × 8 m, doorway 6 × 4 m
Upper floory = 7.6. Same units, prefixed u-walls 6 m high
Atrium openingupper floor, x ∈ [−3, 3], z ∈ [−52, −8]railings 1.1 m
Sky bridgeupper floor, x ∈ [−3, 3], z ∈ [−32, −25]
Escalator Ax = −2, rises from z = −12 (ground) to −25 (bridge)1.2 m wide, ~30°, 1.2 m/s
Escalator Bx = 2, rises from z = −45 (ground) to −32 (bridge)1.2 m wide, ~32°, 1.2 m/s
Flagshipz ∈ [−64, −54], stage 0.6 m high reached by 0.2 m stepsdoorway 10 × 4.5 m
Benchesground x = ±4.6 at z −8, −20, −36, −48; upper x = ±4.5 at z −16, −400.45 m high (you can't step onto them; jump)
Spawn(0, 0, −5.5), facing into the mall
Planters(−3, −4.5) by the entrance, (−2, −38)2 × 2 × 0.6 m

Zones ​

Entrance, Main hall, Fountain court, Upper gallery, Sky court, Sky bridge, and one per shop unit (priority 10). The client shows the name of the highest-priority zone containing the player. Shop zones take their name from mall.config.ts.

Movement tests built into the layout ​

  • Step-up: flagship steps (0.2 m) must be walkable. Benches (0.45 m) must block.
  • Slopes: escalator surfaces (~30–32°) must be walkable even when they aren't moving.
  • Ceilings: walking under the sky bridge and jumping under the upper slab.
  • Tight spots: 1.8 m gap between escalator B and the fountain. 1.8 m between the entrance planter and escalator A's side.

MIT licensed code. Assets CC BY 4.0 unless noted.