openage 多人协作地图编辑器(MMOEM)设计构想:从网络同步到权限管理
【免费下载链接】openageClone of the Age of Empires II engine 🚀项目地址: https://gitcode.com/gh_mirrors/op/openage
导读
本文围绕 doc/ideas/editor/multiplayer.md 展开,系统阐述 openage 编辑器"多人联机协同编辑"(Massive Multiplayer Online Editor Mode,MMOEM)的设计愿景与技术要点。文章覆盖客户端/服务器协作模型、地图状态持久化与离线编辑、分级权限管理、观战与克隆、版本管理与密码保护等完整功能清单,并对照仓库中已有的 mod 管理与网络协议逆向资料,说明这些构想与 openage 现有架构之间的衔接关系。读完本文,你将完整掌握 openage 编辑器多人协同模式的目标形态、每一项功能的设计意图,以及它们与当前仓库代码的可落地路径。
背景与愿景:为什么需要多人协同编辑
doc/ideas/editor/README.md将本模块定位为编辑器系列的压轴之作:当玩家厌倦了独自一人反复打磨地图,希望让其他人分担编辑工作时,就可以拥抱massive multiplayer online editor mode(MMOEM)。这一构想的基本出发点非常直白:
人们喜欢协作与分享自制场景,但奇怪的是,允许通过网络进行同时编辑的游戏数量几乎为零。
文档以 Minecraft 为灵感来源:在 Minecraft 中,"编辑地图"本身就是多人模式的核心玩法,玩家在共享世界里实时建造、修改与互相观察。openage 编辑器希望继承这一体验,让"做地图"从单人工坊变成多人共创的社交过程。因此本文档属于 openage 编辑器"ideas"系列(doc/ideas/editor/)中的功能设计蓝图,与地形编辑器(terrain.md)、经济编辑器(economy.md)、脚本编辑器(scripting.md)、战役编辑器(campaigns.md)、单位编辑器(units.md)与技术编辑器(tech.md)共同构成完整的编辑器功能规划。
需要强调的是,这是设计构想文档而非已实现功能:截至当前仓库状态,多人协同编辑尚未在代码中落地,本文所描述的是 openage 编辑器的目标形态与功能规划。
核心架构:编辑器在客户端,服务器负责分发
多人协同模式的首要架构决策是客户端/服务器模型:
- 编辑器运行在客户端:每个用户都在自己本地的 openage 实例中操作编辑器界面,绘制地形、摆放单位、编写脚本等动作在本地产生编辑指令;
- 服务器负责分发变更:服务器接收每个客户端产生的编辑变更,并同步广播给所有已连接的客户端,使所有人的画面与地图数据保持一致。
这一模型与 openage 逆向工程文档中记录的原版游戏网络同步结构存在天然关联。仓库的 doc/reverse_engineering/networking/01-general.md 记载了原版《帝国时代 II》的联网测试环境、传输层协议与数据包类型划分;02-header.md 给出了协议头定义与解析示例;03-sync.md 则记录了周期性同步机制。虽然原版协议面向的是游戏对局同步,但其"服务器为中心、客户端上报/下发"的同步思路,与编辑器"服务器分发变更"的构想一脉相承,可作为 MMOEM 网络层设计的参考基线。
地图状态的持久化与传播
多人协同编辑不只是"看到别人在动",还要求地图数据可靠地保存与传播。文档规划了三条并行的数据路径:
- 服务器保存地图状态,供下载:服务器作为权威数据源,保存地图的当前状态快照。任何新加入的客户端都可以从服务器拉取最新地图状态,快速进入协作现场。
- 客户端本地保存,支持离线编辑:地图文件同时保存在客户端本地,玩家可以在离线状态下继续编辑。离线产生的修改可以"推送"回服务器。
- 类
git的变更推送模型:文档明确提出离线变更的同步方式"类似于git"——本地编辑形成可追踪的变更集合,联网后通过 push/pull 语义与服务器及其他协作者交换修改。这暗示地图数据应该被组织成可 diff、可合并的结构化形式,而非单一的大文件。
从仓库现有实现看,openage 的地图/资源分发体系已经具备"结构化打包"的基础设施:libopenage/assets/modpack.cpp 通过 TOML 定义文件解析 mod 包(info、assets、dependency、conflict、authors等表),libopenage/assets/mod_manager.cpp 负责注册 mod、校验依赖/冲突并维护激活顺序。游戏加载时,libopenage/gamestate/game.cpp 的load_data会按 mod 加载顺序逐包载入资源。这套"mod 包 = 带元数据的资源集合"机制,与多人编辑场景中"地图版本 = 可下发的资源快照"的需求高度契合:多人模式下服务器保存的"地图状态"完全可以封装为 mod 包形式,客户端通过现有加载链路直接消费。
功能特性清单
权限管理:从简单到精细
文档将权限设计为两个层级:
简单权限(基础三档):
- 查看(view)
- 放置(place)
- 删除(delete)
这三档构成最小权限集,可以快速配置一个协作者的编辑能力上限。
高级权限(精细控制):
- 对象级控制:允许或禁止特定用户放置/删除特定对象(例如只允许某人种树、禁止他人拆除建筑);
- 功能级控制:允许或禁止特定用户使用特定编辑器功能,例如脚本编写(scripting)、地形编辑(terrain editing);
- 用户分组:将用户编入群组,按组统一授予权限,降低大规模协作者的管理成本;
- 地图分区授权:在地图上划定特定区域(zone),每个区域拥有独立的权限管理,实现"各管一段"的分工协作。
高级权限的设计意味着地图数据模型需要携带"对象归属/权限元数据",且服务器在执行变更分发前需进行权限校验——只有通过校验的变更才会被广播给其他客户端。
观战模式
提供 spectator mode,允许用户以只读方式观看编辑过程而不实际修改地图。这一模式既是"参观者"的体验入口,也为审核、教学、直播等场景提供支持,与简单权限中的"view"档位天然对应。
地图克隆
支持 cloning the map——在服务器上复制一份现有地图作为新项目起点。克隆可服务于多种用途:在副本上尝试激进改动而无需担心破坏正本、为不同玩法方向分叉版本、或以现有优秀地图为模板开展新创作。
多版本保存
服务器支持保存地图的多个 release 版本(save multiple release versions)。结合"类 git 推送"的同步模型,每次发布形成可回溯的版本快照,协作者可下载任意历史版本,配合 mod 包的version/versionstr元数据字段(见 libopenage/assets/modpack.cpp)即可形成完整的版本标识体系。
密码保护
提供 password protected access,以密码保护入口,确保只有受邀用户能够加入协作会话或下载地图。这是对权限体系在网络接入层面的补充,防止未授权访问。
对象注释
允许用户为地图中的对象附加带说明的注释(attach notes with explanations to objects)。这一功能服务于协作沟通:某处地形为何如此设计、某单位放置的意图、待办修改项等,都可以直接挂在对象上,形成"在地图上交流"的协作语境。
编辑器配置共享
支持将编辑器配置/快捷栏(quickbar)等个性化设置分享给其他用户(share editor config/quickbar/whatever with other users)。这降低了新协作者的上手成本——团队成员可以使用统一的操作配置进行协作。
可选演进方向
文档还列出了三项可选的长期演进能力:
- Web 界面编辑:提供 Web 界面,让用户"在上班无聊时"也能编辑地图。这要求编辑核心逻辑与渲染/UI 解耦,使浏览器端能够接入同一套服务器与数据模型。
- git 版本控制:将 git 直接用作地图版本管理后端,让协作者获得成熟的提交、分支、合并、回滚能力,进一步落实上文"类 git 推送"的同步模型。
- 自动上传:将完成的成品地图自动发布到 aok.heavengames.com 或 openage 官方地图仓库,打通"协同创作 → 发布分享"的完整闭环。
这三项均为"可选"(Optional)项,属于愿景中的增强能力,优先级低于核心功能清单。
与现有仓库能力的衔接路径
虽然 MMOEM 尚未实现,但仓库中已有多处基础设施可与该构想对接:
| 构想能力 | 仓库现有支撑 | 路径 |
|---|---|---|
| 地图/资源结构化打包与分发 | mod 包定义解析(TOML) | libopenage/assets/modpack.cpp |
| 地图版本与加载顺序管理 | mod 注册、依赖/冲突校验、激活顺序 | libopenage/assets/mod_manager.cpp |
| 服务器/客户端同步模型参考 | 原版网络协议逆向(传输层、包头、周期同步) | doc/reverse_engineering/networking/01-general.md、02-header.md、03-sync.md |
| 按 mod 加载地图数据 | 游戏数据加载链路 | libopenage/gamestate/game.cpp |
从这些对照可以看出:多人协同编辑所需的"地图 = 可打包、可版本化、可分发的资源集合"这一数据形态,与 openage 现有的 mod 体系高度一致;而服务器分发变更、权限校验、离线 diff/合并等能力,则需要在此基础上新增会话管理与同步层。编辑器的整体功能划分与定位,可进一步参考 doc/ideas/editor/README.md。
总结
openage 的多人协同编辑模式(MMOEM)是一份面向"共创地图"体验的完整功能蓝图:它以客户端编辑器 + 服务器分发变更为核心架构,配套地图状态的服务器持久化与客户端离线编辑(类 git 推送)、从三档简单权限到对象级/区域级精细授权的权限体系、观战与克隆、多版本与密码保护、对象注释与配置共享等能力,并预留了 Web 编辑、git 版本控制与自动发布等演进空间。尽管这些功能仍处于构想阶段,其"地图即结构化可分发资源"的核心理念与 openage 现有的 mod 包体系、网络协议逆向资料形成了清晰的衔接路径,为后续实现提供了坚实的设计依据。
【免费下载链接】openageClone of the Age of Empires II engine 🚀项目地址: https://gitcode.com/gh_mirrors/op/openage
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考