# 左アナログスティック感度調整の設定方法 https://user-images.githubusercontent.com/1664497/150636857-f3d40900-2713-41b8-856a-279c200d9ae7.mp4 * procon_bypass_man: 0.1.9以上が必要です * PBMには、左アナログスティックの入力の最大値を書き換える機能があります。それをsetting.ymlに書く方法を説明します * これを使うと、特定のボタンを押している間は、スティックを完全に倒している状態で、スプラトゥーンでいうところの `スニーキング` で移動ができるようになります ## 1. プロコンの左スティックのほぼニュートラルな状態の座標を記述する * `set_neutral_position x, y`を使って、プロコンの左スティックのほぼニュートラルな状態の座標を記述します * 完全にニュートラルな値を記述すると最速のスニーキングが出ないので微妙にずらします * プロコンごとにニュートラルな状態の座標に個体差があって、最速のスニーキングを出すには本数値を調整する必要があります * 実際に設定している座標の例 * `set_neutral_position 1906, 1886` * `set_neutral_position 2100, 2000` ## 2. 左アナログスティックの入力の最大値を設定する * ニュートラルな状態の座標が決まったら、次はどのボタンを押したときに、どれくらいスティック感度を書き換えるか、を設定します * 設定には `left_analog_stick_cap` を使います * 実際にパラメータを記述した例を用いると `left_analog_stick_cap cap: 1100, if_pressed: [:zl, :a], force_neutral: :a` のようになります * パラメータは3つあります * `cap: 1100` * こちらはニュートラル座標からの最大距離をどのくらいにするか、を決めます * 指定したボタンが押されている間は、ニュートラル座標から1100までの範囲に「現在の座標」を書き換える、という設定になります * スプラトゥーンのスニーキング用途であれば、1100固定で問題ありません * `if_pressed: [:zl, :a]` * こちらは zlボタン, aボタンが両方押されている状態の時に本設定が発動する、という設定になります。トリガーです * つまり、zlとaを同時押ししている時に、左アナログスティックの入力を書き換えます * `force_neutral: :a` * こちらは、左アナログスティックの入力を書き換えている時は、「強制的にaボタンを押していない状態にする」という設定になります * つまり、zlボタンとaボタンを同時押ししている時には、左アナログスティックの入力を書き換えて、aボタンは押していない状態になります * どうしてこれが必要かというと、ゲームタイトルによるのですが、スプラトゥーンの場合は、ガチアサリ中に、保有しているアサリを投げないために必要になっています * force_neutralはoptionalです ## 3. 設定を反映させる * 上記の記述を加えたsetting.ymlを起動中のprocon_bypass_manプロセスで読み込むには、プロセスにその旨を伝える必要があります * ラズベリーパイを再起動して、プロセスを立ち上げ直す、でも目的は達成できますが、もっと簡単にsetting.ymlを再読み込みする必要があります * 書き換えたsetting.ymlを、起動中のprocon_bypass_manプロセスへ即時反映するには、procon_bypass_manプロセスを動かしたまま、別のshellから 以下をを実行してください * setting.ymlのシンタックスが正しければ、switchとの接続が継続したままsetting.ymlの内容を読み込んでいるはずです ```shell sudo kill -USR2 `cat ./pbm_pid` ``` ## まとめ * スティックの中央値を設定します * スプラトゥーンでの最速スニーキングを出すには、set_neutral_positionの値を変更してください * 発動するボタンを設定します * setting.ymlを再読み込みします ## 設定例 ```yaml version: 1.0 setting: |- prefix_keys_for_changing_layer [:zr, :zl, :l] set_neutral_position 2100, 2000 layer :up, mode: :manual do left_analog_stick_cap cap: 1100, if_pressed: [:zl, :a], force_neutral: :a end ```