Batocera.linux: 28ボタン対応 Part 1
従来のNullPopPoCustomは16ボタン仕様ではありますが
・24ボタンコントローラの存在発覚
・SteamDeckの20ボタン+2ハット
といった事情を鑑みまして、この際現行で対応可能なフル実装の
28ボタンに対応してしまおうと画策する。
ボタン内訳
・標準12ボタン
・HOTKEY用
(ここまで公式互換)
・CZボタン用
・MENUボタン用
(ここまで従来のNullPopPoCustom)
・LR4~5 (SteamDeckの背面ボタンを意識)
・G1~8 (付加機能ボタン SteamDeckのハットスイッチを意識)
…でちょうど28。
(なお、これとは別にDPad用で4bit必要でして)
書き換え対象が多すぎる
本家Batoceraは12ボタン+HotKeyな構成。
この対応ボタン数を拡張するわけです。
ボタン15個追加するだけだから簡単でしょ?
…んなわきゃない。
主要な部分はEmulationStationとRetroArchにありますが、
特に本家RetroArchは12ボタン+4方向の16bit前提で
組まれているもんだからもう大騒ぎ。
もちろん、コアそれぞれも個別対応要るよー
そんなわけで
ちっとっつ進めていきませぅ。
今回は大した内容でもないので無料で。
EmulationStation
まず中枢となるEmulationStationから。
といっても、ここではボタンアサインの項目増やすだけ。
公式パッチ適用
まず、Batocera38相当ブランチ。
で、公式パッチ2つ適用済の状態。
これをベースとしてハックを加えていきます。
ボタン画像追加(仮)
resources/help/ にいろいろ画像あります。
とりあえずC,Z,MENU,Gボタン用画像をてけとーに追加。
(EmulationStationで字が消える問題未だよくわかんない)
アサイン対象整備
es-core/src/guis/GuiInputConfig.cpp の GUI_IMPUT_CONFIG_LIST で。
GUI上でコントローラのボタンアサインするときに出てくるやつ。
なお、最近のBatoceraはバージョン上がる度に設定順が意地悪に
進化しているので、逆らってBatocera32の配列をもとに拡張してます。
また、 es-core/src/InputConfig.cpp の InputConfig::buttonDisplayName()
でもボタン名が意地悪になってるので、ABに戻してます。
es-app/src/guis/GuiKeyMappingEditor.cpp の mMappingNames
にはコア,ゲーム別のキーアサイン設定で使うボタン名が列挙されるので
同様に拡張しときます。
なお、こちらはHOTKEYとのコンビネーション設定もあるので忘れずに。
es-app/src/KeyboardMapping.cpp の KeyMappingFile::triggerNames
にはボタン別の設定名が列挙されているので、同様に拡張しときます。
これについては設定名の列挙なので、順番あまり関係なさげ。
上記対応済ブランチ
_NC38_For28Buttons に上げました。
Batocera本体
上記変更を _NC38_Packages にまとめ、
ビルド用として NullPopPoCustom38 に適用してます。
今回の成果
今回の変更ぶんだけでも、Wine等のPAD TO KEY経由でキーボード操作に
代えるコアについては多ボタンで操作できるようになりました。
他、コントローラの実ボタンを扱うコアについては、別途コア毎の
対応が必要になってきます。