2021年11月6日土曜日

naomiのガンコン対応ゲームをお家で遊ぶぞい

IONA-USを作ったので、USBのコントローラさえ存在すれば、あとはファームウェアなんとかするだけでJVSの特殊コントローラとして動作させる事ができる。そんなわけで、今回はアーケードゲームを家庭で遊ぶ上でやっかいなガンシューに対応してみようと思います。

まず肝心なのは、液晶環境で動作する汎用ガンコンを見つけるところ。調べたところ、どうやらPS3のタイムクライシス4に付属していたガンコン3が液晶でも遊べるとのこと。ヤフオクなどで5,000円前後くらいで入手できそうです。同時期に同じような仕組みでPC向けなどに出ていたガンコン(TopGun III、Single Arcade Guns、ArmTrak)もあるようなのですが、10年前、20年前ならまだしも、今は入手が難しいですね。Cabela's Top Shot Elite Firearm ControllerってのがWii/PS3/Xbox 360のバリエーションがあって辛うじてebayで手に入るかな。playasiaにあったので注文したら「ごめん、やっぱなかった」って払い戻し面倒でした。って事で日本ならガンコン3が入手性の面でもオススメ。現実的な値段で入手するならガンコン3がレア化するギリギリ前の今が最後のチャンスなのかもしれません。おそらくFPS勢は既にVRに行っちゃってますからね。モニタの座標をとる必要のあるUSBデバイスとかPS4世代以降は需要がないんだと思います。Switchのジョイコンのセンサーにアタッチメントってあたりならワンチャン……って感じなのかな。

ガンコン3の設置はそこまで難しくなくて。USBから電源だけとってる2つのマーカーLEDがあり、これをモニタの左上、右上に正面を向けて置くだけ。電源もらってるだけなので、このUSBは充電アダプタとかに繋げるのでもOK。一方でガンコン側のUSBとしての挙動は少し複雑。期待してたのは標準的なPS3互換のレポートでアナログ部分に座標が入ってくるってくらいだったんだけど、完全に独自クラスどころか、表向きは1ポートのUSB Hubで、その向こうにベンダー固有クラスを使ったデバイスが仮想的に接続され、データをシャッフルして通信する独自プロトコルになってます。これ、先行して調べてくれてる人がいなかったら面倒で投げ出してましたね。ちなみにこの人が調べてるのはHubの向こうに仮想的にぶら下がってるデバイスのプロトコルのみ。ハブ部分は標準通りなので一般的なOSならシステムが処理してくれて、ハブ越しに現れるデバイスのドライバさえ書いてやれば動く。という事で、IONA-USにはハブの簡易対応コードを追加し、その上でこの独自デバイスを仮想HIDとして扱い、そこからJVSにマップしてやるコードを追加しました。

JVSへのマップについてはnaomiのDeath Crimson OXに対応してみました。アナログ0と1が1PのX座標とY座標、アナログ2と3が2PのX座標とY座標になってます。それぞれボタン1がショットという素直な配置。スタートボタンも必要だったのでA1っていうボタンをアサインしました。

画面内・外の判定はキャリブレーションをやればゲーム側で勝手に判定してくれます。最初、キャリブレーションをIONA側でやるとしたら大変だなーって思ってたんですよ。マイコン的にはクロックはそこそこ早いとは言えアーキテクチャは8051ですから。ホモグラフィ変換行列の計算(プロジェクションマッピングとかと同種の計算ですね)とか、自前で浮動小数点と三角関数を用意しないとかなーって。でもゲーム側でキャリブレーションするなら生のデータを送ってやれば最低限はOK。デバイス的には見える世界を二次元の投影で理解して、マーカーの位置から向いてる方向を計算しているだけの値が上がってきます。各地点で奥行きの距離とか考えて歪補正したりはしてません(そこまで自動でやるにはマーカーは4つ必要だし)。

ただ、ゲーム側のキャリブレーションもそこまで真面目な計算はやってないんですよね。なので、基本的にはモニタの真正面から、投影に歪みの出ない位置関係で遊んでやるのが望ましい。という事で、本当はIONA側でホモグラフィ変換かけてやれば追跡精度も上がるんだろうなぁ。キャリブレーションが2重になってわかりにくくなっちゃうけど、設定モードつけて画面4隅をマークさせればホモグラフィー行列も求められて、斜めから撃ってもゲーム側では補正された正方形とかで判定できます。まぁ、今の所そこまでやる予定はないですが、興味ある方の改造をお待ちしております(笑)。ただ、ファームウェアサイズ的にはメインに取り込むにはキツイとは思ってるのでマージできるかはサイズ次第かな。

という事で、実際に遊んでみた動画がこちら。

1.31から正式に対応してます。 

0 件のコメント: