レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。
製作お助け掲示板
製作で困ったことがあれば
質問をどうぞ
どんな初歩的な質問でも
キャラ製作の先人達がやさしくお答えいたします。
ただし教えてくれた内容が間違っていても怒らないように。
だれにでも間違いはあります。
ココで得た知識を吸収し、教える側に回れるように精進しましょう。
また
先人達も知識がさび付かないように、理解をより深めるために
お互いに知識を出し合い、高め合いましょう。
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成功したときに本体のステート変更ってできるんですか?
ヘルパーがReversalDef成功したかどうかはHelper(***),NumTargetで本体側から判別可能だから
それを条件にChangeStateすればおk
そのヘルパーにHitDef実行させている場合はタゲの有無だけじゃ判別できないけど
特定の当身技の補佐として一時的に召喚するヘルパーであれば大丈夫な筈
Targetって自分が攻撃当てた時につけるばんごうでしたよね
要するに当て身成功したときにターゲット番号振って、その番号で判別するんですか?
ちょっと記述の書き方悩んでます。すいません・・・
NumTargetってターゲット奪った相手のこともいうんですね!解決しました
丁寧にありがとうございました。
ガンマレイのように画面端まで届く攻撃判定を持った、
複数回攻撃が当たる技について質問なんですが・・・。
判定は出ていても攻撃が5ヒットを超えた段階で、相手はダウンする
(攻撃が当たらなくなる)ように設定していたんですが、ごく稀に
ヒット制限や想定している攻撃力・補正を逸脱してダメージを与えることが
あります。どなたか、原因に見当がつく方がいらっしゃいましたら、教えて
頂けないでしょうか?
問題の技のhitdef記述は以下の通りです。
[State 3000,判定1]
type = HitDef
triggerall = HitCount < 5
trigger1 = animelem = 4
trigger2 = animelem = 5
trigger3 = animelem = 6
trigger4 = animelem = 7
trigger5 = animelem = 8
trigger6 = animelem = 9
trigger7 = animelem = 10
trigger8 = animelem = 11
trigger9 = animelem = 12
trigger10 = animelem = 13
trigger11 = animelem = 14
trigger12 = animelem = 15
trigger13 = animelem = 16
trigger14 = animelem = 17
attr = S, HP
hitflag = MAFDP
guardflag = MA
damage = ceil(70*fvar(0)*fvar(1)), ceil(10*fvar(0)*fvar(1))
animtype = Hard
air.animtype = Back
ground.type = High
priority = 6, Hit
pausetime = 0, 2
getpower = 0, 0
ground.slidetime = 20
ground.hittime = 20
guard.hittime = 20
ground.velocity = -1,-1
guard.velocity = -6
air.velocity = -0.5,0
airguard.velocity = -0.5,0
ground.cornerpush.veloff= 0
air.cornerpush.veloff = 0
down.cornerpush.veloff = 0
guard.cornerpush.veloff = 0
airguard.cornerpush.veloff = 0
palfx.time = 200
palfx.mul = 80, 200, 80
palfx.sinadd = 5,80,5,40
sparkno = -1
guard.sparkno = -1
sparkxy = 150,-60
hitsound = S3000, 2
guardsound = S120, 0
fall = 1 ;1だと自動立ち直りなし
fall.recover = 0 ;0だと受身不可能
fall.recovertime= 999999
air.fall = 1 ;1だと自動立ち直りなし
それ見る限りだと問題無いけど、
可能性としてはHitCountがリセットされてる(=タゲが外れてる)んじゃないかな
作者によってはCanRecoverフラグ無視して復帰ステートに飛ばしてたりするからそこで外れてるとか
特定の相手キャラでのみ発生するの?
それが原因ならステート奪うかHitDefの上にTrigger1=1で常時ReversalDefかけて永タゲ使うかで解決できると思う
もし違ったらそのステート内の他のステコンや常時監視を見ないと分からない
>885
回答ありがとうございます。
私のキャラが動画でやらかしてたのを見て、慌ててチェックをしているので、まだ特定の相手かどうかはわかりませんが・・・。
ご指摘の復帰ステートの件、該当の動画を見返して気がついたのですが、地面近くで変な食らい方しているんですよね。
fallフラグを無視した復帰の他に、クイックスタンディング等でダウン拒否してまだ残っている判定に引っかかるという可能性は
ありますでしょうか?
↓該当動画、9:10くらいから、ビオレンテの放射樹液が間桐桜に不自然な大ダメージを与えてます。ヒットカウントも8行ってます。
ttp://www.nicovideo.jp/watch/sm16535862
動画見てもよく分からんけど、ヒットカウントが継続してるからタゲ外れてる訳ではなさそうかな
初弾で2ヒット入ってるように見えるから相手側の不可視ヘルパーと本体で1度に2回当たってるんじゃない?
不可視ヘルパー重ねるのはアーマー処理でも使う手法だから本体の無敵設定し忘れてそうなってるのかも
HitCountは同一HitDefでの同時ヒットを1回とカウントするから4回×2ヒットした後にTriggerAll満たさなくなるから計8ヒットで理に適ってる
UniqHitCountなら同時ヒットも個別にカウントするから2回×2ヒットで満たさなくなる
5ヒットを超えた段階で当たらなくするなら等号を付けて「<=5」にするか「<6」にしないといけない
わかりました。では、ヒットカウントは気にしなくても良いということですね。
ダメージがおかしなことになる方法の修正は・・・すみません、「HitDefの上にTrigger1=1で常時ReversalDefかけて永タゲ」が
ちょっとよくわからないです・・・。「ステート奪う」の方はわかりますが、できれば他のビーム系超必殺技を持っているキャラ
と同じく、通常の処理でなんとかしたいと考えております。
この現象が回避できるなら、この際ヒット制限は撤廃して、ダメージ×14ヒットで現在と同等の火力に調整し直してもいいと思っているんですが・・・。
triggerall = HitCount < 5を抜いて、ヒット時は全てのhitdefが当たるようにしておけば、よっぽど変な食らいぬけをされない限りは、
普通の攻撃と同じようにヒットします・・・よね?
間桐桜のcns見ないと分からないけど、ヘルパーによるアーマー処理のダメージと無敵設定ミスにより本体が直接受けたダメージが重複して大ダメージになってるのでは?って話ね。
もしそうならビオレンテ側のcnsどうこうの問題じゃないから>>885 は気にしなくていいし、寧ろ間桐桜の作者に不具合報告した方がいい
本来HitDefによるターゲットは相手のMoveTypeがHじゃなくなったときに解除されるんだけど、ReversalDefを実行し続けることによってターゲットが解除されずに残るのが「永タゲ」
相手がCanRecover無視で復帰してMoveType!=HになってもReversalDefを途切らせなければターゲット解除されずにHitCount継続するからTriggerAllでのヒット数制限が効く
Var使ってもいいならTime=0で0にセットしておいてヒット毎に1加算、そのVarでTriggerAll設定した方が確実
昨日は途中で寝落ちしてしまいました。すみません。
今日帰ってきたらvar追加したりして色々やってみます。また、他のキャラ相手にもこの現象が
起きるか試してみるまで、間桐桜の製作者の方への報告は保留します。桜以外にも起きたら
やはりこっちの問題ですし・・・。結果は後でまた報告に来ます。アドバイスありがとうございました!
>>884 の件ですが、タッグ時で、かつ相手が地面と判定に挟まれるような食らい方をしたときに発生するようです。
(地面の上でビタンビタンと小刻みに跳ねる食らい方をしてました)
ジェダ・cvsベガでも確認できたため、間桐桜の問題ではないようです。
>>889 のvarを使ったやり方も試してみましたが、どうもうまく行きませんでした。
現在、ヒットカウントが途中でリセットされて過剰に食らっている可能性を考慮して、ヒット制限を解除して全判定が普通に命中するように設定し、
ダメージ量をいじって調整しています。
また、保険としてヒット時に地面に近づかないように、各velocityのy値を-1にしています。
これで例の現象が起きなければいいのですが、原因が確定できたわけではないのでいささか不安です。
もし、原因に心当たりがある方がいらっしゃいましたら、教えて頂ければ幸いです。宜しくお願いします。
何とも言えんね…
ダウン追い討ちで問題が出てくるような記述ではないと思うんだけど
Var使って上手くいかないなら>>884 のHitDef以外のところが悪さしてる気がしないでもない
制限解除しても妙な現象が起きるなら常時監視やHitDef以外も見直す必要があるかも
ヒット数制限付きの多段飛び道具ならProjectileでProjHitsとProjMissTime設定すればできるけど
DamageにかけてるFVar(0)やFVar(1)がリアルタイムで反映されないのが難点
イントロでヘルパーをポヨンポヨンさせてparentに近づいたら999193にアニメ変更したいのですが、アニメが999193になると何故か最初の1枚目で止まってしまいます。
[Statedef 999191]
type = A
ctrl = 0
anim = 999191
velset = 1.1,-3
[State 191, 重力]
type = Gravity
trigger1 = time >= 10
[State 191, 地面に着く]
type = velset
trigger1 = pos y >= 0
x = 1
y = -8
[State 191, アニメ変更]
type = changeanim
trigger1 = pos y >= 0
trigger1 = pos x <= 40
value = 999192
[State 191, アニメ変更]
type = changeanim
trigger1 = pos x >= (parent,Pos x)-30
value = 999193
[State 191, 移動終わり]
type = velset
trigger1 = pos x >= (parent,Pos x)
x = 0
y = 0
二つ目のアニメ変更のステコンが原因かも
たぶん条件を満たしたら、自分がどのanimにいようと999193の最初に飛ぶようになってる
triggerall = anim != 999193
って入れてみたら何とかならないかしら?
違ってたらスマヌ
>>894
できました!しかし今度はdestroyselfでヘルパーを消し本体のchangestateでイントロを終了させようとすると
destroyself>一瞬消える>ニュートラル、のような感じになってしまいます
どうすればいいのでしょうか
[Statedef 191];本体ステート
type = A
ctrl = 0
anim = 191
[State 191, 特殊効果];試合が開始するまではこのコントローラを使おう(※2)
type = AssertSpecial
trigger1 = 1
flag = Intro ;イントロの状態
[State 191, カメラ固定]
type = ScreenBound
trigger1 = 1
value = 1
[State 191, ヘルパーを出す]
type = Helper
trigger1 = Time = 0
name = "intro" ;ヘルパーの名前。省略すれば勝手に「(ヘルパーを出した親)'s Helper」という名前になる。
stateno = 999191 ;ヘルパーの最初に向かうステートナンバー。
pos = -123,-45
postype = p1
facing = 1 ;ヘルパーの左右の向き(1=そのまま・-1=左右反転)
ownpal = 0 ;ヘルパーの色を独立させるか否か(0=させない,1=させる)
ID = 999191
[State 191, ステート変更];アニメーションが終われば「通常立ち」のステートに変更する
type = ChangeState
trigger1 = NumHelper = 0
value = 0
[Statedef 999191];ヘルパーステート
type = A
ctrl = 0
anim = 999191
velset = ceil((parent,BackEdgeDist)-73.9),-3;1.1,-3
[State 191, 重力]
type = Gravity
trigger1 = time >= 10
[State 191, 地面に着く]
type = velset
trigger1 = pos y >= 0
x = 1.15
y = -8
[State 191, アニメ変更]
type = changeanim
trigger1 = pos y >= 0
trigger1 = pos x <= (parent,pos x) -40
value = 999192
[State 191, アニメ変更]
type = changeanim
triggerall = anim != 999193
trigger1 = pos x >= (parent,Pos x)-30
value = 999193
[State 191, 移動速度リセット]
type = velset
trigger1 = pos x >= (parent,Pos x)
x = 0
y = 0
[State 191, ステート変更]
type = changestate
trigger1 = pos y >= 0
trigger1 = vel y >= 0
value = 999193
[Statedef 999193]
type = A
ctrl = 0
anim = 999194
[State 191, 位置戻す]
type = posset
trigger1 = time = 0
value = 0,0
[State 193, ヘルパー消す]
type = destroyself
trigger1 = time = 10
自己解決しました
すみません
マガキ(KOF)みたいな相手に対して鳥篭喰らってるときに、ある技をリバサ発動する記述を作りたいのですが
いまひとつグッと来る記述が思い当たりません。
下記3つか、それ以外を組み合わせる形式が良いのではないかとまでは考えたのですが……
◆画面上に飛び道具が一定数以上存在する。
⇒ProjectileではなくHelperに直接Hitdefを与えるタイプの飛び道具だと認識できない。
Helperの絶対数を数えればと思ったのですが、エフェクトや各種処理のために出しているヘルパーと見分けをつけようがない
ラウンド開始時のHelper数を記憶させればゲージとかの常時展開型Helperは除外して数えさせることは出来ると思うのだけれども、どうにも不確実性が高いのでゲージ技の記述には向かないのでは?
◆常時監視で「飛び道具を喰らった回数」を見張らせる
⇒記述自体は可能と思われるものの、単体では適用範囲が広すぎるので条件としてゆるいかも
◆飛び道具でダウンする(もしくは、それがn回連続する)
⇒Commonのダウンステートへ送られる時の喰らった攻撃or最初に喰らった攻撃を常時監視ステートで記憶させるようにすれば、一応は可能なはず。
が、コンボの〆に飛び道具を使うキャラとかの場合、誤認する恐れが高い?逆に弾幕張って接近してくるor起点にしてくるキャラを認識できない可能性も?
;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
; 初期相手ヘルパー数確認
;━━━━━━━━━━━━━━━━
[State -2, VarSet]
type = VarSet
triggerAll = !var(57)
trigger1= RoundState = [0,1]
var(57) = Enemy,NumHelper
[State -2, VarSet]
type = VarSet
triggerAll = var(57) > Enemy,NumHelper
trigger1= RoundState = 2
var(57) = Enemy,NumHelper
[State -2, VarSet]
type = VarSet
triggerAll = var(57) < Enemy,NumHelper
trigger1= RoundState = 2
trigger1= StateNo = 0 && !Ctrl
trigger1= EnemyNear,StateNo = 0 && !EnemyNear,Ctrl
var(57) = Enemy,NumHelper
[State -2, VarSet]
type = VarSet
triggerAll = var(57) > 0
trigger1= RoundState = 4
var(57) = 0
;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
; 飛び道具を喰らった回数
;━━━━━━━━━━━━━━━━
[State -3, VarAdd]
type = VarAdd
triggerAll = EnemyNear,HitDefAttr = SCA,NP,SP,HP
triggerAll = Time = 1 && Alive
trigger1= StateNo = 5000 || StateNo = 5010 || StateNo = 5020 || StateNo = 5070
var(x) = 1
これに変数リセット記述を加える
;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
; 飛び道具でダウンする(もしくは、それがn回連続する)
;━━━━━━━━━━━━━━━━
記述思いつかずorz
投稿してから気付きました
triggerAll = EnemyNear,HitDefAttr = SCA,NP,SP,HP
これだとProjectile喰らったことを認識できないですね、本体かヘルパーがP属性のHitdef出してないと反応しないです。
ヘルパーアーマー記述みたいな飛び道具しか喰らわないヘルパーを出そうかって思いましたが、その場合ヒットスパークが2重に出てしまう;
飛び道具ヘルパーであればMoveType=Aになってる筈だから
PlayerIDリダイレクトでヘルパーのMoveTypeとTeamSideを監視すれば識別できると思う
PlayerIDは通し番号だから新しく出したヘルパーからPlayerID(ID-1)とかで参照可能
飛び道具喰らった回数のカウントなら
[State ]
Type = HitOverride
Trigger1 = 1
Attr = SCA, NP, SP, HP
StateNo = 5090
Time = -1
で飛び道具被弾時に適当なステート飛ばして
[Statedef 5090]
Type = U
MoveType = H
Physics = U
[State ]
Type = VarAdd
Trigger1 = 1
V = ***;適当なVar番号
Value = 1
[State ]
Type = ChangeState
Trigger1 = StateType = S
Trigger1 = GetHitVar(yVel) = 0
Value = 5000
[State ]
Type = ChangeState
Trigger1 = StateType = C
Trigger1 = GetHitVar(yVel) = 0
Value = 5010
[State ]
Type = ChangeState
Trigger1 = StateType = L
Trigger1 = GetHitVar(yVel) = 0
Value = 5080
[State ]
Type = ChangeState
Trigger1 = (StateType!=A)*(StateType!=L)
Trigger1 = GetHitVar(Type) = 3;Trip属性
Value = 5070
[State ]
Type = ChangeState
Trigger1 = 1
Value = 5020
で即座に本来の喰らいステートに戻せばいいんじゃない?
HitOverrideの副作用で「P2StateNo付きのP属性の攻撃」を喰らわなくなっちゃうけど
A属性やT属性は通常通りMUGENの内部処理に従って喰らい処理ができる
製作中のキャラに固有ゲージというか固有アイコンを作ろうとしたのですが、
どうしても移動するとそれが画面外へ置いてけぼりになってしまいます
ヘルパーを使っているのですが、どなたか解決方法を知っている方がいらっしゃるなら、
是非教えてください
よろしくお願いします
基本的にそういうのはExplodで作った方が楽だけど
HelperでやるならxはPosSetで「適当な数字」(FacingかTeamSideを考慮して)、yはPosAddで「適当な値-ScreenPos y」を常に実行させる
PauseMoveTimeやSuperMoveTimeを適当に大きく設定するのは当然だけど、どうしても多少のズレはでてきちゃう
あとはHelperType=Playerで出した場合(インジケーター用のヘルパーなら普通はやらないけど)はScreenBoundを0にしとくことも忘れずに
>>901
アドバイスありがとうございます!
やはりExplodの方にすべきですかね…
Explodの場合ならどのように記述すると画面内に固定になるのでしょうか?
PosTypeをLeftかRightにしてBindTimeを-1にすればいい
PauseMoveTimeとSuperMoveTimeをちゃんと設定すれば暗転中に画面が移動しても置き去りにされることもない
状況に応じて変化するインジケーターはRemoveExplodで古いのを消して新たにExplod実行する感じ
ありがとうございます!
無事ゲージを搭載できました
どうも、投げ技を作り始めて早速躓きました、鰐です。
記述は以下のような感じで、相手を後方に投げて叩きつけるのですが、
その後selfstateでstate5100に入りバウンド中の相手が、投げた側が投げ動作終了して立ち状態に戻ると同時に
投げた側の足元まで瞬間移動?して戻って(接近して)来てしまうのです
statedef716で設定しているvelXは一応活きてるようで跳ね上がるときには離れるように弾んでいくのですが
バウンドの途中で叩きつけた位置よりもやや近い間合いまでワープしてきます
どのあたりが原因でこのようなことが起こるのかわからず難儀しており
ご教授いただければ幸いです
;背負い投げ
[statedef 710]
(略)
[state 710, 攻撃判定]
type = hitdef
triggerall = (P2stateno != [150,155]) || P2stateno != 40
trigger1 = animelem = 2
attr = S,NT
hitflag = HL
priority = 1, miss
sparkno = -1
P2facing = 1
P1stateno = 711
P2stateno = 715
fall = 1
fall.recover = 0
(略)
;背負い投げ、投げ動作
[statedef 711]
type = S
movetype = A
physics = N
anim = 711
poweradd = 0
[state 711, 投げられ側座標1]
type = targetbind
trigger1 = animelemno(0) = 1
pos = 50, 0
(略)
[state 711, 投げられ側座標7]
type = targetbind
trigger1 = animelemno(0) = 7
pos = -75, -34
[state 711, 投げられ側座標8]
type = targetbind
trigger1 = animelem = 8
pos = -70, 0
[state 711, 投げダメージ]
(略)
[state 711, 投げられ側を投げられ終了ステートに送る]
type = targetstate
trigger1 = animelem = 8
value = 716
[state 711, 叩きつけエフェクト]
(略)
[state 711, ターン]
type = turn
trigger1 = animelem = 11
[state 711, 動作終了]
type = changestate
trigger1 = animtime = 0
value = 0
ctrl = 1
;背負い投げ、投げられ動作
[statedef 715]
type = A
movetype = H
physics = N
velset = 0, 0
[state 715, 投げられ動作アニメ]
type = changeanim2
trigger1 = time = 0
value = 715
;背負い投げ、投げられ終了
[statedef 716]
type = A
movetype = H
physics = N
velset = 2.2, 0
[state 716, 投げられ終了〜ダウン]
type = selfstate
trigger1 = time = 0
value = 5100
ワープならこっちのTargetBindか相手のPosSet/PosAddだろうから
TargetBindのどれかが誤作動してるんじゃない?
Trigger1 = Anim = 711を全TargetBindに付け加えても起こるかどうか確認かな
早速の書き込みどうもです。
試してみましたがその方法では挙動変りませなんだ…
common1の記述との兼ね合いで変になってんのかとも思い
バウンド部分までstate716内で作って完全に倒れてからダウン状態に直接移行みたいにもしてみたんですが
それでも動作中に(投げた側が通常立ちに戻ると)posずれるんですよねー。
見た目的には(投げた側の投げモーションの)animtime = 0 をトリガーにposset(X)かtargetbindが働いてるようなんだけど…
解決しました!
最初のtargetbindのトリガーを
animelemno(0) = 1(0フレーム後のアニメコマ数が1である)から
animelemtime(2) < 0(アニメが2コマ目に変わった瞬間からの経過時間が0未満である、つまりまだアニメ2コマ目に変っていない)
に変更することで解決しました。
仕様上、各アニメーションはchangestateしなければ最初にループする都合上、
animtime = 0 (アニメーションが一週終わった瞬間)にも animelemno(0) = 1 (次の瞬間にアニメが1コマ目)を満たしていると判断されるようです。
カンフーマンに倣いanimelemtime(2) < 0にするとこちらはアニメ終了時のタイミングは含まないのでtargetbindが暴発しないのでした。
奥が深い(何
今更ですけど、ステコンに
persistent=0
を付けるっていう方法でも良いんじゃないかなと思います。
これを付けたら一度しか実行されなくなりますし。
調べてみました。なるほど…こんな記述追加要素もあったのですな。
ご教授有難うございます、憶えておこうと思います。
…奥が深い(また
重複する内容が非常に多いので、算数的なトリガー記述を使用して圧縮したいのですが、まるでわかりません。
理科系の人、助けてください。。。
[State 191, Helper_分身出現]
type = Helper
trigger1= time = 280
trigger2= time = 284
stateno = 10193
ID = 10193
pos = IfElse(Numhelper(10193)%2,1,-1)*88,IfElse(Numhelper(10193)%2,1,-1)*14
postype = p1
name = "Shadow"
size.xscale = 1-IfElse(Numhelper(10193)%2,1,-1)*0.025
size.yscale = 1-IfElse(Numhelper(10193)%2,1,-1)*0.025
[State 191, Helper_分身出現]
type = Helper
trigger1= time = 288
trigger2= time = 292
stateno = 10193
ID = 10193
pos = IfElse(Numhelper(10193)%2,1,-1)*33,IfElse(Numhelper(10193)%2,1,-1)*28
postype = p1
name = "Shadow"
size.xscale = 1-IfElse(Numhelper(10193)%2,1,-1)*0.025
size.yscale = 1-IfElse(Numhelper(10193)%2,1,-1)*0.025
[State 191, Helper_分身出現]
type = Helper
trigger1= time = 296
trigger2= time = 300
stateno = 10193
ID = 10193
pos = IfElse(Numhelper(10193)%2,1,-1)*33,IfElse(Numhelper(10193)%2,-1,1)*28
postype = p1
name = "Shadow"
size.xscale = 1-IfElse(Numhelper(10193)%2,-1,1)*0.025
size.yscale = 1-IfElse(Numhelper(10193)%2,-1,1)*0.025
[State 191, Helper_分身出現]
type = Helper
trigger1= time = 304
trigger2= time = 308
stateno = 10193
ID = 10193
pos = IfElse(Numhelper(10193)%2,1,-1)*88,IfElse(Numhelper(10193)%2,-1,1)*14
postype = p1
name = "Shadow"
size.xscale = 1-IfElse(Numhelper(10193)%2,-1,1)*0.025
size.yscale = 1-IfElse(Numhelper(10193)%2,-1,1)*0.025
[State 191, Helper_分身出現]
type = Helper
trigger1= time = [280,308]
trigger1= time%4 = 0
stateno = 10193
ID = 10193
pos = (Numhelper(10193)%2*2-1)*(88-55*(time=[288,300])),(Numhelper(10193)%2*2-1)*14*(1+(time=[288,300]))*(1-2*(time>292))
postype = p1
name = "Shadow"
size.xscale = 1-(Numhelper(10193)%2-.5)*0.05
size.yscale = 1-(Numhelper(10193)%2-.5)*0.05
でどうかな?
記述だけ見て纏めただけだからMUGEN上でどうなるか見てない
255文字制限は問題無い筈
上手く機能しました! ありがとうございますー
と、思ったらよく見るとtime=296で表示されるヘルパーのスケールが妙に大きい……なぜだorz
helperのdestroy条件が分からないから何とも言えんけど
8F周期で大きいヘルパーと小さいヘルパーを4F毎に交互に出すなら
Numhelper(10193)%2じゃなくてtime%8/4でやった方がいいかもね
trigger1= Asin((P2Dist Y+69+Vel Y*3+(EnemyNear,Vel Y*3)+(EnemyNear,Const(movement.yaccel)*3*3/2))/(P2BodyDist X-25+Vel X*3+EnemyNear,Vel X*3))*180/Pi = [35,45]
こちらの記述が「asin argument out of range」というエラメを吐いてしまいます。
エラメの意味は「asin()内の数値が設定範囲外です」ということだと思いますが、何がマズイのでしょうか?
ひょっとして、そもそもこのトリガーは現在の記述内容のままではエラメを吐くのみで機能していないのでしょうか?
Asinが-1〜1の間の値から角度を返す関数だから
括弧内に-1未満か1より大きい値が入ってたらエラー吐く
内容的に3F後の相手と自分の角度を返したいんだと思うけど
それならAtan(y距離/x距離)にしないと
現在位置から決まった距離を瞬時に移動させたいのですが、possetは画面を基準としているようでうまくいきません。
何のステートを使えばいいのでしょうか?
PosAdd
あっ、それの存在すっかり忘れてました
ありがとうございます
「いっしょにトレーニング」が自動ガードしてくれません・・・
Hitdefに問題があると思うのですが、どこがいけないのでしょうか。
ご教授願います。
[State 3101, ヒット定義]
type = HitDef
trigger1 = Time = 0
attr = A, HA
animtype = Back
damage = floor(182/(hitcount+1)), 12
getpower = 0
priority = 5
guardflag = MA
pausetime = 30,30
sparkno = 3
sparkxy = 0,-110
hitsound = 5,4
guardsound = 6,0
ground.type = Low
ground.slidetime = 26
ground.hittime = 26
ground.velocity = -1.3,25
guard.velocity = -13
air.velocity = 0,25
airguard.velocity = -4.5,-5
envshake.time = 8 ;攻撃を当てた場合の画面振動の処理
envshake.ampl = -40
envshake.freq = 60
p2facing = 1
fall = 1
fall.recover = 0 ;相手は空中受け身が出来なくなる
fall.envshake.freq = 178
fall.envshake.time = 15
AttackDistがいくつに設定されているかと距離に関わらずガードされないのか辺りを確認
MoveTypeはチェンステの段階([Statedef 3101]の直下)でAにしてるよね?
あと、ステ番的に超必だと思うから
PauseやSuperPasue使って止めてる間に2ヒット以上させていないかもチェック
時止め状態だと1発目の被弾で150、152、154に飛ぶけど2発目以降は
150、152、154のTime=0で受ける羽目になるからガード判定出ない
すみません説明が抜けていました
自動ガードしてくれないのは空中のみです
自己解決しました
SuperPanseのmovetimeの値をtimeより小さくしたら相手が自動ガードしてくれました
・・・なぜ?
>>922
次にガードしてくれなくなったときはそこを確認してみます、ありがとうございました
たびたび質問すみません・・・
相手がダウンしている時間を固定したいのですが、(AIだと何故か早く起き上がる)どうすればいいかわかりません。
(fall = 1、fall.recover = 0にはしています)
hitdefでステートを奪えばいいんじゃないかと奪ってみましたが、
相手側で指定しているダウンしたときの音が鳴らないのでムリでした。
どうにかしてダウンしているときにステートを奪えないでしょうか。
よろしくお願いします。
初めまして、よろしくお願いします。
自分もドットに興味を持ち始めたのですが…
ドット絵のアドバイスなどはドット絵板に投稿したほうが良いのでしょうか?
あそこはキャラ製作専門といった感じでアドバイスだけを貰うってのはすこし気が引けるのです。
>>925
MUGENのダウンはボタン入力で起き上がりに移行するから
それを無効化するには自前でダウンステート用意しなきゃならない
だからダウン追い討ちが重要なキャラなんかは大抵ステート奪ってる
相手の処理を優先するなら相手のステート5100を感知してからTargetStateで奪う感じになる
タッグでの巻き込みが気になるならヘルパーReversalDefで個別にTarget取得する方法もある
>>926
ドット絵に関しては実際に見て貰いながらの方が的確なアドバイスが出るかと
(製作)付けてない投稿も結構あるから右に倣えでGo
とあるキャラのAIを⑨氏の講座、平成㌢氏の説明書を手本にしながら作っているのですが、
-3ファイルの[Statedef -3]って付けるとエラーが出るのですが何故でしょうか?
教えてください。お願いします。
あと、移動、ガード、必殺技はちゃんとするようになったのですが、
コンボがなかなか繋げられません。
AIにコンボするように記述するにはどうしたらいいですか?
自分はそのキャラの人操作はうまくなく、必殺技もろくに出せないぐらいヘタです。
やっぱり人操作がうまくないとAIは作れないのでしょうか…
>>928
[Statedef -3]を付ける場所は-3ファイルの一番上です。
>>927
がんばってみたけど難しいです
参考にできるキャラっていますか?
>>928
各ステートには最低1個のステコンが必要だから
[Statedef -3]
[Statedef -2]
みたいになってるとエラー
それ以外が原因だったらその情報だけじゃ分からん
コンボに関してはどの技からどの技に繋げられるかを理解すれば
人操作の腕関係なく作れるよ
北斗みたく喰らい挙動にヒット数補正がかかるやつだとちょっと大変だけど
>>930
930=925でいいんだよね?
タゲステに関しては
[State -1]
Type = TargetState
TriggerAll = NumTarget
Trigger1 = Target,StateNo = [5100,5101]
Trigger2 = Target,StateNo = 5110
Value = 5111
って感じで床バウンドした時点で奪うか、Trigger1無しで5110の完全ダウンだけ奪うか
巻き込み防止は色々やることあって面倒だからあまりお勧めしない
参考キャラは分からない
基本的に自分で思いつく記述を紹介してるだけだから
皆さまレイヤ―ってどれくらい分けていますか?
アニメーションさせやすいレイヤ―を教えてください。
自分は最初一枚絵はレイヤ―ひとつで描いていたのですが、アニメーションさせるときは面倒な気がするのです。
>>931
ありがとうございます。
教えてもらったステートを組み込んでみたところ、
「WARNING : PLAYER TRANING(33) IN STATE 3200 : CHANGED TO INVALID ACTION 2300」と出ました。
これは
しかしAIRファイルにはちゃんと[Begin Action 3200]があります
どこがおかしいのでしょうか?
↓CNS
[State 3101, 相手ダウンステート移行]
Type = TargetState
TriggerAll = NumTarget
Trigger1 = Target,StateNo = 5110
Value = 3200
[Statedef 3200]
type = L
movetype = U
anim = 3200
ctrl = 0
sprpriority = 2
[State 3200, ステート変更]
type = SelfState
trigger1 = Time = 200
value = 5120
↓AIRファイル
[Begin Action 3200]
5040,10, 0,0, -1
これは←読み飛ばしてください
>>933
多分、TRANINGが参照してるのは、TRANING自身のanim3200なんじゃない?
[Statedef 3200]の中に
[state 3200,]
type = changeanim2
trigger1 = time = 0
value = 3200
って入れてみたら上手くいかないかな
>>935
うまくできました!しかしタッグだと2人同時に当てた場合に変な挙動になる時が・・・
これは仕方ないのかな・・・
どうも、鰐です。
今回地上通常投げを3キャラに搭載終了しまして、とりあえず動作できたのですが、
どういうわけか3人のうち1キャラだけ、遊戯用に使用してるMUGENが落ちるようになってしまいました。
私普段の(作業しながらの)テストプレイ用と別に、集めた大量のキャラを登録したMUGENを別にわけているのですが、
3人作ってるうちの1キャラのみ、その登録数の多いほうのMUGENで使用キャラに選んで始めると本体が落ちます。
エラーメッセージなどは無く、windowsからのメッセージ?で「winmugen.exeは動作を停止しました」となります。
簡易テスト用のもう一方のMUGENだと普通にプレイできるようなのでキャラの問題だけでもなさそうなのですが
落ちるキャラは決まっているのでキャラが無関係というわけでもなく。
何か動くことは動くが落ち易くなってしまうような記述があったりするのでしょうか。
>>937
考えられるのは、登録ミスかなぁ
簡易テスト用は動くみたいだし、select.defを見比べてコピペしてみたらどうかね?
>937
そのキャラだけ、データが重いなんてことありません?
重すぎるとPC状況にもよりますが、エラーメッセ吐かずに
mugenが落ちたりします。
登録の多いmugenから他の登録キャラを減らしてみて
その落ちている一人を起動してみるのはどうでしょう。
どうもありがとうございます。
試してみたところ、select.defの登録ミスが原因だったみたいです。
私の作ってたキャラではなくて、他のキャラで更新でフォルダとdefファイルの名前が変ったのがあったのですが
select.defへの登録は古い方の名前のままだったのがありキャラセレクト画面で空欄の箇所が出来ていたのですが
そのキャラの部分を修正したところ落ちなくなりました。
何でそこに異常があると自分の問題のキャラだけが落ちるようになるのかはよくわかりませんでしたが(汗
でもどうやら解決した(?)っぽいです、有難うございました(笑)。
空中ダッシュに制限をかけたくて、
[State -1, Air Dash]
type = ChangeState
value = 110
trigger1 = Pos Y >= 100
trigger1 = command = "FF"
trigger1 = statetype = A
trigger1 = ctrl
という記述をしているんですが、どの位置にいても出せなくなってしまいます。
原因が分からないので、ご教授してもらえると助かります。
Pos y >= 100は地下100ピクセルよりも下に潜ってないと成立しない
>>942
ありがとうございます。他の座標系の記述と同じ方法でいいんですね。
しかし、-100にしてもどこでも発動出来てしまいます。
何か他に必要な記述があるんでしょうか?
100ピクセル以上上空じゃないと空ダできないようにするならPos y <= -100だよ、不等号の向きも変える
それでも上手くいかないならそこ以外のChangeState疑った方がいい
あと、100ピクセルって空ダの制限にしては大きいと思うけどそれでいいの?
>>944
出来ました、ありがとうございます!
100だと大きいと思ったので、50にしました。
すみません!
悪咲氏のケンのボイスパッチを作ったのですが、公開していいのでしょうか?
以前に悪咲氏が更新などを記録していたサイトに許可や、公開などのことを書いていたような気がしたのですが、
そのサイトはもう消えてるので確認できません。連絡を取ろうとしてもMUGENから引退しているので…
誰か悪咲氏のキャラの公開について教えてください。
初めましてネコマンマと申します
今月からドット絵を練習しているのですが
Do||Mu,Fileのふうりん氏の「見せるアニメの動かし方」の中のオバケというものがうまく書くことができません
何か書き方のコツなどがあれば教えて頂きたいです><;
trigger1 = helper(6068),var(50) := EnemyNear,StateNo
こいつがどうもエラー出すんですが
リダイレクトキーワード付きのvarに代入って、使えないんでしょうか?
>>947
始めまして
もう1000埋まっているほうの雑談掲示板の345
に、わっかりにくい説明がありますので、読んでみてください。
投稿してドット絵板あたりで聞いてみると
結構みんな教えてくれますよ。
練習頑張ってください。
>>949
返信して頂きありがとうございます
凄く参考になりました><
元々スパロボドットを使用したキャラ制作をしていたので
ドット絵キャラ制作作りも今までのような作り方をしているので
かなり邪道だと思っているので、そちらには投稿しにくかったのですが
一度ドット絵板の方で聞いてみようと思います。
>>948
:=にリダイレクトは使えない。あくまでVarSetの代用だと思ってもらえればおk
6068ヘルパーのVarを弄りたかったら6068ヘルパー自身がVarSet/Addや:=で弄るか
6068ヘルパーが呼び出したヘルパーがParentVarSet/Addするしか(バグ以外では)ない
わかりました。
ありがとうございます。
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板