2016.05.2810:50

MUGEN活动暂停

人物更新,AI发布先暂停一段时间(大概两个月左右),如果有想来找我学AI或者做人物和修人物的可以私戳我邮箱:mizore@kotori.moe,或者在下面留言,本人不定期上线,人物地址在这里https://onedrive.live.com/?id=187327E866F1B095%21394&cid=187327E866F1B095

PS:我这里写的大多数AI帖子是可以直接用的,最多改个数字就好了,剩下来要怎么用就是自己的问题了

再次感谢大家支持!
2016.05.2809:00

AI 记录硬直时间进行压制和确反

Episode 8 记录硬直时间进行压制和确反

首先看到一招的hitdef,来看看他的ground.hittime,guard.hittime,还有pausetime和guard.pausetime

我先举个例子

[State 200, ヒット定義]
type = HitDef
trigger1 = time = 0
attr = S, NA
damage = 23, 0
animtype = Light
guardflag = MA
hitflag = MAF
priority = 3, Hit
pausetime = 9, 10
sparkno = s4050
guard.sparkno = s4100
sparkxy = -20, -80
hitsound = s1,0
guardsound = s2,0
ground.type = High
ground.slidetime = 8
ground.hittime = 10
ground.velocity = -4.5,0
air.animtype = Back
air.velocity = -4.5,-4
airguard.velocity = -5.5,-2.5
air.hittime = 0
getpower = 35,35
givepower = 16,16

可以看到hittime(包括guard.hittime)是10,pausetime(这里包括guard.pausetime)是9,10

什么意思呢?就是说这一招打中了会给对手造成10帧的被打时间还有10帧的暂停时间,同时还会给自己造成9帧的暂停时间

也就是说,给自己一个11帧的有利时间,我们要这个有什么用呢?

花费两个var记下来hittime和hittime+真实造成的pausetime

比如你可以这么写

[State -3, AI与硬直時間カウント]
type = VarSet
Trigger1 = MoveContact = 1
var(47) = 11+1;(因为是movecontact = 1的时候计算的,所以要多加1帧,这个记录在当前statedef下,后面的statedef也是如此)

这里记录在-3下

;-----------------------------------------------------------------------
; ヒット硬直カウント
;-----------------------------------------------------------------------
[State -3, VarSet]
Type = VarSet
Trigger1 = var(49) != 0
V = 49
Value = 0
IgnoreHitPause = 1

[State -3, ヒット硬直時間]
Type = VarSet
TriggerAll = EnemyNear(var(58)),Ctrl = 0
TriggerAll = EnemyNear(var(58)),StateType != A
TriggerAll = EnemyNear(var(58)),StateType != L
TriggerAll = EnemyNear(var(58)),MoveType = H
Trigger1 = EnemyNear(var(58)),StateNo = [120,160)
Trigger2 = EnemyNear(var(58)),StateNo = [5000,5100)
V = 49
Value = EnemyNear(var(58)),GetHitVar(hittime) + 1 ;这里也是一样的道理
IgnoreHitPause = 1

然后取得了这个var的值有什么用呢?

接下来就可以做到比如一些空中特殊技命中来精准压制的玩意

比如空中特殊技-跑-技能 这样的压制或者确认动作

举个例子,statedef 100(跑步状态号)是4帧以后才开始出现速度,那么你可以这么写

;ダッシュ
[State -3, RUN]
Type = ChangeState
Value = 100
TriggerAll = var(59) = 1
TriggerAll = var(49) > 4 || var(47) > 4 ;确认对面有4帧以上的硬直出跑
TriggerAll = RoundState = 2
TriggerAll = StateNo != 100 ;不能是跑步动作时候出跑
TriggerAll = StateType != A
TriggerAll = EnemyNear(var(58)),StateType != A
TriggerAll = EnemyNear(var(58)),StateType != L
TriggerAll = EnemyNear(var(58)),MoveType = H
TriggerAll = Abs(EnemyNear(var(58)),Pos X - Pos X) <= 110 ;大概多少距离自己算,跑步内部AI里面要保证对面在被打(防御和真被打)情况下一直跑而不停
TriggerAll =!InGuardDist
Trigger1 = Ctrl || (StateNo = [20,22]) || (StateNo = [120,149])

然后跑过去了,可以根据硬直时间出不同的技能,比如5C是3帧的可以这么写

[State -3, Stand Strong Punch]
Type = ChangeState
Value = (5C状态号)
TriggerAll = var(59) = 1
TriggerAll = var(47) > 2 || var(49) > 2 ;时间是大于起手时间,也就是>= 3
TriggerAll = RoundState = 2
TriggerAll = StateType != A
TriggerAll = EnemyNear(var(58)),StateType != A
TriggerAll = EnemyNear(var(58)),StateType != L
TriggerAll = EnemyNear(var(58)),MoveType = H
TriggerAll =!InGuardDist || EnemyNear(var(58)),Facing = Facing
TriggerAll = P2BodyDist X = [-10,ifelse(var(47) = 3 || var(49) = 3),30,0)] ;在硬直时间足够的情况下和对手贴脸了再出,如果刚好是最后一帧了就用可以出这招的最大距离出,比如5C最大距离是30,那么就用ifelse写30
Trigger1 = Ctrl || (StateNo = [20,22]) || (StateNo = [100,101]) || (StateNo = [120,149])

还有一些其他中段,上段,下段就不一一描述了,在硬直够的情况下可以连续小跳压制,尽量使用下段技或者中段技来干扰对面防御,最快的技能留着保险比较小的硬直时间

好了,今天的课就先到这,如果您有什么问题的话可以私信我(只要是我会的,不管什么问题),我会第一时间给您答复,或者把问题发到我的邮箱

mizore@kotori.moe, 谢谢大家!

アクセス

オンライン