2.AI概念简述及Mugen人物运作基础知识

本页内容由口水轩撰写. 由【softmgr】整理编辑.

==================================================
2.1AI概念简述
==================================================

显而易见,AI就是爱的拼音...所以没有了爱,人物就弱了很多,必须有爱才能领悟到悲伤...(PIA飞)
AI是人工智能(Artificial Intelligence)的缩写,是计算机科学的一个分支。
它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。

一说到AI,就有不少人认为它是高深莫测的东西。
在现实的人工智能学术领域,不但要懂计算机,还要懂心理和哲♂学(误)等等相关学科,才能模拟出人的智能。
但是在Mugen当中,AI并没那么复杂,有计算机基础的同学可以大概理解为,所谓电脑AI,其实是一组组if语句。
(if语句即判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一)

简单来说,就是你要教电脑在什么时候做什么东西。例如,
如果对方打你,你就防御...
如果对方在远处,你就出个飞行道具吓吓他...
如果对方被你打中了,你就打一套连段...

这么一解释下来,就容易理解多了,Mugen里面的AI其实是令人物根据人物性能根据实际情况作出相关反应的代码。
在游戏里面反映人的智能,本来人工智能要考虑人类心理之类的东西,现在无非就是看人要做什么事情了。
所以其实要学Mugen里面的AI并不难,你知道现实当中手操该怎么打,你就用个if语句还原那个动作就可以了。
另外你不必是FTG的触手,我这种被人纯波流跳都跳不过去,直接被PREFECT的纯沙包都可以写出AI,相信各位也不会有问题的(什么?你不信我是个沙包?用不用给你看看我玩KOF94连第一队都过不了的惨况XDDD)。
至于Mugen里面怎么写,就得先说说Mugen的语句之类的了,详细请看3.1。

--------------------------------------------------
既然说起了AI,就顺带说说性能和AI的区别,毕竟对新人来说这一点很容易有理解偏差。
简单来说,性能就是你是否拥有这能力或者是否能这么做,AI就是你是否在适合的时候做适合的事情。
如果要详细的说,那♂太♂长♂了:

性能:
最大生命值、最大能量值、特殊资源、攻击力、防御力、移动速度、攻击/受击框、冲刺/奔跑、能否二段跳/空中冲刺、出招时间、收招时间、无敌时间、霸体/格挡/精防/当身、单段/多段攻击判定、是否有飞行道具、取消链、能否空振取消,等等,太长不列...

AI:
出招时机、连段方式、移动走位、铁壁防御,等等...

举个两个例子:

Mugen:

KFM有必杀超升龙需要消耗1气,可以用来取消重拳。要消耗1气和可以用来取消重拳是他原来的设定,是性能,结果你在你没气的时候,一个超升龙向对方挥过去,这就是违反了原来的设定,是修改性能;
在只考虑胜利的前提下,你一个重拳打过去中了而且有气继续连超升龙而且连了就赢了,但是你没连,这是低AI,但如果你果断一个超升龙挥过去啪的一下中了,这就是高AI。

非Mugen:

假设有一部元祖高达,设定中你只能用火神炮,光束剑和镭射枪,结果你使出了石破天惊拳那就是修改性能。
假设有一部白色木马,左右舷都有相同的弹幕可以用,左舷是低AI,右舷是高AI。
(林有德:......)

作为AI作者,我们要知道,我们修改的是AI,不是性能。
对AI作者来说,修改性能是一件不太提倡的事,毕竟人物有原来的设定。
当然,并不是说不能修改性能。例如人物数据明显和原作有很大差别的话,你改回原作性能别人也不会怪你的;
而且Mugen当中不少人物性能都被不同程度的强化,合理强化也是可以理解的事(当然个人提倡还原原作)。
不过如果要修改,公开前首先要得到人物作者的允许,说明自己修改了什么地方。
毕竟人物是别人做的,你乱修改了别人的人物参数公开出来就是对别人的不尊重。
而且人物作者有可能是很辛苦一帧一帧看原作得出的精确数据,随便修改了也不太好。

AI与性能的关系是:AI发挥性能,没有性能就没有AI。
人物性能各有高低,性能好不必骄傲,性能差也不用悲伤。
如果你选择的是高性能的人物,那么恭喜你,那是人物作者赐予你的礼物。
如果老是觉得自己人物性能不够好的请记住一句话:
性能劣势用AI弥补。

==================================================
2.2Mugen人物运作基础知识
==================================================

--------------------------------------------------
写这个章节要对Mugen原理有深刻理解,笔者能力有限,如发现错误麻烦请马上指出避免误导,谢谢各位OTL.
要知道怎么写AI,还是先学学人物运作基础的东西吧...

--------------------------------------------------
先说人物构成,一个人物一般分为以下几个文件:

Def定义文件,内含人物的基本信息(如名字)和所用到的相关文件(路径)
Cmd操作指令文档,内含手操输入指令的定义和手操进入状态变换
Cns常量文件,人物的常量数值,例如血量、攻、防、走/跑速度等
St状态文件,人物的各个非公用状态,通常是以后缀.st的形式出现(把st写在cns的多数是偷懒XD)
Stcommon公用状态文件,人物的公用状态,默认为系统自带的common1.cns,当然也可以人物自带覆盖掉
Sprite(Sff)图像文件,人物的图像,是除了公用图像以外人物所用到的所有图片的集合
Anim(Air)动画文件,人物各动作的图像连接和图像时长,攻击判定框及受击判定框
Sound(Snd)声效文件,人物的声效,是除了公用声效以外人物所用到的所有音频的集合
Ai系统AI用文件,由于是1.0的新东西,资料不详
Palette(Pal)色表文件,选择1~12P不同的颜色
(还有个OP板和ED板就无视了XD)

