摩擦計算とNフレーム後のP2BodyDist X
動作確認も含め、めたくそ大変だった。
やっぱヒット硬直を鑑みた記述をしようとすると面倒くさくなりますね。
実際に使うときは最後のfvar群の番号がそのままNフレーム後の位置計算になるんで、
P2BodyDist X - Helper(XXXX),fvar(N) = [-5,60]
みたいに書きます。
ヘルパーでやらないと処理順の関係で1Pと2Pでずれると思いますぞ。
;敵X軸位置先読み
[state ]
type=null
trigger1=enemynear(root,var(57)),statetype=s
trigger1=fvar(0):=enemynear(root,var(57)),const(movement.stand.friction)
trigger2=enemynear(root,var(57)),statetype=c
trigger2=fvar(0):=enemynear(root,var(57)),const(movement.crouch.friction)
trigger3=enemynear(root,var(57)),statetype=a||enemynear(root,var(57)),statetype=l
trigger3=fvar(0):=1.0
[state ]
type=null
trigger1=enemynear(root,var(57)),movetype!=h
trigger1=fvar(0):=1.0
[state ]
type=varset
trigger1=1
sysfvar(0)=enemynear(root,var(57)),vel x
[state ]
type=varset
triggerall=playeridexist(floor(root,fvar(18)))
triggerall=playerid(floor(root,fvar(18))),movetype=h
trigger1=playerid(floor(root,fvar(18))),gethitvar(hitshaketime)
trigger2=abs(playerid(floor(root,fvar(18))),gethitvar(xvel))>0
trigger2=playerid(floor(root,fvar(18))),vel x=0
sysfvar(0)=playerid(floor(root,fvar(18))),gethitvar(xvel)*playerid(floor(root,fvar(18))),facing
;root,fvar(18) = 現在のTarget,ID。べつにEnemyNearでもいい
[state ]
type=varset
trigger1=1
sysfvar(0)=sysfvar(0)*ifelse((root,pos x<=enemynear(root,var(57)),pos x^^enemynear(root,var(57)),facing=1),1,-1)
[state ]
type=varset
trigger1=1
sysfvar(0)=sysfvar(0)*ifelse(enemynear(root,var(57)),vel x>0&&enemynear(root,var(57)),frontedgedist<5,0,1)
[state ]
type=varset
trigger1=1
sysfvar(0)=sysfvar(0)*ifelse(enemynear(root,var(57)),vel x<0&&enemynear(root,var(57)),backedgedist<5,0,1)
;敵X位置計算 対地コンボ用
[state ]
type=null
triggerall=fvar(0)!=1.0
trigger1=1||fvar(1):=sysfvar(0)*((fvar(0))**1-1)/ln((fvar(0)))
trigger1=1||fvar(2):=sysfvar(0)*((fvar(0))**2-1)/ln((fvar(0)))
trigger1=1||fvar(3):=sysfvar(0)*((fvar(0))**3-1)/ln((fvar(0)))
trigger1=1||fvar(4):=sysfvar(0)*((fvar(0))**4-1)/ln((fvar(0)))
trigger1=1||fvar(5):=sysfvar(0)*((fvar(0))**5-1)/ln((fvar(0)))
trigger1=1||fvar(6):=sysfvar(0)*((fvar(0))**6-1)/ln((fvar(0)))
trigger1=1||fvar(7):=sysfvar(0)*((fvar(0))**7-1)/ln((fvar(0)))
trigger1=1||fvar(8):=sysfvar(0)*((fvar(0))**8-1)/ln((fvar(0)))
trigger1=1||fvar(9):=sysfvar(0)*((fvar(0))**9-1)/ln((fvar(0)))
trigger1=1||fvar(10):=sysfvar(0)*((fvar(0))**10-1)/ln((fvar(0)))
trigger1=1||fvar(11):=sysfvar(0)*((fvar(0))**11-1)/ln((fvar(0)))
trigger1=1||fvar(12):=sysfvar(0)*((fvar(0))**12-1)/ln((fvar(0)))
trigger1=1||fvar(13):=sysfvar(0)*((fvar(0))**13-1)/ln((fvar(0)))
trigger1=1||fvar(14):=sysfvar(0)*((fvar(0))**14-1)/ln((fvar(0)))
trigger1=1||fvar(15):=sysfvar(0)*((fvar(0))**15-1)/ln((fvar(0)))
trigger1=1||fvar(16):=sysfvar(0)*((fvar(0))**16-1)/ln((fvar(0)))
trigger1=1||fvar(17):=sysfvar(0)*((fvar(0))**17-1)/ln((fvar(0)))
trigger1=1||fvar(18):=sysfvar(0)*((fvar(0))**18-1)/ln((fvar(0)))
trigger1=1||fvar(19):=sysfvar(0)*((fvar(0))**19-1)/ln((fvar(0)))
trigger1=1||fvar(20):=sysfvar(0)*((fvar(0))**20-1)/ln((fvar(0)))
trigger1=1||fvar(21):=sysfvar(0)*((fvar(0))**21-1)/ln((fvar(0)))
trigger1=1||fvar(22):=sysfvar(0)*((fvar(0))**22-1)/ln((fvar(0)))
trigger1=1||fvar(23):=sysfvar(0)*((fvar(0))**23-1)/ln((fvar(0)))
trigger1=1||fvar(24):=sysfvar(0)*((fvar(0))**24-1)/ln((fvar(0)))
trigger1=1||fvar(25):=sysfvar(0)*((fvar(0))**25-1)/ln((fvar(0)))
trigger1=1||fvar(26):=sysfvar(0)*((fvar(0))**26-1)/ln((fvar(0)))
trigger1=1||fvar(27):=sysfvar(0)*((fvar(0))**27-1)/ln((fvar(0)))
trigger1=1||fvar(28):=sysfvar(0)*((fvar(0))**28-1)/ln((fvar(0)))
trigger1=1||fvar(29):=sysfvar(0)*((fvar(0))**29-1)/ln((fvar(0)))
trigger1=1||fvar(30):=sysfvar(0)*((fvar(0))**30-1)/ln((fvar(0)))
trigger1=1||fvar(31):=sysfvar(0)*((fvar(0))**31-1)/ln((fvar(0)))
trigger1=1||fvar(32):=sysfvar(0)*((fvar(0))**32-1)/ln((fvar(0)))
trigger1=1||fvar(33):=sysfvar(0)*((fvar(0))**33-1)/ln((fvar(0)))
trigger1=1||fvar(34):=sysfvar(0)*((fvar(0))**34-1)/ln((fvar(0)))
trigger1=1||fvar(35):=sysfvar(0)*((fvar(0))**35-1)/ln((fvar(0)))
trigger1=1||fvar(36):=sysfvar(0)*((fvar(0))**36-1)/ln((fvar(0)))
trigger1=1||fvar(37):=sysfvar(0)*((fvar(0))**37-1)/ln((fvar(0)))
trigger1=1||fvar(38):=sysfvar(0)*((fvar(0))**38-1)/ln((fvar(0)))
trigger1=1||fvar(39):=sysfvar(0)*((fvar(0))**39-1)/ln((fvar(0)))
;敵X位置計算 対空コンボ、立ち回り用
[state ]
type=null
triggerall=fvar(0)=1.0
trigger1=1||fvar(1):=sysfvar(0)*1
trigger1=1||fvar(2):=sysfvar(0)*2
trigger1=1||fvar(3):=sysfvar(0)*3
trigger1=1||fvar(4):=sysfvar(0)*4
trigger1=1||fvar(5):=sysfvar(0)*5
trigger1=1||fvar(6):=sysfvar(0)*6
trigger1=1||fvar(7):=sysfvar(0)*7
trigger1=1||fvar(8):=sysfvar(0)*8
trigger1=1||fvar(9):=sysfvar(0)*9
trigger1=1||fvar(10):=sysfvar(0)*10
trigger1=1||fvar(11):=sysfvar(0)*11
trigger1=1||fvar(12):=sysfvar(0)*12
trigger1=1||fvar(13):=sysfvar(0)*13
trigger1=1||fvar(14):=sysfvar(0)*14
trigger1=1||fvar(15):=sysfvar(0)*15
trigger1=1||fvar(16):=sysfvar(0)*16
trigger1=1||fvar(17):=sysfvar(0)*17
trigger1=1||fvar(18):=sysfvar(0)*18
trigger1=1||fvar(19):=sysfvar(0)*19
trigger1=1||fvar(20):=sysfvar(0)*20
trigger1=1||fvar(21):=sysfvar(0)*21
trigger1=1||fvar(22):=sysfvar(0)*22
trigger1=1||fvar(23):=sysfvar(0)*23
trigger1=1||fvar(24):=sysfvar(0)*24
trigger1=1||fvar(25):=sysfvar(0)*25
trigger1=1||fvar(26):=sysfvar(0)*26
trigger1=1||fvar(27):=sysfvar(0)*27
trigger1=1||fvar(28):=sysfvar(0)*28
trigger1=1||fvar(29):=sysfvar(0)*29
trigger1=1||fvar(30):=sysfvar(0)*30
trigger1=1||fvar(31):=sysfvar(0)*31
trigger1=1||fvar(32):=sysfvar(0)*32
trigger1=1||fvar(33):=sysfvar(0)*33
trigger1=1||fvar(34):=sysfvar(0)*34
trigger1=1||fvar(35):=sysfvar(0)*35
trigger1=1||fvar(36):=sysfvar(0)*36
trigger1=1||fvar(37):=sysfvar(0)*37
trigger1=1||fvar(38):=sysfvar(0)*38
trigger1=1||fvar(39):=sysfvar(0)*39
やっぱヒット硬直を鑑みた記述をしようとすると面倒くさくなりますね。
実際に使うときは最後のfvar群の番号がそのままNフレーム後の位置計算になるんで、
P2BodyDist X - Helper(XXXX),fvar(N) = [-5,60]
みたいに書きます。
ヘルパーでやらないと処理順の関係で1Pと2Pでずれると思いますぞ。
;敵X軸位置先読み
[state ]
type=null
trigger1=enemynear(root,var(57)),statetype=s
trigger1=fvar(0):=enemynear(root,var(57)),const(movement.stand.friction)
trigger2=enemynear(root,var(57)),statetype=c
trigger2=fvar(0):=enemynear(root,var(57)),const(movement.crouch.friction)
trigger3=enemynear(root,var(57)),statetype=a||enemynear(root,var(57)),statetype=l
trigger3=fvar(0):=1.0
[state ]
type=null
trigger1=enemynear(root,var(57)),movetype!=h
trigger1=fvar(0):=1.0
[state ]
type=varset
trigger1=1
sysfvar(0)=enemynear(root,var(57)),vel x
[state ]
type=varset
triggerall=playeridexist(floor(root,fvar(18)))
triggerall=playerid(floor(root,fvar(18))),movetype=h
trigger1=playerid(floor(root,fvar(18))),gethitvar(hitshaketime)
trigger2=abs(playerid(floor(root,fvar(18))),gethitvar(xvel))>0
trigger2=playerid(floor(root,fvar(18))),vel x=0
sysfvar(0)=playerid(floor(root,fvar(18))),gethitvar(xvel)*playerid(floor(root,fvar(18))),facing
;root,fvar(18) = 現在のTarget,ID。べつにEnemyNearでもいい
[state ]
type=varset
trigger1=1
sysfvar(0)=sysfvar(0)*ifelse((root,pos x<=enemynear(root,var(57)),pos x^^enemynear(root,var(57)),facing=1),1,-1)
[state ]
type=varset
trigger1=1
sysfvar(0)=sysfvar(0)*ifelse(enemynear(root,var(57)),vel x>0&&enemynear(root,var(57)),frontedgedist<5,0,1)
[state ]
type=varset
trigger1=1
sysfvar(0)=sysfvar(0)*ifelse(enemynear(root,var(57)),vel x<0&&enemynear(root,var(57)),backedgedist<5,0,1)
;敵X位置計算 対地コンボ用
[state ]
type=null
triggerall=fvar(0)!=1.0
trigger1=1||fvar(1):=sysfvar(0)*((fvar(0))**1-1)/ln((fvar(0)))
trigger1=1||fvar(2):=sysfvar(0)*((fvar(0))**2-1)/ln((fvar(0)))
trigger1=1||fvar(3):=sysfvar(0)*((fvar(0))**3-1)/ln((fvar(0)))
trigger1=1||fvar(4):=sysfvar(0)*((fvar(0))**4-1)/ln((fvar(0)))
trigger1=1||fvar(5):=sysfvar(0)*((fvar(0))**5-1)/ln((fvar(0)))
trigger1=1||fvar(6):=sysfvar(0)*((fvar(0))**6-1)/ln((fvar(0)))
trigger1=1||fvar(7):=sysfvar(0)*((fvar(0))**7-1)/ln((fvar(0)))
trigger1=1||fvar(8):=sysfvar(0)*((fvar(0))**8-1)/ln((fvar(0)))
trigger1=1||fvar(9):=sysfvar(0)*((fvar(0))**9-1)/ln((fvar(0)))
trigger1=1||fvar(10):=sysfvar(0)*((fvar(0))**10-1)/ln((fvar(0)))
trigger1=1||fvar(11):=sysfvar(0)*((fvar(0))**11-1)/ln((fvar(0)))
trigger1=1||fvar(12):=sysfvar(0)*((fvar(0))**12-1)/ln((fvar(0)))
trigger1=1||fvar(13):=sysfvar(0)*((fvar(0))**13-1)/ln((fvar(0)))
trigger1=1||fvar(14):=sysfvar(0)*((fvar(0))**14-1)/ln((fvar(0)))
trigger1=1||fvar(15):=sysfvar(0)*((fvar(0))**15-1)/ln((fvar(0)))
trigger1=1||fvar(16):=sysfvar(0)*((fvar(0))**16-1)/ln((fvar(0)))
trigger1=1||fvar(17):=sysfvar(0)*((fvar(0))**17-1)/ln((fvar(0)))
trigger1=1||fvar(18):=sysfvar(0)*((fvar(0))**18-1)/ln((fvar(0)))
trigger1=1||fvar(19):=sysfvar(0)*((fvar(0))**19-1)/ln((fvar(0)))
trigger1=1||fvar(20):=sysfvar(0)*((fvar(0))**20-1)/ln((fvar(0)))
trigger1=1||fvar(21):=sysfvar(0)*((fvar(0))**21-1)/ln((fvar(0)))
trigger1=1||fvar(22):=sysfvar(0)*((fvar(0))**22-1)/ln((fvar(0)))
trigger1=1||fvar(23):=sysfvar(0)*((fvar(0))**23-1)/ln((fvar(0)))
trigger1=1||fvar(24):=sysfvar(0)*((fvar(0))**24-1)/ln((fvar(0)))
trigger1=1||fvar(25):=sysfvar(0)*((fvar(0))**25-1)/ln((fvar(0)))
trigger1=1||fvar(26):=sysfvar(0)*((fvar(0))**26-1)/ln((fvar(0)))
trigger1=1||fvar(27):=sysfvar(0)*((fvar(0))**27-1)/ln((fvar(0)))
trigger1=1||fvar(28):=sysfvar(0)*((fvar(0))**28-1)/ln((fvar(0)))
trigger1=1||fvar(29):=sysfvar(0)*((fvar(0))**29-1)/ln((fvar(0)))
trigger1=1||fvar(30):=sysfvar(0)*((fvar(0))**30-1)/ln((fvar(0)))
trigger1=1||fvar(31):=sysfvar(0)*((fvar(0))**31-1)/ln((fvar(0)))
trigger1=1||fvar(32):=sysfvar(0)*((fvar(0))**32-1)/ln((fvar(0)))
trigger1=1||fvar(33):=sysfvar(0)*((fvar(0))**33-1)/ln((fvar(0)))
trigger1=1||fvar(34):=sysfvar(0)*((fvar(0))**34-1)/ln((fvar(0)))
trigger1=1||fvar(35):=sysfvar(0)*((fvar(0))**35-1)/ln((fvar(0)))
trigger1=1||fvar(36):=sysfvar(0)*((fvar(0))**36-1)/ln((fvar(0)))
trigger1=1||fvar(37):=sysfvar(0)*((fvar(0))**37-1)/ln((fvar(0)))
trigger1=1||fvar(38):=sysfvar(0)*((fvar(0))**38-1)/ln((fvar(0)))
trigger1=1||fvar(39):=sysfvar(0)*((fvar(0))**39-1)/ln((fvar(0)))
;敵X位置計算 対空コンボ、立ち回り用
[state ]
type=null
triggerall=fvar(0)=1.0
trigger1=1||fvar(1):=sysfvar(0)*1
trigger1=1||fvar(2):=sysfvar(0)*2
trigger1=1||fvar(3):=sysfvar(0)*3
trigger1=1||fvar(4):=sysfvar(0)*4
trigger1=1||fvar(5):=sysfvar(0)*5
trigger1=1||fvar(6):=sysfvar(0)*6
trigger1=1||fvar(7):=sysfvar(0)*7
trigger1=1||fvar(8):=sysfvar(0)*8
trigger1=1||fvar(9):=sysfvar(0)*9
trigger1=1||fvar(10):=sysfvar(0)*10
trigger1=1||fvar(11):=sysfvar(0)*11
trigger1=1||fvar(12):=sysfvar(0)*12
trigger1=1||fvar(13):=sysfvar(0)*13
trigger1=1||fvar(14):=sysfvar(0)*14
trigger1=1||fvar(15):=sysfvar(0)*15
trigger1=1||fvar(16):=sysfvar(0)*16
trigger1=1||fvar(17):=sysfvar(0)*17
trigger1=1||fvar(18):=sysfvar(0)*18
trigger1=1||fvar(19):=sysfvar(0)*19
trigger1=1||fvar(20):=sysfvar(0)*20
trigger1=1||fvar(21):=sysfvar(0)*21
trigger1=1||fvar(22):=sysfvar(0)*22
trigger1=1||fvar(23):=sysfvar(0)*23
trigger1=1||fvar(24):=sysfvar(0)*24
trigger1=1||fvar(25):=sysfvar(0)*25
trigger1=1||fvar(26):=sysfvar(0)*26
trigger1=1||fvar(27):=sysfvar(0)*27
trigger1=1||fvar(28):=sysfvar(0)*28
trigger1=1||fvar(29):=sysfvar(0)*29
trigger1=1||fvar(30):=sysfvar(0)*30
trigger1=1||fvar(31):=sysfvar(0)*31
trigger1=1||fvar(32):=sysfvar(0)*32
trigger1=1||fvar(33):=sysfvar(0)*33
trigger1=1||fvar(34):=sysfvar(0)*34
trigger1=1||fvar(35):=sysfvar(0)*35
trigger1=1||fvar(36):=sysfvar(0)*36
trigger1=1||fvar(37):=sysfvar(0)*37
trigger1=1||fvar(38):=sysfvar(0)*38
trigger1=1||fvar(39):=sysfvar(0)*39
CornerPush.VelOff について(コーナープッシュ)
壁際に追い詰めた状態で攻撃を当てたときのヒットバック、
押し戻されの数値のことをMUGENではcornerpushと言いますが、
これのうまい感じの設定方法の目安をようやく見つけました。
ground.cornerpush.veloff=(const(velocity.run.fwd.x)+0.07)*-1
・・・とまあ、こんな具合に、
自分の前ダッシュの速度分+少々って感じにするのがいい感じっぽい。
うん。それだけ
押し戻されの数値のことをMUGENではcornerpushと言いますが、
これのうまい感じの設定方法の目安をようやく見つけました。
ground.cornerpush.veloff=(const(velocity.run.fwd.x)+0.07)*-1
・・・とまあ、こんな具合に、
自分の前ダッシュの速度分+少々って感じにするのがいい感じっぽい。
うん。それだけ
改変響のオリジナル乱舞技也

