查看源码下载文档
REFERENCE / A4

最容易误读的实现细节

本附录不是已复现 bug 清单。它集中记录名字、旧注释、现代习惯与当前函数体之间的区别,帮助读者避免把错误前提带入后续分析。

1. 运行时和对象

容易形成的印象 源码支持的准确理解 证据
每帧先处理所有命令再模拟 常规主循环的 Logic.AI 先于 Queue_AI;等待阶段还会处理输入和显示 Main_Loop
Assign_Mission 立即换当前任务 先写 MissionQueue;Commence 再切换 Mission 任务切换
所有移动工作都等下一帧开始 Assign_Destination 可立即调用 Start_Of_Move 做准备 目的地赋值
新建对象就已出现在战场 对象初始 Limbo,入场要维护占位、显示层和逻辑集合 入场
Limbo 就是 delete 它撤出世界和跟踪关系,内存生命周期还需另看 离场
Radio 是语音或网络 它直接调用对象的 Receive_Message,是协作协议 Radio 发送
fixed 是浮点或16.16 此实现是无符号8.8布局,不同运算的取整也不同 布局

2. 地图、AI 和配置

容易形成的印象 准确理解 证据或章节
寻路必然是 A* 这里是直线路径、沿两侧障碍边缘搜索与后续平滑,不提供全局最短路径保证 04 寻路
In_Radar 表示在雷达视野里 实际判断可玩地图矩形范围 In_Radar
IsMapped/IsVisible 就是现代 explored/current LOS 它们有本地遮蔽和边缘显示语义,不应直接移植现代双层迷雾概念 04 视野
每个 AI_* 名字都实现了对应智能行为 Expert_AI 中一些建造处理是空壳,实际建造选择在其他函数 09 战略AI
Team 是玩家 Ctrl 编队 AI Team 还有模板、招募和脚本任务,快捷选择编组另有实现 09 队伍
新写一个 INI 段落就能新增任意类型 车辆、武器、弹头都有已有注册集合 固定武器清单
所有配置项都继承旧值 多数如此,但难度和 Verses 等字段有自己的缺省策略 05 缺省值
地图规则在所有模式下最后生效 外层还可能应用 MPLAYER.INI 附加多人规则
触发器 AND 代表先后执行 锁存条件和当前条件不同;Elapsed 计时开始点也需看 Reset 10 条件组合
增援返回 true 证明全部成员抵达 普通结尾返回值不逐一证明所有成员 Unlimbo 成功 增援结束路径

3. 战斗和生产

容易形成的印象 准确理解 证据或章节
AI 总选 DPS 最高的武器 主副武器选择并未完整计算伤害除射速 武器选择
Burst=n 就是通用 n 连发 通用路径可见的是双发判定与交替状态,不能按字段名扩展含义 双发条件
所有爆炸都扫描大圆内全部对象 普通爆炸先查九格和有界候选,再检查距离;空中命中另有路径 普通爆炸
forced 必然穿透一切保护 派生层仍可能先拦截,铁幕就是需要跟完整调用链的例子 铁幕检查
Wide_Area_Damage 注释可直接当衰减公式 当前字面表达式与直觉衰减不同,还叠加多个局部爆炸;实际分布待运行验证 大范围函数06 解释
致命攻击按旧注释总留一滴血 当前基础扣血实现可真正降到零并处理击杀 扣血函数体
生产只是一段倒计时 阶段推进与逐步付款耦合,缺钱时回退阶段 工厂AI
Building 卸矿函数就是矿车实际结算链 应沿 Unit::Mission_Unload 的现存调用,不能只按旧函数名判断 07 卸矿
出售、死亡与储量变化可仅看一个布尔参数 调用者选择的参数决定实际分支,不能把未使用分支当普遍行为 07 容量与出售

4. 同步、存档和底层库

容易形成的印象 准确理解 证据或章节
校验 CRC 完全不改变模拟 Compute_Game_CRC 中的随机对象整数转换会取随机数 CRC 调用转换运算符
录像只保存命令 还记录视口、选择等本地状态,且有布局/版本约束 13 录像
有录像代码就代表所有模式回放已可靠 单机/多人/回放路径需分别检查,本次未运行确认 13 验证边界
连接层注释说不保序就完全不保序 当前 DATA_ACK 交付按序,NOACK 行为不同 Get_Packet
Host 就是计算全部战斗的权威服务器 主机承担时间/会话协调不能推出权威战斗服务器架构 13 协议
存档是自包含、跨平台的数据协议 大量原始对象布局、池槽与类型恢复依赖编译环境,也依赖外部规则 14 存档
SAVEGAME_VERSION 是完整 schema 版本 当前为若干 sizeof 的组合及分支修正,不能覆盖所有布局变化 14 版本
写存档不碰运行中的世界 编码指针会临时改写部分对象内引用,之后再解码 14 编码流程
所有 LCW 解码器的边界行为相同 多份 C++/汇编实现和编译归属不同;部分汇编使用 length 裁剪输出 12 LCW
计算了 pan 就证明 Win32 已实现左右声像 上层传递和底层使用要分别检查 12 音频
MAKEFILE 引用但 Git 没有的都是丢文件 WIN95.LNK 等本来会生成;SDK 和特定外部库则是另一类缺口 01 构建
WW_WIN/WINDOWS.CPP 一定是 OS 消息循环 此处是文本窗口打印系统;名字不能替代函数阅读 15 平台库

5. 遇到新疑点时如何记录

使用“条件—字面行为—调用者—可观察后果—验证方法”的格式。例如:在指定宏开启、输入满足某范围时,函数把某字段设为何值;上层是否采用该返回值;如果发生,玩家会观察到什么;如何用最小场景验证。这样记录的疑点可以继续研究,不会在二手传播中变成没有条件的游戏传说。

红色警戒初代 · 源码剖析18 章正文 / 5 份附录
输入关键词,检索 24 份完整文档
全文检索 · 点击结果直达对应小节