danoniplus 44.4.1 → 44.5.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.
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/02/21
7
+ * Revised : 2026/02/23
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 44.4.1`;
12
- const g_revisedDate = `2026/02/21`;
11
+ const g_version = `Ver 44.5.1`;
12
+ const g_revisedDate = `2026/02/23`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -5114,6 +5114,7 @@ const titleInit = (_initFlg = false) => {
5114
5114
 
5115
5115
  clearWindow(true);
5116
5116
  g_currentPage = `title`;
5117
+ g_stateObj.settingSummaryVisible = false;
5117
5118
 
5118
5119
  // タイトル用フレーム初期化
5119
5120
  g_scoreObj.titleFrameNum = 0;
@@ -6423,6 +6424,23 @@ const commonSettingBtn = _labelName => {
6423
6424
  evt.target.classList.replace(g_cssObj[`button_${from}`], g_cssObj[`button_${to}`]);
6424
6425
  };
6425
6426
 
6427
+ const makeSettingSummary = () => {
6428
+ const tmpDiv = createEmptySprite(divRoot, `settingSumSprite`, {
6429
+ x: g_btnX() + 25, y: g_sHeight - 200, w: g_btnWidth() - 50, h: 100, pointerEvents: C_DIS_AUTO, overflow: C_DIS_AUTO
6430
+ });
6431
+ tmpDiv.style.background = g_headerObj.baseBrightFlg ? `#ffffffcc` : `#000000cc`;
6432
+
6433
+ multiAppend(tmpDiv,
6434
+ createDivCss2Label(`lblSummaryHeader`, g_lblNameObj.settingSummary, g_lblPosObj.lblSummaryHeader),
6435
+ createDivCss2Label(`lblSummaryEnvironment`, ``, g_lblPosObj.lblSummaryEnvironment),
6436
+ createDivCss2Label(`lblSummaryDifInfo`, ``, g_lblPosObj.lblSummaryDifInfo),
6437
+ createDivCss2Label(`lblSummaryPlaystyleInfo`, ``, g_lblPosObj.lblSummaryPlaystyleInfo),
6438
+ createDivCss2Label(`lblSummaryDisplayInfo`, ``, g_lblPosObj.lblSummaryDisplayInfo),
6439
+ createDivCss2Label(`lblSummaryDisplay2Info`, ``, g_lblPosObj.lblSummaryDisplay2Info),
6440
+ );
6441
+ tmpDiv.style.visibility = g_stateObj.settingSummaryVisible ? `visible` : `hidden`;
6442
+ };
6443
+
6426
6444
  multiAppend(divRoot,
6427
6445
 
6428
6446
  // タイトル画面へ戻る
@@ -6464,7 +6482,39 @@ const commonSettingBtn = _labelName => {
6464
6482
  Object.assign(g_lblPosObj.btnPrecond, {
6465
6483
  resetFunc: () => preconditionInit(),
6466
6484
  }), g_cssObj.button_Setting),
6485
+
6486
+ // 設定内容サマリを表示
6487
+ createCss2Button(`btnSettingSummary`, `>`, () => true,
6488
+ Object.assign(g_lblPosObj.btnSettingSummary, {
6489
+ resetFunc: () => {
6490
+ g_stateObj.settingSummaryVisible = !g_stateObj.settingSummaryVisible;
6491
+ visibleSettingSummary(g_stateObj.settingSummaryVisible);
6492
+ },
6493
+ }), g_cssObj.button_Mini),
6467
6494
  );
6495
+ makeSettingSummary();
6496
+ };
6497
+
6498
+ const visibleSettingSummary = _visible => {
6499
+ const summaryDiv = document.getElementById(`settingSumSprite`);
6500
+ if (summaryDiv) {
6501
+ summaryDiv.style.visibility = _visible ? `visible` : `hidden`;
6502
+ updateSettingSummary();
6503
+ }
6504
+ };
6505
+
6506
+ const updateSettingSummary = () => {
6507
+ if (document.getElementById(`settingSumSprite`) === null) return;
6508
+ const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
6509
+ const orgShuffleFlg = g_keyObj[`shuffle${keyCtrlPtn}`].filter((shuffleGr, j) => shuffleGr !== g_keyObj[`shuffle${keyCtrlPtn}_0d`][j]).length === 0;
6510
+ const shuffleName = `${getStgDetailName(g_stateObj.shuffle)}${!orgShuffleFlg && !g_stateObj.shuffle.endsWith(`+`) ? getStgDetailName('(S)') : ''}`;
6511
+ const settingData = getSelectedSettingList(shuffleName);
6512
+
6513
+ document.getElementById(`lblSummaryDifInfo`).innerHTML = settingData.difData;
6514
+ document.getElementById(`lblSummaryPlaystyleInfo`).innerHTML = settingData.playStyleData;
6515
+ document.getElementById(`lblSummaryDisplayInfo`).innerHTML = settingData.displayData;
6516
+ document.getElementById(`lblSummaryDisplay2Info`).innerHTML = settingData.display2Data;
6517
+ document.getElementById(`lblSummaryEnvironment`).innerHTML = `(Adj: ${g_stateObj.adjustment} f, Volume: ${g_stateObj.volume}%, ColorType: ${g_colorType})`;
6468
6518
  };
