2017.04.1800:34

人物制作技巧相关其一.击退篇

Episode 1 人物制作技巧相关其一.击退篇

很久没更新过博客了是时候也来更新一发

这次呢我们讲一讲有关人物受击击退技巧,该怎么改善才能做的完整

因为我们知道,原作向的东西,只要你给对手造成打击的距离是多远,那么同时你在版边攻击他你自己退步的距离也是多远

虽然说Mugen也自带这个,但是不要相信mugen能给你带来原作的效果,mugen在角落里击退放大的倍数是1.3倍(默认),然后自己可以设立ground.cornerpush.veloff或者air.cornerpush.veloff还有guard.cornerpush.veloff这三个,但是你给对手造成的版边击退(其实是自己击退的距离)是按照速度来缩小倍数的,这个倍数就是stand.friction或者crouch.friction来逐帧乘的,比如-10的速度,它是按照(-10)*1.3*(0.85)^n 来计算的,和原作不同的是,大部分原作是按照对面受击时间EnemyNear,GetHitVar(HitTime),或者判断对面有没有在受击状态内来判断的,所以我们给出下面这个代码

fvar(18)代表击退位移代表值,一般是负数,使用的时候,需要限制原本的击退效果,也就是说
要把ground.velocity.veloff和air.velocity.veloff给限制了才能用(感谢ikaruga氏)

首先我们需要标记一个东西,就是为了不让人物在超杀暂停中移动,那么我们给superpause加工一下

[State 2000, 超必殺技発動の時間停止]
type = SuperPause
trigger1 = AnimElem = 1,= 1
anim = -1
poweradd = -1000
time = 28
movetime = 28
darken = 0
p2defmul = 1.0

比如说本来是这样一个东西,暂停时间是28F,那么我们改一下

[State 2000, 超必殺技発動の時間停止]
type = SuperPause
trigger1 = AnimElem = 1,= 1
trigger1 = var(9) := 1 || 1
........
只是先加了一个var记下来这个是超杀暂停的意思,那么接下来-2下需要解除这个var,于是

;-----------------------------------------------------------------------------
[State -2, VarAdd]
type = VarAdd
trigger1 = var(9) >= 1
var(9) = 1

[State -2, VarSet]
type = VarSet
trigger1 = var(9) >= 28 ;因为我这个是28F所以这里是28
var(9) = 0

;-----------------------------------------------------------------------------
[State -2, 1]
Type = VarSet
Trigger1 = MoveContact = 1
FV = 18
Value = 0 ;这个说一下,因为读取方式是从下优先的,所以默认条件相当于&&1那样,除了最下面的条件以外的触摸都是0,所以不能装-3下
ignorehitpause = 1

[State -2, 2]
Type = VarSet
Trigger1 = FVar(18) >= 0
Trigger2 = EnemyNear(Var(58)),StateNo != [154,155]
Trigger2 = EnemyNear(Var(58)),MoveType != H || EnemyNear(Var(58)),GetHitVar(HitTime) = 0
Trigger3 = FVar(18) = [-1,0]
Trigger4 = EnemyNear(Var(58)),StateNo = [154,155]
Trigger4 = EnemyNear(Var(58)),Ctrl
Trigger5 = EnemyNear(Var(58)),StateNo = [5100,5119]
Trigger6 = EnemyNear(Var(58)),StateNo = [5200,5219]
Trigger7 = EnemyNear(Var(58)),StateNo = 5001 || EnemyNear(Var(58)),StateNo = 5011
Trigger7 = EnemyNear(Var(58)),Time >= EnemyNear(Var(58)),GetHitVar(SlideTime)
FV = 18
Value = 0 ;这些是取消位移值的条件,不多讲了,slidetime就是滑行时间,hitdef里面的

[State -2, 3]
Type = PosAdd
TriggerAll = FVar(18) < 0 && var(9) = 0
TriggerAll = StateType = S || StateType = C
TriggerAll = EnemyNear(Var(58)),GetHitVar(HitShakeTime) <= 0
Trigger1= EnemyNear(Var(58)),BackEdgeBodyDist <= 0 || EnemyNear(Var(58)),FrontEdgeBodyDist <= 0
X = (FVar(18)) ;在hitpausetime结束后来位移

[State -2, 4]
Type = VarSet
Trigger1 = FVar(18) < 0 && var(9) = 0
Trigger1 = EnemyNear(Var(58)),GetHitVar(HitShakeTime) <= 0
FV = 18
Value = FVar(18) * ((EnemyNear(Var(58)),StateType = S || EnemyNear(Var(58)),StateType = C) * 0.85) ;一般是0.85的摩擦系数,这个可以根据自己的系数不同来改

[State -2, 5]
Type = VarSet
Trigger1 = MoveContact = 1
FV = 18
Value = -EnemyNear(Var(58)),GetHitVar(XVel)*Facing * (EnemyNear(Var(58)),StateType = S || EnemyNear(Var(58)),StateType = C);先读取一下对方的受击初速度
ignorehitpause = 1

代码是有了但还没看出来到底和系统自带的有什么区别对不对?那么还是缺少一些可靠的证据,于是我们来证明一下,实验人物:JIN氏Kyo-XI(这里不知道为什么图片上传错误我就给大家报数据吧,具体的可以去我网盘里下载DOC文档来查看结果)
链接:https://1drv.ms/f/s!ApWw8WboJ3MYn194tObyHdQVovlY
[State 200, 僸僢僩掕媊]
type = HitDef
trigger1 = time = 0
attr = S, NA
damage = 58, 0
animtype = Hard
guardflag = MA
hitflag = MAF
priority = 3, Hit
pausetime = 10, 11
sparkno = s4010
guard.sparkno = s4110
sparkxy = -20, -65
hitsound = s1,1
guardsound = s2,0
ground.type = High
ground.slidetime = 18
ground.hittime  = 20
ground.velocity = -8.3
airguard.velocity = -2.3,-1.8
air.type = High
air.velocity = -2.5,-3
air.hittime = 12

这个是他的hitdef,我们看到,g.velocity是-8.3

首先是版中击退(我给你们先报个数据):49

那么我们来看看版边击退的距离(先报个数据):34
[State 200, 僸僢僩掕媊]
type = HitDef
trigger1 = time = 0
attr = S, NA
damage = 58, 0
animtype = Hard
guardflag = MA
hitflag = MAF
priority = 3, Hit
pausetime = 10, 11
sparkno = s4010
guard.sparkno = s4110
sparkxy = -20, -65
hitsound = s1,1
guardsound = s2,0
ground.type = High
ground.slidetime = 18
ground.hittime  = 20
ground.velocity = -8.3
airguard.velocity = -2.3,-1.8
air.type = High
air.velocity = -2.5,-3
air.hittime = 12
ground.cornerpush.veloff = 0
air.cornerpush.veloff = 0

接下来我们加上现在的新代码来看看(同样报数据):49

好了证明结束,我们看到了,新代码的击退距离=版中击退,那么也就是说效果就在这里,非常实用的一个代码希望大家能用得上

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

mizore@kotori.moe, 谢谢大家!

アクセス

オンライン