霸体模式教程
;======================
;---[鸣谢]---
;感谢2DIYER论坛的"MAST-CHEN"大人和"L.C."大人,因为最早的霸体制作就是参考了
;老猫大人的教程帖以及论坛好友LC、鱼大等人的指导才摸索成功的,再次感谢。
;======================
;---[霸体模式教程]---
[statedef 前言]
[state, 霸体是什么?]
简单来讲就是无敌,在霸体过程中被任何招式击中都不会有被攻判定(但是伤害照算的,还有加成)。霸体招式可以强制出完。
例如KOF99中出现的ARMOR MODE中所体现的效果就是霸体,而想某些角色在出招的时候能够格挡对手攻击后并完成招数,这样的类型在某种意义上也是霸体,进行了局限性修饰后的霸体。
实战而言有霸体的话可以胜任很多插动的场合,如果对手攻击还很容易被这类招式打出counter(破招),之后能够继续连段的话,对压制方是很大的打击。
[state, MUGEN中的霸体]
在mugen中制作也很简单 主要就是巧用了hitoverride(攻击覆盖控制器)参数来让系统完成霸体效果。下
面就用人物Orc Warrior来演示如何制作霸体。
[statedef 正文]
[state, 霸体效果体现]
首先来详细的分析下霸体效果体现过程,然后来对症下药。霸体效果在体现为CNS代码时逻辑关系比较复杂,多熟悉一下还是可以很好的掌握的。好比我现在写教程,也是对霸体系统的一个加深了解。
霸体游戏效果:
1、我方人物开启霸体
2、我方人物进行任意一个动作的时候遭受攻击
3、遭受攻击后我方人物受到伤害,但是原有动作不中断
4、伤害结束后我方人物继续完成该动作
霸体在MUGEN的实际运行就是:
1、设置一个变量,利用变量来记录人物的当前动作编号
2、当遭受攻击的时候通过攻击覆盖控制器将人物强制进入一个特定的动作中
3、该特定动作不设置动画,这样系统只能继续播放当前动画,也就是维持了人物的原动作
4、让人物再次转回进入特定动作前的那个动作编号
[state, 霸体的CNS设置]
霸体在CNS代码中需要设置的地方
1、记录人物动作的变量A,为了能确保时刻进行人物动作记录,这一条变量需要写在[statedef -2]中
2、霸体的启动动作和关闭动作(如果有的话)
3、为了对霸体效果的存在与否进行一个判断,需要建立变量B,可以写在霸体启动的动作中,同时在[statedef -2]里也要写一份变量B的改变参数(霸体开了到时间总得关吧)
4、攻击覆盖控制器,也是要游戏中时刻进行判断运行的,这一条参数需要写在[statedef -2]中
5、攻击覆盖控制器所转入的动作
6、针对霸体效果所进行的人物动作修正
[statedef 实例]
下面就以Orc Warrior的实际CNS参数来对霸体代码进行详细说明。
[staete, 1]
;============
[statedef -2]
[state -2, 狂战士化动作记录]
type = VarSet
trigger1 = var(15) != stateno
trigger1 = movetype != h
trigger1 = stateno != 3150
v = 15
value = stateno
ignorehitpause = 1
解说:这里使用了变量var(15)作为记录霸体动作的变量,实际中可以随意变动,只要不和自己已经设置的其他的变量冲突就好了。是当同时满足以下3个条件时,变量15的数值等于当前的人物动作编号。
trigger1 = 变量15不等于动作编号
trigger1 = 人物的状态属性不等于"挨打"
trigger1 = 人物的当前动作编号不等于3150
3150是Orc Warrior的霸体的攻击覆盖转入动作编号,所以是需要回避掉的一个记录数据,挨打中的动作也是不符合霸体记录条件的,所以要回避,第一个条件是进行判断,确保变量15能和人物的当前动作保持同步。
;==============
[staete, 2+3]
;============
;---[破釜沉舟]---
[statedef 3100]
type = S
movetype= A
physics = S
juggle = 0
velset = 0,0
ctrl = 0
anim = 3100
sprpriority = 3
[state 3100, 破釜沉舟狂战士化]
type = VarSet
trigger1 = AnimElemTime(10) = 10
v = 14
value = 660
[statedef -2]
[State -2, 狂战士化持续时钟]
type = VarAdd
trigger1 = var(14) != 0
trigger1 = time%2 = 0
v = 14
value = -2
解说:霸体使用变量14进行开启记录,同时在-2中设置当变量14大于零就开始进行每秒数值降低60的递减,等于霸体效果可以维持12秒。
;============
[staete, 4]
;============
[statedef -2]
[State -2, 狂战士化特效]
type = HitOverride
trigger1 = var(14) != 0
trigger1 = stateno !=[120,155]
time = 1
slot = 2
attr = SCA,NA,SA,HA,NP,SP,HP
stateno = 3150
ignorehitpause = 1
解说:hitoverride攻击覆盖控制器将Orc Warrior挨打后转入特定动作3150中,所接受的攻击种类为飞行道具和直接打击(这里没有设置回避投技类型)。
trigger1 = 变量14不等于零 ;该条件完成霸体效果的开启和关闭确认。
trigger1 = 人物动作不处于从120到155中(120到155为防御动作,也就是人物防御不冲突)
;============
[staete, 5]
;============
;---[破釜沉舟狂战士化中转动作]---
[Statedef 3150]
type = U
movetype = U
physics = U
[State 3150, A]
type = PalFX
trigger1 = Life > 0
trigger1 = Time = 0
time = 2
add = 0,-200,-200
mul = 256,256,256
ignorehitpause = 1
[State 3150, B]
type = PosFreeze
trigger1 = Life > 0
trigger1 = 1
ignorehitpause
value = 1
[State 5010, HITSHAKE] ;这两条CHANGEANIM就是解决霸体相杀的关键
type = ChangeAnim
trigger1 = 1
value = Anim
elem = AnimElemNo(-1)
[State 0, ChangeAnim] ;这两条CHANGEANIM就是解决霸体相杀的关键
type = ChangeAnim
trigger1 = time >= Ceil(GetHitVar(hitshaketime)/1.5)
value = Anim
elem = AnimElemNo(-1)+2
[State 3150, D]
type = ChangeState
trigger1 = Life > 0
trigger1 = Time >= Floor(GetHitVar(hittime) * 0.4)
value = var(15)
ctrl = 1
[State 3150, E]
type = VelSet
trigger1 = Life = 0
x = GetHitVar(xvel)
y = GetHitVar(yvel)
[State 3150, F]
type = ChangeState
trigger1 = Life = 0
value = 5050
解说:
Astate是体现霸体持续中挨打时人物身上闪的白光
Bstate是体现霸体持续中挨打时人物出现暂时停顿的效果
Cstate是…………我也不太懂,反正这条抄过来没出错
Dstate是特殊动作结束的转入前一动作处理,条件是人物还没死
E+Fstate是当霸体持续中挨打导致人物死亡的处理情况
;============
[staete, 6]
;============
第六条很广泛,第六条很重要,没有弄好第六条的霸体等于走了一百步又倒退九十九步。有的玩家求助说霸体开启后人物挨打总是会反复多次进行前一个动作,这就是第六条没设置好的原因。
例1:
[Statedef 10]
type = C
physics = C
;anim = 10
[State 0, ChangeAnim]
type = ChangeAnim
trigger1 = anim != 10
value = 10
例2:
;---[站立 轻斩]---
[StateDef 200]
type = S
movetype= A
physics = S
juggle = 3
velset = 0,0
ctrl = 0
;anim = 200
poweradd = 20
sprpriority = 3
[State 0, ChangeAnim]
type = ChangeAnim
trigger1 = anim != 200
value = 200
例3:
;---[雷霆一击]---
[statedef 1000]
type = S
movetype= A
physics = S
juggle = 0
velset = 0,0
ctrl = 0
;anim = 1000
sprpriority = 3
[State 0, ChangeAnim]
type = ChangeAnim
trigger1 = anim != 1000
value = 1000
解说:
看明白以上3个例子的共同点吗?就是在statedef主参数下都不进行anim设置,而是在下面用小参数type = changeanim来进行anim设置。凡是你想要体现出霸体效果的动作都要进行这样的设置。
来回到文章最开头的霸体MUGEN运行步骤吧,最后一步是“4、让人物再次转回进入特定动作前的那个动作编号”,转回动作其实也就是重新进入了一次动作,而进入动作那么statedef的主参数就要执行一次,如果在主参数中设置了ANIM,那当然就会重新播放该动画一次,这样的效果当然就不符合霸体的概念了。
而changeanim设置后,由于霸体的特殊转入动作没有设置动画播放,于是游戏还是播放挨打前动画,转回动作由于动画编号依旧不变,于是动画还是继续播放下去而不会从新播放。
;============
感谢