# 地图生成计划(Map Generation Plan)

> 目标:把丰富地理(草地/海边/雪山/森林/城市/村落 + 室内)做成可拼接、可热扩展的地图素材,
> 与已有的 `Place`/`WorldObject` 数据模型对齐,供 Phase 1.5 可视化层渲染。

## 1. 分层模型

地图 = 三层叠加渲染:

| 层 | 来源 | 状态 |
|---|---|---|
| **地形层(tiles)** | PixelLab `create_topdown_tileset`(Wang 自动拼接,带地形过渡) | 🟡 进行中(已出草地↔土路) |
| **物体层(objects)** | 各 Place 的 `WorldObject` → 已有精灵图叠在格子上 | ✅ 咖啡机/钢琴已出 |
| **角色层(characters)** | chibi 角色精灵,按 `world.positions` 摆放、行走 | 🟡 chibi 版生成中 |

## 2. 地形 tileset 库(Wang 拼接 + 链式过渡)

PixelLab 的 topdown tileset 支持用 `base_tile_id` **链接**多个 tileset,让地形无缝过渡。规划一条地形链覆盖所有 geography:

```
ocean water → sandy beach → lush grass → dirt path        (已出 grass↔path)
                              ↘ stone pavement (城市/广场)
                              ↘ snow (雪山)
                              ↘ forest floor (森林)
```

每条用前一个 tileset 的 `base_tile_id` 作参考生成,保证风格统一。geography 枚举 ↔ tileset 映射:

| geography | tileset |
|---|---|
| town / village / plaza | grass + dirt path / stone |
| seaside | ocean → beach → grass |
| snow_mountain | grass → snow |
| forest | grass → forest floor |
| city | grass → stone pavement |
| indoor | 木地板 / 瓷砖(用 `create_tiles_pro` 或室内地砖 tileset) |

## 3. Place → 地图区域

每个 `Place` 对应地图上一块**瓦片区域**:
- `geography` 决定底层 tileset。
- 该 Place 的 `objects` 按坐标摆在格子上(坐标后续在 place manifest 的 `art` 里加 `layout`/`object_positions`,或渲染层自动布局)。
- `adjacent` 决定区域之间的连接(门/路)。

> 近期可先用"每个 Place 一块固定尺寸网格 + 居中铺地形 + 物体自动布点"的简化布局,后续再做精细 layout。

## 4. 与代码的对接

- 素材仍由 §asset-entity-spec 的 manifest `art` 段驱动;place 的 tileset id 回填到 `art`(新增 `tileset_id` 字段,待加)。
- 可视化层(Phase 1.5)读 `worlds/<名>/` manifest + `assets/sprites/` + 实时 `world` 状态(positions/动作)合成画面。

## 5. 下一步素材任务队列
- [x] 草地 ↔ 土路 tileset(`c89aa55a…`)
- [ ] 海洋 → 沙滩 → 草地(海边链)
- [ ] 草地 → 石板(城市/广场)
- [ ] 草地 → 雪地(雪山)
- [ ] 草地 → 森林地表(森林)
- [ ] 室内木地板(咖啡馆)
- [ ] chibi 角色 idle/walk 动画帧(`animate_character`)
