tmcarmichael/compass-1999
GitHub: tmcarmichael/compass-1999
一个通过逆向工程内存结构和解析原生世界几何体,在传统3D MMORPG中实现完全自主决策的研究型智能体框架。
Stars: 1 | Forks: 0
# Compass 1999
通过二进制逆向工程和几何感知世界建模,在传统 3D MMORPG 中实现自主智能体。




一个通过从实时内存中读取反编译的 C++ 结构体来玩 3D MMORPG 的自主智能体。不依赖屏幕。不依赖像素。不注入代码。
这是一个研究原型,使用 [EverQuest](https://www.project1999.com/) Titanium 客户端 (2002) 作为测试平台,旨在探索在持久的、对抗性的 3D 环境中的自主决策。该系统直接从客户端内存和原生世界几何体重建游戏状态,无需屏幕抓取、代码注入或客户端修改。
核心贡献:
- 通过恢复的结构体布局和指针链,从实时客户端内存进行逆向工程感知
- 基于 EverQuest 原生世界资源(`.s3d`、`.wld`、BSP 区域、地形法线)的几何感知导航
- 基于实体状态、空间关系、威胁和交战语境的结构化决策
- 一个可复用的测试平台,用于在持久的多实体 3D 环境中研究自主行为
## 概述
大多数游戏智能体要么抓取像素,要么注入代码。而本项目两者皆不采用。
### 逆向工程感知
使用 [Ghidra](https://ghidra-sre.org/) 对 EQ Titanium 客户端(未混淆的 32 位 C++)进行反编译,并追踪从静态基地址到完整 `SPAWNINFO` 结构体布局的指针链。智能体每个 tick 通过 `ReadProcessMemory` 读取这些结构体的双向链表,生成完整的世界快照,且无需修改游戏进程。
### 几何感知导航
智能体解析游戏客户端用于渲染 3D 世界的相同 `.s3d` 归档和 `.wld` 片段文件。通过提取网格几何体、BSP 区域树和表面法线,构建包含可行走性、水、熔岩和悬崖分类的地形高度图,覆盖游戏中 275 个区域中的任何一个。A\* 寻路算法在此网格上运行,并生成受地形坡度和危险特征约束的平滑路径。
### 结构化世界模型
原始 spawn 数据在每个 tick 被转换为丰富的实体档案:速度、孤立分数、附近实体密度、预计交战持续时间和威胁评估。持久的空间记忆层随时间积累事件热力图,引导导航向高产出区域移动并识别最佳据点(camp)位置。决策层基于实体的空间和行为属性进行推理,而不是对浅层触发器或像素模式做出反应。
- **278 个测试** 在 < 0.2 秒内完成
- **10 Hz tick 频率** 用于感知、世界模型和决策评估
- **275 个区域地形缓存** 从游戏几何体解析
- **零外部依赖**,仅需 Python 3.12+ 标准库
## 架构
数据单向流动:**感知 → 大脑 → 例程 → 运动控制**。任何层都不向上反馈。有关各层的深入解析、验证的内存偏移量和设计决策,请参阅 [docs/](https://github.com/tmcarmichael/compass-1999/tree/main/docs)。
## 为什么选择 EverQuest 作为智能体测试平台
EverQuest 提供了简单智能体环境所缺乏的特性:
- **持久 3D 世界**,具有真实地形几何体、室内/室外过渡和多区域连通性
- **数百个自主实体**,具有移动、行为、阵营关系和社交机制
- **对抗性条件**,包括人类玩家、环境危害、资源竞争和阵营后果
- **丰富的状态空间**,包括生命值、魔力值、负重量、同伴状态、主动效果、位置关系和阵营立场
- **无 API**,迫使直接从二进制文件解决感知和世界建模问题
这使得该客户端成为研究复杂遗留系统中自主智能体的有用研究环境,而不仅仅是一个狭隘的脚本化基准。
## 发现
遗留游戏客户端可以在无法访问源代码或官方 API 的情况下支持有意义的自主智能体研究。逆向工程的内存布局提供了高保真的感知层,而原生世界资源为地形感知导航和空间推理提供了足够的几何结构。在实践中,主要的瓶颈不是感知保真度,而是在嘈杂、对抗性条件下决策层的复杂性。
## 快速开始
有关设置和配置,请参阅 [GETTING_STARTED.md](docs/GETTING_STARTED.md)。完整的架构、内存映射、设计决策和区域指南位于 [docs/](https://github.com/tmcarmichael/compass-1999/tree/main/docs)。
## 未来方向
当前的决策引擎是一个**行为树 + FSM 混合体**,通过优先级排序的规则选择例程状态机。世界模型和空间记忆层已经产生了丰富的逐实体评分(孤立度、威胁、密度、战斗持续时间、位置历史),以下后续步骤将利用这些数据:
### 基于效用的动作选择
用跨因素的连续评分取代静态规则优先级,因素包括距离、难度、孤立度、局部密度、与基地的方向以及经验历史。
### 受 GOAP 启发的战略规划
引入一个更高层的规划器,推理生存、资源获取和同伴维护等目标,而现有的行为层继续处理即时的战术执行。
感知层、世界模型、例程和运动控制在这些演进中保持稳定;只有决策层发生变化。
## 致谢
本项目基于以下想法和资源构建:
- **[Brewall Maps](https://www.eqmaps.info/)** 用于导航规划中使用的区域图数据
- **[EQEmu](https://github.com/EQEmu)** 用于开源游戏机制参考和服务器端结构体定义
- **[F.E.A.R.](https://www.gamedevs.org/uploads/three-states-plan-ai-of-fear.pdf)** 用于受 GOAP 启发的规划架构
- **[Ghidra](https://ghidra-sre.org/)** 用于 EQ Titanium 客户端的二进制分析
- **[WowClassicGrindBot](https://github.com/Xian55/WowClassicGrindBot)** 用于游戏自动化中目标导向的动作选择
- **[MacroQuest / MQ2](https://www.macroquest.org/)** 用于结构体布局参考和内存偏移文档
标签:3D地形导航, A*寻路, BSP, Cheat开发, C++结构体, EverQuest, Ghidra, GOAP, HTTP工具, MMORPG, Project 1999, Python, 二进制分析, 云安全运维, 云资产清单, 内存读取, 几何感知, 反检测, 无后门, 模拟输入, 游戏AI, 游戏机器人, 空间世界模型, 自动驾驶代理, 行为树, 进程内存, 逆向工程, 零依赖