danoniplus 46.0.1 → 46.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.
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 : 2026/03/14
7
+ * Revised : 2026/03/19
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 46.0.1`;
12
- const g_revisedDate = `2026/03/14`;
11
+ const g_version = `Ver 46.2.0`;
12
+ const g_revisedDate = `2026/03/19`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -4682,6 +4682,24 @@ const getKeyName = _key => unEscapeHtml(escapeHtml(g_keyObj[`keyName${_key}`]?.[
4682
4682
  */
4683
4683
  const getKeyUnitName = _key => unEscapeHtml(escapeHtml(g_keyObj[`keyName${_key}`]?.[1] ?? `key`));
4684
4684
 
4685
+ /**
4686
+ * シャッフル名の取得
4687
+ * @returns {string}
4688
+ */
4689
+ const getShuffleName = () => {
4690
+ const orgShuffleFlg = getOrgShuffleFlg();
4691
+ return `${getStgDetailName(g_stateObj.shuffle)}${!orgShuffleFlg && !g_stateObj.shuffle.endsWith(`+`) ? getStgDetailName('(S)') : ''}`;
4692
+ };
4693
+
4694
+ /**
4695
+ * シャッフルカスタムフラグの取得
4696
+ * @returns {boolean}
4697
+ */
4698
+ const getOrgShuffleFlg = () => {
4699
+ const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
4700
+ return g_keyObj[`shuffle${keyCtrlPtn}`].filter((shuffleGr, j) => shuffleGr !== g_keyObj[`shuffle${keyCtrlPtn}_0d`][j]).length === 0;
4701
+ };
4702
+
4685
4703
  /**
4686
4704
  * 別キーモード時の表示名の取得
4687
4705
  * @param {boolean} _spaceFlg
@@ -6553,10 +6571,8 @@ const visibleSettingSummary = _visible => {
6553
6571
 
6554
6572
  const updateSettingSummary = () => {
6555
6573
  if (document.getElementById(`settingSumSprite`) === null) return;
6556
- const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
6557
- const orgShuffleFlg = g_keyObj[`shuffle${keyCtrlPtn}`].filter((shuffleGr, j) => shuffleGr !== g_keyObj[`shuffle${keyCtrlPtn}_0d`][j]).length === 0;
6558
- const shuffleName = `${getStgDetailName(g_stateObj.shuffle)}${!orgShuffleFlg && !g_stateObj.shuffle.endsWith(`+`) ? getStgDetailName('(S)') : ''}`;
6559
- const settingData = getSelectedSettingList(shuffleName);
6574
+ const orgShuffleFlg = getOrgShuffleFlg();
6575
+ const settingData = getSelectedSettingList(orgShuffleFlg);
6560
6576
  const estimatedHighscoreCondition = g_stateObj.dataSaveFlg && (g_stateObj.autoPlay !== C_FLG_ALL && g_headerObj.playbackRate === 1 && g_stateObj.fadein < 10 &&
6561
6577
  (g_stateObj.shuffle === C_FLG_OFF || (g_stateObj.shuffle.endsWith(`Mirror`) && orgShuffleFlg)));
6562
6578
 
@@ -8767,11 +8783,14 @@ const exSettingInit = () => {
8767
8783
  * 拡張設定込みの標準設定
8768
8784
  * @param {any[]} _spriteList
8769
8785
  * @param {string} _name
8770
- * @param {{ defaultList?: string[], displayName?: string }} [options={}]
8786
+ * @param {{ defaultList?: string[], displayName?: string, func?: function, funcEx?: function }} [options={}]
8771
8787
  * @param {string[]} [options.defaultList=[C_FLG_OFF]] 拡張設定未使用の設定リスト
8772
8788
  * @param {string} [options.displayName='exSetting']
8789
+ * @param {function} [options.func=()=>true] 通常ボタン用追加関数
8790
+ * @param {function} [options.funcEx=()=>true] 拡張ボタン用追加関数
8773
8791
  */
8774
- const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF], displayName = `exSetting` } = {}) => {
8792
+ const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF], displayName = `exSetting`,
8793
+ func = () => true, funcEx = () => true } = {}) => {
8775
8794
  if (_spriteList?.[_name] === undefined) return;
8776
8795
 
8777
8796
  /**
@@ -8799,11 +8818,13 @@ const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF],
8799
8818
  createCss2Button(`lnk${toCapitalize(_name)}Type`, getStgDetailName(g_stateObj[`${_name}Type`]),
8800
8819
  () => {
8801
8820
  setSetting(1, `${_name}Type`, { maxSiz: g_limitObj.difSelectorSiz });
8821
+ funcEx();
8802
8822
  createExpandedScView(_name);
8803
8823
  },
8804
8824
  Object.assign({
8805
8825
  cxtFunc: () => {
8806
8826
  setSetting(-1, `${_name}Type`, { maxSiz: g_limitObj.difSelectorSiz });
8827
+ funcEx();
8807
8828
  createExpandedScView(_name);
8808
8829
  },
8809
8830
  title: g_msgObj[`${_name}Type`] ?? ``,
@@ -8830,6 +8851,7 @@ const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF],
8830
8851
  if (typeEnabled) {
8831
8852
  setExpandedBtnSiz();
8832
8853
  }
8854
+ func();
8833
8855
  },
8834
8856
  });
8835
8857
  if (typeEnabled) {
@@ -10246,7 +10268,11 @@ const applyMirror = (_keyNum, _shuffleGroup, _swapFlg = false) => {
10246
10268
  const mirStyle = structuredClone(style);
10247
10269
 
10248
10270
  if (_swapFlg) {
10249
- style.forEach((group, i) => g_settings.swapPattern.forEach(val => swapGroupNums(style, group, i, val)));
10271
+ style.forEach((group, i) => {
10272
+ g_settings.swapPattern.forEach(val => {
10273
+ swapGroupNums(style, group, i, val);
10274
+ });
10275
+ });
10250
10276
  let swapUseFlg = false;
10251
10277
  style.forEach((_group, j) => {
10252
10278
  _group.forEach((val, k) => {
@@ -11785,6 +11811,7 @@ const getArrowSettings = () => {
11785
11811
  // 各種初期化
11786
11812
  // g_workObj.frzArrowInitRtnはフリーズアロー(初期表示)としての利用に限定
11787
11813
  g_workObj.stepX = [];
11814
+ g_workObj.stepX_df = [];
11788
11815
  g_workObj.scrollDir = [];
11789
11816
  g_workObj.scrollDirDefault = [];
11790
11817
  g_workObj.dividePos = [];
@@ -11877,7 +11904,12 @@ const getArrowSettings = () => {
11877
11904
 
11878
11905
  const posj = g_keyObj[`pos${keyCtrlPtn}`][j];
11879
11906
  const colorj = g_keyObj[`color${keyCtrlPtn}`][j];
11880
- const stdPos = posj - ((posj > divideCnt ? posMax : 0) + divideCnt) / 2;
11907
+ let stdPos = posj - ((posj > divideCnt ? posMax : 0) + divideCnt) / 2;
11908
+
11909
+ if (g_stateObj.swapping === `Mirror+`) {
11910
+ g_workObj.stepX_df[j] = g_keyObj.blank * stdPos + (g_headerObj.playingWidth - C_ARW_WIDTH) / 2;
11911
+ stdPos = -stdPos;
11912
+ }
11881
11913
 
11882
11914
  g_workObj.stepX[j] = g_keyObj.blank * stdPos + (g_headerObj.playingWidth - C_ARW_WIDTH) / 2;
11883
11915
  const baseLayer = g_keyObj[`layerGroup${keyCtrlPtn}`]?.[j] || 0;
@@ -11999,22 +12031,45 @@ const getArrowSettings = () => {
11999
12031
  g_workObj.playingX = g_headerObj.playingX + g_workObj.backX;
12000
12032
 
12001
12033
  // Swapping設定に応じたステップゾーンの入れ替え
12002
- if (g_stateObj.swapping.includes(`Mirror`)) {
12034
+ // Mirror+のみ事前にオリジナルの位置を設定済みのためスキップする
12035
+ if (g_workObj.stepX_df.length === 0) {
12036
+ g_workObj.stepX_df = structuredClone(g_workObj.stepX);
12037
+ }
12038
+ if (g_stateObj.swapping.endsWith(`Mirror`)) {
12003
12039
 
12040
+ // Swappingにおけるグループ単位での入れ替えでは、上下でステップゾーンが分かれている場合は分離してシャッフルする
12004
12041
  let _style = structuredClone(Object.values(g_workObj.shuffleGroupMap));
12042
+ const _styleTrans = _style.flatMap(arr => {
12043
+ const small = arr.filter(n => g_keyObj[`pos${keyCtrlPtn}`][n] < g_keyObj[`div${keyCtrlPtn}`]);
12044
+ const large = arr.filter(n => g_keyObj[`pos${keyCtrlPtn}`][n] >= g_keyObj[`div${keyCtrlPtn}`]);
12045
+ return [
12046
+ ...(small.length ? [small] : []),
12047
+ ...(large.length ? [large] : [])
12048
+ ];
12049
+ });
12050
+ const _styleTransDf = structuredClone(Object.values(_styleTrans));
12051
+
12005
12052
  if (g_stateObj.swapping === `Mirror`) {
12006
- _style.map(_group => _group.reverse());
12053
+ _styleTrans.map(_group => _group.reverse());
12007
12054
 
12008
12055
  } else if (g_stateObj.swapping === `X-Mirror`) {
12009
12056
  // X-Mirrorの場合、グループの内側だけ入れ替える
12010
- _style.forEach((group, i) => g_settings.swapPattern.forEach(val => swapGroupNums(_style, group, i, val)));
12057
+ _styleTrans.forEach((group, i) => {
12058
+ g_settings.swapPattern.forEach(val => {
12059
+ swapGroupNums(_styleTrans, group, i, val);
12060
+ });
12061
+ });
12062
+ }
12063
+ // オリジナルと同一の場合、設定をOFFに戻す
12064
+ if (JSON.stringify(_styleTransDf) === JSON.stringify(_styleTrans)) {
12065
+ g_stateObj.swapping = C_FLG_OFF;
12066
+ g_settings.swappingNum = 0;
12011
12067
  }
12012
12068
 
12013
12069
  // 入れ替えた結果に合わせてX座標位置を入れ替える
12014
- g_workObj.stepX_df = structuredClone(g_workObj.stepX);
12015
- _style.forEach((_group, _i) => {
12070
+ _styleTrans.forEach((_group, _i) => {
12016
12071
  _group.forEach((_val, _j) => {
12017
- g_workObj.stepX[_group[_j]] = g_workObj.stepX_df[g_workObj.shuffleGroupMap[_i][_j]];
12072
+ g_workObj.stepX[_group[_j]] = g_workObj.stepX_df[_styleTransDf[_i][_j]];
12018
12073
  });
12019
12074
  });
12020
12075
  }
@@ -12427,7 +12482,7 @@ const mainInit = () => {
12427
12482
  const musicTitle = (g_headerObj.musicTitles[g_headerObj.musicNos[g_stateObj.scoreId]] || g_headerObj.musicTitle) + playbackView;
12428
12483
  const artistName = g_headerObj.artistNames[g_headerObj.musicNos[g_stateObj.scoreId]] || g_headerObj.artistName;
12429
12484
  const assistFlg = (g_autoPlaysBase.includes(g_stateObj.autoPlay) ? `` : `-${getStgDetailName(g_stateObj.autoPlay)}${getStgDetailName('less')}`);
12430
- const shuffleName = (g_stateObj.shuffle !== C_FLG_OFF ? `: ${getStgDetailName(g_stateObj.shuffle)}` : ``);
12485
+ const shuffleName = (g_stateObj.shuffle !== C_FLG_OFF ? `: ${getShuffleName()}` : ``);
12431
12486
 
12432
12487
  // 曲名・アーティスト名、譜面名のサイズ調整
12433
12488
  const checkMusicSiz = (_text, _siz) => getFontSize2(_text, g_headerObj.playingWidth - g_headerObj.customViewWidth - 125, { maxSiz: _siz });
@@ -13656,7 +13711,8 @@ const makeStepZone = (_j, _keyCtrlPtn) => {
13656
13711
  // 本体
13657
13712
  createColorObject2(`step${_j}`, {
13658
13713
  rotate: g_workObj.stepRtn[_j], styleName: `Step`, display: g_workObj.stepZoneDisp,
13659
- }, g_cssObj.main_stepDefault),
13714
+ }, g_cssObj[`main_step${g_workObj.stepX[_j] === g_workObj.stepX_df[_j] ? 'Default'
13715
+ : g_stateObj.swapping === 'Mirror+' ? 'Shobon' : 'Matari'}`]),
13660
13716
 
13661
13717
  // 空押し
13662
13718
  createColorObject2(`stepDiv${_j}`, {
@@ -14610,11 +14666,10 @@ const resultInit = () => {
14610
14666
  mTitleForView[j] = g_headerObj.musicTitlesForView[g_headerObj.musicNos[g_stateObj.scoreId]][j] + (j === 1 ? playbackView : ``));
14611
14667
  }
14612
14668
 
14613
- const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
14614
14669
  const transKeyName = getTransKeyName();
14615
- const orgShuffleFlg = g_keyObj[`shuffle${keyCtrlPtn}`].filter((shuffleGr, j) => shuffleGr !== g_keyObj[`shuffle${keyCtrlPtn}_0d`][j]).length === 0;
14616
- const shuffleName = `${getStgDetailName(g_stateObj.shuffle)}${!orgShuffleFlg && !g_stateObj.shuffle.endsWith(`+`) ? getStgDetailName('(S)') : ''}`;
14617
- const settingData = getSelectedSettingList(shuffleName);
14670
+ const orgShuffleFlg = getOrgShuffleFlg();
14671
+ const shuffleName = getShuffleName();
14672
+ const settingData = getSelectedSettingList(orgShuffleFlg);
14618
14673
 
14619
14674
  const [lblRX, dataRX] = [20, 60];
14620
14675
  multiAppend(playDataWindow,
@@ -15297,10 +15352,10 @@ const resultInit = () => {
15297
15352
 
15298
15353
  /**
15299
15354
  * 選択した設定の情報を取得
15300
- * @param {string} _shuffleName
15355
+ * @param {boolean} _orgShuffleFlg
15301
15356
  * @returns {object}
15302
15357
  */
15303
- const getSelectedSettingList = (_shuffleName) => {
15358
+ const getSelectedSettingList = (_orgShuffleFlg) => {
15304
15359
 
15305
15360
  const transKeyName = getTransKeyName();
15306
15361
  /**
@@ -15323,7 +15378,7 @@ const getSelectedSettingList = (_shuffleName) => {
15323
15378
  `${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyName} ${keyUnitName} / ${g_headerObj.difLabels[g_stateObj.scoreId]}`,
15324
15379
  `${withOptions(g_autoPlaysBase.includes(g_stateObj.autoPlay), true, `-${getStgDetailName(g_stateObj.autoPlay)}${getStgDetailName('less')}`)}`,
15325
15380
  `${withOptions(g_headerObj.makerView, false, `(${g_headerObj.creatorNames[g_stateObj.scoreId]})`)}`,
15326
- `${withOptions(g_stateObj.shuffle, C_FLG_OFF, `[${_shuffleName}]`)}`
15381
+ `${withOptions(g_stateObj.shuffle, C_FLG_OFF, `[${getShuffleName()}]`)}`
15327
15382
  ];
15328
15383
  let difData = difDatas.filter(value => value !== ``).join(` `);
15329
15384
  const difDataForImage = difDatas.filter((value, j) => value !== `` && j !== 2).join(` `);
@@ -15349,7 +15404,8 @@ const getSelectedSettingList = (_shuffleName) => {
15349
15404
  withOptions(g_stateObj.camoufrageType, C_FLG_HYPHEN,
15350
15405
  `${g_stateObj.camoufrage !== C_FLG_OFF ? '' : 'Cmf:'}${getStgDetailName(g_stateObj.camoufrageType)}`)
15351
15406
  ].filter(value => value !== ``).join(`+`),
15352
- withOptions(g_stateObj.swapping, C_FLG_OFF, `Swap:${getStgDetailName(g_stateObj.swapping)}`),
15407
+ withOptions(g_stateObj.swapping, C_FLG_OFF,
15408
+ `Swap:${getStgDetailName(g_stateObj.swapping)}${!_orgShuffleFlg && !g_stateObj.swapping.endsWith(`+`) ? getStgDetailName(`(S)`) : ``}`),
15353
15409
  withOptions(g_stateObj.judgRange, `Normal`, `Judg:${getStgDetailName(g_stateObj.judgRange)}`),
15354
15410
  ].filter(value => value !== ``).join(`, `);
15355
15411
 
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2026/03/12 (v46.0.0)
8
+ * Revised : 2026/03/15 (v46.1.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -1367,7 +1367,7 @@ const g_settings = {
1367
1367
  camoufrageTypes: [C_FLG_HYPHEN, `FrzArrow`],
1368
1368
  camoufrageTypeNum: 0,
1369
1369
 
1370
- swappings: [C_FLG_OFF, `Mirror`, `X-Mirror`],
1370
+ swappings: [C_FLG_OFF, `Mirror`, `X-Mirror`, `Mirror+`],
1371
1371
  swappingNum: 0,
1372
1372
 
1373
1373
  judgRanges: [`Normal`, `Narrow`, `Hard`, `ExHard`],
@@ -4461,6 +4461,7 @@ const g_lblNameObj = {
4461
4461
  'u_Random+': `Random+`,
4462
4462
  'u_S-Random': `S-Random`,
4463
4463
  'u_S-Random+': `S-Random+`,
4464
+ 'u_Mirror+': `Mirror+`,
4464
4465
  'u_(S)': `(S)`,
4465
4466
 
4466
4467
  'u_ALL': `ALL`,
@@ -4749,7 +4750,7 @@ const g_lang_msgObj = {
4749
4750
  scroll: `各レーンのスクロール方向をパターンに沿って設定します。\nReverse:ONでスクロール方向を反転します。`,
4750
4751
  shuffle: `譜面を左右反転したり、ランダムにします。\nランダムにした場合は別譜面扱いとなり、ハイスコアは保存されません。`,
4751
4752
  autoPlay: `オートプレイや一部キーを自動で打たせる設定を行います。\nオートプレイ時はハイスコアを保存しません。`,
4752
- gauge: `クリア条件を設定します。\n[Start] ゲージ初期値, [Border] クリア条件(ハイフン時は0),\n[Recovery] 回復量, [Damage] ダメージ量, [Accuracy] クリアに必要な正確率(オンマウスで許容ミス数表示)`,
4753
+ gauge: `クリア条件を設定します。\n[Start] ゲージ初期値, [Border] クリア条件(ハイフン時は0),\n[Recovery] 回復量, [Damage] ダメージ量, [Accuracy] クリアに必要な正確率、許容ミス数`,
4753
4754
  excessive: `空押し判定を行うか設定します。`,
4754
4755
  adjustment: `曲とのタイミングにズレを感じる場合、\n数値を変えることでフレーム単位のズレを直すことができます。\n外側のボタンは5f刻み、真ん中は1f刻み、内側は0.5f刻みで調整できます。`,
4755
4756
  fadein: `譜面を途中から再生します。\n途中から開始した場合はハイスコアを保存しません。`,
@@ -4789,7 +4790,7 @@ const g_lang_msgObj = {
4789
4790
  effect: `矢印・フリーズアローにエフェクトをかけます。\n[Dizzy/Spin] 矢印が回転します\n[Wave/Storm] 矢印の軌道が左右に揺れます\n[Blinking] 矢印が点滅します\n[Squids] 矢印が伸び縮みします`,
4790
4791
  camoufrage: `ステップの見た目が配置は同じでランダムに変わります。`,
4791
4792
  camoufrageType: `[FrzArrow] フリーズアローの帯部分を初期表示のみ非表示にし、矢印のみで表示します(ヒット/失敗時は帯を再表示)`,
4792
- swapping: `ステップゾーンの位置をグループ単位で入れ替えます。`,
4793
+ swapping: `ステップゾーンの位置を入れ替える設定です。\n[Mirror] ステップゾーンの位置をグループ単位で入れ替えます。\n[X-Mirror] ステップゾーンの中央部分のみグループ単位で入れ替えます。\n[Mirror+] ステップゾーンの位置をグループに関係なく全体的に反転します。`,
4793
4794
  judgRange: `判定の許容範囲を設定します。\n[Normal] 通常、[Narrow/Hard] 辛判定、[ExHard] 激辛判定`,
4794
4795
  autoRetry: `自動リトライの条件を設定します。\n[Miss] ミス時、[Matari] マターリ時、[Shakin] シャキン時、[FS] Fast/Slow発生時`,
4795
4796
 
@@ -4846,7 +4847,7 @@ const g_lang_msgObj = {
4846
4847
  scroll: `Set the scroll direction for each lane according to the pattern.\nIf "Reverse:ON" sets, reverse the scroll direction.`,
4847
4848
  shuffle: `Flip the chart left and right or make it random.\nIf you make it random, it will be treated as other charts and the high score will not be saved.`,
4848
4849
  autoPlay: `Set to auto play and to hit some keys automatically.\nHigh score is not saved during auto play.`,
4849
- gauge: `Set the clear condition.\n[Start] initial value, [Border] borderline value (hyphen means zero),\n[Recovery] recovery amount, [Damage] damage amount,\n[Accuracy] accuracy required to clear (mouseover to see the number of allowed mistakes)`,
4850
+ gauge: `Set the clear condition.\n[Start] initial value, [Border] borderline value (hyphen means zero),\n[Recovery] recovery amount, [Damage] damage amount,\n[Accuracy] accuracy required to clear and the number of allowed mistakes`,
4850
4851
  excessive: `Set whether to use excessive miss judgment.`,
4851
4852
  adjustment: `If you feel that the timing is out of sync with the music, \nyou can correct the shift in frame units by changing the value.\nThe outer button can be adjusted in 5 frame increments, the middle in 1 frame increments, \nand the inner button in 0.5 frame increments.`,
4852
4853
  fadein: `Plays the chart from the middle.\nIf you start in the middle, the high score will not be saved.`,
@@ -4887,7 +4888,7 @@ const g_lang_msgObj = {
4887
4888
  effect: `Applies effects to the arrows and freeze arrows.\n[Dizzy/Spin] Arrows rotate.\n[Wave/Storm] Swing from left to right.\n[Blinking] Arrows blink.\n[Squids] Arrows stretch and shrink.`,
4888
4889
  camoufrage: `The appearance of the steps changes randomly with the same placement.`,
4889
4890
  camoufrageType: `[FrzArrow] Initially hides freeze-arrow bars and displays only the arrow portion (bars reappear on hit/failure)`,
4890
- swapping: `Replaces the position of step zones on a group-by-group basis.`,
4891
+ swapping: `This setting allows you to swap the positions of the step zones.\n[Mirror] Swaps the positions of step zones within each shuffle group. \n[X-Mirror] Swaps only the central portion of step zones within each shuffle group.\n[Mirror+] Flips the position of all step zones, regardless of shuffle groups. `,
4891
4892
  judgRange: `Set the allowable range of judgment.\n[Normal] Normal judgment, [Narrow/Hard] Hard judgment, [ExHard] Very hard judgment`,
4892
4893
  autoRetry: `Set the conditions for automatic retry.\n[Miss] When missed, [Matari] When good, [Shakin] When great, [FS] When Fast/Slow occurs`,
4893
4894
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "46.0.1",
3
+ "version": "46.2.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "./js/danoni_main.js",
6
6
  "scripts": {