修复或改进的逻辑

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

Bug 修复与各类杂项

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

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

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

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

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

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

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

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

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

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

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

  • 修复了 DebrisMaximums(被生成的碎片类型数量不能超过这里指定最大值)。仅当 DebrisMaximums 值数量大于 1 时才生效,以保持对旧有行为的兼容。

  • 修复了在触发 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 玩家将尽力保持的富余电力值。

  • 现在当 [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 的战机不再会继续向前移动

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 允许了 Voxel 抛射体使用 AnimPaletteFirersPalette

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Elite technos no longer scatter by default, behaviour is controlled by SCATTER veterancy ability now.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Fixed the bug that if there’s a tank in tank bunker, tank bunker use auto death by vanish will cause tank get stuck and game will crash quickly.

修复或与其他扩展的交互

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

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

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

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

  • 现在所有单位转换形式(包括 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) 时才有用。

新增的全局设定

备注

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

升级工具箱增强

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

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

  • 现在你可以通过将 [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

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

  • 现在可以分别针战机类型和使用 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

移动伊文炸弹位置

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

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

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

泰伯利亚藤蔓

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

  • 它们的核心参数仍然从 [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? 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

  • 现在可以改变光源相对于 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 的情况,因此工具中显示的值在启用该修复项的游戏中需要进行调整。

战机类型

吊运拾取音效

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

rulesmd.ini

[SOMEAIRCRAFT]  ; AircraftType
VoicePickup=    ; Sound entry

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

  • 现在可以通过设置 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.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

备注

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

自定义附着动画位置

  • 现在你可以自定义附着于对象的动画是否以对象的实际中心为基准而非以其最左上角的单元格(单元格 #0)的底部为基准、

artmd.ini

[SOMEANIM]                       ; AnimationType
UseCenterCoordsIfAttached=false  ; boolean

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

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

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

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

  • SplashAnims 包含一组在 ExplodeOnWater 没有设置且动画与水面接触时使用的水花动画。默认为 [CombatDamage] -> SplashList

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

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

artmd.ini

[SOMEANIM]                    ; AnimationType
ExplodeOnWater=false          ; boolean
Warhead.Detonate=false        ; boolean
WakeAnim=                     ; AnimationType
SplashAnims=                  ; List of AnimationTypes
SplashAnims.PickRandom=false  ; boolean
ExtraShadow=true              ; boolean

由 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

建筑类型

战机停靠方向

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

rulesmd.ini

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

空袭目标资格

  • 默认情况下建筑能否作为空袭目标取决于 CanC4 的值,这也会影响其他方面。现在可以通过设置 AllowAirstrike 来独立更改这一点,如果未设置,默认为 CanC4 的值。

rulesmd.ini

[SOMEBUILDING]   ; BuildingType
AllowAirstrike=  ; boolean

工业工厂的类型限制

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

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

rulesmd.ini

[SOMEBUILDING]               ; BuildingType
FactoryPlant.AllowTypes=     ; List of TechnoTypes
FactoryPlant.DisallowTypes=  ; List of TechnoTypes

在拔起期间应用 ZShapePointMove

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

artmd.ini

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

被视为载具的建筑

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

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

rulesmd.ini

[SOMEBUILDING]      ; BuildingType
ConsideredVehicle=  ; boolean

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

  • 默认情况下拥有 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 是否都会在进入回收站时播放。默认为 yes

    • Grinding.Sound 用于定义物体被这座建筑回收时所播放的音效。如果不设置,默认为 [AudioVisual] -> EnterGrinderSound

    • 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
Grinding.Weapon=                   ; WeaponType
Grinding.Weapon.RequiredCredits=0  ; integer

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

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

rulesmd.ini

[SOMEBUILDING]                         ; BuildingType
ExcludeFromMultipleFactoryBonus=false  ; boolean

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

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

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

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

    • Units.RepairStep 设置每次维修时恢复多少点 Strength。默认 [General] -> RepairStep

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

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

rulesmd.ini

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

粒子系统

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

  • 默认情况下拥有 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.TargetCellRange 是以完整单元格数为单位的距离,用于附近没有发现足够的科技类型目标时分裂的抛射体从该范围选取新的目标单元格。

    • Splits.UseWeaponTargeting 如果设为 true,则在检查分裂抛射体的目标时启用武器瞄准筛选。目标上的 LegalTarget 设置、弹头的 VersesArmor 的设置以及 AirburstWeapon 所填武器的武器瞄准筛选AttachEffect 筛选 都将被检查。

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

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

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

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

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

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

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

rulesmd.ini

[SOMEPROJECTILE]                         ; Projectile
Splits=                                  ; 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.TargetCellRange=3                 ; integer, cell offset
Splits.UseWeaponTargeting=false          ; boolean
AirburstSpread=1.5                       ; floating point value, distance in cells
Airburst.UseCluster=false                ; boolean
Airburst.RandomClusters=false            ; boolean
AroundTarget=                            ; boolean
AirburstWeapon.ApplyFirepowerMult=false  ; boolean

备注

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

自定义 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 可手动重新启用此行为。

rulesmd.ini

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

科技类型

自定义 AlternateFLH

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

artmd.ini

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

自定义建筑提供的自愈

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

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

  • 还可以分别为步兵、载具和建筑在 [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

[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)

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

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

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

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

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

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

rulesmd.ini

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

单位自定义 ChronoSphere 传送延迟

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

rulesmd.ini

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

[SOMETECHNO]            ; TechnoType
ChronoSphereDelay=      ; integer, game frames
ChronoSpherePreDelay=   ; integer, game frames

警告

由于技术限制,这些设置不适用于 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

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

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

rulesmd.ini

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

自定义超时空运动设置

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

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

  • 仅对使用超时空运动方式的科技类型有效。

rulesmd.ini

[SOMETECHNO]            ; TechnoType
WarpOut=                ; Anim (played when Techno warping out), default to [General] -> WarpOut
WarpIn=                 ; Anim (played when Techno warping in), default to [General] -> WarpIn
WarpAway=               ; Anim (played when Techno chronowarped by chronosphere), default to [General] -> WarpOut
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

备注

原先当单位被 超时空传送超武 移动时 [General] -> WarpOut= 所指定的动画会在 两个位置 播放,现在 [TechnoType] -> WarpAway= 会在传送 起始点 替代它,但传送 目标点 仍然使用 [General] -> WarpOut= 指定的动画。这已在 自动构建版本 中被进一步拓展和支持,但当前稳定版本仍然遵循这一规则。

自定义等级军衔

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

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

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

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

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

    • Insignia.ShowEnemy 控制军衔是否对敌方玩家可见。默认为 [General] -> EnemyInsignia,而后者默认为 true。

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

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

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

rulesmd.ini

[General]
EnemyInsignia=true                       ; boolean

[AudioVisual]
DrawInsignia.OnlyOnSelected=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.ShowEnemy=                      ; boolean

备注

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

自定义水波动画

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

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

rulesmd.ini

[SOMETECHNO]         ; TechnoType
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

空降仓

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

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

    • 如果你要将尾烟动画附加到空降仓上,请将 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

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

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

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

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

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

  • IronCurtain.KillOrganicsWarheadIronCurtain.KillWarhead 可用于自定义击杀单位的弹头,前者用于全局设置,后者用于单独的科技类型基础设置,后者默认为前者,前者默认为 [CombatDamage] -> C4Warhead

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

rulesmd.ini

[CombatDamage]
IronCurtain.EffectOnOrganics=kill  ; Iron Curtain effect Enumeration (kill | invulnerable | ignore)
IronCurtain.KillOrganicsWarhead=   ; WarheadType
ForceShield.EffectOnOrganics=kill  ; Iron Curtain effect Enumeration (kill | invulnerable | ignore)
ForceShield.KillOrganicsWarhead=   ; WarheadType

[SOMETECHNO]                       ; TechnoType with Organic=true
IronCurtain.Effect=                ; IronCurtain effect Enumeration (kill | invulnerable | ignore)
IronCurtain.KillWarhead=           ; WarheadType
ForceShield.Effect=                ; IronCurtain effect Enumeration (kill | invulnerable | ignore)
ForceShield.KillWarhead=           ; WarheadType

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

钻地单位移动高度和速度

  • 现在可以控制拥有钻地(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 的值可能会出现异常行为。

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, radius in cells
SpawnsTiberium.GrowthStage=3  ; integer - single or comma-sep. range
SpawnsTiberium.CellsPerAnim=1 ; integer - single or comma-sep. range

伤残和倒坍动画

  • 默认情况下游戏在地形对象仅 1 点血时显示破损帧。由于原本游戏中的地形对象资源文件并未考虑这一点因此目前该逻辑仅限添加了 HasDamagedFrames 的情况下使用。

    • 地形对象不再在仅剩 1 点血时显示破损帧,而是在其血量达到 [AudioVisual] -> ConditionYellow.Terrain 的百分比时才进行切换。如果未设置则默认为 ConditionYellow

  • 此外,地形对象现在可以在其血量归 0 后到从地图中删除前的这段时间中通过设置 HasCrumblingFrames 为 true 来显示一个 “倒坍” 动画。

    • 倒坍所用的帧从紧随于常规帧和破损帧之后的第一帧开始直到地形对象图像帧的一半处中止(另一半是影子)。

    • 当倒坍动画开始播放时将会播放 CrumblingSound(如果设置)指定的音效。

    • 摧毁动画和音效 仅在倒坍动画结束后播放。

rulesmd.ini

[AudioVisual]
ConditionYellow.Terrain=  ; floating-point value

[SOMETERRAINTYPE]         ; TerrainType
HasDamagedFrames=false    ; boolean
HasCrumblingFrames=false
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

载具类型

Custom Unit Crate Reroll Chance

  • 现在可以通过 CrateGoodie.RerollChance 来影响从升级工具箱 (CrateGoodie=true) 中获得一个单位的权重,该值决定了如果随机到这种类型的单位,那么它将重新随机另一种单位的概率。

rulesmd.ini

[SOMEVEHICLE]                  ; VehicleType
CrateGoodie.RerollChance=0.0   ; floating point value, percents or absolute (0.0-1.0)

自定义碾压倾斜和减速

  • 拥有 Crusher=trueOmniCrusher=true / MovementZone=CrusherAll 的载具在碾压载具/围墙时原版被硬编码进行倾斜。现在这遵守 TiltsWhenCrushes,并且可以对 TiltsWhenCrusher.VehiclesTiltsWhenCrusher.Overlays 对两种情况分别进行定义,它们都默认为 TiltsWhenCrushes

  • CrushForwardTiltPerFrame 决定在碾压覆盖物或载具时每帧前倾的幅度。对于 Locomotor=Ship 的载具碾压覆盖物的时默认为 -0.02,其他情况默认为 -0.050000001。

  • CrushOverlayExtraForwardTilt 是载具碾压覆盖物后额外的向前倾斜量

  • 可以通过设置 CrushSlowdownMultiplier 来自定义 MovementZone=CrusherAll 的载具碾压围墙时移动速度的减速幅度。

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

摧毁动画

  • DestroyAnim 已扩展至载具类型,并且如果 DestroyAnim.Random 设为 true 那么可以随机选取其中一个动画。这些动画存储了所属方和朝向信息以供生成单位逻辑使用。

rulesmd.ini

[SOMEVEHICLE]                          ; VehicleType
DestroyAnim=                           ; List of AnimationTypes
DestroyAnim.Random=true                ; boolean

IsSimpleDeployer 载具在部署时更改弹药

  • Ammo.AddOnDeploy 决定单位部署时增加或减少的弹药量。

rulesmd.ini

[SOMEVEHICLE]           ; VehicleType
Ammo.AddOnDeploy=0      ; integer

警告

由于技术限制,使用 Ares 单位转换逻辑 Convert.Deploy 的单位通过 Ammo.AddOnDeploy 改变类型时无论转换是否成功都会改变弹药量,这同样发生在单位离开坦克碉堡时。

IsSimpleDeployer 的载具根据弹药自动部署/阻止部署

  • 载具的部署行为现在可以受弹药数量影响。

    • Ammo.AutoDeployMinimumAmount 决定载具自动转换/部署时所需的最小弹药量。

    • Ammo.DeployUnlockMinimumAmount 决定载具解除转换/部署命令的最小弹药量。

      • Ammo.AutoDeployMaximumAmountAmmo.DeployUnlockMaximumAmount 的功能与之类似。

      • 设为负数将禁用弹药数量检查。

rulesmd.ini

[SOMEVEHICLE]                        ; VehicleType
Ammo.AutoDeployMinimumAmount=-1      ; integer
Ammo.AutoDeployMaximumAmount=-1      ; integer
Ammo.DeployUnlockMinimumAmount=-1    ; integer
Ammo.DeployUnlockMaximumAmount=-1    ; integer

警告

自动部署功能需要 Ares 的单位转换功能来改变类型。没有启用该功能的单位将会不断尝试部署直至其弹药量变化。

自定义 IsSimpleDeployer 载具部署

  • DeployingAnim.AllowAnyDirection 如果设置,那么将会取消所有由于 DeployingAnim 设置而对部署者在方向上的约束。只适用于地面单位。

  • DeployingAnim.KeepUnitVisible 决定单位是否在动画播放期间被隐藏。

  • DeployingAnim.ReverseForUndeploy 控制反部署时是否使动画反向播放。

  • DeployingAnim.UseUnitDrawer 控制动画使用 unit 色盘以及所属色还是常规动画色盘,包括潜在的自定义色盘。

rulesmd.ini

[SOMEVEHICLE]                          ; VehicleType
DeployingAnim.AllowAnyDirection=false  ; boolean
DeployingAnim.KeepUnitVisible=false    ; boolean
DeployingAnim.ReverseForUndeploy=true  ; boolean
DeployingAnim.UseUnitDrawer=true       ; boolean

在单位转换时保留铁幕/力场护盾状态

图像 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

静止的载具

  • 现在载具将在 Speed 设置为 0 时使游戏将它们视为静止,其行为方式非常类似于 IsSimpleDeployer 设置为 true 的部署状态载具。不应用于可生产的载具,否则它们将无法退出工厂。

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 中。

弹头

允许杀伤开火者

  • 现在即使对象没有 DamageSelf=true 你也可以允许弹头对被视为开火者的对象造成杀伤(并使用诸如 KillDriverDisableWeapons/Sonar/Flash.DurationAres 功能)这些与杀伤相关的效果。)

    • 注意尽管 Psychedelic=true 的效果与杀伤相关但由于其不会影响任何包括开火者在内所有与开火者同一所属的对象因此仍然无法生效。

rulesmd.ini

[SOMEWARHEAD]            ; WarheadType
AllowDamageOnSelf=false  ; boolean

自定义战斗闪光

  • 现在你可以通过设置 [AudioVisual] -> CombatLightDetailLevel 或在弹头上设置 CombatLightDetailLevel 来限定显示闪光效果的最小画质级别,后者默认为前者。

  • 现在你可以通过设置 CombatLightChance 来限定弹头命中时显示战斗闪光效果的概率百分比。

  • 现在可以通过在弹头上设置 CLIsBlack 为 true 来让闪光就像击中在铁幕保护下的物体一样使用黑色,无视其他颜色设置。

rulesmd.ini

[AudioVisual]
CombatLightDetailLevel=0  ; integer

[SOMEWARHEAD]             ; WarheadType
CombatLightDetailLevel=   ; integer
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

自定义掀起幅度

  • 拥有 Rocker=yes 的弹头其气波掀起载具的幅度过去由武器的 Damage 值所决定。现在可以通过固定值覆盖它并添加一个倍率。

    • 当同时设置了倍率和覆盖值时两者都会被使用。

rulesmd.ini

[SOMEWARHEAD]                   ; WarheadType
Rocker.AmplitudeMultiplier=1.0  ; double
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 的弹头击中水面时覆盖显示的动画,默认使用 [CombatDamage] -> SplashList 中的动画。

    • 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
AnimList.ScatterMax=0.0         ; floating point value, distance in cells
SplashList=                     ; List of AnimationTypes
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

自定义被伤害目标解除隐形

  • 现在你可以指定被这个弹头杀伤的对象是否解除隐形。

rulesmd.ini

[SOMEWARHEAD]               ; WarheadType
DecloakDamagedTargets=true  ; boolean

非挑衅弹头

  • 现在你可以让弹头以非挑衅的方式表现。设置为 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

炮塔充能间隔

  • 现在可以为每个武器的每一发 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)

自定义战机开火时是否踢出乘客

  • 现在你可以自定义战机在尝试开火时是强行踢出乘客(默认行为)还是发射这个武器。

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 将会绘制一条直线。

rulesmd.ini

[SOMEWEAPON]           ; WeaponType
Bolt.Disable1=false    ; boolean
Bolt.Disable2=false    ; boolean
Bolt.Disable3=false    ; boolean
Bolt.Arcs=8            ; integer

备注

由于技术限制,这些特性不适用于 Ares 中光棱塔递光武器 或那些 AirburstWeapon 所创建的 EBolt

单色激光

图像 RA2: Reboot 中宽度更大的 IsSingleColor=yes 激光与常规激光的比较

  • 现在你可以通过设置 IsSingleColor 使激光仅使用 LaserInnerColor 进行绘制,就像 IsHouseColor 的激光使用玩家所属方的颜色一样。这样的激光同样尊重激光宽度。注意这在光棱塔递光武器上并不可用。

rulesmd.ini

[SOMEWEAPON]         ; WeaponType
IsSingleColor=false  ; boolean