# 第一章美术 / 音频资源清单（Chapter 1 Asset Manifest）

> 本清单对应 [task-item.md](../../../.codebuddy/plan/kage_legend_mvp/task-item.md) 中的 **10.1 集成像素美术与音频资源**。
> 真正的 PNG / WAV / MP3 二进制文件需由美术、音效组按下表规格制作并放入对应目录。

> **当前状态**：所有条目均已用 1×1 纯色 PNG / 0.1s 静音 WAV / 空 MP3 帧**占位**，可通过 `node scripts/gen_placeholder_assets.js` 随时重新生成。占位资产仅保证工程可打开可联调，**不具有任何视觉/听觉效果**，必须由美术/音效替换为正式素材才能发布。

---

## 1. 主角 · 3 形态（参考 `images/影.png`）

| 资源路径 | 形态 | 尺寸 | 帧数 | 备注 |
|---|---|---|---|---|
| `textures/characters/kage_red.png`    | 红衣（基础） | 16×32 | idle 2 / run 4 / jump 2 / attack 3 | 初始形态，一击即死 |
| `textures/characters/kage_green.png`  | 绿衣（+1 水晶玉） | 16×32 | idle 2 / run 4 / jump 2 / attack 3 | 配色采用青叶主题 |
| `textures/characters/kage_yellow.png` | 黄衣（+2 水晶玉） | 16×32 | idle 2 / run 4 / jump 2 / attack 3 | 移速提升 |

每张 PNG 单独调色板 ≤ 16 色，三形态共用轮廓（便于换色表）。

## 2. 敌人 · 4 种 + 1 BOSS（参考 `images/敌人.png`）

| 资源路径 | 敌人 | 尺寸 | 帧数 | 备注 |
|---|---|---|---|---|
| `textures/enemies/qing_ren.png` | 青忍 | 16×16 | idle 1 / run 2 / throw 2 / swing 2 | 双色主题 |
| `textures/enemies/chi_ren.png`  | 赤忍 | 16×16 | idle 1 / run 2 / throw 2 / jump 2 | 红色忍装 |
| `textures/enemies/hei_ren.png`  | 黑忍 | 20×24 | idle 2 / run 2 / swing 2 | 掉落魔笛 |
| `textures/enemies/yao_fang.png` | 妖坊 | 18×20 | idle 1 / cast 3 | 不动，远程火球 |
| `textures/bosses/shuang_huan_fang.png` | 双幻坊 | 32×32（单体）/ 96×32（双身） | idle 2 / clone 4 / fireball 3 | 蝴蝶伴生对象单独贴图 |
| `textures/bosses/butterfly.png` | BOSS 蝴蝶 | 16×16 | fly 4 | 命中后变色 2 帧 |

## 3. 场景 · 森林 / 城墙 / 魔城（参考 `images/场景.png`）

每个主题 4 层视差，速度比 1:2:4:4，独立调色板 ≤ 48 色（含角色共用 16 色）。

| 主题 | 层 | 资源路径 |
|---|---|---|
| **森林** | 远景 / 中景 / 近景 / 特效 | `textures/scenes/forest/{far,mid,near,fx}.png` |
| **城墙** | 远景 / 中景 / 近景 / 特效 | `textures/scenes/castle_wall/{far,mid,near,fx}.png` |
| **魔城** | 远景 / 中景 / 近景 / 特效 | `textures/scenes/demon_castle/{far,mid,near,fx}.png` |

MVP 仅启用青叶配色；红叶 / 雪原调色板预留接口但不纳入 MVP。

## 4. 剧情背景插画（req 19.2）

| 资源路径 | 内容 | 尺寸 |
|---|---|---|
| `textures/story/ch1_page1_ninja.png` | 主角忍者身份 | 480×270 |
| `textures/story/ch1_page2_princess.png` | 公主被青忍掳走 | 480×270 |
| `textures/story/ch1_page3_depart.png` | 主角启程 | 480×270 |

