やってるゲームとかの雑記
(私信)ドタバタしてまして遅れて大変申し訳ございません。ロープショット系の技の解説です。


01_2015090416580756c.png

[用意するもの]
・本体がロープを投げるまでのアニメ(1)
・本体がロープを投げ、ロープが飛んでいっている最中のアニメ(2)
・敵にロープがヒットし、引き寄せるまでのアニメ(3)(4)
・敵を引き寄せて特殊くらいにするアニメ(5)   ←オプション項目です
・敵にロープがヒットせず、空振りしている間のアニメ(6)
・敵にロープがヒットせず、手元に戻ってきてキャッチするアニメ(7)

・伸びていくロープのアニメ(2)   ←ロープが最短から始まり最長に行くまでのアニメ
・縮んでいくロープのアニメ(3)(7)  ←ロープが最長から始まり最短に行くまで(逆回し)アニメ



大前提として、まずは先に「自分の体から離れた所に攻撃判定を出し、そこから引きずる」という技を作ります。
また、条件がややこしくなるのを防ぐためにここでは
・ロープは毎F(1F)ごとに伸びていき、再到達点まで行ったら戻ってくることとする
・ロープが戻ってくるのも毎F(1F)ごとに縮んでいくものとする
とします。もしご自分でここを調整したい場合は適時調整してみてください。
ロープ関連は後から飾りとして付けますので、まずは忘れてください
分かる場合は平行して組んでも構いませんが、わからないのであればロープに関しては
先にスプライトだけ作って本体の動きを作ってください。

[1:ロープを投げるまでのアニメ]
解説割愛。ロープを投げるまでの予備動作がある場合はここでなんとかしてあげてください。
ボイス、エフェクト等ある場合はここで。

[2:ロープを投げて伸びていくアニメ]
ロープが伸びていく間本体が取るポーズのアニメを作っていきます。
同じ1Fのコマをコピーしまくって増やし、ロープが再到達点に行くまでと同じ数にします。
そして、そのコマにいる時にロープの先端があるであろう位置にhitdefをつけていきます。
ロープのスプライトを作る際に毎コマ、キリの良いpixel数ぶん伸びていくように作っておけばロープの長さは

(ロープが1コマで伸びる長さ) ×コマ数 = ロープの長さ

という簡単な式で求めることが出来ます。例として、1コマで20pixel伸びていくと考えると

1コマ目:本体から20ピクセルの位置
2コマ目:本体から40ピクセルの位置
3コマ目:本体から60ピクセルの位置
           …

のように指定できますので、airの攻撃判定を編集する際にはメモ帳で開いてテキスト作業すると楽です。

ここでもう一工夫する必要がありまして、それはロープの今の長さを変数に入れておく事です。
というのは、animelem情報はステートが変わってしまえば完全に破棄されてしまうので、
このステートに居るうちにきちんと保存しておき、相手に「どの位置で」当たったかを保存しておかないと
次のあたったステートで「当たった位置から」の巻き戻しができないのです。
なので、ロープの今の長さを指定するのですが、前提条件にあるように1F=1毎としているので、

var(ロープの長さ用の変数) = time

で簡単に拾うことができます。もしロープが伸びる長さを変えているのであれば、ここでvarに
ロープの長さ情報を代入する条件を変えてあげてください。

[Statedef (2),ロープを投げるアニメ]
type = S
movetype= A
physics = S
juggle = 4
velset = 0,0
anim = ロープ投擲のアニメ
ctrl = 0
sprpriority = 2

[State 2100,現在の変数設定]
type = varset
trigger1 = time < 23
var(14) = time

[State 2100,攻撃判定]
type = attackdist
trigger1 = time < 23
value = 1000

[State 2100,攻撃判定]
type = HitDef
trigger1 = 1
ID = 2100
(略)
p1stateno = (3)のステートへ ;投げが成功した場合の移動する自分のステート
p2stateno = (3)のステート用の暗いステートへ ;投げが成功した場合の移動する相手側のステート


[State 2100,終了]
type = changestate
trigger1 = animtime = 0
value = (7)のステートへ

[3:ヒット硬直の表現]
ヒット硬直を表現したい場合はここで適当に数F~数十Fぐらいのウェイトを入れます。
単に「なにもしないで規定のF数が経過したら次へ行く」とすればOKです。
time = 規定のF数をトリガーにして(4)のステートへ行ってあげてください

