修复或改进的逻辑

此页面列出了 Phobos 中并不特别重要的所有修复或改进的游戏逻辑。

Bug 修复与各类杂项

  • 修复了游戏模式选项未能正确保存的 Bug。例如以前载入存档后 BuildOffAlly 会被破坏。

  • 修复了载入游戏后由建筑创建的灯光色调无法移除的 Bug(即便灯光建筑被摧毁或出售也会保留灯光色调)。

  • 修复了读取地图时若地图的 Preview(Pack) 节被放置于 Map 之后会导致无法绘制预览图的 Bug。

  • 修复了通过地图触发结果重绘地图光照时建筑光源不正常的 Bug。

    • 出于性能考量,此修复可通过在 rulesmd.ini 中设置 [AudioVisual] -> UseRetintFix=no 来禁用。

  • 修复了被心灵控制的载具部署成建筑后控制权将拥有转移给心灵控制方的 Bug。

  • 修复了使用工程师占领被心灵控制的建筑时无法消除心灵控制链接的 Bug。

  • 移除了占领被视为载具的建筑时触发的 EVA_BuildingCaptured 事件播报。

  • 修复了已经死亡但仍存在于地图上的单位(例如沉没、坠毁、播放死亡动画等)可以再次死亡的 Bug。

  • 修复了隐形的辐射工兵无法部署发射武器的 Bug。

  • 修复了被超时空冻结的单位无法正确抹除的 Bug 并使其不再导致报错。

  • 修复了在触发 Cannot build here.(摆放失败)并取消放置模式后使用切换到建筑栏和防御栏的快捷键无法再次进入放置模式的问题。

  • 修复了拥有 UndeployInto 的建筑在反部署时会播放 EVA_NewRallypointEstablished 的问题。

  • 修复了拥有 Naval=yes 的建筑会忽略 WaterBound=no 而被强制放置在水中的问题。

  • 修复了当设置 Ares 标签 [GlobalControls] -> AllowParallelAIQueues=no 时 AI 战机对接机场的 Bug。

  • 修复了激光绘制代码以允许在所属色绘制模式下使用更粗的激光。

  • 修复了 DeathWeapon 未能正确引爆的问题。

    • 例如 PreImpactAnimAres 功能)这样的某些设置仍然被忽略,未来可能会进行更改。

  • 修复了当驻军建筑的 MuzzleFlashXX 超过 10 后绘制在建筑中心的 Bug。

  • 修复了拥有 Crashable 的 Jumpjet 类单位在被 Locomotor 弹头牵引时被摧毁则无法正常坠毁的 Bug。

  • 修复了 Jumpjet 单位从其他方向开火时无法转向目标的 Bug。

  • 修复了 Jumpjet 单位在坠毁时仍可继续向敌方目标开火的 Bug。

图像 Robot Storm X 中的 Jumpjet 转向目标应用实例

  • 修复了 Jumpjet 单位总是在停止移动时朝向右下方向的 Bug。

  • 修复了 Jumpjet 对象无法使用 Sensors 的 Bug。

  • 允许载具在 OpenTopped 的运输工具中使用 AlternateFLH

  • 改进了生成箱子在地图可见区域的统计分布使其不再具有更高的概率出现在地图边界。

  • 允许使用 255 及以上的 TileSet 而不再会导致东北-西南方向的断桥无法修复。

  • 在任务失败的重开对话框中添加了一个 “载入游戏” 按钮。

图像 Breaking Blue project 中的 Voxel 炮塔侧向偏移

  • 用于科技类型 Voxel 炮塔的 TurretOffset 标签现在接受像 FLH(前,侧,高)那样的值,例如 TurretOffset=F,LTurretOffset=F,L,H,这意味着炮塔的位置可以在三个轴上进行调整。

  • 现在 TurretOffset 可以支持 Shape 载具了。

  • 现在允许 InfiniteMindControlDamage=1 的情况下正常控制 1 个以上的单位。

  • 现在 Fighter 被设为 false 或使用扫射模式(抛射体 ROT 小于 2)的战机每次开火都会正常考虑武器的 Burst 设置而不仅限第一次开火。

  • 现在使用 DeployFire 的载具在明确设置了的情况下会严格遵照 DeployFireWeapon 开火,否则将像原有的行为(如果 Primary 可以开火则使用之,否则使用 Secondary)并且尊重武器的 FireOnce 设置以及开火期间发出的任何停止命令。如果 FireOnce 设置为 true 那么单位在等于武器的 ROF[Unload] -> Rate * 900 的时间内不会接受新的的部署命令。

  • 现在允许拥有 DeployFireWeapon=-1 的步兵在部署后使用所有武器(取决于目标),无论是否处于部署状态。

图像 C&C: Reloaded 中 Nod 吊炮保持了攻击指令的目标

  • 现在载具通过 DeployToFire 部署成的建筑会保留它们的目标。

  • 现在使用 Burst 的武器不会再在绘制激光等效果时使用错误的偏移位置。

  • 现在可以使用 XDrawOffset 在 X 轴上调整动画。

  • 现在 IsSimpleDeployer 的单位只会在(反)部署时播放一次 DeploySoundUndeploySound 而不再是转向和播放 DeployingAnim 期间持续播放。

  • 现在 AI 触发可以识别建筑的加载物为合法的条件。

  • 现在 EWGatesNSGates 可以像 xxGateOnexxGateTwo 那样正常与墙体连接。

  • 修复了 UnitAbsorbInfantryAbsorbGrinding 建筑的交互。现在这些标签将使建筑只接受对应类型的对象。

  • 修复了缺少 No Enter 光标的载具无法进入 Grinding 建筑的问题。

  • 修复了工程师能够在不应进入的情况下进入 Grinding 建筑的 Bug(例如满血的友军建筑)。

  • 现在战机与 Jumpjet 单位正常享受国家设置中的 Speed(Aircraft/Infantry/Units)MultVeteranSpeed 和箱子/AttachEffect 中速度加成效果。

  • 现在 Voxel 与 Shape 载具单位都可以正确使用 Palette 设置的自定义色盘。

  • 现在设置了 RadarInvisible 的地形对象将不再会显示于小地图中。

  • 现在心灵控制指示动画将在被心灵控制的单位解除隐形后正确恢复。

  • 现在弹头 AnimListSplashList 等语句以及地图触发 41 播放动画在... 创建的动画都将默认将适当的所属方设置为动画的所有者。

  • 现在核弹载体(原版上升)与载荷(原版下落)武器在适当的情况下始终(此前只有超级武器设置了 Nuke.SiloLaunch=falseAres 功能) 的情况下载荷武器会)尊重武器上的 Bright 设定

  • 现在,来自 InfantryGainSelfHealUnitsGainSelfHeal 的自愈 pip 图像将会像血条那样尊重单位的 PixelSelectionBracketDelta

  • 修复了被超时空武器攻击的单位其血条在鼠标掠过其上后不会消失的 Bug。

  • 现在使用 SelfHealing 的建筑如果通过自愈恢复了生命值将正确的恢复到未受损状态的图像。

  • 允许在地形对象上使用 Foundation=0x0 而不会导致崩溃且其效果类似于建筑。

  • 现在即便开火者在抛射体引爆前被摧毁抛射体也可以保留开火者的所属方。目前暂不适用于例如 EMP 等某些 Ares 引入的弹头效果。

  • OpenTopped 的运输工具现在确定用于威胁扫描和接近目标的武器范围时会考虑乘客的 OpenTransportWeapon 设置。

  • 现在尾烟动画会继承它们所附着对象(动画,抛射体或战机)的所属方。

  • 现在建筑可以正确的使用副武器设置的激光参数而不再是从主武器读取。

  • 修复了只有所属方但没有开火者的杀伤(例如来自动画弹头伤害)击杀载具时未能正确记录因而无法触发地图事件等问题。

  • 修复了被递归嵌套放置的运输工具被击杀时从第二层运输工具开始击杀来源设置不正确的问题。

