---------------------------------------------------------------------------
这一章我们要介绍的内容虽然不是AI,但是是与写AI密切相关的一些东西。
===========================================================================
6.1debug模式与十德
===========================================================================
---------------------------------------------------------------------------
Mugen作为一个格斗游戏制作平台,自然少不了代码。说到了代码,自然少不了debug。
所以,Mugen自身也是带有debug模式的。
在data文件夹里面的mugen.cfg文件里面有下面一段代码:
[Debug]
;Set to 0 to disable starting in debug mode by default.
Debug = 1
;Set to 0 to disallow switching to debug mode by pressing Ctrl-D.
;If Debug = 1, this will be ignored.
AllowDebugMode = 1
...(后略)
debug模式开启的方法有两种:
方法1. 一次性开启:
若Debug = 0而且AllowDebugMode = 1,在战斗界面按 ctrl + D,之后屏幕上面多了好几串代码的话那就对了。
方法2. 永久开启:
若Debug = 1,则永久开启。
(另外多按几下 ctrl + D,可以切换不同人物/helper的数据。上面两种方法都适用。)
---------------------------------------------------------------------------
那么开启debug模式有什么用呢?
我们可以关注一下左下角,这里面包含了很多我们想知道的信息:
ACTION ID, SPR(sprite), ELEMNO(element number), TIME, STATENO, CTRL, TYPE(statetype), MOVETYPE.
分别是 动作编号,图像号,元素号,时间,状态号,是否可控,状态类型,动作类型。
这些都是我们在AI编写的时候经常想知道的数据。
可能有读者会问,能不能知道更多的东西,例如AI开了没有呢?
没问题,还记得在第四章我们提及过的DisplayToClipboard吗?这里就能排上用场。例如:
[State -1, Display]
type = DisplaytoClipboard
Trigger1 = 1
text = "X : %d | Y : %d | Var : %d | FX : %d | BX: %d "
params = ceil(P2bodydist X) , ceil(P2bodydist Y) , ceil(Var(59)), ceil(FrontEdgeBodyDist), ceil(BackEdgeBodyDist)
(这个例子所显示的是双方X轴Y轴距离,Var(59)的值,和人物跟画面边缘的前后距离)
假设这里的Var(59)是AI开关的话,我们就可以知道AI开关究竟是不是已经开启了。
顺便请注意键盘Pause键可以暂停,暂停中ScrollLock键可以跳至下一帧,这两个键可以让你不必使用动态视力去看debug。
---------------------------------------------------------------------------
可能有学过计算机的读者会说,这debug太垃圾了,字这么小,还只能显示5个自定义量,这能忍?
笔者在此可以严肃的告诉各位,我也觉得不能忍啊!有木有!!!
于是,下面要介绍一款因为Mugen自带debug模式不能忍而生的软件——十德(窓无限の十徳ナイフ)。
这款软件的作者是MnsUouxgOs氏。在此必须向这位造福多少作者的软件作者表示感谢OTL。
这款软件目前可以在WinMugen和Mugen1.0上面使用(1.1党请保重)。
他强大之处在于,可以同时简单监控各个人物、helper的各种数据和Var。
具体教程可以看看贴吧精品区唯酱写的教程《窓无限の十徳ナイフ 图文简易 使用教程》,里面有具体的介绍,而且本身这软件也
不难使用,在此不予赘言。
但是其劣势还是存在的,例如不能像自带debug那样直接监视自由输入的一长段条件而只能监视常用的数据。
不过对比起来,还是比自带的debug模式舒服了不知道多少倍了XD,而且十德和自带debug一起使用也是没问题的。
强烈建议尝试这个神奇的软件!
===========================================================================
6.2Air简介
===========================================================================
---------------------------------------------------------------------------
本来Air文件没有太大必要介绍,但是因为攻击判定框受和击判定框都是由Air文件决定,还是简单介绍一下吧。
因为Air比较容易理解,我们直接上例子,分别是KFM的站姿和站轻拳的Air:
; Standing Animation
[Begin Action 0]
Clsn2Default: 2
Clsn2[0] = -13, 0, 16,-79
Clsn2[1] = 5,-79, -7,-93
0,0, 0,0, 10
0,1, 0,0, 7
0,2, 0,0, 7
0,3, 0,0, 7
0,4, 0,0, 7
0,5, 0,0, 45
0,4, 0,0, 7
0,3, 0,0, 7
0,2, 0,0, 7
0,1, 0,0, 7
0,0, 0,0, 40
; Stand Light Punch
[Begin Action 200]
Clsn2Default: 2
Clsn2[0] = -10, 0, 19,-80
Clsn2[1] = 0,-94, 12,-80
200,0, 0,0, 2
200,1, 0,0, 1
Clsn1: 1
Clsn1[0] = 16,-80, 61,-71
Clsn2: 3
Clsn2[0] = 19, 0,-10,-80
Clsn2[1] = 6,-94, 18,-78
Clsn2[2] = 19,-80, 61,-71
200,2, 0,0, 4
200,1, 0,0, 3
200,0, 0,0, 2
首先由[Begin Action XXX]开始整个段落,标明这是XXX编号的动作。
之后Clsn1代表攻击判定框,Clsn2代表受击判定框,如果后面跟着Default的话则代表该动作内这些框一直生效,
冒号后面紧跟着的数字N代表有多少个框。
因为有N个框,我们要将其画出来,也就是下面的 Clsn1[0] / Clsn2[0] 到 Clsn1[N-1] / Clsn2[N-1]。
等号后面紧跟着的四个数字代表 X方向1,Y方向1,X方向2,Y方向2,也就是框的四个顶点坐标。
再下面的五个数字分别代表 Sff的图像组和组内的第几张图,X轴偏移量,Y轴偏移量,持续时间。
知道了又有什么用呢?举个例子,我们要知道KFM的站轻拳的攻击判定相关资料,我们需要读的是:
; Stand Light Punch
[Begin Action 200]
Clsn2Default: 2
Clsn2[0] = -10, 0, 19,-80
Clsn2[1] = 0,-94, 12,-80
200,0, 0,0, 2;第一幅图用时2f,只有默认受击判定框
200,1, 0,0, 1;第二幅图用时1f,只有默认受击判定框
Clsn1: 1;攻击判定出现
Clsn1[0] = 16,-80, 61,-71;攻击判定框的大小
Clsn2: 3;新的受击判定框,暂时来说对我们没用
Clsn2[0] = 19, 0,-10,-80
Clsn2[1] = 6,-94, 18,-78
Clsn2[2] = 19,-80, 61,-71
200,2, 0,0, 4;攻击判定出现前用时2+1=3f,持续时间4f,所以4~7f是攻击判定
200,1, 0,0, 3
200,0, 0,0, 2
其模板为:
[Begin Action XXX]
Clsn2Default: N;(Clsn2Default和Clsn2的区别只有一直生效)
Clsn2[0] = AA, BB, CC, DD
...
Clsn2[N-1] = EE, FF, GG, HH
Clsn1 / Clsn2: N;(攻击判定框或者受击判定框)
Clsn1[0] / Clsn2[0] = AA, BB, CC, DD;(框的大小)
...
Clsn1[N-1] / Clsn2[N-1] =
EE, FF, GG, HH
III,J, K,L, M;(这些框对应的图像,偏移量和持续时间)
OOO,P, Q,R, S;(如果没写框就只有图像)
Clsn1 / Clsn2: N
...
---------------------------------------------------------------------------
在这里顺便提一提Mugen对人物制作有很大帮助的Fighter Factory(简称FF)。
作为一个Mugen爱好者制作的辅助软件,FF的功能应有尽有,可以给人物作者很大的帮助。
例如人物代码可以一键生成Sctrl模板;可视化的Sff、Air调整等等。
但是AI制作和人物制作不一样,FF对AI制作的帮助不大。
AI制作的Sctrl基本是Changestate和Var相关,Changestate方面直接复制Cmd的原Changestate就行了(因为写AI反正都不能违背原
本Cmd的要求),Var相关也不用什么模板,那么代码编写除了检查括号以外其他功能就没有必要了,这么一来还不如用notepad++。
FF对AI制作的最大帮助应该就是Air相关,可以更加直观查看攻击判定框和防御判定框,还有发生时间和持续时间。
所以即使FF毫无疑问是一个很好用的工具,此教程不打算对其进行具体介绍。
===========================================================================
6.3人物性能调查
===========================================================================
---------------------------------------------------------------------------
在第二章我们曾经提及,AI与性能的关系是AI发挥性能。
那么我们要写AI的话,自然是离不开人物的性能了,所以写AI之前,通常或多或少也得要先调查人物的性能。
只有对人物有了更加深刻的了解,才能更好的发挥其性能,作出更强更能发挥性能的AI。
---------------------------------------------------------------------------
人物性能调查项目
---------------------------------------------------------------------------
那么通常来说我们需要知道什么方面的性能呢?笔者写AI时要调查的内容如下:
非攻击:跑动启动及停止硬直、跳跃高度及滞空时间。
各个招式:状态号、能量消耗、伤害、攻击范围、受击范围、攻击发生帧、击中有利帧、被防有利帧、无敌时间及种类、是否中下
段/不可防、时长、juggle、取消链和能否空振。
下面来解释一下这些数据的作用和意义:
跑动启动及停止硬直:如果硬直大的话,跑起来或者停下来时就很容易被人攻击,所以跑动硬直越大要越谨慎。
跳跃高度及滞空时间:跳跃高度越高,躲避水平飞来飞行道具的能力就越好;而滞空时间越短,跳跃的风险越低。
状态号、能量消耗、伤害:...不解释。
攻击范围、受击范围:攻击范围越大越容易击中对方;受击范围越小越好,比人物宽度还小或者上下段没有受击判定的话甚至可以
当切反技。
攻击发生帧、击中有利帧、被防有利帧:攻击发生的越快,对方越难反击,也可以用于抢招;击中有利帧、被防优势帧则是让人物
在击中/压制造成对方受击硬直/防御硬直时,有更多的时间进行连段/压制,造成硬直越长越容易让连段(特别是目押连段)成立,
而硬直差不利可能会造成对方反取得先手。
无敌时间及种类:这里包括开始时间和持续时间,开始时间越早、持续时间越长切反性能越佳。
中下段/不可防:上下择及不可防的破防手段。
时长:过长的动作硬直可能会被对方躲避后反击。
juggle:Mugen特有的空中连击系统,决定受击浮空的目标是否能被继续连段,在第11章会详细介绍。
取消链:越丰富的取消链可使人物越灵活,也使人物的表现越精彩。
空振:空振令人物在某些动作的硬直中不需要接触对方也可以取消成为其他动作,使人物更加灵活。
---------------------------------------------------------------------------
人物性能调查方法
---------------------------------------------------------------------------
要调查这些数据,其实都是不必使用其他额外的东西完成的:
跑动启动及停止硬直:打开St文件调查是否有跑动启动及停止硬直,以及硬直时间。
跳跃高度及滞空时间:打开Mugen自己跳一次。
状态号:打开Cmd文件,或者开debug直接手操用一次,都能很直观的看出来。
伤害:打开St文件搜索damage/lifeadd相关。
能量消耗:打开St文件搜索power相关,不要求精确的话直接手操用一次不就行了吗...
攻击范围、受击范围:打开Air文件调查,另外攻击范围我们通常关注的是能触碰到对方的最大P2bodydist,P2bodydist X是攻击判
定框最前端坐标-人物前端宽度(Cns内可查得),P2bodydist Y和P2dist Y一致,所以只要调查框的大小就行了。
攻击发生帧、击中有利帧、被防有利帧:攻击发生帧直接可以打开Air文件调查(如果是超必杀技之类有暂停时间的话要减去);击
中有利帧、被防有利帧与hitdef里面的参数(pausetime、ctrltime、hittime、hitshaketime)和动作剩余时长有关,直接计算比
较困难,通常是打开Mugen击中后暂停一帧帧数双方回到可控状态的时间差。
无敌时间及种类:打开St文件搜索Hitby相关(包括NotHitby),注意需要减去暂停时间。
中下段/不可防:打开St文件看guardflag,还有是否有特殊断言(AssertSpecial)不可防御(unguardable)。
时长:看看会使用什么动画,把这些动画的时间都加起来。
juggle:打开St文件看juggle。
取消链:打开Cmd文件看看可以被什么状态取消。
空振:打开Cmd文件,如果能在!Movecontact的条件下取消就是可以空振。
---------------------------------------------------------------------------
可能有读者会说,这一个个调查也太麻烦了吧,就没有AI作者搞过性能调查的辅助工具吗?
好,下面笔者就要来介绍一个调查人物性能用的Mugen人物和该人物的两个补丁。
人物名字叫“training”,就是训练(沙包)的意思,作者是stupa氏(先拜OTL)。
如果你在视频网站看过某些人物展示视频,对面是个身边有数字的KFM或者抖M天子,基本就是这人物了。
两个补丁由ADI氏(继续拜OTL)提供,作用分别是training的功能扩展和在training基础上制作的攻击数据调查(名为
Attacks-Storage,简称为atks)。
这三份作品起码把笔者调查性能的时间起码缩减了一半,对笔者而言stupa氏和ADI氏简直是救世主一般的存在OTL。
---------------------------------------------------------------------------
首先介绍training,其实就是一个类似于众多格斗游戏训练模式的人物。
作为AI作者,通常可以把training放在2P侧默认选人位置,测试性能是选取人物会非常方便。
另外请不要被人物默认头像欺骗你的眼睛,否则你打开人物之后只会剩下失望和沮丧。
进入战斗界面后,1P侧随便按几下攻击,你会发现1P侧会出现一些数字。
人物后下方较大的数字是之前的状态攻击第一次接触对方的时间,如果没有攻击成功会出现从不可控状态开始到恢复可控状态的时
间,最多一共可记录三个。
人物后上方较小的数字貌似是按ABCXYZ几个键才会触发更新,是之前状态的状态号和攻击第一次接触对方的时间,如果没有攻击成
功会出现Changestate前所经过的时间,最多一共可记录三个。
training前下方的数字代表的是对方的P2bodydist X(可以改成P2dist X)。
按X键会出现一个倒计时的攻击,按6X会出现一个发生慢速度慢的飞行道具,用来测试当身/格挡/精防和飞道返。
按Y键会出现很多数据,包括上一次造成的伤害、上一个连段造成的总伤害、开局以来造成的最大连段伤害、最大连击数、有利帧、
对方是否可控。基本上就和众多格斗游戏的训练模式的数据一样,不予赘言。
按Z键会出现一个标尺,用于大约测量双方框的大小和位置。
按S键会出现一个菜单,分别是人物状态类型(SCA)、距离(任意或者远中近)、自动防御开关、受身开关、受身时间、距离标识
类型(P2bodydist X或P2dist X)、倒地时间和起身类型。也是和和众多格斗游戏的训练模式的数据一样,不予赘言。
另外这个人物有非常多可以调整的参数,具体的麻烦自己看readme并按照自己喜好修改。
利用training,我们就可以比较方便的调查招式的伤害、攻击发生帧、有利帧、中下段/不可防、时长等数据了。
---------------------------------------------------------------------------
然后介绍atks。
通常可以把atks放在training旁边,反正测起来就是两个一起用。
atks一共有五种模式可以选择,分别是A中下段、B攻击范围、C无敌时间、D有利帧、E气回收量。
前四个模式应该都很不错,不过因为training基本可以调查大部分数据,笔者通常只用B模式调查training也难以调查的攻击范围。
因为ADI氏不但写了详尽的文字解释,还制作了html网页图文并茂的讲解每个细节,在此不予赘言。
特别说明一下某些注意点:按住S键按ABCDE可以切换模式(最后F4重启切换);切记S键是重制;空中招式在Statetype = S的情况
下使用会直接落地,记住调整Statetype;B模式下把时间间隔调成1f就是每帧检测,可以顺便测出持续时间;B模式下按Y键可以取
消位移对距离的影响。
另外这个人物也有非常多可以调整的参数,具体的麻烦自己看readme并按照自己喜好修改。
于是,招式的中下段/不可防、攻击发生帧、有利帧、攻击范围、无敌时间及种类也可以轻松调查了。
---------------------------------------------------------------------------
但是有了上面这些神器还是不够的,能量消耗、受击范围、juggle、取消链和能否空振还是要自己动手。
不过剩下的这些除了受击范围以外都是比较容易调查的,上面的两个人物算是把不少麻烦的调查给解决了。
===========================================================================
课后作业:
1.
下载并尝试使用十德、FF、training和atks。
2.
调查KFM的蹲轻拳的攻击发生帧和击中有利帧(然后你就懂了KFM的世纪末轻拳原理了XD)。
以上教程由口水轩撰写