アニメは敵にロープがヒットし、引き寄せるまでのアニメを使います。このアニメもロープを投げる時と同じく
ロープのアニメーション枚数と同じ枚数ぶんコマを作っておいてください。

[State 3,ヒット硬直の表現]
type = changeanim
trigger1 = 1
anime = (3)のアニメ番号
elem =( (3)のアニメ枚数+1 ) -上で使ったロープの先端把握用のvar

このステコンを使うことでアニメが常に(3)用のアニメのelem枚目に変更されて固定されます。
(3)のアニメ枚数+1なのはanimが0枚目からになるのを防ぐためです(MUGENではアニメ番号は1から始まる)
例えば前のフレームで22枚め(22×20=440pixel)の位置にロープの先端がある状態でヒットした場合は
23-22=1で、1枚めから始まると都合が良いのです。逆に前のフレームで1枚めの位置にロープがある状態で
ヒットした場合は23-1=22で、22枚めから始まると良いですね。
ここで同数を指定してしまうとアニメの指定がうまくいかないために頭から再生されてしまいます。

[4:戻ってくるロープの表現]
このステコンではロープの先端把握用のvarを操作しながら相手をそれに合わせて引きずります。

[State varの操作]
type = varadd
trigger1 = 1
var(ロープの先端) = -1

これでVarの数字をひとつずつ減らしていきます。そうすると相手と自分の距離が近づいていくはずなので、

[State p2の位置設定]
type = targetbind
trigger1 = 1
pos = 20*var(ロープの先端),0

とすることで敵はロープに引きずられて勝手に手元まで来るようになります。
もしロープを縮める速度をこれよりも早くしたい場合(例えば帰りは2倍の速度で引きずられるなど)は
varaddの部分で毎F -1ではなく毎F -2や毎F -3などにしてみてください。-2なら2倍、3なら3倍で引きずられます。

[State 2103,変数0になったら次のステートへ]
type = changestate
trigger1 = var(ロープの先端) >= 0
value = (5)のステートへ

[5:特殊なくらいのステート]
投げと一緒です。追撃可能な状態にするか、もしくは不能で投げのような演出を入れるかおこのみで。割愛

[6:ロープが突き抜けて飛んで行く]
実はこのステートは今回のケースでは既に[2]の部分の記述で完成してるので別個に作る必要はないです。
もしロープが相手を突き抜けて飛んで行くのではなく、弾かれてすぐに帰ってくるのであればその記述が必要です([4]と同じ)

[7:ロープが再到達点から戻ってくる]
これも[4]と同じですが、この場合は「空振りして、再到達点まで行った」が明らかなので
[4]と同じコマ数だけのアニメを頭から再生すればOKです。
ヒット時と空振り時でアニメを変えたい場合は適宜空振り時のアニメを作ってあげてください。

[8:戻ってきたロープをキャッチ]
キャッチするポーズを取って硬直、アニメ終了か規定のF数経ったら終わりにします。



ここまでできたら実際にMUGENでヒットボックスを表示して、この技で正常に敵を引きずれるか試してみてください。
成功していれば敵を引きずった後、特殊くらいにさせる処理が成立するかと思います。
もし失敗する場合は、どこかを間違えている可能性があります。

さてここまでできたらロープのアニメをヘルパーで後付して表示するのですが、[2]で取得した変数をベースに
[3]以降の本体のアニメと同じようにコマ数を頭出ししてやればOKです。ただし一点注意が必要なこととして、
ヘルパー内でvarを参照するとvarのヘルパーが参照されてしまうので必ずroot,var(ロープの長さ)とするか
parent,var(ロープの長さ)などとして本体へリダイレクトして、本体のvarを参照できるようにしてください。
これを忘れると本体が正常に敵を引きずれていてもロープにはその長さが反映されず、うまく表示されません。

初歩的なことですが私はよく忘れます!!

それから、リメイク版の一二三にも同じような技がありますが、参考にする場合は最初に作ったせいでcnsがややこしい
必殺技版ではなく123_hyper.cns内にあるステート2100の超必殺技版の方がシンプルな記述にまとまっているので
こちらを参考にしてみてください
スポンサーサイト
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://midorinobiotop.blog.fc2.com/tb.php/2123-f67ab886
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック