レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。
製作お助け掲示板
製作で困ったことがあれば
質問をどうぞ
どんな初歩的な質問でも
キャラ製作の先人達がやさしくお答えいたします。
ただし教えてくれた内容が間違っていても怒らないように。
だれにでも間違いはあります。
ココで得た知識を吸収し、教える側に回れるように精進しましょう。
また
先人達も知識がさび付かないように、理解をより深めるために
お互いに知識を出し合い、高め合いましょう。
影はステージ依存だから無理だと思う
キャラ側では表示するかしないかの「全か無か」しか設定できない
重なりを考慮して欠けたスプライトを用意するわけにもいかないだろうし
ステージ端での壁バウンド技を作っているのですが、行き詰ってしまったので質問させてください・・・
ヘルパーを使ってステージ端の探知は出来ています。
ステートを奪った相手のBackEdgeBodyDistとステージ端にいるヘルパーのPosをトリガーにしてバウンドする処理をしたいのですが、どうも上手くいきません・・・
ステートを奪った相手に、こちらのヘルパーの位置を参照させる方法はないでしょうか?
PlayerIDリダイレクトで参照できなくはないけど、
本体Varにヘルパー位置情報を格納してEnemyリダイレクトで相手にそれを参照させた方が楽だよ
>>783
できました〜!
ありがとうございます〜
>>782
そうですか・・・わかりました、ありがとうございます
アンカーミス
>>782 じゃなくて>>781
AI製作中にいきなりエラーが出てしまいました。AIトリガー製作後まず弱パンチから製作に入ったのですが
;立ち弱
[state -1];AI立ち弱
Type = ChangeState
Value = 200
TriggerAll = Var(59) = 1
TriggerAll = StateType != A
Trigger1 = Ctrl ;ここから下の記述でAIの行動を限定させていきます。
Trigger1 = P2StateType != A ;相手が空中状態以外のとき
Trigger1 = P2MoveType != A ;相手が攻撃状態以外のとき
Trigger1 = P2BodyDist X = [0,50] ;相手とのX方向の距離が0から50のとき
Trigger1 = Random <= var(58)*100 ;AIレベル差
この記述を消すとエラーが出ない点からAIトリガーには問題がないと思われるのですが原因がよくわかりません。
>787
他のテンプレをコピペしたところエラーは出ませんでした。しかし原因はなんなんでしょう?今度はAIスイッチより上に記述したから?
その記述は問題ないと思います
情報不足過ぎて何とも言えませんがその記述で疑うならvar(58)かと
var(59)がスイッチのようなので
var(58)の計算式がおかしいか定義してないのでは?
それと
triggerall = alive = 1 ;タッグ時ゾンビ化する
triggerall = roundstate = 2 ;無いとフライングする
この2個は入れといた方がいいですよ
trigger1 = p2statetype != L ;無いと相手がダウン中でも無駄に振る
技次第ではこれも
コメントアウトより左側に全角スペースがあるのを全部消すか半角にしてみたら?
内容そのものに問題があるようには見えないから全角スペース読ませなくすれば多分エラー消える
RoundState=2はフライングの抑制にはなるけど防止にはならないから注意
RoundState=2になるタイミングとStateNo=0かつCtrlになるタイミングはアドオン次第で異なるからね
(StateNo=0)*(Ctrl)+((StateNo=10)+(StateNo=20)+(StateNo=40))*(PrevStateNo=0)
あたりで試合開始を感知してフラグ立てた方がフライング防止には確実
開幕前行動のあるキャラは更に工夫が必要になるけどね
フラグはVar(59)の正負使えば(正でフラグON、負でフラグOFF)変数増やさなくて済むし
しゃがみ通常攻撃のAI用記述を入れたので試しにVSモードでAI入れて密着してみたのですがあれ?2弱振ってこない?
;しゃがみ弱パンチ
[State -1, Crouching Light Punch]
type = ChangeState
value = 400
triggerall = var(59) = 1 && RoundState = 2
triggerall = alive = 1
triggerall = statetype != A && (p2statetype = S || p2statetype = C)
triggerall = ctrl && (P2BodyDist X = [20,45]) && random <=50*var(58)
triggerall = ctrl && (P2BodyDist X = [0,20]) && random <=100*var(58)
trigger1 = p2movetype != A
trigger2 = p2movetype = A && life >= lifemax / 2
P2BodyDist X が20以下のAI記述はまだこれしか書いてないので密着すれば即これ振ってくるはずなのに?まだ歩きとかジャンプの
AI用記述がないからでしょうか?それともAIスイッチがまずいのでしょうか?
[State -1, AIフラグセット]
type = VarSet
triggerall = !var(59)
triggerall = RoundState = [1,2]
trigger1 = Command = "AI0"
trigger2 = Command = "AI1"
trigger3 = Command = "AI2"
trigger4 = Command = "AI3"
(中略)
trigger49 = Command = "AI48"
trigger50 = Command = "AI49"
trigger51 = Command = "AI50"
var(59) = 1
var(58) = 10 ;AIlevel
>triggerall = alive = 1
>trigger1 = p2statetype != L ;無いと相手がダウン中でも無駄に振る
記述追加しておきました。
P2BodyDist Xは自分の前端から相手の前端(向き合ってる時)または後端(そっぽ向かれてる時)までの距離
Ground.FrontとClsn2次第では密着するとマイナスの値にもなり得るよ(つか密着してたら大抵負の値)
あと、TriggerAllの4つ目と5つ目のせいでP2BodyDist Xが丁度20の時しか条件満たさなくなってるよ
>793
>P2BodyDist Xは自分の前端から相手の前端(向き合ってる時)または後端(そっぽ向かれてる時)までの距離
>Ground.FrontとClsn2次第では密着するとマイナスの値にもなり得るよ(つか密着してたら大抵負の値)
ground.front = 16
ニュートラルのClsn2先端が15(30×0.5〔D4〕)
しゃがみがのClsn2先端が37.5(75×0.5〔D4〕)
でCMDに
;しゃがみ弱パンチ
[State -1, Crouching Light Punch]
type = ChangeState
value = 400
triggerall = var(59) = 1 && RoundState = 2
triggerall = alive = 1
triggerall = statetype != A && (p2statetype = S || p2statetype = C)
trigger1 = p2movetype != A
trigger1 = ctrl && (P2BodyDist X = [0,45]) && random <=50*var(58)
trigger2 = p2movetype != A
trigger2 = ctrl && (P2BodyDist X = [-35,0]) && random <=100*var(58)
trigger3 = p2movetype = A && life >= lifemax / 2
trigger3 = ctrl && (P2BodyDist X = [-35,0]) && random <=100*var(58)
と記述したのですがこれでもたまにしか弱パンチふってきません。-35をー100くらいにしても反応しない??
取り敢えず「&& random〜」の部分コメントアウトして乱数要素排除した状態で
P2BodyDistの代わりにP2Dist使った場合とP2BodyDistのままの場合で上手くいくか試してみて
P2Distに変える場合は基準点が違うから-35,0,45の値も変えないといけないけど
あとは
[State ]
Type = DisplayToClipboard
Trigger1 = 1
Text = "P2BodyDist X = %f"
Params = P2BodyDist X
でデバッグ表示してみると原因解明の助けになるかも
>796
>取り敢えず「&& random〜」の部分コメントアウトして乱数要素排除した状態で
「&& random〜を除外したところ弱パン振ってくるようになりました。それにしてもなんで乱数が上手く機能しなかったのでしょうか?
var(59) AIスイッチとvar(58)AIレベル は同じstate -1で処理してるからAIスイッチが入ればAIレベルも機能するはずなんですが?
var(x) =の代替書式使ったこと無いから分からんけど、同じステコン中に2つ書いて両方機能するものなの?
上に書いた方のみが機能して下に書いた方は無視されるような印象なんだけど
改善案としては「var(59) = 1」を消して「var(58) = 10 ;AIlevel」を「var(58) = (Var(59):=1)*10 ;AIlevel」に変更すれば
ステコン自身の処理でvar(58)に1*10が格納されて、「:=」の機能でvar(59)に1が代入されるようになるよ
>796
>var(58) = (Var(59):=1)*10 ;AIlevel
見事機能しました。ありがとうございます。
ええ連投気味で申し訳ないのですが立ち弱のAI記述追加をしたらしゃがみ弱を全く振らなくなってしまいました。
triggerは一部違うしrandomも含めているのですが?
記述は以下の通りです。
[State -1, 5弱]
type = ChangeState
value = 200
triggerall = var(59) = 1 && RoundState = 2
triggerall = alive = 1
triggerall = statetype != A && (p2statetype = S || p2statetype = C)
triggerall = p2statetype != L
triggerall = ctrl && (P2BodyDist X = [0,40])
triggerall = Const(size.head.pos.y) < -40
triggerall = P2Dist Y >= -20
trigger1 = p2movetype != A
trigger1 = random < var(58)*50
trigger2 = p2movetype = A && life >= lifemax / 2
trigger2 = random < var(58)*50
;------------------------------------------------------------------------------
[State -1, Crouching Light Punch]
type = ChangeState
value = 400
triggerall = var(59) = 1 && RoundState = 2
triggerall = alive = 1
triggerall = statetype != A && (p2statetype = S || p2statetype = C)
triggerall = statetype != L
triggerall = p2statetype != L
triggerall = p2statetype ! = A
triggerall = Const(size.head.pos.y) >= -40
trigger1 = p2movetype != A
trigger1 = ctrl && (P2BodyDist X = [0,45])
trigger1 = random < 500
trigger2 = p2movetype = A && life >= lifemax / 2
trigger2 = ctrl && (P2Dist X = [0,45])
trigger2 = random < 500
trigger3 = p2movetype != A
trigger3 = ctrl && (P2Dist X = [-35,0])
trigger4 = p2movetype = A && life >= lifemax / 2
trigger4 = ctrl && (P2Dist X = [-35,0])
Constは文字通り定数だからConst(size.head.pos.y)は常にcnsの[Size]のHead.Posに書いた値しかとらないよ
Const(size.head.pos.y)は基点(大抵のキャラは足元)から頭までの距離ね
triggerall = Const(size.head.pos.y) < -40を満たしてるなら、その試合中どう足掻いても
triggerall = Const(size.head.pos.y) >= -40を満たすことは無い
質問です。
キャラ側からステージBGMの速度を変えることは出来るものですか?
>Const(size.head.pos.y)
ちびキャラ判別ように記述しました。まあ、立ち弱は至近距離対空用にしたので結局Const(size.head.pos.y)にしました。
通常技と投げのAI記述終わりましたが、強いだけのAIなら数日でできるってのがよくわかりました。(しゃがんだ瞬間中段、投げ間合いに入ると即投げられる)
>>801
不可能
>>802
ちびキャラ判別ならEnemyNear,Const(Size.Head.Pos.y)じゃない?
>>803
そうですか、分かりました。
クイックタイムやメイド・イン・ヘブンは作れないのか…
>>804
螺旋アッシュみたいに背景もBGMもキャラで準備するようにしたらそれっぽいのは出来るはず。
ステージとの兼ね合いは必要ですが。
BGM自分で用意しても鳴っているsnd弄ることはできないし、snd途中から再生できないから
効果発動時に鳴っているsnd止めて、丁度その続きから始まるsndを変速再生して
効果が切れたら変速再生してるsnd止めて、丁度その続きから始まるsndを通常再生しなきゃいけない
短いループのBGMであればぎこちない程度にはできないことはないけど、現実的ではないと思うよ
単音のSEをsndに沢山登録しといてcns側でそれらをタイミングよく鳴らして演奏するなら
↑みたいな煩わしいことしなくていいけど、演奏自体が結構面倒だろうし
AIに相手が飛び道具を売ったさいに飛び道具無敵技を出させたいのですが、何かいいトリガーはありませんでしょうか?
enemynear,NumProj > 0 はエラーこそでませんがトリガーとしてきちんと機能してないような?
現在このような記述をしていますが上手く機能していません。
[State -1, 6Dダンシング肉球]
type = ChangeState
value = 1105
triggerall = var(59) = 1
triggerall = statetype ! = A
triggerall = power > 330
TriggerAll=EnemyNear,StateType != L
TriggerAll=EnemyNear,Alive
trigger1 = ctrl
Trigger1 = Random < (58)*100
trigger1 = p2movetype = A
trigger1 = enemynear,NumProj > 0
trigger1 = p2statetype != A
飛び道具といってもProjectileじゃなくてHelperにHitDef撃たせてる場合もあるから
相手の飛び道具タイプをちゃんと見た方がいいよ
EnemyNear,NumProj自体はきちんと機能する筈だから相手がProj出してないか、ほかのTrigger満たしてないかのどっちか
あと、Projは例えばステージ端を検知するのにも使ったりするからNumProjに頼りすぎるのも考えもの
連続ヒット攻撃の補正関係を作っているのですが、各段で補正が違う攻撃のステートです。
[State 200 , コンボ補正・乗算1]
Type = VarSet
Triggerall = movehit
trigger1 =!(var(6) & 262144)
trigger1 = AnimElem = 3
fvar(0) = fvar(0) * 0.85 + fvar(6)
IgnoreHitPause = 1
persistent= 0
[State 200 , コンボ補正・乗算+1]
Type = VarAdd
trigger1 =!(var(6) & 262144)
trigger1 = AnimElem = 3
fvar(6) = 0.05
IgnoreHitPause = 1
persistent= 0
このような感じにAnimElemの値を1ずつ増やして、後半のほうになると補正があがるようになっています。
ただ、たとえば初段があたって途中の攻撃があたらなかったりすると、movehitのトリガーが働いてしまっているので、そのアニメ番号になると勝手に補正が計算されてしまいます。
movehit系のトリガーのフラグをリセットしたいのですが、同一ステート内でのリセットは可能でしょうか?
>808
飛び道具無敵技の無敵記述にミスがあったのが原因でした。
>>809
MoveHitResetというステコンがある
Move系は接触した次のFで1になってPauseTime中ずっと1、PauseTime解けたら2からカウントアップという仕様だから
IgnoreHitPause=1とPersistent=0付けてるならTriggerAll=MoveHit=1に変えるだけで解決できるんじゃないかな
瀕死時限定の技を作りたく、CMDの発動条件に変数を使用しています。
その記述がこちらなのですが
[State -2, VarSet]
type = VarSet
triggerAll = Var(50) = 3
triggerAll = 0.4 >(1.0*(Life)/(LifeMax))
trigger1= Power >= 3000
trigger2= 0.2 >(1.0*(Life)/(LifeMax))
trigger2= Power >= 2000
trigger3= 0.1 >(1.0*(Life)/(LifeMax))
trigger3= Power >= 1000
trigger4= 0.01<(1.0*(Life)/(LifeMax))
var(50) = 4
[State -2, VarSet]
type = VarSet
triggerAll = Var(50) >= 4
trigger1= 0.4 <(1.0*(Life)/(LifeMax))
trigger1= Power < 3000
trigger2= 0.2 <(1.0*(Life)/(LifeMax))
trigger2= Power < 2000
trigger3= 0.1 <(1.0*(Life)/(LifeMax))
trigger3= Power < 1000
var(50) = 3
目指したいのは
「ライフ40%未満で3ゲージある場合」
「ライフ20%未満で2ゲージある場合」
「ライフ10%未満で1ゲージある場合」
「ライフ 1%未満」
……の条件を満たした際に変数を「4」にして
相手のライフが回復する、自分がゲージを消費するなどで条件を満たさなくなった場合には、変数を「3」に戻すという記述です。
ところが、ゲージを消費しても変数が「4」のままであるなどのバグが発生しています。
論理式に隙があるのではないかと思うのですが、どこを直すと良いのでしょうか?
trigger4の不等号が逆だね
修正しました、しかしまだ発生する…
なぜゲージがゼロになってもvar(50)=4のままなのだろうorz
[State -2, VarSet]
type = VarSet
triggerAll = Var(50) >= 4
trigger1= 0.4 <=(1.0*(Life)/(LifeMax));ライフ40%以上ならゲージ無関係に解除
trigger2= Power < 3000;3ゲージ未満なら
trigger2= 0.2 <=(1.0*(Life)/(LifeMax));ライフ20%以上のときのみ解除
trigger3= Power < 2000;2ゲージ未満なら
trigger3= 0.1 <=(1.0*(Life)/(LifeMax));ライフ10%以上のときのみ解除
trigger4= Power < 1000;1ゲージ未満なら
trigger4= 0.01 <=(1.0*(Life)/(LifeMax));ライフ1%以上のときのみ解除
var(50) = 3
目指したい条件見るにこうだと思う
あとはVar被りのチェックかな
直りました!
ありがとうございます!
>>811
movehitresetを使うとmove〜トリガーを使ったキャンセルができなくなるので注意
返事が遅くなってすみません・・・
>>811
>>817
結局使っても上手くいかなかったので、一段ごとにステートを分ける形で連続技としました。
すみませんです・・・
ありがとうございました!
MoveHit = 1に変えてもダメだったの?
あとHitDefは実行した時点での値で処理されるから
コンボ補正用のVarの値が変わる度にHitDef実行し直さないと反映されないよ
まあ解決できたならいいけど
HitDefでD4ヒットエフェクトを使うと画像が小さくならないので
攻撃がヒットしたときにExplodを使ってtrigger1 = movehitで表示させていますが
同じステート内の連続攻撃だと最初の1回目だけしか表示されないです。
多分>>811 さんの言ってることが原因だと思いますが・・・
連続攻撃でD4エフェクトを表示させる良い方法はないでしょうか?
1段目のHitDefのPauseTimeと、1段目と2段目の間隔を考慮してPersistentの値決めればいい
[State ]
Type = Explod
Trigger1 = MoveHit = 1
(略)
IgnoreHitPause = 1
Persistent = 8
こんな感じなら1発目ヒットした次のFでMoveHit = 1が成立してExplod実行されるけど
その後7FはMoveHit = 1が成立していようとExplodは実行されない
8F経過後以降に再度MoveHit = 1を満たしたら(2発目ヒットしたら)Explod実行されてその後7F実行されず
この「実行されない」7Fの間にHitPauseが解けてMoveHitが2以上になれば一度のヒットで複数回実行されることもない
>>821
うおっ、本当にできました!
自分のキャラ製作の問題の壁が1つ消えたぁ〜。ありがとうございます!
AIに相手がくらい状態の時それがあと何フレームあるのかを認識させたいのですがどうすればよろしいでしょうか?
EnemyNear,AnimTime はくらい動作の場合上手く働いてないのでしょうか?それとも私の記述がまずいのかでしょうか?
喰らい動作の長さはHitDef等のHitTimeやSlideTime依存だから相手のAnimTime参照しても意味無いよ
仰け反り(5000とか)と仰け反り戻り(5005とか)に分かれてるし、戻りは最終絵の表示時間を-1にしてるはずだから望みの値返してくれないし
参照するならEnemyNear,GetHitVar(HitTime)とかEnemyNear,GetHitVar(SlideTime)とかだね
>824
>参照するならEnemyNear,GetHitVar(HitTime)とかEnemyNear,GetHitVar(SlideTime)とかだね
目押し(?)コンボ上手くいきました。ありがとうございます。
AI戦をやってみると何故かヒット音はするのにダメージを受けない不具合が多発どうもHitOverrideが他のステートに移ったあとも有効なままなのが原因のようです。
当身ステートを修正してみたのですが相変わらずアーマー同然の状態です。
現在このような形になってます(全部張ると長いので立ち当身のみ)
;5D当身
[Statedef 1100]
type = S
movetype= I
physics = S
juggle = 0
veladd = 0,0
ctrl = 0
anim = 1100
poweradd = 0
sprpriority = 2
[State 1100]
type = HitOverride
trigger1 = (AnimElemTime (5) >= 0) && (AnimElemTime (6) < 0)
attr = SA,AA
slot = 1
stateno = 1103
forceair = 0
[State 1100]
type = HitOverride
trigger1 = (AnimElemTime (5) >= 0) && (AnimElemTime (6) < 0)
attr = SAC,AP
slot = 2
stateno = 1101
forceair = 0
[State 1100, ステート変更]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1
timeは省略時1ですからこれで他のステートに HitOverrideが持ち越されることはないはずなんですが。
それだけじゃ何とも言えんね…
試しにTime=1を書いてみるか、AnimElemTime(6)>=0になったらTime=0のHitOverrideで上書きしてみては?
強いて気になる点を挙げればSlot=0は他のところ(常時監視とか)で使ってるのかな?
HitOverrideが怪しいと踏んでるなら片っ端からNullに書き換えてはShift+F4を繰り返して
原因のHitOverrideを特定するのが一番確実だと思う
>826
一通りやってはみたんですが・・。
ん?まてよ?挙動がおかしいときの直後は当身動作してる?もしかしてCMD?
[State -1,6d]
Type = ChangeState
value = 1105
TriggerAll=var(59) = 1;AIスイッチ
TriggerAll=RoundState = 2
TriggerAll=StateType != A
triggerall =Ctrl|(StateNo=11)||(stateno = 1230)||(stateno = 5120)
TriggerAll=EnemyNear,StateType != L
TriggerAll=EnemyNear,MoveType != H
triggerall = p2statetype != A
triggerall = p2stateno = [0,999]
trigger1 = power < 1000
Trigger1=EnemyNear,MoveType=A
Trigger1=Random<=var(58)*20&& Enemynear,Time>=5||(var(58)>9)
Trigger1=P2BodyDist X=[10,150]
trigger2 = power < 1000
Trigger2=EnemyNear,MoveType=A
Trigger2=Random<=var(58)*15&& Enemynear,Time>=5||(var(58)>9)
Trigger2=P2BodyDist X=[40,150]
trigger2 = enemynear,vel x > 4
trigger3 = power >= 1000
Trigger3=EnemyNear,MoveType=A
Trigger3=Random<=var(58)*5&& Enemynear,Time>=5||(var(58)>9)
Trigger3=P2BodyDist X=[10,150]
trigger4 = power >= 1000
Trigger4=EnemyNear,MoveType=A
Trigger4=Random<=var(58)*5&& Enemynear,Time>=5||(var(58)>9)
Trigger4=P2BodyDist X=[40,150]
trigger4 = enemynear,vel x > 4
続きです。
[State -1,2d]
Type = ChangeState
value = 1120
TriggerAll=var(59) = 1
TriggerAll=RoundState = 2
TriggerAll=StateType != A
triggerall =Ctrl||(StateNo=11)||(stateno = 5120)
TriggerAll=EnemyNear,StateType != L
TriggerAll=EnemyNear,MoveType != H
triggerall = p2statetype = C
trigger1 = power < 1000
Trigger1=EnemyNear,MoveType=A
Trigger1=Random<=var(58)*25&& Enemynear,Time>=5||(var(58)>9)
Trigger1=P2BodyDist X=[-15,120]
trigger2 = power < 1000
Trigger2=EnemyNear,MoveType=A
Trigger2=Random<=var(58)*20&& Enemynear,Time>=5||(var(58)>9)
Trigger2=P2BodyDist X=[41,150]
trigger2 = enemynear,vel x > 4
trigger3 = power >= 1000
Trigger3=EnemyNear,MoveType=A
Trigger3=Random<=var(58)*5&& Enemynear,Time>=5||(var(58)>9)
Trigger3=P2BodyDist X=[-15,120]
trigger4 = power >= 1000
Trigger4=EnemyNear,MoveType=A
Trigger4=Random<=var(58)*5&& Enemynear,Time>=5||(var(58)>9)
Trigger4=P2BodyDist X=[41,150]
trigger4 = enemynear,vel x > 4
くらいぬけ?のような動きをしてるときはたいていこの動きなのでこのへんに問題があるのでしょうか?
6dの方の
triggerall =Ctrl|(StateNo=11)||(stateno = 1230)||(stateno = 5120)
|が一つ足りないね、Ctrlの後ろ
あと、1230が何のステートか気になる
ステコンの種類に関わらず原因箇所かどうかの確認法は同じで
怪しいステコンをNullに変えて動作チェックを繰り返せば大抵特定できるよ
複数箇所が原因だとチェックしきれない場合もあるけど
問題解決しました。原因はJ強斬りの
trigger4 = Random <= var(58)*30
trigger4 = p2statetype != A
trigger4 = P2BodyDist X =[-10,63]
trigger4 = P2BodyDist Y =[-22,64]
という記述でここにctrlがないため、浮かせられる→J強斬りステートに移行→おそらく軸位置の都合で即着地。という行動になっていたもようです。
ううむたった一行抜けてのんが原因なのを突き止めるのに10時間以上費やしたぜ・・・・。
ヘルパーにExplodを表示させて、そのヘルパーが消えたときにExplodも消したいんですが
State -2に
type = RemoveExplod
trigger1 = NumHelper(1420) = 0←そのヘルパーが0個の時
ID = 1401←表示させたExplodのID
とやっても消えません。どうすればきえるでしょうか?
常時監視で管理してる範囲が不明だけど、一番簡単なのは
ヘルパーの自殺命令と同じトリガーのRemoveExplodを、ですとろいステコンより上に書くこと
Explodは出したヘルパー自身にしかRemoveExplod実行できないよ
-2でヘルパー数を条件に本体がRemoveExplod使っても無意味
ヘルパーに常時監視ステート読ませることも可能だけど別の問題が絡んでくるから
素直に個別ステートでDestroySelfの上に同じ条件でRemoveExplod書いた方が良い
>>832
条件が同じなら上に書いた奴が優先されるんですか。知らなかったです。
>>833
ヘルパーのRemoveExplodの件はしりませんでした。
そのようにやったらできました!ありがとうございます。
今回、新しくキャラを作りたいと思ったので、
まず、SFFから作ろうと思い、
スプライトをダウンロードしたのですが、
ドット絵の一枚、一枚が全部一つにまとめられていました。
その一つにまとめられている画像からドットを一つずつ抜き出すには、どうしたらいいでしょうか?
何かツール、ソフトが必要でしょうか?
Sprite Databaseというスプライト公開サイトの
ジャンプアルティメットスターズの悟飯を作る予定です。
EDGE等々のドットを描くソフトを使います。
一番簡単(楽とはちがう)なやり方は
1、抜き出したいドット以外を、全部消しゴム等々で消す
2、キャンバスの大きさを、抜き出したいドットがちょうど収まるよう変更する
(しなくても問題ない、SFFが重くなるだけです。軸合わせも大変になるかも。)
3、名前を付けて保存
これを繰り返せばOK!
ドットを描くソフトを使いこなせば、もっと楽にできますよ〜。
たぶん、ジャンプアルティメットスターズのドットだと‥
途中で物足りなさ感じてくるかもしれません。
そんなときは‥
使いこなせるようになったドットを描くソフトを駆使して
ドットをグレードアップさせましょう。
その際は是非、ドット絵板をご利用ください。
ストライカーが上から落ちてきて攻撃する攻撃を作りたいのですがヘルパーを出そうとするとなぜか本体が消えてしまいヘルパーが出てきませんでした
記述は以下の通りです
[Statedef 19003]
type = S
movetype= A
physics = S
juggle = 0
poweradd= 0
velset = 0,0
anim = 99999
ctrl = 0
sprpriority = 0
[State 19003 ヘルパーの呼び出し4]
type = Helper
trigger1 = time = 5
stateno = 20030
ID = 20030
postype = p2
pos = 0,-500
helpertype = normal
name = "20030"
keyctrl = 0
ownpal = 1
[State 19003]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1
続きです
[Statedef 20030]
type = S
movetype= A
physics = N
velset = 0,0
ctrl = 0
anim = 20030
sprpriority = 1
[State 20030]
type = VelSet
trigger1 = Anim = 20030
y = 15
[State 20030, 落下中の攻撃判定]
type = HitDef
trigger1 = Anim = 20030
attr = A,SA
hitflag = MAF
guardflag =
affectteam = B
animtype = hard
priority = 7, Hit
damage = 0, 0
pausetime = 0,0
sparkno = -1
sparkxy = 0, 0
hitsound = -1
guardsound = 0,0
ground.slidetime = 0
ground.hittime = 20
guard.hittime = 10
guard.slidetime = 10
air.hittime = 20
guard.ctrltime = 10
ground.velocity = 0,15
air.velocity = 0,15
fall = 1
fall.recover = 0
givepower = 10
persistent = 0
[State 20030]
type = ChangeState
trigger1 = Pos Y >= 0 && Vel Y > 0
value = 20031
ctrl = 0
[Statedef 20031]
type = S
movetype = A
physics = S
anim = 20031
ctrl = 0
movehitpersist = 1
[State 20031, 着地時の攻撃判定]
type = HitDef
trigger1 = time = 0
attr = S,SA
hitflag = MAFD
guardflag =
affectteam = B
animtype = hard
priority = 7, Hit
damage = 100
pausetime = 0,0
sparkno = 0
sparkxy = 0, 0
hitsound = 0,0
guardsound = 0,0
ground.slidetime = 0
ground.hittime = 20
guard.hittime = 10
guard.slidetime = 10
air.hittime = 20
guard.ctrltime = 10
ground.velocity = 0,15
air.velocity = 0,15
fall = 1
fall.recover = 0
givepower = 10
persistent = 0
[State 20031 ヘルパー消滅]
type = DestroySelf
trigger1 = Animtime =0
[State 20031]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1
カンフーマンにドット絵を入れてみました。
そしたら、エフェクトは色化けしないのに、
キャラ本体のドットは色化けします。
どうすれば、ちゃんと色化けしないで表示できますか?
教えてください。
>>839
自分で解決しました。
sffはだいたいできたので、sndを作り始めました。
ニコニコ動画や、youtubeの動画の音声をWVAで保存して、音声編集ファイルで
声を取ったのですが、BGMなどが入ってしまいます。
BGMなどを取って、綺麗にする方法はありますか?
SoundEngine Freeという音声編集ソフトで編集しています。
下を参照してください。
ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1416627019
>>837
Animは確か4万強(具体的な値は忘れた)よりも大きい値を指定できない
99999を別の番号に振り直してみるといいよ
あとDestroySelfの下にChangeStateあるけど要らない筈だし
下手したらMUGENが強制終了する原因になるから消した方が良い
DestroySelf実行後に同一FでExplodやHelperを実行しちゃうと強制終了だから
0番ステートに最速でExplodやHelperを生成する記述が入っていないのであれば落ちはしないけど
>>843
ありがとうございます!
指摘してくださった部分とは違うところでしたが無事?不具合は直りました
しかし不具合があった部分ですがヘルパーを呼び出すステコンのtrigger1 = time = 0のところのtimeの値を1以上に変えるとヘルパーがでてこないようです
ヘルパーを時間差で呼び出したいのですがどうすればいいでしょうか?
普通ならTime = 5でも呼び出せるからTime=5を待たずして19003を抜けてるんだと思う
1以上にすると出ないなら19003を読み込んだ同一F(若しくは次のFの常時監視)で即座に抜けてるってことになる
ChangeStateの条件がAnimTime=0だからAnim関係の誤作動だろうってことで>>843 のレスしたんだけど、Animは振り直したの?
あとは常時監視のChangeStateやSelfStateが19003を抜ける原因になっていないかもチェックかな
>>845
レスありがとうございます
おかげで原因が分かりました
animのフレーム数を0にしていたので条件を満たす前にステートが移動していたのだと思います
指摘されたところはすべて直しましたのでanimの番号も40000未満に振り直しました
タッグで相手チーム二人に挟まれたときの行動をAIに指定したいのですがトリガーはどうすればよいのでしょうか?
試しに
trigger1 = enemy(0),facing != facing &&enemy(numenemy=2),facing = facing
trigger1 = enemy(numenemy=2),bodydist < 0
と入力したところ2行目がエラーを吐きました。
BodyDist Xだね、XかYを付けないと駄目
あと、NumEnemyは相手本体に加えてHelperType = Playerのヘルパーもカウントするから
=2で指定しちゃうとタッグ相手でも0を返すことがあるし、逆にシングル相手で1を返すこともあるから注意
>BodyDist X
Xを付けてみましたがだめでした。BodyDistはp2専用?
結局
triggerall = enemy(0),movetype != H || enemy(numenemy=2),movetype != H
triggerall = enemy(0),alive=1 && enemy(numenemy=2),alive=1
trigger1 = enemy(0),facing != facing &&enemy(numenemy=2),facing = facing
trigger2 = enemy(0),facing = facing &&enemy(numenemy=2),facing != facing
で概ね行動してくれたました。
AIに学習機能をつけようとしているのですが上手く立ってくれません。
[State -2];学習スイッチonoff
type = varset
trigger1 = 1
var(57) = 1;0 off 1 on
[State -2];地上中段記憶
type = varset
trigger1 = stateno != 131&&(stateno != [152,153]);しゃがみガード以外のくらいステート
trigger1 = var(57) = 1
trigger1 = var(40) = 0
trigger1 = prevstateno = 131||(prevstateno = [152,153]);直前はしゃがみガード
trigger1 = movetype = H
trigger1 = P2Statetype != A
trigger1 = P2Movetype = A
var(40) = p2stateno
ignorehitpause = 1
で変数に代入して
[State -3,しゃがみ解除(ガード切替も兼ねてる)]
Type = ChangeState
value = 0
Ctrl = 1
TriggerAll=RoundState=2
TriggerAll=var(59) = 1
TriggerAll=StateType != A
TriggerAll=StateNo = 11
trigger1 = p2statetype = A
Trigger1 = Random <= var(58)*30
trigger2 = var(59) = 1
trigger2 = var(40) = p2stateno
trigger2 = var(40) > 0
trigger2 = var(59) = 1
trigger2 = var(41) = p2stateno
trigger2 = var(41) > 0
しゃがみ解除ステートと
[State -3,立ちガード]
Type = ChangeState
Value = 120
TriggerAll=var(59) = 1
TriggerAll=StateNo!=[120,155]
TriggerAll=Ctrl||StateNo=11
TriggerAll=inguarddist
TriggerAll=RoundState=2
Trigger1 = Random<=var(58)*60
Trigger2 = P2BodyDist X>90||EnemyNear(var(50)),Time>50
Trigger2 = Random<=var(58)*150
trigger3 = var(40) = p2stateno
trigger3 = var(40) > 0
trigger4 = var(41) = p2stateno
trigger4 = var(41) > 0
たちガードステートにさっきの変数がp2stastenoのときはトリガー入るようにします。
あとはCNSのガードステートを
[State 131, Lo to Hi]
type = ChangeState
Trigger1 = var(59) = 0
Trigger1 = command != "holddown"
Trigger2 = var(59) = 1
Trigger2 = EnemyNear,StateType=A
Trigger2 = Random <= var(58)*30
trigger3 = var(59) = 1
trigger3 = var(40) = p2stateno
trigger3 = var(40) > 0
trigger4 = var(59) = 1
trigger4 = var(41) = p2stateno
trigger4 = var(41) > 0
value = 130
しゃがみから立ちへの変更部分にも手を加えたんんですが立ってくれません?
ごめん、寝ぼけてたw
P2じゃないBodyDistなんて無かったな
Var(41)は2種類目の地上中段ステート記憶ってことでいいのかな?
一つ目のChangeStateのTrigger2下3つはTrigger3の間違いかと
あとは立ちから屈みへのChangeStateも弄っとかないと
高速屈伸や2500loopになるからそっちも手を加えた方がいい
原因はvar(40) = 0の記述がないのが原因だったようです。
[State -2];学習スイッチリセット
type = VarRangeSet
trigger1 = stateno = 191;イントロでリセット
trigger2 = RoundsExisted = 0
trigger2 = TeamMode = Turns
trigger2 = RoundNo > 0
trigger3 = Enemy,RoundsExisted = 0
trigger3 = TeamMode = Turns
value = 0
first = 30
last = 49
の記述追加で立ち中段が滅多に通らなくなりました。
で、次は攻撃失敗の記憶に入ったのですが、もしかしてMoveReversed って当身取られた攻撃の記録に使えなかったりします?
trigger1= MoveReversed=1
trigger1 = stateno = 210
でも
trigger1= MoveReversed=1
trigger1 = prevstateno = 210
でもvaraddが機能していません。-2だから相手にステート奪われても記憶されるはずなんですが?
ReversaldefのP2StateNoでステート移動させられた場合は
移動先のステートにMoveHitPersist=1がついてない限り
MoveReversedを感知する間もなくステート移動とともにリセットされる
MBのシールドみたいにステート奪わないReversaldefなら感知できるんじゃないかな
-2でMoveReversedを感知するためにはReversaldef側がステート奪うタイミングを遅らせるか
奪った先のステートにMoveHitPersist=1をつけるかのどっちかになると思う
突然失礼します。こちらの過去ログを参考にヘルパー式アーマーを作っているのですが、
うまくいきませんでした。どなたか、記述を見て頂けないでしょうか?
[Statedef 1400]
〜中略〜
[state 1400,アーマーヘルパー]
type=helper
triggerall = !ishelper
triggerall = !numhelper(1400)
trigger1 = time = 0
stateno = 1405
name = "komanage_armor"
id = 1405
pos = 0,0
postype = p1
ownpal = 1
keyctrl = 0
ignorehitpause = 1
pausemovetime = 999999
supermovetime = 999999
;ヘルパーアーマー時無敵
[state 1400, 無敵]
type = nothitby
triggerall = !ishelper
triggerall = numhelper(1405)
trigger1= time = 0
value = ,NA,SA,NP,NT
time = 2
ignorehitpause=1
[state 1400, 10分の1食らう]
type = lifeadd
triggerall = !ishelper
triggerall = numhelper(1405)
trigger1 = helper(1405),gethitvar(damage)
value = -ceil(Helper(1405),GetHitVar(damage)*0.1)
absolute = 1
ignorehitpause = 1
[State 1400, 画像の色]
type = PalFX
triggerall = numhelper(1405)
trigger1 = helper(1405),gethitvar(damage)
time = 14
add = 20,150,70
sinadd = 64,32,5,3 ;振幅赤,振幅緑,振幅青,周期
[State 1400, 2]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1
;続きです
;アーマー---------------------------------------------------
[statedef 1405]
type=S
movetype=I
[state 1405, push]
type=playerpush
trigger1=ishelper(1405)
value=1
ignorehitpause=1
[state 1405, no shadow]
type=assertspecial
trigger1=ishelper(1405)
flag=invisible
flag2=noshadow
ignorehitpause=1
[state 1405, 本体に追従]
type=bindtoroot
trigger1=ishelper(1405)
ignorehitpause=1
[state 1405, 向きを追従]
type=turn
trigger1=ishelper(1405)
trigger1=facing!=root,facing
ignorehitpause=1
[State 1405, 判定を揃える]
type = ChangeAnim
trigger1 = SelfAnimExist(Parent,Anim)
value = Parent,Anim
elem = Parent,AnimElemNo(0)
[state 1405, 無敵]
type = nothitby
triggerall = numhelper(1405)
triggerall = ishelper(1405)
trigger1 = roundstate!=2
value = ,NA,SA,NP,NT
time = 1
ignorehitpause=1
[state 1405, 攻撃の上書き]
type=hitoverride
trigger1=ishelper(1405)
time=-1
attr=sca,NA,SA,NP,NT
slot=0
stateno=1405
ignorehitpause=1
[state 1405, 親の行動が終わったら消える]
type=destroyself
triggerall=ishelper(1405)
trigger1 = parent,stateno != 1400
どうぞ、宜しくお願いします。
どう上手くいかないのかを(ry
たぶんダメージ処理が正常に行われないってことだと思うけど
GetHitVar系列の大部分はMoveType=Hのときにしか取得できないから
[Statedef 1405]のところをMoveType=Hにしといて、ダメージ処理が済んだら
Trigger1=!GetHitVar(Damage)あたりでStateTypeSetのMoveType=Iにすればいけるかと
アーマー殺しで痛手を負わないようにするならもう一工夫必要だけど
>856
>どううまくいかないのか
すみません、言葉足らずでした。ダメージも入らないんですが、その前にアーマーとして機能していないんです。
普通に食らいモーションを取って、動作が中断してしまいます。デバッグ画面を見たら1405ステートに行かずに5000番台に飛んでいました。
ヘルパーの使い方をよくわかっていないんですが、ヘルパー用のairや食らい判定も必要なのでしょうか?
掲示板を使わせてもらいます。
今、Pinko氏製作の服部半蔵を練習で改変しているのですが、半蔵の勝利ポーズの時間を長くする方法は何かありませんか?
>>857
見落としてた
;ヘルパーアーマー時無敵
[state 1400, 無敵]
type = nothitby
triggerall = !ishelper
triggerall = numhelper(1405)
trigger1= time = 0
value = ,NA,SA,NP,NT
time = 2
ignorehitpause=1
↑これをTime=0でのみ実行してるから3F目以降に無敵が切れてそのまま本体が被弾しちゃう
Trigger1=Time=0をTrigger1=1にするか、1行丸ごと削ってTriggerAllをTrigger1に変更するか
どちらかで無敵を維持すれば大丈夫
>>858
勝利ポーズのステート(大抵のキャラは180番付近)に
[State ]
Type = AssertSpecial
Trigger1 = Time <= ○○
Flag = RoundNotOver
みたいなのがあれば○○の部分の値を増やせばいい
Time = [0,○○]でも同義
なければ自分で追加する
>859を参考に、本体は無敵関係をいじったらできました! アドバイスありがとうございます!
孫ヘルパーで大元(本体)の変数を書き換えるためにはどうすればいいのですか?
ParentVarSetを2回使って子ヘルパーに中継させればいい
孫のParentVarSetで子のVarを書き換えて
そのVarをTriggerに子がParentVarSetで親(本体)のVarを書き換える
孫のMoveTypeがAで子のMoveTypeがHかIであれば問題ないけど、
それ以外の場合は各ヘルパー出現時のメモリ状況によっては書き換えが1F遅れちゃうのがネックだけどね
1Fの誤差も許されないならバグでも持って来ないと不可能
>>863
レスありがとうございます
孫ヘルパーで本体の変数を書き換えたいときには子ヘルパーはもう消した後なんですよね…
孫ヘルパーで本体の変数を書き換える以外の方法を考えてみます
>>862
①条件がそろったときに適当なID(ここではX)でhelperかexplodを孫に実行させる。持続は2Fぐらいで良い。
②-2か-3ステートで、numhelper(X)かnumexplod(X)をトリガーにして親がvarsetを実行する。
変則的ではありますが、これでもいけると思います。
注意としては、
①のとき、numhelper(X)=0かnumexplod(X)=0を必ずtriggerallに入れること
②が常時監視なので、triggerで条件付けをしっかり行うこと
helperやexplodが最大表示数に達していると機能しない
などがあります。
>>865
レスありがとうございます
その方法を試してみます!
自分だけだと思うのですが、何かヒントを下さい
トレーニングモードではCボタン攻撃可能、
アーケードとかVSモードだとCボタン攻撃が出来なくなります
こういった場合、どこを見直せばいいんでしょうか?
ダッシュ攻撃は出せます
;立ち強
[State -1]
type = ChangeState
value = 220
triggerall = command = "c"
triggerall = command != "holddown"
trigger1 = statetype = S
trigger1 = ctrl
trigger2 = stateno = [200,210]
trigger2 = movecontact
;立ち強2
[State -1]
type = ChangeState
value = 225
triggerall = command = "c"
triggerall = command != "holddown"
trigger1 = statetype = S
trigger1 = ctrl
trigger2 = stateno = [200,220]
trigger2 = movecontact
;ダッシュ攻撃
[State -1]
type = ChangeState
value = 260
triggerall = command = "c"
triggerall = command != "holddown"
triggerall = statetype != A
trigger1 = stateno = 100 && time > 4
trigger2 = stateno = 101 && time <= 3
>>867
デバッグモードで見直してたら何故か700番代に飛んでました
もうちょっとやってみる事にします。すみませんでした
Explodのトリガーをtime%5=0にして5フレームごとに出そうと思ったのですがExplodが最初の一個しかでません
どうすればいいのでしょうか?
Trigger1 = Time%5 = 0だけでExplod実行してるなら
そのステートにいてPause等がかかっていない限り5F毎に出る筈だよ
・Time%5=0以外にトリガー設定してるかどうか
・Persistentを設定してるかどうか
・Time=5になる前にChangeState等でそのステートを離れてないか
この辺を確認されたし
>>870
もう一度確認したらPersistentが紛れ込んでいましたorz
なぜこんな初歩的なミスを…
ありがとうございました!
特定の技で相手キャラを倒したときに、相手キャラの位置にエフェクトを出したいのですがどういうトリガーにすればいいでしょうか?
「勝った時に」ではなく「倒したときに」という条件と、タッグ戦でエフェクトが出る位置で悩んでます。(postypeがp2だとp4には影響しないため)
特定の技だったらHitDefにID設定して
その技のステート内に
[State ]
Type = Explod
Trigger1 = Enemy(0),GetHitVar(ChainID) = ○○
Trigger1 = Enemy(0),Alive = 0
Anim = △△
PosType = Left
Pos = (Enemy(0),ScreenPos x),(Enemy(0),ScreenPos y)
IgnoreHitPause = 1
Persistent = 0
[State ]
Type = Explod
Trigger1 = Enemy(0),NumPartner
Trigger1 = Enemy(1),GetHitVar(ChainID) = ○○
Trigger1 = Enemy(1),Alive = 0
Anim = △△
PosType = Left
Pos = (Enemy(1),ScreenPos x),(Enemy(1),ScreenPos y)
IgnoreHitPause = 1
Persistent = 0
でできるんじゃない?
ChainID設定すると都合が悪い場合はFall.EnvShake.Phaseあたりでも代用可
>>873
慣れない記述が多くて解読するのに結構時間かかりましたが、その記述を入れたらできました。
自分のキャラはコンボがメインなのでFall.EnvShake.Phaseを使ったらできました。
今まではターゲットIDを使ってたのでステート奪った相手にしかできませんでした。
本当にありがとうございます。
すみません、初歩的な質問かもしれません。
相手がくらい中にヘルパーの攻撃を当てると普通に当てた時より威力が下がってしまいます。
コンボ補正はいっさいつけてないのになぜでしょう?
それともどこかCNSで見落としてる可能性があるんでしょうか
SuperPauseを使っているかどうか
相手がDefenceMulSetを使っているかどうか
Trip属性の技を当てた後の話かどうか
喰らい中か否かでダメージが変わるとしたらこの辺りが怪しい
SuperPauseつかってました。
調べたら超必殺補正というのがでてきました。こんなのしらなかったです。
ありがとうございました。
ReversalDefってHitOverRideみたいに複数使い分けることってできませんか?
相手のステートを奪いつつ、相手の攻撃の種類によって自分のアニメを変えたいのですが上手くいきません。
Helper重ねてReversalDef分担させるか、EnemyNear,HitDefAttrを使って条件分岐させるか
前者はヘルパー最大数に達していなければ確実、後者は相手がタッグ等でなければ大体おk
HitDefAttrを数値に変換してEnemy(0)とEnemy(1)を個別にVar格納すればタッグでも滅多に不都合はないと思う
続けてすみません、ヘルパーがReversalDef成功したときに本体のステート変更ってできるんですか?
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板