图像 75% 透明度的 Shape 绘制示例,前后对比

  • 现在半透明的 RLE SHP 将使用更精确且性能更高的算法进行绘制,不会出现绿色色调和条纹。可以通过 rulesmd.ini -> [General] -> FixTransparencyBlitters=no 来禁用。

    • 目前仅适用于 Z-aware 绘图模式。

  • 修复了带有 Inviso=true 的抛射体在与 Airburst=yes 或拥有 EMEffect=true 的弹头结合使用时可能出现的精度问题。

  • 修复了 MakeInfantry 逻辑在 BombClass(伊文炸弹)上导致生成 Neutral 阵营步兵的 Bug。

  • 修复了轨道炮粒子对于具有非默认 TargetCoordOffset 的建筑或在桥上强制开火时被绘制到错误坐标的问题。

  • 修复了建筑 TargetCoordOffset 未将开火角度和目标指示线考虑在内的问题。

  • 在单人任务中,玩家现在可以看到盟友所属方的隐形对象。

  • 修复了具有较长建造动画的建筑在建造过程中会绘制几帧 BibShape 的问题。

  • 现在带有 Tiled=yes 的动画也支持 CustomPalette 了。

  • 尝试避免单位在更改所属方(心灵控制、超时空监狱等)后保留之前的命令(攻击,回收,进驻等)。

  • 修复了地图中预先放置的建筑也会创建建筑 NaturalParticleSystem 的问题。

  • 修复了 TiltCrashJumpjet=no 时 Jumpjet 单位无法视觉上倾斜或翻转的问题。

  • 单位的 AlternateFLH 条目数量不再被限制(可以超过 5 个)。

  • 现在生成碎片的弹头使用 MaxDebris 作为实际的碎片数量上限而不再是 MaxDebris - 1。

  • 如果 PrimarySecondary 都可以攻击空中目标(抛射体具有 AA=true),现在可以选用 Primary 而不再总是强制使用 Secondary。这也适用于 IsGattling=true,奇数与偶数的 WeaponX 分别对应 PrimarySecondary

  • 现在 IsGattling=true 在主要武器(奇数 WeaponX 序列)无法对当前目标开火(受制于 Armor、CanTarget(Houses)、护盾等)时可以更换到次要武器(偶数 WeaponX 序列)。

  • 修复了 LandTargeting=1 未能阻止瞄准陆地上的地形对象(树木等)的问题。

  • 修复了 NavalTargeting=6 未能阻止瞄准水上空置单元格或水上地形对象(树木等)的问题。

  • 修复了 NavalTargeting=7LandTargeting=2 导致在陆地上仍然使用 Primary 武器来瞄准地形对象(树木等)的问题。

  • 修复了没有 C4=true 的步兵即便可以正常进入水中但当被空投、超时空传送等情况下在水中会死亡的问题。

  • 允许在战役中使用一个与 [MultiplayerDialogSettings] -> MCVRedeploys 不同的新开关设置重部署 MCV。

  • 修复了拥有 UndeploysIntoUnsellable=noConstructionYard=no 的建筑无法正常出售的问题,需要设置 UndeploysInto.Sellable=true。并且复原了在 UndeploysInto 的建筑被出售时应有的 EVA_StructureSold 播报语音。

  • 修复了 WaterBound=true 且拥有 UndeploysInto 的建筑在反部署时无法正常设置载具移动位置的问题。

  • 建筑上的 CanC4=false 会导致其受到原始伤害非 0 但因 Verses 等伤害修正机制降至 1 点以下的杀伤时强制造成 1 点。CanC4.AllowZeroDamage=true 可以禁用这一行为。(经 Verses 等机制修正计算完的)负伤害将完全绕过此检查,无需额外启用。

  • 主武器使用 AG=false 抛射体的的建筑现在在选中时将正常显示攻击光标

  • 现在拥有 AA=true 抛射体的武器可以通过设置 AAOnly=true 来使其仅可对空中目标进行攻击。这很有用:毕竟 AG=false 只能防止瞄准地面单元格(并且无法在不破坏现有行为的情况下更改)而且它适用于无法使用 LandTargeting 的情况。

  • 现在 OpenTopped=true 且拥有大于 1 的 Burst 的武器的运输工具其载员开火不再由于连发的序数而改变侧向偏移位置。

  • 修复了伪装的步兵在必要时没有使用自定义色盘来绘制伪装图像的问题。

  • 现在当伪装闪烁时伪装的步兵将会根据伪装的类型和所属方显示对应的军衔。原始单位的军衔始终显示给观察者和 [General] -> DisguiseBlinkingVisibility 设置所支持可见伪装闪烁的当前玩家。

  • 地图上预先放置的超级武器类建筑在游戏开始时不再显示 SuperAnimThree

  • 现在 SpySat=yes 可以通过建筑加载物获得。

  • 现在 AI 玩家可以像人类玩家一样同时建造 Naval=trueNaval=false 的载具。

  • 修复了 Jumpjet 单位在开始移动时(当初始部队是 Jumpjet 单位并命令去移动时可以观察到)会突然面向右下方向的 Bug。

  • 现在拥有 Palette 设置的对象可以正常根据超级武器、地图重绘光照行为等调整其色调。只要它们属于使用了任何配色方案的所属方而不仅限于 [Colors] 列表前半部分那些。

  • 现在使用 AltPalette 的动画会被重映射到其所属方的配色方案而不再是被列出的第一个配色方案并且不再绘制于黑幕之上。如果动画没有所属方那么将会使用 [AudioVisual] -> AnimRemapDefaultColorScheme 指定的配色方案,它同样默认为 [Colors] 中被列出的第一个配色方案。

    • 如果将 AltPalette.ApplyLighting 设置为 true 那么地图光照同样可以对它们生效。

  • 修复了 DeployToFire 未考虑 DeploysInto 建筑的摆放规则并导致该功能无法与 WaterBound 建筑一起正常工作的问题。

  • 修复了 DeployToFire 在当前无法部署时未能重新计算开火者在陆地上所处位置的问题。

  • 现在可以通过设置 Arcing.AllowElevationInaccuracy=false 来修复 Arcing=true 抛射体在有高程影响下的精度问题。

  • 现在如果可能的话墙类覆盖物将会使用 artmd.ini 中使用 Palette 指定的自定义色盘进行绘制。

  • 在拥有 Ammo 的单位上设置 ReloadInTransport 为 true 将允许在运输工具内的单位也根据 ReloadEmptyReload 计时器进行重新装填。

  • 现在可以通过在弹头上将 ApplyModifiersOnNegativeDamage 设置为 true 来为负伤害启用 VersesPercentAtMax

  • 现在飞行单位上所附加的动画会紧随其父单位之后立即更新其图层,如果在同一图层上它们将始终绘制在父单位之上。

  • 修复了 PoweredPoweredSpecial 的建筑在被敌人占领时其受电力影响的动画不再更新的问题。

  • 修复了有关于导弹目标设置不正确的问题。

  • 修复了在尝试读取战役地图的 [Header] 时的 EIP 00529A14 问题。

  • 单位在 EMP 状态下不再会旋转炮塔。

  • Jumpjet 单位在 EMP 状态下不再会浮动。

  • 移除了 Jumpjet 单位坠毁到建筑上时的减速效果。

  • 修复了 AmbientDamage 在与 IsRailgun=yes 共用时会被高度变化切断的问题。

  • 修复了轨道炮和火焰粒子被高度变化切断的问题。

  • 修复了超时空单位(例如 [CLEG])的僵直计时器在载入游戏后被清空的问题。

  • 修复了超时空运动模式的单位无法在斜坡上视觉性倾斜的问题。

  • 修复了火箭的影子位置问题。

  • 修复了使用 Teleport、Tunnel 或 Fly 运动模式的单位无法像其他运动模式那样视觉翻转的问题。

  • 现在战机在建筑上停靠时尊重 [AudioVisual] -> PoseDir 作为默认设置而不总是朝向北方,或者在地图预置建筑上面向建筑的方向。

  • 现在生成的子机在降落时会与其母舰的朝向对正。

  • 修复了在路径点中为间谍/工程师/可驻军步兵设置目标为可渗透/占领/驻军的建筑执行行为时会触发 被...进入 条件的 Bug。

  • PowerUpN 建筑动画现在可以使用 PoweredPoweredLight/Effect/Special 类的标签。

  • 修复了在选中 DeploysInto 单位上显示光标时可能引起的不同步问题。

  • 跳过工厂类建筑反部署时的集结线绘制。

  • 现在染色效果无论对象位置如何都会正确对 Shape 载具、所有类型的战机以及建筑动画生效。

  • 现在被铁幕或力场护盾保护的对象将始终使用正确的染色效果。

  • 位于无效地图坐标中的对象不再用于初始视图和 AI 基地中心计算。

  • 现在拥有 DecloakToFire=false 武器的单位和建筑在瞄准和装填时会隐形。

  • 拥有 Sensors=true 的单位将不再解除友军建筑的隐形。

  • 现在具有大范围的目标检索和大 CellSpread 的弹头爆炸范围可靠的包含了空中单位。

  • 现在如果被指定那么覆盖物可以正常读取并使用它们在 artmd.ini 条目中的 ZAdjust

  • 现在当开火者和目标都在桥上时拥有 AA=true 抛射体的武器可以正确的对空中单位射击。

  • 修复了伪装单位在目标具有自定义调色盘时未使用正确调色盘的问题。

  • 现在建筑加载物将尽可能一致地使用与加载物 PowersUpToLevel 相对应的建筑 PowerUpN 动画设置。

  • 现在潜地单位在下潜或正在潜地移动时不再允许执行例如发射武器或 IsSimpleDeployer 那样的部署功能,现在它们会先像运输工具释放乘客那样先钻出地面。

  • 可以通过将 [AI] -> EnablePowerSurplus 设置为 true 来复原 [AI] -> PowerSurplus(默认为 50)以决定 AI 玩家将尽力保持的富余电力值。若额外设置项 [AI] -> PowerSurplus.ScaleToDrainAmount 设为高于 0 的值则使得电力盈余值 × 当前负载 / PowerSurplus.ScaleToDrainAmount

  • 现在当 [GlobalControls] -> DebugPlanningPaths=yes 时在单人游戏模式中所有受玩家操作的单位都会显示路径点规划的路径。

  • 修复了 Temporal=true 弹头在攻击 Slaved=true 步兵时可能崩溃的问题。

  • 修复了一些运动模式(Tunnel、Walk、Mech)在移动过快时卡住的问题。

  • 现在使用 MakeInfantryUseNormalLight=false 并使用单位色盘绘制的动画将正常应用单元格的亮度变化。

  • 移除了 InfDeath=9 的弹头对 Jumpjet 步兵只能造成 0 伤害的效果。

  • 修复了核弹和心灵支配的光照等级未应用于战机类别的问题。

  • 禁用了无武器单位的索敌。

  • 现在由 AirburstWeapon 创建的抛射体会保留完整 WeaponType 并且可以应用辐射等效果。

  • 修复了受损的战机除非先降落于 UnitReload=true 的停靠点上否则不能修复的问题。

  • 现在可以通过在 lunarmd.ini 中将 [General] -> ApplyLunarFixes 设置为 true 来切换某些全局地块索引(ShorePiecesWaterSetCliffSetWaterCliffsWaterBridgeBridgeSetWoodBridgeSet)以解析月球场景。注意如果不修复例如 WoodBridgeTileSet 指向 TilesInSet=0 的地块这样的隐患就启用本功能将在游戏中引发问题。

  • 修复了步兵在水中显示 SecondaryFireSecondaryProne 序列而不是 WetAttack 的问题。

  • 修复了目标为友军单位且 AttackFriendlies=true 的对象每帧重置目标的问题,尤其是 AI 拥有的建筑。

  • 现在 <Player @ X> 可以直接用于遭遇战和多人地图上预先放置对象的所有者。

  • 现在地图预置载具的跟随索引已被明确限制在地图 [Units] 列表中并且不再受到无法创建的载具或创建的载具具有其他载具作为初始乘客的情况所干扰。

  • 修复了 Drive/Jumpjet/Ship/Teleport 运动方式在退出 piggybacked 接口时无法激活的问题。

  • 停止命令(默认为 [S])的行为现在更加正确:

    • Jumpjet 单位不再进入空闲站立状态。

    • 科技类型现在可以停止移动攻击任务。

    • 科技类型现在可以停止区域警戒任务。

    • 战机不再两次寻找机场并重叠。

    • 战机在返回前不再在空中端在停留

    • 拥有 AirportBound=no 的战机不再会继续向前移动

    • 科技类型在桥上时不再无法停止。

    • 科技类型在桥下时仍然无法停止移动,但可以停止其他任务。

  • 现在作为小队成员的空中单位将使用 2D 距离而不是 3D 距离来判断是否达到任务目的地,以防止任务卡住且无法继续的问题(例如 Jumpjet 单位停在建筑上时)。

  • 现在单位的 Speed 设置接受小数。内部解析的值被限制为最大 100,乘以 256 并除以 100,结果(此时转换为整数)被限制为最大 255,从而获得有效内部速度值范围 0 到 255,例如以 leptons 为单位每帧移动的距离。

  • 现在 AirburstWeapon 可以支持绘制 IsLaserIsElectricBoltIsRadBeam 等视觉效果并允许粒子武器正常创建 AttachedParticleSystem 的粒子系统。

  • 现在潜地运动方式享受来自升级、AttachEffect 等所有来源的速度加成。

  • 战机现在会根据其 MovementZoneSpeedType 在移动到不同地形上时表现得像预期一样。特别是,这修复了原版中战机被命令移动到水面却将移动命令改为附近的岸边这一异常行为。

  • 修复了寄生单位在错过目标且其先前单元格被占用时会直接消失的 Bug。

  • 防止拥有会导致问题的运动方式的单位进入坦克碉堡。

  • 修复了一个单位被超时空传送超武传送到一个不可碾压的单位上并自爆时会在原地留下空气墙的问题。

  • 修复了单位被摧毁仍会遗留反隐形探测效果的问题。

  • FreeUnit 使用单位自己的 SpeedType 来寻找生成位置。

  • 修复初始船只可能生成在陆地上的 Bug。

  • 建筑通过 UndeploysInto 反部署时使用目标载具的 SpeedTypeMovementZone 来决定能否向目标单元格移动。

  • 修复了两栖矿车无法自动返回水上 WaterBound 矿场的问题。拥有 Teleporter=true 的单位不受影响,因为它们只要矿场的 Naval 为 false 就可以正常工作。

  • 单位现在不会再从正在建造的工厂中驶出,并且将不再会被卡在工厂内。

  • 修复错误脱引用导致的问题(例如,如果单位隐形/进入运输工具则无法自此前发射的子机/安置的 C4 炸弹/发射的抛射体获得经验)。

  • 修复了一个如果 IsSonic=true 的波绘制超过一定距离会导致游戏崩溃的问题。

  • 占地面积超过 1x1 的建筑现在可以正常回收子机。

  • 现在那些本应跟随单位当前开火坐标更新位置的 EBolt 效果(默认指由载具发射的)能够正确的对超过 1 个同时创建的 EBolt 效果生效。

  • 修复了 FireAngle 在某些情况下未能正常工作的问题。

  • 修复了 MovementZone=AmphibiousDestroyerMovementZone=AmphibiousCrusher 的单位无法进入水上建筑的问题。

  • 修复了航空母舰在桥下时无法找到恰当攻击位置的问题。

  • 修复了空天母舰靠近高架桥梁时无法攻击的问题。

  • 修复了航空母舰在桥上无法回收子机的问题。

  • 修复了 Jumpjet 在桥梁上方时其影子残留在地面的问题。

  • 修复了激光、EBolt、辐射波在 FlakScatter=trueInviso=true 抛射体上不不跟随散布的问题。

  • 修复了治疗武器无法自动获取到空中目标的 Bug。

  • 允许了 Voxel 抛射体使用 AnimPaletteFirersPalette

  • 修复了 AI 会找实际无法抵达的坦克碉堡、生化反应炉等建筑作为目标而导致卡住的问题。

  • 修复了当陆地单位请求登船时第一个呼叫运输船的乘客不会登船的问题。

  • 修复了 EnterBioReactorSoundLeaveBioReactorSoundEnterGrinderSound 在单位上微观设定无效的 Bug。

  • 修复了矿车被 IsLocomotor=yes 的弹头抬起也不会停止倒矿状态且无法继续正常倒矿的 Bug。

  • 修复了单位在斜坡上倾斜角度过大的问题。

  • 修复了步兵通过路径点连续进入两个载具等行为会产生空气墙的问题。

  • 修复了单位超时空进入桥上的运输载具会产生空气墙并可能导致游戏卡死乃至崩溃的问题。

  • 修复了超时空移动的 MCV 会引发 Reconnection Error 的问题。

  • 修复了使用悬浮运动模式的载具被 IsLocomotor=yes 弹头抬起时显示的错误阴影。

  • 修复了当步兵进入一个已被移除但并未真正死亡的可驻军建筑时导致的游戏崩溃问题(EIP:7FB178)。

  • 修复了当子机已被移除但并未真正死亡时导致的游戏崩溃问题。

  • 分离了 AirstrikeClass 中攻击者/战机与目标的指针以避免错误覆盖问题。

  • 修复了建筑总是被染色为空袭所属方颜色的 Bug。

  • 修复了 AI 玩家在消灭一家敌人或敌人结盟后不再搜索新敌人的问题。

  • 修复了步兵进入建筑时忽略 PassengersSizeLimit 的 Bug。

  • 修复了通过快捷键/底边栏按钮部署时不播放 VoiceDeploy 的问题。

  • 修复了船只可以在高架桥上行驶的 Bug。

  • 解除了覆盖物最多 255 个的数量限制。

  • 修复了空袭引导激光高打低时会截断的问题。

  • 精英单位不再默认获得分散而是受 SCATTER 升级能力控制。

  • ElectricAssault=yes 的副武不再会无条件地攻击己方 Overpowerable=yes 的建筑。

  • 步兵类现已支持使用 IsGattling=yes 开启盖特逻辑

  • 修复了范围伤害在桥上/地面引爆时无法影响相对情况即在地面/桥上的对象的问题。

  • 修复了 DamageSelfAllowDamageOnSelf 对空军无效的 Bug。

  • 修复了建筑在被工程师修复后受损粒子不会移除的 Bug。

  • 修复了 Voxel 碎片 TrailerAnim 生成位置不正确的问题。

  • 修复了建筑类目标 OpenToppedWarpDistance 计算错误的 Bug。

  • 修复了 MovementZone=Fly 的矿车无法手动进入矿场的问题。

  • 修复了 Locomotor=Jumpjet 的矿车出厂后不会自动去采矿的问题。

  • 修复了 Locomotor=Jumpjet 的矿车会因为手动进入矿场而交叠并导致游戏崩溃的问题

  • 修了拥有 Spawned 的战机会在子机发射器单位处于 EMP 状态时飞向地图边界的问题。

  • 现在当一个拥有 Vertical=true 的抛射体被战机类发射时将会正常下坠。可以通过在抛射体上设置 Vertical.AircraftFix=false 来关闭这一行为。

  • 工程师在建筑无需维修时可以正常进入(也可以通过按住 [Alt] 强制进入)。

  • 人类玩家控制的间谍在攻击建筑时不会强制执行其他任务。

  • 如果所有武器的弹头都没有 BombDisarm=yes 则工程师将不再使用相应的鼠标动作。

  • 修复了步兵使用 DeployFireWeapon 时的异常情况。

  • 修复了即便 OpenTopped 载具被超时空弹头冻结其乘客的超时空武器攻击也不会停止的 Bug。

  • 修复了 AI 的载具在隐形时会乱跑的 Bug。

  • 修复了水下单位在被地图触发修改所属后总会朝向左方的 Bug。

  • 修复了可驻军建筑在按部署键释放全部驻兵后绘图不会刷新的 Bug。

  • 修复了周围没有空地时释放驻军会导致它们消失的问题。

  • 修复了攻击者被 Temporal=yes 弹头作用时运动模式弹头不会停止工作的 Bug。

  • 修复了 IsLocomotor=yes 弹头会导致高架桥上的悬浮载具无法选中且无法被伤害的 Bug。

  • 修复了非载具单位使用运动模式弹头时停止开火也不会停止工作的 Bug。

  • 修复了悬浮载具在桥上被摧毁会沉没(而不是爆炸)的 Bug。

  • 修复了当被选中的单位武器正在 CD 时可以无条件对目标使用 Attack 光标的问题。

  • Speed=0 或单位由于 MovementRestrictedTo 导致无法移动,载具不再可以攻击武器射程外的目标。Area GuardHunt 任务将不会生效。

  • 修复了地图文件中内置了某单位时其炮管动画数据会被炮塔动画数据错误覆盖的问题。

  • 修复了在较大的地图中由于寻路节点缓冲区过小而引发的寻路崩溃(EIP 0x42A525、0x42C507、0x42C554)问题。

  • 拥有 BalloonHover=trueIsSimpleDeployer=trueDeployToLand=false 的单位现在在悬停时不会强制着陆。

  • 如果当前处于空中的单位通过 DeployingAnim 播放带有 Shadow=true 的动画则动画的影子现在会绘制在地面上。

  • DeployingAnim 现已支持 Normalized=trueReverse=true。注意:即便不是 LoopCount > 1 的情况 Reverse 也会使用 LoopEnd 而不是 End 来控制帧数。

  • DeployingAnim 使用单位绘制方式时现可跟随单位一起染色。

  • 修复了 Jumpjet 单位在空中时无法生成导弹子机的问题。

  • 修复了所谓的高等路径学。

  • 修复了 Jumpjet 载具在指定射程内目标时无法正确停止的问题。

  • 修复了 Jumpjet 步兵在指定超出射程的目标时停止不正确的问题。

  • 修复了 Jumpjet 步兵隐形时依然绘制影子的问题。

  • 修复了单位不执行停靠命令的情况下也会前往停靠位置的问题。

  • 修复了被混乱的 Jumpjet 载具无法正确停止的问题。

  • 修复了步兵占据包含树木的单元格会导致该单元格对其他所属方不可通行的问题。

  • 修复了单位在伪装成地形对象或覆盖物时铁幕与空袭染色强度绘制错误的 Bug。

  • 修复了 AI 在建筑受到的伤害即便来自友军单位或不大于 0 点也依然进入防御状态的问题。

  • 如果 [General] -> FallingDownTargetingFix 设为 true 则所用武器 AA=yesAG=no 的单位将会主动攻击坠落中的单位(例如伞兵)。

  • 修复了铁幕/自定义染色无法将 SHP 有炮塔载具染色的问题。

  • 重新激活无效的 2、53 和 54 号触发条件。

  • 修复了载具落到有步兵的单元格上时会将格内所有对象全部移除的 Bug

  • 修复了建筑拔起过程中发生所属变更会跳过建造阶段且有时无法正确清除状态的问题。

  • 修复了处于可视地图范围外的预置战机某些情况下被错误标记为坠毁的问题。

  • 修复了 MovementZone=Subterannean 的矿车无法跨越封闭的水域、悬崖等区域找到停靠点的问题。

  • 修复了指向某个某个单位的部分效果在该单位变更所属时未能正确清除的问题。

  • 允许在战役模式中由其他被玩家控制的所属方拾取到的开全图工具箱效果生效。

  • 修复了原版脚本会忽略 Jumpjet 单位的问题,需要通过 [General] -> AIAirTargetingFix=true 来启用。

  • 修复了海军舰船即便在空中被摧毁也会在天上沉没的 Bug。

  • 修复了 MPDEBUG 计时器在 debug 信息关闭可见时依旧显示的问题。

  • 修复了单位距离目标小于 MinimumRange 时会前往最远距离的问题。

  • 修复了由触发结果创建的单位即便拥有 Trainable=false 也可以被升级的 Bug。

  • 修复了即便在没有可用的空余机位时 AI 也仍会尝试生产战机的 Bug。

  • 修复了非维修单位需要能够反隐才能攻击友军隐形单位的问题。

  • 修复了导弹在爬升过程中不考虑目标高度的问题。

  • 修复了当一个物体更新时被移除会导致全局容器中下一个物体被跳过的 Bug。

  • 修复了 AI 会对友军所属方产生愤怒而导致行为异常的问题。

  • 修复了没有敌人的 AI 寻找敌人时会使用数组中第一个所属方而非空间上最近者的问题。

  • 修复了武器选取规则未检查副武弹头是否拥有 IsLocomotor=yes 的问题。

  • 修复了拥有 IsLocomotor=yes 的弹头可攻击坦克碉堡内载具目标的问题。

  • 修复了矿车受 Passengers/DeployFire 影响而无法倒矿的问题。

  • 修复了矿车离开坦克碉堡后无法移动的问题。

  • ProductionAnim 现在添加了对 Factory=InfantryTypeFactory=BuildingTypeConstructionYard=false 的建筑的适配。IdleAnim 也会在其播放期间停止播放。

  • 修复了被选中单位的常规心控被永久心控和心灵支配超武替换时丢失选中状态的 Bug。

  • 修复了单位被 AreTeamMembersRecruitable=false 的小队招募过则即便原小队解散也无法再被其他小队招募的 Bug。

  • 已允许通过 [General] -> DefaultToGuardArea 设置 DefaultToGuardArea 的全局默认值。

  • 修复了超时空传送超武会把单位传送到 0,0 单元格的 Bug。

  • 修复了单位在移动攻击一个它不能攻击的目标时会移动到对方脸上的 Bug。

  • 修复了 56 和 57 号 AI 动作脚本强制发射注册索引 3 和 4 的超武的 Bug。

  • 现在设置了 NeedsEngineer=true 的建筑在从属于 MultiplayPassive=true 的所属方时其威胁值将无视 ThreatPosed 设置始终被视为 0。

  • 图像与 Wall=true 的覆盖物重叠的载具上不再会显示出售光标也不再能被出售。

  • 修复了伪装成树的载具错误显示出军衔(能打人的精英树)的问题。

  • 修复了 AI 常规索敌也会瞄准可驻军建筑的问题。

  • 修复了 Jumpjet 单位无法正确结束移动任务的问题。

  • AI 小队的驻军脚本现在可以立即重新计算目标而不是在改变目标前先尝试进驻已经不再可进驻的建筑。

  • 修复了 DeploysIntoUndeploysInto 会让受损单位失去 1 点生命的 Bug。

  • 修复了 Jumpjet 单位在开始下一个任务前必须先停止移动的问题。

  • 修复了空降到桥上的单位会由于降落过程中桥梁被毁而在着陆后死亡的问题。

  • 现在 Voxel 绘制代码会跳过那些不可见组件(变换矩阵主对角线全为 0,意味着所有轴上的缩放比例全为 0%)的绘制,因而提高了一些 Voxel 的绘制性能。

  • 修复了载具被 IsLocomotor=yes 的弹头丢下时会播放坠毁语音和音效的 Bug。

  • 修复了反击行为会让单位在多个相同威胁值的目标间不断切换的问题。

  • 修复了当 Crashable=yes 的科技类型在空降时被于半空中摧毁,它会落地但不会死亡的 Bug。

  • 修复了 NotHuman=yes 的空降步兵在空中被击杀时会无视 Crashable=no 坠落到地面的 Bug。

  • 修复了单位使用 Locomotor=Jumpjet 的运动模式弹头牵引拥有 BalloonHover=yes 的目标时可能使其从自己头顶下落的问题。

  • 修复了由于 Strength 值低于 RepairStep 而在维修时引发的 EIP#007120F7

  • 修复了非超时空矿车在矿区无矿后即便矿石已重新生成也不会恢复工作的 Bug。

  • 修复了 LocomotorFlyJumpjetRocket 的单位在地图外坠毁时未能彻底清除并且永久占用生产槽位和计入单位上限的问题。

  • 修复了一个由于 GapGeneratorSpySat 交互导致黑幕状态不一致而引发的不同步问题。

  • 现在矿车将不再由于矿物枯竭而退出 Harvest 任务并且会定期尝试返回工作。

  • 修复了步兵进入闲置状态时的错误任务切换。

  • 修复了拥有 BalloonHover=yes 的单位在设置目的地和分配移动命令时错误考虑了地面因素的 Bug。通过 [General] -> BalloonHoverPathingFix=true 来启用该修复。

  • 修复了单位在 Limbo 状态下死亡时侧边栏不会刷新的问题。

  • 启用了在非战役模式下游戏内播放电影的功能(例如触发结果 100 在小地图窗口播放影片177 在小地图窗口播放影片(游戏暂停)...)。

  • ElectricAssault 武器现在可以自动索敌盟友的可过载防御建筑。

  • 修复了处于 Area Guard 任务中的单位消灭目标后重新获取目标所用时间明显长于其他任务的问题。

  • 纯视觉效果的动画和粒子不再包含在帧 CRC 生成中并因此不会受多人游戏中玩家间同步检查的限制。

  • 修复了低空起飞/降落的物体会受到两次伤害的 Bug。

  • 允许了 AuxBuilding 计入建筑加载物。

  • 修复了 Voxel 抛射体和动画的光照问题。

  • 修复了科技类型在隧道中变更所属方会导致卡住的 Bug。

  • 复原了点击底边栏执行 Deploy 时播放 [AudioVisual] -> DeploySound= 音效的《泰伯利亚之日》原有行为。

修复或与其他扩展的交互

  • 现在由 EMPulse 超级武器(Ares 功能)发射的武器将完全遵照发射建筑的 FLH 设置。

  • 现在由 EMPulse 超级武器(Ares 功能)发射的武器在没有 EMPulse.TargetSelf=true 的情况下也可以正常产生辐射。

  • 现在由 EMPulse 超级武器(Ares 功能)发射的武器遵守 Floater 与 Phobos 添加的 Gravity 设定

  • 拥有 Hover 运动模式的 IsSimpleDeployerDeployToLand 的单位在部署后不再会卡住或无限播放移动音效。

  • Convert.Deploy 转换的目标单位由于 SpeedType 等原因无法移动到目标单元格时将会显示 NoDeploy 光标。

  • 现在所有单位转换形式(包括 Ares 的)在使用超时空 Locomotor 的单位处于僵直状态被转换时可以正确的更新传送延迟。

  • 现在所有单位转换形式(包括 Ares 的)在移动单位的类型被转换时可以正确更新 MoveSound

  • 现在所有单位转换形式(包括 Ares 的)在运输工具被转换时可以正确更新乘客的 OpenTopped 状态。

  • 修复了 Ares 引入的一个当 SpecialAnim 播放且建筑被出售、删除或摧毁时它的 ActiveAnim 会被错误地恢复的问题。

  • 修复了 Ares 的超时空监狱武器在绑架移动载具时会留下永久放置统计(空气墙)的问题。

  • 在解析 TagsTaskForces 时抑制 Ares 的 swizzle 警告(通常以 [Developer fatal]Pointer 00000000 declared change to both 开头)。

  • 修复了训练所(Ares 功能)在由战车工厂所生产载具的初始载员(Ares 功能)上不起作用的问题。

  • 修复了 Ares 的初始荷载未为触发行为生成的载具创建的问题。

  • 接管了 Ares 的 AlphaImage 重绘逻辑,使其用于建筑、静止单位和无炮塔单位时不会每帧重绘,以减少其造成的卡顿。

  • 修复了 Ares 触发条件 75/77 有时判定不成功的问题。

  • 修复了某些单位部署变形后崩溃的问题。

  • 修复了 AlphaImage 在单位进入隧道后会遗留在隧道口的 Bug。

  • 修复了 Ares 的 Convert.Deploy 会在单位转向或移动中反复触发的问题。

  • 游戏现在在保存时会自动将存档文件名从 SAVEGAME.NET 改为 SVGM_XXX.NET(此处 XXX 为数字)以防止在 Phobos 与 XNA CnCNet Client 共用且保存过于频繁时偶尔覆盖存档文件。

    • 支持从 SVGM_000.NETSVGM_999.NET 的 1000 个文件。当达到上线后游戏将会覆盖此前最新的存档文件。

    • 如果是新游戏,在首次保存前会清理先前存在的 SVGM_XXX.NET 文件,否则游戏会查找编号最大的 SVGM_XXX.NET 文件并在可行的情况下递增编号。

    • 游戏还会在保存时自动将 spawn.ini 复制到存档文件夹中的 spawnSG.ini

    备注

    上述行为复刻并兼容了 XNA CnCNet Client 的多人游戏存档功能支持。

    备注

    目前此功能仅在使用支持了多人游戏存档后的 YRpp Spawner 版本(同时配合 XNA CnCNet Client) 时才有用。

  • 修复了 Ares 的单位转换不会通过 FireAngle 重设炮管方向的问题。

  • 修复了 Ares 的 [WarheadType] -> Flash.Duration= 无法覆盖维修武器闪光效果的问题。

  • 修复了拥有 CloningFacility=trueWeaponsFactory=true 的建筑可能克隆多个载具并卡住的 Bug。

  • 修复了 Ares 引入的渗透敌方重工后 UndeploysInto 建筑 AltCameoAltCameoPCX 不显示 Bug。

  • 修复了单位由于非概率原因无法在被摧毁时生成生还者的问题。

  • 修复了载具生还者在运输工具被摧毁时生成在错误位置的 Bug。

  • 修复了使用 Ares 废墟逻辑的 Explodes=yes 建筑会导致其所有者无法正常败北的 Bug。

  • 修改了一个会阻止 OpenTopped 的运输工具在隐形状态下开火的 Ares 钩子。

  • 修复了一个极易崩溃且导致寄生者特定条件下会被高频重设至受害者位置这一错误交互的 Ares Bug。

  • 修复了 Ares 的单位投放超级武器投放的建筑物的初始朝向。

  • 修复了 OpenTopped=yes 的运输工具移动到乘客 MovementZone 所不支持的区域时由初始载员逻辑或勾选了 预装载小队 的作战小队创建的乘客无法开火的 Bug。

  • 修复了有 AlphaImage 的单位转换为无 AlphaImage 的类型,或有 AlphaImage 的动画通过 Next 更改为无 AlphaImage 的类型后读档会导致游戏崩溃的 Bug。

  • 修复了单位的 BombSight 在类型转换时不会被正确更新的问题。

  • EVA.Tag 已经支持在国家层面设置并且 EVAIndex 不再在读档后重置。

  • 现在 DisableWeapons.Duration 会使 Gattling=yes 的速率降低并停止播放音效,不再干扰目标获取并且可以和 Phobos 的 OpenTopped.CheckTransportDisableWeapons 共用。

  • 允许了 Ares 的 SW.AuxBuildingsSW.NegBuildings 计入建筑加载物。

新增的全局设定

备注

这个类别下列出了所有全局生效而无需在任何特定对象上定义的功能。

允许部署被心控的 MCV

在原版中你不能将一个被心灵控制的载具部署为 ConstructionYard=true 的建筑。现在你可以自定义了。

