danoniplus 37.1.0 → 37.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 : 2024/06/25
7
+ * Revised : 2024/06/29
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 37.1.0`;
12
- const g_revisedDate = `2024/06/25`;
11
+ const g_version = `Ver 37.2.0`;
12
+ const g_revisedDate = `2024/06/29`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -43,6 +43,7 @@ const g_remoteFlg = g_rootPath.match(`^https://cwtickle.github.io/danoniplus/`)
43
43
  const g_randTime = Date.now();
44
44
  const g_isFile = location.href.match(/^file/);
45
45
  const g_isLocal = location.href.match(/^file/) || location.href.indexOf(`localhost`) !== -1;
46
+ const isLocalMusicFile = _scoreId => g_isFile && !listMatching(getMusicUrl(g_stateObj.scoreId), [`.js`, `.txt`], { suffix: `$` });
46
47
 
47
48
  window.onload = async () => {
48
49
  g_loadObj.main = true;
@@ -5526,7 +5527,6 @@ const createOptionWindow = _sprite => {
5526
5527
  // 縦位置: 5.5
5527
5528
  createGeneralSetting(spriteList.shuffle, `shuffle`, g_settings.scoreDetails.length > 0 ? {
5528
5529
  addRFunc: _ => makeHighScore(g_stateObj.scoreId),
5529
- addLFunc: _ => makeHighScore(g_stateObj.scoreId),
5530
5530
  } : {});
5531
5531
 
5532
5532
  // ---------------------------------------------------
@@ -5534,7 +5534,6 @@ const createOptionWindow = _sprite => {
5534
5534
  // 縦位置: 6.5
5535
5535
  createGeneralSetting(spriteList.autoPlay, `autoPlay`, g_settings.scoreDetails.length > 0 ? {
5536
5536
  addRFunc: _ => makeHighScore(g_stateObj.scoreId),
5537
- addLFunc: _ => makeHighScore(g_stateObj.scoreId),
5538
5537
  } : {});
5539
5538
 
5540
5539
  // ---------------------------------------------------
@@ -5578,9 +5577,22 @@ const createOptionWindow = _sprite => {
5578
5577
  // 縦位置: 10.5 短縮ショートカットあり
5579
5578
  createGeneralSetting(spriteList.adjustment, `adjustment`, {
5580
5579
  skipTerms: g_settings.adjustmentTerms, hiddenBtn: true, scLabel: g_lblNameObj.sc_adjustment, roundNum: 5,
5581
- unitName: g_lblNameObj.frame,
5580
+ unitName: g_lblNameObj.frame, addRFunc: _ => viewAdjustment(),
5582
5581
  });
5583
5582
 
5583
+ const viewAdjustment = _ => {
5584
+ if (g_headerObj.playbackRate !== 1) {
5585
+ const adjustmentVal = isLocalMusicFile(g_stateObj.scoreId) ?
5586
+ Math.round(g_stateObj.adjustment / g_headerObj.playbackRate) :
5587
+ (g_stateObj.adjustment / g_headerObj.playbackRate).toFixed(1);
5588
+ document.getElementById(`lnkAdjustment`).innerHTML = `${adjustmentVal}${g_lblNameObj.frame}`
5589
+ + `<span style="font-size:${g_limitObj.adjustmentViewOrgSiz}px"> (${g_stateObj.adjustment.toFixed(1)}${g_localStorage.adjustment === g_stateObj.adjustment ? '*' : ''})</span>`;
5590
+ document.getElementById(`lnkAdjustment`).style.fontSize = `${g_limitObj.adjustmentViewSiz}px`;
5591
+ document.getElementById(`lnkAdjustment`).style.lineHeight = `${g_limitObj.adjustmentLineHeight}px`;
5592
+ }
5593
+ };
5594
+ viewAdjustment();
5595
+
5584
5596
  // ---------------------------------------------------
5585
5597
  // フェードイン (Fadein)
5586
5598
  // 縦位置: 11.5 スライダーあり
@@ -5635,7 +5647,7 @@ const createOptionWindow = _sprite => {
5635
5647
  * @param {object} _options
5636
5648
  */
5637
5649
  const createGeneralSetting = (_obj, _settingName, { unitName = ``,
5638
- skipTerms = fillArray(3, 1), hiddenBtn = false, addRFunc = _ => { }, addLFunc = _ => { },
5650
+ skipTerms = fillArray(3, 1), hiddenBtn = false, addRFunc = _ => { }, addLFunc = addRFunc,
5639
5651
  settingLabel = _settingName, displayName = g_currentPage, scLabel = ``, roundNum = 0, adjY = 0 } = {}) => {
5640
5652
 
5641
5653
  const settingUpper = toCapitalize(_settingName);
@@ -5648,47 +5660,47 @@ const createGeneralSetting = (_obj, _settingName, { unitName = ``,
5648
5660
  multiAppend(_obj,
5649
5661
  makeSettingLblCssButton(linkId, `${initName}${g_localStorage[_settingName] === g_stateObj[_settingName] ? ' *' : ''}`, 0,
5650
5662
  _ => {
5651
- setSetting(skipTerms[1], _settingName, unitName, roundNum);
5652
- addRFunc();
5663
+ setSetting(skipTerms[1], _settingName, unitName, roundNum, { func: _ => addRFunc() });
5653
5664
  }, {
5654
5665
  cxtFunc: _ => {
5655
- setSetting(skipTerms[1] * (-1), _settingName, unitName, roundNum);
5656
- addLFunc();
5666
+ setSetting(skipTerms[1] * (-1), _settingName, unitName, roundNum, { func: _ => addLFunc() });
5657
5667
  }
5658
5668
  }),
5659
5669
 
5660
5670
  // 右回し・左回しボタン(外側)
5661
- makeMiniCssButton(linkId, `R`, 0, _ => {
5662
- setSetting(skipTerms[0], _settingName, unitName, roundNum);
5663
- addRFunc();
5664
- }),
5665
- makeMiniCssButton(linkId, `L`, 0, _ => {
5666
- setSetting(skipTerms[0] * (-1), _settingName, unitName, roundNum);
5667
- addLFunc();
5668
- }),
5671
+ makeMiniCssButton(linkId, `R`, 0, _ =>
5672
+ setSetting(skipTerms[0], _settingName, unitName, roundNum, { func: _ => addRFunc() })),
5673
+ makeMiniCssButton(linkId, `L`, 0, _ =>
5674
+ setSetting(skipTerms[0] * (-1), _settingName, unitName, roundNum, { func: _ => addLFunc() })),
5669
5675
  );
5670
5676
 
5671
5677
  // 右回し・左回しボタン(内側)
5672
5678
  if (skipTerms[1] > 1) {
5673
5679
  multiAppend(_obj,
5674
- makeMiniCssButton(linkId, `RR`, 0, _ => setSetting(skipTerms[1], _settingName, unitName, roundNum)),
5675
- makeMiniCssButton(linkId, `LL`, 0, _ => setSetting(skipTerms[1] * (-1), _settingName, unitName, roundNum)),
5680
+ makeMiniCssButton(linkId, `RR`, 0, _ =>
5681
+ setSetting(skipTerms[1], _settingName, unitName, roundNum, { func: _ => addRFunc() })),
5682
+ makeMiniCssButton(linkId, `LL`, 0, _ =>
5683
+ setSetting(skipTerms[1] * (-1), _settingName, unitName, roundNum, { func: _ => addLFunc() })),
5676
5684
  );
5677
5685
  }
5678
5686
 
5679
5687
  // 右回し・左回しボタン(最内側)
5680
5688
  if (skipTerms[2] > 1) {
5681
5689
  multiAppend(_obj,
5682
- makeMiniCssButton(linkId, `RRR`, 0, _ => setSetting(skipTerms[2], _settingName, unitName, roundNum), { dw: -g_limitObj.setMiniWidth / 2 }),
5683
- makeMiniCssButton(linkId, `LLL`, 0, _ => setSetting(skipTerms[2] * (-1), _settingName, unitName, roundNum), { dw: -g_limitObj.setMiniWidth / 2 }),
5690
+ makeMiniCssButton(linkId, `RRR`, 0, _ =>
5691
+ setSetting(skipTerms[2], _settingName, unitName, roundNum, { func: _ => addRFunc() })
5692
+ , { dw: -g_limitObj.setMiniWidth / 2 }),
5693
+ makeMiniCssButton(linkId, `LLL`, 0, _ =>
5694
+ setSetting(skipTerms[2] * (-1), _settingName, unitName, roundNum, { func: _ => addLFunc() })
5695
+ , { dw: -g_limitObj.setMiniWidth / 2 }),
5684
5696
  );
5685
5697
  }
5686
5698
 
5687
5699
  // 右回し・左回しボタン(不可視)
5688
5700
  if (hiddenBtn) {
5689
5701
  multiAppend(_obj,
5690
- makeMiniCssButton(linkId, `HR`, 0, _ => setSetting(1, _settingName, unitName, roundNum), { visibility: `hidden` }),
5691
- makeMiniCssButton(linkId, `HL`, 0, _ => setSetting(-1, _settingName, unitName, roundNum), { visibility: `hidden` }),
5702
+ makeMiniCssButton(linkId, `HR`, 0, _ => setSetting(1, _settingName, unitName, roundNum, { func: _ => addRFunc() }), { visibility: `hidden` }),
5703
+ makeMiniCssButton(linkId, `HL`, 0, _ => setSetting(-1, _settingName, unitName, roundNum, { func: _ => addLFunc() }), { visibility: `hidden` }),
5692
5704
  );
5693
5705
  }
5694
5706
 
@@ -5731,7 +5743,7 @@ const getStgDetailName = _name => {
5731
5743
  * @param {string} _unitName
5732
5744
  * @param {number} _roundNum
5733
5745
  */
5734
- const setSetting = (_scrollNum, _settingName, _unitName = ``, _roundNum = 0) => {
5746
+ const setSetting = (_scrollNum, _settingName, _unitName = ``, _roundNum = 0, { func = _ => true } = {}) => {
5735
5747
  let settingNum = g_settings[`${_settingName}Num`];
5736
5748
  const settingList = g_settings[`${_settingName}s`];
5737
5749
  const settingMax = settingList.length - 1;
@@ -5752,6 +5764,7 @@ const setSetting = (_scrollNum, _settingName, _unitName = ``, _roundNum = 0) =>
5752
5764
  g_settings[`${_settingName}Num`] = settingNum;
5753
5765
  document.getElementById(`lnk${toCapitalize(_settingName)}`).textContent =
5754
5766
  `${getStgDetailName(g_stateObj[_settingName])}${_unitName}${g_localStorage[_settingName] === g_stateObj[_settingName] ? ' *' : ''}`;
5767
+ func();
5755
5768
  };
5756
5769
 
5757
5770
  /**
@@ -6251,7 +6264,6 @@ const createSettingsDisplayWindow = _sprite => {
6251
6264
  // 縦位置: 7.4
6252
6265
  createGeneralSetting(spriteList.appearance, `appearance`, {
6253
6266
  addRFunc: _ => dispAppearanceSlider(),
6254
- addLFunc: _ => dispAppearanceSlider(),
6255
6267
  });
6256
6268
 
6257
6269
  // Hidden+/Sudden+初期値用スライダー、ロックボタン
@@ -7751,10 +7763,11 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
7751
7763
  obj.dummyArrowData = [];
7752
7764
  obj.dummyFrzData = [];
7753
7765
 
7754
- // realAdjustment: 全体, intAdjustment: 整数値のみ(切り捨て), decimalAdjustment: 小数値のみ
7766
+ // realAdjustment: 全体, intAdjustment: 整数値のみ(切り捨て、ファイル時のみ四捨五入), decimalAdjustment: 小数値のみ
7755
7767
  const headerAdjustment = parseFloat(g_headerObj.adjustment[g_stateObj.scoreId] || g_headerObj.adjustment[0]);
7756
- g_stateObj.realAdjustment = parseFloat(g_stateObj.adjustment) + headerAdjustment + _preblankFrame;
7757
- g_stateObj.intAdjustment = Math.floor(g_stateObj.realAdjustment);
7768
+ g_stateObj.realAdjustment = (parseFloat(g_stateObj.adjustment) + headerAdjustment) / g_headerObj.playbackRate + _preblankFrame;
7769
+ g_stateObj.intAdjustment = isLocalMusicFile(g_stateObj.scoreId) ?
7770
+ Math.round(g_stateObj.realAdjustment) : Math.floor(g_stateObj.realAdjustment);
7758
7771
  g_stateObj.decimalAdjustment = g_stateObj.realAdjustment - g_stateObj.intAdjustment;
7759
7772
 
7760
7773
  const blankFrame = g_headerObj.blankFrame;
@@ -9404,7 +9417,8 @@ const mainInit = _ => {
9404
9417
  }
9405
9418
 
9406
9419
  // 曲名・アーティスト名、譜面名表示
9407
- const musicTitle = g_headerObj.musicTitles[g_headerObj.musicNos[g_stateObj.scoreId]] || g_headerObj.musicTitle;
9420
+ const playbackView = (g_headerObj.playbackRate === 1 ? `` : ` [Rate:${g_headerObj.playbackRate}]`);
9421
+ const musicTitle = (g_headerObj.musicTitles[g_headerObj.musicNos[g_stateObj.scoreId]] || g_headerObj.musicTitle) + playbackView;
9408
9422
  const artistName = g_headerObj.artistNames[g_headerObj.musicNos[g_stateObj.scoreId]] || g_headerObj.artistName;
9409
9423
  const assistFlg = (g_autoPlaysBase.includes(g_stateObj.autoPlay) ? `` : `-${getStgDetailName(g_stateObj.autoPlay)}${getStgDetailName('less')}`);
9410
9424
  const shuffleName = (g_stateObj.shuffle !== C_FLG_OFF ? `: ${getStgDetailName(g_stateObj.shuffle)}` : ``);
@@ -11069,7 +11083,7 @@ const resultInit = _ => {
11069
11083
  return result;
11070
11084
  };
11071
11085
  const bayesExVal = 6 * bayesFunc(0, diffLength) / (diffLength * (diffLength + 1) * (diffLength + 2));
11072
- const estimatedAdj = (diffLength <= 20 ? `` : Math.round((g_stateObj.adjustment - bayesExVal) * 10) / 10);
11086
+ const estimatedAdj = (diffLength <= 20 ? `` : Math.round((g_stateObj.adjustment / g_headerObj.playbackRate - bayesExVal) * 10) / 10);
11073
11087
 
11074
11088
  // 背景スプライトを作成
11075
11089
  createMultipleSprite(`backResultSprite`, g_headerObj.backResultMaxDepth);
@@ -11114,12 +11128,13 @@ const resultInit = _ => {
11114
11128
  }
11115
11129
 
11116
11130
  // 曲名・オプション描画
11117
- const musicTitle = g_headerObj.musicTitles[g_headerObj.musicNos[g_stateObj.scoreId]] || g_headerObj.musicTitle;
11131
+ const playbackView = (g_headerObj.playbackRate === 1 ? `` : ` [Rate:${g_headerObj.playbackRate}]`);
11132
+ const musicTitle = (g_headerObj.musicTitles[g_headerObj.musicNos[g_stateObj.scoreId]] || g_headerObj.musicTitle) + playbackView;
11118
11133
 
11119
- const mTitleForView = [g_headerObj.musicTitleForView[0], g_headerObj.musicTitleForView[1] || ``];
11134
+ const mTitleForView = [g_headerObj.musicTitleForView[0], (g_headerObj.musicTitleForView[1] || ``) + playbackView];
11120
11135
  if (g_headerObj.musicTitlesForView[g_headerObj.musicNos[g_stateObj.scoreId]] !== undefined) {
11121
11136
  mTitleForView.forEach((mTitle, j) =>
11122
- mTitleForView[j] = g_headerObj.musicTitlesForView[g_headerObj.musicNos[g_stateObj.scoreId]][j]);
11137
+ mTitleForView[j] = g_headerObj.musicTitlesForView[g_headerObj.musicNos[g_stateObj.scoreId]][j] + (j === 1 ? playbackView : ``));
11123
11138
  }
11124
11139
 
11125
11140
  const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
@@ -11285,7 +11300,8 @@ const resultInit = _ => {
11285
11300
  maxCombo: 0, fmaxCombo: 0, score: 0,
11286
11301
  };
11287
11302
 
11288
- const highscoreCondition = (g_stateObj.autoAll === C_FLG_OFF && (g_stateObj.shuffle === C_FLG_OFF || (mirrorName !== `` && orgShuffleFlg)));
11303
+ const highscoreCondition = (g_stateObj.autoAll === C_FLG_OFF && g_headerObj.playbackRate === 1 &&
11304
+ (g_stateObj.shuffle === C_FLG_OFF || (mirrorName !== `` && orgShuffleFlg)));
11289
11305
  if (highscoreCondition) {
11290
11306
 
11291
11307
  // ハイスコア差分描画
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2024/06/25 (v37.1.0)
8
+ * Revised : 2024/06/29 (v37.2.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -30,6 +30,11 @@ const g_limitObj = {
30
30
  adjustment: 30,
31
31
  hitPosition: 50,
32
32
 
33
+ // playbackRate有効時のAdjustmentの設定値の文字サイズ、行幅
34
+ adjustmentViewSiz: 14,
35
+ adjustmentViewOrgSiz: 11,
36
+ adjustmentLineHeight: 12,
37
+
33
38
  // 譜面密度グラフの分割数、上位色付け数
34
39
  densityDivision: 16,
35
40
  densityMaxVals: 3,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "37.1.0",
3
+ "version": "37.2.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {