Asset Types
Grids supports multiple asset types that can be uploaded to the marketplace, acquired by players, and used in the game world.
Supported Types
| Type | Extensions | Description |
|---|---|---|
| Texture | .png, .jpg, .jpeg, .webp, .tga | 2D images used for block faces, decals, and materials |
| Audio | .wav, .ogg, .mp3, .flac | Sound effects, music, ambient audio |
| Video | .mp4, .webm | Video textures for display blocks and cinematics |
| Model | .gltf, .glb, .fbx, .obj | 3D models imported as static meshes |
| Script | .lua | Gameplay scripts for custom block behavior |
Asset Lifecycle
1. Upload
Creators upload assets through the web marketplace or via the API. Each upload includes:
- The asset file
- Display name and description
- Optional thumbnail image
- Asset type classification
2. Marketplace
Published assets appear in the marketplace where other players can browse, search, and acquire them. Assets are stored in Cloudflare R2.
3. Library
When a player acquires an asset, it's added to their personal library. The library is synced to the game client via the API.
4. In-Game Usage
In the game, pressing Tab opens the Asset Browser overlay which displays the player's library. Clicking an asset spawns it in the world (e.g., applying a texture to a block, placing a model, attaching a sound).
Texturing Blocks
Texture assets can be applied to placed blocks per face. Blocks are built from one procedural mesh section per face, so each face can carry its own texture, color tint, and material effect independently.
Suggested effect
When uploading a texture, creators can pick a suggested effect — a default material look that the in-game build editor applies the first time a player uses the texture:
| Effect | Look |
|---|---|
| None | Flat, default-lit |
| Glow | Subtle emissive |
| Neon | Bright emissive |
| Metal | Metallic, glossy |
| Matte | Fully rough |
The suggested effect is stored in the asset's metadata as { "suggested_effect": "neon" }. It is only a starting point — players can change the effect, tint, and target face in-game from the Edit Object panel.
Editing placed blocks
Right-clicking a placed block (while Alt is held) opens a context menu with an Edit action that opens the per-face editor. See Editing Placed Objects for the full flow. Face overrides are persisted server-side in the zone_block_faces table and restored on zone-server startup.
Thumbnails
Each asset can have a thumbnail image for display in the marketplace and asset browser. If no thumbnail is provided, a placeholder icon is shown based on the asset type:
| Type | Placeholder |
|---|---|
| Texture | 🖼️ |
| Audio | 🔊 |
| Video | 🎬 |
| Model | 🧊 |
| Script | 📜 |
Asset Protection
Assets are protected during delivery using:
- HMAC-Signed URLs — Download URLs expire after a configured TTL and are signed with HMAC-SHA256
- XOR Scrambling — Asset data is XOR-scrambled during transfer to prevent casual interception
- Sandboxed Rendering — Overlay scripts run in CEF's sandboxed environment without direct filesystem access