Profile

アメリ

Author:アメリ
キャラ紹介

line
カテゴリ
AIR (1)
Pos (1)
Var (1)
FAQ (1)
line
不許カウンター
line
最新記事
line
最新コメント
line
最新トラックバック
line
月別アーカイブ
line
sub_line
カレンダー
06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
line
検索フォーム
line
リンク
line
RSSリンクの表示
line
QRコード
QR
line
ブロとも申請フォーム

この人とブロともになる

line
sub_line
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
line
・helpertype=normalとplayer
 最も簡単なヘルパーの出し方は次の通りです
[State ]
type = Helper
trigger1 = 1

 mugendocを見るとわかりますがHelperに必須パラメーターは無いので指定した場合の動作は様々です。
 上記だと最大数までノーマルヘルパーがプレイヤーの位置に出現します。何も指定していないのでプレイヤーと同じ動きをします。ヘルパーにはノーマルヘルパーとプレイヤーヘルパーがあります。違いは次の通りです。
・helpertype = normal
 基本的に画面外に出られる。keyctrl=0
・helpertype = player
 基本的には画面の中を動く。keyctrl=1。カメラがついてくる。[statedef -2]を読み込む。

 大体はこんな所です。デバッグ文字を見るとわかりますが勝手にキャラクターの名前がついています、しかしヘルパーのname部分はゲーム内で参照できないのでname="演出用ヘルパー"の様な判定は出来ません。nameはdefファイルの部分を参照するだけです。

 ノーマルヘルパーは出すとその場に止まります。
 プレイヤーヘルパーを自在に動かしたい場合はctrlをステート内や-2ステートで0にして個別に動かす必要があります。

 ヘルパーを消す時はエラー落ちしない様にExplodを消してから消しましょう。また、同じヘルパーをそのフレーム内で出したり消したりするとエラー落ちするので気をつけましょう。

 と言うわけで実際にはこんな感じになります。
[state , call helper]
type = Helper
trigger1 = !IsHelper
trigger1 = NumHelper(1600) = 0

helpertype = normal
name = "kfm"
id = 1600
pos = 0,0
postype = p1
facing = 1
stateno = 1600
keyctrl = 0
ownpal = 0
supermovetime = 0
pausemovetime = 0
size.xscale = 1
size.yscale = 1
size.ground.back = 15
size.ground.front = 16
size.air.back = 12
size.air.front = 12
size.height = 60
size.proj.doscale = 0
size.head.pos = -5,-90
size.mid.pos = -5,-90
size.shadowoffset = 0

 size関係はヘルパーの設定になるので最初はプレイヤーキャラの[data]部分と同じ値を入れておきましょう。
 state 1600は自分で作る必要があります。Hitdefで攻撃したり攻撃を食らうヘルパーの場合はhitoverrideをつけておいて食らいステートに移動させないとプレイヤーの食らいステートに移ってしまいます。

 必須項目はありませんが全部の値を指定しておくようにしましょう。
スポンサーサイト
line
State controller "Helper"
・Creates another instance of the player as a helper character.
 ヘルパーとは新しく「プレイヤーキャラ」を作ります。
 Helperを作る時に一番理解するべきはこれです。参考になりそうなサイトは幾つかありましたがどこをみても何となくしか説明がありませんでした。

 話は変わりますがProjectileはそれとHitdefの中身を記述すればほぼ設定は終わりで作成されます。
移動、当たった時、消える時、等の一通りの設定をするのでこれだけでキャラクターの設定をしているのに近いです。その分と言っては何ですが、主に直線的な行動にしか使えませんし当たると消えてしまうのでお手伝いキャラとしても微妙な所です。

 さて、話をHelperに戻します。kfmの中身をざっと眺めてProjectileは一応作った所まで進んだとします。初めて作る場合に取りあえずtype=Helperと書き始めてProjectileと似た様に記述した場合どうなるでしょう。食らい判定のあるHelperだとするとHelperが食らった場合に操作しているプレイヤーと同じ絵になります。しかもプレイヤーとして画面に残ります。
 Projectileとの大きな違いはここです。Helperはプレイヤーなのです。

 Projectileはただの爆発みたいな物ですがHelperはプレイヤーと同じ挙動をします。プレイヤーと同じ様ににステートを持っていて同じ様に挙動します。
でもそれだと困りますよね。プレイヤーが分身するだけだったら使い物にならないわけでして。

記述の流れとしては(色々省略、アニメーションは忘れずに!)

;----------------------------------------------------------------------

;ヘルパーを出す
[statedef 1500]


[state 1500, Helper]
type = Helper
trigger1 = AnimElemTime(1) = 0 ;アニメの1コマ目,0フレームで出る。
id = 1500
stateno = 6000 ;helperの開始ステート
size.shadowoffset = 6000  ;固定ステート番号を入れておく。head.posとかでも。

;今作ったヘルパーの開始ステート
[statedef 6000]


[state 6000, HitDef];攻撃したい場合。
type = HitDef