rulesmd.ini

[General]
AllowDeployControlledMCV=false   ; boolean

超时空闪光动画的自定义与改进

  • 现在可以通过设置 [General] -> ChronoSparkleDisplayDelay 来自定义被冻结的对象上创建 [General] -> ChronoSparkle1 动画之间的帧间隔。

  • 默认情况下对于 MaxNumberOccupants 大于 0 的建筑,超时空闪烁动画会在每个 MuzzleFlashX 坐标处显示。现在这种行为可以自定义,并且支持大于 10 的 MuzzleFlashX 索引。

    • [General] -> ChronoSparkleBuildingDisplayPositions 可以设置闪烁动画为在建筑上闪烁 (building)、在当前驻军的枪口坐标闪烁 (occupants)、所有驻军的枪口闪烁坐标 (occupantslots) 或这些中任意组合的情况下显示。

      • 如果列出了 occupantsoccupantslots 而没有 building,那么在建筑没有任何驻军或其 MaxNumberOccupants 小于 1 的情况下仍会在建筑上显示一个超时空闪烁动画。

  • 现在显示在建筑自身的超时空闪烁动画位于其正中心而不再是其最顶端单元格的中心。

rulesmd.ini

[General]
ChronoSparkleDisplayDelay=24                         ; integer, game frames
ChronoSparkleBuildingDisplayPositions=occupantslots  ; List of chrono sparkle position enum (building | occupants | occupantslots | all)

升级工具箱增强

对升级工具箱逻辑提供了以下改进:

  • 优化了随机算法使得随机生成的升级工具箱在可见地图区域内的统计分布更加均匀。

  • 现在你可以通过将 [CrateRules] -> CreateOnlyOnLand 设为 true 来让升级工具箱的生成区域仅限陆地。

  • 现在可以通过 UnitCrateVehicleCap 来设置玩家在单位箱子转为给予金钱之前可以拥有的载具数量上限。负数将禁用上限也就是永久生成载具不会达到一定数目后转为金钱。

  • 现在尊重 FreeMCV 设置并且可以用来禁止玩家拾取升级工具箱且拥有足够的资金单然而没有建筑或 BaseUnit 载具时强制将内容选择为 [General] -> BaseUnit 中的单位。

    • 现在可以通过 FreeMCV.CreditsThreshold 自定义先前硬编码需要高于的资金阈值。

rulesmd.ini

[CrateRules]
CrateOnlyOnLand=false          ; boolean
UnitCrateVehicleCap=50         ; integer
FreeMCV=true                   ; boolean
FreeMCV.CreditsThreshold=1500  ; integer

在 art 中自定义单位图像

  • art INI 中的 Image 标签不再局限于动画类型和建筑类型,而是作用于所有科技类型(步兵类型、载具类型、战机类型、建筑类型)。

  • 这个标签指定替代科技类型图像的文件名(无扩展名)。如果 Image 中的名称也是 art INI 中的一个条目,那么不会从中读取任何标签

  • 此功能默认关闭以保持对 YR 原行为的兼容。为使用该功能,需要在 rules 中使用 ArtImageSwap=true 来开启。

  • 此功能仅支持 Shape 图像用于步兵类型,Shape 与 Voxel 图像用于载具类型以及 Voxel 图像用于战机类型。

rulesmd.ini

[General]
ArtImageSwap=false  ; disabled by default

警告

为了正常使用该功能,你需要移除或替换下面这些 YR INI 代码中的选段以避免 Westwood 原有 INI 代码与该功能的兼容问题。

artmd.ini

[CAML]
Image=JOSH

[BFRT]
Image=SREF

提示

在原版中,[CLNT] 没有自己的图像,它原本在 artmd.ini 中通过 Image=ARND 使用另一个图像占位,由于没有本功能所以没有任何效果。随后它和 [UTNK] 等同样转为通过 rulesmd.ini 来实现图像资源调用,但它不是与其他 art 小节那样只是更改实现方式,而是还同时改为了 Image=CIVC 而非 ARND,虽然这在 [General] -> ArtImageSwap=true 时不会直接表现为冲突,但 modder 们可能需要注意。

自定义资源储存

  • 现在 Ares 的 Storage 功能可以设置 [Tiberiums] 列表中的哪种类型被用于在拥有 Refinery.UseStorage=yesStorage > 0 的建筑中存储。

  • 此标签无法在没有 Ares 的情况下使用。

rulesmd.ini

[General]
Storage.TiberiumIndex=-1  ; integer, [Tiberiums] list index

自定义墙的连锁伤害

  • 原版中当围墙受到伤害时会对周围 4 个单元格内的墙体造成 200 点伤害。这使得相连的墙体比单独矗立的墙体更容易被损伤(这就是打完剩下的单格墙体更能抗伤的原因)。

  • 现在你可以使用下面的标签自定义这个杀伤值。

rulesmd.ini

[CombatDamage]
AdjacentWallDamage=200  ; integer

自定义光照等级对空中单位的影响

  • 现在可以分别针战机类型和使用 Locomotor=Jumpjet 的步兵/载具自定义空中单位所受光照等级影响的方式。

    • AircraftLevelLightMultiplierJumpjetLevelLightMultiplier 是直接用于单位的光照等级强度倍率,适用于它们所飞掠单元格的高度。

rulesmd.ini

[AudioVisual]
AircraftLevelLightMultiplier=1.0  ; floating point value, percents or absolute
JumpjetLevelLightMultiplier=0.0   ; floating point value, percents or absolute

自定义默认配色方案

  • 在原版中,一个无法正确重映射颜色的 AltPalette=yes 动画或 Voxel=yes 的抛射体图像会使用 [Colors] 列表中的第一个配色方案作为默认配色方案来映射所属色,现在它可以被手动指定了。

rulesmd.ini

[AudioVisual]
AnimRemapDefaultColorScheme=      ; ColorScheme name

铁幕和力场护盾的额外染色强度

  • 现在可以指定应用于处于铁幕和力场护盾中的单位的额外染色强度。

rulesmd.ini

[AudioVisual]
IronCurtain.ExtraTintIntensity=0.0  ; floating point value
ForceShield.ExtraTintIntensity=0.0  ; floating point value

Jumpjet 爬升逻辑增强

  • 现在你可以通过将 JumpjetClimbPredictHeight 设为 true 来使 Jumpjet 单位提前增加飞行高度。Jumpjet 将会提前 5 个单元格开始抬升而非仅在悬崖和建筑马上贴脸了才抬升高度。

  • 你还可以通过将 JumpjetClimbWithoutCutOut 设为 true 来跳过停止移动检查。Jumpjet 在已经抵近悬崖或建筑时将不会停止水平方向上的移动,而是在抬升高度的同时继续前行。

    • 当启用 JumpjetClimbPredictHeight 时,若提前 5 个单元格后的高度仍然不足以越过悬崖或建筑,Jumpjet 将会像原先那样停止水平方向上的移动,除非还启用了 JumpjetClimbWithoutCutOut

  • 你可以将 JumpjetClimbIgnoreBuilding 设为 true 以使 Jumpjet 爬升时将建筑视为 0 高度地形处理。

rulesmd.ini

[General]
JumpjetClimbPredictHeight=false   ; boolean
JumpjetClimbWithoutCutOut=false   ; boolean
JumpjetClimbIgnoreBuilding=false  ; boolean

[SOMETECHNO]                      ; TechnoType
JumpjetClimbIgnoreBuilding=       ; boolean, default to [General] -> JumpjetClimbIgnoreBuilding

移动伊文炸弹位置

在原版中,伊文炸弹的图像显示位置和炸弹引爆位置在建筑占地左上角的单元格而不是建筑中心。现在这可以被更改。

rulesmd.ini

[CombatDamage]
IvanBombAttachToCenter=false  ; boolean

警告

由于技术限制,这无法在每种武器上微观定义。

范围指示环可见性

在原本的游戏中,建筑的范围指示环只有在玩家拥有时才绘制。现在它也对观察者可见。此外,你还可以指定其他所属方的可见性。

rulesmd.ini

[AudioVisual]
RadialIndicatorVisibility=allies  ; List of Affected House Enumeration (owner/self | allies/ally | enemies/enemy | all)

重启废弃的 [JumpjetControls]

  • 重启了废弃的 [JumpjetControls],其中的标签将用于 Jumpjet 单位的默认值。

    • 此外,新增了两个标签用于空缺项。

rulesmd.ini

[JumpjetControls]
Crash=5.0        ; floating point value
NoWobbles=false  ; boolean

备注

CruiseHeight 对应 JumpjetHeightWobblesPerSecond 对应 JumpjetWobblesWobbleDeviation 对应 JumpjetDeviation 以及 Acceleration 对应 JumpjetAccel。其他所有相应的标签只是去掉了 Jumpjet 前缀。

遭遇战 AI 行为去硬编码

  • 在原版中存在一个遭遇战 AI 玩家没有 Factory 类建筑且一段时间未受到伤害将会发起卖家冲锋(让所有单位进入 Hunt)的硬编码的行为。

    • [General] -> AIFireSale[General] -> AIAllToHunt 分别控制 AI 是否会执行卖家和狩猎(冲锋)行为。

    • [General] -> AIFireSaleDelay 定义了一个计时器,它只有当 [General] -> AIFireSale 设为 true 时才会生效。当 AI 首次达到原有行为的触发条件时计时器开始计时,并在计时器到期之前阻止出售建筑的行为。

    • 你可以用这些标签让 AI 被击败前 “全力以赴”

  • 另一个硬编码行为是,当 AI 部署 MCV 时,它会将所有部队集结到该地点。现在可以关闭这一行为。

    • [General] -> GatherWhenMCVDeploy 控制这一行为。

rulesmd.ini

[General]
AIFireSale=true           ; boolean
AIFireSaleDelay=0         ; integer, number of frames
AIAllToHunt=true          ; boolean
GatherWhenMCVDeploy=true  ; boolean

[ColorAdd] 使用 8 位 RGB 参数

  • 在原版中,[ColorAdd] 条目中的值会被按照 RGB565(红色和蓝色为 0-31,绿色为 0-63)来使用,现在,你可以通过这一设置使其使用对人类用户更加友好的 8 位 RGB(0-255)来填写。

  • 这适用于 LaserTargetColorIronCurtainColorBerserkColorForceShieldColor

rulesmd.ini

[AudioVisual]
ColorAddUse8BitRGB=false  ; boolean

使用更精确的维修费用计算

  • 在原版中,维修单位时的一个计算步骤在 Strength/RepairStep 后将该值向下取整再作为其他计算的除数,以至于实际的资金数额计算不正确。现在你可以通过下面的语句使用更精确的费用计算。

[General]
FixRepairStepCost=false   ; boolean

泰伯利亚藤蔓与泰伯利亚废矿

泰伯利亚藤蔓

  • 泰伯利亚藤蔓怪现在可以像《泰伯利亚之日》中那样工作。

  • 它们的核心参数仍然从 [General] 读取。

  • 藤蔓的弹头在 [CombatDamage] 下指定。弹头必须设置 Veinhole=yes

  • 泰伯利亚藤蔓被硬编码使用几种覆盖物。

  • 泰伯利亚藤蔓造成杀伤的攻击效果动画于 [AudioVisual] 下指定。动画必须列于 [Animations] 注册表中。

  • 单位可以像在《泰伯利亚之日》中一样设置对泰伯利亚藤蔓免疫。

  • 怪物主体以 VEINTREE 地形对象的形式存在,其拥有 IsVeinhole=true 设置。并且它的 Strength 决定了泰伯利亚藤蔓的生命值。

备注

下列内容均与《泰伯利亚之日》中的功能完全相同。许多《泰伯利亚之日》中的标签已被重新启用。下面提供的值与 TS 和 YR rules 中的值相同。你可以在 MODENC 上了解更多关于它们的信息:VeinholeGrowthRateVeinholeShrinkRateMaxVeinholeGrowthVeinDamageVeinholeTypeClassVeinholeWarheadVeinholeVeinAttackImmuneToVeinsIsVeinhole

rulesmd.ini

[General]
VeinholeGrowthRate=300        ; integer
VeinholeShrinkRate=100        ; integer
MaxVeinholeGrowth=2000        ; integer
VeinDamage=5                  ; integer
VeinholeTypeClass=VEINTREE    ; TerrainType

[CombatDamage]
VeinholeWarhead=VeinholeWH    ; WarheadType

[VeinholeWH]
Veinhole=yes

[AudioVisual]
VeinAttack=VEINATAC           ; AnimationType

[TechnoType]
EliteAbilities=VEIN_PROOF
ImmuneToVeins=yes

[VEINTREE]
IsVeinhole=true
Strength=1000                 ; integer - the strength of the Veinhole

警告

游戏需要泰伯利亚藤蔓相关的覆盖物使用特定的索引,如下所示。请注意 OverlayTypes 注册表中的索引是从 0 开始的,由于游戏内部规则,等号左侧的标识符无关紧要。原版 rulesmd.ini 已经在正确的索引处列出了所需的覆盖物。

rulesmd.ini

[OverlayTypes]
126=VEINS                     ; The veins (weeds)
167=VEINHOLE                  ; The Veinhole itself
178=VEINHOLEDUMMY             ; A technical overlay

泰伯利亚废矿与废矿采集者

  • 拥有 Weeder=yes 的载具现在可以收集泰伯利亚废矿。然后这些废矿可以存入 Weeder=yes 的建筑中。

  • 泰伯利亚废矿并不是储藏在储存仓建筑中而是这个阵营的内部数据。废矿的储藏量读取自 [General] -> WeedCapacity

  • 废矿矿车现在可以像普通矿车那样自定义矿石采集动画。

  • 废矿矿车可以像超时空矿车一样使用 Teleport 运动模式。

  • 储存的废矿总量可以在侧边栏上显示,参见 废矿计数器

消耗废矿的超级武器

  • 超级武器可以消耗泰伯利亚废矿来加载,就像《泰伯利亚之日》中的化学飞弹一样。

备注

由于化学飞弹的代码已被移除,设置 Type=ChemMissile 并不会生效。

rulesmd.ini

[SOMESW]                                        ; SuperWeaponType
UseWeeds=no                                     ; boolean - should the SW use weeds to recharge?
UseWeeds.Amount=                                ; integer - how many weeds? default is [General] -> WeedCapacity
UseWeeds.StorageTimer=no                        ; boolean - should the counter on the sidebar display the % of weeds stored?
UseWeeds.ReadinessAnimationPercentage=0.9       ; double - when this many weeds % are stored, the SW will show it's ready on the building (open nuke/open chrono, etc.)

自定义 Voxel 光源

图像 图像 Voxel by C&CrispS(另存为并解压第二张图片即可获得包括 pal & vpl 的示例文件)

  • 现在可以改变光源相对于 Voxel 素材的位置。这有助于更好的设置光照。

    • 仅考虑光源的方向,不考虑与 Voxel 的距离(视为平行光)

    • 原版光照(假设 UseFixedVoxelLighting=false)大致位于 VoxelLightSource=0.201,-0.907,-0.362

rulesmd.ini

[AudioVisual]
UseFixedVoxelLighting=false  ; boolean, whether to fix the lighting
VoxelLightSource=            ; X,Y,Z - position of the light in the world relative to each voxel, floating point values

提示

为了方便预览光源设置可以使用 thomassneddon 的 VXL 猹看器 与 VPL 生成工具。使用该工具时先将其解压然后将需要预览的 Voxel 文件拖拽到工具上(辅助 VXL 和 HVA 文件必须在同一文件夹中)。

请注意该工具目前尚未考虑 UseFixedVoxelLighting=true 的情况,因此工具中显示的值在启用该修复项的游戏中需要进行调整。

建筑路径点

  • 在原版中,建筑被禁止使用路径点。现在你可以使用以下标签来允许使用。

rulesmd.ini

[General]
BuildingWaypoints=false  ; boolean

战机类型

吊运拾取音效

  • 现在可以通过设置 VoicePickup 来覆盖 Carryall=true 战机在命令其拾取载具时的 VoiceMove 音效。

rulesmd.ini

[SOMEAIRCRAFT]  ; AircraftType
VoicePickup=    ; Sound entry

实现战机微观 CurleyShuffle 设置

  • 在原版中这总是由 [General] 下的全局标签控制。现在,这允许为每一架飞行器自定义。具体功能详见 ModEnc

rulesmd.ini

[SOMEAIRCRAFT]            ; AircraftType
CurleyShuffle=            ; boolean, default to [General] -> CurleyShuffle

自定义战机攻击任务引发分散

  • 在原版中当一架战机发起攻击它会强制触发目标单元格上的分散效果。现在你可以通过将下面的语句设为 false 来禁用该行为。

rulesmd.ini

[SOMEAIRCRAFT]            ; AircraftType
FiringForceScatter=true   ; boolean

拓展的战机任务

  • 战机现在将能够使用路径点。

  • 当发出 guard 命令(默认为 [G])或 area guard 命令([Ctrl]+[Alt])时战机将根据位置(guard 为当前位置,area guard 为目标位置)周围搜素目标并在弹药耗尽时立即返回。

    • 若未发现目标,或摧毁目标后仍有弹药,则继续在警戒区域上方巡游。

  • 当发出 attack move 命令([Ctrl]+[Shift])时战机将向目的地移动并在路线上搜索附近的目标进行攻击。一旦弹药耗尽或抵达目的地,它将返回。

    • 如果在过程中自动选择的目标被摧毁但弹药尚未耗尽,战机将继续飞往目的地。

  • 此外,战机的行为也可以更改。

    • ExtendedAircraftMissions.SmoothMoving 控制战机距离目的地距离小于 SlowdownDistance 的一半或其转弯半径时是否会返回机场。

    • ExtendedAircraftMissions.EarlyDescend 控制战机距离着陆点小于 SlowdownDistance 时是否无需飞越机场正上方即可开始下降(对航母舰载机同样有效)。

    • ExtendedAircraftMissions.RearApproach 控制战机返回机场时是否应从与 LandingDir 相反的方向飞入,即下降时向 LandingDir 的方向飞行并着陆。

    • ExtendedAircraftMissions.FastScramble 控制战机在所属的机场被摧毁后是否仍能紧急升空。

    • ExtendedAircraftMissions.UnlandDamage 控制战机在无机场可降落时每 4 帧受到的损伤。若为负则立即坠毁。未启用 ExtendedAircraftMissions 时不建议使用此参数。

rulesmd.ini

[General]
ExtendedAircraftMissions=false            ; boolean
ExtendedAircraftMissions.UnlandDamage=-1  ; integer

[SOMEAIRCRAFT]                            ; AircraftType
ExtendedAircraftMissions=                 ; boolean, default to [General] -> ExtendedAircraftMissions
ExtendedAircraftMissions.SmoothMoving=    ; boolean, default to [SOMEAIRCRAFT] -> ExtendedAircraftMissions
ExtendedAircraftMissions.EarlyDescend=    ; boolean, default to [SOMEAIRCRAFT] -> ExtendedAircraftMissions
ExtendedAircraftMissions.RearApproach=    ; boolean, default to [SOMEAIRCRAFT] -> ExtendedAircraftMissions
ExtendedAircraftMissions.FastScramble=    ; boolean, default to [SOMEAIRCRAFT] -> ExtendedAircraftMissions
ExtendedAircraftMissions.UnlandDamage=    ; integer, default to [General] -> ExtendedAircraftMissions.UnlandDamage

备注

目前当 ExtendedAircraftMissions 被启用时,能够降落到机场的战机会始终检查自身是否拥有用于停靠的机位。因此若你的任务中需要存在能够降落到机场的战机但没有提供足够的空余机位也没有禁用该功能,那么这些战机将立即坠毁。

空袭战机和侦察机的生成距离和生成高度

  • 现在可以通过设置 SpawnDistanceFromTarget 来让由 (Elite)AirstrikeTeamTypeType=SpyPlane 超级武器生成的战机在与目标/目的地固定距离处生成而不再是地图边界。

  • 也可以通过 SpawnHeight 来覆盖战机的初始高度,默认为 FlightLevel,如果没有设置则使用 [General] -> FlightLevel

rulesmd.ini

[SOMEAIRCRAFT]            ; AircraftType
SpawnDistanceFromTarget=  ; floating point value, distance in cells
SpawnHeight=              ; integer, height in leptons

降落方向

  • 默认情况下战机降落时朝向 [AudioVisual] -> PoseDir 指定的方向。现在可以通过每个战机类型上的 LandingDir 进行自定义,默认为 [AudioVisual] -> PoseDir。如果战机停靠的建筑设置了战机停靠方向,则该设置优先于此设置。

    • 对于 AirportBound=false 的战机允许使用负值以使其降落时面向当前方向。

rulesmd.ini

[SOMEAIRCRAFT]  ; AircraftType
LandingDir=     ; Direction type (integers from 0-255). Accepts negative values as a special case.

动画类型

