ピンくま日記

リアルバウト餓狼伝説2のトレモ実装と遊んだ感想とか書いていきます。 https://github.com/sanwabear/rbff2-training

自動入力とかいろいろ

自動でリバーサル技をだす実装がおわったきがします。のけぞり直後、起き上がり直後、ライン送られ直後、ライン戻され直後、吹き飛びの着地後、ジャンプの着地後でそれぞれ、必殺技、フェイント、特殊技、ジャンプ、ダッシュ、飛び退きがでるようにしました。全体的にちゃんと出るかどうかはまだ見切れていません。

必殺技入力を確定させる処理のところで、ダッシュ、飛び退き、ダウン追い打ちや派生技などの処理の考慮が漏れていましたが修正しました。

ついでにダウン追い打ちや派生技をだせるようになったので、最速追い打ちで間に合うかどうか確認できるようにしてもいいなと思い、少し実装しました。

追い打ちもちのキャラで一通り組んでみましたが、発生と持続が微妙なホンフゥの追い打ちは最速だとさっぱり当たりません。発生遅めのクラウザーでこれ間に合うの?っていうのをみるときか、持続眺めのキャラで普通に追い打ち有無での調べ物するときになりそうです。

ダウン投げの方は最速で出るようにして気づいたんですが、相手側がダウン状態で接地していたら投げられるようになっているみたいで、追い打ちのくらい判定が出る前でも、座標だけあっていれば投げました。最速だと通常投げから繋がるのでは?とおもいざっくり調べてみましたが、ギースは投げたあとのムンっていうポーズがあるため画面端付近ならなんとかギリギリ投げられる。マリーは相手との距離や投げ直後の有利フレームの関係で歩いてギリギリでダイナマイトスイングで投げられるのがアンディ、ホンフゥ、マリー、キム、タン、ローレンス、リックでした。ダッシュすればもう数キャラは投げられるかもしれませんが調べられていません。ギースとシャンフェイを投げたあとはめちゃくちゃ距離が離れつつ裕フレームも短めでした。この辺は意図したものなのか、たまたまそうなのかはわかりませんが、もうちょっと間に合うキャラがいてもいいんじゃないのとか思いました。

あと、状態みて技入力をするのがだいたいわかったので、デッドリーレイブとアンリミテッドデザイアとホーネットアタックを自動で出る実装もすすめました。動作確認で楽になればいいかなー。

嘘判定表示ふたたび

リバーサルの実装から横道にそれています。

前に調べてなんもわからなかったハルマゲドンバスターの攻撃判定があるけどヒットしない件ですが、他のキャラにも似たようなものがありました。

気づいたのは動作確認でクラウザーのデスハンマー出したときで、なんか妙に判定の持続が長いなと。これこんなに持続するんならガード不能重ね楽勝やんって、持続重ねを試してみたところ、判定表示があるもののヒットしませんでした。

そこからやべえナニコレってなって、他のキャラも起き上がりにフレームあわせて重ねてみたり、直前で技振ってフレームの進み具合をみて前進させて判定と重なってみたりで調べてみたところ、攻撃判定が出ているがヒットしないものがたくさん見つかってしまいました。

データをみてて分かったところでいうと、技のIDみたいなデータの周辺で、その技に割り当てられているアニメーションや判定の変化をカウントしているデータがあって、そいつの区切りで判定が出たり、消えたり、出てるけど当たらなくなったりしていて、調べるのに役に立っています。ちなみにアドレスでいうと1Pが100466、2Pが100566です。調べる用にキャラアイコンの隣に状態などと一緒に表示するようにしています。

f:id:ym2610:20200902005407p:plain

嘘判定

あと見つけたものでいうと、ホンフゥと山崎の当身の攻撃部分空振り時に投げられない現象の原因(くらい状態とかガード状態用のデータが通常状態をあらわすゼロのときにしか投げられない)を見つけたのと、そのデータをみている処理(たぶん投げの成否判定処理)の場所がなんとなくわかったのがあります。

それと、ジョーのスライディングの攻撃判定消失直後の数フレームの間ですが、普通のやられ判定でなく、ダウン追い打ちのみヒットする判定になっているのを見つけました。ちゃんと山崎のトドメ(相手がダウン状態じゃなくても発動するので)がヒットするのも確認できました。

f:id:ym2610:20200902010057p:plain

スライディングの隙にダウン追い打ちだけできる判定

役に立つのかどうかわからない情報でいうと、ギースのデッドリーレイブの最終段ヒット後は空中追い打ち可能な判定でふっとぶことと、クラウザーのリフトアップブローではダウン追い打ち可能な状態で空から降ってくることがわかりました。なんか適当に判定振ったのか意図したものなのかわかりませんが、データや状態みえるようにすると結構いろんなのがあるのがわかるんだなとか思いました。

