PocketCHIP : PICO-8をゲームパッドでプレイしよう!


PICO-8のゲームを遊ぶのに、PocketCHIPのキーボードではなかなか厳しいです。特にアクションゲーム。USBのゲームパッドが使えないか試してみました。

キーボードとか、有線LANアダプタはUSBに繋いだら何もしなくてもすぐ使えたので、きっとUSBゲームパッドもいける!と思ってたのですけども、繋いでもPICO-8の操作は不可能。
使うためには、設定が必要みたいです。


こちらの情報にしたがってやってみます。

Usb controller for Pico-8 on PocketC.H.I.P?
https://bbs.nextthing.co/t/usb-controller-for-pico-8-on-pocketc-h-i-p/5077/17

1.ユーザ「chip」を「input」グループに追加する。

sudo adduser chip input

2.一度PocketCHIPを再起動する。(電源メニューからREBOOT)

3.Githubから、sdl controller設定をダウンロードして、「/home/chip/.lexaloffle/pico-8/」に「sdl_controllers.txt」のファイル名で保存。

cd /home/chip/.lexaloffle/pico-8
wget https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt
mv gamecontrollerdb.txt /home/chip/.lexaloffle/pico-8/sdl_controllers.txt

4.PICO-8を起動する。初回起動時は認識されないので、一度ホームボタンでホームに戻ってPICO-8をもう一度実行してみる。

…どうだ?…反応なし…。

そう簡単ではなかった。sdl_controllers.txt の設定に、自分のコントローラが含まれている必要があるみたいですね。リストに含まれてるコントローラであれば、これだけで使えるようになると思われる。

リストにないコントローラの場合、どうやって設定を作ればいいんだろう?


ここにありました。

Guide to writing new SDL2 controller mappings for your input devices for use with Pico-8 from your PocketCHIP
https://bbs.nextthing.co/t/guide-to-writing-new-sdl2-controller-mappings-for-your-input-devices-for-use-with-pico-8-from-your-pocketchip/8757

SDL2-2.0.4.tar.gz の中の、controllermap で新しいコントローラのマップが作れるらしい。

1.コンパイル環境の取得(僕は、すでにいろいろコンパイルしてきたので、これは済でした)

sudo apt-get update
sudo apt-get install gcc make libsdl2-dev

2.SDL2-2.0.4.tar.gz の取得
適当な作業ディレクトリ作って、そこに移動してからやるといいと思います。

wget https://www.libsdl.org/release/SDL2-2.0.4.tar.gz

3.ソースの展開

tar -zxvf SDL2-2.0.4.tar.gz

4.該当ディレクトリに移動(今回作るのは、SDL本体じゃないので、testの下にある)

cd SDL2-2.0.4/test

5.Makefile作成

./configure

6.controllermap をMake

make controllermap

同じディレクトリに「controllermap」ができてたら成功!

ジョイパッドを繋いで、controllermap 起動。

./controllermap

メッセージで joystics attached が出れば認識されてます。

gamepad_2

こういう感じ。(USBがゲームパッドでふさがれてるのでスクリーンショット撮れなかった)
GUIDがゲームパッドのIDですね。

認識されてたら

./controllermap 0 > out.txt

とやると、ゲームパッドの画像が出てくるので、画面で光っているところに該当するボタンを押します。

gamepad_1

該当がない時は画面タッチかスペースキー、やめるときはESCボタン…なんですが、僕のところではうまく動きませんでした。ボタン押しても反応しない。

一番重要なゲームパッドのIDはわかったので、元のファイルを参考にして、適当に定義を作ってみます。

03000000b40400000a01000000010000,CYPRESS USB Gamepad,platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b5,guide:b2,start:b8,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,

こんな感じかな。「leftx:a0,lefty:a1」が十字キー、その他がボタンに該当です。

/home/chip/.lexaloffle/pico-8/sdl_controllers.txt の末尾にこれを追記して、
PICO-8再起動。

gamepad_3

うまく動いたー。

gamepad_4

これもオッケー!
(GUID:030000000b0400003065000000010000)

ということで、ゲームパッドでの操作成功しました!
ゲームパッドの種類ごとに設定はかなり大変。該当の設定が無い時は十字ボタンとA/Bボタンだけのパッドとして自動認識してくれたらいいのになー、と思います…。


その後、ソースは必要ないので、完成した controllermap をどっかディレクトリに退避させて、消しちゃっていいんじゃないでしょうか。ゲームパッド画像「controllermap.bmp」も必要かも?
僕は、今後は、IDだけわかればいいのでcontrollermap 以外は消しちゃいました。
(間違って違うディレクトリを消さないようにマジ注意!rmは細心の注意で!)

mv controllermap ../..
cd ../..
rm -r SDL2-2.0.4
rm SDL2-2.0.4.tar.gz

ちなみに、PICO-8のゲームは、/home/chip/.lexaloffle/pico-8/carts/ に入っているみたいですね。画像ファイルの*.pngに、プログラムが埋め込まれているそうです。
pngとして表示したら、ゲームカートリッジの画像になるのだ!かっこいい!




(これらのパッドは、一般的な物なので、接続できると思われますが、実際に確認したわけではないです)

PocketCHIP : PICO-8をゲームパッドでプレイしよう!” へのコメントが 2 点あります

  1. directinput対応のコントローラだと繋ぐのみでPocketCHIPに認識してもらえるようですが、Xinput対応のコントローラ(xbox oneコントローラとか)ではダメなようです
    他のディストロでの方法も含め様々に試したのですが、どうにも上手く行きませんでした……

  2. 情報ありがとうございます。そんな違いがあったんですね…。