动画武器和伤害设置

  • 现在 Weapon 可以设置为完整的 WeaponType,以创建一个抛射体并立即引爆,而不是简单地通过 Warhead 造成 Damage。这允许武器效果正常使用。

  • Damage.Delay 确定两次应用 Damage 之间的间隔。需要将 Damage 设置为 1.0 或更高。值为 0 将禁用间隔。请注意这是以动画帧为单位而不是游戏帧。动画会根据 Rate 可能在每个游戏帧上推进动画帧也可能不进行推进。

  • 如果设置 Damage.DealtByInvoker 为 true,则任何造成的 Damage 都被视为来自动画的调用者(例如弹头的 AnimList/SplashList 动画则为武器发射者;如果是 DestroyAnim 动画则为被摧毁的载具;或者动画所附着的对象)。即便调用者已经死亡或不存在也会继续使用调用者的所属方来造成伤害并应用 Phobos 引入的弹头效果。若未设置该参数则默认使用动画所有者的所属方,若动画无所有者则使用动画所附着对象的所属方。

    • Damage.ApplyFirepowerMult 决定动画存在调用者时是否可以获取其火力加成效果。

  • 如果设置 Damage.ApplyOncePerLoop 为 true,则动画每次循环只造成一次 Damage(在单次循环的动画中只会造成一次)而不是在每帧或由 Damage.Delay 定义的间隔造成。造成伤害的帧由 Damage.Delay 决定,默认为在第一个动画帧之后。

artmd.ini

[SOMEANIM]                      ; AnimationType
Weapon=                         ; WeaponType
Damage.Delay=0                  ; integer, animation frames
Damage.DealtByInvoker=false     ; boolean
Damage.ApplyOncePerLoop=false   ; boolean
Damage.ApplyFirepowerMult=false ; boolean

备注

WeaponDamage.Delay,除了其他新增功能外应与 Ares 引入的等效功能类似,并且在 Phobos 与 Ares 一起使用时优先于它们。

自定义附着动画位置

  • 现在你可以通过为 AttachedAnimPosition 设置不同的值来自定义附着动画显示的位置。

    • default:动画显示在父对象的逻辑中心(对于建筑,这是最上方的 0 号单元格)。

    • center:动画显示在父对象的视觉中心。

    • ground:动画显示在父对象视觉中心正下方所对应的地面。注意该动画仍被视为附着于对象,因此如果不通过其他设置进行调整的话该动画的图层可能在该对象本应覆盖的其他对象之上。

artmd.ini

[SOMEANIM]                   ; AnimationType
AttachedAnimPosition=default ; Attached animation position enumeration (default|center|ground)

自定义碎片 & 流星撞击和弹头引爆行为

  • Warhead.Detonate 设置为 true 可以使动画在与水面接触时爆炸。ExpireAnim 将被触发,Warhead 将被引爆或用于造成伤害/产生闪光。

  • 如果将 Warhead.Detonate 设置为 true,则 Warhead 将完全引爆,而不仅仅是用于造成伤害和产生闪光(如果它拥有 Bright=true)。

  • WakeAnim 包含一组在 ExplodeOnWater 没有设置且动画与水面接触时使用的水波动画。如果 IsMeteor 未设置为 true 则默认为 [General] -> Wake,否则无动画。如果列出了多个动画,则将随机选择一个。

  • SplashAnims 包含一组在 ExplodeOnWater 没有设置且动画与水面接触时使用的水花动画。

    • 如果设置 SplashAnims.PickRandom 为 true,则从 SplashAnims 中随机选择一个动画。否则使用 SplashAnims 中列出的最后一个动画。

  • ExtraShadow 可以设为 false 以禁用地面上的影子显示。

artmd.ini

[SOMEANIM]                    ; AnimationType
ExplodeOnWater=false          ; boolean
Warhead.Detonate=false        ; boolean
WakeAnim=                     ; List of AnimationTypes
SplashAnims=                  ; List of AnimationTypes, default to [CombatDamage] -> SplashList
SplashAnims.PickRandom=false  ; boolean
ExtraShadow=true              ; boolean

自定义 Crater=yes 的动画能否摧毁矿石

  • 在原版中带有 Crater=yes 的动画硬编码会摧毁其所在单元格的矿石。现在你可以通过将下面的语句设为 false 来禁用该行为。

rulesmd.ini

[General]
AnimCraterDestroyTiberium=true  ; boolean

artmd.ini

[SOMEANIM]                      ; AnimationType
Crater.DestroyTiberium=         ; boolean, default to [General] -> AnimCraterDestroyTiberium

由 Scorch 和 Flamer 生成的火焰动画

  • 《泰伯利亚之日》中允许 Scorch=trueFlamer=true 的动画生成 [AudioVisual] -> SmallFireLargeFire 指定的火焰动画。此行为已重新实现,并且完全可自定义。

    • ConstrainFireAnimsToCellSpots 控制生成的动画是否锁定到单元格位置(例如步兵也受子单元格位置限制)。

    • FireAnimDisallowedLandTypes 控制不允许生成火焰动画的地形类型。对于 Scorch=true 默认为 water,rock,beach,ice 否则为 none

    • AttachFireAnimsToParent 控制生成的动画是否附着于父动画所附着的对象(如果父动画也是附着动画)。对于 Scorch=true 默认为 true,否则为 false。

    • SmallFireCount 决定由 Scorch=trueFlamer=true 动画生成小火焰动画的数量。对于 Flamer=true 默认为 2,否则为 1。

      • SmallFireAnims 可以用于设置动画类型,默认为 [AudioVisual] -> SmallFire(单个动画)。

      • SmallFireChances 是一个用于动画生成的概率列表,最多读取前 SmallFireCount 数量的项。如果计数超出列出的概率数量则超出部分使用最后一个列出的概率。对于 Flamer=true 默认为 1.0,0.5,否则为 1.0

      • SmallFireDistances 是一个用于动画相对父动画坐标生成位置单元格距离的列表,最多读取前 SmallFireCount 数量的项。如果计数超出列出的概率数量则超出部分使用最后一个列出的概率。对于 Flamer=true 默认为 0.25,0.625,否则为 0.0

    • LargeFireCount 决定仅由 Flamer=true 动画生成的大火焰动画的数量。

      • LargeFireAnims 可以用于设置动画类型,默认为 [AudioVisual] -> LargeFire(单个动画)。

      • LargeFireChances 是一个用于动画生成的概率列表,最多读取前 LargeFireCount 数量的项。如果计数超出列出的概率数量则超出部分使用最后一个列出的概率。

      • SmallFireDistances 是一个用于动画相对父动画坐标生成位置单元格距离的列表,最多读取前 LargeFireCount 数量的项。如果计数超出列出的概率数量则超出部分使用最后一个列出的概率。

artmd.ini

[SOMEANIM]                          ; AnimationType
ConstrainFireAnimsToCellSpots=true  ; boolean
FireAnimDisallowedLandTypes=        ; List of LandTypes (none | clear | road | water | rock | wall | tiberium | beach | rough | ice | railroad | tunnel | weeds)
AttachFireAnimsToParent=            ; boolean
SmallFireCount=                     ; integer
SmallFireAnims=                     ; List of AnimationTypes
SmallFireChances=                   ; List of floating point values (percent or absolute)
SmallFireDistances=                 ; List of floating point values, distance in cells
LargeFireCount=1                    ; integer
LargeFireAnims=                     ; List of AnimationTypes
LargeFireChances=0.5                ; List of floating point values (percent or absolute)
LargeFireDistances=0.4375           ; List of floating point values, distance in cells

备注

除了 Flamer 在父动画位于空中时不生成这一更改外,默认设置应该与 Ares 中类似功能拥有相同的效果。

附加动画的图层

  • 现在你可以自定义让附加于对象的动画跟随对象的图层还是遵循它们自身的 Layer 设置。如果不设置,附加的动画会使用 ground 图层。

artmd.ini

[SOMEANIM]             ; AnimationType
Layer.UseObjectLayer=  ; boolean

HideIfNoOre 的矿石阶段阈值

  • 现在你可以自定义一个矿石/泰伯利亚所在的单元格至少需要到哪个生长阶段才能显示带有 HideIfNoOre 的动画。生长阶段低于指定值的单元格将不允许动画显示。

artmd.ini

[SOMEANIM]               ; AnimationType
HideIfNoOre.Threshold=0  ; integer, minimal ore growth stage

建筑类型

AI 基地建设机制更改

  • 现在 AI 可以执行一些新的行为。

    • AIAutoDeployMCV 控制 AI 在拥有建造厂后是否仍然会自动部署 MCV。

    • AISetBaseCenter 控制 AI 在拥有建造厂后是否仍会将新部署的建造厂设为基地中心。

    • AIBiasSpawnCell 控制 AI 是否优先选择靠近出生点的建造厂作为基地中心(战役模式无效)。

    • AIForbidConYard 控制 AI 是否禁止摆放拥有 ConstructionYard=true 的建筑。当建造厂被摧毁后 AI 会尝试重建但不会实际摆放。随后它会继续建造其他建筑。建造厂的建造仍会占用时间。你可以尝试缩短它的建造所需时长。

    • AINodeWallsOnly 控制 AI 是否仅在周围存在围墙节点时才自动连接相邻围墙。

    • AICleanWallNode 控制 AI 是否在周边都是无 ProtectWithWall 的建筑时禁止摆放围墙。若无法摆放,该基地节点将被一同移除。

rulesmd.ini

[AI]
AIAutoDeployMCV=true   ; boolean
AISetBaseCenter=true   ; boolean
AIBiasSpawnCell=false  ; boolean
AIForbidConYard=false  ; boolean
AINodeWallsOnly=false  ; boolean
AICleanWallNode=false  ; boolean

战机停靠方向

  • 现在可以通过在停靠建筑上使用 AircraftDockingDir(N)N 可选地分别替换为每个从 0 开始的 DockingOffset 索引,AircraftDockingDirAircraftDockingDir0 是没有为特定偏移设置方向时将使用的同义词)来设置停靠战机的降落方向。这会覆盖战机自己的 降落方向 设置并默认为 [AudioVisual] -> PoseDir

rulesmd.ini

[SOMEBUILDING]          ; BuildingType
AircraftDockingDir(N)=  ; Direction type (integers from 0-255)

允许矿场同时播放多个 ActiveAnim 动画

  • 在原版中矿场会根据其矿石存储量的不同播放不同的 ActiveAnim。现在你可以让它像其他建筑一样同时播放多个 ActiveAnim

artmd.ini

[SOMEBUILDING]                         ; BuildingType
Refinery.UseNormalActiveAnim=false     ; boolean

在拔起期间应用 ZShapePointMove

  • 默认情况下建筑物在播放建造动画时并不应用 ZShapePointMove(这会调整应用于建筑物的 z shape 以在深度缓冲区中调整它们并用于修复与此相关的例如建筑缺角等问题)。现在可以通过设置 ZShapePointMove.OnBuildup 来开关此行为。

artmd.ini

[SOMEBUILDING]                   ; BuildingType
ZShapePointMove.OnBuildup=false  ; boolean

武装建筑警戒重试间隔

  • 默认情况下拥有武器的建筑(包括驻军建筑)在拥有目标的情况下有一个 [Guard] -> AARate 乘 900 再加上 [0,2] 范围内随机值的间隔用于重新检查是否可以攻击。现在,这个间隔可以通过 [General] -> BuildingGuardRetryDelayGuardRetryDelay 进行全局或建筑微观层面的自定义。

rulesmd.ini

[General]
BuildingGuardRetryDelay=  ; integer - single or comma-sep. range (game frames)

[SOMEBUILDING]            ; BuildingType
GuardRetryDelay=          ; integer - single or comma-sep. range (game frames)

被视为载具的建筑

  • 总的来说默认情况下游戏将同时设置了 UndeploysIntoFoundation=1x1 的建筑视为载具。现在可以通过设置 ConsideredVehicle 来开关此行为。这些建筑在单位计数追踪中被视为载具,受损时不会被视为基地受到攻击,并且默认可以进行批量选择。

  • 当占领此类 “建筑” 时,玩家不会收到 EVA 占领事件的播报。

rulesmd.ini

[SOMEBUILDING]      ; BuildingType
ConsideredVehicle=  ; boolean

建筑炮塔动画

  • 默认情况下 TurretAnimIsVoxel=false 的建筑其 TurretAnim(Damaged) 仅显示 32 个朝向中每个方向的第一帧。现在可以使用更多帧数,并且添加了用于断电状态和武器开火的额外动画。

    • .shp 文件中的顺序:IdleFramesLowPowerIdleFramesFiringFramesLowPowerFiringFrames,帧数设为 0 的动画将被跳过/忽略。

    • 注意 FiringFrames 在攻击且武器可开火时就会开始播放,它不会因为自身未完成播放而阻止武器开火,武器也不会因为被 延迟开火 卡住的时间比动画现有帧数更长而阻止其多次循环。将延迟开火持续时间与开火帧数匹配可用于制作预开火动画。

    • TurretAnim.IdleRateTurretAnim.FiringRate 可分别用于自定义闲置和开火状态的动画帧播放速率。

rulesmd.ini

[SOMEBUILDING]                     ; BuildingType
TurretAnim.IdleFrames=1            ; integer
TurretAnim.LowPowerIdleFrames=0    ; integer
TurretAnim.FiringFrames=0          ; integer
TurretAnim.LowPowerFiringFrames=0  ; integer
TurretAnim.IdleRate=1              ; integer, game frames
TurretAnim.FiringRate=1            ; integer, game frames

兵营自定义出口

  • 默认情况下如果 GDIBarracksNODBarracksYuriBarracks 中的任何一个设置为 true,则 Factory=InfantryType 的建筑将会根据硬编码设置为创建的步兵设置出口单元格。现在可以通过 BarracksExitCell 为这类建筑定义任意单元格为出口。以下是硬编码值的单元格偏移量参考值。

标签

单元格偏移

GDIBarracks

1,2

NODBarracks

2,2

YuriBarracks

2,1

rulesmd.ini

[SOMEBUILDING]     ; BuildingType
BarracksExitCell=  ; X,Y - cell offset

自定义驻军建筑与坦克碉堡属性

  • 现在可以自定义驻军建筑或坦克堡垒的 Damage 或 ROF 倍率。

  • 现在可以自定义坦克碉堡建筑进入和离开时的音效。

rulesmd.ini

[SOMEBUILDING]              ; BuildingType
OccupyDamageMultiplier=     ; floating point value, default to [CombatDamage] -> OccupyDamageMultiplier
OccupyROFMultiplier=        ; floating point value, default to [CombatDamage] -> OccupyROFMultiplier
BunkerDamageMultiplier=     ; floating point value, default to [CombatDamage] -> BunkerDamageMultiplier
BunkerROFMultMultiplier=    ; floating point value, default to [CombatDamage] -> BunkerROFMultMultiplier
BunkerWallsUpSound=         ; Sound entry, default to [AudioVisual] -> BunkerWallsUpSound
BunkerWallsDownSound=       ; Sound entry, default to [AudioVisual] -> BunkerWallsDownSound

自定义可反部署建筑出售序列动画长度

  • 默认情况下拥有 UndeploysInto 的建筑在出售时只会播放其建造动画序列的前 23 帧(从最后一帧开始反向播放)。现在可以通过 SellBuildupLength 自定义。

rulesmd.ini

[SOMEBUILDING]        ; BuildingType
SellBuildupLength=23  ; integer, number of buildup frames to play

自定义 & 新的部队回收站特性

图像 幽灵计划 中使用友军的部队回收站、仅限载具以及显示资金

  • 现在你可以自定义具有 Grinding 设置的建筑可回收的对象类别以及回收使用的音效。

    • Grinding.AllowAllies 决定是否允许单位进入友军的这座建筑。

    • Grinding.AllowOwner 决定是否允许单位进入己方的这座建筑。

    • Grinding.AllowTypes 可以用于定义可以被这座建筑回收的步兵和载具。只要设置列表就会导致其他不在表中的任何类型无法被回收。

    • Grinding.DisallowTypes 可以定义不可被这座建筑回收的步兵和载具。

    • Grinding.PlayDieSound 控制单位的 DieSoundVoiceDie 是否都会在进入回收站时播放。

    • Grinding.Sound 用于定义物体被这座建筑回收时所播放的音效。

    • Grinding.Weapon 用于定义当建筑回收物体时由建筑向该建筑发射的武器。只有在其上次开火以来至少经过了武器 ROF 设置的帧数后才能被发射。

      • Grinding.Weapon.RequiredCredits 可以设置武器开火所需的资金。为此目的积累的资金会在每次武器开火时重置。

  • 关于回收时的资金字符串提示,请参考 DisplayIncome

rulesmd.ini

[SOMEBUILDING]                     ; BuildingType
Grinding.AllowAllies=false         ; boolean
Grinding.AllowOwner=true           ; boolean
Grinding.AllowTypes=               ; List of InfantryTypes / VehicleTypes
Grinding.DisallowTypes=            ; List of InfantryTypes / VehicleTypes
Grinding.PlayDieSound=true         ; boolean
Grinding.Sound=                    ; Sound entry, default to [AudioVisual] -> EnterGrinderSound
Grinding.Weapon=                   ; WeaponType
Grinding.Weapon.RequiredCredits=0  ; integer

自定义磁暴线圈充能

  • 现在你可以设定建筑什么情形下才会过载。

rulesmd.ini

[SOMEWARHEAD]             ; WarheadType
ElectricAssaultLevel=1    ; integer

[SOMEBUILDING]            ; BuildingType
Overpower.KeepOnline=2    ; integer, negative values mean that cannot keep online
Overpower.ChargeWeapon=1  ; integer, negative values mean that weapons can never be switched

备注

Ares 的 电池超武 不受此影响。

禁用 DamageSound

  • 现在你可以禁用一个建筑的 DamageSound

rulesmd.ini

[SOMEBUILDING]            ; BuildingType
DisableDamageSound=false  ; boolean

排除特定工厂的多工厂加成

  • 现在可以将某个具有 Factory 的建筑排除在 MultipleFactory 之外

rulesmd.ini

[SOMEBUILDING]                         ; BuildingType
ExcludeFromMultipleFactoryBonus=false  ; boolean

自定义工业工厂

  • 现在可以通过在 FactoryPlant.AllowTypesFactoryPlant.DisallowTypes 中列出有哪些科技类型受到 FactoryPlant=true 建筑的加成。

    • FactoryPlant.MultiplierAres 功能)仍然会应用于加成。

  • FactoryPlant.MaxCount 用于限制同一类建筑所提供的工业工厂加成次数上限。负值表示无上限。

rulesmd.ini

[SOMEBUILDING]               ; BuildingType
FactoryPlant.AllowTypes=     ; List of TechnoTypes
FactoryPlant.DisallowTypes=  ; List of TechnoTypes
FactoryPlant.MaxCount=-1     ; integer

伤残电厂电量系数

  • 现在可以自定义电厂血量与发电功率的关系。Power * PowerPlant.DamageFactor 相当于电厂血量无限接近于 0 时损失的发电量,即 损失发电量 = [1 - (当前血量 / 最大血量)] * PowerPlant.DamageFactor * Power=;发电功率无法低于 0。

    • 具体来说,如果该系数设为 0.0,则电厂的发电功率不受血量影响。

rulesmd.ini

[SOMEBUILDING]                     ; BuildingType
PowerPlant.DamageFactor=1.0        ; floating point value

跳过 DelayedFireDelay

  • 《红色警戒 1》中的磁暴线圈会在充能后多次攻击。这在《红色警戒 2》中是不可能的,因为建筑必须每次发射时都播放充能动画。

  • 现在你可以使用下面的标签实现上述逻辑。

artmd.ini

[SOMEBUILDING]                     ; BuildingType
IsAnimDelayedBurst=true            ; boolean

备注

光棱塔开火硬编码延迟。就像无视 IsAnimDelayedFire 那样,它们同样无视该语句。

在建筑上自定义单位维修参数

  • 现在可以通过 UnitRepair=trueUnitReload=trueHospital=true 的建筑来自定义单位的维修参数。

    • Units.RepairRate 自定义单位的维修速度。如果 UnitReload=true 那么默认为 [General] -> ReloadRate 并覆盖每个战机类型独立的时间设置(Ares 功能)。对于 UnitRepair=true 的建筑则默认为 [General] -> URepairRate

      • UnitReload=true 的建筑上将此值设置为负数将完全禁用维修功能。

    • Units.RepairStep 设置每次维修时恢复多少点 Strength

    • Units.RepairPercent 是维修成本的倍率[Cost/(Strength/RepairStep)]。注意如果最终的成本低于 1 那么会设为 1。

      • Units.UseRepairCost 可以用于自定义是否使用维修成本。步兵默认为 false,其他默认为 true。

rulesmd.ini

[SOMEBUILDING]        ; BuildingType
Units.RepairRate=     ; floating point value, ingame minutes
Units.RepairStep=     ; integer, default to [General] -> RepairStep
Units.RepairPercent=  ; floating point value, percents or absolute, default to [General] -> RepairPercent
Units.UseRepairCost=  ; boolean

自定义克隆耗电

  • 在原版中,克隆缸即便没电也可以工作。从 Ares 2.0 开始,它们需要电力运作。现在你可以指定。

rulesmd.ini

[SOMEBUILDING]        ; BuildingType
Cloning.Powered=true  ; boolean

步兵

GI 式步兵自动部署

  • 在《红色警戒2》中,由 AI 控制的美国大兵在与敌人交战时会自动部署以使用火力更强的副武器。此特性在《尤里的复仇》中遭到破坏。现在你可以通过下面的开关语句重启这一特性。

rulesmd.ini

[General]
InfantryAutoDeploy=false      ; boolean

[SOMEINFANTRY]                ; InfantryType
InfantryAutoDeploy=           ; boolean, default to [General] -> InfantryAutoDeploy

自定义匍匐速度

  • 原版中步兵匍匐前进的速度是硬编码的。现在你可以自由定义了。

rulesmd.ini