引き続きリバーサルの実装中

のけぞりからのリバーサルで技がでるようにしています。ガードと同じアプローチでやっていましたが、そうするとボタン連打になり、レバー入れの特殊技や下段、投げがでませんでした。

なので仕組みをみなおして、のけぞりやガード中に書き換わっている都合のいいデータをみて、のけぞり解除の1F前に技入力いれっぱになるようにしています。いまのところそれっぽく動いているので、動作確認しつつ進めていきます。

ガードリバーサル実装しました

ガードリバーサル実装しました。ガード硬直に応じて必殺技の確定タイミングを調整するのが大変でした。

ガード硬直(ヒットストップ除く)の種類をざっと調べてみて次のような感じでした。網羅はできていません。

  • 12F ... ジャンプA、ジャンプBとか
  • 13F ... 立A、下A、立Bとか
  • 14F ... 下Bとか
  • 15F ... スウェーA
  • 16F ... スウェーB
  • 19F ... ジャンプC、パワーダンクとか
  • 21F ... 避け攻撃、立C、下C、必殺技色々、パワチャとか
  • 23F ... 必殺技色々
  • 24F ... 必殺技色々
  • 25F ... スウェーC
  • 27F ... 超必殺技
  • 28F ... 一部飛び道具

色々試してみた結果、必殺技は硬直解除(12F硬直なら13F目)からみて8F前に入力してしまえば、ちゃんとリバサがでてくれました。(28F硬直なら21F目に入力。)

トレモの自動リバーサルの実装では、9F目、16F目、18F目、21F目でそれぞれ技入力を確定させていますが、人力でやるとした場合、全対応は無理で、技ごとの硬直を体感でおぼえつつ入力できないといけないので大変そうだなと思いました。10F代はみてからすぐ入力でわりと行けそうですが、微妙に待たないといけない20F代のが大変そうな感じです。

 

動作確認していて、若干ですがコンビネーションに割り込めたりするので、連続ガードにならないものに対して一方勝ち、相打ちOKな技をさがすのもいいなとか思いました。

 

次は起き上がりのリバーサル実装していきます。

 

 

リバーサルも実装中

ブレイクショットの実装をコピペ量産するかたちでリバーサルも実装していっています。ホントはレコーディングしてリプレイでできるようにしたいんですが、なんか無理目なのでガード後、起き上がり、着地とかの初段だけ動作を指定できるようにしておくようにしようと考えています。

 

ブレイクショットの実装ができました

ブレイクショットの実装ができました。前回触れた根性入力のアプローチはなくしました。

youtu.be

忘れないように経緯もろもろと一緒に書いておきます。

昔話になりますが、秋葉原にトライアミューズメントセンターというゲームセンターがあり、そこでリョウでCPUが遊べる改造された餓狼伝説スペシャルが稼働していました。家庭用でコマンド入力したり、デバッグだったり、その時一般的だった改造方法でリョウを使っても、CPUが必殺技に反応せずにそのまま食らってしまうので、CPU戦が全然おもしろくなかったんですが、そのトライで稼働していたガロスぺでは、CPUがちゃんと反応してゲームになっていました。

どうやっているんだろうと気になって数年過ごしていたところ、たまたまネットサーフィンしていてみつけた海外のショップで改造版のガロスぺが売っており、殻割りしてそこから変なサブボードが生えていたその見た目の怪しさに惹かれて買ってみたところ、そのガロスぺでは必殺技にちゃんとCPUが反応してくれました。やたっぜーつってロムライターで中身をちゅうちゅうして差分とって、それまでとかそのあとから中身をいじった自分用パッチをつくったり当時ちょこっと公開してみたりしていました。

そのパッチ作成のなかで、ガロスぺリョウの暫烈拳コマンドがC連打とかいう納得いかない仕様が気にいらなくて→←→+Cの必殺技コマンドへの修正もやったんですが、その時、調べて残していた情報をもとにしたら、同じ会社だし、同じ系列の作品だし、コマンドのデータの場所が見つけられるんじゃないか、見つかったらコマンドをAボタンで必殺技発動とかに切り替えれば、猶予2Fの帝王漏尽拳にもBS発動できるようになるんじゃないかと思って、資料を掘り返してデータの場所を探してみました。

ちなみにガロスぺのコマンドのデータの場所探しには、怪しい中華サイトだかに出ていた全キャラの必殺技を一律↓↘→+BCに置き換える改造方法の記事が役に立ちました。中華すげえなーとか、でもこいつらが発売後にすぐ割ったりするからアレなんやぞとか、そういう風に思いながら情報乞食だけしておりました。

