danoniplus 30.4.0 → 30.5.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 CHANGED
@@ -4,12 +4,12 @@
4
4
  *
5
5
  * Source by tickle
6
6
  * Created : 2018/10/08
7
- * Revised : 2023/03/10
7
+ * Revised : 2023/03/12
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 30.4.0`;
12
- const g_revisedDate = `2023/03/10`;
11
+ const g_version = `Ver 30.5.0`;
12
+ const g_revisedDate = `2023/03/12`;
13
13
  const g_alphaVersion = ``;
14
14
 
15
15
  // カスタム用バージョン (danoni_custom.js 等で指定可)
@@ -387,6 +387,19 @@ const copyArray2d = _array2d => structuredClone(_array2d);
387
387
  */
388
388
  const sumData = _array => _array.reduce((p, x) => p + x);
389
389
 
390
+ /**
391
+ * 最小配列長の配列を作成
392
+ * @param {array} _array
393
+ * @param {number} _minLength
394
+ * @param {number} _defaultVal
395
+ * @returns
396
+ */
397
+ const makeBaseArray = (_array, _minLength, _defaultVal) => {
398
+ const baseArray = [...Array(_minLength)].fill(_defaultVal);
399
+ _array.forEach((val, j) => baseArray[j] = val);
400
+ return baseArray;
401
+ };
402
+
390
403
  /**
391
404
  * 部分一致検索(リストのいずれかに合致、大小文字問わず)
392
405
  * @param {string} _str 検索文字
@@ -3442,9 +3455,25 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3442
3455
  const toNumber = _num => parseInt(_num, 10);
3443
3456
  const toFloat = _num => parseFloat(_num);
3444
3457
  const toStringOrNumber = _str => isNaN(Number(_str)) ? _str : toNumber(_str);
3445
- const toSplitArray = _str => _str.split(`/`).map(n => toNumber(n));
3458
+ const toKeyCtrlArray = _str => makeBaseArray(_str.split(`/`).map(n => toNumber(n)), g_keyObj.minKeyCtrlNum, 0);
3446
3459
  const toSplitArrayStr = _str => _str.split(`/`).map(n => n);
3447
3460
 
3461
+ /**
3462
+ * キーパターン(相対パターン)をキーパターン(実際のパターン番号)に変換
3463
+ * 例) 12_(0) -> 12_4
3464
+ * それ以外の文字列が来た場合は、そのままの値を戻す
3465
+ * @param {string} _str
3466
+ * @returns
3467
+ */
3468
+ const getKeyPtnName = _str => {
3469
+ const regex = /\((\d+)\)/;
3470
+ const checkStr = _str.match(regex);
3471
+ if (checkStr !== null) {
3472
+ return _str.replace(regex, (match, p) => `${parseInt(p, 10) + setIntVal(g_keyObj.dfPtnNum)}`);
3473
+ }
3474
+ return _str;
3475
+ };
3476
+
3448
3477
  /**
3449
3478
  * 新キー用複合パラメータ
3450
3479
  * @param {string} _key キー数
@@ -3465,8 +3494,9 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3465
3494
  if (existParam(tmpArray[k], `${keyheader}_${k + dfPtn}`)) {
3466
3495
  continue;
3467
3496
  }
3468
- g_keyObj[`${keyheader}_${k + dfPtn}`] = g_keyObj[`${_name}${tmpArray[k]}`] !== undefined ?
3469
- copyArray2d(g_keyObj[`${_name}${tmpArray[k]}`]) : tmpArray[k].split(`,`).map(n => _convFunc(n));
3497
+ const keyPtn = getKeyPtnName(tmpArray[k]);
3498
+ g_keyObj[`${keyheader}_${k + dfPtn}`] = g_keyObj[`${_name}${keyPtn}`] !== undefined ?
3499
+ copyArray2d(g_keyObj[`${_name}${keyPtn}`]) : tmpArray[k].split(`,`).map(n => _convFunc(n));
3470
3500
  if (baseCopyFlg) {
3471
3501
  g_keyObj[`${keyheader}_${k + dfPtn}d`] = copyArray2d(g_keyObj[`${keyheader}_${k + dfPtn}`]);
3472
3502
  }
@@ -3498,15 +3528,16 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3498
3528
  let ptnCnt = 0;
3499
3529
  tmpArray[k].split(`/`).forEach(list => {
3500
3530
 
3531
+ const keyPtn = getKeyPtnName(list);
3501
3532
  if (list === ``) {
3502
3533
  // 空指定の場合は一律同じグループへ割り当て
3503
3534
  g_keyObj[`${keyheader}_${k + dfPtn}_${ptnCnt}`] = [...Array(g_keyObj[`chara${_key}_${k + dfPtn}`].length)].fill(0);
3504
3535
 
3505
- } else if (g_keyObj[`${_name}${list}_0`] !== undefined) {
3536
+ } else if (g_keyObj[`${_name}${keyPtn}_0`] !== undefined) {
3506
3537
  // 他のキーパターン (例: |shuffle8i=8_0| ) を指定した場合、該当があれば既存パターンからコピー
3507
3538
  let m = 0;
3508
- while (g_keyObj[`${_name}${list}_${m}`] !== undefined) {
3509
- g_keyObj[`${keyheader}_${k + dfPtn}_${ptnCnt}`] = structuredClone(g_keyObj[`${_name}${list}_${m}`]);
3539
+ while (g_keyObj[`${_name}${keyPtn}_${m}`] !== undefined) {
3540
+ g_keyObj[`${keyheader}_${k + dfPtn}_${ptnCnt}`] = structuredClone(g_keyObj[`${_name}${keyPtn}_${m}`]);
3510
3541
  m++;
3511
3542
  ptnCnt++;
3512
3543
  }
@@ -3566,17 +3597,23 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3566
3597
  continue;
3567
3598
  }
3568
3599
  g_keyObj[pairName] = {}
3569
- if (g_keyObj[`${_pairName}${tmpParams[k]}`] !== undefined) {
3570
- Object.assign(g_keyObj[pairName], g_keyObj[`${_pairName}${tmpParams[k]}`]);
3571
- } else {
3572
- if (_defaultName !== ``) {
3573
- g_keyObj[pairName][_defaultName] = [...Array(g_keyObj[`chara${_key}_${k + dfPtn}`].length)].fill(_defaultVal);
3574
- }
3575
- tmpParams[k].split(`/`).forEach(pairs => {
3600
+
3601
+ // デフォルト項目がある場合は先に定義
3602
+ if (_defaultName !== ``) {
3603
+ g_keyObj[pairName][_defaultName] = [...Array(g_keyObj[`chara${_key}_${k + dfPtn}`].length)].fill(_defaultVal);
3604
+ }
3605
+ tmpParams[k].split(`/`).forEach(pairs => {
3606
+ const keyPtn = getKeyPtnName(pairs);
3607
+ if (pairs === ``) {
3608
+ } else if (g_keyObj[`${_pairName}${keyPtn}`] !== undefined) {
3609
+ // 他のキーパターン指定時、該当があればプロパティを全コピー
3610
+ Object.assign(g_keyObj[pairName], g_keyObj[`${_pairName}${keyPtn}`]);
3611
+ } else {
3612
+ // 通常の指定方法(例:|scroll8i=Cross::1,1,1,-1,-1,-1,1,1/Split::1,1,1,1,-1,-1,-1,-1|)から取り込み
3576
3613
  const tmpParamPair = pairs.split(`::`);
3577
3614
  g_keyObj[pairName][tmpParamPair[0]] = tmpParamPair[1].split(`,`).map(n => parseInt(n, 10));
3578
- });
3579
- }
3615
+ }
3616
+ });
3580
3617
  }
3581
3618
  }
3582
3619
  };
@@ -3613,7 +3650,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3613
3650
  newKeyMultiParam(newKey, `stepRtn`, toStringOrNumber, { errCd: `E_0103` });
3614
3651
 
3615
3652
  // キーコンフィグ (keyCtrlX_Y)
3616
- newKeyMultiParam(newKey, `keyCtrl`, toSplitArray, { errCd: `E_0104`, baseCopyFlg: true });
3653
+ newKeyMultiParam(newKey, `keyCtrl`, toKeyCtrlArray, { errCd: `E_0104`, baseCopyFlg: true });
3617
3654
 
3618
3655
  // ステップゾーン位置 (posX_Y)
3619
3656
  newKeyMultiParam(newKey, `pos`, toFloat);
@@ -6247,28 +6284,38 @@ const keyConfigInit = (_kcType = g_kcType) => {
6247
6284
  * @param {boolean} _transKeyUse
6248
6285
  * @returns
6249
6286
  */
6250
- const searchPattern = (_tempPtn, _sign, _transKeyUse = false) => {
6287
+ const searchPattern = (_tempPtn, _sign, _transKeyUse = false, _skipFlg = false) => {
6251
6288
  let nextPtn = _tempPtn + _sign;
6289
+ const initialPtn = hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_-1`]) ? -1 : 0;
6252
6290
 