[General]
ProneSpeed.Crawls=0.67        ; floating point value, multiplier
ProneSpeed.NoCrawls=1.5       ; floating point value, multiplier

[SOMEINFANTRY]                ; InfantryType
ProneSpeed=                   ; floating point value, multiplier, by default, use the corresponding global value according to Crawls

粒子系统

开火者旋转时火焰粒子目标坐标调整

  • 默认情况下拥有 BehavesLike=Fire 的粒子系统会根据创建粒子系统的对象(例如武器的开火者)是否旋转来调整其坐标。现在可以为每个粒子系统禁用这一行为。

rulesmd.ini

[SOMEPARTICLESYSTEM]               ; ParticleSystemType
AdjustTargetCoordsOnRotation=true  ; boolean

粒子

自定义 gas 粒子速度

  • Gas 类的粒子现在可以自定义漂浮速度。

rulesmd.ini

[GASPARTICLE]          ; Particle with BehavesLike=Gas
Gas.MaxDriftSpeed=2    ; integer (TS default is 5)

抛射体

空爆与分裂

  • AirburstWeapon 逻辑已被重新实现从而对其进行了一些添加和更改。

  • Splits 可以设置为 true 以使用 《火风暴》 中的抛射体分裂逻辑,分裂抛射体的数量由 Cluster 决定。

    • RetargetAccuracy 决定了分裂抛射体与原抛射体瞄准同一目标的概率。

    • RetargetSelf 决定了分裂抛射体是否可以将原抛射体的发射者视为目标。

      • RetargetSelf.Probability 是选择了原本的开火者为目标时它将保留其为目标而不是去重新随机另一个目标的概率。

    • Splits.TargetingDistance 是以单元格为单位的距离,任何潜在目标都必须在原始目标坐标的这个范围内才能够被分裂的抛射体瞄准。

      • Splits.TargetingDistance.Cylindrical 若设为 true 则在潜在目标的距离计算中忽略高度/海拔。

    • Splits.TargetCellRange 是以完整单元格数为单位的距离,用于附近没有发现足够的科技类型目标时分裂的抛射体从该范围选取新的目标单元格。

      • 将此值设为 0 将会导致没有任何单位被视为目标——仅单位实体将会被瞄准。

    • Splits.AllowRepeatTargets 允许在 Cluster 比可用目标数量更大时使同一单位实体被重复选为目标。初始顺序随机且目标将被循环使用直至 Cluster 数量的抛射体被发射。

    • Splits.UseWeaponTargeting 如果设为 true,则在检查分裂抛射体的目标时启用武器瞄准筛选。目标上的 LegalTarget 设置、弹头的 VersesArmor 的设置以及 AirburstWeapon 所填武器的 武器瞄准筛选AttachEffect 筛选 都将被检查。此外它会检查分裂子武器抛射体上而不是原抛射体上的 AA(和 AAOnly

      • 注意这会在瞄准时覆盖弹头对 AffectsAllies/Owner/Enemies 的检查。不过,你可以通过在 AirburstWeapon 设置的武器上使用 CanTargetHouses 来实现类似的行为。

  • 如果将 Airburst 设为 true 其行为也同样可以自定义。

    • AirburstSpread 是以单元格为单位的效果所覆盖范围,默认情况下范围内的每个单元格都会被 AirburstWeapon 瞄准。

    • Airburst.UseCluster 如果设为 true,则只有 Cluster 所指定数量的单元格会被影响,而不是所有单元格。

      • Airburst.RandomClusters 如果设为 true,则受影响的单元格将随机选取。否则它们将均匀分布(从受影响区域的中心到边缘)。

    • Airburst.TargetAsSource 可用于令空爆中心坐标跟随目标坐标而非使用抛射体当前位置。例如原先会在爆点生成根据 [Projectile] -> AroundTarget 决定飞向原点或目标位置,现在会直接以目标为中心爆开。

      • 如果还设置了 Airburst.TargetAsSource.SkipHeight 则仍然使用抛射体当前高度而非目标高度。

  • AroundTarget 控制由 AirburstSplits 创建的抛射体的目标是否在原抛射体目标周围的区域检查获取,否则从原抛射体爆炸的位置。默认为 Splits 值。

  • AirburstWeapon.ApplyFirepowerMult 决定是否将原抛射体发射者的火力加成应用于由 AirburstWeapon 创建的抛射体。

  • AirburstWeapon.SourceScatterMinAirburstWeapon.SourceScatterMax 可用于令空爆中心坐标产生散布。

  • AirburstWeapon.UseFiringEffects 若设为 true 则 AirburstWeapon 会在可用时显示武器 Anim 并播放 Report 音效。

  • AirburstWeapon.HeadToTarget 若设为 true 则抛射体的起始方向将朝向目标而非下方。

  • AirburstWeapon.RadialFireSegments 若设为大于 0 的值,则抛射体将以面向原始抛射体目标的 180 度扇形区域为范围,按该值将扇形等分为若干角度区间,并沿各区间方向发射。就像单位上的 RadialFireSegments 那样。

rulesmd.ini

[SOMEPROJECTILE]                            ; Projectile
Splits=false                                ; boolean
RetargetAccuracy=0.0                        ; floating point value, percents or absolute (0.0-1.0)
RetargetSelf=true                           ; boolean
RetargetSelf.Probability=0.5                ; floating point value, percents or absolute (0.0-1.0)
Splits.TargetingDistance=5.0                ; floating point value, distance in cells
Splits.TargetingDistance.Cylindrical=false  ; boolean
Splits.TargetCellRange=3                    ; integer, cell offset
Splits.AllowRepeatTargets=false             ; boolean
Splits.UseWeaponTargeting=false             ; boolean
AirburstSpread=1.5                          ; floating point value, distance in cells
Airburst.UseCluster=false                   ; boolean
Airburst.RandomClusters=false               ; boolean
Airburst.TargetAsSource=false               ; boolean
Airburst.TargetAsSource.SkipHeight=false    ; boolean
AroundTarget=                               ; boolean
AirburstWeapon.ApplyFirepowerMult=false     ; boolean
AirburstWeapon.SourceScatterMin=0.0         ; floating point value, distance in cells
AirburstWeapon.SourceScatterMax=0.0         ; floating point value, distance in cells
AirburstWeapon.UseFiringEffects=false       ; boolean
AirburstWeapon.HeadToTarget=false           ; boolean
AirburstWeapon.RadialFireSegments=0         ; integer

备注

SplitsAirburstSpreadRetargetAccuracyRetargetSelfAroundTarget,除了其他新增功能外,应该与 Ares 所引入的类似功能拥有相同效果并且如果 Phobos 与 Ares 一起使用则优先于 Ares 的。

自定义 Cluster 散布距离

  • ClusterScatter.MinClusterScatter.Max 可各自用于设置最小和最大距离,用于当 Cluster 设为一个大于 1 的值时任何额外爆炸可出现的位置相对原爆炸坐标以单元格为单位的距离。

rulesmd.ini

[SOMEPROJECTILE]        ; Projectile
ClusterScatter.Min=1.0  ; floating point value, distance in cells
ClusterScatter.Max=2.0  ; floating point value, distance in cells

自定义抛射体重力

  • 现在你可以为特定抛射体指定其重力。

    • 由于 Gravity=0 会导致抛射体向后飞行并且无法击中不在相同高度的目标因此不推荐设置 Gravity=0 。我们建议使用 直线弹道 替代。

rulesmd.ini

[SOMEPROJECTILE]        ; Projectile
Gravity=6.0             ; floating point value

自定义初始朝向行为

  • 先前拥有 Voxel=true 的抛射体被硬编码为初始向下的弹道。现在该行为可以为其他类型抛射体开启或为 Voxel 抛射体关闭。除了对 Voxel=true 的抛射体默认为 true 外,现对所有 Vertical=true 的抛射体也同样设为 true

rulesmd.ini

[SOMEPROJECTILE]        ; Projectile
VerticalInitialFacing=  ; boolean

自定义 FlakScatter 距离

  • 默认情况下 FlakScatter=true 会使 Inviso=true 的抛射体在按公式 [最小值 * 2, 最大值 * 2]计算出来的单元格距离范围内散布,其中 最小值 为 0,最大值[CombatDamage] -> BallisticScatter,最终散布范围为 [0, 2 * BallisticScatter] 格。此行为现已可以通过 BallisticScatter.Min 设置 最小值 和 通过 BallisticScatter.Max 设置 最大值 来实现自定义。如果没有设置则使用原有的行为作为默认值。注意在估算实际范围时原有算法中的 *2 计算仍然存在。

rulesmd.ini

[SOMEPROJECTILE]      ; Projectile
BallisticScatter.Min= ; floating point value, distance in cells
BallisticScatter.Max= ; floating point value, distance in cells

溅射增强

图像 幽灵计划 中击中地面和建筑的溅射

  • 现在可以通过 Shrapnel.AffectsGroundShrapnel.AffectsBuildings 触发对地面和建筑的溅射。

  • 设置 Shrapnel.UseWeaponTargeting 现在允许为 ShrapnelWeapon 启用武器目标过滤。目标的 LegalTarget 设置、弹头的 VersesArmor 以及 ShrapnelWeapon 武器目标筛选AE 武器过滤 将被检查。

    • 注意这会覆盖允许溅射武器选择非盟友对象的默认检查。使用 CanTargetHouses=enemies 可手动重新启用此行为。

  • Shrapnel.IgnoreHitBuildings 用于覆盖多格建筑可能被溅射子武器多次命中的默认行为。注意这并不能在周围没有满足 ShrapnelCount 数量的目标时阻止建筑 Foundation 内的随机单元格被选为目标。

rulesmd.ini

[CombatDamage]
Shrapnel.IgnoreHitBuildings=false  ; boolean

[SOMEPROJECTILE]                   ; Projectile
Shrapnel.AffectsGround=false       ; boolean
Shrapnel.AffectsBuildings=false    ; boolean
Shrapnel.UseWeaponTargeting=false  ; boolean
Shrapnel.IgnoreHitBuildings=       ; boolean

科技类型

自定义空袭引导效果

  • 现在可以在召唤空袭的单位上自定义目标染色效果及引导激光颜色。

    • LaserTargetColor 用于填写颜色在 [ColorAdd] 中的索引序号。

    • AirstrikeLineColor 用于填写引导激光的颜色。

rulesmd.ini

[AudioVisual]
AirstrikeLineColor=255,0,0  ; integer - Red,Green,Blue

[SOMETECHNO]                ; TechnoType
LaserTargetColor=           ; integer - [ColorAdd] index, default to [AudioVisual] -> LaserTargetColor
AirstrikeLineColor=         ; integer - Red,Green,Blue, default to [AudioVisual] -> AirstrikeLineColor

空袭目标筛选

  • 默认情况下建筑能否被空袭武器(弹头 Airstrike=true)作为目标取决于 CanC4 的值,这也会影响其他方面。现在可以通过设置 AllowAirstrike 来独立更改这一点,如果未设置,默认为 CanC4 的值。对于非建筑类单位这默认为 true。

  • AirstrikeTargets 决定了哪些目标是该弹头的有效空袭目标。

  • 现在空袭的战机会将目标设为单位自身而不再是单位脚下的单元格,因此可以对非建筑类目标正常地进行空袭引导。

rulesmd.ini

[SOMETECHNO]                ; TechnoType
AllowAirstrike=             ; boolean

[SOMEWARHEAD]               ; WarheadType
AirstrikeTargets=buildings  ; List of Affected Target Enumeration (none|infantry|units|buildings|all)

允许禁用索敌中的过度优化

  • 在原版中,有一个针对索敌的优化:如果单位在 1/4 或 1/2 索敌范围内找到一个有效目标,它将不再寻找其他目标。现在你可以禁用它。

    • 该优化对平均性能的影响可以忽略不计,因为大多索敌调用都无法找到有效的目标。

    • 同时,它也影响了游戏体验,因为它会使单位攻击附近的目标而忽略较远处威胁更大的目标。

rulesmd.ini

[General]
DisableOveroptimizationInTargeting=false  ; boolean

允许单位作为其他类型的单位参与小队招募

  • 现在小队(包括 AI 小队招募和 建立作战小队... 行为)招募单位时可以将一个单位视为其他类型的单位。

    • 仅影响存在于地图上的单位。AI 不会在没有作为其他类型参与招募的单位时使从工厂生产它们。

rulesmd.ini

[SOMETECHNO]                      ; TechnoType
TeamMember.ConsideredAs=          ; List of TechnoTypes

跟随炮塔旋转的 AlternateFLH

  • AlternateFLH.OnTurret 可自定义 AlternateFLH 用于 OpenTopped 运输工具的开火坐标、多重心控链接偏移等逻辑时其位置是否相对于炮塔而非车体。

  • AlternateFLH.ApplyVehicle 可用于自定义运输工具的 AlternateFLH 是否作用于载具类载员,它们默认使用自身的 FLH 而不像步兵类载员那样遵照 AlternateFLH

artmd.ini

[SOMETECHNO]                     ; TechnoType
AlternateFLH.OnTurret=true       ; boolean
AlternateFLH.ApplyVehicle=false  ; boolean

自定义建筑提供的自愈

  • 现在可以通过分别在 [General] 中设置 InfantryGainSelfHealCapUnitsGainSelfHealCap 来为 InfantryGainSelfHealUnitsGainSelfHeal 的效果设置全局上限。

  • MultiplayPassive=true 的所属方是否受益于这些效果可以通过 GainSelfHealAllowMultiplayPassive 加以控制。

  • 玩家能否通过带有 PlayerControl=true 的所属方获得这些受益可以通过 GainSelfHealFromPlayerControl 控制。

  • 玩家能否通过盟友所属获得这些受益效果可以由 GainSelfHealFromAllies 控制。

  • 还可以分别为步兵、载具和建筑在 [AudioVisual] 中使用 Pips.SelfHeal.(Infantry/Units/Buildings) 设置各自 pips.shp 中用于显示的 pip 帧。

    • Pips.SelfHeal.(Infantry/Units/Buildings).Offset 可以被用于分别自定义步兵、载具和建筑显示 pip 使用的像素偏移量。

  • 通过设置 SelfHealGainType 可以控制科技类型是否受到 InfantryGainSelfHealUnitsGainSelfHeal 建筑的增益效果或者对两者都不享有。

    • 如果未设置 SelfHealGainType,那么步兵类型和 Organic 设置为 true 载具类型将从 InfantryGainSelfHeal 获得自愈,其他载具类型从 UnitsGainSelfHeal 获得以及战机类型和建筑类型永远不会获得自愈。

rulesmd.ini

[General]
InfantryGainSelfHealCap=                ; integer, maximum amount of InfantryGainSelfHeal that can be in effect at once, must be 1 or higher
UnitsGainSelfHealCap=                   ; integer, maximum amount of UnitsGainSelfHeal that can be in effect at once, must be 1 or higher
GainSelfHealAllowMultiplayPassive=true  ; boolean
GainSelfHealFromPlayerControl=false     ; boolean
GainSelfHealFromAllies=false            ; boolean

[AudioVisual]
Pips.SelfHeal.Infantry=13,20            ; integer, frames of pips.shp for infantry & unit-self healing pips, respectively
Pips.SelfHeal.Units=13,20               ; integer, frames of pips.shp for infantry & unit-self healing pips, respectively
Pips.SelfHeal.Buildings=13,20           ; integer, frames of pips.shp for infantry & unit-self healing pips, respectively
Pips.SelfHeal.Infantry.Offset=25,-35    ; X,Y, pixels relative to default
Pips.SelfHeal.Units.Offset=33,-32       ; X,Y, pixels relative to default
Pips.SelfHeal.Buildings.Offset=15,10    ; X,Y, pixels relative to default

[SOMETECHNO]                            ; TechnoType
SelfHealGainType=                       ; Self-Heal Gain Type Enumeration (noheal|infantry|units)

单位自定义 ChronoSphere 传送延迟

  • 现在可以自定义(全局和所有科技类型)单位通过 Type=ChronoSphere/Warp 超级武器传送前后的延迟。

rulesmd.ini

[General]
ChronoSphereDelay=0     ; integer, game frames
ChronoSpherePreDelay=60 ; integer, game frames

[SOMETECHNO]            ; TechnoType
ChronoSphereDelay=      ; integer, game frames, default to [General] -> ChronoSphereDelay
ChronoSpherePreDelay=   ; integer, game frames, default to [General] -> ChronoSpherePreDelay

警告

由于技术限制,这些设置不适用于 Ares 的自定义 ChronoSphere 超级武器传送的建筑。它们仅有一个共用的 [General] -> ChronoDelay

自定义采矿动画

图像 幽灵计划 中的自定义矿石采集动画

  • 现在你可以在设定特定矿车在采集特定类型的矿石时哪些动画应当被绘制。

rulesmd.ini

[SOMETECHNO]                     ; TechnoType
OreGathering.Anims=              ; List of AnimationTypes
OreGathering.FramesPerDir=15     ; List of integers
OreGathering.Tiberiums=0         ; List of Tiberium IDs

自定义空降单位任务

  • 默认情况下被空降的步兵对人类玩家默认为 Guard,对 AI 玩家默认为 Hunt。原本被空降时对所有玩家都默认为 Guard 的载具类现在默认行为也改为与此一致,并且可以在全局和默认使用全局 [General] 设置的单位微观层面进行自定义。

rulesmd.ini

[General]
ParadropMission=Guard   ; MissionType
AIParadropMission=Hunt  ; MissionType

[SOMETECHNO]            ; TechnoType
ParadropMission=        ; MissionType
AIParadropMission=      ; MissionType

自定义目标评估地图区域检查行为

  • 默认情况下,任何非战机类类型单位通过动作脚本 0 攻击目标类型 或任何 Phobos 引入的小队攻击任务 寻找目标时都会检查潜在目标与攻击单位是否处于同一区域,以便将其选为攻击目标。现在这可以被自定义为允许选择来自任何地图区域的对象且不受限制 (TargetZoneScanType=any) 或者仅当目标在武器射程内时才允许选择 (TargetZoneScanType=inrange)。

rulesmd.ini

[SOMETECHNO]             ; TechnoType
TargetZoneScanType=same  ; target zone scan enumeration (same|any|inrange)

自定义超时空运动设置

图像 YR: New War 中的超时空军团兵与 Ronco 使用不同的超时空设置

  • 现在你可以为每个科技类型指定其超时空运动方式设置以覆盖默认规则的值。未填充值则默认使用 [General] 中的值。

  • 对使用超时空运动方式或者被超时空传送超武移动的科技类型有效。

    • 当单位被 Type=ChronoSphere 的超级武器传送时 Chronoshift.WarpOutChronoshift.WarpIn 会分别替代 WarpOutWarpIn 使用。

  • 单位上的 [TechnoType] -> WarpAway 会在其被 Temporal=yes 的弹头抹除时覆盖 Ares 引入的 [WarheadType] -> Temporal.WarpAway= 生效。

  • 如果 WarpOutWarpInWarpAway 中列出了多个动画,则将随机选择一个。

rulesmd.ini

[SOMETECHNO]            ; TechnoType
WarpOut=                ; List of AnimationTypes (played when Techno warping out), default to [General] -> WarpOut
WarpIn=                 ; List of AnimationTypes (played when Techno warping in), default to [General] -> WarpIn
Chronoshift.WarpOut=    ; List of AnimationTypes (played when Techno warping out by chronosphere), default to [TechnoType] -> WarpOut
Chronoshift.WarpIn=     ; List of AnimationTypes (played when Techno warping in by chronosphere), default to [TechnoType] -> WarpIn
WarpAway=               ; List of AnimationTypes (played when Techno being erased by Temporal=yes warhead), default to [General] -> WarpAway
ChronoTrigger=          ; boolean, if yes then delay varies by distance, if no it is a constant
ChronoDistanceFactor=   ; integer, amount to divide the distance to destination by to get the warped out delay
ChronoMinimumDelay=     ; integer, the minimum delay for teleporting, no matter how short the distance
ChronoRangeMinimum=     ; integer, can be used to set a small range within which the delay is constant
ChronoDelay=            ; integer, delay after teleport for chronosphere

自定义等级军衔

  • 现在可以自定义科技类型的等级军衔。

    • Insignia.(Rookie|Veteran|Elite) 可用于为每个等级设置一个自定义军衔文件。与原本/默认的文件 pips.shp 一样,它们使用 palette.pal 作为色盘进行绘制。

    • InsigniaFrame(.Rookie|Veteran|Elite) 可用于为每个等级阶段设置军衔的(从 0 开始的)帧索引。使用 -1 表示使用默认设置。默认设置对新兵为 -1(无),对老兵为 14,对精英为 15。

      • 也可以使用简写 InsigniaFrames 按顺序列出新兵、老兵和精英的帧索引。InsigniaFrame(.Rookie|Veteran|Elite) 的优先级高于此。

      • 如果设置了 InsigniaType 则上述设置会被 InsigniaType 中定义的属性覆盖。

    • 可以通过设置 Insignia(.Frame/.Frames).WeaponN 来为 Gunner=true 的单位使用不同武器时换成不同的军衔,其中 N 表示基于 1 的武器模式索引。如果不设置,默认使用非特定模式的军衔设置。

      • 如果设置了 InsigniaType.WeaponN 则上述设置会被 InsigniaType 中定义的属性覆盖。

    • 可以通过设置 Insignia(.Frame/.Frames).PassengersN 来为运输工具在拥有不同的载员数量时换成不同的军衔,其中 N 表示当前载员数量(从 0 到运输工具 Passengers 的值)。如果不设置,默认无载员模式的军衔设置。如果已经设置了 Insignia(.Frame/.Frames).WeaponN 则覆盖该语句的效果。

      • 如果设置了 InsigniaType.PassengersN 则上述设置会被 InsigniaType 中定义的属性覆盖。

    • Insignia.ShowEnemy 控制军衔是否对敌方玩家可见。

    • 你可以使用 DrawInsignia.OnlyOnSelected 来使军衔仅出现在被选中的单位上。

    • 可以通过为步兵设置 DrawInsignia.AdjustPos.Infantry、为建筑设置 DrawInsignia.AdjustPos.Buildings、为其他单位设置 DrawInsignia.AdjustPos.Units 来调整军衔的位置。

    • DrawInsignia.AdjustPos.BuildingsAnchor 可以设置一个锚点,用于相对建筑选择框锚定军衔位置。默认情况下军衔位置未锚定到选择框。

    • DrawInsignia.UsePixelSelectionBracketDelta 可以让军衔位置根据单位的 PixelSelectionBracketDelta 在竖直方向上调整位置。

rulesmd.ini

[General]
EnemyInsignia=true                                          ; boolean

[AudioVisual]
DrawInsignia.OnlyOnSelected=false                           ; boolean
DrawInsignia.UsePixelSelectionBracketDelta=false            ; boolean
DrawInsignia.AdjustPos.Infantry=5,2                         ; X,Y, position offset from default
DrawInsignia.AdjustPos.Units=10,6                           ; X,Y, position offset from default
DrawInsignia.AdjustPos.Buildings=10,6                       ; X,Y, position offset from default
DrawInsignia.AdjustPos.BuildingsAnchor=                     ; Hexagon vertex enumeration (top|lefttop|leftbottom|bottom|rightbottom|righttop)

[SOMETECHNO]                                                ; TechnoType
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
InsigniaFrames=-1,-1,-1                                     ; int, frames of insignia shp (zero-based) or -1 for default
Insignia.WeaponN=                                           ; filename - excluding the .shp extension
Insignia.WeaponN.Rookie=                                    ; filename - excluding the .shp extension
Insignia.WeaponN.Veteran=                                   ; filename - excluding the .shp extension
Insignia.WeaponN.Elite=                                     ; filename - excluding the .shp extension
InsigniaFrame.WeaponN=-1                                    ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.WeaponN.Rookie=-1                             ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.WeaponN.Veteran=-1                            ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.WeaponN.Elite=-1                              ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrames.WeaponN=-1,-1,-1                             ; int, frames of insignia shp (zero-based) or -1 for default
Insignia.PassengersN=                                       ; filename - excluding the .shp extension
Insignia.PassengersN.Rookie=                                ; filename - excluding the .shp extension
Insignia.PassengersN.Veteran=                               ; filename - excluding the .shp extension
Insignia.PassengersN.Elite=                                 ; filename - excluding the .shp extension
InsigniaFrame.PassengersN=-1                                ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.PassengersN.Rookie=-1                         ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.PassengersN.Veteran=-1                        ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.PassengersN.Elite=-1                          ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrames.PassengersN=-1,-1,-1                         ; int, frames of insignia shp (zero-based) or -1 for default
Insignia.ShowEnemy=                                         ; boolean, defaults to [General] -> EnemyInsignia

备注

除了使用 InsigniaFrames 简写外,自定义军衔功能类似于 Ares 引入的相应功能,并且如果 Phobos 与 Ares 一起使用则优先于 Ares 的。

自定义水波动画

  • 现在你可以为每个科技类型指定 Wake 动画以覆盖默认规则值。

    • Wake.GrappleWake.Sinking 可用于在科技类型被寄生或沉没时进一步自定义水波动画。

  • 此外,你现在可以自定义单位移动时是否生成水波。

    • Walk 运动模式现在也同样可以生成水波。

    • 使用 MakesWake 在每个单位上自定义。

rulesmd.ini

[AudioVisual]
WalkLocomotorMakesWake=false   ; boolean
HoverLocomotorMakesWake=true   ; boolean
DriveLocomotorMakesWake=true   ; boolean
ShipLocomotorMakesWake=true    ; boolean

[SOMETECHNO]         ; TechnoType
MakesWake=           ; boolean, default to the global value that matches the techno's current locomotor
Wake=                ; Anim (played when Techno moving on the water), default to [General] -> Wake
Wake.Grapple=        ; Anim (played when Techno being parasited on the water), defaults to [TechnoType] -> Wake
Wake.Sinking=        ; Anim (played when Techno sinking), defaults to [TechnoType] -> Wake

自定义桥上坠落伤害

图像 @暴风硫零点界限 中根据是否落入水中使用不同的坠落伤害

  • 现在你可以自定义单位从桥上坠落时受到的伤害。

  • FallingDownDamage 用于自定义单位坠落触底时所受到的伤害值,可以是比率或固定整数值。

  • FallingDownDamage.Water 用于自定义单位坠落到水中时所受的伤害值,默认同 FallingDownDamage

  • FallingDownDamage.AllowEMP 决定被 EMP 瘫痪的单位能否使用 FallingDownDamage/FallingDownDamage.Water。默认值为 true

  • 若设置负百分比则会根据单位当前生命值按比例造成对应伤害。

rulesmd.ini

[SOMETECHNO]                        ; TechnoType
FallingDownDamage=                  ; integer / percentage
FallingDownDamage.Water=            ; integer / percentage
FallingDownDamage.AllowEMP=true     ; boolean

自定义伤残速度

  • 原版中 Locomotor 使用 DriveShip 的单位在伤残时有一个硬编码的速度倍率。现在你可以自由定义了。

  • 最大有效值为 1.0,你无法凭借这个逻辑让单位在黄血时变得更快。

rulesmd.ini

[General]
DamagedSpeed=0.75        ; floating point value, multiplier

[SOMETECHNO]             ; TechnoType
DamagedSpeed=            ; floating point value, multiplier

Voxel 碎片数量限制

  • 当启用 DebrisTypes.Limit 时可通过原有的 DebrisMaximums 结合新增的 DebrisMinimums 共同限制 DebrisTypes 的数量。

    • 出于兼容目的,若 DebrisMaximums 大于(不包括等于)1 则默认启用 DebrisTypes.Limit

rulesmd.ini

[SOMETECHNO]        ; TechnoType
DebrisTypes.Limit=  ; boolean
DebrisMaximums=     ; List of integers
DebrisMinimums=     ; List of integers

提示

游戏如何生成 DebrisTypes

  1. 首先通过 MaxDebrisMinDebris 确定所要生成碎片的总量。

  2. 遍历 DebrisTypes 列表并通过 DebrisMaximumsDebrisMinimums 限制数量范围。

  3. 当已生成碎片数量将要超过总量时限制数量并停止遍历。

  4. 当遍历完成但碎片的数量并未达到总量时,若启用 DebrisTypes.Limit 则直接结束,否则按原版游戏机制重新进行遍历。

空降仓

  • 现在可以在每个非建筑类单位上微观定义 DropPod 属性。

    • 如果你要将尾烟动画附加到空降仓上,请将 DropPod.Trailer.Attached 设为 yes。

    • 默认情况下附加到步兵上的激光尾焰如果处于 DropPod 状态将不会绘制。

      • 如果你实在想要使用它,那么请在 art 中的激光尾焰条目下设置 DropPodOnly

    • 如果要在着陆时才发射 DropPod.Weapon,请将 DropPod.Weapon.HitLandOnly 设为 true。

    • 由于某些未知原因着陆速度不小于其当前高度 / 20 + 2 的值。因此较小的 DropPod.Speed 值会导致指数级减速。

备注

由于技术限制,DropPod.AirImage 仅在步兵类单位上绘制(因为空降仓本身就是替换了图像的步兵自身)。未来可能会进行更改。

rulesmd.ini

[SOMETECHNO]                  ; TechnoType
DropPod.Angle=                ; double, default to [General] -> DropPodAngle, measured in radians
DropPod.AtmosphereEntry=      ; anim, default to [AudioVisual] -> AtmosphereEntry
DropPod.GroundAnim=           ; 2 anims, default to [General] -> DropPod
DropPod.AirImage=             ; SHP file, the pod's shape, default to POD
DropPod.Height=               ; int, default to [General] -> DropPodHeight
DropPod.Puff=                 ; anim, default to [AudioVisual] -> DropPodPuff
DropPod.Speed=                ; int, default to [General] -> DropPodSpeed
DropPod.Trailer=              ; anim, default to [General] -> DropPodTrailer, which by default is SMOKEY
DropPod.Trailer.Attached=     ; boolean, default to no
DropPod.Trailer.SpawnDelay=   ; int, number of frames between each spawn of DropPod.Trailer, default to 6
DropPod.Weapon=               ; weapon, default to [General] -> DropPodWeapon
DropPod.Weapon.HitLandOnly=   ; boolean, default to no

备注

[General] -> DropPodTrailer 是一个 Ares 功能

爆炸对象的自定义

  • 默认情况下 Explodes=true 的科技类型被摧毁时它们的所有乘客都会被击杀。现在可以通过设置 Explodes.KillPassengers=false 禁用此行为。

  • 默认情况下拥有 Explodes=true 的建筑即使处于建造或出售过程中也可以引爆。可以通过设置 Explodes.DuringBuildup 为 false 来禁用。这样它们在建造或出售过程中会表现得像是 Explodes 被设为 false 一样。

rulesmd.ini

[SOMETECHNO]                 ; TechnoType
Explodes.KillPassengers=true ; boolean

[SOMEBUILDING]               ; BuildingType
Explodes.DuringBuildup=true  ; boolean

禁止 AI 并行生产队列

  • 现在你可以设置特定类型的工厂是否禁用 AI 克隆生产而不是 Ares 的 AllowParallelAIQueues=no 那样全部禁用。

    • 如果 AllowParallelAIQueues=noAres 功能)被设置,该标签无效。

  • 你还可以通过在科技类型上将 ForbidParallelAIQueues 设为 true 来禁止特定科技类型被 AI 克隆生产。

rulesmd.ini

[GlobalControls]
AllowParallelAIQueues=yes           ; must be set yes/true unless you don't use Ares
ForbidParallelAIQueues.Infantry=no  ; boolean
ForbidParallelAIQueues.Vehicle=no   ; boolean
ForbidParallelAIQueues.Navy=no      ; boolean
ForbidParallelAIQueues.Aircraft=no  ; boolean
ForbidParallelAIQueues.Building=no  ; boolean

[SOMETECHNO]                        ; TechnoType
ForbidParallelAIQueues=false        ; boolean

强制单位索敌行为分散到不同帧以提升性能

  • 当你在同一帧内创建大量单位(例如进入一个初始预置了大量单位的战役地图)时它们总是会同时扫描目标从而导致游戏卡顿。仅通过增大索敌间隔并不能改善这点,因为它们仍会同时索敌。

  • 现在可以强制它们分别寻找目标。如果设置 DistributeTargetingFrame=true,单位的瞄准计时器将在随机延迟后启动,延迟范围在 [0,15] 之间。这可以将它们的瞄准时间分散在 15 帧内,从而缓解上述卡顿问题。

    • 你可以使用 DistributeTargetingFrame.AIOnly 使其仅对 AI 生效(人类玩家通常不太可能有那么多单位)。

rulesmd.ini

[General]
DistributeTargetingFrame=false         ; boolean
DistributeTargetingFrame.AIOnly=true   ; boolean

[SOMETECHNO]                           ; TechnoType
DistributeTargetingFrame=              ; boolean

铁幕和力场护盾对有机体效果的自定义

  • 在原本的游戏中,当铁幕效果应用于例如巨型乌贼和步兵这种 Organic=true 的单位时,它们只能被 C4Warhead 瞬间击杀。现在此行为已被解除硬编码,并且可以通过全局的 IronCurtain.EffectOnOrganics 和每个科技类型的 IronCurtain.Effect 属性来自定义。可接受的值如下:

    • kill:铁幕会用特定的弹头杀死有机体,这是 Organic=true 单位和步兵的默认值,除非专门指定。

    • invulnerable:铁幕会使有机体像建筑和载具一样获得无敌效果。

    • ignore:铁幕不会对有机体造成任何影响。

  • 力场护盾也有相同的控制选项。

rulesmd.ini

[CombatDamage]
IronCurtain.EffectOnOrganics=kill  ; Iron Curtain effect Enumeration (kill | invulnerable | ignore)
IronCurtain.KillOrganicsWarhead=   ; WarheadType, default to [CombatDamage] -> C4Warhead
ForceShield.EffectOnOrganics=kill  ; Iron Curtain effect Enumeration (kill | invulnerable | ignore)
ForceShield.KillOrganicsWarhead=   ; WarheadType, default to [CombatDamage] -> C4Warhead

[SOMETECHNO]                       ; TechnoType with Organic=true
IronCurtain.Effect=                ; IronCurtain effect Enumeration (kill | invulnerable | ignore)
IronCurtain.KillWarhead=           ; WarheadType, default to [CombatDamage] -> IronCurtain.KillOrganicsWarhead
ForceShield.Effect=                ; IronCurtain effect Enumeration (kill | invulnerable | ignore)
ForceShield.KillWarhead=           ; WarheadType, default to [CombatDamage] -> ForceShield.KillOrganicsWarhead

Jumpjet 旋转着坠毁的开关

  • 即将坠毁的 Jumpjet 会开始不可控地改变其朝向,现在可以将其关闭。

rulesmd.ini

[SOMETECHNO]               ; TechnoType
JumpjetRotateOnCrash=true  ; boolean

警告

这可能会在未来进一步更改。

断电时击杀子机

  • 拥有 Powered=yes 的建筑航母在断电时将会停止攻击敌人。

  • 被生成的战机如果正在飞行那么会自毁。

rulesmd.ini

[SOMESTRUCTURE]          ; BuildingType
Powered.KillSpawns=false ; boolean

自定义 PipScale

  • 现在可以更改在 PipScale 中显示的 pip 的大小(或者更确切的说是绘制下一个 pip 的像素增量)。

    • Pips.Generic.(Buildings.)Size 用于非建筑科技类型/建筑的非弹药 pip,相应的,Pips.Ammo.(Buildings.)Size 则是针对弹药 pip,同样分别对应非建筑科技类型/建筑。

    • 还可以通过 AmmoPipSize 为每个科技类型重写弹药 pip 的大小。

  • 现在也可以自定义弹药 pip 的帧。

    • AmmoPipFrameEmptyAmmoPipFrame 是在 PipWrap=0(这是默认行为)时使用的 pips2.shp 中(从 0 开始的)帧,用于弹药 pip 和空弹药 pip。

    • AmmoPipWrapStartFrame 用作 PipWrap 大于 0 时将 pips2.shp 中(从 0 开始的)帧设为起始帧。起始帧是空帧,从起始帧之后最多有 Ammo 除以 PipWrap 个帧用于不同的装填阶段。

    • AmmoPipOffset 可用于移动弹药 pip 的起始位置。

  • 现在带有 Spawns 的科技类型的 pip 也可以进行自定义。

    • ShowSpawnsPips 决定这些 pip 是否显示,因为它们与 PipScale 设置无关。

    • SpawnsPipFrameEmptySpawnsPipFrame 分别是 pips.shp(对于建筑)或 pips2.shp(对于其他)中(从 0 开始的)帧,用于子机 pip 和空子机 pip。

    • SpawnsPipSize 决定了到下一个 pip 绘制的像素增量。若未设置则默认为 [AudioVisual] -> Pips.Generic.(Buildings.)Size

    • SpawnsPipoffset 可以被用于移动子机 pip 的起始位置。

  • 现在可以通过 [AudioVisual] 中的新标签来自定义 Storage 的 pip。

    • Pips.Tiberiums.Frames 可用于列出用于泰伯利亚类型的 pips.shp(用于建筑)或 pips2.shp(用于其他)中(从 0 开始的)帧,按与泰伯利亚类型序数对应的列表排列顺序,泰伯利亚类型为 1 时默认为 5,否则为 2。

      • Pips.Tiberiums.EmptyFrame 可用于设置空槽的帧,默认为 0。

    • Pips.Tiberiums.DisplayOrder 控制泰伯利亚类型 pip 显示的顺序,取一个泰伯利亚类型索引列表。任何未列出的将在列出后按顺序显示。

    • Pips.Tiberiums.WeedFrame 控制在 Weeder=yes 科技类型上显示的帧,使用 pips.shp(用于建筑)或 pips2.shp(用于其他)中(从 0 开始的)索引,默认为 1。

      • Pips.Tiberiums.WeedEmptyFrame 可用于设置空置废矿槽的帧,默认为 0。

rulesmd.ini

[AudioVisual]
Pips.Generic.Size=4,0                ; X,Y, increment in pixels to next pip
Pips.Generic.Buildings.Size=4,2      ; X,Y, increment in pixels to next pip
Pips.Ammo.Size=4,0                   ; X,Y, increment in pixels to next pip
Pips.Ammo.Buildings.Size=4,2         ; X,Y, increment in pixels to next pip
Pips.Tiberiums.EmptyFrame=0          ; integer, frame of pips.shp (buildings) or pips2.shp (others) (zero-based)
Pips.Tiberiums.Frames=2,5,2,2        ; List of integers, frames of pips.shp (buildings) or pips2.shp (others) (zero-based)
Pips.Tiberiums.DisplayOrder=0,2,3,1  ; List of integers, tiberium type indices
Pips.Tiberiums.WeedEmptyFrame=0      ; integer, frame of pips.shp (buildings) or pips2.shp (others) (zero-based)
Pips.Tiberiums.WeedFrame=1           ; integer, frame of pips.shp (buildings) or pips2.shp (others) (zero-based)

[SOMETECHNO]                         ; TechnoType
AmmoPipFrame=13                      ; integer, frame of pips2.shp (zero-based)
EmptyAmmoPipFrame=-1                 ; integer, frame of pips2.shp (zero-based)
AmmoPipWrapStartFrame=14             ; integer, frame of pips2.shp (zero-based)
AmmoPipSize=                         ; X,Y, increment in pixels to next pip
AmmoPipOffset=0,0                    ; X,Y, position offset from default
ShowSpawnsPips=true                  ; boolean
SpawnsPipFrame=1                     ; integer, frame of pips.shp (buildings) or pips2.shp (others) (zero-based)
EmptySpawnsPipFrame=0                ; integer, frame of pips.shp (buildings) or pips2.shp (others) (zero-based)
SpawnsPipSize=                       ; X,Y, increment in pixels to next pip
SpawnsPipOffset=0,0                  ; X,Y, position offset from default

单位消耗电力

  • 如果设置了 UnitPowerDrain=true,步兵、载具和战机现在都将可以消耗或提供 Power

rulesmd.ini

[General]
UnitPowerDrain=false  ; boolean

[SOMETECHNO]          ; TechnoType
Power=0               ; integer, positive means output, negative means drain

不仅限于敌方的 RadarInvisible

  • 在原版游戏中 RadarInvisible 仅对当前非友军的玩家有效,现在你可以更改这一行为。

rulesmd.ini

[SOMETECHNO]                         ; TechnoType
RadarInvisibleToHouse=               ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all), default to enemy if RadarInvisible=true, none otherwise

潜地单位移动高度和速度

  • 现在可以控制拥有潜地(Tunnel)Locomotor 的单位移动的高度,可以在全局和每个科技类型上定义。

  • 潜地移动速度现在也可以自定义,同样拥有全局和微观标签。如果微观标签的值为负数则使用全局值。这不会影响单位在潜地时的垂直移动速度。该速度由 Speed * [General] -> TunnelSpeed 决定。

rulesmd.ini

[General]
SubterraneanHeight=-256  ; integer, height in leptons (1/256th of a cell)
SubterraneanSpeed=19     ; floating point value

[SOMETECHNO]             ; TechnoType
SubterraneanHeight=      ; integer, height in leptons (1/256th of a cell)
SubterraneanSpeed=-1     ; floating point value

警告

SubterraneanHeight 最好使用一个负值并且如果设置为大于 -50 的值可能会出现异常行为。

索敌间隔优化

  • 原版中游戏使用 NormalTargetingDelayGuardAreaTargetingDelay 来全局控制单位的索敌间隔。增大这些值会导致单位反应迟钝,减小这些值则可能导致游戏卡顿。

  • 现在可以在每种单位上微观定义这些参数,且可为 AI 玩家和人类玩家分离设置。默认值取自原版全局。

    • 你还可以为移动攻击指令单独设定间隔。默认使用 NormalTargetingDelay 的值。

rulesmd.ini

[General]
AINormalTargetingDelay=              ; integer, game frames
PlayerNormalTargetingDelay=          ; integer, game frames
AIGuardAreaTargetingDelay=           ; integer, game frames
PlayerGuardAreaTargetingDelay=       ; integer, game frames
AIAttackMoveTargetingDelay=          ; integer, game frames
PlayerAttackMoveTargetingDelay=      ; integer, game frames

[SOMETECHNO]                         ; TechnoType
AINormalTargetingDelay=              ; integer, game frames
PlayerNormalTargetingDelay=          ; integer, game frames
AIGuardAreaTargetingDelay=           ; integer, game frames
PlayerGuardAreaTargetingDelay=       ; integer, game frames
AIAttackMoveTargetingDelay=          ; integer, game frames
PlayerAttackMoveTargetingDelay=      ; integer, game frames