[state 6001, HitOverride];食らった時に移るステートの設定
type = HitOverride
trigger1=ishelper(1500) ;1500番のhelperの場合。
attr = SCA,NA,SA,HA,NT,ST,HT,NP,SP,HP ;全ての属性の攻撃に対して
stateno=6010 ;何かの攻撃に当たった時に移るステート

[state 6000, DestorySelf];適当に画面外にいったら消える
type = DestorySelf
trigger1 = Pos X < -300 + (Facing * 320)
trigger2 = Pos X > 300 + (Facing * 320)

[state 6001, ChangeState]
type = ChangeState
必要であれば。入れないとループする。

;食らい状態
[statedef 6010]


[state 6010, DestorySelf]
type = DestorySelf
trigger1 = AnimTime = 0 ;アニメーションが終わったら消える。

;----------------------------------------------------------------------
こんな感じになります。Wikiを見ながら適当に直したり書き足して使ってください。

 もしもコピペしたならば日本語の説明を消しましょう。こんなに書いてあると読みづらいです。必要だと思う所だけ書きましょう。

手順としては、
 ステート1500でヘルパーを呼ぶ>ChangeStateでステート0に戻して終了。
 ヘルパーが呼ばれてステート6000を実行する。食らった場合に6010に行く様に設定する。
 (Timeがある程度以上になったら6010に行く様にしておかないとずっとそのままになります)
 ヘルパーが食らうと6010に移動してアニメの最後に到達したら消滅する。

 リンクの mugendocs(1.0)wiki(oldwin) を参考にしてください。英語の説明文ですが、冒頭の説明を読むだけでも意外とわかったりします。どこかで翻訳してきても良いですね。
 helperを作る時に必要なのはステートの管理です。Projectileの様に作って終わりにならない上に、上記の様に設定しないとプレイヤーと同じ挙動をしてしまうので食らい判定がある場合は画面上にプレイヤーみたいなものが残ってしまい非常に困った事になります。
 相手から干渉を受けない様にするには-2ステートでNotHitByを使いましょう。attr=SCA,time=1を設定しておけば何も当たりません。但しHitdefを出すとreversaldefされる可能性があるのでmovereversedされたら食らうなり終了するなり-2ステートで設定しておきましょう。

[state -2, NotHitBy for Helper]
type = NotHitBy
trigger1 = IsHelper(1500) || Const(size.shadowoffset) = 6000
attr = SCA
time = 1

・食らった時の挙動を変化させるステートコントローラがHitOverrideです。
・食らったらhelperを消す必要があると思います、それがDestroySelfです。
・攻撃後も必要があればDestroySelfで消さないといけません。

 サブキャラの様にずっと居続ける様なキャラを作る場合には立ち、攻撃、食らい?とかを考えてステートを全部かかないといけません。とても面倒ですね。説明が少ない訳にはこういった事情があると思います。ヘルパーはプレイヤーの子になります。ヘルパーから見た場合にプレイヤーは親になります。
 helperを使う場合には少なくともDestroySelfと必要ならHitOverrideのステートコントローラーを使うわけです。細かい事はmugen wikiをみて下さい。追従するキャラを作る場合にはbodydistとかのトリガーを駆使しないと作れません。bindを使えばくっつきますが・・。helperを作るはずがいつの間にかhelperを求めて居た・・と言う事になりかねませんね(笑
 ちょっと凝った事をすると大変ですが、DestroySelfとHitOverrideが使えれば多少は作れると思います。プレイヤーの分身を作る場合はHitOverrideする必要はないかも。~ズみたいな・・。

 SelfStateと言うのもありますがこれは自分のステートに戻す時に使います。よくあるのはHitdefの投げやRevarsalDefのp2state等で相手に自分のステートを参照させている場合に相手を相手のステートに戻す時に使います。AI用のヘルパーの様に当たり判定を出さず何もしないヘルパーは常時SelfStateしていても良いと思います。
ヘルパーIDは取得できない場合もあるので(そのヘルパーでヘルパーの最大数になった場合)constの値にステート番号を入れておくと参照に使えます、6000-9999辺りがいいでしょうか。プレイヤーと明確に分ける為に1万以上を使っている人が多いみたいです。

 但しヘルパーの上限数は56です(mugen.cfgで設定した場合で何故か初期値は36とかです)。mugen.cfgを弄ってもそれ以上出せないみたいです。4キャラ対戦を考えると14が限度と思ってください。2キャラまでの普通の対戦なら28ですね。上限になるとお互い新しく出せないので常時56使っているキャラはただのお邪魔キャラになってしまいます。そもそも56個も見えるヘルパーがあったら邪魔ですね(笑


 その他の注意点
1. ヘルパーを消す瞬間に type = Explod を出すとエラー落ちする
2. ヘルパーを消すのと同時にプレイヤーが type = Helper を出すとエラー落ちする
以上のです。
 destroyself, hitoverride, nothitby を適切に使えば大丈夫だと思います。

line
line

line
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。