obj v0003 g_keyObj - cwtickle/danoniplus GitHub Wiki
g_keyObj
概要
キー数の種別ごとの設定を管理するオブジェクト。タイトル画面呼び出し前(keysConvert() 実行時)に初期化され、キー数・キーパターンごとに設定が格納される。
カスタムキーの場合は keysConvert() 内で同様の構造に変換・補完されて格納される。
// キー識別子 X、パターン Y の形式でプロパティを参照する
g_keyObj.chara7_0; // → ['left', 'leftdia', 'down', 'space', 'up', 'rightdia', 'right']
g_keyObj.div11_0; // → 6(上段6レーン、下段5レーン)
g_keyObj.blank7_0; // → 55(px)
生成タイミング
タイトル画面呼び出し前(keysConvert() 呼び出し時)
プロパティ命名規則
パターン依存プロパティは プロパティ名X_Y の形式で定義される。
X: キー識別子(例:7,7i,9A,11,17など)Y: パターン番号(0始まり)Z: グループ番号(0始まり。カラー・シャッフル・形状グループで使用)
パターンが未定義のとき g_copyKeyPtn のコピー定義に基づいて他パターンから自動補完される。
関連項目
プロパティ
選択状態管理
(ゲーム起動中に動的に更新される)
- currentKey (number|string) — 現在選択中のキー識別子(例:
7,'7i','9A')。設定画面での切替により変化する - currentPtn (number) — 現在選択中のキーパターン番号(0始まり)。LocalStorageからの復元値が初期値
- storagePtn (number) — LocalStorageから復元したパターン番号。
currentPtnの初期化に使用 - defaultProp (string) — キーパターン検索時のデフォルトプロパティ名(
'keyCtrl'固定。Object.definePropertyにより書き換え不可) - prevKey (string) — 直前に選択していたキー識別子(初期値:
'Dummy')。キー切替時の差分処理に使用 - dfPtnNum (number) — デフォルトパターン番号(通常は
0) - minKeyCtrlNum (number) — 1レーンあたりのキー割り当て最小数(
2。これ以下の場合は0で埋める) - defaultKeyList (array) —
keyCtrlX_0が定義されているキー識別子の一覧(初期化時に自動生成) - initKeyLabel (string) — 起動時のデフォルトキーラベル(
'7')
キーキャラクタ(矢印種別と順番)
- charaX_Y (array) — キー
X、パターンYのステップゾーン表示順の矢印種別リスト。譜面データ中の矢印名とここの順番が対応する
g_keyObj.chara7_0;
// → ['left', 'leftdia', 'down', 'space', 'up', 'rightdia', 'right']
// 0番レーン=left, 1番=leftdia, 2番=down, ...
// アルファベット拡張版(ptcharaX から自動生成)
g_keyObj.chara4A; // → ['left', 'down', 'up', 'right']
g_keyObj.chara4A_a; // → ['aleft', 'adown', 'aup', 'aright']
カラーグループ
- colorX_Y_Z (array) — キー
X、パターンY、カラーグループZのレーン別色グループ番号リスト。同じ番号のレーンが同じ色グループに属する
g_keyObj.color7_0_0;
// → [0, 1, 0, 2, 0, 1, 0]
// 0番・2番・4番・6番レーンが色グループ0
// 1番・5番レーンが色グループ1(leftdia, rightdia)
// 3番レーンが色グループ2(space)
シャッフルグループ
- shuffleX_Y_Z (array) — キー
X、パターンY、シャッフルグループZのレーン別グループ番号リスト。Mirror/Random/S-Random 使用時に同じ番号のレーン同士でシャッフルされる
g_keyObj.shuffle11_0_0;
// → [0, 0, 0, 0, 1, 1, 1, 2, 1, 1, 1]
// 上段の4key部分はシャッフルグループ0, 下段のおにぎりを除いた6レーンはシャッフルグループ1に属する。
// シャッフル名に「+」がつかない場合は、同じシャッフルグループ同士でシャッフルされる。
ステップゾーン形状・回転(ShapeGroup)
- stepRtnX_Y_Z (array) — キー
X、パターンY、形状グループZのレーン別矢印回転角度またはAAキャラクタ名。数値は回転角(度)、文字列は AA キャラクタ種別名
g_keyObj.stepRtn7_0_0;
// → [0, -45, -90, 'onigiri', 90, 135, 180]
// 3番レーン(space)はonigiriキャラクタ
// 0番レーン(left)は0度、2番レーン(down)は-90度
ステップゾーン折り返し位置
- divX_Y (number) — キー
X、パターンYの上段から下段への折り返しレーン番号。未指定時は全レーンが1行に並ぶ - divMaxX_Y (number) — キー
X、パターンYの下段最終位置(pos基準の最大値)。下段の表示横幅計算に使用
g_keyObj.div11_0; // → 6(0〜5番が上段、6〜10番が下段)
g_keyObj.divMax9h_0; // → 15(下段の末端位置)
ステップゾーン表示横位置
- posX_Y (array) — キー
X、パターンYの各レーンの表示横位置(blankの倍数)。未指定時は0からの連番が自動補完される。小数指定でレーン間に隙間を設けることができる
g_keyObj.pos9h_0;
// → [0, 4, 5, 6, 8, 9, 10, 11.75, 13]
// レーン間に意図的な空白・ずれを持たせている
ステップゾーン間距離
- blank (number) — ステップゾーン間の基準距離(px)。デフォルト:
55 - blank_def (number) —
blankのデフォルト値(55)。キー切替時のリセット基準値 - blankX_Y (number) — キー
X、パターンY固有のステップゾーン間距離(px)。未指定時はblankが使用される
g_keyObj.blank17_0; // → 45
g_keyObj.blank5_0; // → 57.5
矢印群の表示倍率
- scale (number) — 矢印群の表示倍率(デフォルト:
1) - scale_def (number) —
scaleのデフォルト値(1) - scaleX_Y (number) — キー
X、パターンY固有の表示倍率。未指定時はscaleが使用される
g_keyObj.scale17_0; // → 0.95(17keyは少し小さく表示)
キーコンフィグ(キー割り当て)
- keyCtrlX_Y (array2) — キー
X、パターンYのレーン別割り当てキーコード一覧。各要素は 1 レーンに割り当てられたキーコードの配列(複数キー同時割り当て可)。初期化時にgetKeyCtrlVal()によりキー名からキーコードに変換済み - keyCtrlX_Yd (array2) —
keyCtrlX_Yのデフォルト値コピー(KeyConfigのリセット処理で参照される)
g_keyObj.keyCtrl7_0;
// → [83], [68], [70], [32], [74], [75], [76](/cwtickle/danoniplus/wiki/83],-[68],-[70],-[32],-[74],-[75],-[76)
// S, D, F, Space, J, K, L
// 複数キー割り当て例
g_keyObj.keyCtrl9A_0[2]; // → [69, 82] E または R
// キーリセット時の参照
g_keyObj.keyCtrl7_0d; // → keyCtrl7_0 のコピー(変更前の値を保持)
ショートカットキー
- keyRetry (number) — リトライのデフォルトキーコード(
8: Backspace) - keyRetryX_Y (number) — キー
X、パターンY固有のリトライキーコード。未指定時はkeyRetryが使用される - keyTitleBack (number) — タイトルバックのデフォルトキーコード(
46: Delete) - keyTitleBackX_Y (number) — キー
X、パターンY固有のタイトルバックキーコード
g_keyObj.keyRetry8_0; // → 9 (Tab)
g_keyObj.keyTitleBack11j_0; // → 27 (Escape)
スクロール方向オプション
- scrollName_def (array) — スクロールオプションのデフォルト名リスト(
['-']) - scrollDirX_Y (object) — キー
X、パターンYのスクロールオプション名 → レーン別スクロール方向配列(1: 通常,-1: リバース)のマッピング
g_keyObj.scrollDir7_0;
// → {
// '-': [1, 1, 1, 1, 1, 1, 1],
// 'Cross': [1, 1, -1, -1, -1, 1, 1],
// 'Split': [1, 1, 1, -1, -1, -1, -1],
// 'Alternate': [1, -1, 1, -1, 1, -1, 1],
// 'Twist': [1, 1, -1, -1, 1, 1, -1],
// 'Asymmetry': [1, -1, 1, -1, -1, 1, -1],
// }
別キーモード
- transKeyX_Y (string) — キー
X、パターンYでの別キーモード指定。値は別キー識別子(例:'12')または''(無効)。g_copyKeyPtnによるコピー時に自動伝播される - keyTransPattern (object) — 旧バージョンや略記のキー識別子から正式識別子へのエイリアスマッピング(互換維持用)
g_keyObj.transKey8_2; // → '12'(8keyパターン2は12keyの別キーモード)
g_keyObj.keyTransPattern;
// → { '9': '9A', 'DP': '9A', '15': '15A', '15R': '15B', ... }
プレイアシスト
- assistPosX_Y (object) — キー
X、パターンYの AutoPlay 部分アシスト設定。アシスト名 → レーン別フラグ(0: 手動,1: 自動)配列のマッピング。g_autoPlaysに追加されて設定画面に反映される
g_keyObj.assistPos9A_0;
// → {
// 'Left': [1, 1, 1, 1, 0, 0, 0, 0, 0], // 左半分を自動
// 'Right': [0, 0, 0, 0, 0, 1, 1, 1, 1], // 右半分を自動
// }
最小ウィンドウ横幅
- minWidth (number) — 全キー共通の最小ウィンドウ横幅(px)。デフォルト:
500 - minWidthDefault (number) — レイアウト計算時のデフォルト最小横幅(
600)。minWidthX未定義時に使用 - minWidthX (number) — キー識別子
X固有の最小ウィンドウ横幅(px)
g_keyObj.minWidth17; // → 825
g_keyObj.minWidth23; // → 900
FlatBarモード
- flatModeX_Y (boolean) — キー
X、パターンYで FlatBar(ステップゾーンをフラットな帯状にする)を強制有効にするフラグ。未指定時はfalse
キーグループ・レイヤー定義
(主にカスタムキー定義で使用。標準キーでは未定義が多い)
- keyGroupOrderX_Y (array) — キー
X、パターンYでのキーグループの表示順 - keyGroupX_Y (array2) — キー
X、パターンYのキーグループ定義(グループ番号 → 所属レーン番号配列) - layerGroupX_Y (array) — キー
X、パターンYのレイヤーグループ定義(レーン → レイヤー番号の対応) - layerTransX_Y (array) — キー
X、パターンYのレイヤー遷移定義(スクロール変化時のレイヤー切替ルール)
補足:プロパティの自動生成・補完
g_keyObj の初期化時に以下の自動処理が行われる。
posX_Y の自動補完
charaX_Y が定義されていて posX_Y が未定義のとき、0 からの連番が自動補完される。
ptchara の展開
ptcharaX(頻出矢印種別の部分定義)は、charaX・charaX_a〜charaX_z として自動展開される。
// ptchara4A: ['left', 'down', 'up', 'right'] から
g_keyObj.chara4A; // → ['left', 'down', 'up', 'right']
g_keyObj.chara4A_a; // → ['aleft', 'adown', 'aup', 'aright']
g_keyObj.chara4A_b; // → ['bleft', 'bdown', 'bup', 'bright']
// ...
keyCtrlX_Yd の自動生成
全 keyCtrlX_Y について keyCtrlX_Yd(デフォルト値コピー)が自動生成される。
g_copyKeyPtn によるパターンコピー
g_copyKeyPtn に定義されたコピー先 → コピー元の対応に従い、chara, color, shuffle, stepRtn, pos, keyCtrl, scrollDir 等が未定義のとき自動コピーされる(定義済みのものは上書きされない)。
keysConvert 処理の詳細
keysConvert() は譜面データ(_dosObj)からカスタムキー定義を読み込み、g_keyObj へ格納する関数です。
カスタムキーを作成する際に「どの順序で・どのように値が処理されるか」を把握したい場合に参照してください。
プロパティの処理順序
各キーに対して以下の順序で処理されます。keyCtrlX のみ必須で、それ以外は省略可能です。
| 順序 | プロパティ | 省略時の挙動 |
|---|---|---|
| 1 | appendX |
false(既存パターンへの追記なし) |
| 2 | keyNameX |
[キー識別子, "key"] |
| 3 | minWidthX |
minWidthDefault(デフォルト最小横幅) |
| 4 | movLockX |
false |
| 5 | initManualX |
false |
| 6 | keyHelpX / keyHelpJaX / keyHelpEnX |
空文字 |
| 7 | keyCtrlX_Y |
必須。未定義の場合はキーが無効化される |
| 8 | charaX_Y |
1a, 2a, 3a, ...(1始まり連番+a) |
| 9 | colorX_Y |
全レーン同一グループ(0 埋め) |
| 10 | stepRtnX_Y |
全レーン同一グループ(0 埋め) |
| 11 | divX_Y / divMaxX_Y |
pos の最大値+1 |
| 12 | posX_Y |
0, 1, 2, ...(0始まり連番) |
| 13 | blankX_Y |
blank_def(デフォルト間隔) |
| 14 | scaleX_Y |
scale_def(デフォルト倍率) |
| 15 | keyRetryX_Y |
C_KEY_RETRY(BackSpace) |
| 16 | keyTitleBackX_Y |
C_KEY_TITLEBACK(Delete) |
| 17 | transKeyX_Y |
空文字(別キーモードなし) |
| 18 | flatModeX_Y |
false |
| 19 | shuffleX_Y |
全レーン同一グループ(0 埋め) |
| 20 | keyGroupX_Y |
全レーン ["0"] |
| 21 | keyGroupOrderX_Y |
全グループ表示 |
| 22 | scrollX_Y(scrollDirX_Y として格納) |
---(デフォルト方向のみ) |
| 23 | assistX_Y(assistPosX_Y として格納) |
なし |
| 24 | layerGroupX_Y |
0 |
| 25 | layerTransX_Y |
空文字 |
プロパティの処理方式
プロパティの種類によって内部の展開方式が異なります。
配列系(パターン別)
対象: keyCtrl / chara / pos / keyGroup / keyGroupOrder / layerGroup / layerTrans
$区切り(または改行区切り)でキーパターンを分割する- 各要素に略記展開(
...・@:・部分キー参照)を適用してから配列化する g_keyObjに同名のプロパティがすでに存在する場合はスキップする
グループ系(複数パターン持ち)
対象: color / stepRtn / shuffle
$区切りでキーパターンを分割し、さらに/区切りでグループを作成する(color_0,color_1, ...)- 空指定の場合は全レーンを同一グループ(
0埋め)とする - 他のキーパターンを指定した場合(例:
8_0)は、そのキーから全グループをコピーする
|shuffle8i=1,1,1,2,0,0,0,0/1,1,1,1,0,0,0,0|
// → color8i_0_0: [1,1,1,2,0,0,0,0]
// → color8i_0_1: [1,1,1,1,0,0,0,0]
スカラー系(パターン別)
対象: blank / scale / keyRetry / keyTitleBack / transKey / flatMode
$区切りでキーパターンを分割する- 値に
_が含まれる場合はg_keyObjから既存パターンを参照する(略記) - パターン数が指定より少ない場合はパターン 0 の値で残りを埋める
名前付きグループ系
対象: scroll(→ scrollDirX_Y)/ assist(→ assistPosX_Y)
::区切りでグループ名と値を分離する(例:Cross::1,1,-1,-1)/区切りで複数グループを定義する- デフォルト(
---)を先に全レーン1で定義してから各グループ名を上書きする
|scroll6=Cross::1,1,-1,-1,1,1/Split::1,1,1,-1,-1,-1|
// → scrollDir6_0 = { "---": [1,1,1,1,1,1], "Cross": [1,1,-1,-1,1,1], "Split": [1,1,1,-1,-1,-1] }
略記展開の処理順序
複数の略記が組み合わさった場合、以下の順序で展開されます。
入力文字列
↓
@: 展開(繰り返し)
↓
... 展開(連番)
↓
! 展開(グループ繰り返し)
↓
カンマ区切りで配列化
↓
各要素に部分キー参照 / > 記法展開 / b 記法展開(pos の下段補完)を適用
b 記法(下段位置の補完)
posX で下段の位置を上段からの相対値で指定する記法です。divX の値を基準に自動的に絶対値へ変換します。
|div11x=7,b6|
|pos11x=0,1,2,3,4,5,6,b0,b1,b5,b6|
// → div11x=7,13
// → pos11x=0,1,2,3,4,5,6,7,8,12,13
> 記法(charaX 専用のプレフィックス展開)
charaX においてのみ使用できる記法です。(プレフィックス)>(パターン名) の形式で、既存パターンの各要素の先頭にプレフィックスを付加した配列を生成します。
|chara9A=s>4A|
// ptchara4A = [left, down, up, right] のため
// → sleft, sdown, sup, sright に展開
省略できないプロパティ
keyCtrlX のみ必須です。未指定または読み込みエラーの場合、そのキーは g_headerObj.undefinedKeyListFinal に追加され、強制的にデフォルトキーへ差し替えられます。
charaX / posX / keyGroupX / divX / divMaxX は省略した場合でも setKeyDfVal() によって自動補完されます。