強化剣質限定の潜在奥義
『剣禅一如の至り也』
の乱舞部分のモーション面が出来上がってきました。
なんとなく既視感を覚えると思いますが、
前半部分の動きは守矢の乱れ雪月花をほぼ踏襲しています。
後半部分は十六夜月華ですが、一番最後の斬りつけが
『死を恐れぬ心也』
のもの(逆手持ちの抜刀)になっています。
十六夜月華部分も戻りは残像みたいにして表示しようかどうか考えているところです。
んで、一番最後の逆手抜刀が当たると二度目のステート移動が起こり、
白虎・空ヲ裂ス猛虎ノ狂爪っぽい爪形の斬撃が襲いかかる演出に移行という感じ。
なぜ白虎かというと、改変元のHSRさんの響にもとから白虎の爪の画像が入っていたから……。
強化剣質限定の潜在奥義ってことで、性能演出ともに大げさなくらいのものになる予定なので
もうちょっと更新は待ってね。
レン弄り途中経過
レン弄り。
AIRファイルの編集中。
まあだいたい必要そうな部分は済んで、次はCNS面に進む感じ。
まだMUGENで動かすとエラー落ちすると思われる程度には足りてない。
いちおう、方針としては
『黒い白レン+いつもの私の改変』
って感じになるハズ。
つまりそこはかとなく旧SNK臭のする構造になる。空ダとかあるけど。
シールドはたぶん弾き化する。
無敵攻撃技は極力排除し、搭載するとしても無敵移動技程度。
あるいは攻撃判定発生より前に無敵が切れるような感じか、
出掛かりに無敵が無いような感じで。
ネコアルク要素を排除するので、猫ロケットは氷技と差し替え。
カットインとかはどうしようね?
たぶんカットインは無しかなー?
AIRファイルの編集中。
まあだいたい必要そうな部分は済んで、次はCNS面に進む感じ。
まだMUGENで動かすとエラー落ちすると思われる程度には足りてない。
いちおう、方針としては
『黒い白レン+いつもの私の改変』
って感じになるハズ。
つまりそこはかとなく旧SNK臭のする構造になる。空ダとかあるけど。
シールドはたぶん弾き化する。
無敵攻撃技は極力排除し、搭載するとしても無敵移動技程度。
あるいは攻撃判定発生より前に無敵が切れるような感じか、
出掛かりに無敵が無いような感じで。
ネコアルク要素を排除するので、猫ロケットは氷技と差し替え。
カットインとかはどうしようね?
たぶんカットインは無しかなー?