したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |
レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。

製作お助け掲示板

1Yes:2010/06/25(金) 01:34:11
製作で困ったことがあれば
質問をどうぞ
どんな初歩的な質問でも
キャラ製作の先人達がやさしくお答えいたします。
ただし教えてくれた内容が間違っていても怒らないように。
だれにでも間違いはあります。
ココで得た知識を吸収し、教える側に回れるように精進しましょう。
また
先人達も知識がさび付かないように、理解をより深めるために
お互いに知識を出し合い、高め合いましょう。

452blank:2011/01/03(月) 02:06:41
Type = Trans
Trigger1 = 1
Trans = AddAlpha
Alpha = 256-8*Time,8*Time
で256/8F(=32F)かけてフェードアウト

途中からフェードアウトさせるなら
Trigger1 = Time > 20とAlpha = 256-8*(Time-20),8*(Time-20)に変える

453たらこ:2011/01/03(月) 03:06:55
お早い返答ありがとうございます。
えと、質問が悪かったみたいです。
自分で出したエフェクト(ビーム)に透明化などの処理をしたいのですが
(リュウの波動拳しかり、伊達政宗の飛び道具しかり)
中の記述を見てもよくわかりません
>>452さんのも試してみましたが撃ってるキャラ自身がフェードアウトするだけでした
やはり画像に何か処理を施す必要があるのでしょうか、でしたら描き直します

454blank:2011/01/03(月) 13:02:09
>>452をHelperが読むStateに置くんだよ

あと、AngleDrawを使わないんだったらair側で透過処理することもできる
1000, 0, 0, 0, 1, , Aで一般的に使う透過処理
1000, 0, 0, 0, 1, , AS0D256で完全透過(見えなくなる)
1000, 0, 0, 0, 1, , AS256D256が1000, 0, 0, 0, 1, , Aと同じで
フェードアウトさせるなら
1000, 0, 0, 0, 20, , A
1000, 0, 0, 0, 1, , AS248D256
1000, 0, 0, 0, 1, , AS240D256
(中略)
1000, 0, 0, 0, 1, , AS16D256
1000, 0, 0, 0, 1, , AS8D256
とすれば最初の20Fが普通の透過で21F目から32Fかけてフェードアウト

455たらこ:2011/01/03(月) 14:02:42
おおおおぉぉぉ!できましたっ!
>>452さんお早い返答ありがとうございます。
フェードアウトも出来ました。
初歩的な質問で申し訳ありませんでした><

456Azuma:2011/01/05(水) 20:33:27
>>450
すんません、理解できないので詳しくお願いしまする。

457blank:2011/01/06(木) 17:35:39
>>456
;-----------------------------------------------
; ( VelSet 以外でもOK, ただし PosSet はやめたほうがいい
; 周期120, 振幅3.5で近似してます。↓の式を使います
; 振幅×Sin( 2×PI×振動数×時間 ) ※振動数 = 1/周期
[State -3, VelSet]
type = VelSet
trigger1 = StateNo = [3600,3620]
y = 3.50*Sin( GameTime*2*PI/120 )
;-----------------------------------------------
この場合○を真横から見た感じな動きします。フワフワ漂う感じ?
中の速度が速く、端の速度が遅いので。

3.5 は上方向いっぱいに移動したときが大体 7 だったのでその半分です。
Sin()は -1〜+1 の範囲の値と出してくるのでこうしてます。
反復速度を変えるときは 120 を、距離を変えるときは 3.5 を変えてください

この式にするときの注意点は、負の数も扱うというところです。
0,1,2,3,4,5,6,5,4,3,2,1, ... では無く -3,-2,-1,0,1,2,3,2,1,0,-1,-2, ...
です。あと、Sin()の中身はラジアン(180°= PI)です。

想定されている動きにはならないかもしれません。
すでに解決されているようなので「こんなのもあるんか」で留めておいたほうがいいかも

458Azuma:2011/01/07(金) 23:15:18
ありがとうございます!


別件で質問なのですが
イントロ演出中にキャラの位置が動くのですが、ラウンド開始時にステージ側で設定されたスタート位置に強制的に戻されてしまいます。
これを発生させないようにするには、どういった記述を行えばよいのでしょうか?

459blank:2011/01/08(土) 11:19:44
MUGEN本体の内部処理だからキャラ側ではどうしようもない

イントロ終了後のPosをFVarに格納しといて
StateNo=0&&Ctrl=1になったら(あるいはPosとFVarが違う値になったら)常時監視でPosSetして
強制的に戻されたものをキャラ側で強制的に戻し返すくらいが精々
それか、イントロでの移動を考慮してPreIntro(190番)でPosAddして
イントロ終了後に丁度スタート位置にくるようにするか

印象としては後者が採用されてることが多いかな

460Azuma:2011/01/08(土) 12:32:11
ひょっとして、東方(緋)とかメルブラの試合前移動可能なキャラの処理も、そういうのなのでしょうか?
具体的に「ここ!」ってステートがわかりにくいので、記述見てもよくわからなくて・・・・;

461blank:2011/01/09(日) 00:25:36
cns覗いてないから分からんけど、もしかしたら強制移動を防ぐ条件があるかもね
元々我流でやってるから>>459のは思いついた対策を挙げただけだし、
後者が多いってのも動画や自分のMUGENで見た印象だから実際にcns見たら違うかもしれん

力になれなくて申し訳ない

462Azuma:2011/01/09(日) 08:35:59
はい、わかりました。

丁寧な解答、ありがとうございました!

463mi:2011/01/10(月) 18:52:45
お世話になっております。 
制作に詰まってしまいまして、アドバイスをいただければと思います。

【作りたい技のイメージ】
画面の上と下から、大きな牙が現れ中央付近で相手を噛む技。
1回だけではなく、『ガン・ガン・ガンガンガン』と計5回、
最後の5回目の噛みつきがフィニッシュになります。

【備考】
・この技の前にガード不可能の全画面技があり、それが終わると自動的にこれに繋がります。(こちらは何とかできました)
・一連の技が終わるまでプレイヤーキャラは見えなくなっています
・牙は上下運動しかしません。
・できればタッグ相手も巻き込みたいです。


上牙、下牙とそれぞれをヘルパーにするのかな?
とは思うのですが、組み立てが苦手なもので悩んでいます。

分かりにくいところ多々あるかと思いますが、その際は回答も致しますので
ご教授願えますと幸いです。

464blank:2011/01/11(火) 00:15:43
▼▼▼▼▼▼
   ↓

   ↑
▲▲▲▲▲
って感じなのかな?
上下両方ともヘルパーHitDefでやっちゃうと1回で2ヒットしちゃうから
片方だけヘルパーで、もう片方をExplodで表示させるか
両方ヘルパーで、HitDefは片方にのみ積むか
両方Explodで表示させて、InvisibleをAssertSpecialしたヘルパーかAir側で透明(AS0D256)にしたProjectileで攻撃処理するか
のどれかかな

ヘルパーでやる場合はVelSet(Add)やPosSet(Add)で動かせばいいけど
Explodで4往復半の運動させるにはAir側で動かしてやる必要がある
ロック技の追撃演出なら当身されないようにProjectileで攻撃処理した方が無難かも

465mi:2011/01/13(木) 21:33:42
>>464

アドバイスありがとうございます!
はい、そういう図のものをイメージしております。
ヘルパーはちょっと苦手意識があったので、Explodと透明の組み合わせで処理してみようと思います。
ロック技はタッグ相手には通らないのかなという印象があって、防御不可能の設定を組み込んでみました。
テストすると色々出てくるかもしれませんが…; とりあえずこの通り進めてみます。
有難うございました!

466Azuma:2011/01/14(金) 21:28:14
「ヘルパー」に下記記述でExplodの発生&制御をさせようと思ったんですが、ModifyExplodが機能してくれません。
trigger1=1にしても機能しないという謎現象に見舞われているのですが、一体なぜなのでしょうか?


[State 20000, Explod]
type = Explod
triggerAll = Root,var(35)
triggerAll = Root,StateNo = 3020
trigger1=!NumExplod(13000)
pos = 120,170
postype = back
anim = 13000
ID = 13000
vel = -1,0
ownpal = 1
scale = 0.5,0.25
removetime = 596
pausemovetime = 596
sprpriority = -5

[State 20000, ModifyExplod_Accel]
type = ModifyExplod
trigger1= NumExplod(13000)
ID = 13000
accel = -0.2,0

467wolf:2011/01/15(土) 21:44:37
ModifyExplod は動かない事のほうが多かった気がするので
更新タイミングでRemoveExplodしてから再度をExplod実行したほうがいいかも

468Azuma:2011/01/15(土) 22:40:31
えーっと、画面下をぬべーっと煙幕というか雰囲気用の水蒸気流すエフェクトで、自キャラが走ってるように見せるために、走るアニメになると速度が上がるーみたいな演出で使いたいです。

>ModifyExplod は動かない事のほうが多かった気がするので
mjsk

むぅ…一々Removeするくらいなら最初からremovetime設定して消えてもらったほうが良さそうですね。
相手をロックして以降の演出用なので影響与える存在無いですし。

469Azuma:2011/01/17(月) 12:34:30
解決しました、どうやらModifyExplodではvel関連を弄れないようです。

470blank:2011/01/18(火) 22:12:17
初歩的な質問かもしれませんが

HitOverrideをattr別で複数使おうとすると機能しないのですが
良いやり方はないでしょうか?

471blank:2011/01/18(火) 22:36:44
slot分けしても機能しない?
[State 9997]
Type = HitOverride
Trigger1 = 1
Attr = SCA, NA, SA, HA
Slot = 0
StateNo = 9998
Time = 1
[State 9997]
Type = HitOverride
Trigger1 = 1
Attr = SCA, NT, ST, HT, NP, SP, HP
Slot = 1
StateNo = 9999
Time = 1
みたいにすれば打撃喰らったら9998へ、打撃以外喰らったら9999へ移行するようになる
Slotは0〜7まで使えるから最大8種類のAttrに別々のステート振り分けられる
因みに省略時は0だから9998の方の「Slot = 0」は書かなくてもいい

472blank:2011/01/18(火) 23:39:03
Slotなんて知りませんでした
ありがとうございます

473blank:2011/01/20(木) 00:56:22
自分のヘルパーが自分のmid.posより高い位置にいるとき というトリガーを作りたいのですが
trigger1 = Const(size.mid.pos.y) < Pos Y と書いたのですが上手くいきません。
良いやり方はないでしょうか?

474blank:2011/01/20(木) 12:11:39
ヘルパー側のトリガーにするなら
trigger1 = Root,Const(Size.Mid.Pos.Y)+Root,Pos Y < Pos Y
とかでどうだろう

475blank:2011/01/20(木) 20:46:42
>>474
記述の意味が自分では解読不可能ですがそれを貼ったら上手くいきました。
rootはキャラ本体の値を使うってことだけはわかりました。
感激です。ありがとうございました!

476blank:2011/01/21(金) 00:30:43
Helper出した時にHelper独自のMid.Posを設定してなければ
本体と同じ値になるからConstの方にはRoot要らないね


例えば[Size]でMid.Pos = 0,-40と設定していたらConst(Size.Mid.Pos.y)は常に-40になる
この場合、Const(Size.Mid.Pos.y)<Pos yは-40<Pos yと同じで
本体がどこにいるかに関わらず「地面から」40ドットより上にいるって条件

一方、Const(Size.Mid.Pos.y)+Root,Pos y<Pos yは
本体が-30の位置(=地面から30ドット上)にいれば-40+(-30)<Pos yつまり-70<Pos yと同じで
地面から70ドットより上にいるって条件だし
本体が0の位置(=地面)にいれば-40+0<Pos yつまり-40<Pos yと同じで
地面から40ドットより上にいるって条件になる
つまり、「本体から」40ドットより上にいるって条件とみなせる


あと、Const(Size.Mid.Pos.y)<-RootDist yでも可だね
RootDist yってのは本体からの距離ね

477blank:2011/01/21(金) 22:47:53
なるほど Mid.Posはジャンプしても変わらないんですか
だから変化が無かったんですね
詳しくありがとうございます

478デリンジャー:2011/01/23(日) 23:59:52
割り込み失礼します
現在製作中のキャラのサイズを図ってみたところだいぶ小さいと言うことになって
しまったのですこし大きくしようと思うのですがedgeに拡大して保存するような機能
があったはずなのですが忘れてしまいました
どなたか分かる方がいらっしゃれば教えていただけないでしょうか?

479Azuma:2011/01/24(月) 13:01:09
イメージ>拡大縮小>倍率設定
拡大された絵を保存、これでOK

念のために言うと
edgeとかで絵を拡大しても描きなおししない限りドットは荒いまま
なので「CNS側で拡大表示設定する」のと結果は変わらない(むしろ手間の分無駄)

480デリンジャー:2011/01/24(月) 21:18:47
Azuma様教えていただき感謝いたします
試してみたところドットが荒くなってしまいました・・・
サイズはそのままでCNSでサイズを調整したほうが早そうなのでドット自体を大きく
するのはやめようと思います
教えていただき本当にありがとうございました

481wolf:2011/01/25(火) 19:29:34
横からおせっかいながら
倍率を上げて荒くなった部分を修正するのであれば早いほうがいいですよ
もし、まだ立ち絵ぐらいしか書いてない!とかであればなおさら
完成した枚数が多ければ多いほど、あとから修正しようと思ったら大変ですしね

482Azuma:2011/01/26(水) 18:59:44
長方形の画像をひし形に「斜めに歪める」ツールってあるのでしょうか?
__
|  |
 ̄ ̄
 ↓
 _
/ /
  ̄

こんな感じに…回転ではなく角度をつけて歪めるイメージなんですけど…

483blank:2011/01/26(水) 23:21:12
一応ペイントでできる

484Azuma:2011/01/27(木) 18:29:34
確認しました、ありがとうございます!

485blank:2011/01/30(日) 19:43:31
常時監視でattackmulsetを複数使いたいのですが
複数のattackmulsetの条件が一致したときに効果を重複させるにはどうすればいいでしょうか?
例えば1つの条件で攻撃力1.5倍、もう1つの違う条件で攻撃力1.5倍
2つとも条件が一致したときに1.5×1.5で2.25倍になるようにしたいです。
それぞれ常時監視に書いただけでは重複されませんでした。

486Yes:2011/01/30(日) 20:23:55
attackmulsetをvalue = var(?)にしておいて
var(?)を弄繰り回す。

効果を重複させるのは‥‥
無理だったような‥

気がします。

487blank:2011/01/30(日) 23:53:25
一応言っとくとVar→FVarだね
FVar余ってるならFVar2つ使ってFVar(1)*FVar(2)みたいにするのが楽
片方だけ条件満たしてない時は対応するFVarを1にしとくだけでいいし

488blank:2011/02/01(火) 01:11:57
>>486
>>487
仰る通りにしたらできました。
ありがとうございます。

489blank:2011/02/02(水) 20:48:40
ヘルパーにダメージ補正をつけたいと思い常時監視にあるコンボ補正の数値を別のFVarに格納して
ヘルパーのHitDefのdamageに
damage = 元の数値*root,FVar(補正値)と記述したのですが
FVar(補正値)の値がヘルパーを出したときのコンボ数から変わらなくて困っています。
例えば10ヒット中にこのヘルパーを出してコンボが終わった後にヒットしても10ヒットした時のままの補正値になってしまいます。
FVar(補正値)を現在のヒット数にあわせてリアルタイムに変化させる方法はありますでしょうか?

490blank:2011/02/02(水) 23:35:30
HitDefのTriggerを!MoveContact&&!MoveReversedにする

HitDefは実行したら当たる(ガード・当て身含む)か別のHitDefまたはReversalDefで上書きしない限り有効なんだけど
パラメータに変数使っても実行したときの値で計算されてるから
Trigger1 = Time = 0みたいな実行の仕方だとTime = 0のときにパラメータの値が確定して
Time = 6に当たろうがTime = 9999に当たろうが上書きしない限りはTime = 0のときに計算した値で処理される

491Azuma:2011/02/03(木) 21:02:27
P2Nameによる特殊演出を仕込みたいんですけど対象となるキャラが複数体存在しており、公開停止になってるわけではないけど海外製作者だったり色々でデータが入手できないキャラがいます。
「演出発生しなかったよ!」って報告貰わない限りOKって考え方もアリでしょうけど、そもそも公開後に報告来ることも稀ですし…製作者として責任持って設定しておきたいところ。

この手の問題ってキャラ製作してると結構頻発しそうなもんですけど、皆さんはどう解決されているのでしょうか?



…P2Nameの一覧みたいなの公開してるサイトとか無いんでしょかね?

492blank:2011/02/03(木) 23:48:43
P2Nameの一覧サイトは知らんけどP2Nameの一覧と化してるキャラはいるから
cns覗かせてもらうといいんじゃない?

どういうキャラを対象としてるか分からんが、
無数にキャラがいるMUGENで対象全員に対応するのはほぼ不可能だから
把握してる範囲だけの対応でもいいと思うけどね

493blank:2011/02/04(金) 01:03:06
>>490
少しムラはあるけどできました!
ありがとうございます。

494Azuma:2011/02/07(月) 13:37:08
なるほど、ある程度は諦めるしかないということですね。

ありがとうございました。

495デグレ:2011/02/09(水) 21:46:35
東方仗助を作っているのですが、
絵をMUGENに取り込む際、
ジョジョキャラは横83.3%、縦107%という
特殊な縮尺にする必要があるのですが、
そうすると立ちとしゃがみが顔が全く違ってしまいます。
何か良い方法はありますでしょうか?

496Azuma:2011/02/10(木) 09:45:47
原作再現系のジョジョキャラにある、その縮尺は元ゲーの画面サイズ比がMUGEN比較で異なるから
そのまま1:1で表示すると横長のドットになっちゃうのを防ぐ意味で行われてるんだよね。

オリジナルでドット絵を描くんだったら横長のドットになんぞなるわけないんだから
気にせず普通に描いて1:1の縮尺で表示させればいいわけ。

497デグレ:2011/02/11(金) 16:36:37
>>496
>1:1の縮尺で表示させればいいわけ。
そうなると今までの奴を全部書き直す必要が・・・。
なんかそうしないとジョジョらしくないですし・・・。
諦めて書き直すべきなのか・・・、
それとも別の方法を模索すべきなのか・・・。

498Jaldabaoth:2011/02/11(金) 21:50:12
>>497
横から失礼します。
カプコンドットは縮尺が特殊なので、改変に使用する前に改変元スプライトを
MUGEN表示時のサイズ(1:1)に画像編集ソフトで補正してから改変してみては
いかがですか?
私がカプコンドットを何らかの形で使用する際はそうしています。

…今までの作られたドットに関しては1:1サイズに補正してから
細部を打ち直す、という作業が残念ながら必要になっちゃいますが、
それと引換にこれからは動作ごとに顔や他のパーツの整合性が狂うことはなくなりますよ。

499ミネアの人:2011/02/12(土) 04:09:08
>>497
1:1でも1.07:83.3でも自分が描きやすい方を選ぶのが一番ですが、
手描きジョジョは製作者さんが沢山おられるようなので、
サイズ等はそちらを参考にしてみてはいかがでしょうか。

どちらにせよ、早い内に方向性をしっかり定めておかないと
うちのミネアのように修正関係が大変になってえらい事に・・・。

500デグレ:2011/02/12(土) 10:30:56
>>499
オリジナルもほとんどが1.07:0.833です。
けど、そのオリジナルだと
顔がほとんど崩れていないんですよね・・・。

501Yes:2011/02/13(日) 00:29:07
>>500
気のせいですよ。
1:1で補正の入らない素のままの自分のドットを信じて
製作を進めてください。

502Peke:2011/02/14(月) 12:59:04
ttp://muvluv-alternative.game-server.cc/cgi-bin/mugen-up/upload.cgi?mode=dl&file=1160
pass=flygon
空中ダッシュとやらを作ってみたのですが
記述とか匙加減はこんな感じでいいのかな・・・?
(コピペするには長いのでtxt入ってます)

503blank:2011/02/14(月) 23:15:01
Physics=Nのy速度0で水平移動して
途中からStateTypeSetのPhysics=Aで重力付加した方が自然かな

504Peke:2011/02/14(月) 23:46:57
>>503
空中でもN使って問題無かったんですね
地上=N、空中=Aと固執してました・・・
開始Nにしてtime=15でstatetypeset仕込むことにします
ありがとうございました

505Peke:2011/02/14(月) 23:56:28
しまった地上はS/Cじゃまいか
空中蹴りの下降もNで良さそうだなぁ・・・

506blank:2011/02/15(火) 01:54:17
A・・・自動Gravity、Pos y>0で自動ChangeState「52」
S・・・自動VelMul「x=Const(Movement.Stand.Friction)」
C・・・自動VelMul「x=Const(Movement.Crouch.Friction)」
N・・・何もしない
だから空中技は基本的にAで良いんだけど
重力掛けたくない場合や着地ステートが割り込んで欲しくない場合はNにする
(x速度が0固定など摩擦の影響考慮しなくていい場合はSやCでも可)

あと、着地の割り込みはChangeStateなので相手に読ませるステートはAを避けた方が良い
Aにすると着地が割り込んだときにステート奪ってる側のcnsの52へ飛ぶからね

507Peke:2011/02/15(火) 23:17:29
>>506
なるほどなー
取り掛かる時気をつけます

指摘部分入れました ついでに連続使用2回の制限も
ttp://muvluv-alternative.game-server.cc/cgi-bin/mugen-up/upload.cgi?mode=dl&file=1167
pass=flygon

508Azuma:2011/02/21(月) 20:36:20
最後に喰らった攻撃が弱Pとか小足だと崩れ落ちKOになるって記述を入れたいんですが
判断させるのをGetHitVarトリガーとかで行おうと思っています。

HitDefAttr = SC,NAと
GetHitVar(AnimType) = Lightで弱攻撃っぽいのを判断。

更にGetHitVar(Damage) < 30でダメージ量から判断させよう…と、思ったんですが
このトリガー、残りライフが10の状態で威力200の攻撃を喰らった場合も[10]を返してくれちゃいます。

残りHPに関係なく相手の攻撃ダメージの量を判断するor弱攻撃っぽいのを喰らったと判断する方法ってないでしょうか?

509blank:2011/02/22(火) 13:08:35
ダメージ量に関しては例え強攻撃でも
コンボ補正や逆根性値補正で30を下回ることもあるから
あまり当てにならないのでは?

やるとしたら本体のLifeが30以下の時にHelper呼び出して本体に重ねておいて
Helper側のGetHitVar(Damage)使って判定するとかが一番簡単なんじゃない?
相手のHitDefにHitOnce付いてると上手く取得できないけど

510Azuma:2011/02/22(火) 21:31:30
むむぅ、死にかけ限定でヘルパー使って判断ですか;
だとするとHitOnceの件も含めてアテにならな過ぎる可能性がありそう

諦めるかなー


>あまり当てにならないのでは?
なので、3つのトリガー重ねて信頼性高める(範囲も減っちゃうけど仕方ない)予定でした。

511仮面魔獣:2011/02/22(火) 22:10:57
現在AIの作製にとりくんでるのですが
[State -1, 引き裂き]
type = ChangeState
value = 210
triggerall = var(59)>0 && roundstate = 2 ; AIフラグON、戦闘中
triggerall = power <= 5000 ; ゲージ5000以下
triggerall = p2statetype != A && p2statetype != L ; 相手が地上で、ダウンしていない
triggerall = p2bodydist X = [0,30]       ; 相手が0〜30の距離にいる
trigger1 = statetype = S
trigger1 = ctrl
trigger2 = stateno = 200
trigger2 = time > 10

でバグが出てMUGEN自体が落ちてしまいます。
triggerall = p2bodydist X = [0,30]に;を打って無効にするとちゃんと他は起動できるのですが何が原因なのでしょうか?

512blank:2011/02/22(火) 22:44:50
triggerall = p2bodydist X = [0,30]       ; 相手が0〜30の距離にいる
↑この部分が全角スペースになっているから

513仮面魔獣:2011/02/23(水) 00:57:21
>blankさん
全て半角のはずです。
別の
[State -1, 氷柱蜂起]
type = ChangeState
value = 900
triggerall = var(59)>0 && roundstate = 2
triggerall = p2statetype != A
triggerall = p2bodydist X = [-15,25]
trigger1 = statetype != A
trigger1 = ctrl
trigger2 = stateno = 200
trigger2 = time > 10

はちゃんと動きましたし・・・

514blank:2011/02/23(水) 02:52:00
矢印がずれてしまったので分かりにくかったかも知れません
[0,30]の後ろのスペースが全角になっているということです
記述の方がどうなっているかは分かりませんが>>511をコピペしたら全角になっていたので

515仮面魔獣:2011/02/23(水) 09:34:29
>blankさん
そちらでしたか(汗
たしかに全角でしたが関係なかったみたいです・・・

516Peke:2011/02/23(水) 12:25:19
多分ですが…
triggerallにp2statetypeかp2statetype=!が使えないかも
trigger1・2に動かしてみてはどうでしょうか?

-`)oO(確かtrggerall=stateno!=は蹴られるんだよなぁ…

517Peke:2011/02/23(水) 12:38:21
あとはp2トリガーはallに使えないとかallの中に2個あるからとかかなぁ…
鬱姫のAI作った時allにはp2トリガー入れなかったと思います
タブンネ

518Peke:2011/02/23(水) 12:42:07
3レスもすいません
タッグでゾンビになるのでtriggerall=alive=1も入れといた方がいいですよ

519仮面魔獣:2011/02/23(水) 14:31:44
>Pekeさん
できました。ありがとうございます
ゾンビは困りますからね。

520Azuma:2011/03/01(火) 23:27:20
Randomで-120から120の範囲で乱数を発生させる記述って、ないでしょうか?

Ceil(Random/10+Random/50)
という記述で強引に0〜119を発生させることは出来るハズなのですが…

これだと範囲が1足りてないのが困るのと、プラスマイナスを出させる記述が思いつかなくて困っています;

521wolf:2011/03/02(水) 00:02:40
(Random%241)-120
こんなんでいけない?

522blank:2011/03/02(水) 00:07:20
普通に「-120+Random%241」でいいんじゃない?
まあ0〜999を241で割った余りだから0〜206と207〜240とで確率が少し異なるけど

±を発生させる方法なら「1-2*Random%2」がある

523仮面魔獣:2011/03/02(水) 01:21:52
タイムアップ時、特定数回復ってどうするのでしょうか?

[State -2];ラウンド終了時 ライフ回復
type = lifeadd
triggerall = !ishelper
trigger1 = roundstate > 2
trigger1 = alive
value = 100
ignorehitpause = 1

でやったのですがこれだと100回復した後、全快になってしまいました・・・

524blank:2011/03/02(水) 03:57:37
それだとトリガーが持続的に成立して何度も100回復しちゃうからね
常時監視ではPersistent使えないからVar使って回復済みフラグ立てて
そのフラグをトリガーに組み込むのが手っ取り早いかな

TriggerAll = !IsHelper
TriggerAll = RoundState > 2
TriggerAll = Alive
Trigger1 = Var(0) = 0
Trigger1 = Var(0) := 1;Var(0)に1を代入
みたいにすれば1度しか成立しなくなる
あとはRoundState < 2を条件にフラグをリセットしてあげれば2ラウンド目以降も実行できる

525Azuma:2011/03/02(水) 12:22:12
>>522
>>521

上手くいきました!ありがとうございますー

526仮面魔獣:2011/03/02(水) 16:07:13
>blankさん
出来ました!ありがとうございます

527Jaldabaoth:2011/03/02(水) 18:46:28
通常攻撃(しゃがみ強P)を作っているのですが、
本体の動作とは別に、Explodを使って透過させた武器を持たせるように表示させています。

airのフレーム数を合わせると空振り時は問題ないのですが、
相手にヒットすると武器側はそのままの速度で動き、身体の方が遅れてズレてしまいます。

できればヒット時も身体と同期するようにしたいのですが、何か対処方法はありますでしょうか?

528blank:2011/03/02(水) 23:32:56
>>527
Explodのステコンにignorehitpause = 0

529社咲:2011/03/02(水) 23:33:55
Jaldabaothさん
こういうのはどうでしょう?

Explodを二つ用意して、ひとつは通常の最後まで武器を振るアニメ、
もうひとつは、攻撃がヒットしてからのアニメを用意します。

通常のほうはRemoveExplodのtriggerをmovecontactで、攻撃がヒットしたら
いったん消す。
そして、もうひとつのExplodで攻撃後のアニメを表示させる。
というものです。

攻撃後のアニメは自分のpausetime分フレームをプラスしておいてください。
あと全部のステコンにIgnoreHitPause = 1をつけるのをお忘れなく。

説明が下手ですみません・・・
もしわかりにくかったら遠慮なく言ってください。

530社咲:2011/03/02(水) 23:35:56
おっと、ずいぶん簡単な方法が出てましたねww

531blank:2011/03/02(水) 23:48:03
詳しく言うと通常のステコンはデフォルトがignorehitpause = 0 なのだけど、
Explodだけはデフォがignorehitpause = 1。
なのでignorehitpause = 0 を明記してやるとちゃんとhitpauseがかかるのですよ。

532Jaldabaoth:2011/03/03(木) 00:35:25
>>528
ありがとうございます。本体動作と同期するようになりました。

>>528
回答ありがとうございます。
今回は使用しなかったのですが今後のcns製作に活かしたいと思います。

内容としては
1.攻撃「ヒット」「空振り」2つのExplodを用意
2.相手との接触をトリガーにして「空振り」動作を消す
3.「ヒット」Explodで攻撃終了動作まで移行
4.「ヒット」Explodはヒット時の停止時間分フレームを増やす
5.他の動作部分(ステコン)はヒット停止時間の影響から除外する

という記述方法だと解釈しました。自信ないですけど…;

>>531
Explodに限り、ヒット時の停止時間の影響を無視する仕様なんですね。
そして、あらためて追記することでヒットしても同じ速度で動いてくれる、と。

すごいです。教えていただかなければ多分自力では辿り着けなかった…
説明ありがとうございます。とても勉強になりました。

533Jaldabaoth:2011/03/03(木) 01:14:15
>532
真ん中のレス番号間違えてます。529の社咲さん宛の回答です。すいません。

534社咲:2011/03/03(木) 16:24:19
>>532
はい、そんな感じです。
イメージとしては投げ技のステートをExplodでやっただけみたいな感じです。

>>531
それは知らなかったですね。
proj〜関係もそうですけど、何でところどころ統一されてないんでしょうか・・・
使ってて結構混乱してしまいます・・・

535blank:2011/03/03(木) 17:19:27
単純にExplodがエフェクトとして使うことを想定されてるからかと
エフェクトにヒットポーズかかるのは変でしょ?
DamageとかGuardFlagは別だけど、大抵のパラメータは最も多く使われるであろう設定を初期値にしてあって
わざわざ記述しなくてもいいようにしてあるってこと

536blank:2011/03/03(木) 20:41:13
MUGEN の doc フォルダに使えるステコン全部書いてるファイルありますよ。
一度見てみると良いかも。省略時の設定値とかも全部書いてあります。
全部英語なので読みにくいですが、思わぬ発見があったりしますよ。
PlaySnd の設定に Volume の項があったりとか。

ちなみに、知っているかもしれませんが、そのファイルを翻訳しているサイトも存在します。
こちらは日本語。解説のほかに本家のほうに説明が無いバグとかも確か載ってたはず。

537Azuma:2011/03/06(日) 22:34:29
キャラ製作と言うよりかAIの話なのですが

飛び道具技で、発動後に角度を選択して、更にチャージ可能な技を撃たせる記述を作りたいです。
暗転発生23F+暗転後4F、下記4種類から選択して120Fまでチャージ可能と言う仕様です。

座標 速度 角度
(21,-73) (20,0) 0°
(46,-81) (25.02,-4.98) 13°
(18,96) (15,-15) 45°
(30,-100) (8.68,-21.34) 64°


技の発生命令、発動水平角度の射撃だけならば

[State -1, ChangeState__Blast_Pegasus/Ground]
type = ChangeState
value = 3400
triggerAll = var(58)
triggerAll = StateType != A && P2StateType != L
triggerAll = Power >= 1000
triggerAll = EnemyNear,StateType = S
triggerAll = EnemyNear,NumProj
trigger1= Ctrl ||(StateNo = [21,22])||(StateNo = [100,101])
trigger1= EnemyNear,MoveType != H
trigger1= P2BodyDist X >= 200+Vel X*5+EnemyNear,Vel X*5

…という記述で大丈夫だったのですが、角度選択をさせるための
「速度(a,b)で座標(x,y)から発射される角度nの射線の延長線上に来る」と予測させる記述が作れませんでした。
加えてチャージさせるか否かを判断させるための「射線上にnF後もいる」と計算させる記述も同様にわかりませんでした。

たぶん三角関数を使うんじゃなかろうかとは思うのですが…


なお、角度選択は変数で認識させており
cmdではなく技のステコン内の下記記述で管理しています。
[State 3400, VarSet]
type = VarSet
trigger1=!var(59)
trigger1= Command = "y"
var(10) = 0



お手数ですが、御存知の方はご教授願います。

538blank:2011/03/07(月) 01:51:42
速度(a,b)で飛ぶんだったら傾き=b/aだから
P2Dist y/P2Dist xがb/aと一致するか見ればいいんじゃない?
つまりP2Dist y*a=P2Dist x*bだね
割り算のままだと分母が0のときエラメ出るから掛け算に直してるけど

nF後は
(P2Dist y-n*EnemyNear,Vel y)*a=(P2Dist x-n*EnemyNear,Vel x*Facing*EnemyNear,Facing)*b
とかかな
xに関しては向き合ってるとは限らないからお互いのFacingかけた方がいいかと
あとは上の式だけだと発射方向の180度反対にいる場合でも成立しちゃうから
P2Dist x>0とかを併用した方がいいね

539blank:2011/03/07(月) 01:56:09
補足だけど完全一致だと条件厳しいだろうから
P2Dist y*a=[2/3*P2Dist x*b,3/2*P2Dist x*b]
みたいに幅を持たせた方がいいだろうね

540Azuma:2011/03/07(月) 10:41:08
ありがとうございます!

とすると、例えば4F後に射線上にいるかの判断は相手の速度etcを踏まえるなら
trigger1=P2Dist X > 0
trigger1=Facing!=EnemyNear,Facing
trigger1=(P2Dist Y+EnemyNear,Vel Y*4+EnemyNear,Const(Movement.yaccel)*4*4/2)*a=(P2Dist X+EnemyNear,Vel X*4)*b

・・・という式になるとの解釈で大丈夫でしょうか?


それと、角度に関しては完全一致でなく判断に揺らぎを持たるべきーとあったので考えてみたところ

例えば±5°の範囲であればOKと認識させるなら
速度(a,b)を±5°それぞれで計算しておき、その傾きの範囲内にあるかを判断させる式になるのですが
射線上から±5°というのを先程の式に加筆して判断する方法は…ないものでしょうか?

541blank:2011/03/07(月) 23:34:20
重力のこと忘れてたけどそんな感じだね

tan(α+β)=(tanα+tanβ)/(1-tanα*tanβ)
tan(α-β)=(tanα-tanβ)/(1+tanα*tanβ)
だから5°の振れ幅を計算するためにtanαをb/aとしてβを5°としたら
+5°は(b/a+0.0875)/(1-b/a*0.0875)で-5°は(b/a-0.0875)/(1+b/a*0.0875)だから
P2Dist y/P2Dist x=[(b/a-0.0875)/(1+b/a*0.0875),(b/a+0.0875)/(1-b/a*0.0875)]
という感じになって非常に面倒臭いと思うよ

だから2/3倍と3/2倍みたいな感じの妥協案を出したんだけど
今思ったら角度に振れ幅持たせなくても軸座標に振れ幅持たせるだけでいいね
あと、発射角度が4種類だけなら場合分けすれば複雑な計算式要らない気もする

542Azuma:2011/03/08(火) 13:52:49
軸座標を含めて計算させるのであれば
先程の式に座標(β,γ)を混ぜてP2Distの値が変化するように
P2Dist X-β
P2Dist Y-γで、計算させれば良いということになる…のでしょうか?


実際のトリガーは
triggerAll = P2Dist X > 0
triggerAll = Facing!=EnemyNear,Facing
trigger1 =(P2Dist Y-γ+EnemyNear,Vel Y*4+EnemyNear,Const(Movement.yaccel)*4*4/2)*a=(P2Dist X-β+EnemyNear,Vel X*4)*b
trigger2 =(P2Dist Y-(γ-1)+EnemyNear,Vel Y*4+EnemyNear,Const(Movement.yaccel)*4*4/2)*a=(P2Dist X-(β-1)+EnemyNear,Vel X*4)*b
trigger3 =(P2Dist Y-(γ-2)+EnemyNear,Vel Y*4+EnemyNear,Const(Movement.yaccel)*4*4/2)*a=(P2Dist X-(β-2)+EnemyNear,Vel X*4)*b



trigger10=(P2Dist Y-(γ+1)+EnemyNear,Vel Y*4+EnemyNear,Const(Movement.yaccel)*4*4/2)*a=(P2Dist X-(β+1)+EnemyNear,Vel X*4)*b
trigger11=(P2Dist Y-(γ+2)+EnemyNear,Vel Y*4+EnemyNear,Const(Movement.yaccel)*4*4/2)*a=(P2Dist X-(β+2)+EnemyNear,Vel X*4)*b
trigger12=(P2Dist Y-(γ+3)+EnemyNear,Vel Y*4+EnemyNear,Const(Movement.yaccel)*4*4/2)*a=(P2Dist X-(β+3)+EnemyNear,Vel X*4)*b




これでいいのかな?
長い上に効率悪い表記の気もしますけど…

543blank:2011/03/08(火) 16:55:12
軸座標というには語弊があるけど
(P2Dist Y+EnemyNear,Vel Y*4+EnemyNear,Const(Movement.yaccel)*4*4/2)*a=(P2Dist X+EnemyNear,Vel X*4)*bの右辺を移項して
(P2Dist Y+EnemyNear,Vel Y*4+EnemyNear,Const(Movement.yaccel)*4*4/2)*a-(P2Dist X+EnemyNear,Vel X*4)*bの値が特定の範囲内をとる時成立、すまり
(P2Dist Y+EnemyNear,Vel Y*4+EnemyNear,Const(Movement.yaccel)*4*4/2)*a-(P2Dist X+EnemyNear,Vel X*4)*b=[-40,40]みたいにするってこと

いくらトリガー増やしたって単純な等号で指定してる限り殆ど成立しないと思うよ、>>542みたいな記述だとね
Trigger1 = Vel x = -2
Trigger2 = Vel x = -1
Trigger3 = Vel x = 0
Trigger4 = Vel x = 1
Trigger5 = Vel x = 2
みたいに設定してるようなもんだからVel xが1.5でも成立しないし-0.4でも成立しない
>>539>>541で言いたかったのは[,]とか(,)とか[,)とか(,]を使わないとAIは一向に技出してくれないよって話

厳密に計算したいんだったらP2Dist yとP2Dist xそれぞれに幅を持たせるべきなんだろうけど
相手の動きも単調じゃないし喰らい判定も多様だから
厳密に計算したって当たらないときは当たらないし労力に見合う出来は期待できないと思う

544Azuma:2011/03/08(火) 17:51:17
あ、そっか
単純に算数で考えればよかったんですね。
[,]の範囲指定は知っていたんですけど、この記述に用いるとこで躓いてました;

基本の理屈は掴めたので後は実機で試しつつ組んでみようと思います。
ありがとうございました!

545Azuma:2011/03/19(土) 21:31:47
ストライカー召還記述についての質問です。


本体がストライカー召還技を発動
ストライカーの種別判断としてVarSet&演出用の親ヘルパーを召還

親ヘルパーが演出用の兄ヘルパーを召還
兄ヘルパーは「本体のVarを参照」して自身のアニメを設定

兄ヘルパーが39F目で演出を終えて消滅
親ヘルパーは39F目に「本体のVarを参照」してストライカーの役割を担う弟ヘルパーを召還
親ヘルパーも40F目で消滅

弟ヘルパーがストライカーとして行動する。


ざっくりと書くとこういった流れで動くストライカー召還技が存在します。
この方式の場合、親ヘルパーを召還してから「弟ヘルパー」が召還されるまでの40Fの間に親が更に別のストライカーを召還しようとすると
本体のVarが上書きされてしまうために兄ヘルパーと弟ヘルパーのアニメが違うものになってしまいます。

そこで、複数体同時に召還することも出来るような処理に変えたいのですが、解決策として現状浮かんでいるのが
[親ヘルパーが本体のVarを自身のVarに記憶し、兄ヘルパーのアニメと弟ヘルパーの召還にそれを用いる]というものです。

[1.]この方法以外に良い方法はないものか?
[2.]IDとStateNoの同じヘルパーは変数を共有するのか?(←そもそもヘルパーの変数がどういった扱いなのか理解できていない)
[3.]「0〜40で順番にVarを使って行き、40まで使ったら再び0からVarを使う」というVarSetの記述はどうすればよいのか?

以上3点について、お聞きしたいです。
御存知の方はご教授いただけますよう、お願い申し上げます。

546BKDS:2011/03/19(土) 22:12:50
>>545

[1.]
演出アニメもストライカー別にあるのなら親兄弟ではなく1つにしたほうが楽かもしれません

・本体が直接ストライカーを生成(出現は画面外でいいのかな?)
・ストライカーが自分用の演出アニメを本体の位置に描画
・40F経過したら普通にストライカーとしての動き

[2.]
確認していませんがおそらく「変数はヘルパーそれぞれが独立保持」だと思います
変数で速度等を保持している飛び道具もありますし。
質問で言っているIDはおそらくHelperIDであり、それとは別にPlayerIDというのも自動で割り振られますので
それを用いて内部処理しているものと思われます。

[3.]
例:0〜40のうち現在使っている番号をvar(41)で保持する

[state 1000, A]
type = varset
trigger1 = time = 0;■
v = var(41)
value = 入れたい値

[state 1000, B]
type = varset
trigger1 = time = 0;■
var(41) = (var(41) + 1) % 41

トリガーのまったく同じ2つのvarsetを用意
ラベルAのvarsetでvar(41)のvalue番号のvarに「入れたい値」が入ります
その後にvar(41)を1加算し、40をオーバーしているのなら0に戻します

547blank:2011/03/19(土) 22:43:24
まず、[2.]だけど
本体やヘルパーには個別にメモリ領域が割り当てられていて、本体は固定だけどヘルパーは生成時に割り当てられる。
そして変数は各個体のメモリ領域で管理してるからVarの共有は一切ない。
Helperステコンのパラメータで設定したIDが同じでも、実行中のStateNoが同じでも、別々のヘルパーであれば別々に変数管理している。

[3.]は例えば
Varに格納したい数値が3桁の場合だったら
[State ]
Type = VarSet
TriggerAll = Var(39)-Var(39)%1000!=Var(40)-Var(40)%1000
Trigger1 = 条件
V = 40
Value = Var(39)-Var(39)%1000+数値


[State ]
Type = VarSet
TriggerAll = Var(0)-Var(0)%1000!=Var(1)-Var(1)%1000
Trigger1 = 条件
V = 1
Value = Var(0)-Var(0)%1000+数値
[State ]
Type = VarSet
TriggerAll = Var(40)-Var(40)%1000=Var(0)-Var(0)%1000
Trigger1 = 条件
V = 0
Value = 1000-(Var(40)-Var(40)%1000)+数値
ってやれば千の位が0か1かで次に使うべきVarを判定しながら使える
Var(0)だけTriggerAllとValueの式が他と異なるから注意
あと、各Varを読むときも「Var(0)%1000」のように読まないといけない

[1.]についてはないんじゃないかな
まあ親ヘルパーのVarの代わりに親ヘルパーのSize.HeightやSize.Air.Backなどを使ってもいいと思うけど

548blank:2011/03/19(土) 22:48:54
あ、[1.]はストライカー召喚全体の流れに関してか…
それなら>>546の言う通り1つのヘルパーで纏めてやった方がいいと思う

549Azuma:2011/03/20(日) 21:43:40
どうにかなりそうです! ありがとうございました!

550夜業:2011/03/24(木) 12:24:24
リザレクションを作っているのですが…
どうしてもラウンドが終わってしまいます
どうしたらいいでしょうか?


[State -2, SelfState]
type = selfstate
triggerall = life <= 0 || gethitvar(damage) >= life
triggerall = life != 0
triggerall = alive
trigger1 = StateType = L
trigger1 = power >= 5000
Trigger1 = Var(0) = 0
Trigger1 = Var(0) := 1
value = 4010
ignorehitpause = 1

551夜業:2011/03/24(木) 13:49:49
すいません自己解決しました…




掲示板管理者へ連絡 無料レンタル掲示板