USBコントローラー

Windowsで使用するゲームコントローラーは一般的にUSBコントローラーと言うだろう。今は。

ウチのWindows上で動作するコントローラーを使用するプログラムはWindows95時代に作ったものからたいして変わっていない。
joyGetPosEx
joyGetDevCaps
この2つのWin32の関数で事足りる。他にもいくつかのjoyからはじまる関数があるが、今では機能していなかったりする。詳細な使い方はHLPファイルを見ればもれなく簡潔に纏まっているのだが、残念ながらオリジナルの説明文は16ビットのHLPファイルなので現在のWindowsでは見る事が出来ない。しかし、MSDN等を参照すれば当時のままの資料が参照できる。当時とは細かい仕様の違いあったりするが、そんな事はお構いなしにたぶんそのまま。見事なまでの化石状態。

ひさしく聞く事はなかったがX68000/FMタウンズ/MSXのような90年に時代を築いていたホビーポソコンで使用されていたアタリ仕様のゲームコントローラーはジョイパッドやジョイカードと呼ばれていたのでjoyからはじまる関数名なのだろう。

しかし、当時のWindowsPC(DOS/V)にはゲームコントローラー用の端子やUSBポートはなかった。あるのは昔ながらのモデムやペンタブレットを繋ぐシリアルポートか主にプリンタ向けのパラレルポート。ゲームコントローラーはどちらにも繋がらない。ではどこに繋いでいたか言うと、音源ボードの拡張端子だ。もっと言うとサウンドブラスターのマルチメディア端子に繋ぐんだ。その端子には他にもMIDI(IN/OUT)ケーブルやCD-ROMドライブが繋がる。でも日本だとSCSI接続のCD-ROMが普及していたので実際その端子にCD-ROMが繋がっているのを見た事が無い。MIDIはサウンドブラスターを使わなくなる日まで繋ぎっぱなし状態で重宝した。カートリッジ式CD-ROMドライブの方が多かった時代の話。今はサウンドブラスターが刺さっているPCを見つけるのも難しい。

SB Live!
黄色の横長がマルチメディア端子。ここにゲームコントローラ等が繋がる。

そんな化石的なjoyからはじまる関数はいつの間にかUSBコントローラーにも対応していて16個同時接続なんて事も出来る。昔の仕様を知る限りそんな数対応して無いように思えるのだが、しれっと動くんだ。
イベント用に作った射ウォッチ!の16人同時プレイ対応版やシューティング技能検定8人版さらにはペンゴ!8人対戦版は、Win32のこの簡単に使えて同じ仕様で使い続けられる機能があったからこそ2~3日、長くても1週間程度の短い時間で作れたんだ。思いついた時に思った通り動作する事の素晴らしさ。

今回のSteam版XIIZEALでも件のプログラムは使用しているのだが、素晴らしい事ばかりではない。欠点がひとつある。繋がっているコントローラーの名称が分からない事だ。仕様的に昔は認識できたはずなんだけど、今はそうなっていないので問題だ。Steamのゲームで基準になっているのはXbox360のコントローラーだ。実際ほとんどのゲームが対応していて、ボタン表記がXbox360準拠だったりする事も多い。プログラム的にはXbox360のコントローラーが接続されている場合はそのまま使用し、それ以外のコントローラの場合Xbox360準拠になるよう変換処理が必要となる。そうする為に何が繋がっているのかの情報が必要なのだ。

その問題はモダンなライブラリXInputが解決してくれる。Xbox360/Oneのコントローラーだけを認識してjoy関数のように簡単に使える。
DirectInputでもなにが繋がっているかの情報は得られると思うが、正直めんどくさいライブラリなので良く知らない。もっとめんどくさいRawInputなんてものもあるが、Xbox360/Oneの機能をちゃんと使えるか分からない。XInputが良くできているのでわざわざ使う必要は無い。わざわざ使う場面としてはトラックボールを2つ繋いで別々に扱うといった用途だ。ほかのライブラリだとトラックボールの様なマウスデバイスはいくつ繋いでもひとつのマウスデバイスとして扱われてしまうからだ、RawInputなら個別に扱える。世に出る事はなかったが、昔作っていたトラックボールを2つ使うゲームの開発のために使用していた、めんどくさかった…

Xbox360有線コントローラーはPCに接続すれば自動でドライバーがインストールされて使用できるが、
XboxOneのコントローラーの場合USBケーブルでPCに接続し、手動でこちらのドライバーをインストールすれば使用できる。
http://support.xbox.com/ja-JP/xbox-one/accessories/controller-pc-compatibility

Steam版XIIZEALはXbox360版準拠なのでお薦めのコントローラは有線タイプのXbox360コントローラー。ワイヤレス版はWindows用のアダプタが必要になるしバッテリーパック(電池パック)のぶん重くて手が疲れるので、軽くて安い有線タイプがお薦めだ。もちろんゲーセン気分でレバガチャを存分に堪能したいならXbox360/Oneのアーケードスティックも良い。

mcp
XboxOne用Mad CatzのFightStick。ドライバー要らずボタンひとつで天版を開けられる。予備のボタン収納スペースやケーブル収納もある。持っていてちょっと嬉しいアーケードコントローラーだ。