6469
6519
 
6470
6520
  /**
@@ -7462,6 +7512,7 @@ const setDifficulty = (_initFlg) => {
7462
7512
  g_headerObj.excessiveUse = g_headerObj.excessiveUses[g_stateObj.scoreId];
7463
7513
  if (g_headerObj.excessiveUse) {
7464
7514
  setExcessive(document.getElementById(`lnkExcessive`), g_stateObj.excessive === C_FLG_ON);
7515
+ lblExcessive.style.display = C_DIS_NONE;
7465
7516
  lnkExcessive.style.display = C_DIS_INHERIT;
7466
7517
  } else {
7467
7518
  g_stateObj.excessiveChgFlg = false;
@@ -7592,6 +7643,7 @@ const createOptionWindow = _sprite => {
7592
7643
  }
7593
7644
  g_stateObj.scoreDetailViewFlg = true;
7594
7645
  scoreDetail.style.visibility = `visible`;
7646
+ visibleSettingSummary(false);
7595
7647
 
7596
7648
  // 表示内容を非表示化、ボタン色をデフォルトに戻す
7597
7649
  $id(`detail${g_stateObj.scoreDetail}`).visibility = `hidden`;
@@ -7640,6 +7692,7 @@ const createOptionWindow = _sprite => {
7640
7692
  g_stateObj.scoreDetailViewFlg = !g_stateObj.scoreDetailViewFlg;
7641
7693
  scoreDetail.style.visibility = visibles[Number(g_stateObj.scoreDetailViewFlg)];
7642
7694
  detailObj.style.visibility = visibles[Number(g_stateObj.scoreDetailViewFlg)];
7695
+ visibleSettingSummary(g_stateObj.scoreDetailViewFlg ? false : g_stateObj.settingSummaryVisible);
7643
7696
 
7644
7697
  // Qキーを押したときのカーソル位置を先頭に初期化
7645
7698
  if (_resetFlg) {
@@ -7931,6 +7984,10 @@ const setSetting = (_scrollNum, _settingName, _unitName = ``, _roundNum = 0, { f
7931
7984
  document.getElementById(`lnk${toCapitalize(_settingName)}`).textContent =
7932
7985
  `${getStgDetailName(g_stateObj[_settingName])}${_unitName}${g_localStorage[_settingName] === g_stateObj[_settingName] ? ' *' : ''}`;
7933
7986
  func();
7987
+
7988
+ if (document.getElementById(`settingSumSprite`) !== null) {
7989
+ updateSettingSummary();
7990
+ }
7934
7991
  };
7935
7992
 
7936
7993
  /**
@@ -7972,6 +8029,7 @@ const setReverse = _btn => {
7972
8029
  g_settings.reverseNum = (g_settings.reverseNum + 1) % 2;
7973
8030
  g_stateObj.reverse = g_settings.reverses[g_settings.reverseNum];
7974
8031
  setReverseView(_btn);
8032
+ updateSettingSummary();
7975
8033
  }
7976
8034
  };
7977
8035
 
@@ -8422,6 +8480,7 @@ const createSettingsDisplayWindow = _sprite => {
8422
8480
 
8423
8481
  withShortCutDesc();
8424
8482
  interlockingButton(g_headerObj, _name, nextBarColor, prevBarColor, true);
8483
+ updateSettingSummary();
8425
8484
  };
8426
8485
 
8427
8486
  // Displayボタン初期化
@@ -8488,11 +8547,14 @@ const createSettingsDisplayWindow = _sprite => {
8488
8547
 
8489
8548
  _btn.classList.replace(g_cssObj[`button_Rev${prevLock}`],
8490
8549
  g_cssObj[`button_Rev${g_stateObj.filterLock}`]);
8550
+ updateSettingSummary();
8491
8551
  };
8492
8552
 
8493
8553
  const appearanceSlider = document.getElementById(`appearanceSlider`);
8494
- appearanceSlider.addEventListener(`input`, () =>
8495
- g_hidSudObj.filterPos = inputSlider(appearanceSlider, lblAppearancePos, `appearance`), false);
8554
+ appearanceSlider.addEventListener(`input`, () => {
8555
+ g_hidSudObj.filterPos = inputSlider(appearanceSlider, lblAppearancePos, `appearance`);
8556
+ updateSettingSummary();
8557
+ }, false);
8496
8558
 
8497
8559
  const dispAppearanceSlider = () => {
8498
8560
  [`lblAppearanceBar`, `lnkLockBtn`, `lnkfilterLine`].forEach(obj =>
@@ -13476,8 +13538,8 @@ const changeAppearanceFilter = (_num = 10) => {
13476
13538
  addY(`filterBar${bottomNum + j}`, `appearance`, parseFloat($id(`arrowSprite${j + 1}`).top) + bottomDist);
13477
13539
 
13478
13540
  if (![`Default`, `Halfway`].includes(g_stateObj.stepArea)) {
13479
- addY(`filterBar${bottomNum + j}_HS`, `appearance`, parseFloat($id(`arrowSprite${j}`).top) + topDist);
13480
- addY(`filterBar${topNum + j}_HS`, `appearance`, parseFloat($id(`arrowSprite${j + 1}`).top) + bottomDist);
13541
+ addY(`filterBar${bottomNum + j}_HS`, `appearance`, parseFloat($id(`arrowSprite${j}`).top) + bottomDist);
13542
+ addY(`filterBar${topNum + j}_HS`, `appearance`, parseFloat($id(`arrowSprite${j + 1}`).top) + topDist);
13481
13543
  }
13482
13544
  }
13483
13545
 
@@ -14273,87 +14335,7 @@ const resultInit = () => {
14273
14335
  const transKeyName = getTransKeyName();
14274
14336
  const orgShuffleFlg = g_keyObj[`shuffle${keyCtrlPtn}`].filter((shuffleGr, j) => shuffleGr !== g_keyObj[`shuffle${keyCtrlPtn}_0d`][j]).length === 0;
14275
14337
  const shuffleName = `${getStgDetailName(g_stateObj.shuffle)}${!orgShuffleFlg && !g_stateObj.shuffle.endsWith(`+`) ? getStgDetailName('(S)') : ''}`;
14276
-
14277
- /**
14278
- * プレイスタイルのカスタム有無
14279
- * @param {string} _flg
14280
- * @param {string|boolean} _defaultSet デフォルト値
14281
- * @param {string} _displayText
14282
- * @returns {string}
14283
- */
14284
- const withOptions = (_flg, _defaultSet, _displayText = _flg) =>
14285
- (_flg !== _defaultSet ? getStgDetailName(_displayText) : ``);
14286
-
14287
- const withDisplays = (_flg, _defaultSet, _displayText = _flg) =>
14288
- (_flg !== _defaultSet
14289
- ? getStgDetailName(_displayText) + (_flg === C_FLG_OFF ? `` : ` : ${getStgDetailName(_flg)}`) : ``);
14290
-
14291
- // 譜面名の組み立て処理 (Ex: 9Akey / Normal-Leftless (maker) [X-Mirror])
14292
- const keyUnitName = getStgDetailName(getKeyUnitName(g_keyObj.currentKey));
14293
- const difDatas = [
14294
- `${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyName} ${keyUnitName} / ${g_headerObj.difLabels[g_stateObj.scoreId]}`,
14295
- `${withOptions(g_autoPlaysBase.includes(g_stateObj.autoPlay), true, `-${getStgDetailName(g_stateObj.autoPlay)}${getStgDetailName('less')}`)}`,
14296
- `${withOptions(g_headerObj.makerView, false, `(${g_headerObj.creatorNames[g_stateObj.scoreId]})`)}`,
14297
- `${withOptions(g_stateObj.shuffle, C_FLG_OFF, `[${shuffleName}]`)}`
14298
- ];
14299
- let difData = difDatas.filter(value => value !== ``).join(` `);
14300
- const difDataForImage = difDatas.filter((value, j) => value !== `` && j !== 2).join(` `);
14301
-
14302
- // 設定の組み立て処理 (Ex: 4x, Brake, Reverse, Sudden+, NoRecovery)
14303
- let playStyleData = [
14304
- `${g_stateObj.speed}${g_lblNameObj.multi}`,
14305
- withOptions(g_stateObj.motion, C_FLG_OFF),
14306
- `${withOptions(g_stateObj.reverse, C_FLG_OFF,
14307
- getStgDetailName(g_stateObj.scroll !== '---' ? 'R-' : 'Reverse'))}${withOptions(g_stateObj.scroll, '---')}`,
14308
- withOptions(g_stateObj.appearance, `Visible`),
14309
- withOptions(g_stateObj.gauge, g_settings.gauges[0]),
14310
- withOptions(g_stateObj.playWindow, `Default`),
14311
- withOptions(g_stateObj.stepArea, `Default`),
14312
- withOptions(g_stateObj.frzReturn, C_FLG_OFF, `FR:${g_stateObj.frzReturn}`),
14313
- withOptions(g_stateObj.shaking, C_FLG_OFF),
14314
- withOptions(g_stateObj.effect, C_FLG_OFF),
14315
- withOptions(g_stateObj.camoufrage, C_FLG_OFF, `Cmf:${g_stateObj.camoufrage}`),
14316
- withOptions(g_stateObj.swapping, C_FLG_OFF, `Swap:${g_stateObj.swapping}`),
14317
- withOptions(g_stateObj.judgRange, `Normal`, `Judg:${g_stateObj.judgRange}`),
14318
- ].filter(value => value !== ``).join(`, `);
14319
-
14320
- // Display設定の組み立て処理 (Ex: Step : FlatBar, Judge, Life : OFF)
14321
- let displayData = [
14322
- withDisplays(g_stateObj.d_stepzone, C_FLG_ON, g_lblNameObj.rd_StepZone),
14323
- withDisplays(g_stateObj.d_judgment, C_FLG_ON, g_lblNameObj.rd_Judgment),
14324
- withDisplays(g_stateObj.d_fastslow, C_FLG_ON, g_lblNameObj.rd_FastSlow),
14325
- withDisplays(g_stateObj.d_lifegauge, C_FLG_ON, g_lblNameObj.rd_LifeGauge),
14326
- withDisplays(g_stateObj.d_score, C_FLG_ON, g_lblNameObj.rd_Score),
14327
- withDisplays(g_stateObj.d_musicinfo, C_FLG_ON, g_lblNameObj.rd_MusicInfo),
14328
- withDisplays(g_stateObj.d_filterline, C_FLG_ON, g_lblNameObj.rd_FilterLine),
14329
- ].filter(value => value !== ``).join(`, `);
14330
- if (displayData === ``) {
14331
- displayData = `All Visible`;
14332
- } else {
14333
- // 表示設定のOFF項目を末尾にまとめる
14334
- const displayList = displayData.split(`, `).sort((a, b) => b.includes(`:`) - a.includes(`:`));
14335
- displayData = displayList.join(`, `);
14336
- if (!displayList.at(-1).includes(`:`)) {
14337
- displayData += ` : ${getStgDetailName(C_FLG_OFF)}`;
14338
- }
14339
- }
14340
-
14341
- let display2Data = [
14342
- withDisplays(g_stateObj.d_speed, C_FLG_ON, g_lblNameObj.rd_Speed),
14343
- withDisplays(g_stateObj.d_color, C_FLG_ON, g_lblNameObj.rd_Color),
14344
- withDisplays(g_stateObj.d_lyrics, C_FLG_ON, g_lblNameObj.rd_Lyrics),
14345
- withDisplays(g_stateObj.d_background, C_FLG_ON, g_lblNameObj.rd_Background),
14346
- withDisplays(g_stateObj.d_arroweffect, C_FLG_ON, g_lblNameObj.rd_ArrowEffect),
14347
- withDisplays(g_stateObj.d_special, C_FLG_ON, g_lblNameObj.rd_Special),
14348
- ].filter(value => value !== ``).join(`, `);
14349
- if (display2Data !== ``) {
14350
- // 表示設定のOFF項目を末尾にまとめる
14351
- const display2List = display2Data.split(`, `).sort((a, b) => b.includes(`:`) - a.includes(`:`));
14352
- display2Data = display2List.join(`, `);
14353
- if (!display2List.at(-1).includes(`:`)) {
14354
- display2Data += ` : ${getStgDetailName(C_FLG_OFF)}`;
14355
- }
14356
- }
14338
+ const settingData = getSelectedSettingList(shuffleName);
14357
14339
 
