danoniplus 31.7.0 → 32.0.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,13 +4,12 @@
4
4
  *
5
5
  * Source by tickle
6
6
  * Created : 2018/10/08
7
- * Revised : 2023/05/03
7
+ * Revised : 2023/05/07
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 31.7.0`;
12
- const g_revisedDate = `2023/05/03`;
13
- const g_alphaVersion = ``;
11
+ const g_version = `Ver 32.0.0`;
12
+ const g_revisedDate = `2023/05/07`;
14
13
 
15
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
16
15
  let g_localVersion = ``;
@@ -543,7 +542,7 @@ const commonKeyDown = (_evt, _displayName, _func = _code => { }, _dfEvtFlg) => {
543
542
  if (!_dfEvtFlg) {
544
543
  _evt.preventDefault();
545
544
  }
546
- const setCode = transCode(_evt.code);
545
+ const setCode = _evt.code;
547
546
  if (_evt.repeat && (g_unrepeatObj.page.includes(_displayName) || g_unrepeatObj.key.includes(setCode))) {
548
547
  return blockCode(setCode);
549
548
  }
@@ -576,8 +575,9 @@ const commonKeyDown = (_evt, _displayName, _func = _code => { }, _dfEvtFlg) => {
576
575
  * @param {object} _evt
577
576
  */
578
577
  const commonKeyUp = _evt => {
579
- g_inputKeyBuffer[g_kCdNameObj.metaKey] = false;
580
- g_inputKeyBuffer[transCode(_evt.code)] = false;
578
+ g_inputKeyBuffer[g_kCdNameObj.metaLKey] = false;
579
+ g_inputKeyBuffer[g_kCdNameObj.metaRKey] = false;
580
+ g_inputKeyBuffer[_evt.code] = false;
581
581
  };
582
582
 
583
583
  /**
@@ -1335,7 +1335,7 @@ const resetKeyControl = _ => {
1335
1335
  document.onkeyup = _ => { };
1336
1336
  document.onkeydown = evt => {
1337
1337
  evt.preventDefault();
1338
- return blockCode(transCode(evt.code));
1338
+ return blockCode(evt.code);
1339
1339
  };
1340
1340
  g_inputKeyBuffer = {};
1341
1341
  };
@@ -3578,9 +3578,12 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3578
3578
  if (existParam(tmpArray[k], `${keyheader}_${k + dfPtn}`)) {
3579
3579
  continue;
3580
3580
  }
3581
- const keyPtn = getKeyPtnName(tmpArray[k]);
3582
- g_keyObj[`${keyheader}_${k + dfPtn}`] = g_keyObj[`${_name}${keyPtn}`] !== undefined ?
3583
- structuredClone(g_keyObj[`${_name}${keyPtn}`]) : tmpArray[k].split(`,`).map(n => _convFunc(n));
3581
+ // |keyCtrl9j=Tab,7_0,Enter| -> |keyCtrl9j=Tab,S,D,F,Space,J,K,L,Enter| のように補完
3582
+ g_keyObj[`${keyheader}_${k + dfPtn}`] =
3583
+ tmpArray[k].split(`,`).map(n =>
3584
+ g_keyObj[`${_name}${getKeyPtnName(n)}`] !== undefined ?
3585
+ structuredClone(g_keyObj[`${_name}${getKeyPtnName(n)}`]) : [_convFunc(n)]
3586
+ ).flat();
3584
3587
  if (baseCopyFlg) {
3585
3588
  g_keyObj[`${keyheader}_${k + dfPtn}d`] = structuredClone(g_keyObj[`${keyheader}_${k + dfPtn}`]);
3586
3589
  }
@@ -3618,7 +3621,8 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3618
3621
  g_keyObj[`${keyheader}_${k + dfPtn}_${ptnCnt}`] = [...Array(g_keyObj[`${g_keyObj.defaultProp}${_key}_${k + dfPtn}`].length)].fill(0);
3619
3622
 
3620
3623
  } else if (g_keyObj[`${_name}${keyPtn}_0`] !== undefined) {
3621
- // 他のキーパターン (例: |shuffle8i=8_0| ) を指定した場合、該当があれば既存パターンからコピー
3624
+ // 他のキーパターン (例: |shuffle8i=8_0| ) を直接指定した場合、該当があれば既存パターンからコピー
3625
+ // 既存パターンが複数ある場合、全てコピーする
3622
3626
  let m = 0;
3623
3627
  while (g_keyObj[`${_name}${keyPtn}_${m}`] !== undefined) {
3624
3628
  g_keyObj[`${keyheader}_${k + dfPtn}_${ptnCnt}`] = structuredClone(g_keyObj[`${_name}${keyPtn}_${m}`]);
@@ -3627,9 +3631,13 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3627
3631
  }
3628
3632
  } else {
3629
3633
  // 通常の指定方法 (例: |shuffle8i=1,1,1,2,0,0,0,0/1,1,1,1,0,0,0,0| )の場合の取り込み
3634
+ // 部分的にキーパターン指定があった場合は既存パターンを展開 (例: |shuffle9j=2,7_0_0,2|)
3630
3635
  g_keyObj[`${keyheader}_${k + dfPtn}_${ptnCnt}`] =
3631
- makeBaseArray(list.split(`,`).map(n => isNaN(parseInt(n)) ? n : parseInt(n, 10)),
3632
- g_keyObj[`${g_keyObj.defaultProp}${_key}_${k + dfPtn}`].length, 0);
3636
+ makeBaseArray(list.split(`,`).map(n =>
3637
+ g_keyObj[`${_name}${getKeyPtnName(n)}`] !== undefined ?
3638
+ structuredClone(g_keyObj[`${_name}${getKeyPtnName(n)}`]) :
3639
+ [isNaN(parseInt(n)) ? n : parseInt(n, 10)]
3640
+ ).flat(), g_keyObj[`${g_keyObj.defaultProp}${_key}_${k + dfPtn}`].length, 0);
3633
3641
  ptnCnt++;
3634
3642
  }
3635
3643
  });
@@ -3651,14 +3659,19 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3651
3659
  * @param {string} _key キー数
3652
3660
  * @param {string} _name 名前
3653
3661
  * @param {string} _type float, number, string, boolean
3662
+ * @param {string} _defaultVal
3654
3663
  */
3655
- const newKeySingleParam = (_key, _name, _type) => {
3664
+ const newKeySingleParam = (_key, _name, _type, _defaultVal) => {
3656
3665
  const keyheader = _name + _key;
3657
3666
  const dfPtn = setIntVal(g_keyObj.dfPtnNum);
3658
3667
  if (_dosObj[keyheader] !== undefined) {
3659
3668
  const tmps = _dosObj[keyheader].split(`$`);
3660
3669
  for (let k = 0; k < tmps.length; k++) {
3661
- g_keyObj[`${keyheader}_${k + dfPtn}`] = setVal(g_keyObj[`${_name}${tmps[k]}`], setVal(tmps[k], ``, _type));
3670
+ g_keyObj[`${keyheader}_${k + dfPtn}`] = setVal(g_keyObj[`${_name}${getKeyPtnName(tmps[k])}`],
3671
+ tmps[k].indexOf(`_`) !== -1 ? _defaultVal : setVal(tmps[k], ``, _type));
3672
+ }
3673
+ for (let k = tmps.length; k < g_keyObj.minPatterns; k++) {
3674
+ g_keyObj[`${keyheader}_${k + dfPtn}`] = g_keyObj[`${keyheader}_0`];
3662
3675
  }
3663
3676
  }
3664
3677
  };
@@ -3695,11 +3708,15 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3695
3708
  // 他のキーパターン指定時、該当があればプロパティを全コピー
3696
3709
  Object.assign(g_keyObj[pairName], g_keyObj[`${_pairName}${keyPtn}`]);
3697
3710
  } else {
3698
- // 通常の指定方法(例:|scroll8i=Cross::1,1,1,-1,-1,-1,1,1/Split::1,1,1,1,-1,-1,-1,-1|)から取り込み
3711
+ // 通常の指定方法(例:|scroll8i=Cross::1,1,1,-,-,-,1,1/Split::1,1,1,1,-,-,-,-|)から取り込み
3712
+ // 部分的にキーパターン指定があった場合は既存パターンを展開 (例: |scroll9j=Cross::1,7_0,1|)
3699
3713
  const tmpParamPair = pairs.split(`::`);
3700
3714
  g_keyObj[pairName][tmpParamPair[0]] =
3701
- makeBaseArray(tmpParamPair[1].split(`,`).map(n => parseInt(n, 10)),
3702
- g_keyObj[`${g_keyObj.defaultProp}${_key}_${k + dfPtn}`].length, _defaultVal);
3715
+ makeBaseArray(tmpParamPair[1].split(`,`).map(n =>
3716
+ g_keyObj[`${_pairName}${getKeyPtnName(n)}`] !== undefined ?
3717
+ structuredClone(g_keyObj[`${_pairName}${getKeyPtnName(n)}`][tmpParamPair[0]]) :
3718
+ [n === `-` ? -1 : parseInt(n, 10)]
3719
+ ).flat(), g_keyObj[`${g_keyObj.defaultProp}${_key}_${k + dfPtn}`].length, _defaultVal);
3703
3720
  }
3704
3721
  });
3705
3722
  }
@@ -3770,19 +3787,19 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3770
3787
  }
3771
3788
 
3772
3789
  // ステップゾーン間隔 (blankX_Y)
3773
- newKeySingleParam(newKey, `blank`, C_TYP_FLOAT);
3790
+ newKeySingleParam(newKey, `blank`, C_TYP_FLOAT, g_keyObj.blank_def);
3774
3791
 
3775
3792
  // 矢印群の倍率 (scaleX_Y)
3776
- newKeySingleParam(newKey, `scale`, C_TYP_FLOAT);
3793
+ newKeySingleParam(newKey, `scale`, C_TYP_FLOAT, g_keyObj.scale_def);
3777
3794
 
3778
3795
  // プレイ中ショートカット:リトライ (keyRetryX_Y)
3779
- newKeySingleParam(newKey, `keyRetry`, C_TYP_STRING);
3796
+ newKeySingleParam(newKey, `keyRetry`, C_TYP_STRING, C_KEY_RETRY);
3780
3797
 
3781
3798
  // プレイ中ショートカット:タイトルバック (keyTitleBackX_Y)
3782
- newKeySingleParam(newKey, `keyTitleBack`, C_TYP_STRING);
3799
+ newKeySingleParam(newKey, `keyTitleBack`, C_TYP_STRING, C_KEY_TITLEBACK);
3783
3800
 
3784
3801
  // 別キーフラグ (transKeyX_Y)
3785
- newKeySingleParam(newKey, `transKey`, C_TYP_STRING);
3802
+ newKeySingleParam(newKey, `transKey`, C_TYP_STRING, ``);
3786
3803
 
3787
3804
  // シャッフルグループ (shuffleX_Y)
3788
3805
  newKeyTripleParam(newKey, `shuffle`);
@@ -3972,7 +3989,7 @@ const titleInit = _ => {
3972
3989
  customVersion += ` / ${g_localVersion2}`;
3973
3990
  }
3974
3991
  const releaseDate = (g_headerObj.releaseDate !== `` ? ` @${g_headerObj.releaseDate}` : ``);
3975
- const versionName = `&copy; 2018-${g_revisedDate.slice(0, 4)} ティックル, CW ${g_version}${g_alphaVersion}${customVersion}${releaseDate}`;
3992
+ const versionName = `&copy; 2018-${g_revisedDate.slice(0, 4)} ティックル, CW ${g_version}${customVersion}${releaseDate}`;
3976
3993
 
3977
3994
  let reloadFlg = false;
3978
3995
  const getLinkSiz = _name => getFontSize(_name, g_sWidth / 2 - 20, getBasicFont(), g_limitObj.lnkSiz, 12);
@@ -5163,7 +5180,7 @@ const createOptionWindow = _sprite => {
5163
5180
 
5164
5181
  // 譜面番号の再取得
5165
5182
  g_stateObj.scoreId = getNextDifficulty(g_stateObj.scoreId, 0);
5166
- const keyLists = g_headerObj.viewLists.map(j => g_headerObj.keyLabels[j]);
5183
+ const keyLists = makeDedupliArray(g_headerObj.viewLists.map(j => g_headerObj.keyLabels[j]));
5167
5184
  g_headerObj.viewKeyLists = keyLists.sort((a, b) => parseInt(a) - parseInt(b));
5168
5185
  g_headerObj.difSelectorUse = getDifSelectorUse(g_rootObj.difSelectorUse);
5169
5186
 
@@ -6008,7 +6025,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
6008
6025
  setKeyConfigCursor();
6009
6026
  }, {
6010
6027
  x: keyconX, y: 50 + C_KYC_REPHEIGHT * k + keyconY,
6011
- w: C_ARW_WIDTH, h: C_KYC_REPHEIGHT, siz: g_limitObj.jdgCntsSiz,
6028
+ w: C_ARW_WIDTH, h: C_KYC_REPHEIGHT, siz: g_limitObj.keySetSiz,
6012
6029
  }, g_cssObj.button_Default_NoColor, g_cssObj.title_base)
6013
6030
  );
6014
6031
 
@@ -6534,12 +6551,13 @@ const keyConfigInit = (_kcType = g_kcType) => {
6534
6551
 
6535
6552
  // 全角切替、BackSpace、Deleteキー、Escキーは割り当て禁止
6536
6553
  // また、直前と同じキーを押した場合(BackSpaceを除く)はキー操作を無効にする
6537
- const disabledKeys = [229, 240, 242, 243, 244, 91, 29, 28, 27, g_prevKey];
6554
+ const disabledKeys = [229, 240, 242, 243, 244, 91, 29, 28, 27, 259, g_prevKey];
6538
6555
  if (disabledKeys.includes(setKey) || g_kCdN[setKey] === undefined) {
6539
6556
  makeInfoWindow(g_msgInfoObj.I_0002, `fadeOut0`);
6540
6557
  return;
6541
6558
  } else if ((setKey === C_KEY_TITLEBACK && g_currentk === 0) ||
6542
- (keyIsDown(g_kCdNameObj.metaKey) && keyIsDown(g_kCdNameObj.shiftKey))) {
6559
+ ((keyIsDown(g_kCdNameObj.metaLKey) || keyIsDown(g_kCdNameObj.metaRKey)) &&
6560
+ (keyIsDown(g_kCdNameObj.shiftLKey) || keyIsDown(g_kCdNameObj.shiftRKey)))) {
6543
6561
  return;
6544
6562
  }
6545
6563
 
@@ -8957,7 +8975,7 @@ const mainInit = _ => {
8957
8975
  // キー操作イベント
8958
8976
  document.onkeydown = evt => {
8959
8977
  evt.preventDefault();
8960
- const setCode = transCode(evt.code);
8978
+ const setCode = evt.code;
8961
8979
 
8962
8980
  if (evt.repeat && !g_mainRepeatObj.key.includes(setCode)) {
8963
8981
  return blockCode(setCode);
@@ -8969,7 +8987,7 @@ const mainInit = _ => {
8969
8987
  // 曲中リトライ、タイトルバック
8970
8988
  if (setCode === g_kCdN[g_headerObj.keyRetry]) {
8971
8989
 
8972
- if (g_isMac && keyIsDown(g_kCdNameObj.shiftKey)) {
8990
+ if (g_isMac && (keyIsDown(g_kCdNameObj.shiftLKey) || keyIsDown(g_kCdNameObj.shiftRKey))) {
8973
8991
  // Mac OS、IPad OSはDeleteキーが無いためShift+BSで代用
8974
8992
  g_audio.pause();
8975
8993
  clearTimeout(g_timeoutEvtId);
@@ -8986,7 +9004,7 @@ const mainInit = _ => {
8986
9004
  } else if (setCode === g_kCdN[g_headerObj.keyTitleBack]) {
8987
9005
  g_audio.pause();
8988
9006
  clearTimeout(g_timeoutEvtId);
8989
- if (keyIsDown(g_kCdNameObj.shiftKey)) {
9007
+ if (keyIsDown(g_kCdNameObj.shiftLKey) || keyIsDown(g_kCdNameObj.shiftRKey)) {
8990
9008
  if (g_currentArrows !== g_fullArrows || g_stateObj.lifeMode === C_LFE_BORDER && g_workObj.lifeVal < g_workObj.lifeBorder) {
8991
9009
  g_gameOverFlg = true;
8992
9010
  g_finishFlg = false;
@@ -9025,7 +9043,7 @@ const mainInit = _ => {
9025
9043
  };
9026
9044
 
9027
9045
  document.onkeyup = evt => {
9028
- const setCode = transCode(evt.code);
9046
+ const setCode = evt.code;
9029
9047
  g_inputKeyBuffer[setCode] = false;
9030
9048
  mainKeyUpActFunc[g_stateObj.autoAll]();
9031
9049
  };
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2023/05/03 (v31.7.0)
8
+ * Revised : 2023/05/07 (v32.0.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -112,6 +112,7 @@ const g_limitObj = {
112
112
  titleSiz: 32,
113
113
  mainSiz: 14,
114
114
  musicTitleSiz: 13,
115
+ keySetSiz: 16,
115
116
  };
116
117
 
117
118
  /** 設定項目の位置 */
@@ -638,8 +639,11 @@ const g_escapeStr = {
638
639
  [`space`, `frzSpace`], [`iyo`, `frzIyo`], [`gor`, `frzGor`], [`oni`, `foni`],
639
640
  ],
640
641
  keyCtrlName: [
641
- [`Left`, ``], [`Digit`, `D`], [`Numpad`, `N`], [`Semicolon`, `;`],
642
+ [`ShiftLeft`, `Shift`], [`ControlLeft`, `Control`], [`AltLeft`, `Alt`],
643
+ [`Digit`, `D`], [`Numpad`, `N`], [`Semicolon`, `;`],
642
644
  [`Multiply`, `*`], [`Add`, `+`], [`Subtract`, `-`], [`Decimal`, `.`], [`Divide`, `Div`],
645
+ [`Quote`, `Ja-Colon`], [`BracketLeft`, `Ja-@`], [`BracketRight`, `Ja-[`],
646
+ [`Backslash`, `Ja-]`], [`Equal`, `Ja-^`],
643
647
  ],
644
648
  };
645
649
 
@@ -1056,7 +1060,7 @@ let g_prevKey = -1;
1056
1060
  // キーコード
1057
1061
  const g_kCd = [];
1058
1062
  const g_kCdN = [];
1059
- for (let j = 0; j < 255; j++) {
1063
+ for (let j = 0; j < 260; j++) {
1060
1064
  g_kCd[j] = ``;
1061
1065
  g_kCdN[j] = ``;
1062
1066
  }
@@ -1068,9 +1072,9 @@ g_kCd[8] = (g_isMac ? `Delete` : `BackSpace`);
1068
1072
  g_kCd[9] = `Tab`;
1069
1073
  g_kCd[12] = `Clear`;
1070
1074
  g_kCd[13] = `Enter`;
1071
- g_kCd[16] = `Shift`;
1072
- g_kCd[17] = `Ctrl`;
1073
- g_kCd[18] = `Alt`;
1075
+ g_kCd[16] = `L)Shift`;
1076
+ g_kCd[17] = `L)Ctrl`;
1077
+ g_kCd[18] = `L)Alt`;
1074
1078
  g_kCd[19] = `Pause`;
1075
1079
  g_kCd[27] = `Esc`;
1076
1080
  g_kCd[28] = `Conv`;
@@ -1174,6 +1178,9 @@ g_kCd[222] = `^ ~`;
1174
1178
  g_kCd[226] = `\\ _`;
1175
1179
  g_kCd[229] = `IME`;
1176
1180
  g_kCd[240] = `CapsLk`;
1181
+ g_kCd[256] = `R)Shift`;
1182
+ g_kCd[257] = `R)Ctrl`;
1183
+ g_kCd[258] = `R)Alt`;
1177
1184
 
1178
1185
  // 従来のキーコードとの変換用
1179
1186
  g_kCdN[0] = `- - -`; // 無効値
@@ -1288,10 +1295,16 @@ g_kCdN[222] = `Equal`;
1288
1295
  g_kCdN[226] = `IntlRo`;
1289
1296
  g_kCdN[229] = `Backquote`;
1290
1297
  g_kCdN[240] = `CapsLock`;
1298
+ g_kCdN[256] = `ShiftRight`;
1299
+ g_kCdN[257] = `ControlRight`;
1300
+ g_kCdN[258] = `AltRight`;
1301
+ g_kCdN[259] = `MetaRight`;
1291
1302
 
1292
1303
  const g_kCdNameObj = {
1293
- shiftKey: `ShiftLeft`,
1294
- metaKey: `MetaLeft`,
1304
+ shiftLKey: `ShiftLeft`,
1305
+ shiftRKey: `ShiftRight`,
1306
+ metaLKey: `MetaLeft`,
1307
+ metaRKey: `MetaRight`,
1295
1308
  };
1296
1309
 
1297
1310
  // 画面別ショートカット
@@ -1306,47 +1319,79 @@ const g_shortcutObj = {
1306
1319
  },
1307
1320
  option: {
1308
1321
  ShiftLeft_KeyD: { id: `lnkDifficultyL` },
1322
+ ShiftRight_KeyD: { id: `lnkDifficultyL` },
1309
1323
  KeyD: { id: `lnkDifficultyR` },
1324
+
1310
1325
  ShiftLeft_ArrowRight: { id: `lnkSpeedR` },
1326
+ ShiftRight_ArrowRight: { id: `lnkSpeedR` },
1311
1327
  AltLeft_ArrowRight: { id: `lnkSpeedHR` },
1328
+ AltRight_ArrowRight: { id: `lnkSpeedHR` },
1312
1329
  ArrowRight: { id: `lnkSpeedRR` },
1313
1330
  ShiftLeft_ArrowLeft: { id: `lnkSpeedL` },
1331
+ ShiftRight_ArrowLeft: { id: `lnkSpeedL` },
1314
1332
  AltLeft_ArrowLeft: { id: `lnkSpeedHL` },
1333
+ AltRight_ArrowLeft: { id: `lnkSpeedHL` },
1315
1334
  ArrowLeft: { id: `lnkSpeedLL` },
1335
+
1316
1336
  KeyL: { id: `lnkDifficulty` },
1317
1337
 
1318
1338
  ShiftLeft_KeyM: { id: `lnkMotionL` },
1339
+ ShiftRight_KeyM: { id: `lnkMotionL` },
1319
1340
  KeyM: { id: `lnkMotionR` },
1320
1341
  ArrowUp: { id: `lnkScrollL` },
1321
1342
  ArrowDown: { id: `lnkScrollR` },
1322
1343
  KeyR: { id: `lnkReverseR`, dfId: `lnkReverseR`, exId: `btnReverse` },
1323
1344
 
1324
1345
  ShiftLeft_KeyS: { id: `lnkShuffleL` },
1346
+ ShiftRight_KeyS: { id: `lnkShuffleL` },
1325
1347
  KeyS: { id: `lnkShuffleR` },
1326
1348
  ShiftLeft_KeyA: { id: `lnkAutoPlayL` },
1349
+ ShiftRight_KeyA: { id: `lnkAutoPlayL` },
1327
1350
  KeyA: { id: `lnkAutoPlayR` },
1328
1351
  ShiftLeft_KeyG: { id: `lnkGaugeL` },
1352
+ ShiftRight_KeyG: { id: `lnkGaugeL` },
1329
1353
  KeyG: { id: `lnkGaugeR` },
1330
1354
 
1331
1355
  AltLeft_ShiftLeft_Semicolon: { id: `lnkAdjustmentHR` },
1356
+ AltLeft_ShiftRight_Semicolon: { id: `lnkAdjustmentHR` },
1357
+ AltRight_ShiftLeft_Semicolon: { id: `lnkAdjustmentHR` },
1358
+ AltRight_ShiftRight_Semicolon: { id: `lnkAdjustmentHR` },
1332
1359
  ShiftLeft_Semicolon: { id: `lnkAdjustmentR` },
1360
+ ShiftRight_Semicolon: { id: `lnkAdjustmentR` },
1333
1361
  AltLeft_Semicolon: { id: `lnkAdjustmentRRR` },
1362
+ AltRight_Semicolon: { id: `lnkAdjustmentRRR` },
1334
1363
  Semicolon: { id: `lnkAdjustmentRR` },
1335
1364
  AltLeft_ShiftLeft_Minus: { id: `lnkAdjustmentHL` },
1365
+ AltLeft_ShiftRight_Minus: { id: `lnkAdjustmentHL` },
1366
+ AltRight_ShiftLeft_Minus: { id: `lnkAdjustmentHL` },
1367
+ AltRight_ShiftRight_Minus: { id: `lnkAdjustmentHL` },
1336
1368
  ShiftLeft_Minus: { id: `lnkAdjustmentL` },
1369
+ ShiftRight_Minus: { id: `lnkAdjustmentL` },
1337
1370
  AltLeft_Minus: { id: `lnkAdjustmentLLL` },
1371
+ AltRight_Minus: { id: `lnkAdjustmentLLL` },
1338
1372
  Minus: { id: `lnkAdjustmentLL` },
1339
1373
 
1340
1374
  AltLeft_ShiftLeft_NumpadAdd: { id: `lnkAdjustmentHR` },
1375
+ AltLeft_ShiftRight_NumpadAdd: { id: `lnkAdjustmentHR` },
1376
+ AltRight_ShiftLeft_NumpadAdd: { id: `lnkAdjustmentHR` },
1377
+ AltRight_ShiftRight_NumpadAdd: { id: `lnkAdjustmentHR` },
1341
1378
  ShiftLeft_NumpadAdd: { id: `lnkAdjustmentR` },
1379
+ ShiftRight_NumpadAdd: { id: `lnkAdjustmentR` },
1342
1380
  AltLeft_NumpadAdd: { id: `lnkAdjustmentRRR` },
1381
+ AltRight_NumpadAdd: { id: `lnkAdjustmentRRR` },
1343
1382
  NumpadAdd: { id: `lnkAdjustmentRR` },
1344
1383
  AltLeft_ShiftLeft_NumpadSubtract: { id: `lnkAdjustmentHL` },
1384
+ AltLeft_ShiftRight_NumpadSubtract: { id: `lnkAdjustmentHL` },
1385
+ AltRight_ShiftLeft_NumpadSubtract: { id: `lnkAdjustmentHL` },
1386
+ AltRight_ShiftRight_NumpadSubtract: { id: `lnkAdjustmentHL` },
1345
1387
  ShiftLeft_NumpadSubtract: { id: `lnkAdjustmentL` },
1388
+ ShiftRight_NumpadSubtract: { id: `lnkAdjustmentL` },
1346
1389
  AltLeft_NumpadSubtract: { id: `lnkAdjustmentLLL` },
1390
+ ShiftRight_NumpadSubtract: { id: `lnkAdjustmentL` },
1347
1391
  NumpadSubtract: { id: `lnkAdjustmentLL` },
1348
1392
 
1349
1393
  ShiftLeft_KeyV: { id: `lnkVolumeL` },
1394
+ ShiftRight_KeyV: { id: `lnkVolumeL` },
1350
1395
  KeyV: { id: `lnkVolumeR` },
1351
1396
 
1352
1397
  KeyI: { id: `btnGraph` },
@@ -1365,10 +1410,12 @@ const g_shortcutObj = {
1365
1410
  Enter: { id: `btnPlay` },
1366
1411
  NumpadEnter: { id: `btnPlay` },
1367
1412
  ShiftLeft_Tab: { id: `btnBack` },
1413
+ ShiftRight_Tab: { id: `btnBack` },
1368
1414
  Tab: { id: `btnDisplay` },
1369
1415
  },
1370
1416
  difSelector: {
1371
1417
  ShiftLeft_KeyD: { id: `lnkDifficultyL` },
1418
+ ShiftRight_KeyD: { id: `lnkDifficultyL` },
1372
1419
  KeyD: { id: `lnkDifficultyR` },
1373
1420
  KeyR: { id: `difRandom` },
1374
1421
  KeyL: { id: `lnkDifficulty` },
@@ -1390,17 +1437,22 @@ const g_shortcutObj = {
1390
1437
  Enter: { id: `lnkDifficulty` },
1391
1438
  NumpadEnter: { id: `lnkDifficulty` },
1392
1439
  ShiftLeft_Tab: { id: `btnBack` },
1440
+ ShiftRight_Tab: { id: `btnBack` },
1393
1441
  Tab: { id: `btnDisplay` },
1394
1442
  },
1395
1443
  settingsDisplay: {
1396
1444
  ShiftLeft_KeyA: { id: `lnkAppearanceL` },
1445
+ ShiftRight_KeyA: { id: `lnkAppearanceL` },
1397
1446
  KeyA: { id: `lnkAppearanceR` },
1398
1447
  ShiftLeft_KeyO: { id: `lnkOpacityL` },
1448
+ ShiftRight_KeyO: { id: `lnkOpacityL` },
1399
1449
  KeyO: { id: `lnkOpacityR` },
1400
1450
 
1401
1451
  ShiftLeft_KeyB: { id: `lnkHitPositionR` },
1452
+ ShiftRight_KeyB: { id: `lnkHitPositionR` },
1402
1453
  KeyB: { id: `lnkHitPositionRR` },
1403
1454
  ShiftLeft_KeyT: { id: `lnkHitPositionL` },
1455
+ ShiftRight_KeyT: { id: `lnkHitPositionL` },
1404
1456
  KeyT: { id: `lnkHitPositionLL` },
1405
1457
 
1406
1458
  Digit1: { id: `lnkstepZone` },
@@ -1437,6 +1489,7 @@ const g_shortcutObj = {
1437
1489
  Enter: { id: `btnPlay` },
1438
1490
  NumpadEnter: { id: `btnPlay` },
1439
1491
  ShiftLeft_Tab: { id: `btnBack` },
1492
+ ShiftRight_Tab: { id: `btnBack` },
1440
1493
  Tab: { id: `btnSettings` },
1441
1494
  },
1442
1495
  keyConfig: {
@@ -1451,7 +1504,9 @@ const g_shortcutObj = {
1451
1504
  result: {
1452
1505
  Escape: { id: `btnBack` },
1453
1506
  ShiftLeft_Tab: { id: `btnBack` },
1507
+ ShiftRight_Tab: { id: `btnBack` },
1454
1508
  ControlLeft_KeyC: { id: `` },
1509
+ ControlRight_KeyC: { id: `` },
1455
1510
  KeyC: { id: `btnCopy`, reset: true },
1456
1511
  KeyT: { id: `btnTweet`, reset: true },
1457
1512
  KeyG: { id: `btnGitter`, reset: true },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "31.7.0",
3
+ "version": "32.0.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {