---
phase: 06-client-rebuild-mvp-gate-cli-08-hard-milestone
plan: 14
type: doc-only-asset-manifest
status: complete
---

[doc->REQ-AST-01] [doc->REQ-CLI-07]

# 06-14 Asset Manifest

Auditable record of every sprite bootstrapped by Task 1, plus the synthetic 20×20 MVP room parameters established by Task 2. This document is the authoritative reference for Task 3 (client renderer wiring) and future Phase 7 PAR-03 scope.

---

## Bootstrapped Sprites

### Player Navi Sprites (16 total — D-27)

| Sprite ID | Direction | Animation | Dimensions (W×H) | Frames |
|-----------|-----------|-----------|-------------------|--------|
| 0000-NaviStandD | Down | Stand (idle) | 36 × 48 | 1 |
| 0027-NaviRunD | Down | Run (walk) | 36 × 48 | 2 |
| 0028-NaviRunR | Right | Run (walk) | 36 × 48 | 2 |
| 0029-NaviStandR | Right | Stand (idle) | 36 × 48 | 1 |
| 0030-NaviStandU | Up | Stand (idle) | 36 × 48 | 1 |
| 0031-NaviRunU | Up | Run (walk) | 36 × 48 | 2 |
| 0032-NaviRunL | Left | Run (walk) | 36 × 48 | 2 |
| 0033-NaviStandL | Left | Stand (idle) | 36 × 48 | 1 |
| 0036-NaviStandDR | Down-Right | Stand (idle) | 36 × 48 | 1 |
| 0037-NaviRunDR | Down-Right | Run (walk) | 36 × 48 | 2 |
| 0038-NaviStandUR | Up-Right | Stand (idle) | 36 × 48 | 1 |
| 0039-NaviRunUR | Up-Right | Run (walk) | 36 × 48 | 2 |
| 0040-NaviStandUL | Up-Left | Stand (idle) | 36 × 48 | 1 |
| 0041-NaviRunUL | Up-Left | Run (walk) | 36 × 48 | 2 |
| 0042-NaviStandDL | Down-Left | Stand (idle) | 36 × 48 | 1 |
| 0043-NaviRunDL | Down-Left | Run (walk) | 36 × 48 | 2 |

Notes:
- Dimensions derived from `extracted/client-5-8/sprites/<id>/meta.json` `width`/`height` fields (LOCKED field names per 06-14-SCHEMA-DISCOVERY.md).
- Frame count derived by counting `frames/img_*.bmp` files — `meta.json` has no `frame_count` field.
- 8-direction animation selection wiring deferred to plan 06-16. This plan wires only `0000-NaviStandD_0` as the default frame.

### World / Floor Sprites (1 total — D-28)

| Sprite ID | Purpose | Dimensions (W×H) | Frames |
|-----------|---------|-------------------|--------|
| 0023-Tile1 | Floor tile (44×40 px — D-28 locked) | 44 × 40 | 1 |

### Wall Sprites — NOT bootstrapped (WARNING 4 resolution)

No extracted 44×40 wall sprite exists. The three candidates are thin edge trims:

| Sprite ID | Actual Dimensions | Why excluded |
|-----------|-------------------|--------------|
| 0024-TSide1 | 44 × 4 px | Too thin — top-edge trim only |
| 0025-VBorder | 1 × 40 px | Single-pixel-wide vertical edge |
| 0026-HBorder | 44 × 1 px | Single-pixel-tall horizontal edge |

**Wall rendering decision (LOCKED):** The 1-tile wall border is rendered by `apps/client/src/assets/room-renderer.ts` via a Phaser `scene.add.rectangle(...)` primitive using color `#2C3E50` (dark slate). No wall sprite is in the atlas. Faithful wall art defers to Phase 7 PAR-03 alongside BNCentral conversion.

### Atlas Summary

Atlas key: `mvp` (packed into `atlas-mvp.png` + `atlas-mvp.json`)

Total sprites: **17** (16 Navi + 1 floor tile)

Output locations:
- Source sprites: `assets/source/sprites/<id>.{png,json}` (committed)
- Packed atlas: `tools/asset-pipeline/output/atlas-mvp.{png,json}` (build artifact, served from `apps/server/public/` at deploy)
- Pipeline manifest: `tools/asset-pipeline/output/pipeline-manifest.json`

---

## Synthetic MVP Room — 20×20 Parameters

### World Dimensions

| Parameter | Value | Source |
|-----------|-------|--------|
| Tile width | 44 px | `extracted/client-5-8/sprites/0023-Tile1/meta.json` `width` (D-28 locked) |
| Tile height | 40 px | Same — `height` field |
| Grid width | 20 tiles | D-29 synthetic room spec |
| Grid height | 20 tiles | D-29 synthetic room spec |
| World width | 880 px | 20 × 44 |
| World height | 800 px | 20 × 40 |

### Camera / Viewport Parameters (D-29)

Sourced from `extracted/client-5-8/rooms/0058-BNCentral/meta.json` `views[0]`:

| Parameter | Value | Field name |
|-----------|-------|------------|
| Viewport width | 640 px | `viewW` |
| Viewport height | 480 px | `viewH` |
| Horizontal border | 304 px | `hBorder` |
| Vertical border | 224 px | `vBorder` |
| Object following | 0 (local player) | `objectFollowing` |

Phaser camera deadzone = `(viewW - 2 × hBorder, viewH - 2 × vBorder)` = `(640 - 608, 480 - 448)` = `(32, 32)` — narrow deadzone causes frequent panning as player approaches room edge.

### Home Portal Spawn Point

| Parameter | Value | Derivation |
|-----------|-------|------------|
| `name` | `home_portal` | New extended SRV-13 schema (Plan 06-14) |
| `x` | 440 px | `(20 / 2) × 44` = room center X |
| `y` | 400 px | `(20 / 2) × 40` = room center Y |

### Interior Tile Coverage

- Wall border: 1 tile thick on all 4 edges (rendered via Phaser primitive, not sprites)
- Interior: 18 × 18 = **324 tiles** (x ∈ [1..18], y ∈ [1..18] in tile coords)
- Each tile: `tileset_sprite_id: "0023-Tile1"`, `frame: 0`
- JSON output: canonically sorted keys (deterministic byte sequence, Phase 1 D-15)

### Room Layout File

| File | Path |
|------|------|
| Layout JSON | `apps/server/rooms/mvp-room/000.json` |
| Ed25519 signature | `apps/server/rooms/mvp-room/000.sig` |

### Background

Color: `#000000` (black — matches `bgColor: 0` from BNCentral `meta.json`)

### Wall Border

Color: `#2C3E50` (dark slate — high contrast against black background and floor tile)

---

## Deferred to Phase 7 PAR-03

- BNCentral conversion (0058-BNCentral) and the other 14 extracted rooms
- Faithful wall art (wall sprites are thin trims, not full-tile)
- Audio (AST-02)
- Fonts (AST-03)
- 8-direction Navi animation selection (06-16)
- Nametag rendering (06-16)
