レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。
製作お助け掲示板
製作で困ったことがあれば
質問をどうぞ
どんな初歩的な質問でも
キャラ製作の先人達がやさしくお答えいたします。
ただし教えてくれた内容が間違っていても怒らないように。
だれにでも間違いはあります。
ココで得た知識を吸収し、教える側に回れるように精進しましょう。
また
先人達も知識がさび付かないように、理解をより深めるために
お互いに知識を出し合い、高め合いましょう。
>668
成功しました、ありがとうございます。
多段ヒットするレーザーを作っていますが、ヒットするのは一撃だけで多段ヒットしません…。ヘルパーを使用しています。下記の書き方をどう修正すれば良いでしょうか?
[Statedef 2000]
type = A
movetype = A
physics = N
velset = 0,0
anim = 8250
sprpriority = 5
[State 2000, Assert]
type = AssertSpecial
trigger1 = 1
flag = noshadow
ignorehitpause = 1
[State 2000, 1]
type = NotHitBy
trigger1 = Time >= 0
value = SCA, NA, SA, HA, NT, ST, HT
[State 2000, 2]
type = HitBy
trigger1 = Time >= 0
value = SCA, NP, SP, HP, AP
stateno = 2090
[State 2000, 3]
type = HitOverRide
trigger1 = Time = 0
time = -1
attr = SCA, NP, SP, HP
slot = 1
stateno = 2090
[State 2000, 4]
type = ChangeState
trigger1 = MoveHit = 1
trigger2 = MoveGuarded = 1
value = 2090
[State 2000,5]
type = changestate
trigger1 = time = 30
value = 2090
[State 2000, HitDef]
type = Hitdef
Trigger1 = time = 1
Trigger2 = time = 12
Trigger3 = time = 15
attr = S, SP
damage = 26,10
getpower = 30,10
givepower = 30,10
animtype = Hard
(以下略)
trigger1 = MoveHit = 1では一段目がヒットして1フレーム後に
[State 2000, 4]のChangeStateが作動しているので
[State 2000, 4]
type = ChangeState
trigger1 = MoveHit = 1
trigger2 = MoveGuarded = 1
value = 2090
のMoveHit とMoveGuardedの値を増やしてあげれば多段ヒットするはずです
State 2000,4にTriggerAll = Time > 15を追加すればいい
>673 さん
>674 さん
お答えいただいてありがとうございます。
教えていただいた方法で試しましたが、
多段にはなりませんでした…。
う〜ん、一体なにが問題なんだ…??
>> アネスコ さん
関係ない話ですが、
[State 2000, 2] の stateno = 2090
は消しておいたほうがいいです。動きがおかしくなるときがあるので。
>676 さん
ありがとうございます。消去しました。
また皆さんのおかげで多段ヒットに成功しました。
ただ、相手飛び道具を相殺できないという新たな問題が出てきました。
重ね聞きで大変申し訳ないですがどのように修正すればよいでしょうか?
飛び道具と言っても色々あるから全部が全部相殺できるわけじゃないけど
・Clsn2設定されたAnim(透過フラグはAS0D256)を読ませたHitFlag = PのProjectileを重ねる・・・Clsn2付きProjectileを相殺
ProjPriorityを極端に高く設定しておけば大抵のClsn2付きProjectileを掻き消せる
Clsn2付きProjectileはHitDefでも消せるからこれをやる意味はあまりない
「0, 0, 0, 0, 1, , AS0D256」とすればcns側で何もしなくても完全透過で表示(つまり非表示)できる
・HitOverrideや-2のSelfState(HelperType = Player)でアーマー張ったダミーヘルパーを重ねる・・・ヒット時に消える飛び道具(Projectile/Helper問わず)を相殺
相手の攻撃がヒットしたと誤認させて相手が用意している飛び道具消去を実行させる
ヘルパーに-2ステートを実行させるには呼び出す際に「HelperType = Player」が必要
-2にある他のステコンにTriggerAll = !IsHelperを付けないと余計なステコンも実行してしまうから注意
・ReversalDefで当身を構えたヘルパーを重ねてTargetStateでDestroySelf付きのステートに無理やり飛ばす・・・当身取られる構造のHelperを問答無用で相殺
非推奨
この辺りで色々な飛び道具に対して相殺を図れる
でもまあ基本的に相殺されるかどうかは相手に任せといた方がいい
>678 さん
ありがとうございます〜 無事相殺もできましたw
ダミーヘルパーを重ねるのは全然思いつかず… orz
お答えいただいた皆さん改めてお礼申し上げます。本当にありがとうございました。
久しぶりに頼りにきました・・・
var(3)を永久防止に規定値でvarsetしてmovehitをトリガーに減算
0以下の場合hitdefを無効というstateを組もうとしたのですが
helperからの攻撃がヒットした場合設定値以上にvarが減らされてしまいます
・helperに使用しているair
1枚絵で攻撃判定1個のみ
・helperのhitdef先頭(helperのstatedefは1101)
[state 1101]
type = hitdef
trigger1 = stateno = 1101
trigger1 = movehit = 0
trigger1 = root,var(3) > 0
trigger1 = 1
・statedef -2
[state -2]
type = varadd
trigger1 = numhelper(1101) = 1
trigger1 = helper(1101),stateno = 1101
trigger1 = helper(1101),movehit = 1
var(3) = -1
persistent = 0
helperはこの1個しか出しておらず、画面表示も1hitなのですが
var(3)は-1ではなく何故か-6されます
他に重複する減算処理も無く原因が分かりません
どなたか解決策ご存知ないでしょうか?
本体hitdefはstatenoとmovehit2個でvar減らせるのに・・・ぐぬぬ
ヘルパーに実行させてるHitDefのPauseTimeの自分側が6なんじゃない?
Trigger1 = Helper(1101),HitPauseTime = 5とかを追加すれば重複減算なくなる筈
HitDefが当たった場合HitPause中はずっとMoveHit = 1でHitPause解けてから2F目に初めてMoveHit = 2になる
ヘルパーがHitPause中でも本体は普通に動けるから-2で本体がヘルパーの状態を参照すると
MoveHit=1&&HitPauseTime=5のときからMoveHit=1&&HitPauseTime=0の計6F間MoveHit=1が成立し続ける
>>681
persistent=0入れてもhitpausetime中連続処理・・・だと・・・
helper(),hitpausetime=1を追記した所解決しました
ありがとうございました
これでvar(3)に連動するexplodが出せる・・・
・statedef -2
[state -2]
type = varadd
trigger1 = numhelper(1101) = 1
trigger1 = helper(1101),stateno = 1101
trigger1 = helper(1101),movehit = 1
trigger1 = helper(1101),hitpausetime = 1
trigger2 = numhelper(1102) = 1
trigger2 = helper(1102),stateno = 1102
trigger2 = helper(1102),movehit = 1
trigger2 = helper(1102),hitpausetime = 1
trigger3 = numhelper(1103) = 1
trigger3 = helper(1103),stateno = 1103
trigger3 = helper(1103),movehit = 1
trigger3 = helper(1103),hitpausetime = 1
trigger4 = numhelper(1104) = 1
trigger4 = helper(1104),stateno = 1104
trigger4 = helper(1104),movehit = 1
trigger4 = helper(1104),hitpausetime = 1
trigger5 = numhelper(1105) = 1
trigger5 = helper(1105),stateno = 1105
trigger5 = helper(1105),movehit = 1
trigger5 = helper(1105),hitpausetime = 1
var(3) = -1
persistent = 0
常時監視ではPersistent効かないよ
あと、その方式だと複数ヘルパーが同一Fにヒットした場合1回しかカウントされないから
Type = Null
trigger1 = numhelper(1101) = 1
trigger1 = helper(1101),stateno = 1101
trigger1 = helper(1101),movehit = 1
trigger1 = helper(1101),hitpausetime = 1
Trigger1 = Var(3) := Var(3)-1
Trigger1 = 0
trigger2 = numhelper(1102) = 1
trigger2 = helper(1102),stateno = 1102
trigger2 = helper(1102),movehit = 1
trigger2 = helper(1102),hitpausetime = 1
Trigger2 = Var(3) := Var(3)-1
Trigger2 = 0
trigger3 = numhelper(1103) = 1
trigger3 = helper(1103),stateno = 1103
trigger3 = helper(1103),movehit = 1
trigger3 = helper(1103),hitpausetime = 1
Trigger3 = Var(3) := Var(3)-1
Trigger3 = 0
trigger4 = numhelper(1104) = 1
trigger4 = helper(1104),stateno = 1104
trigger4 = helper(1104),movehit = 1
trigger4 = helper(1104),hitpausetime = 1
Trigger4 = Var(3) := Var(3)-1
Trigger4 = 0
trigger5 = numhelper(1105) = 1
trigger5 = helper(1105),stateno = 1105
trigger5 = helper(1105),movehit = 1
trigger5 = helper(1105),hitpausetime = 1
Trigger5 = Var(3) := Var(3)-1
にした方が正確に勘定できる
「Trigger1 = Var(3) := Var(3)-1」がVar(3)にVar(3)-1を代入する(=Var(3)から1引く)で
「Trigger1 = 0」はTrigger2以降を読ませるためにわざとTrigger1を満たさなくするためのもの
今回はNullステコンで処理すれば気にしなくていいけど
「Trigger1 = Var(3) := Var(3)-1」はVar(3)が1のときに読み込むと「Trigger1 = 0」になるから
「Trigger1 = (Var(3) := Var(3)-1) || 1」みたいにVarの値に関わらず条件満たすようにする必要性がある場合もある
>>683
そういえば常時ですものね・・・外しておきますん
>>684
-2にそのステートを追加でいいのでしょうか?
わざわざありがとうございます・・・
追加じゃなくてnullステ自体でvarがいじれるのか・・・
triggerで判断じゃなくて処理が出来るのは知りませんでした
ありがとうございます
追加じゃなくてVarAddの代わりに使う
>>682 だとTrigger1〜Trigger5のいずれかが成立したらVar(3)から1引くけど
>>684 だとTrigger1が成立していればVar(3)から1引いて、同一FでTrigger2も成立していれば更に1引く
仮に1101〜1105の攻撃が同時にヒットしたら>>682 だと-1、>>684 だと-5
1101と1103が同時にヒットしたら>>682 だと-1、>>684 だと-2
永久防止用にヒット数を数えたいんだと思うから>>684 の方が良いんじゃないかと思って。
仕様上、複数ヘルパーの攻撃が同時にヒットし得ないならどっちでもいいけど
初歩的で申し訳ないです
イントロを組み込もうとしてやってはいるんですが、
ステートが読み込まれていないのか、ニュートラル表示から変わりません
他の方の記述とかを見たり、kfmの記述でやっても動かない
どこかで何か記述漏れとか不備があるんですかね?
airを試しに組んだので動かしたかったんですけど、どこに不備があるのかさっぱりで…
まずはCtrl+Dで左下に表示されるデバッグ情報を見てSTATE NOやACTIONIDがいくつになっているかをチェック
STATE NOが思っていたのと違うステート番号ならChangeStateの流れを5900から順に追っていく
ACTIONIDが思っていたのと違うAnim番号ならSTATE NOと同じ番号のステートでどのAnimを指定しているかを確認
>>689 さん
デバッグ情報を確認したらやはりどちらもニュートラル状態でした
ステートが認識されていない感じです
common1はいじってないので他が原因でしょうか?
思いつく限りで確認はしましたが…
記述は以下でやってます
[Statedef 190]
type = S
ctrl = 0
[State 190, ステート変更]
type = ChangeState
trigger1 = 1
value = 191
;イントロ
[Statedef 191]
type = S
ctrl = 0
anim = 190
velset = 0,0
[State 191, アニメ変更]
type = ChangeAnim
trigger1 = RoundState = 0
value = 190
[State 191, 特殊効果]
type = AssertSpecial
trigger1 = 1
flag = Intro ;イントロの状態
[State 191, ステート変更]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
それ見る限りじゃ問題無さそうだけど
自分で追加したステートに5900がないかどうか
-3や-2でChangeStateやSelfStateをしていないかどうか
-1のChangeStateにCommand系トリガーやCtrlの付け忘れがないかどうか
この辺をチェックかな
あとはCtrl+Dで左「上」に何か表示された?
Airに[Begin Action 190]が無い場合191ステート素通りして0に行くと思うから
左上のエラーメッセージも確認すると解決できる可能性もある
デバッグ画面の左上に足りないステートなどが表示されていたのでとりあえず埋め、
左上に表示は出なくなりましたが、やはりイントロが出ません
-3で使っているのは一部のSEぐらいの記述のみ、他はまだ記述していません
ここまでやってダメだと無視して他を作った方がよさそうですね
あるいはどこかでデータを上げて見てもらった方が早いんでしょうか?
しかし、こんなに難しいものだったかな…
0ステに
[State 0]
Type = DisplayToClipboard
Trigger1 = 1
Text = "%d"
Params = PrevStateNo
Persistent = 0
を追加してCtrl+Dで左下のSTATE NOの下に表示される数字を見てみて
それか5900、190以外のステートの一番上に
[State ]
Type = ChangeState
Trigger1 = 1
Value = StateNo
を追加して2500ループで落ちた際に表示されるダイアログで
何番ステートを読んでいるか確認
一応確認だけど190番アニメは数Fで終わるような短いやつじゃないよね?
暗転が明けきる前に190番アニメが終わってAnimTime = 0で0ステにChangeStateしてるせいで認知できてないだけとか
イントロは20〜30Fくらいの前置きの後に動かし始めた方が認知しやすいと思う
>0ステに
追加して確認したところ191表示でした
>それか5900、190以外のステートの一番上に
こちらでやったところ、52や11などで落ちてました
この辺りは正常に読まれていると判断します
イントロアニメは143F。1枚目に30Fおいてますが、
何らかの原因で暗転中に終わってるんですかね?
基本的な何かでミスをしているんだろうか
0ステで直前が191なら流れは正常っぽいな
191一番下のChangeStateにTrigger1 = Anim = 190を追加してもダメ?
あと、52や11で落ちたのは本来イントロが発生するタイミング?それとも操作中?
何の操作も無しに52や11を読んでたらPhysicsとかが異常ってことになるけど
common1に191ステートの下に記述を追加してもダメでした
落ちたのは操作中です。イントロが発生するタイミングではありませんでした
一度だけ確か0ステに組み込んだら始まることもなく0で終了しました
起こり得ない事なんですかねぇ。調べても出てきませんし
Common1じゃなくて自分で191用意したんじゃないの?
Common1にあるステートは各自用意したcnsに同じ番号のステートがあれば読み込まれないから
>>690 をキャラのcnsに記述したならCommon1の190や191をいくら弄っても何も変わらないよ
DLしたままのCommon1を使ってイントロ発生しないようであればデータ一式直接見た方が早いかも
今日は遅いし明日の夜(たぶん23時頃には来れると思う)にでも・・・その前に他の人が見てくれるかな?
ちょっとやってみましたが、解決は出来ませんでした。
ここのうpロダのfile954に上げました
どこがおかしいか確認をお願いします
単純な記述ミスなのか分かりません
上記の内容は色々試しましたがダメでした
common1、キャラCNSの両方とも試しました
どなたか分かるでしょうか?
ちなみに、会社から上げたので自分のPCと勝手が違うので正常に圧縮出来てるかは不明です
気になったのでDL後確認しましたら
;---------------------------------------------------------------------------
; INTRO (override this state to give character an intro)
[Statedef 191]
type = S
ctrl = 0
[State 191, 1]
type = ChangeState
trigger1 = Time = 0
value = 0
;---------------------------------
と記述でされ、イントロはすっ飛ばしてました。なので
ChangeStateの
trigger1 = Time = 0の記述を
trigger1 = AnimTime = 0 ;(アニメ終了時)に差し替えたところ
一応 airにある190番っぽい動きはしていました。
>>699 さん
うお、動いた!
これが分からなくて1週間悩んでたんですよ…
感謝申し上げます
他の方の見て同じだったから気にしなかったor頭が足りてなかったようです
blankさんにも感謝申し上げます
今帰宅
解決したのね、良かった
通りすがりさんGJ
ヘルパー呼び出しの後、ヘルパーに攻撃させるという記述を作っていますが
「ヘルパー呼び出し〜ヘルパー退場」までの間に
ヘルパー自身ではなく「本体」が攻撃を受けたらヘルパーを消滅させる命令が
どうしても上手くいきません…。
ヘルパーの命令に下記の記述を入れていましたが
どうすれば上手くいくでしょうか…。
[State 1001, HitOverride]
type = HitOverride
trigger1 = Time = 0
attr = SCA, NT, ST, HT, NA, SA, HA,NP,SP,HP
stateno = 1009
time = -1
よく分かりませんが 消滅のトリガーに
trigger1 = !IsHelper (プレイヤーがヘルパーでない時)
trigger1 = movetype = H(プレイヤーが攻撃を受けている状態)
を指定してみたら?
そのヘルパーに
Type = DestroySelf
Trigger1 = Root,MoveType = H
を実行させればいい
すでにDestroySelfあると思うからそれにトリガーを追加するだけでもいい
注意が必要なのは
本体がヘルパー①を呼んでヘルパー①がヘルパー②を呼んで
ヘルパー①がDestroySelfした後だとヘルパー②からRootを参照することができない
だから本体情報を参照したいヘルパーは基本的に本体自ら呼び出した方がいい
>703 さん
>704 さん
ありがとうございます
本体ダメージでヘルパーの消去が出来ました
これで先に進めます
本当に助かりました
どうも、鰐といいます。
今回は絵のほうを一休みして内部処理(CNS記述)のほうに手をつけていたのですが…
実はカウンターヒットのダメージアップを作っていてちょっと問題が。
(記述)
;カウンターヒット補正
[state -2, カウンターヒット認識]
type = varset
trigger1 = P2movetype = A && movetype = A
var(11) = 1
[state -2, カウンターヒット認識リセット]
type = varset
trigger1 = ctrl
trigger2 = enemynear,ctrl
trigger3 = P2movetype != A
trigger4 = var(10) != 0
var(11) = 0
[state -2, カウンターヒット補正値]
type = varset
trigger1 = var(11) = 1
fvar(2) = 1.2
[state -2, カウンターヒット補正値リセット]
type = varset
triggerall = fvar(2) != 1
trigger1 = var(11) = 0
fvar(2) = 1
…とまあこのように簡易ではありますが
とりあえずP2MoveType = A 且つ (自分の)MoveType = A の時に変数をセットして
fvar(2)の値を技のダメージに掛けるようにしてみたんですが、
問題はHitdefのダメージは「ヒットした瞬間」じゃなく「発生した瞬間」で決定しているらしいことで、
このやり方だと正確には「相手が攻撃中にヒットした場合にダメージがアップ」にはならないわけです。
(正確には「相手が攻撃中に発生したこちらの攻撃のダメージがアップする」ので
相手の攻撃中に出た攻撃判定が相手の攻撃終了後に持続で命中してもカウンターダメージになってしまう)
一応自分の攻撃のHitdefを全部 trigger != movecontact を条件にして1フレームごとに再発生するように処理すれば
ヒットするフレームで相手が攻撃中か確認できるんですが…
この辺、皆さんどんな感じなんでしょう??
"McCready & Loganir"氏作のサンドマンみたいな感じで
「棒立ちの人間が砂になって崩れ落ちる」アニメを作りたいんですが
画像加工ソフトで、こういったものを作れるor補助できるものってありますか?
--------------------------------------------------------------------
--------------------------------------------------------------------
>>鰐さん
私も大体そんな感じでHitDefのトリガーで1Fごとに調整する処理にしてます(私はAnimElemTimeトリガー)
…他に方法知らないってのもありますけど
常時監視にvar依存のAttackMulSet置いておけば根性値とか補正も変数で一括管理できるってのは魅力でして。
それと、こっちはゲームの仕様にもよるんですが
私は攻撃判定が出なくなった段階でStateTypeSet使ってMoveType=Iに戻す処理を差し込んでます。
なんでかってーと、大概カウンターヒットはMoveType=Aで判断するので
自分が攻撃終えてフォロースルーの状態や残心してる時に攻撃を喰らってもカウンター判定になるのが困るからです。
リアルでは重心さえ(前に)来てれば振り始めでも振り終わりでも、いわゆるカウンターになっちゃうのかもですけど
>>706
変動する補正をリアルタイムで適用する場合HitDef上書きし続けるのが定石かな
Trigger1 = !MoveContactだと当身取られた後も攻撃出し続けちゃうから
Trigger1 = !MoveContact && !MoveReversedの方がいいと思うけど
どうもありがとうございます。
とりあえず
[State 200, 攻撃判定]
type = HitDef
trigger1 = AnimElemtime(2) = 0
trigger2 = animelemtime(2) = 1 && !movecontact && !movereversed
trigger3 = animelemtime(2) = 2 && !movecontact && !movereversed
・
・
attr = S,NA
damage = ceil(27 * (fvar(1)*fvar(2)*fvar(3)*fvar(4))), 0
guardflag = HL
hitflag = HLAF
・
・
・
…みたいな感じで攻撃判定持続フレーム数分
triggerxを追加すればよいわけですね。
というか逆に言うとこうしないと正確にカウンター判定できないのか…
でもあんまりhitdefのtriggerにこういう記述してるキャラは見ない気もする(笑)。
処理が重くなったりするんでしょうかね。
>>AZUMA殿
あ、あとアドバイスの通りAtateTypeSetでhitdef消失後の
statetypeを変える処理も入れました。
確かにこれもやっとかないと戻りにカウンター取られる(取ってしまう)ことになりますね(笑)。
おかげで何とかカウンターヒットとコンボ補正、(逆)根性値の導入は出来そうです。
有難うございました。
いや
Trigger1 = !MoveContact && !MoveReversed
だけでいい
それか
Trigger1 = (AnimElemNo(0)=[2,x]) && !MoveContact && !MoveReversed
という感じで判定ある部分だけに限定するか
なんとおっ
一度ステート内で攻撃判定出てからじゃないと機能しないのかと(何故か)思ってましたわ>movecontact系
しかしAnimElemNo( )とは…こんな時に使うのか。
多段技の場合は
[state 200, 攻撃判定初弾]
type = hitdef
trigger1 = animelemno(0) = 3 && !movecontact && !movereversed
(以下略)
[state 200, 攻撃判定2段目]
type = hitdef
trigger1 = animelemtime(4) = 0
trigger2 = (animelemtime(4) = [1,5]) && !movecontact && !movereversed
(以下略)
…で二段目持続部分の上書き発生してるんですかね??
トレモでやると戻りヒット時にはノーマルヒットのダメージに戻ってくれてはいるみたいなのですが
手動ポーズとかのぎこちない確認なんでどうも自信が…
初段ヒット〜二段目発生の間にMoveHitReset使ってるなら
二段目の持続も上書きし続けてる筈だよ
逆に言うとMoveHitReset使ってないなら初段がヒットした場合に上書きできない
無敵突進技を作っているのですが
type = NotHitBy
value = SCA
trigger1 = 1 と記述して
とある当身技を喰らうと、無敵時間中であろうが問答無用で投げられます
この場合 SCAの完全無敵は意味が無いのかな?
Reversaldefは
・Clsn1同士の接触
・Reversal.Attrと相手のHitdefのAttrの一致
が満たされれば成立するからNotHitBy使ってても防げない
Hitdef側のMoveType=IでもHitFlag=D-でもお構いなしに成立する
大抵のReversaldefにはP2StateNo付いてるだろうし
NotHitByと一緒にHitOverrideを使わせとけば基本的には大丈夫
HitdefのAttrとTriggerに工夫する手法もあるけど神キャラなどを相手にするんでなければ不要
ありがとうございました。
当身最強ですねw
HitOverrideを併用する事にします。
はじめまして
この度初めてキャラ製作を始めたものです
それで現在製作中のキャラに特殊なシステムを組み込みたいのですが、特殊過ぎて自分でもどのように記述すればいいのか分かりません…
そのシステムというのが
・試合開始から12秒毎に使用可能
・使用可能時にボタンを押すと攻撃力アップ
・使用不能時にボタンを押すと隙を晒す
・全ての行動からキャンセル可能
というもので、もし可能ならば
・12秒毎から遅れると攻撃力アップの倍率がその分下がる
・喰らい中ならば喰らい抜け効果
というのも付けたいです
複雑すぎて説明がしづらく、伝わっていない部分が多いと思います
質問があれば答えますので、どなたかこのシステムのCNS記述のし方を教えてください
おこがましいのは重々承知していますが、どうかよろしくお願いします
カットインとかの時間停止中もカウントを続けるかどうかにもよるけど
例えば
[State -2]
Type = VarSet
Trigger1 = RoundState < 2
V = 12
Value = 720
[State -2]
Type = VarAdd
Trigger1 = RoundState = 2
Trigger1 = StateNo != 1200
V = 12
Value = -1
[State -2]
Type = AttackMulSet
Trigger1 = FVar(12) > 1
Value = FVar(12)
を-2に置いて
[State -1]
Type = ChangeState
Trigger1 = Command = "ボタン"
Value = 1200+(Var(12)>0)
を-1に置いて
1200番を攻撃力アップステート、1201番を隙ステートにする
で、1200番では
[State 1200]
Type = VarSet
Trigger1 = Time = 0;お好みのタイミングに変更
Trigger1 = Var(12) > -720;適宜調整
FV = 12
Value = (FVar(12)=0)+FVar(12)+0.5+(0.5*Var(12)/720);適宜調整
[State 1200]
Type = VarSet
Trigger1 = Time = 0;お好みのタイミングに変更
V = 12
Value = 720
[State 1200]
Type = ChangeState
Trigger1 = AnimTime = 0;適宜変更
Value = 0
みたいにする
Var(12)は720から毎F1ずつ減っていき、0を下回った時点で12秒経過とみなす
FVar(12)はAttackMulSetで攻撃力を上げる(乗算する)値
初期値が0だから「Value = (FVar(12)=0)+・・・」と初回だけ1を余分に足してあげる
上の例だと使う度に初期攻撃力の50%上昇、12秒以上遅れて発動すると恩恵なしって感じ
ありがとうございます!
よく理解していなかったので、改めて勉強になりました
ハイジャンプを作りたいんですが、どのような記述をすればいいんでしょうか?
40(ジャンプ準備)→50(ジャンプ上昇&下降)→52(着地)が通常のジャンプ動作だから
40のコピペで41(未使用番号であれば何番でもおk)を追加して、下から三番目にあるVelSetのyの値を変えるだけでいい
あとはcmdにハイジャンプ用のコマンド追加して
[State -1]
Type = ChangeState
TriggerAll = Command = "highjump"
Trigger1 = StateType != A
Trigger1 = Ctrl
Trigger2 = StateNo = 40
Value = 41
Ctrl = 0
あたりでステート移行させればおk
今作ってる技(空中竜巻旋風脚みたいな技)のステートをどういう記述にすればいいかわかりません
ttp://www42.tok2.com/home/mugendteita/Suploda/uploda/src/file1000.png
(上昇時に発動すると空中竜巻のように高く飛ぶ)
↑こういうふうにしたいんですが
veladdだけを使うと空中で一度止まってから浮く感じになってしまいます
何を使えばいいんでしょうか?
Physics = Aになってるのかな?
Aだと自動で重力かかるからNにした上でVelAddした方が良い
Nにした場合は着地の内部処理(ChangeStateのValue = 52)が働かなくなるから
低空で「下降中に発動」した場合にPos y >= 0とVel y > 0でChangeState用意する必要があるけど
Physics = Nにしても上昇中に発動すると一度止まってから動き出します・・・
「上昇中に発動」と「下降中に発動」でステート分けたほうがいいのかな
もしかして
[Statedef ****]
Type = A
VelSet = 0,0
とかになってない?
ここにVelSetがあると、そのステート読み込んだ瞬間に速度上書きされるよ
そうでないなら記述コピペしてもらった方が解決早いかも
2行目訂正
「上昇中に発動したとき」と「下降中に発動したとき」でステートを分けてveladdの数値を別にすればいいのかな
あ!できました!
VelSet = 0,0消したらできました!ありがとうございます!
突進攻撃兼突進当身技を作ろうとしたのですがReversalDefを書き込んだらhitidefが昨日しなくなりました。もしかしてこの二つは同時に機能しないのでしょうか?
CNSは
[Statedef 3300];猫の足音
type = S
movetype= A
physics = S
juggle = 0
poweradd= 0
ctrl = 0
velset = 0,0
anim = 3300
sprpriority = 2
[State 3300, 超必殺技暗転時間停止]
type = SuperPause
trigger1 = time = 0
anim = 100 ;超必エフェクトのアクションナンバー。通常は「fightfx.air」のアニメを使うが、
;左に「s」を付ければ「自分のairファイル」のアクションナンバーが使える。
pos = 25, -57 ;超必エフェクトの座標(X軸,Y軸)
sound = 20, 0 ;超必発動サウンド。通常は「common.snd」の音を使うが、
;左に「s」を付ければ「自分のsndファイル」の音が使える。
poweradd = -2000 ;パワーゲージ増減量
time = 33 ;ポーズする時間(フレーム)
movetime = 0 ;ポーズ中に動ける時間。timeよりも多いとバグる(デフォルトは0)
;darken = 1 ;ポーズ中画面を暗転するか否か(0=しない・1=する)
;暗転する色は「ownpal」の有無により「Explod」や「ヘルパー」にも影響するので注意。
p2defmul = 1.0 ;直前のステートを「SuperPauseを設置したステート」でキャンセルした場合、
;『相手に一時的に与える防御力乗算値(float)』。
;デフォルトは0。(相手の防御力が上がり、ダメージ量に下方修正が掛かる)
;1にすれば『ダメージ補正が掛からなくなる』事になる。
;相手が食らい状態以外(相手のMoveTypeが「H」以外)になれば解除される。
unhittable = 1 ;ポーズ中自分を無敵状態にするか否か(0=しない・1=する)
;デフォルトは1。
[State すり抜け]
Type = PlayerPush
Trigger1 = time > 3
Value = 0
[State 3300, 物理的なキャラの幅]
type = Width
trigger1 = (AnimElemTime (2) >= 0)
value = 15,0 ;この場合キャラの幅を一時的に前に15ピクセル伸ばす事になる。
;値の意味は「前方のピクセル増減量,後方のピクセル増減量」
[State 2];速度を与える
type = Velset
trigger1 = time = 3
x = 40
y = 0
[State 3300]
type = varset
trigger1 = movehit = 1
var(13) = 1
[State 減速]
Type = VelAdd
Trigger1 = time < 30
Trigger1 = Vel X > 0
X = -0.5
続きです。
[State 3300, ヒット定義]
type = HitDef
trigger1 = (AnimElemTime (2) >= 0)
attr = S, HA
damage = 200, 20
animtype = Hard
guardflag = L
hitflag = MAF
getpower = 0,0
priority = 7, Hit
pausetime = 0, 0
sparkno = 0
sparkxy = -10, -76
hitsound = 5, 0
guardsound = 6, 0
ground.type = low
ground.slidetime = 10
ground.hittime = 10
ground.velocity = -1,0
air.type = High
air.velocity = -1.-5
air.fall = 1
fall.recover = 0
air.juggle = 1
p2stateno = 3111
[State 1105]
type = ReversalDef
trigger1 = (AnimElemTime (2) >= 0)
reversal.attr = SC,NA,NT
pausetime = 10,10
p1stateno = 1107
p2stateno = 1109
[State 2];速度を与える
type = Velset
trigger1 = movehit = 6
x = 0
y = 0
[State 3100, ステート変更]
type = ChangeState
trigger1 = movehit = 7
value = 3101
ctrl = 0
[State 3300];停止stateに移行
type = ChangeState
trigger1 = time > 11
trigger1 = Vel x < 7
trigger1 = var(13) = 0
value = 1106
ReversalDefとHitDefはお互いに上書きし合う関係だから
同一フレームで両者が機能することはない
後に読み込んだ方が機能するから同じステート内なら下に記述した方が、
常時監視と個別ステートなら個別ステートに記述した方がそれぞれ機能する
どうしても両方機能させたいなら片方をヘルパーに肩代わりさせるしかない
上の方から降りてくるイントロを作りたいんですが、どの様な記述をすればいいんでしょうか?
velsetやveladdを使っても奇妙な動きをしてしまいます。
[Statedef 190]のパラメータとしてPhysics = Nを付けるか
StateTypeSetステコンでPhysics = Nに設定すれば
内部処理の重力・摩擦がかからないからVelSetやVelAddで設定した通りの動きになる
有翼キャラとかがゆっくり下降してくる感じなら
最初にVelSetしてPos y >= 0になった時点でVelSetとPosSetのy = 0で着地
あとはScreenBoundステコンのMoveCamera = 0,0でカメラが自キャラを追わないようにしたり
PlayerPushステコン使ったりClsn2に何も設定しないことで相手との押し戻しを避けたりして
動きの妨げになる原因を減らすことも割と重要
>729
>どうしても両方機能させたいなら片方をヘルパーに肩代わりさせるしかない
なんとか出来上がりました。アドバイスありがとうございます。(なんかまだ不具合でそうだけど)
流れとしてはヘルパーと本体攻撃判定をだす→ヘルパーに攻撃当たったら相手を木偶ステート→同時に本体に本体に変数返してそれをトリガーに反撃ステートへ
という流れになっています。
小ポトレ(9000,0)を登録したのですが、
キャラセレクトでは正しく表示されますが
戦闘中は黒く潰されてしまいます
(※ただ透過色に設定している箇所は正しく抜けています)
これはどうすれば正しく表示されるでしょうか…?
パレット共有に失敗してるかもしれません
9000,0は本体色変更(palfx)と連動するため強制的に本体とパレット共有されます
なので本体と同じパレット構成にすれば大丈夫かと
具体的には0,0をbmpで保存してペイント等で開き、(win7のペイントはクリップボードの画像を強制で24bit変換する欠陥品なので×)
9000,0を貼り付けて別名保存したあとsffの本体画像の隣に再登録
です
>Peke様
お答えいただきありがとうございました。
しかし…現状うまくいっておりません…。
本体パレットと小ポトレのカラーを共有化させ、
登録スプライトの順番を
「小ポトレ」「大」「0,0」で登録しましたがやはりうまくいかず…
またFighter Factory Ultimateというツールを使っていますが、
こちらでbmp(またはpng)の画像を開くと「黒く」色化けされて表示されます。
確信はありませんが、おそらくここが修正されればうまくいく気もするのですが…
良い方法がございましたらお教えください…
対戦画面上の小ポトレはact読み込むから
actで色指定してないパレット番号を小ポトレの画像で使ってるとシルエット状になる
小ポトレ画像からact作ってそれをdefで指定すればいける筈
あと、大ポトレは一般的にパレット共有しないから
小ポトレと0,0の間に挟むのはよろしくない
申し訳ない
自分はSAEしか分かりませぬ…
本体とパレット合わせても化けるなら
小ポトレが本体スプライトの共有範囲外に並んでいるのが原因です
SAEならすぐ直せます
SAE起動してsffを開き、小ウィンドウの小ポトレのコマを切り取って本体共有範囲内に挿入(本体スプライト上書き注意)
もしくは小ポトレのbmpを共有範囲内に共有チェックボックスonにして番号9000,0で挿入すればいけるかと
座標は小ポトレの左上がメインウィンドウの十字線中央です
おっと失礼
小ポトレのみ強制共有なのでsff側の共有設定はどっちでもいいんでした
うちの子のsffだとこんな具合↓
ttp://www42.tok2.com/home/mugendteita/Suploda/uploda/src/file1005.PNG
大ポトレは一番下側の非共有コマ部分に独自パレットで入ってます
アドバイスしていただいた皆様ありがとうございます。
またpeke様は丁寧な図解までしていただいて真にありがとうございます。
私のほうでもツールを変えながら皆さんのご意見を参考に設定してみようと思います。
小ポトレや SAEなどのツールの話題が出たところで・・・
ちゃりこん(charicon)というソフトがあり
キャラのフォルダーに小ポトレのアイコンを作成してくれるのですが
SAE以外で作成したSFFからは、アイコンが作成出来ません。
上記の話題に上がった ポトレの差し込む位置や パレット共有などは
各ソフトで、"クセ"が出ますので注意されたし。
小ポトレ直りました〜!!!!!!!!!
皆様にはもう足を向けて寝ることが出来ません…。
本当に本当にありがとうございました!!
どうも、ネコマタを作ろうとしている者です。
ひとまず必須をMUGEN上で見とこうと思い、地球氏のKFMのスプライト入れ替えた
のですが、何故かしゃがみがMUGEN上でほんの僅かに前後にガクガク動きます。
現物もニコろだに上げときます。3406のpass「女神転生」です。
教えていただけると助かります。
11-0、11-1、11-2、11-3のx軸がsffの時点で合ってないよ
>blakさん
SAEでairを見る限りではずれてないよう見えるのですがそれとはまた別ということでしょうか?
sffの時点で揃ってないといけないということですか?
ひとまずSAE以外で試してみます。
ありがとうございました。
defで指定してるnekomata.airの方をSAEに読ませてるよね?
kfm.airも一緒に入ってたけど・・・
■Sprite Database
ttp://sdb.drshnaps.com/
■The Spriters Resource
ttp://spriters-resource.com/
■RetroGameZone
ttp://retrogamezone.co.uk/
■GSA−GameSpriteArchives
ttp://www.gsarchives.net/index2.php
■deviantART: where ART meets application!
ttp://www.deviantart.com/
■Pixel Warehouse
ttp://pixel.garoux.net/
■Streets of Rage Online
ttp://www.streetsofrage.net/
■Sprites INC
ttp://www.sprites-inc.co.uk/
途中送信すいません汗
キャラにヘルパーつけようと思うんですけど、サイズは揃えた方がいいんですかね?
ヘルパーだけ0.25倍表示とかできるといいのになー
Type = Helperのパラメータに
Size.xScale = .25
Size.yScale = .25
付ければおk
>>749
すいません、ありがとうございます!
何故気付かなかったし…
イントロで、タオカカよろしくドアップカメラ目線→画面外から走ってくるというのにしようと思ったのですがなかなか上手くいきません
現状CNSは
;イントロ(試合開始前の登場演出アクション)
[Statedef 191]
type = S
ctrl = 0
anim = 190
velset = 0,0
[state 191]
type = varset
trigger1 = time = 0
fvar(3) = BackEdgeBodyDist
[state 191]
type = posset
trigger1 = time = 190
x = -80
[state 191];加速
type = veladd
trigger1 = time = 190
x = 15
[state 191];停止
type = velset
trigger1 = BackEdgeBodyDist = fvar(3)
x = 0
[State 191, 特殊効果];試合が開始するまではこのコントローラを使おう(※2)
type = AssertSpecial
trigger1 = 1
flag = Intro ;イントロの状態
[State 191, ステート変更];アニメーションが終われば「通常立ち」のステートに変更する
type = ChangeState
trigger1 = BackEdgeBodyDist = fvar(3)
trigger1 = time > 200
value = 0
という風になっています。どなたかアドバイスお願いいたします。
どう上手くいってないのか分からないことには…
PhysicsがSになってて摩擦が働いてるせいで勝手に減速してるとか?
それならStateDefのとこかStateTypeSetでPhysics = Nにすれば直る
あと、VelSetとChangeStateの条件が厳し過ぎるから
Trigger1 = BackEdgeBodyDist = FVar(3)じゃなくてTrigger1 = BackEdgeBodyDist-FVar(3) = [-7.8,7.8]
とかにしないと滅多に成立しないと思う
7.8ずつ幅を持たせてるのは速度が15だから7.5ずつに少しゆとりをつけておく感じで
さらに、ScreenBoundで画面外に出られるように設定しないと駄目だと思う
190番Animの190F目まではドアップカメラ目線のデカイ画像で191F目以降は走りモーションが登録されてるんだよね?
それよりは
[State ]
Type = ChangeAnim
Trigger1 = Time = 190
Value = 100;走りモーション
[State ]
Type = PosSet
Trigger1 = Anim = 100
x = -80;Pos xは画面中央基準だから-80だと画面内じゃないか?
Persistent = 0
[State ]
Type = VelSet
Trigger1 = Anim = 100
x = 15
Persistent = 0
として
ChangeStateの2番目のTrigger1をTime>200じゃなくてAnim=100にした方が管理が楽だよ
>752
>どう上手くいってないのか分からないことには…
失礼しました。何故か停止してくれのが問題でした。
で、VelSetとChangeStateの条件をご指摘の通り変更したのですが、何故か2p側だととまるのに1p側だち走り続けるという状態に??
[Statedef 191]
type = S
ctrl = 0
anim = 190
velset = 0,0
[state 191]
type = varset
trigger1 = time = 0
fvar(3) = BackEdgeBodyDist
[State ]
Type = ChangeAnim
Trigger1 = Time = 190
Value = 1230
[state ]
type = ScreenBound
trigger1 = 1
value = 0
movecamera = 0,0
[state 191]
type = posset
trigger1 = anim = 1230
trigger1 = TeamSide = 2
x = 300
Persistent = 0
[state 191]
type = posset
trigger1 = anim = 1230
trigger1 = TeamSide = 1
x = -300
Persistent = 0
[state 191];加速
type = veladd
trigger1 = anim = 1230
x = 8
Persistent = 0
[state 191];停止
type = velset
trigger1 = backedgebodydist - fvar(3) = [-7.8,7.8]
x = 0
[State 191, 特殊効果];試合が開始するまではこのコントローラを使おう(※2)
type = AssertSpecial
trigger1 = 1
flag = Intro ;イントロの状態
[State 191, ステート変更];アニメーションが終われば「通常立ち」のステートに変更する
type = ChangeState
trigger1 = backedgebodydist - fvar(3) = [-7.8,7.8]
trigger1 = anim = 1230
value = 0
backedgebodydistって1p側と2p側だと違う値を返すのでしょうか?
TurnとかとかFacingとかFaceP2関係は使ってない?
Time = 0で記憶した「BackEdge」と、停止するか否かを判断するときの「BackEdge」が同じ側じゃないと計算狂うよ
BackEdgeBodyDistは「その時点で背を向けてる側のステージ端から自分までの距離」だからね
鬱姫のイントロ移植してもいいのよ?
自分のはのりもののイントロを参考に開始と同時に本体透明にしてexplodでやりくりしてます
>peke2さん
>鬱姫のイントロ移植してもいいのよ?
お言葉に甘えさせていただきました。これでα版公開できます。
現在突進技を作っていますが、
連続ヒットとして設定するとどうしても2発目以降がガードできず
実質ガード不可のようになってしまいます。
これを2発目以降もガードできるようにするにはどうしたらよいでしょうか?
[State 1320,HitDef]
type = HitDef
Trigger1 = time = 2
Trigger2 = time = 4
Trigger3 = time = 6
Trigger4 = time = 8
Trigger5 = time = 10
attr = S, HA
animtype = Hard
air.animtype = UP
damage = 30
getpower = 0
givepower = 35, 35
guardflag = M
hitflag = MAF
pausetime = 5,5
sparkno = S8000
guard.sparkno = 0
sparkxy = 0, -30
hitsound = s1,30
guardsound = s4,0
ground.type = Low
ground.slidetime = 20
ground.hittime = 20
ground.velocity = -8
air.velocity = -4.5,-7
yaccel = .5
air.fall = 1
fall.recover = 0
ground.cornerpush.veloff = 0
air.cornerpush.veloff = 0
envshake.time = 10
envshake.ampl = 2
forcestand = 1
アニメーションって下書きを作るのと
初めから一気に書くの、どちらが効率が良いのでしょうか?
今一気に書いているのですが、どうも先が見えず、
かといって下書きを作るのも手間が・・・・。
製作というかわかりませんが自分のキャラをみなぎってきたトーナメントみたいにみなぎらせたいのですが、
huwahuwa氏のみなぎらせ方の説明書を見てもあまりわかりづらいので誰か詳しく教えていただけないでしょうか?
(ちなみにみなぎらせたいキャラはシエルとスバルです)
>>757
ステ番とAttrから察するに超必だと思うけど、SuperPauseか何か使ってる?
止められてる最中に2発以上の攻撃を受けると
1発目で150に飛ばされた後、2発目を150のTime=0で受けることになって
ガード処理が実行できずに5000に飛ばされる(StateType=Sの場合)
だから暗転中に2段以上ヒットさせるような技は実質ガー不
あまり良い手ではないけど、どうしても暗転中に攻撃させたい場合は
相手のStateNoやCommandとCtrlでガード中か否かを判定して、
ガード中ならP2StateNo=150+2*(P2StateType=C)+4*(P2StateType=A)で
ガードステートに強制移動させるという方法がある
Pause系統使ってないのにガー不になるんだったら>>757 の記述だけじゃ原因分からん
>>759
詳細知らんけどwikiで大会ルール見た感じとしては
StateDef -1にあるChangeStateのTrigger全部コメントアウトして
Trigger1 = Random = 1とかで適当に技発動させりゃいいんじゃないの?
>>760 さん
ありがとうございます。
無事解決できました
尚、ご指摘のとおりSuperPauseを使用していました
初歩的ですみませんが
キャラのCNSの内容を更新するためにはわざわざMUGENを再起動させるしかないんでしょうか?
再起動させなくてもCNSが更新されてるっぽい内容の動画を見つけたんですが本当にできるんでしょうか。
>>765
試合中であればShift+F4で更新したものを読み込めます。再起動扱いになるはず。
知らなかったです。今までずっと再起動してました。ありがとう!
763>>そんな方法があったとは・・・。
ところでkanajlo氏の改造新MUGENのように新MUGENのmugen.exeを改造するにはどうすればいいか知っている人はいませんか?
逆アセの知識持ってないときついと思うよ
簡単な改造だったらバイナリエディタで根気強く試行錯誤すればできるかもしれんが
改造してる本人に聞くか、プログラミングを勉強した方がここで聞くより確実かと
ぐぬぬ
2pカラーで数コマだけ色が戻っちゃうのは何でなんだぜ
パレットの共有設定がなされていないから
SFFを適当な編集ソフトで開いて当該画像のパレット共有設定をONにすればおk
ちょっと自キャラのこれからの制作方針にかかわってくる問題にぶつかったので質問させて頂きます
キャラ本体の画像の他に常時上から透過をかけた画像を表示させたいのですが可能でしょうか?
>>768
すいません、ありがとうございます!
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板