PS2版桃鉄のオンライン対戦を赤外線リモコンアドバンスで実現する

経緯

友人から桃鉄のために集まるのが大変だからオンラインで対戦出来るようにしようぜ、みたいな話があったのが経緯です。

画面共有はともかく、全員が操作出来るようにするのは難しいよなぁと思っていたところ、以下のページを見つけました。

"PS2"用DVDリモコンでゲームはできますか? | PlayStation.com

PS2はPS2リモコンでゲーム操作が可能。ということは学習リモコンにPS2リモコンのコード覚えさせ、パソコンから制御すればネットワーク越しでも操作できるのは?実験開始です。

仕組み概要

青い矢印は画面共有の流れ、赤い矢印がPS2操作系の流れです。画面共有についてはSkypeのビデオ共有等、色々な方法があるかと思いますので、やり方は割愛します。

この仕組みの中で鍵となるのは、PS2に赤外線で命令を出す学習リモコンです。

PS2リモコンという癖のありそうなものが取り扱えそうで、かつ、パソコンからプログラムで制御でき、かつ、電子回路に詳しくない僕でも使えるものが無いものかと探したところ、条件に合うものがありました。

USB赤外線リモコンアドバンス | Bit Trade One, LTD

・受信した赤外線信号をそのまま記録、送信することができる(アドバンス版)

・任意のアプリケーションからリモコンを送信出来るように、DLL形式のライブラリが用意されている

素晴らしい。後は赤外線リモコンアドバンスに命令を送るサーバプログラムと、そのサーバプログラムに操作命令を送る各プレーヤーに配るコントローラープログラムですが、これはそれぞれC#、Adobe AIRでざっくりと作りました(下の方にプログラムが置いてあります)。

必要機材

今回の実験で使ったPC以外のハードウェアです(置き方が汚い…)

・PS2本体

 - 薄型でない場合は赤外線レシーバーが別途必要になります

・ゲームソフト(桃鉄16)

・ビデオキャプチャ

 - ゲーム画面をPCに映すのに使います

・赤外線リモコンアドバンス(USB AとUSB miniBの変換ケーブルが必要)

 - PS2リモコンの赤外線コードを学習し、PCから赤外線発信を制御します

・PS2リモコン

 - 学習が終わった後は基本的に使いません

ゲームは実機で動かしてこそ!エミュレータ等は使いません。

サーバ側プログラム作成

RemoteRemocon.zip(サーバプログラム実行ファイル)

Program.cs(ソースファイル)

UDP(ポート60000)で1〜10のメッセージを受け取ると、それに対応するPS2ボタンの赤外線を出すサーバプログラムを書きました。

赤外線リモコンアドバンスのライブラリがC#なのですが、C#とかほとんど触ったことが無いのでMain関数に各種サンプルコードを組み合わせた物を放り込んでます(ひどい)

なお、プログラムの実行には、.NET Framework 4.5が必要です。また、ダウンロード | Bit Trade One, LTDから、USB_IR_Library_v4.1.0.0をダウンロードし、その中のUSB_IR_Library.dllを同じフォルダに入れ実行して下さい。

クライアント側プログラム作成

RRCC.zip(クライアント側実行ファイル)

Main.as(ソースファイル1)

Tool.as(ソースファイル2)

各プレイヤーが使うコントローラーです。こちらは比較的使い慣れてるAdobe AIRで作成しました。

ステータスバーにあるIPアドレス、UDPポート60000に向かって、ボタンに対応した1〜10のメッセージを投げつけるだけのプログラムです。

一応キーボード入力も可能で、方向キー:矢印キー、○ボタン:Zキー、×ボタン:Xキー、□ボタン:Cキー、△ボタン:Vボタン、STARTボタン:Wキー、SELECTボタン:Qキーとなっています。方向キーのみ6フレーム以上押し続けると連続入力となる仕様。

感想

プログラムのネーミングから何から全て雑に作ったのですが、それでもインターネット越しのテストでちゃんと動作したのが少し感動でした。

本仕組みの一番なんとかしたい部分は1.各プレーヤーの操作を排他に出来ないこと(常に全員の操作を受け付ける)、2.方向キーの細かな操作ができない(地域マップでの操作が難しい)なのですが、これは赤外線リモコンを使っている以上、改良は難しいのです。一発ネタなのでご容赦いただきたく…。

オンライン対応の桃鉄新作出ないかなぁ…

制作:Shin Matsushita web site:iff soft e-mail:iff@m42.coreserver.jp