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系统, 云资产清单, 代码示例, 数据分析, 游戏开发, 游戏引擎, 逆向工具, 逆向工程