Board Layout and Sizing
Expert knowledge of Board display layout, coordinate systems, SVG import settings, and sprite sizing for the 1920×1080 Board hardware.
Display Configuration
Target Display
| Metric | Pixels | World Units (100 PPU) |
|---|---|---|
| Width | 1920 | 19.2 |
| Height | 1080 | 10.8 |
Camera Settings
| Setting | Value |
|---|---|
| Orthographic Size | 5.4 |
| Position | (0, 0, -10) |
| Aspect Ratio | 16:9 |
Calculation: Visible Height = orthoSize × 2 = 10.8 world units
Horizontal Layout (19.2 world units)
| Blue UI | Blue Res | Buffer | 5×5 Grid | Buffer | Red Res | Red UI |
| 2.1 | 2.0 | 0.5 | 10.0 | 0.5 | 2.0 | 2.1 |
Zone Coordinates
| Zone | Left | Right | Center | Width |
|---|---|---|---|---|
| Blue UI | -9.6 | -7.5 | -8.55 | 2.1 |
| Blue Reserve | -7.5 | -5.5 | -6.5 | 2.0 |
| Left Buffer | -5.5 | -5.0 | — | 0.5 |
| Playable Grid | -5.0 | +5.0 | 0.0 | 10.0 |
| Right Buffer | +5.0 | +5.5 | — | 0.5 |
| Red Reserve | +5.5 | +7.5 | +6.5 | 2.0 |
| Red UI | +7.5 | +9.6 | +8.55 | 2.1 |
Reserve Pool Purpose
- Holds drawn tiles before placement (visible to both players)
- Up to 3 tiles per player maximum
- Tiles can be stolen from opponent's reserve
Vertical Layout (10.8 world units)
| Zone | Bottom | Top | Height |
|---|---|---|---|
| Bottom Margin | -5.4 | -5.0 | 0.4 |
| Playable Grid | -5.0 | +5.0 | 10.0 |
| Top Margin | +5.0 | +5.4 | 0.4 |
LayoutConfig Reference
All layout constants centralized in Assets/Scripts/Config/LayoutConfig.cs:
public static class LayoutConfig
{
// Screen dimensions
public const float ScreenWidth = 19.2f;
public const float ScreenHeight = 10.8f;
// Tile and grid
public const float TileSize = 2.0f;
public const int GridSize = 5;
// Grid boundaries
public const float GridLeft = -5.0f;
public const float GridRight = 5.0f;
public const float GridBottom = -5.0f;
public const float GridTop = 5.0f;
// Camera
public const float CameraOrthoSize = 5.4f;
// Reserve zones
public const float BlueReserveCenter = -6.5f;
public const float RedReserveCenter = 6.5f;
}
Grid Positioning
Grid to World Conversion
// Grid (0,0) to (4,4) maps to world coordinates
float x = LayoutConfig.GridLeft + (gridX * LayoutConfig.TileSize) + (LayoutConfig.TileSize / 2f);
float y = LayoutConfig.GridBottom + (gridY * LayoutConfig.TileSize) + (LayoutConfig.TileSize / 2f);
Key Grid Positions
| Grid | World Center | Description |
|---|---|---|
| (0, 0) | (-4, -4) | Bottom-left |
| (2, 2) | (0, 0) | Center (starting tile) |
| (4, 4) | (4, 4) | Top-right |
| (0, 4) | (-4, 4) | Top-left |
| (4, 0) | (4, -4) | Bottom-right |
SVG Import Settings
THE GOLDEN RULE
╔═══════════════════════════════════════════════════════════════╗
║ ║
║ WORLD SIZE = TEXTURE SIZE ÷ PIXELS PER UNIT ║
║ ║
║ ALWAYS use PPU = 100. Adjust Texture Size for world size. ║
║ ║
╚═══════════════════════════════════════════════════════════════╝
Formula: Texture Size = Desired World Size × 100
Standard Settings
| Asset | Desired World Size | Texture Size | PPU |
|---|---|---|---|
| Tiles | 2.0 | 200 | 100 |
| Tokens | 0.4 (20% of tile) | 40 | 100 |
Import Steps
- Select SVG file(s) in Project window
- In Inspector:
- Generated Asset Type: Texture2D
- Texture Size: (calculated value)
- Pixels Per Unit: 100
- Click Apply
Common Mistakes
| Mistake | Consequence | Solution |
|---|---|---|
| Changing PPU | Inconsistent sizing | Always PPU = 100 |
| Default Texture Size (256) | Wrong world size | Calculate: WorldSize × 100 |
| Matching viewBox | Irrelevant to sizing | Set based on desired world size |
Rendering Order
Higher sorting order = renders in front.
| Layer | Sorting Order | Content |
|---|---|---|
| Background | -10 | Solid color (#0D0F14) |
| Tiles | 0 | TileView sprites |
| Grid Glow | 1 | Wide semi-transparent lines |
| Grid Core | 2 | Thin bright lines |
| Reserve Lines | 1 | Zone boundaries |
| Tokens | 10 | TokenView sprites |
Grid Visibility
Grid MUST have higher sorting order than tiles (1-2 vs 0) to appear above them.
Player Orientation
Players sit facing each other:
- Blue player: Views from LEFT side (x < 0)
- Red player: Views from RIGHT side (x > 0)
UI text rotation:
- Blue UI: Normal rotation (readable from left)
- Red UI: Rotated 180° (readable from right)
Edge Node Positions
Each tile has 4 edge nodes at side midpoints:
| Node | Offset from Tile Center |
|---|---|
| Top | (0, +1.0) |
| Right | (+1.0, 0) |
| Bottom | (0, -1.0) |
| Left | (-1.0, 0) |
Token Snapping
NodeSnapDistance = 0.5world units (appropriate for TokenSize = 0.4)- Tokens snap to the nearest edge node within snap distance
EdgeNode and Tile Rotation
EdgeNode values (Top, Right, Bottom, Left) are tile-local coordinates that rotate with the tile:
// Rotate edge node by rotation steps (each step = 90 degrees clockwise)
public static EdgeNode RotateEdge(EdgeNode node, int rotationSteps)
{
return (EdgeNode)(((int)node + rotationSteps) % 4);
}
// Example: A path from Left to Top on an unrotated tile
// After 1 rotation step (90 CW): becomes Bottom to Right
Center Tile Special Case:
- Center tile (game-tile-13) is the ONLY tile that cannot rotate
- Blue Attack starts on Left node, Red Attack starts on Right node
- These starting positions are fixed and hardcoded per game rules
Coordinate System Summary
World Y
↑
| +5.4 (screen top)
| +5.0 (grid top)
|
-9.6 ←─────────────────┼─────────────────→ +9.6 World X
|
| -5.0 (grid bottom)
| -5.4 (screen bottom)
↓
Troubleshooting
Camera not showing full screen
Cause: Wrong orthographic size
Solution: Set Camera → Orthographic Size = 5.4
Tiles too large/small
Cause: Wrong SVG Texture Size
Solution: Texture Size = World Size × 100
- Tiles: 200 (2.0 × 100)
- Tokens: 40 (0.4 × 100)
Grid lines hidden behind tiles
Cause: Sorting order wrong Solution: Grid sorting order (1-2) must be higher than tiles (0)
Sprites not aligning
Cause: Not using LayoutConfig
Solution: Always use LayoutConfig constants for positioning
Why 5×5 Grid?
- Balanced gameplay: Enough space for strategy, small enough for quick games
- Fits display: 10.0 world units fills the 1920×1080 display with room for UI
- Network aesthetic: 5×5 creates interconnected network paths matching cybersecurity theme
Reference Files
This skill's references/ folder contains:
| File | Contains | Read When |
|---|---|---|
coordinate-systems.md |
Grid, World, Screen conversion formulas | Implementing coordinate transforms |
layout-config.md |
All LayoutConfig constants and values | Need exact constant values |
svg-import-settings.md |
PPU=100 rule, Texture Size formula | Importing new SVG assets |
player-zones.md |
Reserve pools, hand areas, stealing | Implementing reserve functionality |
Key Source Files
| File | Purpose |
|---|---|
Assets/Scripts/Config/LayoutConfig.cs |
All layout constants |
Quick Reference
PPU = 100 (ALWAYS)
Texture Size = World Size × 100
NodeSnapDistance = 0.5 world units
Tiles: 2.0 world units → Texture Size = 200
Tokens: 0.4 world units → Texture Size = 40