# この記事を読むと嬉しい想定読者 オフラインでのゲームプレイで使用デバイスがキーボード同士の対戦になったとき困る人・大会運営者等。例えばストリートファイタ―6等でもこの問題には打つ手がなかったようで、公式ルールではこの場合オンラインで対戦するように定められています([カプコンプロツアーコントローラ利用規定5項より](https://sf.esports.capcom.com/cpt/jp/rules/))。 大きな大会ではオンライン対戦の準備もあるでしょうが、個人レベルのオフ会などでは致命的なことがあり得ます。 # KeyboardSplitterXbox ## これは何? 最大4つのキーボードを仮想的なXboxコントローラとして扱えるツール。 ## 背景:Windowsにおけるキーボード入力の問題 例えばゲームで対戦するための入力デバイスとしてキーボードを2つ接続して、同一の例えばAキーを押すとします。しかしそれら2つのキーボードからのA入力は個別に認識されることはなく、全く同じA入力とみなされてしまうため、2つのキーボードではゲームは成立しません。 ## このツールを使うと? 各キーボードは独立した仮想XBoxコントローラによる個別の入力としてみなされるようになり、結果的に最大4つのキーボードがゲーム内で4つのXboxコントローラのように扱われ、ゲームを成立させることができます。 ## Download [最新版のKeyboard.Splitter.x.x.x.x.zipをダウンロード・解凍してください。](https://github.com/djlastnight/KeyboardSplitterXbox/releases) ## 事前にシステムにインストールが必要なもの 注意:exeへの直リンクですので、クリックするとダウンロードされます 各々実行してインストールしてください。 - [DirectX 9.0c June](https://download.microsoft.com/download/8/4/A/84A35BF1-DAFE-4AE8-82AF-AD2AE20B6B14/directx_Jun2010_redist.exe) - [Vcredist 2013 x86](https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe) - [Microsoft's Xbox Accessories Driver (64 bit)](https://github.com/djlastnight/KeyboardSplitterXbox/blob/master/Xbox360Accessories_x64_1.2.exe?raw=true) # 使い方 ## 実ボタン配置とボタン配置設定用xmlファイル [XBOX公式のコントローラ配置図を以下に引用します](https://support.xbox.com/ja-JP/help/xbox-360/accessories/controllers) ![公式からの引用](https://hackmd.io/_uploads/ByKfnnnhge.png) 上図の実ボタン配置と対応する設定ファイルのテンプレートが以下です。コメントでどのボタンに対応するか細かく補足しました。 まず以下のxmlをコピーしてsplitter_presets.xmlの中身を丸ごと入れ替えてください。 ```xml <?xml version="1.0" encoding="utf-16"?> <preset_data xmlns:xsi="http://w3.org/2001/XMLSchema-instance" xmlns:xsd="http://w3.org/2001/XMLSchema"> <preset name="BaseTemplate"> <button id="4096">Z</button><!-- Aボタン --> <button id="8192">X</button><!-- Bボタン --> <button id="16384">C</button><!-- Xボタン --> <button id="32768">A</button><!-- Yボタン --> <button id="256">S</button><!-- Lボタン --> <button id="512">D</button><!-- Rボタン --> <button id="32">Escape</button><!-- BACKボタン --> <button id="16">Enter</button><!-- スタートボタン --> <button id="64">L</button><!-- LeftThumb=左スティックのプッシュ入力 --> <button id="128">P</button><!-- RightThumb=右スティックのプッシュ入力 --> <trigger id="65536">F</trigger><!-- 左トリガ ー--> <trigger id="131072">V</trigger><!-- 右トリガー --> <axis id="1" value="-32768">Left</axis><!-- 左スティック左Xinput --> <axis id="1" value="32767">Right</axis><!-- 左スティック右Xinput --> <axis id="2" value="-32768">Down</axis><!-- 左スティック下Xinput --> <axis id="2" value="32767">Up</axis><!-- 左スティック上Xinput --> <axis id="4" value="-32768">None</axis><!-- 右スティック左Xinput --> <axis id="4" value="32767">None</axis><!-- 右スティック右Xinput --> <axis id="8" value="-32768">None</axis><!-- 右スティック下Xinput --> <axis id="8" value="32767">None</axis><!-- 右スティック上Xinput --> <dpad direction="1">None</dpad><!-- 方向パッド右POV --> <dpad direction="2">None</dpad><!-- 方向パッド左POV --> <dpad direction="4">None</dpad><!-- 方向パッド下POV --> <dpad direction="8">None</dpad><!-- 方向パッド上POV --> </preset> </preset_data> ``` ## 起動と使い方 以下が起動画面です(私の環境ではなぜか上部が白くなってます) ![](https://hackmd.io/_uploads/SyeV2nnhee.png) 仮に1体1でキーボード2台での格闘ゲームの対戦を想定して設定します。 1. まずはキーボード2台必要ということで、左上のSlots countを2にしてください。最初4つあったスロットが2つになると思います。 2. 次に、Choose keyboardでどのキーボードを設定するか選ぶのですが、デフォルトのKeyboard_01といった名前ではどれがどのキーボードか区別がつきません。そこで、キーボードの名前の右隣りにある「..」をクリックすると「Waiting for keyboard input...」というウインドウが表示され、キーボード入力を待ち受けます。そこで使いたいキーボードから何でもいいので入力をすると、入力した使いたいキーボードが選択されます(名前は相変わらず見てもわからない数字です)。同様に、2スロット目のキーボードで2つ目の使いたいキーボードを認識させます。これで2つのキーボードが別々に認識されました。 3. あとはプリセットです。Preset:defaultとなっているところから、前項でxmlの内容を入れ替えて作ったBaseTemplateというpresetが選べることを確認します。BaseTemplateの名の通り、こちらは叩き台を意図していますので、自由に変更してもらって構いませんが、KeyboardSplitter画面からプリセットの編集や追加を行って保存すると、書き加えていたコメントが消失してしまいます。このコメントを維持したい場合はsplitter_presets.xmlファイルを直接編集しましょう。追加の場合、具体的には`<preset name="">~</preset>`をコピーして`</preset>`の下に貼り付け、コメントと照らし合わせながらキー入力を設定してください。name=""は入力が共通ならばゲーム名、独自の配置を使う場合プレイヤー名を入れておくことがお勧めです。終わったら上書き保存して、KeyboardSplitter再起動で反映です。 4. 2の手順でそれぞれのキーボードを認識させて、3で必要なpresetを設定し、指定し終わったら、いよいよ各キーボードを仮想Xboxコントローラ化します。右上のStartを押してください。これだけです。おめでとうございます!キーボード同士の対戦を成立させることができるようになりました! ## トラブルシューティング - エラー「Slot is invalidated」 このエラーが出る場合、おそらくインストールされているSCP Busのバージョンが異なります。 バージョンは22.52.24.182でなければなりません。以下のようにデバイスマネージャのシステムデバイスからSCP Virtual Bus Driverを見つけて、プロパティを確認し、バージョンが異なる場合(新しいか古いかは関係なく)アンインストールしてください。以下は公式の説明画像引用です。 ![公式ページからの画像引用](https://hackmd.io/_uploads/rkZHn3h3xe.png) PCを再起動し、KeyboardSplitterを実行します。その後、ドライバをインストールするように指示されるはずです。 - キーボードが反応しない・又は押してない入力が発生する 壊れていなくても安価なキーボードでは仕組み上ありえるそうです。買い直しましょう。キーボードスペックにNキーロールオーバー、アンチゴーストと書かれていると安心できます。 - 起動時にエラーが出てpresetが読み込めない splitter_preset.xmlファイルのエンコードがUTF-16LE以外になっていませんか?もしそうであれば、UTF-16LEに変更して下さい。エンコードの確認と変更については、[VisualStudioCode](https://code.visualstudio.com/)という高機能エディタで行うのがお勧めです。[解説記事](https://atmarkit.itmedia.co.jp/ait/articles/1806/01/news051.html)と併せれば解決できるでしょう。 - Dpadが動かない 古いゲームではDpadに対応していないものがあります。Xinputの方で設定しましょう。 - 設定したがゲーム起動中に何も反映されてないように見える 古いゲームなどでは、起動時にコントローラが刺さっていないとコントローラが認識されないことがあります。このツールはキーボードを仮想的なXboxコントローラに変えていることを思い出してください。 - 入力がおかしい Slots countは必要最低限(使いたいキーボードの数)に設定しましたか?そうでない場合、同じキーボードに対して2種類以上のpreset設定が有効になり、おかしなことが起こっているかもしれません。Slots countは最小限にしましょう。 {%hackmd /@empengineer/footer %}