レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。
製作お助け掲示板
製作で困ったことがあれば
質問をどうぞ
どんな初歩的な質問でも
キャラ製作の先人達がやさしくお答えいたします。
ただし教えてくれた内容が間違っていても怒らないように。
だれにでも間違いはあります。
ココで得た知識を吸収し、教える側に回れるように精進しましょう。
また
先人達も知識がさび付かないように、理解をより深めるために
お互いに知識を出し合い、高め合いましょう。
アドバイスしていただいた皆様ありがとうございます。
また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
すいません、ありがとうございます!
>>769
炎を纏ったキャラとかバリア張ってるキャラとかのイメージで合ってるならできる
Explod(表示のみ)やHelper(色々可能)やProjectile(攻撃・一部相殺)で本体とは別管理の画像を表示できるからね
airファイルで透過設定できるし、Helperならcns側でも透過設定できる
>>769
多分スカートの話ですよね?赤セイバーの
出来ると言えば出来ると思いますけど
はっきり言って最初からスプライトに半透明部分を描きこんだ方が楽ではあるかと
半透明部分を本体と別に作って合わせるとすると動きをあわせる関係上
本体のスプライト枚数と同じだけのスカートを描かなければならないですし
アニメも本体のアニメと同じだけ作らなければならない上に
プログラム上で両者の動きのタイミングや移動もあわせるとなると相当めんどくさいと思うのですよね
最初からスカートの半透明部分を本体に描きこんでおく形なら
単に「透けて下が見えてるように描いてある」擬似透過処理ではありますが
あとから色々いじる際にも余計な手間を生まない(スカートと本体が別だと
例えば技のフレームをいじった際にスカートのフレームもいじらなければならないとか)ので
手間が多分全然変るんじゃなかろうかと…
無論労力は惜しまないということであれば徹底するのもありですが。
どうしてもマジックサーキットのMAX処理がうまく行かぬ…
具体的には
①MAX中にゲージ1000以下になる
②EXエッジ発動
③MAX解除+残ゲージ2000
となる処理の②と③の処理がうまく行かぬのですが何かいいアイディアありませんか?
自己解決しますた
スカートか…
ChangeAnim2やAngleDraw使われると本体に合わせて表示するのは厳しいよ
平常時はPause無視のヘルパーをBindToRootで軸合わせしつつ
[State ]
Type = ChangeAnim
Trigger1 = 1
Value = Root,Anim+10000
Elem = Root,AnimElemNo(0)
でアニメーションの同期取れば済む話なんだけど
スプライト番号(≠アニメ番号)読み取るトリガー無いし、回転角読み取るトリガーも無い
状況が限定的とはいえ、P2Nameとかで対応するのも現実的じゃない
ChangeAnim2やAngleDrawに目を瞑るか、最初からスカートを統合した画像を描くかのどっちかかな
赤セイバーの透明スカートは赤スカートの内側に着てるから、重ならないように描いた画像をうまくcnsで処理するのは難しそうですね。
元から描いてしまうにしても、透明の表現を描くのはなかなか…(…それは個人の力量の問題か;)
レイヤー効果を使うのが一番楽だったなー
>>771
>>772
>>775
>>776
レスありがとうございます!
すいません、言葉足らずでした。スカートのことだって言うべきだった
やっぱり、難しいですか…
透過は無しでいくかな、正直現段階でもけっこういっぱいいっぱいなので透過を自分で書き込むのは死にそう
ただmiさんの「レイヤー効果を使う」というのが気になるんですがそれはGaleじゃ無理でしょうか?
PhotoShopとか必要になるのかな…
たびたび質問してすいません
以前photoshopで合成を試みてみましたけど、できるにはできるもののパレットの色がバラバラになった記憶ががが
Galeにもレイヤーを半透明にする機能はあるみたいですよ。けど使った事あまりないので詳しくは……
>>778
Galeでもできるんですか!
一応調べてみたんですが出てくるのがオニオンスキンの説明ばっかだったので無理かなって思ってました…
もうちょっと探してみます、ありがとうございました!
今けもぅの超必を作っていて、本体の他に砲台をヘルパーにしようと考えているんですが、
プレイヤー本体とヘルパーが重なった部分の影の色が濃くなってしまいます
noshadowだと重なってない部分の影が消えてしまいます
何か対処法は無いでしょうか?
影はステージ依存だから無理だと思う
キャラ側では表示するかしないかの「全か無か」しか設定できない
重なりを考慮して欠けたスプライトを用意するわけにもいかないだろうし
ステージ端での壁バウンド技を作っているのですが、行き詰ってしまったので質問させてください・・・
ヘルパーを使ってステージ端の探知は出来ています。
ステートを奪った相手の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
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板