14358
14340
  const [lblRX, dataRX] = [20, 60];
14359
14341
  multiAppend(playDataWindow,
@@ -14361,12 +14343,12 @@ const resultInit = () => {
14361
14343
  makeCssResultPlayData(`lblMusicData`, dataRX, g_cssObj.result_style, 0, mTitleForView[0]),
14362
14344
  makeCssResultPlayData(`lblMusicData2`, dataRX, g_cssObj.result_style, 1, mTitleForView[1]),
14363
14345
  makeCssResultPlayData(`lblDifficulty`, lblRX, g_cssObj.result_lbl, 2, g_lblNameObj.rt_Difficulty, C_ALIGN_LEFT),
14364
- makeCssResultPlayData(`lblDifData`, dataRX, g_cssObj.result_style, 2, difData),
14346
+ makeCssResultPlayData(`lblDifData`, dataRX, g_cssObj.result_style, 2, settingData.difData),
14365
14347
  makeCssResultPlayData(`lblStyle`, lblRX, g_cssObj.result_lbl, 3, g_lblNameObj.rt_Style, C_ALIGN_LEFT),
14366
- makeCssResultPlayData(`lblStyleData`, dataRX, g_cssObj.result_style, 3, playStyleData),
14348
+ makeCssResultPlayData(`lblStyleData`, dataRX, g_cssObj.result_style, 3, settingData.playStyleData),
14367
14349
  makeCssResultPlayData(`lblDisplay`, lblRX, g_cssObj.result_lbl, 4, g_lblNameObj.rt_Display, C_ALIGN_LEFT),
14368
- makeCssResultPlayData(`lblDisplayData`, dataRX, g_cssObj.result_style, 4, displayData),
14369
- makeCssResultPlayData(`lblDisplay2Data`, dataRX, g_cssObj.result_style, 5, display2Data),
14350
+ makeCssResultPlayData(`lblDisplayData`, dataRX, g_cssObj.result_style, 4, settingData.displayData),
14351
+ makeCssResultPlayData(`lblDisplay2Data`, dataRX, g_cssObj.result_style, 5, settingData.display2Data),
14370
14352
  );
14371
14353
 
14372
14354
  // 設定項目が多い場合に2行に分解して表示する処理
@@ -14690,7 +14672,7 @@ const resultInit = () => {
14690
14672
  g_localStorage.highscores[scoreName].dateTime = currentDateTime;
14691
14673
  g_localStorage.highscores[scoreName].rankMark = rankMark;
14692
14674
  g_localStorage.highscores[scoreName].rankColor = rankColor;
14693
- g_localStorage.highscores[scoreName].playStyle = playStyleData;
14675
+ g_localStorage.highscores[scoreName].playStyle = settingData.playStyleData;
14694
14676
 
14695
14677
  g_localStorage.highscores[scoreName].fast = g_resultObj.fast;
14696
14678
  g_localStorage.highscores[scoreName].slow = g_resultObj.slow;
@@ -14764,6 +14746,7 @@ const resultInit = () => {
14764
14746
  // X (Twitter)用リザルト
14765
14747
  // スコアを上塗りする可能性があるため、カスタムイベント後に配置
14766
14748
  const hashTag = (hasVal(g_headerObj.hashTag) ? ` ${g_headerObj.hashTag}` : ``);
14749
+ const keyUnitName = getStgDetailName(getKeyUnitName(g_keyObj.currentKey));
14767
14750
  const keyUnitAbbName = keyUnitName.slice(0, 1) || ``;
14768
14751
  let tweetDifData = `${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyName}${getStgDetailName(keyUnitAbbName + '-')}${g_headerObj.difLabels[g_stateObj.scoreId]}${assistFlg}`;
14769
14752
  if (g_stateObj.shuffle !== `OFF`) {
@@ -14785,7 +14768,8 @@ const resultInit = () => {
14785
14768
  const resultParams = {
14786
14769
  tuning: g_headerObj.tuning,
14787
14770
  highscore: g_resultObj,
14788
- hashTag, musicTitle, tweetDifData, playStyleData, rankMark,
14771
+ playStyleData: settingData.playStyleData,
14772
+ hashTag, musicTitle, tweetDifData, rankMark,
14789
14773
  tweetExcessive, tweetFrzJdg, tweetMaxCombo, baseTwitUrl
14790
14774
  };
14791
14775
  let tweetResultTmp = makeResultText(g_headerObj.resultFormat, resultParams);
@@ -14832,13 +14816,13 @@ const resultInit = () => {
14832
14816
  drawText(unEscapeHtml(mTitleForView[1]), { hy: 2 });
14833
14817
  drawText(`${getEmojiForCanvas(g_emojiObj.memo)} ${unEscapeHtml(g_headerObj.tuning)} / ${getEmojiForCanvas(g_emojiObj.musical)} ${unEscapeHtml(artistName)}`,
14834
14818
  { hy: mTitleForView[1] !== `` ? 3 : 2, siz: 12 });
14835
- drawText(unEscapeHtml(difDataForImage), { hy: 4 });
14819
+ drawText(unEscapeHtml(settingData.difDataForImage), { hy: 4 });
14836
14820
 
14837
- if (playStyleData.length > 60) {
14838
- drawText(playStyleData.slice(0, playStyleBreakNum), { hy: 5, siz: getFontSize2(playStyleData.slice(0, playStyleBreakNum), 370) });
14839
- drawText(playStyleData.slice(playStyleBreakNum), { hy: 6, siz: getFontSize2(playStyleData.slice(playStyleBreakNum), 370) });
14821
+ if (settingData.playStyleData.length > 60) {
14822
+ drawText(settingData.playStyleData.slice(0, playStyleBreakNum), { hy: 5, siz: getFontSize2(settingData.playStyleData.slice(0, playStyleBreakNum), 370) });
14823
+ drawText(settingData.playStyleData.slice(playStyleBreakNum), { hy: 6, siz: getFontSize2(settingData.playStyleData.slice(playStyleBreakNum), 370) });
14840
14824
  } else {
14841
- drawText(playStyleData, { hy: 5, siz: getFontSize2(lblStyleData.textContent, 370, { maxSiz: 15 }) });
14825
+ drawText(settingData.playStyleData, { hy: 5, siz: getFontSize2(settingData.playStyleData, 370, { maxSiz: 15 }) });
14842
14826
  }
14843
14827
  Object.keys(jdgScoreObj).forEach(score => {
14844
14828
  drawText(g_lblNameObj[`j_${score}`], { hy: 7 + jdgScoreObj[score].pos, color: jdgScoreObj[score].dfColor });
@@ -14983,7 +14967,7 @@ const resultInit = () => {
14983
14967
  makeResultSprite.style.pointerEvents = g_headerObj.maskresultButton ? C_DIS_AUTO : C_DIS_NONE;
14984
14968
 
14985
14969
  // リザルトモーションの0フレーム対応
14986
- g_animationData.filter(sprite => g_scoreObj[`${sprite}ResultFrameNum`] === 0 && g_headerObj[`${sprite}ResultData`][0] !== undefined)
14970
+ g_animationData.filter(sprite => g_scoreObj[`${sprite}ResultFrameNum`] === 0 && g_headerObj[`${sprite}ResultData`]?.[0] !== undefined)
14987
14971
  .forEach(sprite => {
14988
14972
  g_scoreObj[`${sprite}ResultFrameNum`] = g_animationFunc.draw[sprite](0, `result`, sprite);
14989
14973
  g_headerObj[`${sprite}ResultData`][0] = undefined;
@@ -15032,6 +15016,99 @@ const resultInit = () => {
15032
15016
  g_skinJsObj.result.forEach(func => func());
15033
15017
  };
15034
15018
 
15019
+ /**
15020
+ * 選択した設定の情報を取得
15021
+ * @param {string} _shuffleName
15022
+ * @returns {object}
15023
+ */
15024
+ const getSelectedSettingList = (_shuffleName) => {
15025
+
15026
+ const transKeyName = getTransKeyName();
15027
+ /**
15028
+ * プレイスタイルのカスタム有無
15029
+ * @param {string} _flg
15030
+ * @param {string|boolean} _defaultSet デフォルト値
15031
+ * @param {string} _displayText
15032
+ * @returns {string}
15033
+ */
15034
+ const withOptions = (_flg, _defaultSet, _displayText = _flg) =>
15035
+ (_flg !== _defaultSet ? getStgDetailName(_displayText) : ``);
15036
+
15037
+ const withDisplays = (_flg, _defaultSet, _displayText = _flg) =>
15038
+ (_flg !== _defaultSet
15039
+ ? getStgDetailName(_displayText) + (_flg === C_FLG_OFF ? `` : ` : ${getStgDetailName(_flg)}`) : ``);
15040
+
15041
+ // 譜面名の組み立て処理 (Ex: 9Akey / Normal-Leftless (maker) [X-Mirror])
15042
+ const keyUnitName = getStgDetailName(getKeyUnitName(g_keyObj.currentKey));
15043
+ const difDatas = [
15044
+ `${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyName} ${keyUnitName} / ${g_headerObj.difLabels[g_stateObj.scoreId]}`,
15045
+ `${withOptions(g_autoPlaysBase.includes(g_stateObj.autoPlay), true, `-${getStgDetailName(g_stateObj.autoPlay)}${getStgDetailName('less')}`)}`,
15046
+ `${withOptions(g_headerObj.makerView, false, `(${g_headerObj.creatorNames[g_stateObj.scoreId]})`)}`,
15047
+ `${withOptions(g_stateObj.shuffle, C_FLG_OFF, `[${_shuffleName}]`)}`
15048
+ ];
15049
+ let difData = difDatas.filter(value => value !== ``).join(` `);
15050
+ const difDataForImage = difDatas.filter((value, j) => value !== `` && j !== 2).join(` `);
15051
+
15052
+ // 設定の組み立て処理 (Ex: 4x, Brake, Reverse, Sudden+, NoRecovery)
15053
+ let playStyleData = [
15054
+ `${g_stateObj.speed}${g_lblNameObj.multi}`,
15055
+ withOptions(g_stateObj.motion, C_FLG_OFF),
15056
+ `${withOptions(g_stateObj.reverse, C_FLG_OFF,
15057
+ getStgDetailName(g_stateObj.scroll !== '---' ? 'R-' : 'Reverse'))}${withOptions(g_stateObj.scroll, '---')}`,
15058
+ withOptions(g_stateObj.appearance, `Visible`) +
15059
+ ((g_appearanceRanges.includes(g_stateObj.appearance) && g_stateObj.filterLock === C_FLG_ON) ? `(${g_hidSudObj.filterPos}%)` : ``),
15060
+ withOptions(g_stateObj.gauge, g_settings.gauges[0]),
15061
+ withOptions(g_stateObj.playWindow, `Default`),
15062
+ withOptions(g_stateObj.stepArea, `Default`),
15063
+ withOptions(g_stateObj.frzReturn, C_FLG_OFF, `FR:${g_stateObj.frzReturn}`),
15064
+ withOptions(g_stateObj.shaking, C_FLG_OFF),
15065
+ withOptions(g_stateObj.effect, C_FLG_OFF),
15066
+ withOptions(g_stateObj.camoufrage, C_FLG_OFF, `Cmf:${g_stateObj.camoufrage}`),
15067
+ withOptions(g_stateObj.swapping, C_FLG_OFF, `Swap:${g_stateObj.swapping}`),
15068
+ withOptions(g_stateObj.judgRange, `Normal`, `Judg:${g_stateObj.judgRange}`),
15069
+ ].filter(value => value !== ``).join(`, `);
15070
+
15071
+ // Display設定の組み立て処理 (Ex: Step : FlatBar, Judge, Life : OFF)
15072
+ let displayData = [
15073
+ withDisplays(g_stateObj.d_stepzone, C_FLG_ON, g_lblNameObj.rd_StepZone),
15074
+ withDisplays(g_stateObj.d_judgment, C_FLG_ON, g_lblNameObj.rd_Judgment),
15075
+ withDisplays(g_stateObj.d_fastslow, C_FLG_ON, g_lblNameObj.rd_FastSlow),
15076
+ withDisplays(g_stateObj.d_lifegauge, C_FLG_ON, g_lblNameObj.rd_LifeGauge),
15077
+ withDisplays(g_stateObj.d_score, C_FLG_ON, g_lblNameObj.rd_Score),
15078
+ withDisplays(g_stateObj.d_musicinfo, C_FLG_ON, g_lblNameObj.rd_MusicInfo),
15079
+ withDisplays(g_stateObj.d_filterline, C_FLG_ON, g_lblNameObj.rd_FilterLine),
15080
+ ].filter(value => value !== ``).join(`, `);
15081
+ if (displayData === ``) {
15082
+ displayData = `All Visible`;
15083
+ } else {
15084
+ // 表示設定のOFF項目を末尾にまとめる
15085
+ const displayList = displayData.split(`, `).sort((a, b) => b.includes(`:`) - a.includes(`:`));
15086
+ displayData = displayList.join(`, `);
15087
+ if (!displayList.at(-1).includes(`:`)) {
15088
+ displayData += ` : ${getStgDetailName(C_FLG_OFF)}`;
15089
+ }
15090
+ }
15091
+
15092
+ let display2Data = [
15093
+ withDisplays(g_stateObj.d_speed, C_FLG_ON, g_lblNameObj.rd_Speed),
15094
+ withDisplays(g_stateObj.d_color, C_FLG_ON, g_lblNameObj.rd_Color),
15095
+ withDisplays(g_stateObj.d_lyrics, C_FLG_ON, g_lblNameObj.rd_Lyrics),
15096
+ withDisplays(g_stateObj.d_background, C_FLG_ON, g_lblNameObj.rd_Background),
15097
+ withDisplays(g_stateObj.d_arroweffect, C_FLG_ON, g_lblNameObj.rd_ArrowEffect),
15098
+ withDisplays(g_stateObj.d_special, C_FLG_ON, g_lblNameObj.rd_Special),
15099
+ ].filter(value => value !== ``).join(`, `);
15100
+ if (display2Data !== ``) {
15101
+ // 表示設定のOFF項目を末尾にまとめる
15102
+ const display2List = display2Data.split(`, `).sort((a, b) => b.includes(`:`) - a.includes(`:`));
15103
+ display2Data = display2List.join(`, `);
15104
+ if (!display2List.at(-1).includes(`:`)) {
15105
+ display2Data += ` : ${getStgDetailName(C_FLG_OFF)}`;
15106
+ }
15107
+ }
15108
+
15109
+ return { difData, difDataForImage, playStyleData, displayData, display2Data };
15110
+ };
15111
+
15035
15112
  /**
15036
15113
  * リザルトフォーマットの整形処理
15037
15114
  * @param {string} _format
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2026/02/21 (v44.4.0)
8
+ * Revised : 2026/02/23 (v44.5.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -375,6 +375,27 @@ const updateWindowSiz = () => {
375
375
  x: g_btnX(), y: 5, w: g_btnWidth(1 / 5), h: 16, siz: 12,
376
376
  title: g_msgObj.dataSave, borderStyle: `solid`,
377
377
  },
378
+ btnSettingSummary: {
379
+ x: g_btnX(), y: g_sHeight - 200, w: g_limitObj.setMiniWidth / 2, h: 100,
380
+ },
381
+ lblSummaryHeader: {
382
+ x: 0, y: 0, w: 150, h: 20, siz: 16, align: C_ALIGN_LEFT,
383
+ },
384
+ lblSummaryEnvironment: {
385
+ x: 150, y: 5, w: g_btnWidth() - 200, h: 20, siz: 12, align: C_ALIGN_LEFT,
386
+ },
387
+ lblSummaryDifInfo: {
388
+ x: 0, y: 20, w: g_btnWidth() - 50, h: 20, siz: 12, align: C_ALIGN_LEFT,
389
+ },
390
+ lblSummaryPlaystyleInfo: {
391
+ x: 0, y: 35, w: g_btnWidth() - 50, h: 20, siz: 12, align: C_ALIGN_LEFT,
392
+ },
393
+ lblSummaryDisplayInfo: {
394
+ x: 0, y: 50, w: g_btnWidth() - 50, h: 20, siz: 12, align: C_ALIGN_LEFT,
395
+ },
396
+ lblSummaryDisplay2Info: {
397
+ x: 0, y: 65, w: g_btnWidth() - 50, h: 20, siz: 12, align: C_ALIGN_LEFT,
398
+ },
378
399
 
379
400
  lblMusicInfo: {
380
401
  x: g_btnX(1 / 4), y: 0, w: g_btnWidth(3 / 4), h: 20, align: C_ALIGN_RIGHT
@@ -1112,6 +1133,7 @@ const g_stateObj = {
1112
1133
  dataSaveFlg: true,
1113
1134
  scoreDetailViewFlg: false,
1114
1135
  scoreDetail: `Speed`,
1136
+ settingSummaryVisible: false,
1115
1137
 
1116
1138
  d_stepzone: C_FLG_ON,
1117
1139
  d_judgment: C_FLG_ON,
@@ -1347,6 +1369,7 @@ const g_moveSettingWindow = (_changePageFlg = true, _direction = 1) => {
1347
1369
  g_settings.settingWindowNum = nextPos(g_settings.settingWindowNum, _direction, g_settings.settingWindows.length);
1348
1370
  }
1349
1371
  g_settings.settingWindows[g_settings.settingWindowNum]();
1372
+ updateSettingSummary();
1350
1373
  };
1351
1374
 
1352
1375
  /**
@@ -2365,6 +2388,7 @@ const g_shortcutObj = {
2365
2388
  ShiftLeft_Tab: { id: `btnBack` },
2366
2389
  ShiftRight_Tab: { id: `btnBack` },
2367
2390
  Tab: { id: `btnDisplay` },
2391
+ KeyU: { id: `btnSettingSummary` },
2368
2392
  },
2369
2393
  difSelector: {
2370
2394
  ShiftLeft_KeyD: { id: `lnkDifficultyL` },
@@ -2397,6 +2421,7 @@ const g_shortcutObj = {
2397
2421
  ShiftLeft_Tab: { id: `btnBack` },
2398
2422
  ShiftRight_Tab: { id: `btnBack` },
2399
2423
  Tab: { id: `btnDisplay` },
2424
+ KeyU: { id: `btnSettingSummary` },
2400
2425
  },
2401
2426
  settingsDisplay: {
2402
2427
  ShiftLeft_KeyA: { id: `lnkAppearanceL` },
@@ -2504,6 +2529,7 @@ const g_shortcutObj = {
2504
2529
  ShiftLeft_Tab: { id: `btnBack` },
2505
2530
  ShiftRight_Tab: { id: `btnBack` },
2506
2531
  Tab: { id: `btnSettings` },
2532
+ KeyU: { id: `btnSettingSummary` },
2507
2533
  },
2508
2534
  exSetting: {
2509
2535
  ShiftLeft_KeyP: { id: `lnkPlayWindowL` },
@@ -2533,6 +2559,7 @@ const g_shortcutObj = {
2533
2559
  ShiftLeft_Tab: { id: `btnBack` },
2534
2560
  ShiftRight_Tab: { id: `btnBack` },
2535
2561
  Tab: { id: `btnexSetting` },
2562
+ KeyU: { id: `btnSettingSummary` },
2536
2563
  },
2537
2564
  keyConfig: {
2538
2565
  Escape: { id: `btnBack` },
@@ -2594,10 +2621,10 @@ const g_btnPatterns = {
2594
2621
  title: { Start: 0, Comment: -10, MusicSelectRandom: -10 },
2595
2622
  dataMgt: { Back: 0, Environment: -35, Highscores: -35, CustomKey: -35, Others: -35 },
2596
2623
  precondition: { Back: 0 },
2597
- option: { Back: 0, KeyConfig: 0, Play: 0, Display: -5, Save: -10, Graph: -25 },
2598
- difSelector: {},
2599
- settingsDisplay: { Back: 0, KeyConfig: 0, Play: 0, Save: -10, Settings: -5 },
2600
- exSetting: { Back: 0, KeyConfig: 0, Play: 0, exSetting: -5, Save: -10 },
2624
+ option: { Back: 0, KeyConfig: 0, Play: 0, Display: -5, Save: -10, Graph: -25, SettingSummary: -10 },
2625
+ difSelector: { SettingSummary: -10 },
2626
+ settingsDisplay: { Back: 0, KeyConfig: 0, Play: 0, Save: -10, Settings: -5, SettingSummary: -10 },
2627
+ exSetting: { Back: 0, KeyConfig: 0, Play: 0, exSetting: -5, Save: -10, SettingSummary: -10 },
2601
2628
  loadingIos: { Play: 0 },
2602
2629
  keyConfig: { Back: -3, Play: 0 },
2603
2630
  result: { Back: -5, Copy: -5, Tweet: -5, Gitter: -5, Retry: 0, GaugeTransition: -15 },
@@ -4024,6 +4051,7 @@ const g_lblNameObj = {
4024
4051
  percent: `%`,
4025
4052
  pixel: `px`,
4026
4053
  filterLock: `Lock`,
4054
+ settingSummary: `Setting Summary`,
4027
4055
 
4028
4056
  sc_speed: `←→`,
4029
4057
  sc_scroll: `R/<br>↑↓`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "44.4.1",
3
+ "version": "44.5.1",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "./js/danoni_main.js",
6
6
  "scripts": {