## 5. 音效 WAV（每段 ≤ 0.5 秒）

| 资源路径 | 触发 | 需求 |
|---|---|---|
| `audio/sfx/attack.wav`  | 任意攻击 | req 16.1 |
| `audio/sfx/jump.wav`    | 跳跃 | req 16.1 |
| `audio/sfx/hurt.wav`    | 受伤 / 死亡 | req 16.1 |
| `audio/sfx/pickup.wav`  | 拾取道具 | req 16.1 |
| `audio/sfx/parry.wav`   | 成功格挡 | req 16.1 |

## 6. 背景音乐 MP3

| 资源路径 | 用途 | 需求 |
|---|---|---|
| `audio/bgm/bgm_forest.mp3` | 森林 / 洞穴 | req 16.2 |
| `audio/bgm/bgm_castle.mp3` | 城墙 / 密道 | req 16.2 |
| `audio/bgm/bgm_final.mp3`  | 魔城/天守阁 | req 16.2 |
| `audio/bgm/bgm_boss.mp3`   | BOSS 战 | req 16.3 |
| `audio/bgm/bgm_story.mp3`  | 背景介绍过场 | req 19.7 |

## 7. 粒子 / 特效

| 特效 | 实现 |
|---|---|
| 落叶（青叶配色） | Cocos Creator ParticleSystem2D，`textures/fx/leaf_particle.png` |
| 飘雪（预留） | 同上 — MVP 不启用 |
| 跳跃尘 | Cocos Animation 序列帧，`textures/fx/jump_dust.png` |
| 格挡火花 | 同上，`textures/fx/parry_spark.png` |

---

## 体积预算对照（req 16.5, 18.7）

| 项目 | 预算 | 当前占用 | 备注 |
|---|---|---|---|
| **首包** | ≤ 4 MB | TBD | 主角 + 敌人 + UI + 代码 |
| **音频总包** | ≤ 500 KB | TBD | 5 WAV + 5 MP3 |
| **内存峰值** | ≤ 200 MB | TBD | 见 10.2 埋点 |

> 填写"当前占用"由 CI 通过 `perf_report.json` 自动写入（见 10.2 PerfMonitor）。

---

## 8. 资源交付跟踪表（Delivery Tracker）

> 状态图例：⬜ 待制作　🟨 占位中（1×1 纯色 / 静音）　🟩 已交付正式版
> 占位由 `scripts/gen_placeholder_assets.js` 生成，每次跑会刷新所有 🟨 条目。

### 8.1 主角 · 3 形态

| 资源 | 状态 | 负责人 | 计划交付 | 备注 |
|---|---|---|---|---|
| `textures/characters/kage_red.png`    | 🟨 | TBD-美术 | TBD | 16×32 · 11 帧 |
| `textures/characters/kage_green.png`  | 🟨 | TBD-美术 | TBD | 16×32 · 11 帧 |
| `textures/characters/kage_yellow.png` | 🟨 | TBD-美术 | TBD | 16×32 · 11 帧 |

### 8.2 敌人 + BOSS

| 资源 | 状态 | 负责人 | 计划交付 | 备注 |
|---|---|---|---|---|
| `textures/enemies/qing_ren.png`        | 🟨 | TBD-美术 | TBD | 16×16 · 7 帧 |
| `textures/enemies/chi_ren.png`         | 🟨 | TBD-美术 | TBD | 16×16 · 7 帧 |
| `textures/enemies/hei_ren.png`         | 🟨 | TBD-美术 | TBD | 20×24 · 6 帧 |
| `textures/enemies/yao_fang.png`        | 🟨 | TBD-美术 | TBD | 18×20 · 4 帧 |
| `textures/bosses/shuang_huan_fang.png` | 🟨 | TBD-美术 | TBD | 32×32 本体 + 96×32 双身 |
| `textures/bosses/butterfly.png`        | 🟨 | TBD-美术 | TBD | 16×16 · 4 帧 |

