danoniplus 28.1.1 → 28.2.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.
Files changed (2) hide show
  1. package/js/danoni_main.js +126 -92
  2. 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 : 2022/10/02
7
+ * Revised : 2022/10/04
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 28.1.1`;
12
- const g_revisedDate = `2022/10/02`;
11
+ const g_version = `Ver 28.2.0`;
12
+ const g_revisedDate = `2022/10/04`;
13
13
  const g_alphaVersion = ``;
14
14
 
15
15
  // カスタム用バージョン (danoni_custom.js 等で指定可)
@@ -1811,6 +1811,12 @@ const initialControl = async () => {
1811
1811
  makeDedupliArray(g_rootObj.keyExtraList.split(`,`), g_headerObj.undefinedKeyLists) : g_headerObj.undefinedKeyLists),
1812
1812
  });
1813
1813
 
1814
+ // デフォルトのカラー・シャッフルグループ設定を退避
1815
+ [`color`, `shuffle`].forEach(type => {
1816
+ const tmpName = Object.keys(g_keyObj).filter(val => val.startsWith(type));
1817
+ tmpName.forEach(property => g_dfKeyObj[property] = structuredClone(g_keyObj[property]));
1818
+ });
1819
+
1814
1820
  // 自動横幅拡張設定
1815
1821
  if (g_headerObj.autoSpread) {
1816
1822
  const widthList = [g_sWidth, g_presetObj.autoMinWidth ?? g_keyObj.minWidth];
@@ -2402,11 +2408,6 @@ const preheaderConvert = _dosObj => {
2402
2408
  // 背景・マスクモーションのパス指定方法を他の設定に合わせる設定
2403
2409
  obj.syncBackPath = setBoolVal(_dosObj.syncBackPath ?? g_presetObj.syncBackPath);
2404
2410
 
2405
- [`color`, `shuffle`].forEach(type => {
2406
- const tmpName = Object.keys(g_keyObj).filter(val => val.startsWith(type) && val.endsWith(`_0`));
2407
- tmpName.forEach(property => g_dfKeyObj[property] = structuredClone(g_keyObj[property]));
2408
- });
2409
-
2410
2411
  return obj;
2411
2412
  };
2412
2413
 
@@ -3378,6 +3379,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3378
3379
  let tmpMinPatterns = 1;
3379
3380
  const keyheader = _name + _key;
3380
3381
  const dfPtn = setIntVal(g_keyObj.dfPtnNum);
3382
+
3381
3383
  if (hasVal(_dosObj[keyheader])) {
3382
3384
  const tmpArray = splitLF2(_dosObj[keyheader]);
3383
3385
  tmpMinPatterns = tmpArray.length;
@@ -3392,6 +3394,49 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3392
3394
  }
3393
3395
  loopFunc(k, keyheader);
3394
3396
  }
3397
+
3398
+ } else if (errCd !== `` && g_keyObj[`${keyheader}_0`] === undefined) {
3399
+ makeWarningWindow(g_msgInfoObj[errCd].split(`{0}`).join(_key));
3400
+ }
3401
+ return tmpMinPatterns;
3402
+ };
3403
+
3404
+ /**
3405
+ * 新キー用複合パラメータ(特殊)
3406
+ * @param {string} _key キー数
3407
+ * @param {string} _name 名前
3408
+ * @param {object} _obj errCd エラーコード
3409
+ * @returns 最小パターン数
3410
+ */
3411
+ const newKeyTripleParam = (_key, _name, { errCd = `` } = {}) => {
3412
+ let tmpMinPatterns = 1;
3413
+ const keyheader = _name + _key;
3414
+ const dfPtn = setIntVal(g_keyObj.dfPtnNum);
3415
+
3416
+ if (hasVal(_dosObj[keyheader])) {
3417
+ const tmpArray = splitLF2(_dosObj[keyheader]);
3418
+ tmpMinPatterns = tmpArray.length;
3419
+ for (let k = 0; k < tmpMinPatterns; k++) {
3420
+ if (existParam(tmpArray[k], `${keyheader}_${k + dfPtn}`)) {
3421
+ continue;
3422
+ }
3423
+ if (g_keyObj[`${_name}${tmpArray[k]}_0`] !== undefined) {
3424
+
3425
+ // 他のキーパターン (例: |shuffle8i=8_0| ) を指定した場合、該当があれば既存パターンからコピー
3426
+ let m = 0;
3427
+ while (g_keyObj[`${_name}${tmpArray[k]}_${m}`] !== undefined) {
3428
+ g_keyObj[`${keyheader}_${k + dfPtn}_${m}`] = structuredClone(g_keyObj[`${_name}${tmpArray[k]}_${m}`]);
3429
+ m++;
3430
+ }
3431
+ } else {
3432
+
3433
+ // 通常の指定方法 (例: |shuffle8i=1,1,1,2,0,0,0,0/1,1,1,1,0,0,0,0| )の場合の取り込み
3434
+ tmpArray[k].split(`/`).forEach((list, m) =>
3435
+ g_keyObj[`${keyheader}_${k + dfPtn}_${m}`] = list.split(`,`).map(n => parseInt(n, 10)));
3436
+ }
3437
+ g_keyObj[`${keyheader}_${k + dfPtn}`] = structuredClone(g_keyObj[`${keyheader}_${k + dfPtn}_0`]);
3438
+ }
3439
+
3395
3440
  } else if (errCd !== `` && g_keyObj[`${keyheader}_0`] === undefined) {
3396
3441
  makeWarningWindow(g_msgInfoObj[errCd].split(`{0}`).join(_key));
3397
3442
  }
@@ -3450,15 +3495,6 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3450
3495
  }
3451
3496
  };
3452
3497
 
3453
- /**
3454
- * 子構成配列へのコピー
3455
- * @param {number} _k
3456
- * @param {string} _header
3457
- * @returns
3458
- */
3459
- const copyChildArray = (_k, _header) =>
3460
- g_keyObj[`${_header}_${_k + g_keyObj.dfPtnNum}_0`] = copyArray2d(g_keyObj[`${_header}_${_k + g_keyObj.dfPtnNum}`]);
3461
-
3462
3498
  // 対象キー毎に処理
3463
3499
  keyExtraList.forEach(newKey => {
3464
3500
  let tmpDivPtn = [];
@@ -3483,10 +3519,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3483
3519
  g_keyObj[`minWidth${newKey}`] = _dosObj[`minWidth${newKey}`] ?? g_keyObj[`minWidth${newKey}`] ?? g_keyObj.minWidthDefault;
3484
3520
 
3485
3521
  // 矢印色パターン (colorX_Y)
3486
- tmpMinPatterns = newKeyMultiParam(newKey, `color`, toNumber, {
3487
- errCd: `E_0101`,
3488
- loopFunc: (k, keyheader) => copyChildArray(k, keyheader),
3489
- });
3522
+ tmpMinPatterns = newKeyTripleParam(newKey, `color`, { errCd: `E_0101` });
3490
3523
 
3491
3524
  // 読込変数の接頭辞 (charaX_Y)
3492
3525
  tmpMinPatterns = newKeyMultiParam(newKey, `chara`, toString, { errCd: `E_0102` });
@@ -3560,9 +3593,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3560
3593
  newKeySingleParam(newKey, `transKey`, C_TYP_STRING);
3561
3594
 
3562
3595
  // シャッフルグループ (shuffleX_Y)
3563
- newKeyMultiParam(newKey, `shuffle`, toNumber, {
3564
- loopFunc: (k, keyheader) => copyChildArray(k, keyheader),
3565
- });
3596
+ newKeyTripleParam(newKey, `shuffle`);
3566
3597
 
3567
3598
  // スクロールパターン (scrollX_Y)
3568
3599
  // |scroll(newKey)=Cross::1,1,-1,-1,-1,1,1/Split::1,1,1,-1,-1,-1,-1$...|
@@ -4981,21 +5012,13 @@ const createOptionWindow = _sprite => {
4981
5012
 
4982
5013
  // カラーグループ、シャッフルグループの設定
4983
5014
  [`color`, `shuffle`].forEach(type => {
4984
- let k = 1;
4985
- g_keycons[`${type}Groups`] = [0];
4986
- while (g_keyObj[`${type}${keyCtrlPtn}_${k}`] !== undefined) {
4987
- g_keycons[`${type}Groups`].push(k);
4988
- k++;
4989
- }
4990
-
5015
+ resetGroupList(type, keyCtrlPtn);
4991
5016
  if (g_keyObj.currentPtn === -1) {
4992
5017
  if (storageObj[`${type}${g_keyObj.currentKey}_-1_-1`] !== undefined) {
4993
- resetGroupList(type);
4994
5018
  g_keyObj[`${type}${g_keyObj.currentKey}_-1`] = structuredClone(storageObj[`${type}${g_keyObj.currentKey}_-1_-1`]);
4995
5019
  }
4996
5020
  g_keyObj[`${type}${g_keyObj.currentKey}_-1_-1`] = structuredClone(g_keyObj[`${type}${g_keyObj.currentKey}_-1`]);
4997
5021
  } else {
4998
- resetGroupList(type);
4999
5022
  g_keyObj[`${type}${keyCtrlPtn}`] = structuredClone(g_keyObj[`${type}${keyCtrlPtn}_0`]);
5000
5023
  }
5001
5024
  });
@@ -5285,14 +5308,12 @@ const getKeyCtrl = (_localStorage, _extraKeyName = ``) => {
5285
5308
  });
5286
5309
 
5287
5310
  [`color`, `shuffle`].forEach(type => {
5288
- if (isUpdate) {
5289
- let maxPtn = 0;
5290
- while (g_keyObj[`${type}${basePtn}_${maxPtn}`] !== undefined) {
5291
- maxPtn++;
5292
- }
5293
- for (let j = 0; j < maxPtn; j++) {
5294
- g_keyObj[`${type}${copyPtn}_${j}`] = copyArray2d(g_keyObj[`${type}${basePtn}_${j}`]);
5295
- }
5311
+ let maxPtn = 0;
5312
+ while (g_keyObj[`${type}${basePtn}_${maxPtn}`] !== undefined) {
5313
+ maxPtn++;
5314
+ }
5315
+ for (let j = 0; j < maxPtn; j++) {
5316
+ g_keyObj[`${type}${copyPtn}_${j}`] = copyArray2d(g_keyObj[`${type}${basePtn}_${j}`]);
5296
5317
  }
5297
5318
  });
5298
5319
  }
@@ -5355,13 +5376,17 @@ const makeMiniCssButton = (_id, _directionFlg, _heightPos, _func, { dx = 0, dy =
5355
5376
  * カラーグループ、シャッフルグループの再設定
5356
5377
  * @param {string} _type
5357
5378
  */
5358
- const resetGroupList = (_type) => {
5379
+ const resetGroupList = (_type, _keyCtrlPtn) => {
5380
+ let k = 1;
5381
+ g_keycons[`${_type}Groups`] = [0];
5382
+
5359
5383
  if (g_keyObj.currentPtn === -1) {
5360
- g_keycons[`${_type}GroupNum`] = -1;
5361
5384
  g_keycons[`${_type}Groups`] = addValtoArray(g_keycons[`${_type}Groups`], -1);
5362
- } else {
5363
- g_keycons[`${_type}GroupNum`] = 0;
5364
- g_keycons[`${_type}Groups`] = g_keycons[`${_type}Groups`].filter(val => val !== -1);
5385
+ }
5386
+ g_keycons[`${_type}GroupNum`] = (g_keyObj.currentPtn === -1 ? -1 : 0);
5387
+ while (g_keyObj[`${_type}${_keyCtrlPtn}_${k}`] !== undefined) {
5388
+ g_keycons[`${_type}Groups`].push(k);
5389
+ k++;
5365
5390
  }
5366
5391
  };
5367
5392
 
@@ -5608,9 +5633,6 @@ const keyConfigInit = (_kcType = g_kcType) => {
5608
5633
  const maxLeftPos = Math.max(divideCnt, posMax - divideCnt - 2) / 2;
5609
5634
  const maxLeftX = Math.min(0, (kWidth - C_ARW_WIDTH) / 2 - maxLeftPos * g_keyObj.blank);
5610
5635
 
5611
- // カラーグループ、シャッフルグループの再設定
5612
- [`color`, `shuffle`].forEach(type => resetGroupList(type));
5613
-
5614
5636
  /**
5615
5637
  * keyconSpriteのスクロール位置調整
5616
5638
  * @param {number} _targetX
@@ -5806,9 +5828,8 @@ const keyConfigInit = (_kcType = g_kcType) => {
5806
5828
  }
5807
5829
  };
5808
5830
  const setGroup = (_type, _scrollNum = 1) => {
5809
- const groupNum = g_keycons[`${_type}GroupNum`];
5810
- g_keycons[`${_type}GroupNum`] = g_keycons[`${_type}Groups`][getNextNum(_scrollNum, `${_type}Groups`, groupNum)];
5811
- g_keyObj[`${_type}${keyCtrlPtn}`] = structuredClone(g_keyObj[`${_type}${keyCtrlPtn}_${groupNum}`]);
5831
+ g_keycons[`${_type}GroupNum`] = g_keycons[`${_type}Groups`][getNextNum(_scrollNum, `${_type}Groups`, g_keycons[`${_type}GroupNum`])];
5832
+ g_keyObj[`${_type}${keyCtrlPtn}`] = structuredClone(g_keyObj[`${_type}${keyCtrlPtn}_${g_keycons[`${_type}GroupNum`]}`]);
5812
5833
  viewGroup(_type);
5813
5834
  };
5814
5835
 
@@ -5862,10 +5883,9 @@ const keyConfigInit = (_kcType = g_kcType) => {
5862
5883
  const makeGroupButton = (_type, { baseX = g_sWidth * 5 / 6 - 20, cssName } = {}) => {
5863
5884
  if (g_headerObj[`${_type}Use`] && g_keycons[`${_type}Groups`].length > 1) {
5864
5885
  const typeName = toCapitalize(_type);
5865
- const num = g_keycons[`${_type}GroupNum`] === -1 ? g_keycons.groupSelf : g_keycons[`${_type}GroupNum`] + 1;
5866
5886
  multiAppend(divRoot,
5867
5887
  makeKCButtonHeader(`lbl${_type}Group`, `${typeName}Group`, { x: baseX - 10, y: 37 }, cssName),
5868
- makeKCButton(`lnk${typeName}Group`, `${num}`, _ => setGroup(_type), {
5888
+ makeKCButton(`lnk${typeName}Group`, ``, _ => setGroup(_type), {
5869
5889
  x: baseX, y: 50, w: g_sWidth / 18, title: g_msgObj[`${_type}Group`], cxtFunc: _ => setGroup(_type, -1),
5870
5890
  }),
5871
5891
  makeMiniKCButton(`lnk${typeName}Group`, `L`, _ => setGroup(_type, -1), { x: baseX - 10, y: 50 }),
@@ -6096,16 +6116,53 @@ const keyConfigInit = (_kcType = g_kcType) => {
6096
6116
  const lblTransKey = hasVal(g_keyObj[`transKey${keyCtrlPtn}`]) ?
6097
6117
  `(${g_keyObj[`transKey${keyCtrlPtn}`] ?? ''})` : ``;
6098
6118
 
6099
- // パターン検索
6100
- const searchPattern = (_tempPtn, _sign, _transKeyUse = false, _keyCheck = `keyCtrl`) => {
6101
- while (hasVal(g_keyObj[`${_keyCheck}${g_keyObj.currentKey}_${_tempPtn}`]) &&
6102
- _transKeyUse === false) {
6103
- _tempPtn += _sign;
6104
- if (g_keyObj[`keyCtrl${g_keyObj.currentKey}_${_tempPtn}`] === undefined) {
6105
- break;
6119
+ /**
6120
+ * キーパターン検索
6121
+ * @param {number} _tempPtn
6122
+ * @param {number} _sign
6123
+ * @param {boolean} _transKeyUse
6124
+ * @returns
6125
+ */
6126
+ const searchPattern = (_tempPtn, _sign, _transKeyUse = false) => {
6127
+ let nextPtn = _tempPtn + _sign;
6128
+
6129
+ const searchStart = _ => {
6130
+ nextPtn = 0;
6131
+ while (hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_${nextPtn}`])) {
6132
+ nextPtn -= _sign;
6106
6133
  }
