Pyxelでゲームパッド入力させるときに気をつけること(A/Bボタンの配置が逆?!)
レトロゲームエンジンPyxelには "pyxel.GAMEPAD1_BUTTON_A" のように、ゲームパッドからの操作を受け付ける機能があります。便利便利。
ですが、1点気をつけるべきことがあります。それは「ゲームパッドの種類によってはA/Bボタンの(X/Yボタンも)配置が逆になる」という点です。
まず、以下はNintendo製のコントローラ例。Aボタンが右に配置されています。ほか、Sonyのプレステのコントローラの◯ボタンも右配置ですね。
日本のゲームプレイヤーはこの配置に慣れていることが多いはず。
一方、Microsoftのゲームパッドだと以下のように、Aボタンが下に配置されています。
どうやら海外の(といっても国によると思いますが、アメリカなどの)プレイヤーとしてはこちらのほうが標準形のようです。
んで、Pyxelの "pyxel.GAMEPAD1_BUTTON_A" なのですが、国際標準を意識しているためか、下に配置されたボタンをAボタンと認識するようです。
つまり Pyxelで "pyxel.GAMEPAD1_BUTTON_A" ボタンを決定やジャンプの用途でコーディングした場合、Nintendoなどのゲームパッドを使っている人がプレイすると、「Bボタンで決定やジャンプ」という操作になってしまいます。
「右側の下ボタンでxxの操作」と説明していれば間違いにはならないのですが、「Aボタンでxxの操作」と説明していたり、慣例的にAボタンの操作が自然な機能に "pyxel.GAMEPAD1_BUTTON_A" を割り当てたりしていると「あれ、逆じゃね?」と一部のプレイヤーに思われてしまうので注意です。
ちなみに私が気づいたのは、こちらの動画を発見したことがきっかけ。
ゲーム配信者の方がPyxel版ドラクエ1をプレイしてくださっていて、わーいありがとう!と喜んで観てたのですが、どうやらABボタンが逆でめちゃくちゃ操作しづらいらしいのです。
なんで??と思って調べたら上記の事情だと判明した次第でした。事前調査不足で申し訳なかったです。。 そして気づかせていただき二重にありがとうございました。
開発側の対策は?
2つあると思います。
コンフィグ画面を用意して、下側Aボタンと右側Aボタン両方に対応できるようにする
最初にAボタンを押させて、それが右側ボタン(pyxel.GAMEPAD1_BUTTON_B)だったら、以降は右側ボタンをAボタンとして扱う。
Pyxel版ドラクエ1では上記の2の方法でパッチをあてました。
読み込み直後の画面でAボタンを押すようにうながしておいて(というか、何も考えずに押すでしょうけど)、入力されたボタンに応じてAボタンとBボタンを逆にしています。
いやーびっくりしました。
同じことをやらかさないよう、この記事がどなたかのお役に立てれば幸いです!