Mugen Fighter Guild(MFG)和The Mugen Archive(MA)是目前欧美最大的两个Mugen论坛,拥有大量资源

(八)飞行道具

本章主要讲飞行道具类的技能,比如波动拳这种。前面讲过人物招式的代码构成,这里就不再重复。

飞行道具主要通过projectle或者addhelper类型的state来实现,现在用helper的更多些,主要是比较自由。由于中文功夫男没有飞行道具,所以我们用别的人物来作为实例。

 

一、projectile类做法

首先来介绍一下这个state类型,该类型作用是为游戏者创建一个飞行道具,也就是说一个招式里必须有一个state类型为projectile的才行。另外,飞行道具(Projectile)控制器包括所有HitDef飞行道具部分的参数。

 

以下为实例,可以看到有damage这种hitdef的参数,因为projectile拥有大部分hitdef的参数:

[State 1400]

type = Projectile

trigger1 = AnimElem = 7  ;这是个trigger条件判断,表示该动作的第7张图时触发

projid = 1400         ;指定涉及的该飞行道具ID号。若指定应为正。

projanim = 1410       ;为使用飞行道具的动画而指定动画的动作号,也就是飞行道具本身。如果省略缺省为0

projhitanim = 1411     ;当飞行道具击中对手时指定播放动画的动作号,例如一个波打中对手后这个波会爆掉,这个动作号就是指波爆掉的动画。若省略,缺省为-1(不改变动画)。

projremove = 1       ;设置非0值使得飞行道具在击中后被移除,或0取消该行为。缺省为1

projcancelanim = 1411   ;当飞行道具被移除由于时间到期或击到它的移除边缘等等时指定播放动画的动作号,大部分情况下和projhitanim一样。若省略,将由projhitanim代替。

projremovetime = -1    ;指定飞行道具应从屏幕中被移除时间帧tick数。缺省为-1永不移除

offset = 75, -50      ;指定飞行道具被创建时的xy坐标偏移量。若省略,两个参数都缺省为0。该偏移量参数的准确行为依赖于postype(参数)。

这里有个小技巧,可以在FF中根据方块的大小来估算一个飞行道具出现的大概位置blob.png

velocity = 7.5, 0      ;指定飞行道具行进的xy的初速度。若省略缺省为0,0

Postype = p1         ;type_string指定postype——怎样说明解释pos参数。任何情况下正的y坐标偏移量表示向下的位移。

attr = S, SP         ;从这里开始往下都是hitdef的参数,基本攻击招式时介绍过,详情请查阅hitdef词典,这里就不复述了。

animtype = Hard

damage = 70, 8

pausetime = 0, 13

guardflag = MA

hitflag = MAF

sparkno = s7004

guard.sparkno = s7102

sparkxy = 0, 10

hitsound = s2,10

guardsound = s3,1

ground.type = High

ground.slidetime = 16

ground.hittime = 18

ground.velocity = -8.0

ground.cornerpush.veloff = 0

air.velocity = -4.0, -8.4

air.cornerpush.veloff = 0

yaccel = .50

air.fall = 1

 

实例中省略了一些projectile的参数,细则可以去查阅sctrl词典。基本上简单的飞行道具都可以用projectile来实现。而如果飞行道具有特殊效果,比如命中敌人后产生二次爆炸什么的,那就必须要用helper来做了。

 

二、helper类做法

helper这个state类型是很常用的一个类型,虽然官方说明中的作用是创建另一个游戏者实例作为一个援护人物,不过现在常用于飞行道具、援护人物(如jojo的替身)、以及距离检测等非常规手段,功能非常强大,因此可以实现很多projectile实现不了的飞行道具效果,但制作也比projectile要复杂。

 

以下是用helper做飞行道具的实例:

1、先在放出飞行道具的那个招式里加上这个state。

[State 1000, ヘルパー]

type = Helper

trigger1 = AnimElemTime(2) = 0

helpertype = Normal      ;若helpertype = normal,则该援护者允许离开屏幕边缘。此外,镜头不会试图保持援护者在屏幕内

name = "Projectile"      ;指定该helper的名字,该名字应被加上双引号。如果省略,该名字缺省为“'s helper”,这里代表该helper的创建者的名字。

id = 7000            ;设置一个相关该援护者的ID号。缺省为0。

stateno = 7000

size.xscale = 1*Const(Size.XScale);helper的横向缩放比例,这里指helper是和本体缩放比例一样

size.yscale = 1*Const(Size.YScale);helper的纵向大小

postype = P1           ;说明pos相对于p1的坐标轴。正的x偏移量是朝向p1的前方。p1是postype的默认值。

pos = Ceil(20*Const(Size.XScale)),Ceil(-39*Const(Size.YScale))

facing = 1            ;postype的值如果为非p2且facing为1,援护者将与游戏者面向相同的方向。

keyctrl = 0         ;如果keyctrl = 0,则该援护者不受指令输入的影响,并不能继承State -1。keyctrl默认值为0。

ownpal = 1             ;如果ownpal = 1,则援护者将用他自己的色表,不受创建者色表改变的影响,例如本体中了火焰,色表临时变为红色,为0时,援护者也会变色,为1时,援护者不会因此改变。默认为0。

supermovetime = 0        ;在SuperPause(超级暂停)中决定援护者应被“unfrozen(解冻)”的时间帧(tick)数。通常在你想要援护者在SuperPause时露面时有用。默认为0。

pausemovetime = 0      ;在Pause(暂停)中决定援护者应被“unfrozen(解冻)”的时间帧(tick)数。默认为0。

 

2、再创建一个statedef,来定义刚刚创建的helper的具体参数

;指定刚刚创建的helper的动画和基本参数

[Statedef 7000]

type = A

movetype = A

physics = N

anim = 7000

velset = 2.5,0

sprpriority = 4

 

;这段是定义helper的攻击参数

[State 7000, ヒット定義]

type = HitDef

trigger1 = AnimElemTime(1) = 1

attr = A,SP

damage = 100,0

animtype = Medium

air.animtype = Back

guardflag = M

hitflag = LHA

priority = 4,Hit

pausetime = 0,15

sparkno = -1

guard.sparkno = -1

sparkxy = 0,0

hitsound = S5,0

guardsound = -1

ground.type = High

ground.slidetime = 40

ground.hittime = 15

ground.velocity = -3.5,-5

guard.velocity = -7

fall = 1

air.type = High

air.hittime = 10

air.velocity = -3.5,-5

air.fall = 1

 

;这段表示该helper无法被攻击

[State 7000, 無敵]

type = NotHitBy

trigger1 = 1

value = SCA,AA,AP,AT

time = -1

ignorehitpause = 1

 

;这段表示该helper没有影子

[State 7000, 影無し]

type = AssertSpecial

trigger1 = 1

flag = NoShadow

 

;这段表示该helper超出边缘30时销毁自己,这里是和projectile的一大区别,因为projectile不能自由定义什么时候销毁自己

[State 7000, 消滅]

type = DestroySelf

trigger1 = FrontEdgeDist <= -30

 

;这段表示当该helper命中目标时,跳转至statedef为9000的状态

[State 7000, ステート変更]

type = ChangeState

trigger1 = MoveContact = 1

value = 9000

 

3、再创建一个statedef,来定义helper命中目标后的效果

;指定helper消失时的动画和基本参数

[Statedef 9000]

type = A

movetype = I

physics = N

anim = 9999

velset = 0,0

sprpriority = 4

 

;这段表示该helper没有影子

[State 9000, 影無し]

type = AssertSpecial

trigger1 = 1

flag = NoShadow

 

;这段表示该helper在该状态第一帧时销毁自己

[State 9000, 消滅]

type = DestroySelf

trigger1 = AnimTime = 0

 

以上就是用helper来制作一个常规飞行道具,理解了上面的结构就可以根据自己需要在适当的地方加state来实现很多额外效果了。

你,确定要这么做吗?
正在处理中...