はじまりはビープ音

ドリームキャストのことを中心にゲーム関係の気になったことを書いていくつもりです。

「ストリートファイター6」用の11ボタン型レバーレスコントローラーを作ってみたよ Part2

前回のPart1で作ったものを踏まえて、ちょっと改良したものを作ってみました。「ストリートファイター6」の発売まであと少し。

pomegd.hatenablog.com

目的

キーボードベースの配列自体は概ね問題なさそうだったので、前回作ってみて見えた課題点の改善や128x32のOLEDの使用、RP2040の自前の回路で作る、というのが主な目的です。

基板設計

前回はPGA2040を使って基板設計をしましたが、今回は自前でRP2040(Raspberry Pi Picoと同等の回路)を組みました。何度か自前で組んで作ったことはありましたが、ロットによってうまく動作しないものが度々混ざったりしていたので避けていました。でもPGA2040を別で用意して半田付けするのも面倒だったので、今回は自前で組んで実装注文することにしました。

主な変更点

※赤字が既に決めた割当、黒が割当未定、「未使用」はL2と位置を迷っていたため基板上は残していますが、攻撃行動11ボタンのルールに準拠するため最終的には使用できない状態で仕上げています。

自前でRP2040回路を組む

前述の通りPGA2040ではなく自前でRP2040を組みました。

Upの位置

K1の左隣にUpを設けていましたが、Up+K2が押しづらいため位置を変更しました。右手親指だけでUp+K1、Up+K2を押すことができます。これにより前回は4行の配列でしたが5行の構成になりました。

OLEDを128x64から128x32に

Upの位置を下段に1行追加する形で入れたことに伴い、そのままでは基板の縦幅が増えてしまいます。128x64のOLEDの場合、その分縦幅を使ってしまうので縦幅半分の128x32のOLEDに変更しました。

ただ、GP2040-CEには128x64のOLED用で設計されているため、128x32で表示するにはソースの変更が必要でした。単純に表示するだけであれば[BoardConfig.h]に↓1行追加すれば表示は可能です。

#define DISPLAY_SIZE OLED_128x32

これだけではボタン表示等が128x64用なので縦半分までしか表示されません。そのあたりは[/src/addons/i2cdisplay.cpp]を編集する必要があります。

トーナメントモードスイッチを追加

これは市販のアケコンでも一部導入されているスイッチで、HomeやStartなどのオプション系ボタンを無効状態にするものです。これがあることで対戦中に間違って押してしまっても安心です。

前回はオプション系ボタンとの間隔を設けていたためそのリスクもそんなに高くなかったので入れていませんでしたが、今回は縦幅減らすために詰めた都合上、誤って押す場合があるかもと考えてスライドスイッチを使って追加しました。

動作確認・完成

サイズはボタンキャップ部分含めて177.0mm x 100mm x 16.7mm。ちなみに前回は200.0mm x 94.0mm x 16.7mm。今回も「まご山つく蔵」さん @mago_oowarawa に以前アケコン用に描いていただいたイラストを使用。

Upの位置を変えたことでK1、K2を単体で押したい際にUpも一緒に押してしまうのでは?と思うかもしれませんが、親指の角度を使い分けることで間違って押してしまうことも回避できます。

今回もケースは3Dプリンタで作成。強度も通常使用の範囲であれば特に問題なさそうです。

トーナメントモードのスイッチ部分、ケースから飛び出す形にはしたくなかったので現状の形にしてますが、ケース側の穴サイズは要調整という感じです。

OLEDは高さ半分になった都合上、ボタンの表示サイズも半分になって視認性を懸念してましたが、思ってたより全然見えます。そもそもプレイ時に普段からその部分を見るわけではないので、ある程度は許容と考えていましたが気にするほどのものではありませんでした。

PS4対応したけど…

8分認証

GP2040-CEはv0.7.0からPS4に対応しました。ただし、8分認証があるため接続後8分で接続が解除されます。それを回避して継続して使用するにはDualsShock4からフラッシュメモリをダンプする必要がありますが、その方法も公表されておらず、敷居が高く現状では誰でも気軽にPS4で使えるという状況ではありません(自分もまだできてない)。再度挿し直せば接続できますが、やはり面倒です。

ボタンの割当

GP2040-CE | Usage

PCでXinputモードで使用する場合、XinputではTouchPadが存在しない(機能しない)ボタンのため、11ボタンを設定するにはBackを使用する形になります。しかし、PS4モードでPS4に接続するとXinputではBackだったボタンがPS4ではShareボタンとして機能してしまいます。つまり、攻撃行動に割り当てたボタンを押す度にスクショのシェア画面が表示されてしまいます。各接続モードごとに割当を設定できれば解決できるとは思いますが、現状では対応していません。

PS4に合わせてTouchPadで設定し、PCで使用する際もPS4モードで接続すれば一応の解決にはなります。

また、Brookから発売されている「Wingman XE2」(USBコントローラーをPS4で使えるようにするコンバーター)をXinputで使った場合、

  • Back → TouchPad
  • Back + Start → Share

となるようなので*1、これを使うのも一つの手段かもしれません。

なお、同社より発売が予定されているPS5対応版のWingmanFGCも同様の形になりそうです*2

8分認証の問題でPS4に直接接続する機会が少ない点やコンバーターを使えばXinputのBackがTouchPadに置き換わることを考えると、現状はXinputベースで割り当てておけば良さそうです。

使ってみた感想

書く内容としては前回と特に変わらないです。配置変更は慣れ次第。割当はスト6出てからもっと使って考えたいところです。

設計自体についてはキーボードの配列から構成考えてみるのは全然ありだと思います。

分割型、曲線型、GP2040ではなくPS5対応のUSB Fusion使用したタイプとか、またなんかやる気が出たら作ってみようと思います。