其中,Sff、Snd、Pal是AI作者基本不用碰的(难不成写着写着AI去画张图?233)。同时这三个文件不影响性能。

Def基本就是改改路径,例如 cmd = AI/kfm.cmd 就是指该人物的cmd文档是AI子文件夹当中的kfm.cmd。
Cns是常量,常量是定下来的通常不会改。不过有时St会写在Cns里面,如KFM,到时只改Cns的St部分即可。
Ai不熟就不乱讲以免误导,记得也是不能改的。
Air主要是改性能或者加动画,也比较少用,还有调查性能时会用到,详细会在第6章讲解。

所以最终要改的就是Cmd、St和Stcommon三种文件。
至于怎么读怎么改...别急,下章3.1才开始讲呢- -...继续先打好基础再说吧...

PS:另外,Def、Cmd、Cns、St、Stcommon本质上来说都是txt(文本文档),平时直接拉进txt里面就可以开了。
PS2:其实这几个文档的后缀都是可以舍弃的东西...文件后缀不会影响文件读取...想起某人物的猎奇后缀,连AVI都出来了XDDD

--------------------------------------------------
接着说说人物是如何运行的。

首先补充一下说时间单位。1s = 60f(即1秒 = 60帧,一秒切换60次画面),标准单位通常也用f(帧)。
不过好像官方叫tick?不管了,反正看的懂,大家都习惯叫f了...233

Mugen的人物运行类似于有限状态自动机。
有限状态自动机是一个计算机模型,拥有有限数量的状态,
每个状态可以迁移到零个或多个状态,输入字串决定执行哪个状态的迁移。
(以上是计算机专业术语,不必太深究,如果想形象点了解的话建议去百度图片搜索 有限状态自动机 即可)

而Mugen人物运行其实就是一个个不同我们可以看见的动作的切换,这种切换的东西就叫做状态,State。
人物的每一个状态都有他自己的定义,在Cns和St里面,这种定义就叫做Statedef。
Statedef的数字也就是状态号,也就是我们平时见到的Stateno。因为没有相同的动作,Statedef不能重复。
Statedef下面的东西就是这个状态号将要做的东西,由一个个不同的状态控制器(state controller,以后简称Sctrl)组成,之后,如果状态控制器满足了触发器(trigger)的条件的话就会运行。
PS:状态控制器和触发器会在第3章慢慢详细谈,暂时不理解是什么也没有所谓。

之后人物会因为满足不同的条件(也就是trigger)而切换着状态和各种属性(也就是Sctrl控制的东西)。
人物一帧一帧地运行,不时从一个状态跳到另一个状态,最后就动起来了成为我们看到的样子。

所以要知道人物在某个动作做了什么的话,首先查他的状态号,之后到相应Statedef看看里面有什么东西就行了。

Statedef一般是非负数,不过有三个特殊例子,[statedef -3][statedef -2]和[statedef -1]。
以下引用一下四娘的话:

-3下的代码只会在自己存在在自己的状态号的情况下才会运行(注:有时角色会被拉到对方角色的状态号里,比如投技)
-2则是在任何状态下都会执行
-1一般包含由键盘输入的手动操作命令
同时-3-2-1每一帧只会运行一次,changestate和selfstate也不会进入-3-2-1中
当然,自己的-3-2-1只会对自己有效,对敌人毫无效果(除非是会影响到对手的那些代码

还有一点很重要的是,一个人物的运行顺序,
单个人物每一帧里,会按照[statedef -3]->[statedef -2]->[statedef -1]->[statedef 当前状态号]的顺序运行。
而人物间的运行顺序是按照1P->2P->3P->4P的顺序运行。
顺序运行看上去没用,事实上也的确很少用到,但以后讲到超反应就知道为什么要提及这些...

--------------------------------------------------
在补充一点豆知识吧...有些基本的东西要说清楚才行...

正如上面所说时间标准单位通常用f(帧),1s = 60f(即1秒 = 60帧,一秒切换60次画面)

屏幕大小X*Y=320*240,宽屏不清楚
屏幕坐标(0,0)点坐标位于X轴方向正中间,Y轴方向地面的交点
X轴正方向+,反方向-;Y轴向上-,向下+(Y轴很奇葩...要慢慢习惯)

主队第一人物叫1P,开场时在屏幕左侧
客队第一人物叫2P,开场时在屏幕右侧
双打时主队第二人物叫3P,开场时在屏幕左侧
双打时客队第二人物叫4P,开场时在屏幕右侧
1P和3P统称为1P侧,2P和4P统称为2P侧

现实中的数字分很多种,整数、分数、有理数、无理数等等。计算机领域的数字也有各种种类。
Mugen里面的数字与普通计算机很类似,以整型int和浮点型float为主。
整型int其实可以简单的理解为整数。另外取值范围是-2^31到2^31-1(包含-2^31和2^31-1)。
而浮点型float可以理解为可以带有小数的数,可以是整数也可以带小数。

对战中键盘Pause键可以暂停,暂停中ScrollLock键可以跳至下一帧

好,基础知识学的差不多了,下章开始学习怎么写-w-