ピンくま日記

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

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

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

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くらいがっつりタメられるようにしてやれないかと頑張っております。

一区切りのちょっと手前

バトルアーカイブズで不満だったトレモで一気にダメージを与えるとKOしてしまう事象をなんとかしたいと思ってたのを自前のトレモで実現できました。どうもダメージを体力に反映する直前に体力値がゼロだったらKO演出を動かすみたいな動きになっていて、フレーム事にむりやり体力を上書きする方法ではできず、こちらもフック使ってKO演出に飛ぶ処理を無理やりスキップするかたちで実現しました。手段はどうであれできてよかったです。でも永久コンボをつづけるとたぶんフレーム表示とかオーバーフローするかバッファがたまりすぎてめちゃくちゃ遅くなると思うので、トレモを試される方は適度にコンボ切っていただけると助かります。

あと、同じ技を連続で振り続けると、フレーム表にところでずーっと行動が続いてみえる事象も修正しました。こちらもやり過ぎると相手側のバッファがたまりすぎてヤバいので、トレモを試される方は適度に切っていただけると助かります。

READMEの内容もまずかったので修正しました。試してコメントいただき感謝です。ゲーム指定、BIOS指定だと意外に簡単な手順で動かせるんだなとか思いました。

ステージ変更も見直しました。対戦会で双角のステージだと処理落ちが激しくてブレイクショットしにくい、というお話を思い出して、雨降るラウンドのステージでも練習できるようにしておいたほうがいいかなと思い、ステージ開始時のラウンド判定処理を追ってみてこちらもフックでいろいろとごちゃごちゃやって雨ステージを選べるようにしました。ラウンド開始時のザーっていう音を出す部分はなんとなく見つけられていますが、うまいことそこの処理に飛ばす方法をみつけられず無音で開始します。音あった方が雰囲気があっていいんですが、残念ポイントとなっております。

ある程度やりたいことは盛り込めたので、動作確認ついでのトレモをしばらくやってタグ打って一区切りにしたいなと考えています。

ハルマゲしらべ中とビリーのジャンプ攻撃

フランコしらべ中のコメントうけて、MVS版ビリーの攻撃判定のでない小ジャンプ攻撃が、トレモスクリプト動かしているとヒット、ガードできてしまう事象がわかりました。

移植元のスクリプトがくらい判定を表示している方法なんですが、元々なにもしていないと接触判定しか取得できず、攻撃を振ったときにだけ攻撃判定、ガード判定、くらい判定等々が出る仕組みで動いていて、ここから何もしていないときでもその処理を呼び出すように、プログラムのあるポイントまで来たら、それを検知して攻撃振ったときの処理を一部無理やり呼び出すようにしていました。

そのせいで本来攻撃判定がでていないビリーの攻撃もヒットするようになってしまっていたみたいです。

オリジナルの動きを変えたくなかったので、プログラムの検知条件に、攻撃中だけど攻撃判定がでていない状態(ビリーの件の攻撃)だったら動作させないようにしました。修正した副作用で、その時だけくらい判定が見えなくなりますがオリジナル動作優先にしておきます。ビリーの件の攻撃は判定はデータとしてあるみたいですが、攻撃状態とするメモリ部分への書き込みができていないのと、のけぞりが超短い、ダメージが1と色々忘れすぎている感じでこの辺ちゃんと入れておいてくれていればもう少し戦えたのではないかとか思ってしまいます。

 

フランコのハルマゲドンバスターの攻撃判定発生1~2Fはこれとは別みたいで変わりませんでした。空中の追撃判定でもなければ、飛び道具も消せませんでした。攻撃が当たらないのはどっか別のデータが抜けていたりするのかもしれません。

あと、網羅的には見れていませんが、アンディの下Bと立Bが空ぶるのもモヤモヤします。

結果だけ調べると技相性っていうことで、パナされても○○重ねとけば安定とか、こすっとけば安定みたいになるのだと思いますが気になります。

 

ハルマゲしらべ中

ハルマゲドンバスターの攻撃判定発生のタイミングで、当たったり当たらなかったりしてるのが不思議で調べてみています。

画像のテキストは画像の状態のあとどうなるかを書いています。

攻撃判定発生してるように見えるけど3Fめまでは当たらない。お飾り判定とのこと。

くらい判定のほうが、当たったり当たってなかったりするのがまだわからなくてしらべ中です。

 

f:id:ym2610:20200727090020p:plain

f:id:ym2610:20200727085616p:plain

f:id:ym2610:20200727085619p:plain

f:id:ym2610:20200727085623p:plain

f:id:ym2610:20200727085627p:plain

f:id:ym2610:20200727085632p:plain

f:id:ym2610:20200727085637p:plain

 

MAMEプラグイン版をGithubにコミットしました

github.com

対戦会で知り合った方が旧版のスクリプトを使われたとツイッター上でみて、なんだか申し訳ない感じになったのと、出来上がり具合的にちょうどいいタイミングだったのでMAMEプラグイン版をGithubにコミットしました。

使い方もREADMEとして記載しました。

よろしくお願いいたします。

フレーム表示すすめています

フレーム表示をすすめています。正直ログ的なものなら文字の方がいいのですが、有利不利とか、あれコレこんだけあるんだみたいな気づきがしやすいのかなとか、あとなんとなくカッチョイイのでグラフ表示のほうにしたいなと思っています。

f:id:ym2610:20200718224105p:plain

グラフ表示

かつて電波新聞社からでていたオールアバウトシリーズみたいに、グラフに数字とあと空中とか飛び道具射出点とか出せたらいいなとか考え中です。

技のごとにIDと動きが細切れになっているんですが、コンビネーションアーツだと通常技とおんなじIDになっていたり、別ルートだけどおんなじIDの技に遷移していたりで、そういうのはフレームと一緒に表示したい名前が定められません。

もうちょっと作りこんでルートがわかるようにしたりしないといけないかなーとかも考えています。