跳转至

Overmap

职责

overmap 保存一个大尺度世界区域:overmap terrain、城市、道路/连接、special 放置、 monster group、NPC/camp 引用、note、可见性与区域 worldgen 状态;overmapbuffer 协调 多个区域。

入口点

阅读 src/overmap.h 和各 overmap_*.cpp。区域获取与跨边界查询进入 overmapbuffer;overmap::save、serialize、unserialize 定义持久边界。

数据所有权

overmap 拥有区域 terrain layer 与延迟的世界尺度记录;buffer 拥有或缓存加载的 overmap 对象。已加载 reality-bubble monster 与 overmap monster-group 记录不是同一 所有权形态。

依赖

overmap 依赖绝对 overmap 坐标、terrain/special/connection 注册表、region settings、 mapgen 放置、monster group、城市、天气、NPC 与世界存储。

生命周期

区域被生成或读取,与邻区连接,世界运行时被查询和更新,最后按 buffer 政策序列化并 逐出。

不变量

绝对坐标必须定位正确区域与局部 cell;连接在区域边界一致;unique special 遵守放置 状态;creature 加载/卸载不能复制 population。

扩展点

优先使用 JSON overmap terrain、special、location 和 connection。原生生成放在聚焦 模块,提供确定性放置测试并明确邻区行为。

序列化

src/savegame.cpp 保存 terrain layer、group、NPC/camp、note 和全局 overmap 状态。 缓存和生成摘要可重建;新持久字段必须有旧存档默认值。

测试

使用 overmap、noise、connection、cache、special-placement 与 worldfactory 测试。 生成回归要记录 seed,并测试区域边界。

性能

世界旅行与生成可能接触许多区域。只读查询应避免强制加载,并限制 map-data summary 与路径搜索范围。

CCB 差异

CCB 的 overmap 生成与 POI 处理包含项目专属修复和选择性上游移植。删除、放置与持久 行为必须按当前 CCB 测试和数据验证。

技术债务

生成、运行时查询、UI 数据与持久化仍集中在宽区域对象中。应保持 buffer 所有权,并 按职责拆分工作,避免新增全局扫描。