1. 移動量

 スティックの入力の度合いを入力量、ヒットストップずらし(以下、SDI)によってキャラがずれる度合いを移動量と呼ぶことにします。
 3Dスティック入力はGCにおいて、X軸Y軸ともに8bit(256段階)に分解されます。スティック中心(ニュートラル状態)からの入力量は0~127の範囲です。

 移動量は、入力量が真横または真上・真下のように1軸成分のみの場合、最大6.0、最小4.2になります。この数字はスマブラDX内での距離の単位です。比較として、立ち状態のフォックスの身長が約15です。そして、最大の6.0の移動量を得るためには中心から80、最小の4.2では中心から56の入力量だけスティックを倒す必要があります。つまり、最大までスティックを倒し切る必要はありません。
 一般的には、移動量は、以下のように計算されます。
1. X軸方向の移動量を0.075*X軸の入力量、Y軸方向も同様に0.075*Y軸の入力量で計算する。
2. √( X^2 + Y^2 )で、スティック中心からの移動量の絶対値を計算する。
3. 2.の結果が4.2未満であれば0.0、6.0より大きければ6.0以下に補正する(同じ中心角で移動量が6.0以下である最大の入力量X、Yを使って2.を再計算する)。
4. Y軸方向・X軸方向ともに、入力量が22以下の場合、その軸方向の移動量を消す。

4.の補正は入力値に対する補正ではなく、移動量に対する補正です。そのため、真横や真上・真下にずらしたいとき、ちょうど最大の6.0の移動量を得るには、入力が軸から少しもずれてはいけません。

 第1象限のみの、スティックの入力値と対応するSDIの移動量の絶対値を示した図を用意しました。橙で色付けした部分が移動量の絶対値が6.0以下になる最大の外枠部分で、それより外にスティックを倒したら、その点と中心を結ぶ線上にある橙色の領域に補正(再マッピング)されます。
sdi_map_mini
各点に移動量の絶対値を記した大きな図も用意しました:sdi_map.png

 連続でSDIする場合、4成分(X+、X-、Y+、Y-)のうち、前フレームの入力に含まれなかった成分を含んでいる場合に限り、そのフレームのSDIが有効になります。ここで、成分の判断は入力量ではなく移動量の成分から行われることに注意が必要です。言い換えると、あるフレームで真横にSDIを入力し、次フレームで1度だけ高くする(前フレームの入力には含まれなかったY+成分を入れる)ように試みても、それは上図の禁止領域(灰色の部分と、そこから外端まで引かれた線の外側)に属するため、移動量は前フレームと同じになり、そのフレームのSDIは無効になります。よって、所謂半月ずらしが有効であるのは入力量が禁止領域を飛び越える場合に限られます。同様に、入力2成分のうち1成分しか出力されない、軸から約17度以下の領域では出力が1成分になるので、その次フレームに禁止領域を抜ければSDIは有効になります。例えば、(x,y)=(127,38)の次フレームに(127,39)と入力しても、後者は無効にはなりません(ほんのちょっとスティックを動かすだけで、2回分ずれる)。

 最外部に沿って入力(入力量127)する場合、禁止領域に引っかからない最小の入力中心角は17.07度です。最外部入力による右側へのSDI(X軸の入力量127)での、Y軸の入力量に対応したマッピング先の橙枠、および必要な入力中心角(これより大きくある必要がある)は次の表のようになります。赤字は禁止領域です。

橙枠X 橙枠Y Y軸の入力量 入力中心角[度]
57 56 125 44.54528114
58 55 121 43.61408215
59 54 117 42.65312571
59 53 115 42.16121216
60 52 111 41.15396991
61 51 107 40.11479743
62 50 103 39.04286889
63 49 99 37.93739733
63 48 96 37.08583549
64 47 94 36.50727097
64 46 90 35.3237289
65 45 87 34.41267868
66 44 85 33.79405249
66 43 82 32.84908896
67 42 79 31.88356387
68 41 77 31.22840028
68 40 74 30.22837851
69 39 72 29.55016402
69 38 69 28.51554681
70 37 68 28.16606918
70 36 65 27.10386707
71 35 63 26.38430799
71 34 60 25.28796826
72 33 59 24.91802252
72 32 56 23.79483538
73 31 54 23.03504449
73 30 52 22.26658827
74 29 50 21.4895988
74 28 49 21.09794959
74 27 46 19.91062613
75 26 45 19.51079944
75 25 43 18.70520993
75 24 41 17.89187713
76 23 39 17.07102129
76 22 37 16.2428791

TODO: 最外部は、通常のコントローラでは入力できないはず。通常の枠について調べる必要あり(16/07/03)。

2. 最適なSDI

 同じヒットストップ時間でも、よく移動する方角とそうでない方角があります。最もよく移動するのは、軸近傍のSDIです。45度のような斜めSDIは、禁止領域を超えさせるために望みの向きと大きく離れた入力を繰り返さなくてはいけないため、距離を稼ぐことができません。
 長い距離移動させるためには、例えば真横SDIの場合、まず真横に入力し、次から禁止領域をギリギリ超える範囲で往復させるとよいでしょう。地面に成分を消されてそのフレームのSDIを無効にされないよう、真横の次は斜め上に入力すべきと思われます(地面があって実際にキャラが移動できない場合、やはり移動量は補正される)。但し、最初の真横SDIは地上であれば理想的には下成分を入れてはならず、次フレームに上成分を入れるため上成分も入れてはいけないということで、猶予のない極めて難度の高い入力となります。そのため、現実的には1回目から斜め上入力としておくのが安全なSDIだと思われます。これによる損失は大したことはありません。真横から18度離れても横成分は0.951倍されるだけです。

3. 他のケース

 フォックスやファルコの上Bファイアも、経験的には同じ入力ルールに従うものと思われます(移動量が短くなったり長くなったりはしないので、図の橙枠の部分のみを参照)。そうであるならば、ファイアの角度は橙枠68*4+禁止領域4で276種類あることになります。余談ですが、地表で下向きに入力したファイアは必ず右向きに発動します。

14/02/11 投稿
16/07/03 全体的に表現を見直し