闪电攻击是攻击动画中的一种,实现它分两个步骤:
1)编写WML。在要能闪电攻击兵种的[unit_type]块中增加一个表示闪电攻击的[attack_anim]
2)绘制相关图像。
闪电攻击WML定义,摘自咒术师兵种
[unit_type] ...... {DUDU_LIGHTNING 1} {DUDU_LIGHTNING 2} {DUDU_LIGHTNING 3} ...... [/unit_type]
宏:DUDU_LIGHTNING
#define DUDU_LIGHTNING DIRECTION_NUMBER [attack_anim] [filter_attack] name=lightning [/filter_attack] {LIGHTNING_BOLT {DIRECTION_NUMBER} } [if] hits=yes [frame] begin=-300 end=-200 image="units/human-kingdom/zhoushushi-ranged1.png" sound=lightning.ogg [/frame] [/if] [else] hits=no [frame] begin=-300 end=-200 image="units/human-kingdom/zhoushushi-ranged1.png" sound=lightning-miss.ogg [/frame] [/else] [frame] begin=-200 end=-100 image="units/human-kingdom/zhoushushi-ranged2.png" [/frame] [frame] begin=-100 end=100 image="units/human-kingdom/zhoushushi-ranged1.png" [/frame] [/attack_anim] #enddef
宏:LIGHTNING_BOLT
#define LIGHTNING_BOLT DIRECTION_NUMBER
[if]
direction=sw,s,se
[missile_frame]
begin=-250
end=150
halo=halo/lightning-bolt-{DIRECTION_NUMBER}-1.png~FL(vert):100,halo/lightning-bolt-{DIRECTION_NUMBER}-2.png~FL(vert):100,halo/lightning-bolt-{DIRECTION_NUMBER}-3.png~FL(vert):100,halo/lightning-bolt-{DIRECTION_NUMBER}-4.png~FL(vert):100
halo_y=-125
offset=1.0
[/missile_frame]
[/if]
[else]
direction=nw,n,ne
[missile_frame]
begin=-250
end=150
halo=halo/lightning-bolt-{DIRECTION_NUMBER}-1.png:100,halo/lightning-bolt-{DIRECTION_NUMBER}-2.png:100,halo/lightning-bolt-{DIRECTION_NUMBER}-3.png:100,halo/lightning-bolt-{DIRECTION_NUMBER}-4.png:100
halo_y=-125
offset=1.0
[/missile_frame]
[/else]
#enddef
一、LIGHTNING_BOLT
LIGHTNING_BOLT中含有[if]/[else],它是个要被预扩展宏,预扩展根据是攻击方向参数,direction。

上图中诸葛亮是攻击方,司马炎是防御方,这时诸葛亮向北攻击,满足direction=nw,n,ne(n:north)这个条件。针对direction=nw,n,ne,DIRECTION_NUMBER=2,它展开的宏是:
[missile_frame] begin=-250 end=150 halo=halo/lightning-bolt-2-1.png:100,halo/lightning-bolt-2-2.png:100,halo/lightning-bolt-2-3.png:100,halo/lightning-bolt-2-4.png:100 halo_y=-125 offset=1.0 [/missile_frame]
[missile_frame]在[attack_anim]这个动画标签的直接根下,且满足支画线画帧[xxx_frame]命名约定,它的画帧前缀是“missile_”,因而它可以自成一条画线。这条画线显示类型是光环(halo),持续时间400毫秒(150-(-250)),其图像显示规则:
[-250...-150):显示图像lightning-bolt-2-1.png;
[-150...-50):显示图像lightning-bolt-2-2.png;
[-50...50):显示图像lightning-bolt-2-3.png;
[50...150):显示图像lightning-bolt-2-4.png;
以下依次是lightning-bolt-2-1/2/3/4.png,四个图像同尺寸,都是200 x 360




halo_y字段
让对比halo_y=-125和halo_y=0时的两种情况:(为了清晰看到halo图像被叠加到哪里,对该图像加了红框)
halo_y=-125

halo_y=0

halo_y:以像素为单位,光环相对于单位中心在Y方向上的偏移值。在上两幅图中,相比halo_y=0,halo_y=-125把光环(中心点)向上挪了125像素。
offset字段
让再看halo_y=0,offset=0.0时图像,把它和halo_y=0,offset=1.0对比看(不是halo_y=-125,halo_y=0时和格子边界对齐,比较起来较直观)
halo_y=0,offset=0.0

offset:相对于A面向的格子图像位置偏移。0.0,显示光环(中心点)在格子中心;1.0,光环在面向的格子的中心;-1.0,光环中心点在A的背向格子。
以上实例表现出来就是光环中心从司马炎变成了诸葛亮。这里因为方向是正北,offset在X方向上不产生作用,实现效果等同halo_y。
当halo_x,halo_y,offset都为0时,光环中心点在原格子。