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(頻出矢印種別の部分定義)は、charaXcharaX_acharaX_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_YscrollDirX_Y として格納) ---(デフォルト方向のみ)
23 assistX_YassistPosX_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() によって自動補完されます。