6253
6291
  const searchStart = _ => {
6254
- nextPtn = 0;
6255
- while (hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_${nextPtn}`])) {
6256
- nextPtn -= _sign;
6292
+ if (!hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_${nextPtn}`])) {
6293
+ nextPtn = 0;
6294
+ while (hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_${nextPtn}`])) {
6295
+ nextPtn -= _sign;
6296
+ }
6297
+ nextPtn += _sign;
6257
6298
  }
6258
- nextPtn += _sign;
6259
6299
  };
6260
6300
 
6261
- if (hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_${nextPtn}`])) {
6262
- } else {
6301
+ const searchNextGroup = _ => {
6302
+ while (nextPtn !== initialPtn &&
6303
+ g_keyObj[`transKey${g_keyObj.currentKey}_${_tempPtn}`] === g_keyObj[`transKey${g_keyObj.currentKey}_${nextPtn}`] &&
6304
+ hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_${nextPtn}`])) {
6305
+ nextPtn += _sign;
6306
+ }
6307
+ };
6308
+
6309
+ searchStart();
6310
+ if (_skipFlg) {
6311
+ searchNextGroup();
6263
6312
  searchStart();
6264
6313
  }
6265
6314
  if (!_transKeyUse) {
6266
6315
  while (hasVal(g_keyObj[`transKey${g_keyObj.currentKey}_${nextPtn}`])) {
6267
6316
  nextPtn += _sign;
6268
6317
  }
6269
- if (!hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_${nextPtn}`])) {
6270
- searchStart();
6271
- }
6318
+ searchStart();
6272
6319
  }
