danoniplus 37.0.1 → 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/20
7
+ * Revised : 2024/06/29
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 37.0.1`;
12
- const g_revisedDate = `2024/06/20`;
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;
@@ -4605,7 +4606,7 @@ const makeDifList = (_difList, _targetKey = ``) => {
4605
4606
  });
4606
4607
  if (document.getElementById(`lblDifCnt`) === null) {
4607
4608
  difCover.appendChild(createDivCss2Label(`lblDifCnt`, ``, {
4608
- x: 0, y: 22.5, w: g_limitObj.difCoverWidth, h: 16, siz: 12, fontWeight: `bold`,
4609
+ x: 0, y: 27, w: g_limitObj.difCoverWidth, h: 16, siz: 12, fontWeight: `bold`,
4609
4610
  }));
4610
4611
  }
4611
4612
  lblDifCnt.innerHTML = `${_targetKey === '' ? 'ALL' : _targetKey + 'k'}: ${curk === -1 ? '-' : curk + 1} / ${k}`;
@@ -4654,7 +4655,7 @@ const createDifWindow = (_key = ``) => {
4654
4655
 
4655
4656
  // 全リスト
4656
4657
  difCover.appendChild(
4657
- makeDifLblCssButton(`keyFilter`, `ALL`, 1.7, _ => {
4658
+ makeDifLblCssButton(`keyFilter`, `ALL`, 1.9, _ => {
4658
4659
  resetDifWindow();
4659
4660
  g_stateObj.filterKeys = ``;
4660
4661
  createDifWindow();
@@ -4739,48 +4740,56 @@ const drawSpeedGraph = _scoreId => {
4739
4740
 
4740
4741
  const canvas = document.getElementById(`graphSpeed`);
4741
4742
  const context = canvas.getContext(`2d`);
4742
- drawBaseLine(context);
4743
+ const [_a, _b] = [-75, 100];
4744
+ const [_min, _max] = [-0.2, 2.2];
4745
+ drawBaseLine(context, { _fixed: 1, _mark: `x`, _a, _b, _min, _max });
4743
4746
 
4744
4747
  const avgX = [0, 0];
4745
- const avgSubX = [1, 1];
4746
- const lineX = [125, 210];
4748
+ const avgSubX = [0, 0];
4749
+ const lineX = [0, 150], lineY = 208;
4747
4750
  Object.keys(speedObj).forEach((speedType, j) => {
4751
+ const frame = speedObj[speedType].frame;
4752
+ const speed = speedObj[speedType].speed;
4753
+
4748
4754
  context.beginPath();
4749
4755
  let preY;
4750
- let avgSubFrame = playingFrame;
4756
+ let avgSubFrame = 0;
4751
4757
 
4752
- for (let i = 0; i < speedObj[speedType].frame.length; i++) {
4753
- const x = speedObj[speedType].frame[i] * (g_limitObj.graphWidth - 30) / playingFrame + 30;
4754
- const y = (speedObj[speedType].speed[i] - 1) * -90 + 105;
4758
+ for (let i = 0; i < frame.length; i++) {
4759
+ const x = frame[i] * (g_limitObj.graphWidth - 30) / playingFrame + 30;
4760
+ const y = (Math.min(Math.max(speed[i], _min - 0.05), _max + 0.05) - 1) * _a + _b;
4755
4761
 
4756
4762
  context.lineTo(x, preY);
4757
4763
  context.lineTo(x, y);
4758
4764
  preY = y;
4759
4765
 
4760
- const deltaFrame = speedObj[speedType].frame[i] - (speedObj[speedType].frame[i - 1] ?? startFrame);
4761
- avgX[j] += deltaFrame * (speedObj[speedType].speed[i - 1] ?? 1);
4762
- if ((speedObj[speedType].speed[i - 1] ?? 1) === 1) {
4763
- avgSubFrame -= deltaFrame;
4764
- } else {
4765
- avgSubX[j] += deltaFrame * (speedObj[speedType].speed[i - 1]);
4766
+ const deltaFrame = frame[i] - (frame[i - 1] ?? startFrame);
4767
+ avgX[j] += deltaFrame * (speed[i - 1] ?? 1);
4768
+ if ((speed[i - 1] ?? 1) !== 1) {
4769
+ avgSubFrame += deltaFrame;
4770
+ avgSubX[j] += deltaFrame * (speed[i - 1]);
4766
4771
  }
4767
4772
  }
4768
4773
  avgX[j] /= playingFrame;
4769
4774
  avgSubX[j] /= Math.max(avgSubFrame, 1);
4770
4775
 
4771
- context.lineWidth = 1;
4776
+ context.lineWidth = 2;
4772
4777
  context.strokeStyle = speedObj[speedType].strokeColor;
4773
4778
  context.stroke();
4774
4779
 
4775
4780
  context.beginPath();
4776
- context.moveTo(lineX[j], 215);
4777
- context.lineTo(lineX[j] + 25, 215);
4781
+ context.moveTo(lineX[j], lineY);
4782
+ context.lineTo(lineX[j] + 25, lineY);
4778
4783
  context.stroke();
4779
- context.font = `${wUnit(g_limitObj.difSelectorSiz)} ${getBasicFont()}`;
4780
- context.fillText(g_lblNameObj[`s_${speedType}`], lineX[j] + 30, 218);
4781
-
4784
+ context.font = `${wUnit(g_limitObj.mainSiz)} ${getBasicFont()}`;
4785
+ context.fillText(g_lblNameObj[`s_${speedType}`], lineX[j] + 30, lineY + 3);
4786
+
4787
+ const maxSpeed = Math.max(...speed);
4788
+ const minSpeed = Math.min(...speed);
4789
+ context.font = `${wUnit(g_limitObj.graphMiniSiz)} ${getBasicFont()}`;
4790
+ context.fillText(`(${minSpeed.toFixed(2)}x` + (minSpeed === maxSpeed ? `` : ` -- ${Math.max(...speed).toFixed(2)}x`) + `)`, lineX[j] + 30, lineY + 16);
4791
+ context.fillText(`Avg. ` + (avgX[j] === 1 ? `----` : `${(avgSubX[j]).toFixed(2)}x`), lineX[j] + 30, lineY + 29);
4782
4792
  updateScoreDetailLabel(`Speed`, `${speedType}S`, speedObj[speedType].cnt, j, g_lblNameObj[`s_${speedType}`]);
4783
- updateScoreDetailLabel(`Speed`, `avgD${speedType}`, avgSubX[j] === 1 ? `----` : `${(avgSubX[j]).toFixed(2)}x`, j + 4, g_lblNameObj[`s_avgD${speedType}`]);
4784
4793
  });
4785
4794
  updateScoreDetailLabel(`Speed`, `avgS`, `${(avgX[0] * avgX[1]).toFixed(2)}x`, 2, g_lblNameObj.s_avg);
4786
4795
  };
@@ -4855,13 +4864,16 @@ const updateScoreDetailLabel = (_name, _label, _value, _pos = 0, _labelname = _l
4855
4864
  * @param {object} _context
4856
4865
  * @param {number} _resolution
4857
4866
  */
4858
- const drawBaseLine = (_context, _resolution = 10) => {
4867
+ const drawBaseLine = (_context, { _fixed = 2, _mark = ``, _resolution = 10, _a = -90, _b = 105, _min = 0, _max = 2 } = {}) => {
4859
4868
  _context.clearRect(0, 0, g_limitObj.graphWidth, g_limitObj.graphHeight);
4860
4869
 
4861
- for (let j = 0; j <= 2 * _resolution; j += 5) {
4862
- drawLine(_context, j / _resolution, `main`, 2);
4863
- for (let k = 1; k < 5; k++) {
4864
- drawLine(_context, (j + k) / _resolution, `sub`, 2);
4870
+ for (let j = _min * _resolution; j <= _max * _resolution; j += 5) {
4871
+ for (let k = 0; k < 5; k++) {
4872
+ if ((j + k) % 5 === 0) {
4873
+ drawLine(_context, (j + k) / _resolution, `main`, { _fixed, _mark, _a, _b });
4874
+ } else {
4875
+ drawLine(_context, (j + k) / _resolution, `sub`, { _fixed, _mark, _a, _b });
4876
+ }
4865
4877
  }
4866
4878
  }
4867
4879
  };
@@ -4873,8 +4885,8 @@ const drawBaseLine = (_context, _resolution = 10) => {
4873
4885
  * @param {string} _lineType
4874
4886
  * @param {number} _fixed
4875
4887
  */
4876
- const drawLine = (_context, _y, _lineType, _fixed = 0) => {
4877
- const lineY = (_y - 1) * -90 + 105;
4888
+ const drawLine = (_context, _y, _lineType, { _fixed, _mark, _a, _b } = {}) => {
4889
+ const lineY = (_y - 1) * _a + _b;
4878
4890
  _context.beginPath();
4879
4891
  _context.moveTo(30, lineY);
4880
4892
  _context.lineTo(g_limitObj.graphWidth, lineY);
@@ -4886,7 +4898,7 @@ const drawLine = (_context, _y, _lineType, _fixed = 0) => {
4886
4898
  _context.strokeStyle = textColor;
4887
4899
  _context.font = `${wUnit(12)} ${getBasicFont()}`;
4888
4900
  _context.fillStyle = textColor;
4889
- _context.fillText(_y.toFixed(_fixed), 0, lineY + 4);
4901
+ _context.fillText(_y.toFixed(_fixed) + _mark, 2, lineY + 4);
4890
4902
  } else {
4891
4903
  _context.strokeStyle = `#646464`;
4892
4904
  }
@@ -5515,7 +5527,6 @@ const createOptionWindow = _sprite => {
5515
5527
  // 縦位置: 5.5
5516
5528
  createGeneralSetting(spriteList.shuffle, `shuffle`, g_settings.scoreDetails.length > 0 ? {
5517
5529
  addRFunc: _ => makeHighScore(g_stateObj.scoreId),
5518
- addLFunc: _ => makeHighScore(g_stateObj.scoreId),
5519
5530
  } : {});
5520
5531
 
5521
5532
  // ---------------------------------------------------
@@ -5523,7 +5534,6 @@ const createOptionWindow = _sprite => {
5523
5534
  // 縦位置: 6.5
5524
5535
  createGeneralSetting(spriteList.autoPlay, `autoPlay`, g_settings.scoreDetails.length > 0 ? {
5525
5536
  addRFunc: _ => makeHighScore(g_stateObj.scoreId),
5526
- addLFunc: _ => makeHighScore(g_stateObj.scoreId),
5527
5537
  } : {});
5528
5538
 
5529
5539
  // ---------------------------------------------------
@@ -5567,9 +5577,22 @@ const createOptionWindow = _sprite => {
5567
5577
  // 縦位置: 10.5 短縮ショートカットあり
5568
5578
  createGeneralSetting(spriteList.adjustment, `adjustment`, {
5569
5579
  skipTerms: g_settings.adjustmentTerms, hiddenBtn: true, scLabel: g_lblNameObj.sc_adjustment, roundNum: 5,
5570
- unitName: g_lblNameObj.frame,
5580
+ unitName: g_lblNameObj.frame, addRFunc: _ => viewAdjustment(),
5571
5581
  });
5572
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
+
5573
5596
  // ---------------------------------------------------
5574
5597
  // フェードイン (Fadein)
5575
5598
  // 縦位置: 11.5 スライダーあり
@@ -5624,7 +5647,7 @@ const createOptionWindow = _sprite => {
5624
5647
  * @param {object} _options
5625
5648
  */
5626
5649
  const createGeneralSetting = (_obj, _settingName, { unitName = ``,
5627
- skipTerms = fillArray(3, 1), hiddenBtn = false, addRFunc = _ => { }, addLFunc = _ => { },
5650
+ skipTerms = fillArray(3, 1), hiddenBtn = false, addRFunc = _ => { }, addLFunc = addRFunc,
5628
5651
  settingLabel = _settingName, displayName = g_currentPage, scLabel = ``, roundNum = 0, adjY = 0 } = {}) => {
5629
5652
 
5630
5653
  const settingUpper = toCapitalize(_settingName);
@@ -5637,47 +5660,47 @@ const createGeneralSetting = (_obj, _settingName, { unitName = ``,
5637
5660
  multiAppend(_obj,
5638
5661
  makeSettingLblCssButton(linkId, `${initName}${g_localStorage[_settingName] === g_stateObj[_settingName] ? ' *' : ''}`, 0,
5639
5662
  _ => {
5640
- setSetting(skipTerms[1], _settingName, unitName, roundNum);
5641
- addRFunc();
5663
+ setSetting(skipTerms[1], _settingName, unitName, roundNum, { func: _ => addRFunc() });
5642
5664
  }, {
5643
5665
  cxtFunc: _ => {
5644
- setSetting(skipTerms[1] * (-1), _settingName, unitName, roundNum);
5645
- addLFunc();
5666
+ setSetting(skipTerms[1] * (-1), _settingName, unitName, roundNum, { func: _ => addLFunc() });
5646
5667
  }
5647
5668
  }),
5648
5669
 
5649
5670
  // 右回し・左回しボタン(外側)
5650
- makeMiniCssButton(linkId, `R`, 0, _ => {
5651
- setSetting(skipTerms[0], _settingName, unitName, roundNum);
5652
- addRFunc();
5653
- }),
5654
- makeMiniCssButton(linkId, `L`, 0, _ => {
5655
- setSetting(skipTerms[0] * (-1), _settingName, unitName, roundNum);
5656
- addLFunc();
5657
- }),
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() })),
5658
5675
  );
5659
5676
 
5660
5677
  // 右回し・左回しボタン(内側)
5661
5678
  if (skipTerms[1] > 1) {
5662
5679
  multiAppend(_obj,
5663
- makeMiniCssButton(linkId, `RR`, 0, _ => setSetting(skipTerms[1], _settingName, unitName, roundNum)),
5664
- 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() })),
5665
5684
  );
5666
5685
  }
5667
5686
 
5668
5687
  // 右回し・左回しボタン(最内側)
5669
5688
  if (skipTerms[2] > 1) {
5670
5689
  multiAppend(_obj,
5671
- makeMiniCssButton(linkId, `RRR`, 0, _ => setSetting(skipTerms[2], _settingName, unitName, roundNum), { dw: -g_limitObj.setMiniWidth / 2 }),
5672
- 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 }),
5673
5696
  );
5674
5697
  }
5675
5698
 
5676
5699
  // 右回し・左回しボタン(不可視)
5677
5700
  if (hiddenBtn) {
5678
5701
  multiAppend(_obj,
5679
- makeMiniCssButton(linkId, `HR`, 0, _ => setSetting(1, _settingName, unitName, roundNum), { visibility: `hidden` }),
5680
- 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` }),
5681
5704
  );
5682
5705
  }
5683
5706
 
@@ -5720,7 +5743,7 @@ const getStgDetailName = _name => {
5720
5743
  * @param {string} _unitName
5721
5744
  * @param {number} _roundNum
5722
5745
  */
5723
- const setSetting = (_scrollNum, _settingName, _unitName = ``, _roundNum = 0) => {
5746
+ const setSetting = (_scrollNum, _settingName, _unitName = ``, _roundNum = 0, { func = _ => true } = {}) => {
5724
5747
  let settingNum = g_settings[`${_settingName}Num`];
5725
5748
  const settingList = g_settings[`${_settingName}s`];
5726
5749
  const settingMax = settingList.length - 1;
@@ -5741,6 +5764,7 @@ const setSetting = (_scrollNum, _settingName, _unitName = ``, _roundNum = 0) =>
5741
5764
  g_settings[`${_settingName}Num`] = settingNum;
5742
5765
  document.getElementById(`lnk${toCapitalize(_settingName)}`).textContent =
5743
5766
  `${getStgDetailName(g_stateObj[_settingName])}${_unitName}${g_localStorage[_settingName] === g_stateObj[_settingName] ? ' *' : ''}`;
5767
+ func();
5744
5768
  };
5745
5769
 
5746
5770
  /**
@@ -6240,7 +6264,6 @@ const createSettingsDisplayWindow = _sprite => {
6240
6264
  // 縦位置: 7.4
6241
6265
  createGeneralSetting(spriteList.appearance, `appearance`, {
6242
6266
  addRFunc: _ => dispAppearanceSlider(),
6243
- addLFunc: _ => dispAppearanceSlider(),
6244
6267
  });
6245
6268
 
6246
6269
  // Hidden+/Sudden+初期値用スライダー、ロックボタン
@@ -7740,10 +7763,11 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
7740
7763
  obj.dummyArrowData = [];
7741
7764
  obj.dummyFrzData = [];
7742
7765
 
7743
- // realAdjustment: 全体, intAdjustment: 整数値のみ(切り捨て), decimalAdjustment: 小数値のみ
7766
+ // realAdjustment: 全体, intAdjustment: 整数値のみ(切り捨て、ファイル時のみ四捨五入), decimalAdjustment: 小数値のみ
7744
7767
  const headerAdjustment = parseFloat(g_headerObj.adjustment[g_stateObj.scoreId] || g_headerObj.adjustment[0]);
7745
- g_stateObj.realAdjustment = parseFloat(g_stateObj.adjustment) + headerAdjustment + _preblankFrame;
7746
- 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);
7747
7771
  g_stateObj.decimalAdjustment = g_stateObj.realAdjustment - g_stateObj.intAdjustment;
7748
7772
 
7749
7773
  const blankFrame = g_headerObj.blankFrame;
@@ -9393,7 +9417,8 @@ const mainInit = _ => {
9393
9417
  }
9394
9418
 
9395
9419
  // 曲名・アーティスト名、譜面名表示
9396
- 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;
9397
9422
  const artistName = g_headerObj.artistNames[g_headerObj.musicNos[g_stateObj.scoreId]] || g_headerObj.artistName;
9398
9423
  const assistFlg = (g_autoPlaysBase.includes(g_stateObj.autoPlay) ? `` : `-${getStgDetailName(g_stateObj.autoPlay)}${getStgDetailName('less')}`);
9399
9424
  const shuffleName = (g_stateObj.shuffle !== C_FLG_OFF ? `: ${getStgDetailName(g_stateObj.shuffle)}` : ``);
@@ -11058,7 +11083,7 @@ const resultInit = _ => {
11058
11083
  return result;
11059
11084
  };
11060
11085
  const bayesExVal = 6 * bayesFunc(0, diffLength) / (diffLength * (diffLength + 1) * (diffLength + 2));
11061
- 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);
11062
11087
 
11063
11088
  // 背景スプライトを作成
11064
11089
  createMultipleSprite(`backResultSprite`, g_headerObj.backResultMaxDepth);
@@ -11103,12 +11128,13 @@ const resultInit = _ => {
11103
11128
  }
11104
11129
 
11105
11130
  // 曲名・オプション描画
11106
- 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;
11107
11133
 
11108
- const mTitleForView = [g_headerObj.musicTitleForView[0], g_headerObj.musicTitleForView[1] || ``];
11134
+ const mTitleForView = [g_headerObj.musicTitleForView[0], (g_headerObj.musicTitleForView[1] || ``) + playbackView];
11109
11135
  if (g_headerObj.musicTitlesForView[g_headerObj.musicNos[g_stateObj.scoreId]] !== undefined) {
11110
11136
  mTitleForView.forEach((mTitle, j) =>
11111
- 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 : ``));
11112
11138
  }
11113
11139
 
11114
11140
  const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
@@ -11274,7 +11300,8 @@ const resultInit = _ => {
11274
11300
  maxCombo: 0, fmaxCombo: 0, score: 0,
11275
11301
  };
11276
11302
 
11277
- 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)));
11278
11305
  if (highscoreCondition) {
11279
11306
 
11280
11307
  // ハイスコア差分描画
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2024/06/15 (v37.0.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,
@@ -67,7 +72,8 @@ const g_limitObj = {
67
72
 
68
73
  // グラフ表示部分の幅、高さ
69
74
  graphWidth: 286,
70
- graphHeight: 226,
75
+ graphHeight: 240,
76
+ graphMiniSiz: 12,
71
77
 
72
78
  // その他のフォントサイズ
73
79
  titleSiz: 32,
@@ -158,11 +164,11 @@ const g_lblPosObj = {};
158
164
  const updateWindowSiz = _ => {
159
165
  Object.assign(g_windowObj, {
160
166
  optionSprite: { x: (g_sWidth - 450) / 2, y: 65, w: 450, h: 325 },
161
- difList: { x: 165, y: 60, w: 280, h: 265 + g_sHeight - 500, overflow: `auto` },
162
- difCover: { x: 20, y: 60, w: 145, h: 265 + g_sHeight - 500, opacity: 0.95 },
163
- difFilter: { x: 0, y: 61, w: 140, h: 204 + g_sHeight - 500, overflow: `auto` },
167
+ difList: { x: 165, y: 60, w: 280, h: 270 + g_sHeight - 500, overflow: `auto` },
168
+ difCover: { x: 20, y: 60, w: 145, h: 270 + g_sHeight - 500, opacity: 0.95 },
169
+ difFilter: { x: 0, y: 66, w: 140, h: 204 + g_sHeight - 500, overflow: `auto` },
164
170
  displaySprite: { x: 25, y: 30, w: (g_sWidth - 450) / 2, h: g_limitObj.setLblHeight * 5 },
165
- scoreDetail: { x: 20, y: 85, w: (g_sWidth - 500) / 2 + 420, h: 240, visibility: `hidden` },
171
+ scoreDetail: { x: 20, y: 85, w: (g_sWidth - 500) / 2 + 420, h: 245, visibility: `hidden` },
166
172
  detailObj: { w: (g_sWidth - 500) / 2 + 420, h: 230, visibility: `hidden` },
167
173
  keyconSprite: { y: 105, h: g_sHeight - 105, overflow: `auto` },
168
174
  loader: { y: g_sHeight - 10, h: 10, backgroundColor: `#333333` },
@@ -1589,6 +1595,7 @@ const g_shortcutObj = {
1589
1595
  ShiftLeft_KeyA: { id: `lnkAppearanceL` },
1590
1596
  ShiftRight_KeyA: { id: `lnkAppearanceL` },
1591
1597
  KeyA: { id: `lnkAppearanceR` },
1598
+ KeyL: { id: `lnkLockBtn` },
1592
1599
  ShiftLeft_KeyO: { id: `lnkOpacityL` },
1593
1600
  ShiftRight_KeyO: { id: `lnkOpacityL` },
1594
1601
  KeyO: { id: `lnkOpacityR` },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "37.0.1",
3
+ "version": "37.2.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {