zeljkovranjes/l4d2-director-system-research
GitHub: zeljkovranjes/l4d2-director-system-research
通过对《求生之路 2》AI Director 的可复现逆向工程研究,系统性地还原了自适应游戏节奏引擎的强度跟踪、节奏控制和遭遇调度等核心机制。
Stars: 0 | Forks: 0
# 求生之路 2 Director 系统研究
逆向工程笔记、脱敏运行时证据以及可复现的工具,描述了《求生之路 2》(Left 4 Dead 2)的自适应 AI Director 是如何组织的。
本仓库面向两类读者:
- 希望了解自适应游戏节奏的初级程序员;
- 希望获取地址、控制流、置信度级别和可重复证据的逆向工程师。
此处未实现任何可复用的游戏库。这仅是研究阶段。
准备好实现它了吗?请将可复用的[库实现提示词](PROMPT.md)交给另一个编程助手。
## 什么是 Director?
Director 会监视生还者,评估他们所承受的压力,并决定何时制造动作或喘息之机。它负责协调普通敌人、特殊遭遇、尸潮恐慌事件、Boss、大结局、生存回合、物品放置以及特定模式的脚本。
```
flowchart LR
W[Game world snapshot] --> I[Per-survivor intensity]
I --> T[Tempo controller]
T --> E[Encounter scheduler]
E --> P[Spawn placement]
P --> H[Game engine executes request]
H --> W
S[Mode and script policy] --> T
S --> E
S --> P
```
## 重要结果
- 被分析的二进制文件是 2026 年 6 月 30 日的 x86 版 `server.dll`,SHA-256 为 `a93ec916a8f26fbea85688c321d2ba8dd346d435fab09a0b926dd950c2e1ea12`。
- Director 单例拥有 1,292 个直接代码引用,归入 474 个候选函数。
- 原生节奏为 `BUILD_UP -> SUSTAIN_PEAK -> PEAK_FADE -> RELAX -> BUILD_UP`。
- 节奏使用符合条件的存活生还者中的**最大瞬时强度**。它不使用 `TimeAveragedIntensity`。
- 恐慌事件使用确切的状态:`INITIAL_DELAY(0)`、`MEGA_MOB(1)`、`WAIT_FOR_COMBAT_TO_END(2)`、`PAUSE(3)` 和 `DONE(4)`。
- Boss 放置会考虑导航可达性、生还者可见度、距离、威胁分离以及向目标的推进进度。
- 大结局、生存、收集、物品管理、脚本和对抗分配的职责已被分离为可复用的概念。
从以下文档开始阅读:
1. [通俗语言架构](research/ARCHITECTURE_RECOVERY.md)
2. [强度系数与游戏事件](research/INTENSITY_RECOVERY.md)
3. [已恢复函数目录](research/FUNCTION_CATALOG.md)
4. [通用净室规范](research/SPECIFICATION.md)
5. [覆盖范围与遗留限制](research/COVERAGE_AUDIT.md)
6. [系统图表](docs/SYSTEM_DIAGRAMS.md)
7. [构建通用库的提示词](PROMPT.md)
## 通俗语言解释强度
每个生还者都拥有一个强度追踪器。游戏事件会在五个严重性类别之一中增加压力。在默认设置下,它们的有效增量如下:
| 类别 | 典型的已恢复用途 | 有效增量 |
|---:|---|---:|
| 1 | 远距离或低威胁敌人死亡 | `+0.0125` |
| 2 | 轻微伤害或附近普通敌人死亡 | `+0.05` |
| 3 | 中度伤害、抓住边缘、附近 Boss 死亡 | `+0.125` |
| 4 | 严重伤害或随后的倒地 | `+0.25` |
| 5 | 首次倒地或符合条件的心脏除颤器复活 | 立即达到 `1.0` |
事件发生后,瞬时强度将保持五秒。随后在 30 秒内从满值线性衰减至零。
```
stateDiagram-v2
[*] --> Calm
Calm --> Pressured: intensity event
Pressured --> Held: add severity and clamp to 1.0
Held --> Decaying: five-second hold expires
Decaying --> Calm: reaches zero
Decaying --> Held: another intensity event
```
确切的 `TimeAveragedIntensity` 方程式已通过 209 次原生更新验证,最大绝对误差为 `2.20e-8`。它具有不寻常的超调与吸附行为,并在 [INTENSITY_RECOVERY.md](research/INTENSITY_RECOVERY.md#decay-and-averaged-value) 中有详细记录。
心脏除颤器的保护机制也是确切的:仅当当前模式具有 `base == "coop"` 且难度为简单(Easy)或普通(Normal)时,复活才会应用类别 5。
## 通俗语言解释节奏
```
stateDiagram-v2
BUILD_UP --> SUSTAIN_PEAK: timer ready and max instant intensity > 0.9
SUSTAIN_PEAK --> PEAK_FADE: sustain timer expires
PEAK_FADE --> RELAX: combat clears and max instant intensity < 0.9
RELAX --> BUILD_UP: relax timer or travel condition
```
并非在所有地方都使用相同的值:
| 决策 | 使用的强度? |
|---|---|
| 结束蓄力 | 最大瞬时强度 |
| 结束持续峰值 | 否;由计时器驱动 |
| 结束峰值消退 | 最大瞬时强度 |
| 结束放松 | 否;由计时器/推进驱动 |
| 生成放松游荡者 | 带有特定难度阈值的最大瞬时强度 |
## 仓库布局
```
research/
*.md Human-readable findings and specifications
analysis/ Machine-readable xrefs, disassemblies, and validation
oracle/ Sanitized runtime traces and validated memory layout
tools/ Read-only PE/disassembly/trace analysis scripts
tools/
OfflineCaptureVsp/ Source for the local offline observation plugin
docs/
SYSTEM_DIAGRAMS.md Larger subsystem and data-flow diagrams
```
## 复现静态分析
要求:
- 一份合法安装的《求生之路 2》副本;
- Python 3;
- 用于面向反汇编脚本的 Capstone;
- 如果你期望匹配 RVA,则需要上述确切的 `server.dll` 构建。
示例:
```
python research\tools\extract_director_evidence.py `
"D:\SteamLibrary\steamapps\common\Left 4 Dead 2\left4dead2\bin\server.dll"
```
根据随附的脱敏追踪记录验证平均强度方程式:
```
python research\tools\validate_averaged_intensity.py `
research\oracle\intensity_averaged_runtime_trace.jsonl
```
有关完整的工作流,请参阅 [research/tools/README.md](research/tools/README.md) 和[研究方法](research/METHOD.md)。
## 证据标签
- **已证实** 意味着通过直接反汇编、字符串交叉引用、构造函数默认值或运行时观察确立了该声明。
- **推断** 意味着附近的多个事实支持某项职责,但被剥离符号的二进制文件未保留其原始符号。
- **净室设计** 意味着提出的是一种通用的接口或公式,而非复制的 Valve 源码。
RVA 是相对于已加载的 `server.dll` 模块的偏移量。它们不是固定的进程地址,因为 ASLR 会更改模块基址。
## 安全与范围
运行时追踪记录是在本地 `-insecure` 会话中收集的,并在包含之前进行了脱敏处理。捕获插件属于研究工具,严禁在连接到受 VAC 保护的服务器时加载。
本仓库不包含 Valve 源代码、游戏二进制文件、PDB 或反编译的源码复刻。它包含独立产生的观察结果、微小的指令级证据、衍生文档和分析工具。
## 这能重现 Director 吗?
它足以构建一个通用的行为等价物:压力跟踪、节奏、种群预算、遭遇调度、Boss/危险规划、受导航约束的放置、场景阶段、脚本钩子、持久化以及确定性重放。
它并不宣称实现与源码一致或字节一致的重构。零售版二进制文件已被剥离符号,因此某些私有函数名和特定引擎的辅助语义无法被如实还原。
标签:AI系统, 云资产清单, 代码示例, 数据分析, 游戏开发, 游戏引擎, 逆向工具, 逆向工程