NetBSDでゲームパッドを使ってシューティングゲームをしてみる

この記事は、NetBSD Advent Calendar 2019の21日目の記事です。

はじめに

NEC PC-9801全盛の時代に、Bio_100%のMarkadiaという縦スクロールシューティングゲームをしたことがありました。 それ以来、ゲームというものには手を出していなかったのですが、久し振りにやってみたいと思いました。 ですが、手元のラップトップは、ゲームでキーボードを酷使して問題ないようには見えません。 ここでゲーミングキーボードを買って来るという選択肢もありましたが、USB接続のゲームパッドを使ってみることにしました。 USB接続のLogicool製のGamepad F310というのを選びました。

ゲームを選ぶ

pkgsrc/games以下には、450以上のゲームが登録されていますが、縦スクロールシューティングゲームに近いものは多くはないようです。 以下が候補になりました。

  • KoboDeluxe
  • naev
  • astromenace
  • chromium-bsu
  • taisei
  • xkobo

今回は、chromium-bsuをやってみることにします。 taiseiも試したのですが、NetBSDでゲームパッドを使うには何か修正が必要なようですので、今回はパスします。

chromium-bsuをインストールする

chromium-bsuのインストールは以下のようにします。

# cd /usr/pkgsrc/games/chromium-bsu
# make install
ここで、chromium-bsuはバージョン0.9.16.1nb1以降を使うようにします。 このバージョンから、SDL2経由でゲームパッドを利用できます。

ゲームパッドを接続する

Logicool Gamepad F310には2つのモードがあります。XモードとDモードです。 背面のスライドスイッチで切り替えが可能です。 Xモードでは、USB Product ID = 0xc21d、Dモードでは、USB Product ID = 0xc216と、モード毎に別々のIDが割り振られています、 スライドスイッチを切り替えると、一度抜き差ししたのと同じような挙動をします。

(Dモードで接続)
uhidev0 at uhub2 port 1 configuration 1 interface 0
uhidev0: Logicool (0x46d) Logicool Dual Action (0xc216), rev 2.00/4.14, addr 6, iclass 3/0
uhid0 at uhidev0: input=8, output=7, feature=0
(Xモードへ切り替え)
uhid0: detached
uhidev0: detached
uhidev0: at uhub2 port 1 (addr 6) disconnected
uhidev0 at uhub2 port 1 configuration 1 interface 0
uhidev0: Logicool (0x46d) Gamepad F310 (0xc21d), rev 2.00/40.14, addr 7, iclass 255/93
uhid0 at uhidev0: input=20, output=6, feature=0

XモードかDモードか

Dモードは旧来のモード、Xモードはより新しいモードであるようです。 SDL2のBSD用のjoystickサポートは、Dモードを前提としているようです。 Xモードのサポートは、Linuxのevdevを前提としているようにも見えます。 実際、XモードのF310では、キャリブレーションをしても使えるようになりませんでした。 NetBSDのUSB HID関連のカーネルソースコードを見ると、XBox用のゲームパッドのサポートコードがあります。 同様にカーネルでのサポートが必要なのかもしれません。

chromium-bsuで遊んでみる

Gamepad F310をUSB接続してDモードに切り替えてから、chromium-bsdを起動させてみると、 正しいキーバインディングで利用できているようです。 しかし、初めてゲームパッドというものを使ったので、良い成績を残すには相当の慣れが必要そうです。

No comments:

Post a Comment

EasyRTCのGitHubリポジトリーがなくなっていた

https://github.com/priologic/easyrtc で公開されていた EasyRTCというWebRTCをウェブブラウザーで使うライブラリーのリポジトリーがなくなっていた。 フォークした https://github.com/open-easyr...