此篇文章对红色警戒2尤里的复仇 artmd.ini 文件中的“弹道对象(Projectile Objects)”、“动画覆盖物(Animation Overlays)”、“过场电影(Movies)”这些板块下的规则语句作释义内容(主要板块和步兵动作序列此前已在另外的文章中发布),虽然这些项被分属了几个板块类别,不过它们或许都可以混用,请自行多加测试,下面是正文。
弹道对象(Projectile Objects)
此板块中一对方括号 [ ] 内的名称对应 rules(md).ini 规则中的弹道名称(武器的 Projectile 属性所指的值),游戏引擎将会使用此名称查找有无相应的模型资源文件并使用,比如 [120MM]
就会用到 120mm.shp 这个资源。
Trailer
指定此弹道的轨迹拖尾使用的动画名,填动画名称,在 rules(md).ini 中的 [Animations]
板块下注册的名称,一般使用烟雾,比如 V3 火箭的尾部气焰;默认是 none。
Rotates
填 yes 或 no,指示此弹道是否具有约定的模型资源对象,如果为 yes,弹道将会使用 32 帧的逆时针 shp 资源作为此图像;默认是 no。
注:此约定的图形资源能够与 Trailer 属性同时存在,符合要求的 shp 资源图示如 patriot.shp:

Frames
指定使用该动画资源的第几帧作为图像;默认是 1。
SpawnDelay
指定每一次绘制轨迹拖尾的间隔帧数,此项值越小会带来更平滑和精细的效果,但同时也会造成更大的性能消耗,建议在高速的弹道中让此值变小,不然弹道看起来会存在不好看的空隙,此项值不能为 0;默认是 3。
AnimPalette
指示动画是否使用动画调色板(anim.pal)而不是默认的单位色盘;默认是 no。
UseLineTrail
指定是否在弹道上绘制线条,填 yes 或 no,此方式绘制的轨迹也能够与 Trailer 属性同时存在。
LineTrailColor
指定绘制线条的颜色,格式为 RGB 值,比如 255,0,0 表示纯红色。
LineTrailColorDecrement
指定线条色彩的减益值,可以简单理解为此值越大线条长度越短。
Voxel
填 yes 或 no,指定该弹道图像是否使用的是 VXL 模型而不是 SHP 模型。
Flat
填 yes 或 no,指定该弹道图像是否绘制在地形层面上,如果此项值为 yes,那么弹道相关的图形将更有可能被遮挡。
Elasticity
此项用于弹道时影响弹道的弹性,取值范围是 0 ~ 1 的小数,不清楚弹性的作用,在爆炸碎片、动画处也能见到此项;默认是 0.75。
动画覆盖物(Animation Overlays)
此板块中一对方括号 [ ] 内的名称可被用于比如 rules(md).ini 规则中的弹头的 AnimList 属性所指的值,这些临时的动画覆盖物一般都是爆炸效果、烟雾、火焰。
Theater 待测试
指示是否视作为环境图像资源,视作为环境资源的模型似乎会影响单位的寻路模式,比如矿石、树木等;默认是 no,如果设为 yes 表示在加载此资源时考虑根据不同的地形选择不同的后缀名作为模型资源,而不是 SHP。
Normalized 待测试
指示动画是否以其恒定速度播放,据说此项会让动画的播放受游戏速度调节的影响;默认是 no。
Scorch
指定该动画是否会烧焦地面,在地面留下黑色污渍类的效果;默认是 no。
Flamer
指定该动画是否会留下火焰,红色警戒2中此项似乎无效;默认是 no。
Crater
指定该动画是否会留下弹坑;默认是 no。
PsiWarning
指定该动画是否会在心灵探测器范围内显示有关提示,这个好像指的是比如有核弹发射到心灵探测器范围内时会在核弹落点有一定的提示,但应用到其它的动画上好像没什么效果;默认是 no。
Sticky 待测试
此项作用不明,好像会影响动画相对于单元格子播放的位置,比如如果单元格内存在单位时,而动画判定的落点在其边缘时的情况;默认是 no。
Layer
指定应在哪一层面播放动画,这可能影响动画是否被遮挡,从低到高依次是:Underground(地下)、Surface(水面)、Ground(地表)、Air(空中)、Top(顶层);默认是 Air;红色警戒2中没有地下,顶层意味着层级最高,甚至高于护罩类的;默认是 air。
Flat
填 yes 或 no,指定该动画是否绘制在地形层面上,如果此项值为 yes,那么动画将更有可能被遮挡;默认是 no。
Translucent
指定该动画是否呈现出半透明的效果,但似乎看不出什么效果;默认是 no。
Translucency
指定半透明的百分比,只有 25,50,75% 三个值;默认是 none。
Damage
动画造成的伤害,动画占据的单元格上的所有单位将会受到伤害,伤害的频率是每次动画绘制更新的周期,此伤害的弹头在 rules(md).ini 中是被 FlameDamage2
属性指定的(也可能是 FlameDamage
);默认是 0。
Rate
指定动画播放的速率,值越大动画播放得越快,注意此值不能过大,不然动画会卡在其中的帧像上;默认是 900;在默认的游戏速度(15 FPS)下,Rate=900 表示每秒播放 15 帧,Rate=60 表示每秒播放 1 帧,Rate=1 表示每分钟播放 1 帧。
StartSound
指定动画开始播放时同时也播放的声音资源,这个项要求指定 sound(md).ini 中定义的声音。
Report
指定动画开始播放时同时也播放的声音资源;默认是 none;一般用上面那个。
Next
指定此动画播放完成后下一个播放的动画名称,这一般被用于火焰动画,比如大火变小火;默认是 none。
ExpireAnim
指定此动画在接触地面或者是接触到其它对象时播放的另一个动画名称,但正常播放完时不会触发,一般这个用于爆炸碎片类的动画;默认是 none。
DetailLevel 待测试
设置此动画的视觉细节级别要求,当动画的视觉细节级别高于游戏中设置的级别时此动画将不会绘制以提高性能,在红色警戒2中玩家并不能更改视觉细节级别,所以这个也就没有用;默认是 0,2 就是高细节。
UseNormalLight
指定此动画是否始终保持 100% 亮度播放,表示不会受地图环境亮度或其它灯光效果影响;默认是 no。
YSortAdjust
指定此动画的绘制层级顺序,值越大表示越不容易被遮挡,可以为负数,似乎只在地面层有效;默认是 0。
ZAdjust
同上,但优先级更高,而且好像不只能用于地面层;默认是 0。
YDrawOffset
设置此图像绘制在 Y 轴上的偏移位置,值为负数时向上,正数时向下,这好像也会影响图像的层级顺序,向上时层级会更高。
AltPalette
指定动画是否使用单位调色盘,而不是动画色盘;默认是 no。
Start、LoopStart、LoopEnd、LoopCount
这些项为动画资源指定帧的解释方式;LoopCount 指定播放次数,值为 -1 时表示无限循环,这时会用上 LoopStart 和 LoopEnd,LoopStart 指 SHP 模型的开始帧序号,从 0 开始,LoopEnd 指结束帧序号,意思就是循环播放 LoopStart ~ LoopEnd 指定的序号帧动画;当 LoopCount 值为 1 时表示只播放 1 次该动画,这时就会用上 Start,表示不循环播放动画时动画的开始帧。
AnimLow、AnimHigh、AnimRate 待测试
AnimLow 和 AnimHigh 可以当做 LoopStart 和 LoopEnd 的替代版;AnimRate 表示动画播放每一帧之间的频率,1 就是最小值了,0 表示不播放,值越大每帧间的延迟越高,这些项可能只能应用在循环播放的 SHP 动画中。
PingPong
指定动画在循环中播放时,播放结束后下一次是否反转播放,为 yes 时将反复正反播放。
RandomLoopDelay
指定动画在循环中播放时,每次循环之间的等待延迟帧数,值格式为 A,B,表示随机取 A ~ B 间的数值作为延迟帧数。
ShouldUseCellDrawer 待测试
填 yes 或 no,当此项为 yes 表示始终使用动画调色盘。
ShouldFogRemove 待测试
填 yes 或 no,指定动画在地图迷雾中是否不渲染,这可能会被用于节省资源消耗,或是在一些特殊地形修正绘制上的问题。
IsFlamingGuy
填 yes 或 no,指定动画是否使用步兵被烧死的动画逻辑,表示动画可以在衰减前移动一些距离,移动是随机的,必须要求同时指定下一个项,不然会出错。
RunningFrames
填数值,决定了其总共移动的帧数时间。
HideIfNoOre
填 yes 或 no,指定动画是否在没有矿石的地方被隐藏,就是说是否只在矿石上才播放,典型的应用是矿石闪光的动画,应该只能应用于具有 IsTiberium=yes 属性的动画。
IsAnimatedTiberium 待测试
填 yes 或 no,指定动画是否只在矿石上播放,此项与 IsTiberium=yes 属性同时使用时好像就不能摧毁矿石了,据说此项和上一项不同的点是此项更节约性能,上一项似乎只是不显示,而此项则不会加载。
IsTiberium 待测试
填 yes 或 no,指定该动画是否是矿石相关的动画。
TiberiumSpreadRadius
填数值,指定矿石延伸的半径距离。
TiberiumSpawnType
指定矿石衍生的类型名称,笔者猜测这些矿石动画可能会被用于生成矿石。
TrailerAnim
指定在 Trailer 动画之后播放的子动画,此项作用于 SHP 动画时不会生效,但据说能作用于 VXL 资源。
TrailerSeperation
指定此动画的延迟帧数。
Bouncer
填 yes 或 no,指定动画是否使用爆炸碎片逻辑,爆炸碎片逻辑可以让动画随机偏移位置。
MinZVel
填数值,指定纵轴方向偏移的权重值,这可能影响爆炸碎片的随机移动方式。
MaxXYVel
同上,但是横轴方向偏移的权重值。
Elasticity 待测试
取值范围是 0 ~ 1 的小数值,用于爆炸碎片时影响其弹性,尚不清楚“弹性”的具体作用。
Spawns 待测试
指定衍生爆炸碎片的名称。
SpawnCount
填数值,指定衍生爆炸碎片的数量。
IsMeteor
填 yes 或 no,指定爆炸碎片是否使用从空中落下的逻辑,此项不要随意用在地面的对象,不然整个动画将会失效。
DamageRadius 待测试
填数值,指定如果爆炸碎片离单位这么近的半径距离就会对其造成伤害。
过场电影(Movies)
此板块的内容很简单,就是注册游戏中用到的过场电影、动画名称;据说因为红色警戒2游戏引擎的解析问题,最后一项不能被正确识别,如果遇到了此问题可在最后一项随便加一个以解决此问题。
注:红色警戒2的游戏引擎错综复杂且板块有些混乱,rules、art、sound 等规则之间的耦合性高在所难免,所以这些文件之间难免互有影响、分隔不清,或是有很多同义、歧义等问题,这些都是很正常的,笔者建议 DIY 爱好者玩家们结合可能相关的一切要点完善分析,这才能真正理解这些项的含义;或许文中存在疏漏、有误等情况,是正常的,请给予理解,因为红色警戒2的原工作室早已解散,据说源代码也丢失了,很多分析确实只能来自于逆向推理、猜测;此篇文章的参考环境是红色警戒2尤里的复仇1.001,尤里的复仇1.000和1.001的 artmd.ini 相同。