で、ガロスぺのコマンドデータのパターンを参考にバイナリエディタでP1の中身を検索したところ、ちょっと違いはあるものの、それっぽいデータ個所を見つけて、デバッグでウォッチしてコマンド入力時にそこがちゃんと読まれているのを特定しました。

データの並び順はダッシュ等、一部起き上がり攻撃などのコマンドが最初にあって、次にテリーからアルフレッドのデータとなっていました。いくつかのコマンドはあるけど技が割り当てられていなかったりするデータも見受けられました。処理では毎フレームそのキャラが使えるコマンドデータと、入力を比較して、最後に優先度の高い技が選択されるみたいなしくみで動いているみたいです。ちゃんと追えていませんがデバッグで飛び飛びで流してみて、そのように見えました。

技発動のポイントと、そこに飛ばすための適切なアドレスがわかればよかったんですが、全然みつけられなかったので、それ以外の方法を試行錯誤してみた結果、根性入力アプローチしつつ、Aボタンだけみたいな最短コマンドで技発動できるようにすることにしました。

全キャラ共通のコマンドデータの中に、コマンドはあるけど使われてないデータに←→+Aというのがあって、たぶん避け攻撃なのかな?とか思いながら、ちょうどいいのでこのデータの場所を使ってBS対応必殺技を呼べるようにしてみました。こんな感じです。

  1. P1が読まれているRAMにパッチ当てをして、←→+AというコマンドをAのみにします。このコマンドで発動する技のIDは無視される値のままにしておきます。
  2. 毎フレーム事のスクリプトの処理で、ガードした時にブレイクショット対応技のIDを空きのメモリ領域に保存しつつ、Aボタンを入力したことにします。
  3. Aボタンが押されたことで動作する、コマンドの成立判定をしている処理に設定したブレイクポイントのなかで2で保存した技のIDが動作するようにレジスタを書き換えます。
  4. 後続の処理で3で書き換えたIDを元にした必殺技でブレイクショットが炸裂します。

これでガード後1Fめに必殺技入力が認識されてブレイクショットがでるようにできました。猶予2Fの帝王漏尽拳にも対応できます。

その後、動作確認して問題直しつつ、連続ガードから発動できるように回数設定をつけたりして、いったんの仕上げができた状態になりました。よかったです。

同じ仕組みでリバーサルもできそうなので、やりかた考えて、いいのが思いついたら組み込みたいと思います。

 

ブレイクショットをだせるようにしたい

ブレイクショット対策というか、満足に対戦経験もないので対策以前にまずはどの程度怖いものなのかもわかるように自動ガードからのブレイクショットをさせたいなと色々調べて試しています。

まず必殺技をコマンド無しでできないもんかと思い、技がでるときの動きをデバッグでちょいちょい見てみましたが私の知識や能力では見つけられませんでした。

しょうがないのでガードを検知したら根性入力やる方式にしました。これの問題点はコマンドの長さぶんのフレーム数が必要で、弱攻撃だとギリギリか発動できません。調べ途中にコメントで帝王漏尽拳のガード硬直中の入力猶予が2Fというのをいただいて絶望しましたが、それよりはないよりはマシということでいったん仕組みをつくりました。一番ながいのはデッドリーレイブ(6・3・2・1・4・6・Aで7F)と爆裂拳(A・A・A・Aで7F)だと思うので7F以内ならタメ技以外は出てくれると思います。思いましたが、動作確認で秦崇秀の地上弱攻撃には発動してくれない。フレーム表示を見てみると秦崇秀くんの地上弱攻撃の硬直が6F、なんでこいつだけていうか他は網羅的に調べていませんが、お兄さんのほうは8Fでなんかちょっと悲しくなりましたが、仕組みとしてはひとまずこれで妥協しておきます。

それでタメ技BSもバシッとだしたいのですが、タメ時間のぶんだけリアルタイムに待つのも人生の無駄遣いだと思うのでタメ時間ゼロにできないかを調べ中です。昔、ガロスぺいじってリョウの暫烈拳646+Cにしたり、タメ時間なくしたりしましたが、アレはどうやってたどり着いたのかさっぱり忘れていましたが、ネオジオハック系の海外の掲示板だかで全部の超必殺技を236+BCに置き換えるみたいのがあって、そこからたどり着いたんだなとか思いま出しました。でもRB系だとデバッグの22+Aとか22+Cでの超必殺技のが一般的で先人の成果に頼る同じアプローチは難しそうです。しょうがないので今はタメ時間を加算するところを見つけて一気に60Fくらいがっつりタメられるようにしてやれないかと頑張っております。