danoniplus 37.1.0 → 37.2.1

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.
@@ -4,7 +4,7 @@
4
4
  本体cssファイル
5
5
 
6
6
  Created : 2018/10/08
7
- Revised : 2024/05/18 (v36.4.1)
7
+ Revised : 2024/06/30 (v37.2.1)
8
8
 
9
9
  https://github.com/cwtickle/danoniplus
10
10
  ------------------------------------------ */
@@ -869,5 +869,6 @@ input[type="color"] {
869
869
  .result_Cleared,
870
870
  .result_Failed {
871
871
  background-clip: text;
872
+ -webkit-background-clip: text;
872
873
  color: rgba(255, 255, 255, 0.0);
873
874
  }
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/30
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.1`;
12
+ const g_revisedDate = `2024/06/30`;
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;
@@ -1146,6 +1147,8 @@ const createColorObject2 = (_id,
1146
1147
 
1147
1148
  style.maskImage = `url("${g_imgObj[charaStyle]}")`;
1148
1149
  style.maskSize = `contain`;
1150
+ style.webkitMaskImage = `url("${g_imgObj[charaStyle]}")`;
1151
+ style.webkitMaskSize = `contain`;
1149
1152
  Object.keys(rest).forEach(property => style[property] = rest[property]);
1150
1153
  setAttrs(div, { color: rest.background ?? ``, type: charaStyle, cnt: 0, });
1151
1154
 
@@ -4162,6 +4165,7 @@ const titleInit = _ => {
4162
4165
  font-family:${g_headerObj.titlefonts[0]};
4163
4166
  background: ${titlegrds[0]};
4164
4167
  background-clip: text;
4168
+ -webkit-background-clip: text;
4165
4169
  color: rgba(255,255,255,0.0);
4166
4170
  ${txtAnimations[0]}
4167
4171
  " class="${g_headerObj.titleAnimationClass[0]}">
@@ -4174,6 +4178,7 @@ const titleInit = _ => {
4174
4178
  font-family:${g_headerObj.titlefonts[1]};
4175
4179
  background: ${titlegrds[1]};
4176
4180
  background-clip: text;
4181
+ -webkit-background-clip: text;
4177
4182
  color: rgba(255,255,255,0.0);
4178
4183
  ${txtAnimations[1]}
4179
4184
  " class="${g_headerObj.titleAnimationClass[1]}">
@@ -5526,7 +5531,6 @@ const createOptionWindow = _sprite => {
5526
5531
  // 縦位置: 5.5
5527
5532
  createGeneralSetting(spriteList.shuffle, `shuffle`, g_settings.scoreDetails.length > 0 ? {
5528
5533
  addRFunc: _ => makeHighScore(g_stateObj.scoreId),
5529
- addLFunc: _ => makeHighScore(g_stateObj.scoreId),
5530
5534
  } : {});
5531
5535
 
5532
5536
  // ---------------------------------------------------
@@ -5534,7 +5538,6 @@ const createOptionWindow = _sprite => {
5534
5538
  // 縦位置: 6.5
5535
5539
  createGeneralSetting(spriteList.autoPlay, `autoPlay`, g_settings.scoreDetails.length > 0 ? {
5536
5540
  addRFunc: _ => makeHighScore(g_stateObj.scoreId),
5537
- addLFunc: _ => makeHighScore(g_stateObj.scoreId),
5538
5541
  } : {});
5539
5542
 
5540
5543
  // ---------------------------------------------------
@@ -5578,9 +5581,22 @@ const createOptionWindow = _sprite => {
5578
5581
  // 縦位置: 10.5 短縮ショートカットあり
5579
5582
  createGeneralSetting(spriteList.adjustment, `adjustment`, {
5580
5583
  skipTerms: g_settings.adjustmentTerms, hiddenBtn: true, scLabel: g_lblNameObj.sc_adjustment, roundNum: 5,
5581
- unitName: g_lblNameObj.frame,
5584
+ unitName: g_lblNameObj.frame, addRFunc: _ => viewAdjustment(),
5582
5585
  });
5583
5586
 
5587
+ const viewAdjustment = _ => {
5588
+ if (g_headerObj.playbackRate !== 1) {
5589
+ const adjustmentVal = isLocalMusicFile(g_stateObj.scoreId) ?
5590
+ Math.round(g_stateObj.adjustment / g_headerObj.playbackRate) :
5591
+ (g_stateObj.adjustment / g_headerObj.playbackRate).toFixed(1);
5592
+ document.getElementById(`lnkAdjustment`).innerHTML = `${adjustmentVal}${g_lblNameObj.frame}`
5593
+ + `<span style="font-size:${g_limitObj.adjustmentViewOrgSiz}px"> (${g_stateObj.adjustment.toFixed(1)}${g_localStorage.adjustment === g_stateObj.adjustment ? '*' : ''})</span>`;
5594
+ document.getElementById(`lnkAdjustment`).style.fontSize = `${g_limitObj.adjustmentViewSiz}px`;
5595
+ document.getElementById(`lnkAdjustment`).style.lineHeight = `${g_limitObj.adjustmentLineHeight}px`;
5596
+ }
5597
+ };
5598
+ viewAdjustment();
5599
+
5584
5600
  // ---------------------------------------------------
5585
5601
  // フェードイン (Fadein)
5586
5602
  // 縦位置: 11.5 スライダーあり
@@ -5635,7 +5651,7 @@ const createOptionWindow = _sprite => {
5635
5651
  * @param {object} _options
5636
5652
  */
5637
5653
  const createGeneralSetting = (_obj, _settingName, { unitName = ``,
5638
- skipTerms = fillArray(3, 1), hiddenBtn = false, addRFunc = _ => { }, addLFunc = _ => { },
5654
+ skipTerms = fillArray(3, 1), hiddenBtn = false, addRFunc = _ => { }, addLFunc = addRFunc,
5639
5655
  settingLabel = _settingName, displayName = g_currentPage, scLabel = ``, roundNum = 0, adjY = 0 } = {}) => {
5640
5656
 
5641
5657
  const settingUpper = toCapitalize(_settingName);
@@ -5648,47 +5664,47 @@ const createGeneralSetting = (_obj, _settingName, { unitName = ``,
5648
5664
  multiAppend(_obj,
5649
5665
  makeSettingLblCssButton(linkId, `${initName}${g_localStorage[_settingName] === g_stateObj[_settingName] ? ' *' : ''}`, 0,
5650
5666
  _ => {
5651
- setSetting(skipTerms[1], _settingName, unitName, roundNum);
5652
- addRFunc();
5667
+ setSetting(skipTerms[1], _settingName, unitName, roundNum, { func: _ => addRFunc() });
5653
5668
  }, {
5654
5669
  cxtFunc: _ => {
5655
- setSetting(skipTerms[1] * (-1), _settingName, unitName, roundNum);
5656
- addLFunc();
5670
+ setSetting(skipTerms[1] * (-1), _settingName, unitName, roundNum, { func: _ => addLFunc() });
5657
5671
  }
5658
5672
  }),
5659
5673
 
5660
5674
  // 右回し・左回しボタン(外側)
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
- }),
5675
+ makeMiniCssButton(linkId, `R`, 0, _ =>
5676
+ setSetting(skipTerms[0], _settingName, unitName, roundNum, { func: _ => addRFunc() })),
5677
+ makeMiniCssButton(linkId, `L`, 0, _ =>
5678
+ setSetting(skipTerms[0] * (-1), _settingName, unitName, roundNum, { func: _ => addLFunc() })),
5669
5679
  );
5670
5680
 
5671
5681
  // 右回し・左回しボタン(内側)
5672
5682
  if (skipTerms[1] > 1) {
5673
5683
  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)),
5684
+ makeMiniCssButton(linkId, `RR`, 0, _ =>
5685
+ setSetting(skipTerms[1], _settingName, unitName, roundNum, { func: _ => addRFunc() })),
5686
+ makeMiniCssButton(linkId, `LL`, 0, _ =>
5687
+ setSetting(skipTerms[1] * (-1), _settingName, unitName, roundNum, { func: _ => addLFunc() })),
5676
5688
  );
5677
5689
  }
5678
5690
 
5679
5691
  // 右回し・左回しボタン(最内側)
5680
5692
  if (skipTerms[2] > 1) {
5681
5693
  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 }),
5694
+ makeMiniCssButton(linkId, `RRR`, 0, _ =>
5695
+ setSetting(skipTerms[2], _settingName, unitName, roundNum, { func: _ => addRFunc() })
5696
+ , { dw: -g_limitObj.setMiniWidth / 2 }),
5697
+ makeMiniCssButton(linkId, `LLL`, 0, _ =>
5698
+ setSetting(skipTerms[2] * (-1), _settingName, unitName, roundNum, { func: _ => addLFunc() })
5699
+ , { dw: -g_limitObj.setMiniWidth / 2 }),
5684
5700
  );
5685
5701
  }
5686
5702
 
5687
5703
  // 右回し・左回しボタン(不可視)
5688
5704
  if (hiddenBtn) {
5689
5705
  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` }),
5706
+ makeMiniCssButton(linkId, `HR`, 0, _ => setSetting(1, _settingName, unitName, roundNum, { func: _ => addRFunc() }), { visibility: `hidden` }),
5707
+ makeMiniCssButton(linkId, `HL`, 0, _ => setSetting(-1, _settingName, unitName, roundNum, { func: _ => addLFunc() }), { visibility: `hidden` }),
5692
5708
  );
5693
5709
  }
5694
5710
 
@@ -5731,7 +5747,7 @@ const getStgDetailName = _name => {
5731
5747
  * @param {string} _unitName
5732
5748
  * @param {number} _roundNum
5733
5749
  */
5734
- const setSetting = (_scrollNum, _settingName, _unitName = ``, _roundNum = 0) => {
5750
+ const setSetting = (_scrollNum, _settingName, _unitName = ``, _roundNum = 0, { func = _ => true } = {}) => {
5735
5751
  let settingNum = g_settings[`${_settingName}Num`];
5736
5752
  const settingList = g_settings[`${_settingName}s`];
5737
5753
  const settingMax = settingList.length - 1;
@@ -5752,6 +5768,7 @@ const setSetting = (_scrollNum, _settingName, _unitName = ``, _roundNum = 0) =>
5752
5768
  g_settings[`${_settingName}Num`] = settingNum;
5753
5769
  document.getElementById(`lnk${toCapitalize(_settingName)}`).textContent =
5754
5770
  `${getStgDetailName(g_stateObj[_settingName])}${_unitName}${g_localStorage[_settingName] === g_stateObj[_settingName] ? ' *' : ''}`;
5771
+ func();
5755
5772
  };
5756
5773
 
5757
5774
  /**
@@ -6251,7 +6268,6 @@ const createSettingsDisplayWindow = _sprite => {
6251
6268
  // 縦位置: 7.4
6252
6269
  createGeneralSetting(spriteList.appearance, `appearance`, {
6253
6270
  addRFunc: _ => dispAppearanceSlider(),
6254
- addLFunc: _ => dispAppearanceSlider(),
6255
6271
  });
6256
6272
 
6257
6273
  // Hidden+/Sudden+初期値用スライダー、ロックボタン
@@ -7751,10 +7767,11 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
7751
7767
  obj.dummyArrowData = [];
7752
7768
  obj.dummyFrzData = [];
7753
7769
 
7754
- // realAdjustment: 全体, intAdjustment: 整数値のみ(切り捨て), decimalAdjustment: 小数値のみ
7770
+ // realAdjustment: 全体, intAdjustment: 整数値のみ(切り捨て、ファイル時のみ四捨五入), decimalAdjustment: 小数値のみ
7755
7771
  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);
7772
+ g_stateObj.realAdjustment = (parseFloat(g_stateObj.adjustment) + headerAdjustment) / g_headerObj.playbackRate + _preblankFrame;
7773
+ g_stateObj.intAdjustment = isLocalMusicFile(g_stateObj.scoreId) ?
7774
+ Math.round(g_stateObj.realAdjustment) : Math.floor(g_stateObj.realAdjustment);
7758
7775
  g_stateObj.decimalAdjustment = g_stateObj.realAdjustment - g_stateObj.intAdjustment;
7759
7776
 
7760
7777
  const blankFrame = g_headerObj.blankFrame;
@@ -9404,7 +9421,8 @@ const mainInit = _ => {
9404
9421
  }
9405
9422
 
9406
9423
  // 曲名・アーティスト名、譜面名表示
9407
- const musicTitle = g_headerObj.musicTitles[g_headerObj.musicNos[g_stateObj.scoreId]] || g_headerObj.musicTitle;
9424
+ const playbackView = (g_headerObj.playbackRate === 1 ? `` : ` [Rate:${g_headerObj.playbackRate}]`);
9425
+ const musicTitle = (g_headerObj.musicTitles[g_headerObj.musicNos[g_stateObj.scoreId]] || g_headerObj.musicTitle) + playbackView;
9408
9426
  const artistName = g_headerObj.artistNames[g_headerObj.musicNos[g_stateObj.scoreId]] || g_headerObj.artistName;
9409
9427
  const assistFlg = (g_autoPlaysBase.includes(g_stateObj.autoPlay) ? `` : `-${getStgDetailName(g_stateObj.autoPlay)}${getStgDetailName('less')}`);
9410
9428
  const shuffleName = (g_stateObj.shuffle !== C_FLG_OFF ? `: ${getStgDetailName(g_stateObj.shuffle)}` : ``);
@@ -11069,7 +11087,7 @@ const resultInit = _ => {
11069
11087
  return result;
11070
11088
  };
11071
11089
  const bayesExVal = 6 * bayesFunc(0, diffLength) / (diffLength * (diffLength + 1) * (diffLength + 2));
11072
- const estimatedAdj = (diffLength <= 20 ? `` : Math.round((g_stateObj.adjustment - bayesExVal) * 10) / 10);
11090
+ const estimatedAdj = (diffLength <= 20 ? `` : Math.round((g_stateObj.adjustment / g_headerObj.playbackRate - bayesExVal) * 10) / 10);
11073
11091
 
11074
11092
  // 背景スプライトを作成
11075
11093
  createMultipleSprite(`backResultSprite`, g_headerObj.backResultMaxDepth);
@@ -11114,12 +11132,13 @@ const resultInit = _ => {
11114
11132
  }
11115
11133
 
11116
11134
  // 曲名・オプション描画
11117
- const musicTitle = g_headerObj.musicTitles[g_headerObj.musicNos[g_stateObj.scoreId]] || g_headerObj.musicTitle;
11135
+ const playbackView = (g_headerObj.playbackRate === 1 ? `` : ` [Rate:${g_headerObj.playbackRate}]`);
11136
+ const musicTitle = (g_headerObj.musicTitles[g_headerObj.musicNos[g_stateObj.scoreId]] || g_headerObj.musicTitle) + playbackView;
11118
11137
 
11119
- const mTitleForView = [g_headerObj.musicTitleForView[0], g_headerObj.musicTitleForView[1] || ``];
11138
+ const mTitleForView = [g_headerObj.musicTitleForView[0], (g_headerObj.musicTitleForView[1] || ``) + playbackView];
11120
11139
  if (g_headerObj.musicTitlesForView[g_headerObj.musicNos[g_stateObj.scoreId]] !== undefined) {
11121
11140
  mTitleForView.forEach((mTitle, j) =>
11122
- mTitleForView[j] = g_headerObj.musicTitlesForView[g_headerObj.musicNos[g_stateObj.scoreId]][j]);
11141
+ mTitleForView[j] = g_headerObj.musicTitlesForView[g_headerObj.musicNos[g_stateObj.scoreId]][j] + (j === 1 ? playbackView : ``));
11123
11142
  }
11124
11143
 
11125
11144
  const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
@@ -11285,7 +11304,8 @@ const resultInit = _ => {
11285
11304
  maxCombo: 0, fmaxCombo: 0, score: 0,
11286
11305
  };
11287
11306
 
11288
- const highscoreCondition = (g_stateObj.autoAll === C_FLG_OFF && (g_stateObj.shuffle === C_FLG_OFF || (mirrorName !== `` && orgShuffleFlg)));
11307
+ const highscoreCondition = (g_stateObj.autoAll === C_FLG_OFF && g_headerObj.playbackRate === 1 &&
11308
+ (g_stateObj.shuffle === C_FLG_OFF || (mirrorName !== `` && orgShuffleFlg)));
11289
11309
  if (highscoreCondition) {
11290
11310
 
11291
11311
  // ハイスコア差分描画
@@ -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.1",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {