本章内容:招式代码结构、状态定义(statedef)、额外状态(state)、触发条件(trigger)、攻击定义(hitdef)
除了人物的移动跳跃等基本动作外,角色的每一个招式/行为都要自己定义,也就是为招式编写代码。现在我们依然以中文功夫男为实例,看看功夫男的轻拳、轻脚等简单招式的代码是如何写的。
点击代码
选择站轻拳
1、状态定义statedef
我们可以看到一大串代码,为了看着方便,暂且把不必要的收起来。
可以看到开头的[Statedef 200],首先,定义人物的一个招式必然会有一个statedef,200是作者可以自定义的一个编号,每个statedef的编号不能重复。另外,-1、-2、-3是系统用编号,不能用作普通招式的编号。
下一行我们可以看到很多诸如type、movetype的参数,我们可以理解为这个是用来定义该招式的基本属性。中文功夫男中将所有涉及的参数都列了出来,有些参数用默认值的话则可以不写。
2、状态控制器state controller(sctrl)
在这个状态定义的基本属性下面必须至少要有一个state,当然也可以添加多个state,术语称之为状态控制器,我们可以理解为该动作的额外属性,声音播放、自带火花播放等都通过添加额外的state来实现。
state的编号可以自定,不过为了管理方便,state号一般都会和该招式的statedef编号一致,后面跟一个逗号,然后再跟一个编号(也可以是非数字),这是比较正规的写法,也建议大家这样做。
3、state结构和条件触发器trigger
每个state的第一行一定会是type,用来表示要做的事情。下图中的PlaySnd表示播放声音。
type下面一般会有一个trigger,这个术语叫做触发器,我们可以理解为触发播放声音这个事件所需要满足的条件。下图中的意思就是该招式第一帧的时候为满足条件的时候。
注1:数字尾数相同的trigger必须同时满足才生效,尾数不相同的trigger只满足其中一组尾数即可生效。也就是说两行trigger1表示必须两条trigger都必须满足,一行trigger1一行trigger2表示两条满足其中一条即可。
注2:triggerall表示必须满足此条件,然后再判断带尾数的trigger
最后是执行该事件的值,下图中表示播放snd中第0组第0号声音。
那么最后整个state的意思就是在该招式第一帧的时候,播放snd中第0组第0号声音。
此外,FF内置所有的state类型事件,最右边有列出所有的事件,双击右侧列表中的任意事件,便会自动插入该事件的代码以及对应的值
关于state和trigger的细节用法和规则还有很多,这里只是做一下大概的介绍。详细的大家可以多看看中文功夫男的其他招式中的注释,并配合汉化过的官方sctrl词典、trigger词典来看细节规则以及总共有多少种事件和条件可用。
4、攻击定义hitdef
hitdef是state中的一个事件,用来定义该招式的攻击属性,也就是该动作的攻击判定框打到对方受击判定框时产生的参数。如果该招式是带有攻击判定的,那么一定会有这个事件。
参数含义见图中注释,建议配合汉化过的官方hitdef说明资料来学习细则。
由于一个hitdef只会对一次打击生效,所以如果一个招式里有多段打击,那么可以在一个hitdef里添加多个trigger来触发,下图中就是在第5张图和第13张图时触发这个hitdef。如果多段打击产生不同效果,比如最后一下会打飞对方,那么就通过加多个hitdef的state来实现。
另外说一下,99hit数这种一般都不是真正的99hit,而是通过addhit事件或直接改hitdef的numhits参数实现的。
由于不同版本对参数的支持会有所差别,因此特别建议用FF3.0写代码。只要人物的def文件里的mugenversion处写上win、1.0或1.1,工具会帮你标注出哪些参数不符合人物当前版本。
5、总述
一个基本的攻击招式基本要拥有三个state:hitdef、playsnd、changestate。hitdef定义攻击参数(有的人物会有explod来自定义攻击火花),playsnd决定该招式播放的音效,changestate决定该招式释放结束后回到哪个动作/哪个状态,否则角色就会卡在招式最后一帧不动,大部分招式会回到站立动作的那个状态
人物的轻拳、重拳、轻脚、重脚等简单的攻击招式都是通过以上结构来实现。制作人物时可参考中文功夫男的代码进行编写,图省事的话,直接复制代码过来修改参数也是可以的哦。
本章节最重要的是要记住,由于人物包的代码读取顺序是从上到下,因此一个招式的结构一定是statedef、[state(type、trigger、参数)]、[state(type、trigger、参数)]这么个顺序。这样学习其他人物招式的编写时,就能看懂很多。