danoniplus 30.4.0 → 30.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/js/danoni_main.js +119 -40
- package/js/lib/danoni_constants.js +57 -42
- package/package.json +1 -1
package/js/danoni_main.js
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Source by tickle
|
|
6
6
|
* Created : 2018/10/08
|
|
7
|
-
* Revised : 2023/03/
|
|
7
|
+
* Revised : 2023/03/18
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 30.
|
|
12
|
-
const g_revisedDate = `2023/03/
|
|
11
|
+
const g_version = `Ver 30.6.0`;
|
|
12
|
+
const g_revisedDate = `2023/03/18`;
|
|
13
13
|
const g_alphaVersion = ``;
|
|
14
14
|
|
|
15
15
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
@@ -115,7 +115,9 @@ let g_finishFlg = true;
|
|
|
115
115
|
/** 共通オブジェクト */
|
|
116
116
|
const g_loadObj = {};
|
|
117
117
|
const g_rootObj = {};
|
|
118
|
-
const g_presetObj = {
|
|
118
|
+
const g_presetObj = {
|
|
119
|
+
keysDataLib: [],
|
|
120
|
+
};
|
|
119
121
|
let g_headerObj = {};
|
|
120
122
|
let g_scoreObj = {};
|
|
121
123
|
let g_attrObj = {};
|
|
@@ -387,6 +389,19 @@ const copyArray2d = _array2d => structuredClone(_array2d);
|
|
|
387
389
|
*/
|
|
388
390
|
const sumData = _array => _array.reduce((p, x) => p + x);
|
|
389
391
|
|
|
392
|
+
/**
|
|
393
|
+
* 最小配列長の配列を作成
|
|
394
|
+
* @param {array} _array
|
|
395
|
+
* @param {number} _minLength
|
|
396
|
+
* @param {number} _defaultVal
|
|
397
|
+
* @returns
|
|
398
|
+
*/
|
|
399
|
+
const makeBaseArray = (_array, _minLength, _defaultVal) => {
|
|
400
|
+
const baseArray = [...Array(_minLength)].fill(_defaultVal);
|
|
401
|
+
_array.forEach((val, j) => baseArray[j] = val);
|
|
402
|
+
return baseArray;
|
|
403
|
+
};
|
|
404
|
+
|
|
390
405
|
/**
|
|
391
406
|
* 部分一致検索(リストのいずれかに合致、大小文字問わず)
|
|
392
407
|
* @param {string} _str 検索文字
|
|
@@ -1860,9 +1875,13 @@ const initialControl = async () => {
|
|
|
1860
1875
|
|
|
1861
1876
|
// 譜面ヘッダー、特殊キー情報の読込
|
|
1862
1877
|
Object.assign(g_headerObj, headerConvert(g_rootObj));
|
|
1863
|
-
|
|
1864
|
-
keysConvert(dosConvert(
|
|
1878
|
+
const importKeysData = _data => {
|
|
1879
|
+
keysConvert(dosConvert(_data));
|
|
1865
1880
|
g_headerObj.undefinedKeyLists = g_headerObj.undefinedKeyLists.filter(key => g_keyObj[`chara${key}_0`] === undefined);
|
|
1881
|
+
};
|
|
1882
|
+
g_presetObj.keysDataLib.forEach(list => importKeysData(list));
|
|
1883
|
+
if (g_presetObj.keysData !== undefined) {
|
|
1884
|
+
importKeysData(g_presetObj.keysData);
|
|
1866
1885
|
}
|
|
1867
1886
|
g_headerObj.keyExtraList = keysConvert(g_rootObj, {
|
|
1868
1887
|
keyExtraList: (g_rootObj.keyExtraList !== undefined ?
|
|
@@ -3442,9 +3461,25 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
|
|
|
3442
3461
|
const toNumber = _num => parseInt(_num, 10);
|
|
3443
3462
|
const toFloat = _num => parseFloat(_num);
|
|
3444
3463
|
const toStringOrNumber = _str => isNaN(Number(_str)) ? _str : toNumber(_str);
|
|
3445
|
-
const
|
|
3464
|
+
const toKeyCtrlArray = _str => makeBaseArray(_str.split(`/`).map(n => toNumber(n)), g_keyObj.minKeyCtrlNum, 0);
|
|
3446
3465
|
const toSplitArrayStr = _str => _str.split(`/`).map(n => n);
|
|
3447
3466
|
|
|
3467
|
+
/**
|
|
3468
|
+
* キーパターン(相対パターン)をキーパターン(実際のパターン番号)に変換
|
|
3469
|
+
* 例) 12_(0) -> 12_4
|
|
3470
|
+
* それ以外の文字列が来た場合は、そのままの値を戻す
|
|
3471
|
+
* @param {string} _str
|
|
3472
|
+
* @returns
|
|
3473
|
+
*/
|
|
3474
|
+
const getKeyPtnName = _str => {
|
|
3475
|
+
const regex = /\((\d+)\)/;
|
|
3476
|
+
const checkStr = _str.match(regex);
|
|
3477
|
+
if (checkStr !== null) {
|
|
3478
|
+
return _str.replace(regex, (match, p) => `${parseInt(p, 10) + setIntVal(g_keyObj.dfPtnNum)}`);
|
|
3479
|
+
}
|
|
3480
|
+
return _str;
|
|
3481
|
+
};
|
|
3482
|
+
|
|
3448
3483
|
/**
|
|
3449
3484
|
* 新キー用複合パラメータ
|
|
3450
3485
|
* @param {string} _key キー数
|
|
@@ -3465,8 +3500,9 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
|
|
|
3465
3500
|
if (existParam(tmpArray[k], `${keyheader}_${k + dfPtn}`)) {
|
|
3466
3501
|
continue;
|
|
3467
3502
|
}
|
|
3468
|
-
|
|
3469
|
-
|
|
3503
|
+
const keyPtn = getKeyPtnName(tmpArray[k]);
|
|
3504
|
+
g_keyObj[`${keyheader}_${k + dfPtn}`] = g_keyObj[`${_name}${keyPtn}`] !== undefined ?
|
|
3505
|
+
copyArray2d(g_keyObj[`${_name}${keyPtn}`]) : tmpArray[k].split(`,`).map(n => _convFunc(n));
|
|
3470
3506
|
if (baseCopyFlg) {
|
|
3471
3507
|
g_keyObj[`${keyheader}_${k + dfPtn}d`] = copyArray2d(g_keyObj[`${keyheader}_${k + dfPtn}`]);
|
|
3472
3508
|
}
|
|
@@ -3498,15 +3534,16 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
|
|
|
3498
3534
|
let ptnCnt = 0;
|
|
3499
3535
|
tmpArray[k].split(`/`).forEach(list => {
|
|
3500
3536
|
|
|
3537
|
+
const keyPtn = getKeyPtnName(list);
|
|
3501
3538
|
if (list === ``) {
|
|
3502
3539
|
// 空指定の場合は一律同じグループへ割り当て
|
|
3503
3540
|
g_keyObj[`${keyheader}_${k + dfPtn}_${ptnCnt}`] = [...Array(g_keyObj[`chara${_key}_${k + dfPtn}`].length)].fill(0);
|
|
3504
3541
|
|
|
3505
|
-
} else if (g_keyObj[`${_name}${
|
|
3542
|
+
} else if (g_keyObj[`${_name}${keyPtn}_0`] !== undefined) {
|
|
3506
3543
|
// 他のキーパターン (例: |shuffle8i=8_0| ) を指定した場合、該当があれば既存パターンからコピー
|
|
3507
3544
|
let m = 0;
|
|
3508
|
-
while (g_keyObj[`${_name}${
|
|
3509
|
-
g_keyObj[`${keyheader}_${k + dfPtn}_${ptnCnt}`] = structuredClone(g_keyObj[`${_name}${
|
|
3545
|
+
while (g_keyObj[`${_name}${keyPtn}_${m}`] !== undefined) {
|
|
3546
|
+
g_keyObj[`${keyheader}_${k + dfPtn}_${ptnCnt}`] = structuredClone(g_keyObj[`${_name}${keyPtn}_${m}`]);
|
|
3510
3547
|
m++;
|
|
3511
3548
|
ptnCnt++;
|
|
3512
3549
|
}
|
|
@@ -3566,17 +3603,23 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
|
|
|
3566
3603
|
continue;
|
|
3567
3604
|
}
|
|
3568
3605
|
g_keyObj[pairName] = {}
|
|
3569
|
-
|
|
3570
|
-
|
|
3571
|
-
|
|
3572
|
-
|
|
3573
|
-
|
|
3574
|
-
|
|
3575
|
-
|
|
3606
|
+
|
|
3607
|
+
// デフォルト項目がある場合は先に定義
|
|
3608
|
+
if (_defaultName !== ``) {
|
|
3609
|
+
g_keyObj[pairName][_defaultName] = [...Array(g_keyObj[`chara${_key}_${k + dfPtn}`].length)].fill(_defaultVal);
|
|
3610
|
+
}
|
|
3611
|
+
tmpParams[k].split(`/`).forEach(pairs => {
|
|
3612
|
+
const keyPtn = getKeyPtnName(pairs);
|
|
3613
|
+
if (pairs === ``) {
|
|
3614
|
+
} else if (g_keyObj[`${_pairName}${keyPtn}`] !== undefined) {
|
|
3615
|
+
// 他のキーパターン指定時、該当があればプロパティを全コピー
|
|
3616
|
+
Object.assign(g_keyObj[pairName], g_keyObj[`${_pairName}${keyPtn}`]);
|
|
3617
|
+
} else {
|
|
3618
|
+
// 通常の指定方法(例:|scroll8i=Cross::1,1,1,-1,-1,-1,1,1/Split::1,1,1,1,-1,-1,-1,-1|)から取り込み
|
|
3576
3619
|
const tmpParamPair = pairs.split(`::`);
|
|
3577
3620
|
g_keyObj[pairName][tmpParamPair[0]] = tmpParamPair[1].split(`,`).map(n => parseInt(n, 10));
|
|
3578
|
-
}
|
|
3579
|
-
}
|
|
3621
|
+
}
|
|
3622
|
+
});
|
|
3580
3623
|
}
|
|
3581
3624
|
}
|
|
3582
3625
|
};
|
|
@@ -3613,7 +3656,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
|
|
|
3613
3656
|
newKeyMultiParam(newKey, `stepRtn`, toStringOrNumber, { errCd: `E_0103` });
|
|
3614
3657
|
|
|
3615
3658
|
// キーコンフィグ (keyCtrlX_Y)
|
|
3616
|
-
newKeyMultiParam(newKey, `keyCtrl`,
|
|
3659
|
+
newKeyMultiParam(newKey, `keyCtrl`, toKeyCtrlArray, { errCd: `E_0104`, baseCopyFlg: true });
|
|
3617
3660
|
|
|
3618
3661
|
// ステップゾーン位置 (posX_Y)
|
|
3619
3662
|
newKeyMultiParam(newKey, `pos`, toFloat);
|
|
@@ -5868,6 +5911,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
5868
5911
|
createCss2Button(`keycon${j}_${k}`, g_kCd[g_keyObj[`keyCtrl${keyCtrlPtn}`][j][k]], _ => {
|
|
5869
5912
|
g_currentj = j;
|
|
5870
5913
|
g_currentk = k;
|
|
5914
|
+
g_prevKey = -1;
|
|
5871
5915
|
g_keycons.cursorNum = g_keycons.cursorNumList.findIndex(val => val === g_currentj);
|
|
5872
5916
|
setKeyConfigCursor();
|
|
5873
5917
|
}, {
|
|
@@ -6057,8 +6101,8 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6057
6101
|
cursor.style.left = `${nextLeft}px`;
|
|
6058
6102
|
const baseY = C_KYC_HEIGHT * Number(posj > divideCnt) + 57;
|
|
6059
6103
|
cursor.style.top = `${baseY + C_KYC_REPHEIGHT * g_currentk}px`;
|
|
6060
|
-
if (
|
|
6061
|
-
g_kcType =
|
|
6104
|
+
if (g_kcType !== C_FLG_ALL) {
|
|
6105
|
+
g_kcType = (g_currentk === 0 ? `Main` : `Replaced`);
|
|
6062
6106
|
lnkKcType.textContent = getStgDetailName(g_kcType);
|
|
6063
6107
|
}
|
|
6064
6108
|
|
|
@@ -6075,9 +6119,23 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6075
6119
|
|
|
6076
6120
|
g_currentj = g_keycons.cursorNumList[_nextj];
|
|
6077
6121
|
g_currentk = 0;
|
|
6078
|
-
if (g_kcType === `Replaced`
|
|
6122
|
+
if (g_kcType === `Replaced`) {
|
|
6079
6123
|
g_currentk = 1;
|
|
6124
|
+
|
|
6125
|
+
// 代替キー設定の場合は次の代替キーが見つかるまで移動
|
|
6126
|
+
while (g_keyObj[`keyCtrl${keyCtrlPtn}`][g_currentj][1] === undefined) {
|
|
6127
|
+
g_keycons.cursorNum = (g_keycons.cursorNum + 1) % g_keycons.cursorNumList.length;
|
|
6128
|
+
g_currentj = g_keycons.cursorNumList[g_keycons.cursorNum];
|
|
6129
|
+
|
|
6130
|
+
// 一周して対象が無い場合は代替キーが無いため処理を抜ける(無限ループ対策)
|
|
6131
|
+
if (g_keycons.cursorNum === _nextj) {
|
|
6132
|
+
g_kcType = `Main`;
|
|
6133
|
+
g_currentk = 0;
|
|
6134
|
+
break;
|
|
6135
|
+
}
|
|
6136
|
+
}
|
|
6080
6137
|
}
|
|
6138
|
+
|
|
6081
6139
|
setKeyConfigCursor();
|
|
6082
6140
|
keyconSprite.scrollLeft = - maxLeftX;
|
|
6083
6141
|
};
|
|
@@ -6247,28 +6305,38 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6247
6305
|
* @param {boolean} _transKeyUse
|
|
6248
6306
|
* @returns
|
|
6249
6307
|
*/
|
|
6250
|
-
const searchPattern = (_tempPtn, _sign, _transKeyUse = false) => {
|
|
6308
|
+
const searchPattern = (_tempPtn, _sign, _transKeyUse = false, _skipFlg = false) => {
|
|
6251
6309
|
let nextPtn = _tempPtn + _sign;
|
|
6310
|
+
const initialPtn = hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_-1`]) ? -1 : 0;
|
|
6252
6311
|
|
|
6253
6312
|
const searchStart = _ => {
|
|
6254
|
-
nextPtn
|
|
6255
|
-
|
|
6256
|
-
nextPtn
|
|
6313
|
+
if (!hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_${nextPtn}`])) {
|
|
6314
|
+
nextPtn = 0;
|
|
6315
|
+
while (hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_${nextPtn}`])) {
|
|
6316
|
+
nextPtn -= _sign;
|
|
6317
|
+
}
|
|
6318
|
+
nextPtn += _sign;
|
|
6257
6319
|
}
|
|
6258
|
-
nextPtn += _sign;
|
|
6259
6320
|
};
|
|
6260
6321
|
|
|
6261
|
-
|
|
6262
|
-
|
|
6322
|
+
const searchNextGroup = _ => {
|
|
6323
|
+
while (nextPtn !== initialPtn &&
|
|
6324
|
+
g_keyObj[`transKey${g_keyObj.currentKey}_${_tempPtn}`] === g_keyObj[`transKey${g_keyObj.currentKey}_${nextPtn}`] &&
|
|
6325
|
+
hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_${nextPtn}`])) {
|
|
6326
|
+
nextPtn += _sign;
|
|
6327
|
+
}
|
|
6328
|
+
};
|
|
6329
|
+
|
|
6330
|
+
searchStart();
|
|
6331
|
+
if (_skipFlg) {
|
|
6332
|
+
searchNextGroup();
|
|
6263
6333
|
searchStart();
|
|
6264
6334
|
}
|
|
6265
6335
|
if (!_transKeyUse) {
|
|
6266
6336
|
while (hasVal(g_keyObj[`transKey${g_keyObj.currentKey}_${nextPtn}`])) {
|
|
6267
6337
|
nextPtn += _sign;
|
|
6268
6338
|
}
|
|
6269
|
-
|
|
6270
|
-
searchStart();
|
|
6271
|
-
}
|
|
6339
|
+
searchStart();
|
|
6272
6340
|
}
|
|
6273
6341
|
return nextPtn;
|
|
6274
6342
|
};
|
|
@@ -6276,11 +6344,12 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6276
6344
|
/**
|
|
6277
6345
|
* キーパターン変更時処理
|
|
6278
6346
|
* @param {number} _sign
|
|
6347
|
+
* @param {boolean} _skipFlg
|
|
6279
6348
|
*/
|
|
6280
|
-
const changePattern = (_sign = 1) => {
|
|
6349
|
+
const changePattern = (_sign = 1, _skipFlg = false) => {
|
|
6281
6350
|
|
|
6282
6351
|
// キーパターンの変更
|
|
6283
|
-
g_keyObj.currentPtn = searchPattern(g_keyObj.currentPtn, _sign, g_headerObj.transKeyUse);
|
|
6352
|
+
g_keyObj.currentPtn = searchPattern(g_keyObj.currentPtn, _sign, g_headerObj.transKeyUse, _skipFlg);
|
|
6284
6353
|
|
|
6285
6354
|
// カラーグループ、シャッフルグループの再設定
|
|
6286
6355
|
g_keycons.groups.forEach(type => resetGroupList(type, `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`));
|
|
@@ -6330,13 +6399,23 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6330
6399
|
'Self' : g_keyObj.currentPtn + 1}${lblTransKey}`, g_lblPosObj.lblPattern),
|
|
6331
6400
|
|
|
6332
6401
|
// パターン変更ボタン描画(右回り)
|
|
6333
|
-
createCss2Button(`btnPtnChangeR`,
|
|
6402
|
+
createCss2Button(`btnPtnChangeR`, `>`, _ => true, Object.assign(g_lblPosObj.btnPtnChangeR, {
|
|
6334
6403
|
resetFunc: _ => changePattern(),
|
|
6335
|
-
}), g_cssObj.
|
|
6404
|
+
}), g_cssObj.button_Mini),
|
|
6336
6405
|
|
|
6337
6406
|
// パターン変更ボタン描画(左回り)
|
|
6338
|
-
createCss2Button(`btnPtnChangeL`,
|
|
6407
|
+
createCss2Button(`btnPtnChangeL`, `<`, _ => true, Object.assign(g_lblPosObj.btnPtnChangeL, {
|
|
6339
6408
|
resetFunc: _ => changePattern(-1),
|
|
6409
|
+
}), g_cssObj.button_Mini),
|
|
6410
|
+
|
|
6411
|
+
// パターン変更ボタン描画(右回り/別キーモード間スキップ)
|
|
6412
|
+
createCss2Button(`btnPtnChangeRR`, `|>`, _ => true, Object.assign(g_lblPosObj.btnPtnChangeRR, {
|
|
6413
|
+
resetFunc: _ => changePattern(1, true),
|
|
6414
|
+
}), g_cssObj.button_Setting),
|
|
6415
|
+
|
|
6416
|
+
// パターン変更ボタン描画(左回り/別キーモード間スキップ)
|
|
6417
|
+
createCss2Button(`btnPtnChangeLL`, `<|`, _ => true, Object.assign(g_lblPosObj.btnPtnChangeLL, {
|
|
6418
|
+
resetFunc: _ => changePattern(-1, true),
|
|
6340
6419
|
}), g_cssObj.button_Setting),
|
|
6341
6420
|
|
|
6342
6421
|
// キーコンフィグリセットボタン描画
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2019/11/19
|
|
8
|
-
* Revised : 2023/03/
|
|
8
|
+
* Revised : 2023/03/12 (v30.5.0)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -251,11 +251,19 @@ const updateWindowSiz = _ => {
|
|
|
251
251
|
},
|
|
252
252
|
btnPtnChangeR: {
|
|
253
253
|
x: g_sWidth / 2, y: g_sHeight - 100,
|
|
254
|
-
w: g_sWidth /
|
|
254
|
+
w: g_sWidth / 9, h: C_BTN_HEIGHT / 2, siz: C_LBL_BTNSIZE * 2 / 3,
|
|
255
255
|
},
|
|
256
256
|
btnPtnChangeL: {
|
|
257
|
+
x: g_sWidth / 18, y: g_sHeight - 100,
|
|
258
|
+
w: g_sWidth / 9, h: C_BTN_HEIGHT / 2, siz: C_LBL_BTNSIZE * 2 / 3,
|
|
259
|
+
},
|
|
260
|
+
btnPtnChangeRR: {
|
|
261
|
+
x: g_sWidth * 11 / 18, y: g_sHeight - 100,
|
|
262
|
+
w: g_sWidth / 18, h: C_BTN_HEIGHT / 2, siz: C_LBL_BTNSIZE * 2 / 3,
|
|
263
|
+
},
|
|
264
|
+
btnPtnChangeLL: {
|
|
257
265
|
x: 0, y: g_sHeight - 100,
|
|
258
|
-
w: g_sWidth /
|
|
266
|
+
w: g_sWidth / 18, h: C_BTN_HEIGHT / 2, siz: C_LBL_BTNSIZE * 2 / 3,
|
|
259
267
|
},
|
|
260
268
|
btnKcReset: {
|
|
261
269
|
x: 0, y: g_sHeight - 75,
|
|
@@ -1455,6 +1463,8 @@ const g_keyObj = {
|
|
|
1455
1463
|
prevKey: `Dummy`,
|
|
1456
1464
|
dfPtnNum: 0,
|
|
1457
1465
|
|
|
1466
|
+
minKeyCtrlNum: 2,
|
|
1467
|
+
|
|
1458
1468
|
// キー別ヘッダー
|
|
1459
1469
|
// - 譜面データ中に出てくる矢印(ノーツ)の種類と順番(ステップゾーン表示順)を管理する。
|
|
1460
1470
|
// - ここで出てくる順番は、この後のstepRtn, keyCtrlとも対応している。
|
|
@@ -1650,51 +1660,51 @@ const g_keyObj = {
|
|
|
1650
1660
|
// 基本パターン (キーコンフィグ)
|
|
1651
1661
|
// - 順番はchara, stepRtnと対応している。
|
|
1652
1662
|
// - 多次元配列内はステップに対応するキーコードを示す。カンマ区切りで複数指定できる。
|
|
1653
|
-
keyCtrl5_0: [[37
|
|
1654
|
-
keyCtrl7_0: [[83
|
|
1655
|
-
keyCtrl7i_0: [[90
|
|
1656
|
-
keyCtrl8_0: [[83
|
|
1657
|
-
keyCtrl9A_0: [[83
|
|
1658
|
-
keyCtrl9B_0: [[65
|
|
1659
|
-
keyCtrl9i_0: [[37
|
|
1660
|
-
keyCtrl11_0: [[37
|
|
1661
|
-
keyCtrl11L_0: [[87
|
|
1662
|
-
keyCtrl11W_0: [[49, 50], [84
|
|
1663
|
-
keyCtrl11i_0: [[83
|
|
1664
|
-
keyCtrl12_0: [[85
|
|
1665
|
-
keyCtrl13_0: [[37
|
|
1666
|
-
keyCtrl14_0: [[84, 89], [85
|
|
1667
|
-
keyCtrl14i_0: [[90, 87], [88, 69], [67, 82], [37
|
|
1668
|
-
keyCtrl15A_0: [[87
|
|
1669
|
-
keyCtrl15B_0: [[87
|
|
1670
|
-
keyCtrl16i_0: [[90, 87], [88, 69], [67, 82], [37
|
|
1671
|
-
keyCtrl17_0: [[65
|
|
1672
|
-
keyCtrl23_0: [[87
|
|
1673
|
-
[90
|
|
1663
|
+
keyCtrl5_0: [[37], [40], [38], [39], [32]],
|
|
1664
|
+
keyCtrl7_0: [[83], [68], [70], [32], [74], [75], [76]],
|
|
1665
|
+
keyCtrl7i_0: [[90], [88], [67], [37], [40], [38], [39]],
|
|
1666
|
+
keyCtrl8_0: [[83], [68], [70], [32], [74], [75], [76], [13]],
|
|
1667
|
+
keyCtrl9A_0: [[83], [68], [69, 82], [70], [32], [74], [75], [73], [76]],
|
|
1668
|
+
keyCtrl9B_0: [[65], [83], [68], [70], [32], [74], [75], [76], [187]],
|
|
1669
|
+
keyCtrl9i_0: [[37], [40], [38], [39], [65], [83], [68], [70], [32]],
|
|
1670
|
+
keyCtrl11_0: [[37], [40], [38], [39], [83], [68], [70], [32], [74], [75], [76]],
|
|
1671
|
+
keyCtrl11L_0: [[87], [69], [51, 52], [82], [83], [68], [70], [32], [74], [75], [76]],
|
|
1672
|
+
keyCtrl11W_0: [[49, 50], [84], [89], [48, 189], [83], [68], [70], [32], [74], [75], [76]],
|
|
1673
|
+
keyCtrl11i_0: [[83], [88, 67], [68], [69, 82], [70], [32], [74], [77, 188], [75], [73, 79], [76]],
|
|
1674
|
+
keyCtrl12_0: [[85], [73], [56, 57], [79], [32], [78], [74], [77], [75], [188], [76], [190]],
|
|
1675
|
+
keyCtrl13_0: [[37], [40], [38], [39], [83], [68], [69, 82], [70], [32], [74], [75], [73], [76]],
|
|
1676
|
+
keyCtrl14_0: [[84, 89], [85], [73], [56, 55, 57, 48], [79], [192, 80], [32], [78], [74], [77], [75], [188], [76], [190]],
|
|
1677
|
+
keyCtrl14i_0: [[90, 87], [88, 69], [67, 82], [37], [40], [38], [39], [83], [68], [70], [32], [74], [75], [76]],
|
|
1678
|
+
keyCtrl15A_0: [[87], [69], [51, 52], [82], [37], [40], [38], [39], [83], [68], [70], [32], [74], [75], [76]],
|
|
1679
|
+
keyCtrl15B_0: [[87], [69], [51, 52], [82], [85], [73], [56, 57], [79], [83], [68], [70], [32], [74], [75], [76]],
|
|
1680
|
+
keyCtrl16i_0: [[90, 87], [88, 69], [67, 82], [37], [40], [38], [39], [65], [83], [68], [70], [32], [74], [75], [76], [187]],
|
|
1681
|
+
keyCtrl17_0: [[65], [90], [83], [88], [68], [67], [70], [86], [32], [78], [74], [77], [75], [188], [76], [190], [187]],
|
|
1682
|
+
keyCtrl23_0: [[87], [69], [51, 52], [82], [85], [73], [56, 57], [79],
|
|
1683
|
+
[90], [83], [88], [68], [67], [70], [86], [32], [78], [74], [77], [75], [188], [76], [190]],
|
|
1674
1684
|
|
|
1675
1685
|
// 変則パターン (キーコンフィグ)
|
|
1676
1686
|
// - _0 の数字部分をカウントアップすることで実現できる。
|
|
1677
|
-
keyCtrl5_1: [[32
|
|
1678
|
-
keyCtrl7_1: [[83
|
|
1679
|
-
keyCtrl8_1: [[13
|
|
1680
|
-
keyCtrl9A_1: [[83
|
|
1681
|
-
keyCtrl9i_1: [[65
|
|
1682
|
-
keyCtrl12_1: [[89
|
|
1683
|
-
keyCtrl14_1: [[82, 84], [89
|
|
1684
|
-
keyCtrl17_1: [[65
|
|
1687
|
+
keyCtrl5_1: [[32], [37], [40], [38], [39]],
|
|
1688
|
+
keyCtrl7_1: [[83], [69], [70], [32, 71, 72], [74], [73], [76]],
|
|
1689
|
+
keyCtrl8_1: [[13], [83], [68], [70], [32], [74], [75], [76]],
|
|
1690
|
+
keyCtrl9A_1: [[83], [68], [69, 82], [70], [32], [37], [40], [38], [39]],
|
|
1691
|
+
keyCtrl9i_1: [[65], [83], [68], [70], [32], [37], [40], [38], [39]],
|
|
1692
|
+
keyCtrl12_1: [[89], [85, 73], [56, 55, 57], [79], [32], [66], [72], [78, 77], [74, 75], [188], [76], [190]],
|
|
1693
|
+
keyCtrl14_1: [[82, 84], [89], [85, 73], [56, 54, 55, 57, 48], [79], [192, 80], [32], [66], [72], [78, 77], [74, 75], [188], [76], [190]],
|
|
1694
|
+
keyCtrl17_1: [[65], [83], [68], [70], [32], [74], [75], [76], [187], [90], [88], [67], [86], [78], [77], [188], [190]],
|
|
1685
1695
|
|
|
1686
|
-
keyCtrl5_2: [[68
|
|
1687
|
-
keyCtrl8_2: [[32
|
|
1688
|
-
keyCtrl12_2: [[87
|
|
1689
|
-
keyCtrl14_2: [[9, 81], [87
|
|
1696
|
+
keyCtrl5_2: [[68], [70], [32], [74], [75]],
|
|
1697
|
+
keyCtrl8_2: [[32], [78], [74], [77], [75], [188], [76], [190]],
|
|
1698
|
+
keyCtrl12_2: [[87], [69], [51, 52], [82], [16], [90], [83], [88], [68], [67], [70], [86]],
|
|
1699
|
+
keyCtrl14_2: [[9, 81], [87], [69], [51, 50, 52, 53], [82], [89, 84], [16], [90], [83], [88], [68], [67], [70], [86]],
|
|
1690
1700
|
|
|
1691
|
-
keyCtrl8_3: [[32
|
|
1692
|
-
keyCtrl12_3: [[87
|
|
1693
|
-
keyCtrl14_3: [[9, 81], [87
|
|
1701
|
+
keyCtrl8_3: [[32], [66], [72], [78, 77], [74, 75], [188], [76], [190]],
|
|
1702
|
+
keyCtrl12_3: [[87], [69, 82], [51, 52, 53], [84], [16], [90], [83], [88, 67], [68, 70], [86], [71], [66]],
|
|
1703
|
+
keyCtrl14_3: [[9, 81], [87], [69, 82], [51, 50, 52, 53, 54], [84], [85, 89], [16], [90], [83], [88, 67], [68, 70], [86], [71], [66]],
|
|
1694
1704
|
|
|
1695
|
-
keyCtrl8_4: [[16
|
|
1705
|
+
keyCtrl8_4: [[16], [90], [83], [88], [68], [67], [70], [86]],
|
|
1696
1706
|
|
|
1697
|
-
keyCtrl8_5: [[16
|
|
1707
|
+
keyCtrl8_5: [[16], [90], [83], [88, 67], [68, 70], [86], [71], [66]],
|
|
1698
1708
|
|
|
1699
1709
|
// 矢印間隔補正
|
|
1700
1710
|
blank: 55,
|
|
@@ -2040,9 +2050,14 @@ Object.keys(g_copyKeyPtn).forEach(keyPtnTo => {
|
|
|
2040
2050
|
});
|
|
2041
2051
|
|
|
2042
2052
|
// デフォルト配列のコピー (g_keyObj.aaa_X から g_keyObj.aaa_Xd を作成)
|
|
2053
|
+
// keyCtrlX_Yについて1キーにつき2キー割り当てできるように配列を補完
|
|
2043
2054
|
const keyCtrlName = Object.keys(g_keyObj).filter(val => val.startsWith(`keyCtrl`));
|
|
2044
|
-
keyCtrlName.forEach(property =>
|
|
2055
|
+
keyCtrlName.forEach(property => {
|
|
2056
|
+
g_keyObj[property].forEach((list, j) => g_keyObj[property][j] = makeBaseArray(g_keyObj[property][j], g_keyObj.minKeyCtrlNum, 0));
|
|
2057
|
+
g_keyObj[`${property}d`] = copyArray2d(g_keyObj[property]);
|
|
2058
|
+
});
|
|
2045
2059
|
|
|
2060
|
+
// shuffleX_Y, colorX_Yについてデフォルト配列を作成
|
|
2046
2061
|
g_keycons.groups.forEach(type => {
|
|
2047
2062
|
const tmpName = Object.keys(g_keyObj).filter(val => val.startsWith(type) && val.endsWith(`_0`));
|
|
2048
2063
|
tmpName.forEach(property => g_keyObj[`${property.slice(0, -2)}`] = g_keyObj[property].concat());
|