6134
+ nextPtn += _sign;
6135
+ };
6136
+
6137
+ if (hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_${nextPtn}`])) {
6138
+ } else {
6139
+ searchStart();
6107
6140
  }
6108
- return _tempPtn;
6141
+ if (!_transKeyUse) {
6142
+ while (hasVal(g_keyObj[`transKey${g_keyObj.currentKey}_${nextPtn}`])) {
6143
+ nextPtn += _sign;
6144
+ }
6145
+ if (!hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_${nextPtn}`])) {
6146
+ searchStart();
6147
+ }
6148
+ }
6149
+ return nextPtn;
6150
+ };
6151
+
6152
+ /**
6153
+ * キーパターン変更時処理
6154
+ * @param {number} _sign
6155
+ */
6156
+ const changePattern = (_sign = 1) => {
6157
+
6158
+ // キーパターンの変更
6159
+ g_keyObj.currentPtn = searchPattern(g_keyObj.currentPtn, _sign, g_headerObj.transKeyUse);
6160
+
6161
+ // カラーグループ、シャッフルグループの再設定
6162
+ [`color`, `shuffle`].forEach(type => resetGroupList(type, `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`));
6163
+
6164
+ // キーコンフィグ画面を再呼び出し
6165
+ keyConfigInit();
6109
6166
  };
6110
6167
 
6111
6168
  // ユーザカスタムイベント(初期)
@@ -6128,24 +6185,12 @@ const keyConfigInit = (_kcType = g_kcType) => {
6128
6185
 
6129
6186
  // パターン変更ボタン描画(右回り)
6130
6187
  createCss2Button(`btnPtnChangeR`, `>>`, _ => true, Object.assign(g_lblPosObj.btnPtnChangeR, {
6131
- resetFunc: _ => {
6132
- const tempPtn = searchPattern(g_keyObj.currentPtn + 1, 1, g_headerObj.transKeyUse, `transKey`);
6133
- g_keyObj.currentPtn = (g_keyObj[`keyCtrl${g_keyObj.currentKey}_${tempPtn}`] !== undefined ?
6134
- tempPtn : (g_keyObj[`keyCtrl${g_keyObj.currentKey}_-1`] !== undefined ? -1 : 0));
6135
-
6136
- keyConfigInit();
6137
- },
6188
+ resetFunc: _ => changePattern(),
6138
6189
  }), g_cssObj.button_Setting),
6139
6190
 
6140
6191
  // パターン変更ボタン描画(左回り)
6141
6192
  createCss2Button(`btnPtnChangeL`, `<<`, _ => true, Object.assign(g_lblPosObj.btnPtnChangeL, {
6142
- resetFunc: _ => {
6143
- const tempPtn = searchPattern(g_keyObj.currentPtn - 1, -1, g_headerObj.transKeyUse, `transKey`);
6144
- g_keyObj.currentPtn = (g_keyObj[`keyCtrl${g_keyObj.currentKey}_${tempPtn}`] !== undefined ?
6145
- tempPtn : searchPattern(searchPattern(0, 1) - 1, -1, g_headerObj.transKeyUse, `transKey`));
6146
-
6147
- keyConfigInit();
6148
- },
6193
+ resetFunc: _ => changePattern(-1),
6149
6194
  }), g_cssObj.button_Setting),
6150
6195
 
6151
6196
  // キーコンフィグリセットボタン描画
@@ -7944,7 +7989,8 @@ const getArrowSettings = _ => {
7944
7989
 
7945
7990
  [`color`, `shuffle`].forEach(type => {
7946
7991
  const groupNum = g_keycons[`${type}GroupNum`];
7947
- storageObj[`${type}${g_keyObj.currentKey}_-1_-1`] = structuredClone(g_keyObj[`${type}${keyCtrlPtn}_${groupNum}`]); g_keyObj[`${type}${g_keyObj.currentKey}_-1_${groupNum}`] = structuredClone(g_dfKeyObj[`${type}${keyCtrlPtn}_${groupNum}`]);
7992
+ storageObj[`${type}${g_keyObj.currentKey}_-1_-1`] = structuredClone(g_keyObj[`${type}${keyCtrlPtn}_${groupNum}`]);
7993
+ g_keyObj[`${type}${g_keyObj.currentKey}_-1_${groupNum}`] = structuredClone(g_dfKeyObj[`${type}${keyCtrlPtn}_${groupNum}`]);
7948
7994
  g_keyObj[`${type}${keyCtrlPtn}_${groupNum}`] = structuredClone(g_dfKeyObj[`${type}${keyCtrlPtn}_${groupNum}`]);
7949
7995
  });
7950
7996
 
@@ -8233,7 +8279,7 @@ const mainInit = _ => {
8233
8279
  const musicTitle = g_headerObj.musicTitles[g_headerObj.musicNos[g_stateObj.scoreId]] || g_headerObj.musicTitle;
8234
8280
  const artistName = g_headerObj.artistNames[g_headerObj.musicNos[g_stateObj.scoreId]] || g_headerObj.artistName;
8235
8281
  const assistFlg = (g_autoPlaysBase.includes(g_stateObj.autoPlay) ? `` : `-${getStgDetailName(g_stateObj.autoPlay)}${getStgDetailName('less')}`);
8236
- const shuffleName = (g_stateObj.shuffle !== C_FLG_OFF ? `: ${getShuffleName()}` : ``);
8282
+ const shuffleName = (g_stateObj.shuffle !== C_FLG_OFF ? `: ${getStgDetailName(g_stateObj.shuffle)}` : ``);
8237
8283
 
8238
8284
  // 曲名・アーティスト名、譜面名のサイズ調整
8239
8285
  const checkMusicSiz = (_text, _siz) => getFontSize(_text, g_headerObj.playingWidth - g_headerObj.customViewWidth - 125, getBasicFont(), _siz);
@@ -9821,7 +9867,7 @@ const resultInit = _ => {
9821
9867
  `${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyData} ${getStgDetailName('key')} / ${g_headerObj.difLabels[g_stateObj.scoreId]}`,
9822
9868
  `${withOptions(g_autoPlaysBase.includes(g_stateObj.autoPlay), true, `-${getStgDetailName(g_stateObj.autoPlay)}${getStgDetailName('less')}`)}`,
9823
9869
  `${withOptions(g_headerObj.makerView, false, `(${g_headerObj.creatorNames[g_stateObj.scoreId]})`)}`,
9824
- `${withOptions(g_stateObj.shuffle, C_FLG_OFF, `[${getShuffleName()}]`)}`
9870
+ `${withOptions(g_stateObj.shuffle, C_FLG_OFF, `[${getStgDetailName(g_stateObj.shuffle)}]`)}`
9825
9871
  ].filter(value => value !== ``).join(` `);
9826
9872
 
9827
9873
  let playStyleData = [
@@ -10028,7 +10074,7 @@ const resultInit = _ => {
10028
10074
  const hashTag = (hasVal(g_headerObj.hashTag) ? ` ${g_headerObj.hashTag}` : ``);
10029
10075
  let tweetDifData = `${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyData}${getStgDetailName('k-')}${g_headerObj.difLabels[g_stateObj.scoreId]}${assistFlg}`;
10030
10076
  if (g_stateObj.shuffle !== `OFF`) {
10031
- tweetDifData += `:${getShuffleName()}`;
10077
+ tweetDifData += `:${getStgDetailName(g_stateObj.shuffle)}`;
10032
10078
  }
10033
10079
  const twiturl = new URL(g_localStorageUrl);
10034
10080
  twiturl.searchParams.append(`scoreId`, g_stateObj.scoreId);
@@ -10156,18 +10202,6 @@ const resultInit = _ => {
10156
10202
  g_skinJsObj.result.forEach(func => func());
10157
10203
  };
10158
10204
 
10159
- /**
10160
- * シャッフル名称の取得
10161
- * @returns
10162
- */
10163
- const getShuffleName = _ => {
10164
- let shuffleName = getStgDetailName(g_stateObj.shuffle);
10165
- if (!g_stateObj.shuffle.endsWith(`+`)) {
10166
- shuffleName += setScoreIdHeader(g_keycons.shuffleGroupNum);
10167
- }
10168
- return shuffleName;
10169
- };
10170
-
10171
10205
  /**
10172
10206
  * 結果表示作成(曲名、オプション)
10173
10207
  * @param {string} _id
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "28.1.1",
3
+ "version": "28.2.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {