Skip to content

杂项内容

此页面列出了 Phobos 中尚未归类到合适类别的所有更改。

移除 Blowfish 依赖

启动游戏时不再需要 BLOWFISH.DLL

开发者工具

额外的同步日志记录

  • 当发生不同步时 Phobos 会将例如随机数生成函数的调用、朝向、目标、目的地的更改等额外信息写入 SYNC#.txt 日志文件中。

显示伤害数字

  • 有一个 新的快捷键 可以开关是否显示对单位与建筑造成的精确伤害数字。伤害数字以红色显示(对护盾为蓝色),治疗性质的伤害以绿色显示(对护盾为青色)。这些数字会显示在受影响的单位上,并在出现后向上移动。仅当 rulesmd.ini[GlobalControls] 下的 DebugKeysEnabled 设为 true 时可用。

输出对象信息

image CnC: Reloaded 中的对象信息输出效果

  • 有一个 新的快捷键 可以在按下时输出被选中/鼠标悬停于其上的对象的信息。仅当 rulesmd.ini[GlobalControls] 下的 DebugKeysEnabled 设为 true 时可用。

进入逐帧模式

  • 有一个 新的快捷键 可以逐帧执行游戏以便开发。
    • 你可以切换到逐帧模式然后用逐帧命令一次前进 1、5、10、15、30 或 60 帧。

输出音频文件缺失日志(样品)

  • Phobos 会在解析 soundmd.ini 时将所有音频文件缺失相关的信息输出到 debug.log 中(样品)。

保存变量至文件

  • 有一个 新的快捷键 可以将所有局部变量写入 locals.ini 并将所有全局变量写入 globals.ini。仅当 rulesmd.ini[GlobalControls] 下的 DebugKeysEnabled 设为 true 时可用。
  • 变量也会在 rulesmd.ini 中设置了 [General] -> SaveVariablesOnScenarioEnd=true 的情况下每次场景结束时自动保存到文件。
  • 变量小节将使用与任务文件名相同名称的大写字母表示,例如 [MYCAMPAIGN.MAP]
    • 变量将以键值对的形式写入,例如 MyVariable=1
  • 如果同名的 INI 文件(locals.iniglobals.ini)不存在那么将会被创建。如果存在,所有小节都将被保留。

rulesmd.ini

ini
[General]
SaveVariablesOnScenarioEnd=false    ; boolean

运动模式别称

  • 现在可以在 Locomotor 标签值中写入运动模式的别称,而不再只能书写它们的 CLSID。使用下表查找运动模式所对应的别称。
别称CLSID
Drive{4A582741-9839-11d1-B709-00A024DDAFD1}
Hover{4A582742-9839-11d1-B709-00A024DDAFD1}
Tunnel{4A582743-9839-11d1-B709-00A024DDAFD1}
Walk{4A582744-9839-11d1-B709-00A024DDAFD1}
DropPod{4A582745-9839-11d1-B709-00A024DDAFD1}
Fly{4A582746-9839-11d1-B709-00A024DDAFD1}
Teleport{4A582747-9839-11d1-B709-00A024DDAFD1}
Mech{55D141B8-DB94-11d1-AC98-006008055BB5}
Ship{2BEA74E1-7CCA-11d3-BE14-00104B62A16C}
Jumpjet{92612C46-F71F-11d1-AC9F-006008055BB5}
Rocket{B7B49766-E576-11d3-9BD9-00104B972FE8}

Note

Chrono 并不是一个标准的别称,但由于 Locomotor 值无效时将使用的默认行为也是 Teleport,因此显得好似 Chrono 生效了一般。

专用的军衔类

  • 现在可以在一个实体中定义军衔属性,这样一来只要它应用于单位就会同样应用下面的所有属性。

rulesmd.ini

ini
[InsigniaTypes]
0=SOMEINSIGNIATYPE

[SOMEINSIGNIATYPE]                       ; InsigniaType
Insignia=                                ; filename - excluding the .shp extension
Insignia.Rookie=                         ; filename - excluding the .shp extension
Insignia.Veteran=                        ; filename - excluding the .shp extension
Insignia.Elite=                          ; filename - excluding the .shp extension
InsigniaFrame=-1                         ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.Rookie=-1                  ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.Veteran=-1                 ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.Elite=-1                   ; int, frame of insignia shp (zero-based) or -1 for default

[SOMETECHNO]                             ; TechnoType
InsigniaType=                            ; InsigniaType
InsigniaType.WeaponN=                    ; InsigniaType
InsigniaType.PassengersN=                ; InsigniaType

游戏速度

单人游戏速度

  • 现在可以使用 CampaignDefaultGameSpeed 更改默认的(游戏速度 4/快/30FPS)战役游戏速度。
  • 现在可以输入一对值来更改单人游戏速度的 。此功能必须通过设置 CustomGS=true 来启用。只能稳定控制在 10 到 60 FPS 之间的值。
    • 自定义游戏速度是通过定期调整游戏帧之间的延迟来实现增加或减少 FPS 的。
    • CustomGSN.ChangeInterval 设置应用该效果的帧间隔。值为 2 表示 “每一帧执行一次”,3 表示 “每 3 帧执行一次” 等。加速/减速的改动大致呈对数关系。
    • CustomGSN.ChangeDelay 设置了每个 CustomGSN.ChangeInterval 帧使用的延迟(游戏速度编号)。
    • CustomGSN.DefaultDelay 设置了在其他帧上应用的延迟(游戏速度编号)。
    • CustomGSN.ChangeDelayCustomGSN.DefaultDelay 中使用游戏速度 6(最快)可以将 FPS 设置为超过 60 的值。
      • 然而实际的 FPS 可能在不同的机器上有所不同。

rulesmd.ini

ini
[General]
CustomGS=false              ; boolean
CustomGSN.ChangeInterval=-1 ; integer >= 1
CustomGSN.ChangeDelay=N     ; integer between 0 and 6
CustomGSN.DefaultDelay=N    ; integer between 0 and 6
; where N = 0, 1, 2, 3, 4, 5, 6

RA2MD.INI

ini
[Phobos]
CampaignDefaultGameSpeed=4  ; integer

Note

目前无法直接设置所需的 FPS。需要使用下面的生成器来获取所需的值。生成器支持 10 到 60 之间的值。

点击显示生成器

结果(别忘了把 N 替换成你的游戏速度编号):

ini
[General]
CustomGS=true
;
CustomGSN.DefaultDelay=0
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=1
; -- 或 --
CustomGSN.DefaultDelay=1
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=1
; -- 或 --
CustomGSN.DefaultDelay=2
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=1
; -- 或 --
CustomGSN.DefaultDelay=2
CustomGSN.ChangeDelay=5
CustomGSN.ChangeInterval=3
; -- 或 --
CustomGSN.DefaultDelay=3
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=1
; -- 或 --
CustomGSN.DefaultDelay=3
CustomGSN.ChangeDelay=5
CustomGSN.ChangeInterval=4
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=1
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=2
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=3
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=4
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=5
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=6
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=7
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=8
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=9
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=10
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=11
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=12
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=13
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=14
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=15
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=16
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=17
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=18
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=19
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=20
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=21
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=22
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=23
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=24
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=25
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=26
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=27
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=28
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=29
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=30
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=31
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=32
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=33
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=34
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=35
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=36
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=37
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=38
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=39
; -- 或 --
CustomGSN.DefaultDelay=4
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=40
; -- 或 --
CustomGSN.DefaultDelay=5
CustomGSN.ChangeDelay=0
CustomGSN.ChangeInterval=5
; -- 或 --
CustomGSN.DefaultDelay=5
CustomGSN.ChangeDelay=1
CustomGSN.ChangeInterval=4
; -- 或 --
CustomGSN.DefaultDelay=5
CustomGSN.ChangeDelay=2
CustomGSN.ChangeInterval=3
; -- 或 --
CustomGSN.DefaultDelay=5
CustomGSN.ChangeDelay=3
CustomGSN.ChangeInterval=2
; -- 或 --
CustomGSN.DefaultDelay=5
CustomGSN.ChangeDelay=4
CustomGSN.ChangeInterval=1
    

INI

包含文件

Note

此功能必须通过命令行参数 -Include 来启用。

  • 现在 INI 文件可以使用 [$Include] 小节来包含其他文件(将它们合并到自身中)。
    • [$Include] 小节包括了要读取和包含的文件列表。文件可以直接位于在《红色警戒 2》的目录中或已加载的 MIX 文件。
    • 文件将按照它们定义的顺序添加。每个文件的索引必须在所有包括文件中唯一
    • 包含可以递归嵌套(被包含的文件包含其他文件)。递归深度优先(在包含下一个文件之前,检查当前文件是否包含任何内容)。
    • 当两个文件中存在相同条目时,后读取的那个文件将覆盖前面的值。
    • 此功能可以用于 任何 INI 文件,无论 rulesmd.iniartmd.inisoundmd.ini、地图文件还是其他任何文件。

在任何文件中:

ini
[$Include]
0=somefile.ini  ; file name

Warning

Due to a technical issue, there is a chance that the first line of a included file will be skipped! To prevent this, included files should start with an empty line or a comment.

Warning

当此功能启用后,由于技术不兼容所以 Ares 与此等效的 [#Include] 功能 将被禁用。

段落继承

Note

此功能必须通过命令行参数 -Inheritance 来启用。

  • 现在你可以通过 $Inherits 条目让段落(子节)继承其他段落(父节)的条目。
    • 当一个小节没有设置某个条目的值(或条目缺失)时,游戏将尝试使用父节中的值。如果也没有找到,那么才会使用默认值。
    • 当指定了多个父节时,继承到顺序是 “先到先得”,从左到右查找逗号分隔的父节。
    • 继承可以递归嵌套(父节可以有自己的父节)。递归是深度优先的(在下一个父节继承之前,检查当前父节是否有父节)。
    • 此功能可以用于 任何 INI 文件,无论 rulesmd.iniartmd.inisoundmd.ini、地图文件还是其他任何文件。

在任何文件中:

ini
[PARENT1SECTION]

[PARENT2SECTION]

[CHILDSECTION]
$Inherits=PARENT1SECTION,PARENT2SECTION...  ; section names

Warning

当此功能启用后,Ares 的继承功能(未在官方文档中列出)将被禁用!

Warning

此功能可能显著增大游戏加载时间,具体取决于游戏规则的大小和硬件环境。

游戏内异常处理开关

你可以使用以下命令行参数来开启/关闭游戏主循环的异常处理程序:-ExceptionHandler=boolean,其中 boolean(true|false|yes|no|1|0)

Note

debug 版本中默认情况下游戏内异常处理程序是 关闭 的。

Warning

CnCNet 5 启动器使用主循环异常处理程序进行修复。如果你在使用它时遇到任何问题(崩溃、错误),请先在异常处理程序开启的情况下进行测试。

玩家颜色

无限制遭遇战颜色

  • 现在可以拥有无限数量的遭遇战/多人游戏玩家颜色,而《尤里的复仇》中仅有 8 种,Ares 下仅有 16 种。
  • 此功能必须通过在游戏规则文件的 [General] 小节中设置 SkirmishUnlimitedColors=true 来启用。
  • 启用后游戏将会把 spawner 传递的颜色索引视为 [Colors] 小节中条目的索引。
    • 例如,在原本的规则中,索引 6 将对应颜色 Orange=25,230,255

rulesmd.ini

ini
[General]
SkirmishUnlimitedColors=false  ; boolean

Note

此功能仅在使用 spanwer/外部客户端(例如 XNA CnCNet Client)时使用。在原本的 YR 启动器下使用会产生不良效果。

Warning

例如:由于技术不兼容,启用此功能会禁用 Ares 的 “可定制的玩家颜色” 功能