6273
6320
  return nextPtn;
6274
6321
  };
@@ -6276,11 +6323,12 @@ const keyConfigInit = (_kcType = g_kcType) => {
6276
6323
  /**
6277
6324
  * キーパターン変更時処理
6278
6325
  * @param {number} _sign
6326
+ * @param {boolean} _skipFlg
6279
6327
  */
6280
- const changePattern = (_sign = 1) => {
6328
+ const changePattern = (_sign = 1, _skipFlg = false) => {
6281
6329
 
6282
6330
  // キーパターンの変更
6283
- g_keyObj.currentPtn = searchPattern(g_keyObj.currentPtn, _sign, g_headerObj.transKeyUse);
6331
+ g_keyObj.currentPtn = searchPattern(g_keyObj.currentPtn, _sign, g_headerObj.transKeyUse, _skipFlg);
6284
6332
 
6285
6333
  // カラーグループ、シャッフルグループの再設定
6286
6334
  g_keycons.groups.forEach(type => resetGroupList(type, `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`));
@@ -6330,13 +6378,23 @@ const keyConfigInit = (_kcType = g_kcType) => {
6330
6378
  'Self' : g_keyObj.currentPtn + 1}${lblTransKey}`, g_lblPosObj.lblPattern),
6331
6379
 
6332
6380
  // パターン変更ボタン描画(右回り)
6333
- createCss2Button(`btnPtnChangeR`, `>>`, _ => true, Object.assign(g_lblPosObj.btnPtnChangeR, {
6381
+ createCss2Button(`btnPtnChangeR`, `>`, _ => true, Object.assign(g_lblPosObj.btnPtnChangeR, {
6334
6382
  resetFunc: _ => changePattern(),
6335
- }), g_cssObj.button_Setting),
6383
+ }), g_cssObj.button_Mini),
6336
6384
 
6337
6385
  // パターン変更ボタン描画(左回り)
6338
- createCss2Button(`btnPtnChangeL`, `<<`, _ => true, Object.assign(g_lblPosObj.btnPtnChangeL, {
6386
+ createCss2Button(`btnPtnChangeL`, `<`, _ => true, Object.assign(g_lblPosObj.btnPtnChangeL, {
6339
6387
  resetFunc: _ => changePattern(-1),
6388
+ }), g_cssObj.button_Mini),
6389
+
6390
+ // パターン変更ボタン描画(右回り/別キーモード間スキップ)
6391
+ createCss2Button(`btnPtnChangeRR`, `|>`, _ => true, Object.assign(g_lblPosObj.btnPtnChangeRR, {
6392
+ resetFunc: _ => changePattern(1, true),
6393
+ }), g_cssObj.button_Setting),
6394
+
6395
+ // パターン変更ボタン描画(左回り/別キーモード間スキップ)
6396
+ createCss2Button(`btnPtnChangeLL`, `<|`, _ => true, Object.assign(g_lblPosObj.btnPtnChangeLL, {
6397
+ resetFunc: _ => changePattern(-1, true),
6340
6398
  }), g_cssObj.button_Setting),
6341
6399
 
6342
6400
  // キーコンフィグリセットボタン描画
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2023/03/10 (v30.4.0)
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 / 6, h: C_BTN_HEIGHT / 2, siz: C_LBL_BTNSIZE * 2 / 3,
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 / 6, h: C_BTN_HEIGHT / 2, siz: C_LBL_BTNSIZE * 2 / 3,
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, 0], [40, 0], [38, 0], [39, 0], [32, 0]],
1654
- keyCtrl7_0: [[83, 0], [68, 0], [70, 0], [32, 0], [74, 0], [75, 0], [76, 0]],
1655
- keyCtrl7i_0: [[90, 0], [88, 0], [67, 0], [37, 0], [40, 0], [38, 0], [39, 0]],
1656
- keyCtrl8_0: [[83, 0], [68, 0], [70, 0], [32, 0], [74, 0], [75, 0], [76, 0], [13, 0]],
1657
- keyCtrl9A_0: [[83, 0], [68, 0], [69, 82], [70, 0], [32, 0], [74, 0], [75, 0], [73, 0], [76, 0]],
1658
- keyCtrl9B_0: [[65, 0], [83, 0], [68, 0], [70, 0], [32, 0], [74, 0], [75, 0], [76, 0], [187, 0]],
1659
- keyCtrl9i_0: [[37, 0], [40, 0], [38, 0], [39, 0], [65, 0], [83, 0], [68, 0], [70, 0], [32, 0]],
1660
- keyCtrl11_0: [[37, 0], [40, 0], [38, 0], [39, 0], [83, 0], [68, 0], [70, 0], [32, 0], [74, 0], [75, 0], [76, 0]],
1661
- keyCtrl11L_0: [[87, 0], [69, 0], [51, 52], [82, 0], [83, 0], [68, 0], [70, 0], [32, 0], [74, 0], [75, 0], [76, 0]],
1662
- keyCtrl11W_0: [[49, 50], [84, 0], [89, 0], [48, 189], [83, 0], [68, 0], [70, 0], [32, 0], [74, 0], [75, 0], [76, 0]],
1663
- keyCtrl11i_0: [[83, 0], [88, 67], [68, 0], [69, 82], [70, 0], [32, 0], [74, 0], [77, 188], [75, 0], [73, 79], [76, 0]],
1664
- keyCtrl12_0: [[85, 0], [73, 0], [56, 57], [79, 0], [32, 0], [78, 0], [74, 0], [77, 0], [75, 0], [188, 0], [76, 0], [190, 0]],
1665
- keyCtrl13_0: [[37, 0], [40, 0], [38, 0], [39, 0], [83, 0], [68, 0], [69, 82], [70, 0], [32, 0], [74, 0], [75, 0], [73, 0], [76, 0]],
1666
- keyCtrl14_0: [[84, 89], [85, 0], [73, 0], [56, 55, 57, 48], [79, 0], [192, 80], [32, 0], [78, 0], [74, 0], [77, 0], [75, 0], [188, 0], [76, 0], [190, 0]],
1667
- keyCtrl14i_0: [[90, 87], [88, 69], [67, 82], [37, 0], [40, 0], [38, 0], [39, 0], [83, 0], [68, 0], [70, 0], [32, 0], [74, 0], [75, 0], [76, 0]],
1668
- keyCtrl15A_0: [[87, 0], [69, 0], [51, 52], [82, 0], [37, 0], [40, 0], [38, 0], [39, 0], [83, 0], [68, 0], [70, 0], [32, 0], [74, 0], [75, 0], [76, 0]],
1669
- keyCtrl15B_0: [[87, 0], [69, 0], [51, 52], [82, 0], [85, 0], [73, 0], [56, 57], [79, 0], [83, 0], [68, 0], [70, 0], [32, 0], [74, 0], [75, 0], [76, 0]],
1670
- keyCtrl16i_0: [[90, 87], [88, 69], [67, 82], [37, 0], [40, 0], [38, 0], [39, 0], [65, 0], [83, 0], [68, 0], [70, 0], [32, 0], [74, 0], [75, 0], [76, 0], [187, 0]],
1671
- keyCtrl17_0: [[65, 0], [90, 0], [83, 0], [88, 0], [68, 0], [67, 0], [70, 0], [86, 0], [32, 0], [78, 0], [74, 0], [77, 0], [75, 0], [188, 0], [76, 0], [190, 0], [187, 0]],
1672
- keyCtrl23_0: [[87, 0], [69, 0], [51, 52], [82, 0], [85, 0], [73, 0], [56, 57], [79, 0],
1673
- [90, 0], [83, 0], [88, 0], [68, 0], [67, 0], [70, 0], [86, 0], [32, 0], [78, 0], [74, 0], [77, 0], [75, 0], [188, 0], [76, 0], [190, 0]],
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, 0], [37, 0], [40, 0], [38, 0], [39, 0]],
1678
- keyCtrl7_1: [[83, 0], [69, 0], [70, 0], [32, 71, 72], [74, 0], [73, 0], [76, 0]],
1679
- keyCtrl8_1: [[13, 0], [83, 0], [68, 0], [70, 0], [32, 0], [74, 0], [75, 0], [76, 0]],
1680
- keyCtrl9A_1: [[83, 0], [68, 0], [69, 82], [70, 0], [32, 0], [37, 0], [40, 0], [38, 0], [39, 0]],
1681
- keyCtrl9i_1: [[65, 0], [83, 0], [68, 0], [70, 0], [32, 0], [37, 0], [40, 0], [38, 0], [39, 0]],
1682
- keyCtrl12_1: [[89, 0], [85, 73], [56, 55, 57], [79, 0], [32, 0], [66, 0], [72, 0], [78, 77], [74, 75], [188, 0], [76, 0], [190, 0]],
1683
- keyCtrl14_1: [[82, 84], [89, 0], [85, 73], [56, 54, 55, 57, 48], [79, 0], [192, 80], [32, 0], [66, 0], [72, 0], [78, 77], [74, 75], [188, 0], [76, 0], [190, 0]],
1684
- keyCtrl17_1: [[65, 0], [83, 0], [68, 0], [70, 0], [32, 0], [74, 0], [75, 0], [76, 0], [187, 0], [90, 0], [88, 0], [67, 0], [86, 0], [78, 0], [77, 0], [188, 0], [190, 0]],
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, 0], [70, 0], [32, 0], [74, 0], [75, 0]],
1687
- keyCtrl8_2: [[32, 0], [78, 0], [74, 0], [77, 0], [75, 0], [188, 0], [76, 0], [190, 0]],
1688
- keyCtrl12_2: [[87, 0], [69, 0], [51, 52], [82, 0], [16, 0], [90, 0], [83, 0], [88, 0], [68, 0], [67, 0], [70, 0], [86, 0]],
1689
- keyCtrl14_2: [[9, 81], [87, 0], [69, 0], [51, 50, 52, 53], [82, 0], [89, 84], [16, 0], [90, 0], [83, 0], [88, 0], [68, 0], [67, 0], [70, 0], [86, 0]],
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, 0], [66, 0], [72, 0], [78, 77], [74, 75], [188, 0], [76, 0], [190, 0]],
1692
- keyCtrl12_3: [[87, 0], [69, 82], [51, 52, 53], [84, 0], [16, 0], [90, 0], [83, 0], [88, 67], [68, 70], [86, 0], [71, 0], [66, 0]],
1693
- keyCtrl14_3: [[9, 81], [87, 0], [69, 82], [51, 50, 52, 53, 54], [84, 0], [85, 89], [16, 0], [90, 0], [83, 0], [88, 67], [68, 70], [86, 0], [71, 0], [66, 0]],
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, 0], [90, 0], [83, 0], [88, 0], [68, 0], [67, 0], [70, 0], [86, 0]],
1705
+ keyCtrl8_4: [[16], [90], [83], [88], [68], [67], [70], [86]],
1696
1706
 
1697
- keyCtrl8_5: [[16, 0], [90, 0], [83, 0], [88, 67], [68, 70], [86, 0], [71, 0], [66, 0]],
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 => g_keyObj[`${property}d`] = copyArray2d(g_keyObj[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());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "30.4.0",
3
+ "version": "30.5.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {