刹那(せつな)の瞬き

Willkömmen! Ich heiße Setsuna. Haben Sie etwas Zeit für mich?

Ubuntu上のPPSSPPでPS3用コントローラ(有線)を使えるようにしてみた

「PPSSPP」は比較的簡単に楽しめるPSPエミュレータだと思います。

PSP(実機+CFW)はPCにUSB接続すれば、ほぼ外部ストレージと同様なので、すべての作業がUbuntuだけで完結します。

そもそもPSPでプレイしてるゲームは「ぺルソナ」「P3ポータブル」等のRPGや激しい操作のないソフトが多いので、キーボード操作だけで満足してました。
※動作するだけで嬉しかったので、実際のプレイは実機です。

満足してたのですが、PC環境を刷新してから、少し知識欲が出てしまいました。
せっかくUSB接続なPS3コントローラを持ってるので、何とかこれで操作できないものかと。

ダメ元で色々と試して、何とか思い通りにプレイできるようになりました。
以下、その顛末です。

....

まず、PPSSPPですが、現時点でリポジトリからUbuntu 18.04.2に導入できるバージョンは、v1.7.0 です。

そして、私が所持してるPS3コントローラは、
PS3 標準コントローラ(DUAL SHOCK3)
・HORI PAD3 MINI (USB接続)
の2つです。

PS3の標準コントローラ(DUAL SHOCK3)が誤動作するようになり、障害切り分けのため、BluetoothではなくUSB接続の HORI PAD3 MINI を購入しました。

この HORI PAD3 MINI ですが、簡単に使えると思ってたのに、PPSSPPをインストールした直後の環境では「パッドをテスト」で十字キーが認識しません。

念の為、

$ sudo apt install joystick
$ sudo apt install jstest-gtk

から、「jstest-gtk」を起動すると、こちらは問題なく認識しています。

f:id:infinity_volts:20190523232002p:plain

実際にコントローラを操作するとわかるのですが、HORI PAD3 MINI の十字キーは、Axis 4, 5に割り当てられています。

DUAL SHOCK3 は Buttons 9-12 に割り当てられていたので、同じPS3用コントローラでも機種によって異なるのは意外でした。

ちなみに、PCSX2ではキーアサインの変更だけで問題なく動作してます。

いずれにせよPPSSPP側の問題なので、アプリ設定で対処したいのですが、表面上、そのような項目設定はありません。

....

海外のサイトを巡ったところ、次のサイトを見つけました。

PPSSPP Controller Setup Guide for when nothing else works - RetroPie Forum

PPSSPPはコントローラの定義を"gamecontrollerdb.txt"というファイルに記録しているようです。

そして、このファイルには"controllermap"の実行結果が必要なようです。

チュートリアルによると、SDL2が必要なのですが、今の環境は壊したくないので、別HDDにOSとコンパイル環境を一式準備して試してみました。

※メモをコピペしたら色々と混ざってました。1,2と3はどちらかの環境でOK。訂正は別記事で。

1. mercurialのインストール

$ sudo apt install mercurial

2. SDL環境のインストール

$ cd ~
$ mkdir work
$ cd work
$ hg clone https://hg.libsdl.org/SDL SDL
$ cd SDL
$ mkdir build
$ cd build
$ ../configure
$ make
$ sudo make install

3. SDL2-2.0.6の取得&コンパイル

$ cd ~/work
wget https://www.libsdl.org/release/SDL2-2.0.6.tar.gz
$ tar -xzvf SDL2-2.0.6.tar.gz
$ cd SDL2-2.0.6/
$ cd test/
$ ./configure
$ make controllermap

4. controllermap の動作確認

$ ./controllermap

Terminal に INFO: や Usage が出力されればコンパイル成功です。

続いて、HORI PAD3 MINI の設定を"hori.txt"ファイルに出力します。

$ ./controllermap 0 > hori.txt

f:id:infinity_volts:20190524001254p:plain

この画面が表示された後、緑色に表示されているボタンに相当する「パッド上のボタン」を順次押していきます。

注意する点は、左のアナログスティクと十字キーのレイアウトがPS3と異なるのですが、十字キー十字キー、アナログスティクはアナログスティクにしないと、PPSSPPの「キーを設定する」で混乱します。

で、その出力結果の内容ですが、

・HORI PAD3 MINI

030000000d0f00004d00000011010000,HORI CO.LTD PAD A,platform:Linux,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,

 ・PS3 標準コントローラ(DUAL SHOCK3)のUSB接続 ※故障中なので参考まで

030000004c0500006802000011810000,Sony PLAYSTATION(R)3 Controller,platform:Linux,a:b0,b:b1,x:b3,y:b2,back:b8,guide:b10,start:b9,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpdown:b14,dpleft:b15,dpright:b16,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,

となりました。

最後に、この結果を"gamecontrollerdb.txt"に追記します。
Ubuntu上のPPSSPP v1.7.0では、/usr/share/ppsspp/assets に存在します。

sudo bash -c 'cat hori.txt >> /usr/share/ppsspp/assets/gamecontrollerdb.txt'

前述の出力結果をエディタでコピペする場合は、改行に気をつけてください。
見た目は改行しているように見えますが、1 device, 1 line です。

以上で事前準備は完了です。

....

この作業の後、PPSSPPを起動 →「ゲームの設定」→「コントロール」→「キーを設定する」→「パッドをテスト」で十字キーが認識するようになりました。

後はキー設定を確認して作業終了です。

これで、ようやくPS3コントローラが使えます。

いやー、長かった。

追記: 2020-11-30

PPSSPP について新しい情報を記事にしたのでリンクを貼っておきます。