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経由でキーボード操作に
代えるコアについては多ボタンで操作できるようになりました。

他、コントローラの実ボタンを扱うコアについては、別途コア毎の
対応が必要になってきます。

この記事が気に入ったらサポートをしてみませんか?