自定义目标扫描/警戒的距离

  • MaxGuardRange 可用于自定义目标扫描范围(例如 GuardRange 值或当其未设置(为 0)时取所有武器射程中最大者值)的硬性上限。注意游戏在应用此上限前会将有效范围翻倍,例如原始范围为 8 就会触及该上限。

  • AreaGuardRange 会覆盖当前处于 Area Guard 任务中(例如被下达警戒命令)的单位自身显式设置的 GuardRange 值。一般来说,如果 GuardRange 为 0 或未设置则它会默认使用单位所有武器射程中最大的那个。

rulesmd.ini

[SOMETECHNO]     ; TechnoType
MaxGuardRange=16 ; floating point value, distance in cells
AreaGuardRange=  ; floating point value, distance in cells

Voxel 主体多组件阴影

图像 万世之战 中拥有可动螺旋桨及其影子的 UH-0 直升机

  • 现在载具和战机可以通过在单位的 artmd.ini 条目中使用 ShadowIndices(默认为 ShadowIndex)指定多个组件索引来一性次显示出 Voxel 主体中多个组件的影子,而不再仅限于绘制 ShadowIndex 所指定的单个组件。

    • ShadowIndex.FrameShadowIndices.Frame 可以分别用于自定义从 ShadowIndexShadowIndices 所指定组件的 HVA 动画中显示影子时所使用的帧。-1 是一个用于表示使用当前帧的特殊值,并且 ShadowIndices.Frame 默认如此。

artmd.ini

[SOMETECHNO]          ; TechnoType
ShadowIndices=        ; List of integers (voxel section indices)
ShadowIndex.Frame=0   ; integer (HVA animation frame index)
ShadowIndices.Frame=  ; List of integers (HVA animation frame indices)

Voxel 在空中时的影子缩放

  • 现在可以调整 Voxel 空中单位(载具和战机)的影子如何缩放。默认情况下如果单位拥有 ConsideredAircraft=true 那么影子会按 AirShadowBaseScale (默认为 0.5)进行缩放

    • 如果 HeightShadowScaling=true,影子会根据以下公式缩放: Max(AirShadowBaseScale ^ (currentHeight / ShadowSizeCharacteristicHeight), HeightShadowScaling.MinScale),这里的 currentHeight 是单位当前高度(单位 lepton),ShadowSizeCharacteristicHeight 是一个可覆盖的值,默认为最大巡航高度(JumpjetHeightFlightLevel 等),而 HeightShadowScaling.MinScale 设置了缩放的下限。

rulesmd.ini

[AudioVisual]
AirShadowBaseScale=0.5            ; floating point value
HeightShadowScaling=false         ; boolean
HeightShadowScaling.MinScale=0.0  ; floating point value

[SOMETECHNO]                      ; TechnoType
ShadowSizeCharacteristicHeight=   ; integer, height in leptons

地形对象

动画化地形对象

会动的树 Ion Shock 中会动的树

  • 默认情况下 IsAnimatedAnimationRateAnimationProbability 仅适用于 SpawnsTiberium 设置为 true 的地形对象。这一限制已被解除。

    • 现在动画的长度可以通过设置 AnimationLength 来自定义,默认为地形对象图像帧数的一半(如果启用了破损帧则为四分之一)。

rulesmd.ini

[SOMETERRAINTYPE]  ; TerrainType
AnimationLength=   ; integer, number of frames

自定义色盘

  • 现在你可以像为科技类型那样为地形对象指定自定义色盘。

artmd.ini

[SOMETERRAINTYPE]  ; TerrainType
Palette=           ; filename - excluding .pal extension and three-character theater-specific suffix

备注

此色盘的行为就像原有的对象色盘那样不受光效影响。也就是地形对象将不会同步使用应用于地形对象所在地块上的色调。

自定义矿柱

图像 东方崛起 中不同的矿柱

  • 现在你可以指定地形对象将会生成哪种矿石。

  • 现在还可以指定与标准 3x3 矩形不同的矿石生成区域范围值。矿石将均匀地分布在扩散范围内所有受影响的单元格中。

  • 此外也可以指定将生成哪个矿石生长阶段以及每次播放矿石生成动画将会填充多少个单元格。相对应的标签接受单个整数值或两个逗号分隔的值以允许范围内(含)随机化的生长阶段。

rulesmd.ini

[SOMETERRAINTYPE]             ; TerrainType
SpawnsTiberium.Type=0         ; tiberium/ore type index
SpawnsTiberium.Range=1        ; integer, range in cells
SpawnsTiberium.GrowthStage=3  ; integer - single or comma-sep. range
SpawnsTiberium.CellsPerAnim=1 ; integer - single or comma-sep. range
SpawnsTiberium.Particle=      ; Particle

伤残和倒坍动画

  • 默认情况下游戏在地形对象仅 1 点血时显示破损帧。由于原本游戏中的地形对象资源文件并未考虑这一点因此目前该逻辑仅限添加了 HasDamagedFrames 的情况下使用。

    • 地形对象不再在仅剩 1 点血时显示破损帧,而是在其血量达到 [AudioVisual] -> ConditionYellow.Terrain 的百分比时才进行切换。

  • 此外,地形对象现在可以在其血量归 0 后到从地图中删除前的这段时间中通过设置 HasCrumblingFrames 为 true 来显示一个 “倒坍” 动画。

    • 倒坍所用的帧从紧随于常规帧和破损帧之后的第一帧开始直到地形对象图像帧的一半处中止(另一半是影子)。

    • 当倒坍动画开始播放时将会播放 CrumblingSound(如果设置)指定的音效。

    • 摧毁动画和音效 仅在倒坍动画结束后播放。

rulesmd.ini

[AudioVisual]
ConditionYellow.Terrain=  ; floating point value, default to [AudioVisual] -> ConditionYellow

[SOMETERRAINTYPE]         ; TerrainType
HasDamagedFrames=false    ; boolean
HasCrumblingFrames=false  ; boolean
CrumblingSound=           ; Sound entry

备注

此处考虑的常规帧和破损帧数量取决于 HasDamagedFrames 的值,对于 IsAnimated 的地形对象则取决于 AnimationLength 的值(见 动画化地形对象)。请谨慎操作以确保显示的帧数正确。

自定义小地图颜色

  • 现在地形对象可以通过设置 MinimapColor 使用不同的颜色显示在小地图上。

rulesmd.ini

[SOMETERRAINTYPE]  ; TerrainType
MinimapColor=      ; integer - Red,Green,Blue

可通行和可建造于其上的地形对象

  • 现在可以分别通过设置 IsPassableCanBeBuiltOn 来让地形对象可通行或可以将建筑建造于其上。

    • 除非使用强制开火否则 IsPassable 的地形对象上会显示移动光标。

    • CanBeBuiltOn=true 的地形对象在建筑建造于其上时会被移除。

rulesmd.ini

[SOMETERRAINTYPE]   ; TerrainType
IsPassable=false    ; boolean
CanBeBuiltOn=false  ; boolean

泰伯利亚(矿石)

自定义小地图颜色

  • 矿石现在可以通过设置 MinimapColor 使用不同的颜色显示在小地图上。

rulesmd.ini

[SOMEORE]      ; Tiberium
MinimapColor=  ; integer - Red,Green,Blue

载具类型

允许矿车区域警戒

  • 在原版中当一个矿车进入 Area Guard 任务时会立即切换为 Havrest 任务。现在你可以让它们像其他单位那样正常执行 Area Guard 任务了。

    • 这仅对玩家控制的矿车有效,因为这会阻断 AI 矿车正常工作。

    • Harvester.CanGuardArea.RequireTarget 设为 true,当单位警戒范围内不存在有效目标时将会切换回通常所用的 Havrest 任务。

rulesmd.ini

[SOMEVEHICLE]                               ; VehicleType
Harvester.CanGuardArea=false                ; boolean
Harvester.CanGuardArea.RequireTarget=false  ; boolean

去除坦克碉堡准入检查的硬编码

  • 在原版,载具进入坦克碉堡时受到一系列硬编码限制,包括必须拥有炮塔、必须拥有武器以及速度类型不能为 SpeedType=Hover。现在你可以跳过这些限制。

  • 这需要与 Bunkerable=yes 共同使用。

  • 这个标签仅跳过静态检查,即对单位类型的检查。动态检查(不能处于被寄生状态)保持不变。

rulesmd.ini

[SOMEVEHICLE]              ; VehicleType
BunkerableAnyway=false     ; boolean

警告

使用此功能跳过检查并不就意味着载具和坦克碉堡可以正确的交互。根据次功能提供者的简单检查,坦克碉堡的效果主要受到运动模式影响。不同运动模式进入坦克碉堡的详细信息可以在 MODENC 上找到。

自定义单位箱子重新随机选取的概率

  • 现在可以通过 CrateGoodie.RerollChance 来影响从升级工具箱 (CrateGoodie=true) 中获得一个单位的权重,该值决定了如果随机到这种类型的单位,那么它将重新随机另一种单位的概率。

rulesmd.ini

[SOMEVEHICLE]                  ; VehicleType
CrateGoodie.RerollChance=0.0   ; floating point value, percents or absolute (0.0-1.0)

自定义矿车单次倒矿量

  • 现在你可以限制矿车每次倒矿时卸载的矿石量,就像《泰伯利亚之日》中的设定

  • 若该值小于等于 0 则表示一次倒完,就像《红色警戒2》中原本的行为

rulesmd.ini

[General]
HarvesterDumpAmount=0.0               ; floating point value

[SOMEVEHICLE]                         ; VehicleType
HarvesterDumpAmount=                  ; floating point value

自定义 HarvesterDumpRate

  • 现在 HarvesterDumpRate 可以在每个单位上自定义了。

rulesmd.ini

[SOMEVEHICLE]                         ; VehicleType
HarvesterDumpRate=                    ; floating point value, default to [General] -> HarvesterDumpRate

自定义 HarvesterLoadRate

  • 现在 HarvesterLoadRate 可以在每个单位上自定义了。

rulesmd.ini

[SOMEVEHICLE]                         ; VehicleType
HarvesterLoadRate=                    ; integer, default to [General] -> HarvesterLoadRate

自定义 IFV 的类型选择

在原文的游戏中,当对 IFV 使用类型选择命令时会直接选中所有 IFV 而无论其当前的模式,现在这可以自定义了。

  • WeaponGroupAsN 决定当 IFV 启用 WeaponN 时所属的组别,N 为从 1 开始的武器模式序号。进行类型选择时将会选中同组 IFV 而不会包含非同组的。

  • TypeSelectUseIFVMode 决定类型选择时所有 IFVMode 是否默认自成一组。

    • 若设为 true 则 WeaponGroupAsN 默认为 N 的值以使每个模式都作为独立的组。

    • 若设为 false 则 WeaponGroupAsN 将默认为 0 以保持原有行为。

rulesmd.ini

[General]
TypeSelectUseIFVMode=false   ; boolean

[SOMEVEHICLE]                ; VehicleType
WeaponGroupAsN=              ; string, default to N if [General] -> TypeSelectUseIFVMode=true, and 0 if false
  • 此行为设计为可由用户切换。目前你只能通过客户端或进行手动设置。

RA2MD.INI

[Phobos]
TypeSelectUseIFVMode=true   ; boolean

自定义碾压倾斜和减速

  • 拥有 Crusher=trueOmniCrusher=true / MovementZone=CrusherAll 的载具在碾压载具/围墙时原版被硬编码进行倾斜。现在这遵守 TiltsWhenCrushes,并且可以对 TiltsWhenCrusher.VehiclesTiltsWhenCrusher.Overlays 对两种情况分别进行定义,它们都默认为 TiltsWhenCrushes

  • CrushForwardTiltPerFrame 决定在碾压覆盖物或载具时每帧前倾的幅度。对于 Locomotor=Ship 的载具碾压覆盖物的时默认为 -0.02,其他情况默认为 -0.050000001。

  • CrushOverlayExtraForwardTilt 是载具碾压覆盖物后额外的向前倾斜量

  • 可以通过设置 CrushSlowdownMultiplier 来自定义 MovementZone=CrusherAll 的载具碾压围墙时移动速度的减速幅度。

  • 你还可以使用 SkipCrushSlowdown 来完全禁用这一减速效果。这不同于 CrushSlowdownMultiplier=1.0。它可以避免 Accelerates=trueMovementZone=CrushAll 共用时单位有时会减速的 Bug。

rulesmd.ini

[SOMEVEHICLE]                      ; VehicleType
TiltsWhenCrushes.Vehicles=         ; boolean
TiltsWhenCrushes.Overlays=         ; boolean
CrushForwardTiltPerFrame=          ; floating point value
CrushOverlayExtraForwardTilt=0.02  ; floating point value
CrushSlowdownMultiplier=0.2        ; floating point value
SkipCrushSlowdown=false            ; boolean

部署增强

  • 当载具有 Passengers 的同时还有 DeployFire/IsSimpleDeployer/DeploysInto 则可以执行释放乘客以外的其他部署动作。

    • Deploy.SkipPassengerUnload 允许载具跳过乘客释放流程执行其他部署动作。

    • Deploy.NoPassenger 允许载具在释放所有乘客后执行其他部署动作。

  • 矿车现在可以执行其他部署操作,不过倒矿期间不能部署。

    • Deploy.NoTiberium 控制是否仅在矿车未装载矿石时才能执行部署动作。若设为 false 则无论是否携带矿石均可。

rulesmd.ini

[SOMEVEHICLE]                       ; VehicleType
Deploy.SkipPassengerUnload=false    ; boolean
Deploy.NoPassenger=false            ; boolean
Deploy.NoTiberium=false             ; boolean

摧毁动画

  • DestroyAnim 已扩展至载具类型,并且如果 DestroyAnim.Random 设为 true 那么可以随机选取其中一个动画。这些动画存储了所属方和朝向信息以供 动画生成单位 逻辑使用。

rulesmd.ini

[SOMEVEHICLE]                          ; VehicleType
DestroyAnim=                           ; List of AnimationTypes
DestroyAnim.Random=true                ; boolean

IsSimpleDeployer 载具在部署时更改弹药

  • Ammo.AddOnDeploy 决定载具部署或反部署后增加或减少的弹药量。

    • 弹药数不得低于 0 或高于该载具类型的最大弹药量(若部署操作导致单位转换则以转换后的量为准)。

rulesmd.ini

[SOMEVEHICLE]       ; VehicleType
Ammo.AddOnDeploy=0  ; integer

自定义 IsSimpleDeployer

  • 现在可以通过 IsSimpleDeployer.ConsiderPathfinding=true 来开启对将部署的单位(若使用单位转换则检查作为转换目标的单位)是否允许在当前单元格上部署的检查,部署光标也会跟随变化。

    • 你可以使用 IsSimpleDeployer.DisallowedLandTypes 来指定单位不能在哪些土地类型上部署。对于 Locomotor=JumpjetLocomotor=Hover 且拥有 DeployToLand=true 的单位默认为 water,beach;对于其他单位则默认为 none

  • 在原版游戏中仅拥有 DeployingAnim 的单位会被限制使用特定的部署朝向且无法为每个单位自定义。Ares 允许通过 DeployDir(对于拥有 DeployingAnim 的单位默认为 [AudioVisual] -> DeployDir,否则为 -1)来为每个单位单独设定,Phobos 允许使用特殊值 -1 来解除朝向限制。

  • 部署动画相关的多个新增选项:

    • 可使用 DeployingAnims 代替 DeployingAnim(当都被设置时优先使用前者)来定义一组与方向对应的部署动画。根据所列动画的最大数量取 2 的幂值作为方向数/动画数。若少于 8 个则仅适用列出的第一个动画。

    • DeployingAnim.KeepUnitVisible 决定单位是否在动画播放期间被隐藏。

    • DeployingAnim.ReverseForUndeploy 控制反部署时是否使动画反向播放。

    • DeployingAnim.UseUnitDrawer 控制动画使用 unit 色盘以及所属色还是常规动画色盘,包括潜在的自定义色盘。

rulesmd.ini

[SOMEVEHICLE]                               ; VehicleType
IsSimpleDeployer.ConsiderPathfinding=false  ; boolean
IsSimpleDeployer.DisallowedLandTypes=       ; List of LandTypes (none | clear | road | water | rock | wall | tiberium | beach | rough | ice | railroad | tunnel | weeds)
DeployDir=                                  ; Facing type (integers from 0-7 or -1)
DeployingAnims=                             ; List of AnimationTypes
DeployingAnim.KeepUnitVisible=false         ; boolean
DeployingAnim.ReverseForUndeploy=true       ; boolean
DeployingAnim.UseUnitDrawer=true            ; boolean

使矿车卸载后重新扫描较近的矿区

  • 在原版中矿车在满载时会记录当前位置并在卸载后返回该坐标。这一机制会让矿车逐渐向原矿区深处探索但却容易忽略距离更近的矿区。

  • 现在你可以让矿车在卸载后重新搜索最近的矿区。如果发现了更近的矿区那么矿车会优先前往它而不是返回先前记录的坐标。

rulesmd.ini

[General]
HarvesterScanAfterUnload=false     ; boolean

[SOMEVEHICLE]                      ; VehicleType
HarvesterScanAfterUnload=          ; boolean, default to [General] -> HarvesterScanAfterUnload

在单位转换时保留铁幕/力场护盾状态

图像 Bug 修复后的行为

  • 通过 DeploysIntoUndeploysInto 在科技类型之间的转换现在默认保留铁幕状态。力场护盾则默认不保留。

    • 这一行为可以对每个科技类型和全局进行开启/关闭。

    • IronCurtain.ModifierForceShield.Modifier(视情况而定)将在单位转换时刷新。

rulesmd.ini

[CombatDamage]
IronCurtain.KeptOnDeploy=true   ; boolean
ForceShield.KeptOnDeploy=false  ; boolean

[SOMETECHNO]                    ; VehicleType with DeploysInto or BuildingType with UndeploysInto
IronCurtain.KeptOnDeploy=       ; boolean, default to [CombatDamage] -> IronCurtain.KeptOnDeploy
ForceShield.KeptOnDeploy=       ; boolean, default to [CombatDamage] -> ForceShield.KeptOnDeploy

在命令移动后保留目标

  • 现在可以通过设置 KeepTargetOnMove 为 true 来使载具在接收到移动命令时保留其目标。

    • 注意这不会检查载具或武器实际上能否在移动中开火,这由 modder 自行决定。

    • 如果由于载具移动导致目标超出武器射程那么目标将自动重置。

  • KeepTargetOnMove.Weapon 决定用于射程检查的武器。如果设为 -1,游戏将会根据默认武器选用规则针对目标对象选取。

    • 建议将其设为特定武器以优化性能,除非需要针对不同目标使用多种武器。

  • KeepTargetOnMove.NoMorePursuit 控制单位是否会在再次停止后重新开始追击目标以发起攻击,否则会在移动时清除目标。

  • KeepTargetOnMove.ExtraDistance 可以用来修改被认为 “超出射程” 的范围(基于武器射程的修正值),负值会缩短判定距离。

rulesmd.ini

[SOMEVEHICLE]                        ; VehicleType
KeepTargetOnMove=false               ; boolean
KeepTargetOnMove.Weapon=-1           ; integer, weapon slot index
KeepTargetOnMove.NoMorePursuit=true  ; boolean
KeepTargetOnMove.ExtraDistance=0     ; floating point value, distance in cells

自定义沉没行为

  • 原版中一艘舰船在水上死亡是否会沉没由多个硬编码设置决定。沉没速度硬编码为每帧 5 leptons。

  • 现在你可以通过专门的标签 Sinkable 来决定一艘舰船是否会沉没,并且可以使用 SinkSpeed 来定义舰船的沉没速度。

  • Sinkable.SquidGrab 控制一艘船在被巨型乌贼击杀时的行为。将其设为 false 会导致舰船受到致命伤害而非在此时直接沉没(从而遵循 Sinkable 的设置)。

rulesmd.ini

[SOMEVEHICLE]              ; VehicleType
Sinkable=                  ; boolean
SinkSpeed=5                ; integer, leptons per frame
Sinkable.SquidGrab=true    ; boolean

静止的载具

  • 现在载具将在 Speed 设置为 0 时使游戏将它们视为静止,其行为方式非常类似于 IsSimpleDeployer 设置为 true 的部署状态载具。不应用于可生产的载具,否则它们将无法退出工厂。

炮塔制退

  • 现在你可以使用 TurretRecoil 来控制单位开火时的炮塔/炮管制退效果。

    • TurretTravelBarrelTravel 控制最大制退距离。

    • TurretRecoil.Suppress 可以在特定武器上阻止其产生此效果。

rulesmd.ini

[SOMEVEHICLE]             ; VehicleType
TurretRecoil=no           ; boolean
TurretTravel=2            ; integer, pixels
TurretCompressFrames=1    ; integer, game frames
TurretHoldFrames=1        ; integer, game frames
TurretRecoverFrames=1     ; integer, game frames
BarrelTravel=2            ; integer, pixels
BarrelCompressFrames=1    ; integer, game frames
BarrelHoldFrames=1        ; integer, game frames
BarrelRecoverFrames=1     ; integer, game frames

[SOMEWEAPON]              ; WeaponType
TurretRecoil.Suppress=no  ; boolean

备注

上面的逻辑并非来自逆向工程复原而是模拟复刻效果,因此与《泰伯利亚之日》中的行为相比可能存在一些差异。

无炮塔单位始终面向目标

  • 现在可以通过将 NoTurret.TrackTarget 设为 true 来让没有炮塔的载具在武器冷却期间就尝试更改朝向以面向目标而不是等到武器冷却完成后。

rulesmd.ini

[General]
NoTurret.TrackTarget=false   ; boolean

[SOMEVEHICLE]                ; VehicleType
NoTurret.TrackTarget=        ; boolean, defaults to [General] -> NoTurret.TrackTarget

备注

如果 Jumpjet 在 OmniFire.TurnToTarget 设为 true 的情况下发射一个 OmniFire 武器那么也会受到影响。

Voxel 炮塔影子

  • 如果 [AudioVisual] -> DrawTurretShadow 被设为 true 那么载具的 Voxel 炮塔现在可以绘制影子。这可以在载具的 artmd.ini 小节中设置 TurretShadow 来覆盖。

rulesmd.ini

[AudioVisual]
DrawTurretShadow=false  ; boolean

artmd.ini

[SOMEVEHICLE]   ; VehicleType
TurretShadow=   ; boolean

Voxel 碎片

自定义碎片 & 流星撞击和弹头引爆行为

  • INI 标签的行为与常规动画的等效行为基本相同。主要区别是这些标签必须列在 rulesmd.ini 中的 Voxel 碎片条目中,而不是 artmd.ini 中。

自定义 Voxel 碎片尾烟动画生成间隔

  • 现在你可以自定义 Voxel 碎片的尾烟动画生成间隔。

rulesmd.ini

[SOMEVOXELANIM]       ; VoxelAnimType
Trailer.SpawnDelay=2  ; integer, game frames

弹头

允许 Temporal 弹头应用比率和加成

  • 在原版中,Temporal=yes 的弹头固定使用 10 * 目标最大生命值/Damage 来获得一个抹除所需的时间。现在,这可以支持更细致的计算。

    • Temporal.ApplyVersus 可用于定义该逻辑是否考虑弹头比率如 VersusProneDamage

    • Temporal.ApplyMultiplier 可用于定义该逻辑是否考虑火力倍率和护甲倍率如 BunkerDamageMultiplierOpenToppedDamageMultiplier

rulesmd.ini

[CombatDamage]
Temporal.ApplyVersus=false      ; boolean
Temporal.ApplyMultiplier=false  ; boolean

[SOMEWARHEAD]                   ; WarheadType
Temporal.ApplyVersus=           ; boolean, default to [CombatDamage] -> Temporal.ApplyVersus
Temporal.ApplyMultiplier=       ; boolean, default to [CombatDamage] -> Temporal.ApplyMultiplier

允许杀伤开火者

  • 现在即使对象没有 DamageSelf=true 你也可以允许弹头对被视为开火者的对象造成杀伤(并使用诸如 KillDriverDisableWeapons/Sonar/Flash.DurationAres 功能)这些与杀伤相关的效果。)

    • 注意尽管 Psychedelic=true 的效果与杀伤相关但由于其不会影响任何包括开火者在内所有与开火者同一所属的对象因此仍然无法生效。

rulesmd.ini

[SOMEWARHEAD]            ; WarheadType
AllowDamageOnSelf=false  ; boolean

友军狂暴效果

  • 在原版中,Psychedelic 弹头硬编码忽略友军目标。现在你可以关闭这个。

rulesmd.ini

[CombatDamage]
AllowBerzerkOnAllies=false  ; boolean

备注

没有弹头微观语句,因为生效与否仍会遵守 AffectsAllies 等设置。

自定义战斗闪光

  • 现在你可以通过设置 [AudioVisual] -> CombatLightDetailLevel 或在弹头上设置 CombatLightDetailLevel 来限定显示闪光效果的最小画质级别。

    • 一般来说任何非默认颜色(例如 CLDisableX 等语句设为 true)的效果都会忽略细节等级检查。这可以通过在 [AudioVisual] 或弹头下设置 CombatLightDetailLevel.CheckColored 来禁用。

  • 现在你可以通过设置 CombatLightChance 来限定弹头命中时显示战斗闪光效果的概率百分比。

  • 现在可以通过在弹头上设置 CLIsBlack 为 true 来让闪光就像击中在铁幕保护下的物体一样使用黑色,无视其他颜色设置。

rulesmd.ini

[AudioVisual]
CombatLightDetailLevel=0                   ; integer
CombatLightDetailLevel.CheckColored=false  ; boolean

[SOMEWARHEAD]                              ; WarheadType
CombatLightDetailLevel=                    ; integer, default to [AudioVisual] -> CombatLightDetailLevel
CombatLightDetailLevel.CheckColored=       ; boolean, default to [AudioVisual] -> CombatLightDetailLevel.CheckColored
CombatLightChance=1.0                      ; floating point value, percents or absolute (0.0-1.0)
CLIsBlack=false                            ; boolean

自定义碎片动画和额外的碎片生成设置

  • 现在可以使用 DebrisAnims 指定要生成的碎片动画列表,而不是仅能在引爆拥有 MaxDebris > 0 且没有 DebrisTypes(指定 Voxel 碎片)的弹头时使用 [General] -> MetallicDebris 列表中的动画。

  • Debris.Conventional 如果设为 true,那么仅在弹头在非水面单元格上引爆时才会使用 DebrisTypesDebrisAnims

rulesmd.ini

[SOMEWARHEAD]              ; WarheadType
DebrisAnims=               ; List of AnimationTypes
Debris.Conventional=false  ; boolean

自定义 Voxel 碎片数量限制

  • 当启用 DebrisTypes.Limit 时可通过原有的 DebrisMaximums 结合新增的 DebrisMinimums 共同限制 DebrisTypes 的数量。

    • 出于兼容目的,若 DebrisMaximums 大于(不包括等于)1 则默认启用 DebrisTypes.Limit

rulesmd.ini

[SOMEWARHEAD]       ; WarheadType
DebrisTypes.Limit=  ; boolean
DebrisMaximums=     ; List of integers
DebrisMinimums=     ; List of integers

自定义掀起幅度

  • 拥有 Rocker=yes 的弹头其气波掀起载具的幅度过去由武器的 Damage 值所决定。现在可以通过固定值覆盖它并添加一个倍率。

    • 当同时设置了倍率和覆盖值时两者都会被使用。

rulesmd.ini

[SOMEWARHEAD]                   ; WarheadType
Rocker.AmplitudeMultiplier=1.0  ; floating point value, multiplier
Rocker.AmplitudeOverride=       ; integer

自定义弹头动画行为

  • 现在可以通过设置 AnimList.PickRandom 为 true 来让游戏从 AnimList 列表中随机播放动画。其效果类似于 EMEffect=true 时的效果,但它不会带来副作用(EMEffect=true 会影响 Inviso=true 的抛射体锁定目标,导致它们无法击中移动目标)。

  • 如果 AnimList.CreateAll 被设为 true,所有 AnimList 列表中的动画都将会被创建,而不再是只创建单个基于杀伤值计算或随机选取的动画,前提是 AnimList.PickRandom 没有被设为 true。

  • 如果 AnimList.CreationInterval 设为大于 0 的值,那么在再次创建 AnimList 中的动画前需要爆炸一定数量的该弹头。如果该弹头是由一个单位发射的,那么该单位只会检查它自己所发射该弹头的次数,否则会对全图所有同一弹头的引爆次数进行计数。如果你希望像 Airburst 这种具有大范围扩散的效果其弹头动画可以均匀出现而不是每次引爆都出现的话那么这会非常有用。

  • AnimList.ScatterMinAnimList.ScatterMax 可用于设置从爆炸中心点开始一定范围内的动画随机散布范围。

  • SplashList 可以在拥有 Conventional=true 的弹头击中水面时覆盖显示的动画。

    • SplashList.PickRandomSplashList.CreateAllSplashList.CreationIntervalSplashList.Scatter(Min/Max)AnimList 同类语句相同。

    • CreateAnimsOnZeroDamage 如果设为 true,即便发射该弹头的武器只会造成 0 点伤害也会正常创建 AnimListSplashList 动画。

  • Conventional=true 的弹头上设置 Conventional.IgnoreUnits 为 true 会使弹头命中位于水中的非水下载具类型时视为在水中引爆而不是视为在陆地上引爆。这决定了命中水面舰船时使用 AnimList 还是 SplashList

rulesmd.ini

[SOMEWARHEAD]                   ; WarheadType
AnimList.PickRandom=false       ; boolean
AnimList.CreateAll=false        ; boolean
AnimList.CreationInterval=0     ; integer
AnimList.ScatterMin=0.0         ; floating point value, distance in cells, default to 0.125 if [Projectile] -> Inviso=true, and 0 if false
AnimList.ScatterMax=            ; floating point value, distance in cells, default to 0.125 if [Projectile] -> Inviso=true, and 0 if false
SplashList=                     ; List of AnimationTypes, default to [CombatDamage] -> SplashList
SplashList.PickRandom=false     ; boolean
SplashList.CreateAll=false      ; boolean
SplashList.CreationInterval=0   ; integer
SplashList.ScatterMin=0.0       ; floating point value, distance in cells
SplashList.ScatterMax=0.0       ; floating point value, distance in cells
CreateAnimsOnZeroDamage=false   ; boolean
Conventional.IgnoreUnits=false  ; boolean

自定义弹头效果触发条件

  • AffectsBelowPercentAffectsAbovePercent 可用于设置目标被弹头作用所需的血量百分比必须高于和/或低于/等于的限制。若目标血量为 0 则跳过该检查。

  • AffectsVeterancy 设置允许受到弹头效果影响的经验等级。

  • 若设置 AffectsNeutral=false 那么弹头将无法杀伤或作用于所属于中立所属方的目标。

  • 若设置 EffectsRequireVerses=false 那么即便由于目标当前装甲类型导致弹头无法对其造成杀伤(例如 Verses=0%)Phobos 所引入的弹头效果也仍会触发。

rulesmd.ini

[SOMEWARHEAD]               ; WarheadType
AffectsBelowPercent=1.0     ; floating point value, percents or absolute
AffectsAbovePercent=0.0     ; floating point value, percents or absolute
AffectsVeterancy=all        ; List of Affected Veterancy Enumeration (none|rookie|veteran|elite|all)
AffectsNeutral=true         ; boolean
EffectsRequireVerses=false  ; boolean

自定义被伤害目标解除隐形

  • 现在你可以指定被这个弹头杀伤的对象是否解除隐形。

rulesmd.ini

[SOMEWARHEAD]               ; WarheadType
DecloakDamagedTargets=true  ; boolean

自定义运动模式弹头

  • 现在你可以在弹头上指定 Jumpjet 属性了。

rulesmd.ini

[SOMEWARHEAD]                           ; WarheadType with IsLocomotor and Locomotor=Jumpjet
JumpjetTurnRate=                        ; Integer, default to [TechnoType] -> JumpjetTurnRate
JumpjetSpeed=                           ; Integer, default to [TechnoType] -> JumpjetSpeed
JumpjetClimb=                           ; floating point value, default to [TechnoType] -> JumpjetClimb
JumpjetCrash=                           ; floating point value, default to [TechnoType] -> JumpjetCrash
JumpjetHeight=                          ; Integer, default to [TechnoType] -> JumpjetHeight
JumpjetAccel=                           ; floating point value, default to [TechnoType] -> JumpjetAccel
JumpjetWobbles=                         ; floating point value, default to [TechnoType] -> JumpjetWobbles
JumpjetNoWobbles=                       ; boolean, default to [TechnoType] -> JumpjetNoWobbles
JumpjetDeviation=                       ; Integer, default to [TechnoType] -> JumpjetDeviation

自定义寄生

  • 现在你可以指定哪些目标会被寄生所秒杀

  • 在原版中乌贼拖拽的动画被硬编码为 SQDG,现在选择权归你了。

rulesmd.ini

[AudioVisual]
Parasite.GrappleAnim=SQDG               ; AnimationType

[SOMEWARHEAD]                           ; WarheadType
Parasite.ParticleSystem=                ; ParticleSystemType, default to [CombatDamage] -> DefaultSparkSystem
Parasite.DisableParticleSystem=false    ; boolean
Parasite.CullingTarget=infantry         ; List of Affected Target Enumeration (none|aircraft|infantry|units|all)
Parasite.GrappleAnim=                   ; AnimationType, default to [AudioVisual] -> Parasite.GrappleAnim

弹头动画 ZAdjust 去硬编码

  • 在原版中由 AnimList 生成的动画被硬编码为 ZAdjust=-15。现在你可以通过下述方式进行自定义。

    • 若这些语句设为 0 则将会使用动画自身的 ZAdjust 值。

rulesmd.ini

[AudioVisual]
WarheadAnimZAdjust=-15           ; Integer

[SOMEWARHEAD]                    ; WarheadType
AnimZAdjust=                     ; Integer, default to [AudioVisual] -> WarheadAnimZAdjust

攻击被心控单位的延迟

  • 现在你可以让刚被心灵控制的科技类型在一段时间内不会自动遭到来自原所属方友军的攻击,持续时间由心灵控制弹头的 MindControl.ThreatDelay 参数控制。

    • 这不会影响手动攻击,并且不(也没必要)作用于永久心控的情况。

rulesmd.ini

[General]
MindControl.ThreatDelay=0     ; integer, game frames

[SOMEWARHEAD]                 ; WarheadType
MindControl.ThreatDelay=      ; integer, game frames, default to [General] -> MindControl.ThreatDelay

非挑衅弹头

  • 现在你可以让弹头以非挑衅的方式表现。设置为 Nonprovocative=true 的弹头会表现出以下行为:

    • 当命中目标时无论是是矿车、基地建筑还是盟友的基地建筑都不会播放任何 EVA 通报。

    • 它们不会触发 “受到攻击”/“被…攻击” 事件。注意如果弹头造成了实际杀伤那么检查杀伤的事件仍可能被触发。

    • 它们不会在攻击基地建筑、ToProtect=true 的科技类型或具有 Whiner=true 的小队的成员时引发 AI 玩家的防御反应。

    • 它们不会引发弹头所命中科技类型的反击。

rulesmd.ini

[SOMEWARHEAD]         ; WarheadType
Nonprovocative=false  ; boolean

备注

由于技术限制,这不会去除 Ares 的 EMP 效果所产生的警告。

限制屏幕抖动于当前视角

  • 现在你可以指定这个弹头是否只能在可视的当前屏幕可见区域内爆炸时才能抖动(ShakeX/Ylo/hi)屏幕

rulesmd.ini

[SOMEWARHEAD]       ; WarheadType
ShakeIsLocal=false  ; boolean

武器

自定义穿透伤害

  • 现在你可以通过 AmbientDamage.Warhead 指定用于 AmbientDamage 的弹头或通过将 AmbientDamage.IgnoreTarget 设为 true 使其永远不会对武器的直接目标生效。

rulesmd.ini

[SOMEWEAPON]                      ; WeaponType
AmbientDamage.Warhead=            ; WarheadType
AmbientDamage.IgnoreTarget=false  ; boolean

武器层面的攻击友军定义

  • 现在支持在武器上使用 AttackFriendliesAttackCursorOnFriendlies。它们会覆盖开火者自身的这两项生效。

rulesmd.ini

[SOMEWEAPON]                ; WeaponType
AttackFriendlies=           ; boolean
AttackCursorOnFriendlies=   ; boolean

炮塔充能间隔

  • 现在可以为每个武器的每一发 Burst 设定 IsChargeTurret=true 的单位其充能炮塔动画效果的间隔(实际上是整个充能过程的时长)而不是默认使用武器的重新装填计时器(ROFBurst.Delays 等)。使用列表中与 Burst 一一对应值的间隔,若当前连发的次数高于列表中值的数量那么使用列表中最后一个值。间隔为 0 或更小将不会被使用,并且不会重置先前的充能序列(目前仍会重置序列但不会重置充能动画播放时间)。

    • 注意与使用 ROF 的默认重新装填计时器不同,任何倍率都不会对明确指定的充能炮塔间隔生效。

rulesmd.ini

[SOMEWEAPON]          ; WeaponType
ChargeTurret.Delays=  ; List of integers - game frames

自定义飞碟激光半径

图像

  • 现在你可以通过一个新的标签来设置飞碟激光动画效果的半径。

rulesmd.ini

[SOMEWEAPON]          ; WeaponType
DiskLaser.Radius=240  ; integer
; 240 is the default saucer disk radius

自定义 ROF 随机延迟

  • 默认情况下武器的 ROF 会添加 0 到 2 的随机延迟。现在可以在全局和武器微观层面定义此随机延迟。

rulesmd.ini

[CombatDamage]
ROF.RandomDelay=0,2  ; integer - single or comma-sep. range (game frames)

[SOMEWEAPON]         ; WeaponType
ROF.RandomDelay=     ; integer - single or comma-sep. range (game frames), default to [CombatDamage] -> ROF.RandomDelay

自定义战机开火时是否踢出乘客

  • 现在你可以自定义战机在尝试开火时是强行踢出乘客(默认行为)还是发射这个武器。

rulesmd.ini

[SOMEWEAPON]            ; WeaponType
KickOutPassengers=true  ; boolean

禁止 FireOnce 重置步兵序列

  • 现在可以通过 FireOnce.ResetSequence 来禁用 FireOnce=true 武器在开火后重置步兵序列的效果。目标将像以前一样被遗忘,如果开火后还有剩余帧,那么开火序列将简单地照常继续播放。

rulesmd.ini

[SOMEWEAPON]                 ; WeaponType
FireOnce.ResetSequence=true  ; boolean

自定义 EBolt

图像 RA2: Reboot 中自定义用于不同磁爆电流武器的 EBolt 效果

  • 现在你可以为 IsElectricBolt=true 的武器指定你想要关闭的特定电流。注意这只是视觉变化。

  • 默认情况下,IsElectricBolt=true 效果会绘制带有 8 条电弧的电流。现在可以通过 Bolt.Arcs 为每种武器自定义这一效果。值为 0 将会绘制一条直线。

  • Bolt.Duration 可用于明确指定 EBolt 视觉效果的总持续时间,仅支持 1 到 31 范围内的值,超出此范围将会写回该范围内。

  • Bolt.FollowFLH 可用于覆盖 EBolt 起始坐标跟随单位开火坐标每帧改变(时期跟随单位的移动、旋转等)的默认行为。载具默认为 true 其他所有情况默认为 false。

rulesmd.ini

[SOMEWEAPON]           ; WeaponType
Bolt.Disable1=false    ; boolean
Bolt.Disable2=false    ; boolean
Bolt.Disable3=false    ; boolean
Bolt.Arcs=8            ; integer
Bolt.Duration=17       ; integer, game frames
Bolt.FollowFLH=        ; boolean

备注

由于技术限制,这不适用于 Ares 中光棱塔递光武器 或那些 AirburstWeapon 所创建的 EBolt 效果。

自定义 EBolt 的 Z 深校正值

  • 现在可以在每个武器上通过 EBoltZAdjust 更改武器 EBolt 绘制的 Z 深校正值

  • 在原版中,建筑类型发射的 EBolt 效果会在坐标变换得出 Z 深后与 0 取较小者,这是为了确保在部分情况下 EBolt 效果不会被地形等其他图像挡住,现在这一处理可以通过 EBoltZAdjust.ClampInitialDepthForBuilding 关闭以满足一些特定的需求。

    • 这只决定了由建筑创建的 EBolt 效果其 Z 深能否为正值;EBoltZAdjust 总是可以正常在该值之上加算。

rulesmd.ini

[AudioVisual]
EBoltZAdjust=0                                  ; integer
EBoltZAdjust.ClampInitialDepthForBuilding=true  ; boolean

[SOMEWEAPON]                                    ; WeaponType
EBoltZAdjust=                                   ; integer, defaults to [AudioVisual] -> EBoltZAdjust
EBoltZAdjust.ClampInitialDepthForBuilding=      ; boolean, defaults to [AudioVisual] -> EBoltZAdjust.ClampInitialDepthForBuilding

激光 Z 深校正

  • 现在可以在每个武器上通过 LaserZAdjust 更改武器激光绘制的 Z 深校正值,默认为 [AudioVisual] -> LaserZAdjust。注意这不适用于 光棱塔递光武器

rulesmd.ini

[AudioVisual]
LaserZAdjust=0  ; integer

[SOMEWEAPON]    ; WeaponType
LaserZAdjust=   ; integer

单色激光

图像 RA2: Reboot 中宽度更大的 IsSingleColor=yes 激光与常规激光的比较

  • 现在你可以通过设置 IsSingleColor 使激光仅使用 LaserInnerColor 进行绘制,就像 IsHouseColor 的激光使用玩家所属方的颜色一样。这样的激光同样尊重激光宽度。注意这在光棱塔递光武器上并不可用。

rulesmd.ini

[SOMEWEAPON]         ; WeaponType
IsSingleColor=false  ; boolean

可更新开火动画

  • 在原版中,开火动画会附着于开火者,但却不会随着开火者的朝向更新类型和位置。现在这可以通过下列语句自定义。

rulesmd.ini

[AudioVisual]
FiringAnim.Update=false   ; boolean

[SOMEWEAPON]              ; WeaponType
Anim.Update=              ; boolean, default to [AudioVisual] -> FiringAnim.Update

备注

该效果与 [Animation] -> Next 共用会导致问题。Next 会随时间更改动画类型,而本功能会把它改回去,导致动画无法结束。