common1.cns

Last-modified: 2020-06-06 (土) 18:46:01

体の大きさも移動速度も和訳カンフーマンと大差ないので、向こうの記述からの変更点はほとんど無い


 

分身化したヘルパーの復帰と消去

編集前

; Stand
[Statedef 0]
type = S
physics = S
sprpriority = 0

 
編集後

; Stand
[Statedef 0]
type = S
physics = S
sprpriority = 0

 

;剥がれたアーマーに回数が残ってたら復帰
[State 0, -1]
type = ChangeState
triggerall = IsHelper(9000)
trigger1 = Parent,Var(20) > 0
trigger2 = Parent,Var(21) > 0
value = 9000

 

;分身に化けたヘルパーを消す
[State 0, 0]
type = DestroySelf
trigger1 = Ishelper


ほぼ唯一の変更点、シグナムには自身にアーマーを付与する「パンツァーガイスト」という技があるが
これに当て身など強制的なステート変更を受けると、剥がれて分身化する事がちょくちょくある
なのでアーマー用のヘルパー「9000」番が分身化した際に、まだアーマーの回数(を管理しているvar)が
残っていたら、ヘルパーがアーマーとして振る舞うためのステートである「9000」番に戻すことで
残り回数ぶんのアーマーを復帰させ、引き続きアーマーの効果を受けることが出来るようにする

 

分身化したのが、それ以外のヘルパーだったり、もう回数が残ってなかったら、そのまま消滅させる

 

歩き

編集前

[State 20, 1]
type = VelSet
trigger1 = command = "holdfwd"
x = const(velocity.walk.fwd.x)

 

[State 20, 2]
type = VelSet
trigger1 = command = "holdback"
x = const(velocity.walk.back.x)

 
編集後

;前に向かって歩く、前進速度は和訳KFMと同程度
[State 20, 1]
type = VelSet
triggerall = roundstate = 2
trigger1 = p2statetype != L && P2BodyDist X >= 0
trigger2 = p2statetype = L && P2BodyDist X > 75
x = const(velocity.walk.fwd.x)

 

;後ろに向かって歩く、前進速度は和訳KFMと同程度
[State 20, 2]
type = VelSet
triggerall = roundstate = 2
trigger1 = p2statetype = L && P2BodyDist X < 65
x = const(velocity.walk.back.x)

 

;AI用の追加記述、一旦足を止めたなら、そのまま立ち状態に戻る
[State 20, 5]
type = ChangeState
trigger1 = vel X = 0
value = 0
ctrl = 1


移動速度は和訳カンフーマンと同程度なので、変更点はない

 

ジャンプ

編集前

[Statedef 40]
type = S
physics = S
anim = 40
ctrl = 0
sprpriority = 1

 

[State 40, 1]
type = VarSet
trigger1 = Time = 0
sysvar(1) = 0

 

[State 40, 2]
type = VarSet
trigger1 = command = "holdfwd"
sysvar(1) = 1

 

[State 40, 3]
type = VarSet
trigger1 = command = "holdback"
sysvar(1) = -1

 

[State 40, 4]
type = VelSet
trigger1 = AnimTime = 0
x = ifelse(sysvar(1)=0, const(velocity.jump.neu.x), ifelse(sysvar(1)=1, const(velocity.jump.fwd.x), const(velocity.jump.back.x)))
y = const(velocity.jump.y)

 

[State 40, 5]
type = VelSet
trigger1 = AnimTime = 0
trigger1 = prevstateno = 100 ;RUN_FWD
trigger1 = sysvar(1) = 1
x = const(velocity.runjump.fwd.x)

 

[State 40, 6]
type = ChangeState
trigger1 = AnimTime = 0
value = 50
ctrl = 1

 
編集後

[Statedef 40]
type = S
physics = S
;anim = 40;ここだけコメントアウト
ctrl = 0
sprpriority = 1

 

[State 40, 1]
type = VarSet
trigger1 = Time = 0
sysvar(1) = 0

 

;前方へのジャンプ、ジャンプ速度・高度は和訳KFMと同程度
[State 40, 2]
type = VarSet
triggerall = roundstate = 2
trigger1 = BackEdgeBodyDist <= 20 &&(p2statetype = L ||(p2statetype != A && p2movetype != A))
trigger2 = p2statetype != A && p2movetype != H
trigger3 = p2statetype = A && p2movetype = H
sysvar(1) = 1

 

;後方へのジャンプ、ジャンプ速度・高度は和訳KFMと同程度
[State 40, 3]
type = VarSet
triggerall = roundstate = 2
trigger1 = p2statetype = L && BackEdgeBodyDist > 20 && enemynear,NumProj = 0
sysvar(1) = -1

 

;敵が立ちかしゃがみ状態で、喰らい中かつ後方に余裕があるならバクステに移行
[State 40, 7]
type = ChangeState
triggerall = roundstate = 2
triggerall = time = 0 && vel Y = 0
triggerall = sysvar(1) = 0
trigger1 = p2statetype = S || p2statetype = C
trigger1 = p2movetype = H
trigger1 = BackEdgeBodyDist > 20
value = 105
ctrl = 1

 

;もし後方に余裕がないとしても、少なくともジャンプはさせない
[State 40, 7]
type = ChangeState
triggerall = roundstate = 2
triggerall = time = 0 && vel Y = 0
triggerall = sysvar(1) = 0
trigger1 = p2statetype = S || p2statetype = C
trigger1 = p2movetype = H
value = 0
ctrl = 1

 

;それ以外の場合はジャンプに移行する
[State 40, 8]
type = ChangeAnim
trigger1 = time = 0
value = 40

 

[State 40, 4]
type = VelSet
trigger1 = AnimTime = 0
x = ifelse(sysvar(1)=0, const(velocity.jump.neu.x), ifelse(sysvar(1)=1, const(velocity.jump.fwd.x), const(velocity.jump.back.x)))
y = const(velocity.jump.y)

 

[State 40, 5]
type = VelSet
trigger1 = AnimTime = 0
trigger1 = prevstateno = 100 ;RUN_FWD
trigger1 = sysvar(1) = 1
x = const(velocity.runjump.fwd.x)

 

[State 40, 6]
type = ChangeState
trigger1 = AnimTime = 0
value = 50
ctrl = 1


ジャンプ速度・高度も和訳カンフーマンと同程度なので、基本的に変更点は無い……はずなのだが
シグナムは和訳KFMと同じ記述だと、敵に攻撃中、何故か頻繁にその場でフラフラと垂直ジャンプしてしまう
なので本来なら多くをランダムに任せていたジャンプを、この場合は制御することに

 

上記のように記述すれば、敵が地上(ダウン以外)で喰らい中ならば、その場での垂直ジャンプのような
隙だらけな行動をしないよう制御できるはず(ただジャンプのランダムはあまり制御しないほうが
飛び道具などで固められるようなことを回避できるので、ほどほどに)

 

ダッシュ

編集前

[State 100, 4]
type = ChangeState
trigger1 = command != "holdfwd"
value = 0

 
編集後

;アーマーを張っていないときは、それなりのところで止まる
[State 100, 4]
type = ChangeState
triggerall = numhelper(9000) = 0
trigger1 = p2movetype = A || InGuardDist
trigger2 = RoundState != 2
trigger3 = p2movetype != H
trigger3 = P2BodyDist X < 80
trigger3 = P2BodyDist Y > -120
value = 0
ctrl = 1

 

;アーマーに関わりなく、ほぼ密着状態で停止する
[State 100, 4]
type = ChangeState
trigger1 = P2BodyDist X <= 10
value = 0
ctrl = 1


アーマーを張っている状態なら、止まる必要はないのでとにかく接近し
ほぼ密着状態まで近づけたらとりあえず止まる、という感じ。