🗺️ GOD 地图包

新建一个文件夹,刷新向导,Agent 立刻进入一座全新小镇。

🌏 English · 🌏 中文

--- GOD 地图包是放在以下路径里的本地文件夹: ```text agentsociety/custom/maps// ``` 新建一个文件夹丢进去,重启或刷新配置向导,新地图就会作为可选世界出现 —— 不需要改任何代码。 ## 📦 标准目录结构 ```text / ├── map.yaml ← 语义清单(地点、交互、出生点) ├── README.md ← 地图包简介 ├── ATTRIBUTION.md ← 图块、人物、图标的版权归属 ├── visuals/ │ ├── map.json ← Tiled JSON 地图(orthogonal 正交投影) │ └── map_assets/**/*.png ← JSON 里引用的图块素材 ├── characters/ ← 可选:32×32 像素人物精灵图 │ ├── atlas.json ← 可选 │ └── *.png └── location_assets/ ← 可选:UI 用的地点图标 └── *.png ``` `map.yaml` 是 **语义清单** —— 描述地图上有哪些地点、Agent 可以在每个地点做什么、世界怎么串起来。 `visuals/map.json` 是 **Tiled JSON 地图**,赋予世界像素外观。 Tiled JSON 里的图块路径必须是相对路径,且不能跳出地图包目录。 ## 📝 清单字段 最小可用的 `map.yaml`: ```yaml schema_version: 1 map_id: your_map_id display_name: Your Map Name tiled_map_path: visuals/map.json tile_size: 32 character_root: characters spawn_points: - id: resident_start location_id: plaza locations: - id: plaza name: Plaza aliases: [plaza] anchor_tile: {x: 1, y: 1} interaction_ids: [wait] interactions: - id: wait name: Wait allowed_location_ids: [plaza] ``` 推荐的可选字段: | 字段 | 作用 | | --- | --- | | `default_location_order` | Agent 没有指定地点时的兜底优先级。 | | `bounds` | `{x, y, w, h}`,覆盖某个地点的矩形区域(点击、高亮、状态显示用)。 | | `scene_type` | 紧凑分类,如 `home`、`school`、`market`。 | | `visual_asset` | `location_assets/` 下的图标相对路径。 | | `effects` | 交互产出字段:`action`、`status`、`emotion`、`latest_event`、`group_message`。 | 运行时多语言字段是可选且兼容旧清单的。保留现有 `display_name`、`name`、`description` 作为后端/运行时默认值,只在 `localized.en` 与 `localized.zh` 中补前端展示文本: ```yaml localized: en: display_name: Your Map Name zh: display_name: 你的地图名 locations: - id: plaza name: Plaza localized: en: name: Plaza zh: name: 广场 interactions: - id: wait name: Wait description: Wait in place. localized: en: name: Wait description: Wait in place. zh: name: 等待 description: 原地等待。 ``` ## 🧱 Tiled JSON 规则 v1 仅支持正交(orthogonal)Tiled JSON 地图: - `orientation` 必须为 `orthogonal`。 - `tilewidth` 与 `tileheight` 应等于 `tile_size`。 - 地图必须包含一个名为 **`Collisions`** 的瓦片层。 - 在 `Collisions` 中,`0` 表示可走,任何非零图块表示阻挡。 - 图块素材必须是 PNG 文件,且位于地图包目录内。 - v1 **不支持** TMX、外部 tileset 文件、远程图片、单张背景图地图。 ## ✅ 校验 ```bash cd agentsociety uv run python scripts/validate_map_package.py custom/maps/ ``` 校验器会检查必填字段、资源路径、Tiled JSON 结构、图块素材、`Collisions` 层、 地点锚点、交互引用是否对得上。 历史遗留的 The Ville 语义检查也仍然保留: ```bash uv run python scripts/validate_the_ville_map.py ``` ## 🧰 即用即抄的模板 | 包 | 用途 | | --- | --- | | [`agentsociety/custom/maps/the_ville/`](../agentsociety/custom/maps/the_ville/README.zh-CN.md) | 完整范例 —— 10 个地点、65 个交互、真实图块素材。 | | [`agentsociety/custom/maps/_template/`](../agentsociety/custom/maps/_template/README.zh-CN.md) | 最小起步模板,复制一份、改名、替换素材即可。 | ## 🚀 五分钟上手流程 ```bash # 1. 复制模板 cp -r agentsociety/custom/maps/_template agentsociety/custom/maps/my_town # 2. 放入你的 Tiled JSON、图块 PNG、人物精灵(可选) # 编辑 map.yaml:修改 map_id、display_name、locations、interactions # 3. 校验 cd agentsociety uv run python scripts/validate_map_package.py custom/maps/my_town # 4. 重启 GOD,在配置向导里选择新地图 ./scripts/god.sh restart ``` 就这么简单 —— 不用改代码,也不用动注册表。配置向导每次刷新都会自动发现所有合法地图包。