2016.02.2319:32

确反(抓硬直),爆发(反应),凹和切反

Episode 3 确反,爆发,凹和切反

先来看一个例子

[State -3, 2A]
Type = ChangeState ;改变状态
Value = 400 ;状态号为400的技能
TriggerAll = var(59) = 1 ;AI启动
TriggerAll = Alive ;存活
TriggerAll = RoundState = 2 ;战斗中
TriggerAll = Random <= 600 ;概率
TriggerAll = StateType != A ;自己的状态,statetype分A(空中),S(站立),C(蹲下),L(倒地),这里statetype !=A也就是说自己不在空中触发
TriggerAll =!EnemyNear,Ctrl ;对面不可控时
TriggerAll = EnemyNear,StateNo >= 200 ;状态号>= 200,200以前一般不是战斗中的state (通常除了195 TAUNT)
TriggerAll = EnemyNear,StateType != A ;对面不在空中
TriggerAll = EnemyNear,StateType != L ;对面不倒地,也就是对面站立或者蹲下都可以
TriggerAll = EnemyNear,AnimTime <= -5 ;Animtime,这个理解为“自己这个技能的发生帧数”,比如说400的发生帧数为第5帧,你就写enemynear,animtime <= -5,概念有点抽象,以后细说
TriggerAll = EnemyNear,MoveType = I || EnemyNear,MoveType = A && EnemyNear,HitdefAttr != SCA,AA,AT,AP || EnemyNear,AnimTime = -5 && ((PrevStateNo = [130,155]) || EnemyNear,Facing = Facing) ;对面未作出动作,或者对面虽然是攻击状态,但未有任何攻击定义,或者是卡对面还剩5帧时候,自己之前的动作是防御来抓硬直,或者要么打背也可以
TriggerAll = EnemyNear,Time >= 0 ;对面TIME >= 0,反应时间,这里TIME >= 0就是超反应允许的意思
TriggerAll =!InGuardDist || EnemyNear,Facing = Facing || EnemyNear,AnimTime = -5 && (PrevStateNo = [130,155]) ;不处在防御范围内,或者背对对面(如果是Inguarddist再确认命中就是counter),或者是抓最后的硬直
TriggerAll = Ctrl || (StateNo = [20,22]) || (StateNo = [100,101]) || (StateNo = [120,149]) ; (这一行非常重要,特别是ctrl,少了这一行如果触发这个AI则人物会鬼畜)
Trigger1 = P2BodyDist X = [-10,40] ; (算好与对面的距离,确认反击)

这是一个很常见的确反(抓硬直)AI,可以看出,AI内包含 !InGuardDist || EnemyNear,Facing = Facing,也就是不在防御范围内,或者面对背面,当对面不可控并且处于没有判定出现的状态,即可做到攻击对面的破绽,一般是升龙挥空之类的

一般推荐自己起手为5帧以下的技能,或者你有个无敌,GP的话可以长一点,什么都没有还5帧以上的还是放弃吧

AI爆发(AI暴発)(反应)

语句中包含

triggerall = enemynear,movetype = A
triggerall = ctrl || (StateNo = [20,22]) || (StateNo = [100,101]) || (StateNo = [120,149])
triggerall = enemynear,time <= 1 ;重点是这句,必须在对手出手后1F以内,否则风险大增
trigger1 = random <= 100 ;概率不要太高,除非你很自信

AI反应,假如var(59)是AI等级,AI等级最高为10,那么可以举例
TriggerAll = EnemyNear,Time >= 50-5*var(59) || var(59) >= 10
那么当var(59) = 10的时候,条件为enemynear,time >= 0,也就是对面刚出招,自己就可以反应,也就是所谓的0帧反应
当AI为10时,也叫超反应,当你不加这句话的时候,CPU默认就是0帧反应

AI凹和切反
凹,大家应该都比较熟悉这个词,口中常说的“凹升龙”“凹182”之类的,其实就是利用无敌躲过对手判定来打中对手,前提不能是连段中,而是在立回中

切反,则不一定要是无敌技能,也可以是KOF系统的AB,BLACK OUT之类的技能来躲避对手攻击

二者之间的相同点是不能加 !inguarddist,对面movetype = A时对应出招,优先度必须大于防御(也就是必须写在防御的上面),不同点就是凹必须是攻击反击回去,而切反不一定要攻击

一般凹招必须再加一句triggerall = enemynear,animtime <= -X(X为判定出现的帧数,比如刚才的400,出现判定的帧数是第5帧,那么答案就是triggerall = enemynear,animtime <= -5),当然如果你包含低级AI的话,可以在这句话后面加一个 “ || var(59) <= B ” (B为你要低于的AI等级)

最好再用概率来限制一下
triggerall = Random <= 50 || Enemy,StateNo < 2000(概率小于50,或者对面状态号<= 2000)(2000以上的超必杀概率比较大,不好说超必杀的类型,所以还是尽量回避一下)
triggerall = Random <= ifelse((PrevStateNo = [140,155]),EnemyNear,Time*20,EnemyNear,Time*10)(概率随对面时间增加而增大,如果是撤防时概率翻倍,当然如果你有其他的想法可以改掉,这里只距离刚撤防时,其实还有被打,收招都可以用到)

好了,今天的课就先到这,大家写AI的时候一定要多看,看看别人的怎么写,总结自己的经验才有收获

如果您有什么问题的话可以私信我,我会第一时间给您答复,或者把问题发到我的邮箱

mizore@kotori.moe, 谢谢大家!

发表留言

秘密留言

アクセス

オンライン