ST17のネットワークモードのデータフォーマットを調べてみた。
バージョン1.0.8.7のソフトウェアによる。
ST32は別のプロトコルかも。バージョン変わるとフォーマットも変わるかも
通信プロトコル(TCP, UDP等)とポートの確認にはWiresharkを使った(久しぶりに使ったけど、日本語化されてて便利)。
通信はポート62739番のTCPで行われていて、このポートでTCPサーバーを立てればST17をクライアントとして接続できる。
基本的にプリフィックス"@"で始まり\r\nで終わる文字列が与えられる。
適切にACKを返さないと、クライアントがメモリリークしてしぬ。ACKは固定パターンで良いっぽい。詳しくはWiresharkで参照のこと。
.Netの特性なのか、ネットワークドライバの特性なのか、Wiresharkの特性なのか、同じIPアドレス間ではWiresharkでキャプチャできない。PCを2台用意して、1台でST17をサーバーとして動かし、もう1台でクライアントとして動かし、PC間の通信をWiresharkでフィルタリングするとやりやすい。
サーバー側を自分で作るなら、データを受信したら固定パターンのACKを返すだけでとりあえず動作するので、あとは得られた文字列をデバッグダンプしておけば、データを人力デコードできる。
ポーリングデータのフォーマットは以下の通り。
とりあえず大体のデータは得られるが、移動する的の場合、的の位置といった情報は得られない。固定的でも、的の大きさと言った情報は得られないはず。
他に、"@D"で始まる弾着データが送られてくる。これには何発目か、スコアはどれくらいか、時間はいつか、エネルギーや弾速はどれくらいだったか、座標はどこか、といったデータが含まれる。位置情報は液晶のピクセル位置で得られる。
ST17のネットワークモードはよくわからない。ソフトウェアを片方サーバー、片方クライアントにして接続してみても、何ができるかよくわからない。
***
以前、ST17の的を自分で作ろうと思った時は、hWind総当たりでST17のターゲット画面をキャプチャして、それを画像解析して弾着位置を調べよう、と思ったことがある。
確かノートPCで15fpsくらいしか処理できなかった気がする。冷却ファンの音も凄まじかった。
TCPで情報が得られるのがわかったので、画像処理より格段に簡単な方法で情報を得ることができる。
エアガンショップのレンジにST17が置いてあるくらいなら、ブルズアイターゲットとかタクティカルターゲットでも良いのだけど、頻繁にST17を使える環境にいると、ST17の的は致命的なまでにバリエーションが少ない(遊び方の問題かも。精密射撃しかしないなら足りるだろうし)。
ということで、気が向いたらST17のサーバーを作って、自由に的を表示できるソフトを作りたいな、と思っている次第。
いつになるやら。冬のインドアシューティングがメインになる時期までにはどうにかしたい。
0 件のコメント:
コメントを投稿