### 8.3 场景视差（3 主题 × 4 层 = 12 张）

| 主题 | far | mid | near | fx | 负责人 | 计划交付 |
|---|---|---|---|---|---|---|
| 森林 `textures/scenes/forest/*`           | 🟨 | 🟨 | 🟨 | 🟨 | TBD-美术 | TBD |
| 城墙 `textures/scenes/castle_wall/*`      | 🟨 | 🟨 | 🟨 | 🟨 | TBD-美术 | TBD |
| 魔城 `textures/scenes/demon_castle/*`     | 🟨 | 🟨 | 🟨 | 🟨 | TBD-美术 | TBD |

### 8.4 剧情背景插画（req 19.2）

| 资源 | 状态 | 负责人 | 计划交付 | 备注 |
|---|---|---|---|---|
| `textures/story/ch1_page1_ninja.png`    | 🟨 | TBD-美术 | TBD | 480×270 |
| `textures/story/ch1_page2_princess.png` | 🟨 | TBD-美术 | TBD | 480×270 |
| `textures/story/ch1_page3_depart.png`   | 🟨 | TBD-美术 | TBD | 480×270 |

### 8.5 粒子特效贴图

| 资源 | 状态 | 负责人 | 计划交付 | 备注 |
|---|---|---|---|---|
| `textures/fx/leaf_particle.png` | 🟨 | TBD-美术 | TBD | 透明底落叶 |
| `textures/fx/jump_dust.png`     | 🟨 | TBD-美术 | TBD | 透明底尘土 |
| `textures/fx/parry_spark.png`   | 🟨 | TBD-美术 | TBD | 透明底火花 |

### 8.6 音效 WAV（每段 ≤ 0.5 s，req 16.1）

| 资源 | 状态 | 负责人 | 计划交付 | 备注 |
|---|---|---|---|---|
| `audio/sfx/attack.wav` | 🟨 | TBD-音效 | TBD | 攻击 |
| `audio/sfx/jump.wav`   | 🟨 | TBD-音效 | TBD | 跳跃 |
| `audio/sfx/hurt.wav`   | 🟨 | TBD-音效 | TBD | 受伤/死亡 |
| `audio/sfx/pickup.wav` | 🟨 | TBD-音效 | TBD | 拾取 |
| `audio/sfx/parry.wav`  | 🟨 | TBD-音效 | TBD | 格挡 |

### 8.7 背景音乐 MP3（req 16.2 / 16.3 / 19.7）

| 资源 | 状态 | 负责人 | 计划交付 | 备注 |
|---|---|---|---|---|
| `audio/bgm/bgm_forest.mp3` | 🟨 | TBD-音效 | TBD | 森林 / 洞穴 |
| `audio/bgm/bgm_castle.mp3` | 🟨 | TBD-音效 | TBD | 城墙 / 密道 |
| `audio/bgm/bgm_final.mp3`  | 🟨 | TBD-音效 | TBD | 魔城 / 天守阁 |
| `audio/bgm/bgm_boss.mp3`   | 🟨 | TBD-音效 | TBD | BOSS 战 |
| `audio/bgm/bgm_story.mp3`  | 🟨 | TBD-音效 | TBD | 背景介绍过场 |

### 8.8 交付流程

1. 美术 / 音效收到任务后把正式素材放到上表对应路径，**覆盖同名占位文件**。
2. 在本 md 中把对应行的 🟨 改为 🟩，填写负责人与交付日期。
3. 提交 PR，CI 会对比文件大小与 `ASSETS.md` 预算表 (§ "体积预算对照")。
4. 所有条目变 🟩 且体积预算达标后，可以撤掉占位脚本的调用。

> **重要**：禁止手动修改 `scripts/gen_placeholder_assets.js` 的输出策略，除非变更点已同步到本 md 的 "当前状态" 段。任何新增资源条目必须**同时**：在上述 § 1~§ 7 规格表中加一行、在 § 8 跟踪表加一行、在脚本 `SPEC` 数组加一条。
