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 が出れば認識されてます。
こういう感じ。(USBがゲームパッドでふさがれてるのでスクリーンショット撮れなかった)
GUIDがゲームパッドのIDですね。
認識されてたら
./controllermap 0 > out.txt
とやると、ゲームパッドの画像が出てくるので、画面で光っているところに該当するボタンを押します。
該当がない時は画面タッチかスペースキー、やめるときは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再起動。
うまく動いたー。
これもオッケー!
(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として表示したら、ゲームカートリッジの画像になるのだ!かっこいい!
(これらのパッドは、一般的な物なので、接続できると思われますが、実際に確認したわけではないです)
directinput対応のコントローラだと繋ぐのみでPocketCHIPに認識してもらえるようですが、Xinput対応のコントローラ(xbox oneコントローラとか)ではダメなようです
他のディストロでの方法も含め様々に試したのですが、どうにも上手く行きませんでした……
情報ありがとうございます。そんな違いがあったんですね…。