danoniplus 44.4.1 → 44.5.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/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.0`;
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 = `#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
  /**
@@ -7931,6 +7981,10 @@ const setSetting = (_scrollNum, _settingName, _unitName = ``, _roundNum = 0, { f
7931
7981
  document.getElementById(`lnk${toCapitalize(_settingName)}`).textContent =
7932
7982
  `${getStgDetailName(g_stateObj[_settingName])}${_unitName}${g_localStorage[_settingName] === g_stateObj[_settingName] ? ' *' : ''}`;
7933
7983
  func();
7984
+
7985
+ if (document.getElementById(`settingSumSprite`) !== null) {
7986
+ updateSettingSummary();
7987
+ }
7934
7988
  };
7935
7989
 
7936
7990
  /**
@@ -7972,6 +8026,7 @@ const setReverse = _btn => {
7972
8026
  g_settings.reverseNum = (g_settings.reverseNum + 1) % 2;
7973
8027
  g_stateObj.reverse = g_settings.reverses[g_settings.reverseNum];
7974
8028
  setReverseView(_btn);
8029
+ updateSettingSummary();
7975
8030
  }
7976
8031
  };
7977
8032
 
@@ -8422,6 +8477,7 @@ const createSettingsDisplayWindow = _sprite => {
8422
8477
 
8423
8478
  withShortCutDesc();
8424
8479
  interlockingButton(g_headerObj, _name, nextBarColor, prevBarColor, true);
8480
+ updateSettingSummary();
8425
8481
  };
8426
8482
 
8427
8483
  // Displayボタン初期化
@@ -8488,11 +8544,14 @@ const createSettingsDisplayWindow = _sprite => {
8488
8544
 
8489
8545
  _btn.classList.replace(g_cssObj[`button_Rev${prevLock}`],
8490
8546
  g_cssObj[`button_Rev${g_stateObj.filterLock}`]);
8547
+ updateSettingSummary();
8491
8548
  };
8492
8549
 
8493
8550
  const appearanceSlider = document.getElementById(`appearanceSlider`);
8494
- appearanceSlider.addEventListener(`input`, () =>
8495
- g_hidSudObj.filterPos = inputSlider(appearanceSlider, lblAppearancePos, `appearance`), false);
8551
+ appearanceSlider.addEventListener(`input`, () => {
8552
+ g_hidSudObj.filterPos = inputSlider(appearanceSlider, lblAppearancePos, `appearance`);
8553
+ updateSettingSummary();
8554
+ }, false);
8496
8555
 
8497
8556
  const dispAppearanceSlider = () => {
8498
8557
  [`lblAppearanceBar`, `lnkLockBtn`, `lnkfilterLine`].forEach(obj =>
@@ -13476,8 +13535,8 @@ const changeAppearanceFilter = (_num = 10) => {
13476
13535
  addY(`filterBar${bottomNum + j}`, `appearance`, parseFloat($id(`arrowSprite${j + 1}`).top) + bottomDist);
13477
13536
 
13478
13537
  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);
13538
+ addY(`filterBar${bottomNum + j}_HS`, `appearance`, parseFloat($id(`arrowSprite${j}`).top) + bottomDist);
13539
+ addY(`filterBar${topNum + j}_HS`, `appearance`, parseFloat($id(`arrowSprite${j + 1}`).top) + topDist);
13481
13540
  }
13482
13541
  }
13483
13542
 
@@ -14273,87 +14332,7 @@ const resultInit = () => {
14273
14332
  const transKeyName = getTransKeyName();
14274
14333
  const orgShuffleFlg = g_keyObj[`shuffle${keyCtrlPtn}`].filter((shuffleGr, j) => shuffleGr !== g_keyObj[`shuffle${keyCtrlPtn}_0d`][j]).length === 0;
14275
14334
  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
- }
14335
+ const settingData = getSelectedSettingList(shuffleName);
14357
14336
 
14358
14337
  const [lblRX, dataRX] = [20, 60];
14359
14338
  multiAppend(playDataWindow,
@@ -14361,12 +14340,12 @@ const resultInit = () => {
14361
14340
  makeCssResultPlayData(`lblMusicData`, dataRX, g_cssObj.result_style, 0, mTitleForView[0]),
14362
14341
  makeCssResultPlayData(`lblMusicData2`, dataRX, g_cssObj.result_style, 1, mTitleForView[1]),
14363
14342
  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),
14343
+ makeCssResultPlayData(`lblDifData`, dataRX, g_cssObj.result_style, 2, settingData.difData),
14365
14344
  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),
14345
+ makeCssResultPlayData(`lblStyleData`, dataRX, g_cssObj.result_style, 3, settingData.playStyleData),
14367
14346
  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),
14347
+ makeCssResultPlayData(`lblDisplayData`, dataRX, g_cssObj.result_style, 4, settingData.displayData),
14348
+ makeCssResultPlayData(`lblDisplay2Data`, dataRX, g_cssObj.result_style, 5, settingData.display2Data),
14370
14349
  );
14371
14350
 
14372
14351
  // 設定項目が多い場合に2行に分解して表示する処理
@@ -14690,7 +14669,7 @@ const resultInit = () => {
14690
14669
  g_localStorage.highscores[scoreName].dateTime = currentDateTime;
14691
14670
  g_localStorage.highscores[scoreName].rankMark = rankMark;
14692
14671
  g_localStorage.highscores[scoreName].rankColor = rankColor;
14693
- g_localStorage.highscores[scoreName].playStyle = playStyleData;
14672
+ g_localStorage.highscores[scoreName].playStyle = settingData.playStyleData;
14694
14673
 
14695
14674
  g_localStorage.highscores[scoreName].fast = g_resultObj.fast;
14696
14675
  g_localStorage.highscores[scoreName].slow = g_resultObj.slow;
@@ -14764,6 +14743,7 @@ const resultInit = () => {
14764
14743
  // X (Twitter)用リザルト
14765
14744
  // スコアを上塗りする可能性があるため、カスタムイベント後に配置
14766
14745
  const hashTag = (hasVal(g_headerObj.hashTag) ? ` ${g_headerObj.hashTag}` : ``);
14746
+ const keyUnitName = getStgDetailName(getKeyUnitName(g_keyObj.currentKey));
14767
14747
  const keyUnitAbbName = keyUnitName.slice(0, 1) || ``;
14768
14748
  let tweetDifData = `${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyName}${getStgDetailName(keyUnitAbbName + '-')}${g_headerObj.difLabels[g_stateObj.scoreId]}${assistFlg}`;
14769
14749
  if (g_stateObj.shuffle !== `OFF`) {
@@ -14785,7 +14765,8 @@ const resultInit = () => {
14785
14765
  const resultParams = {
14786
14766
  tuning: g_headerObj.tuning,
14787
14767
  highscore: g_resultObj,
14788
- hashTag, musicTitle, tweetDifData, playStyleData, rankMark,
14768
+ playStyleData: settingData.playStyleData,
14769
+ hashTag, musicTitle, tweetDifData, rankMark,
14789
14770
  tweetExcessive, tweetFrzJdg, tweetMaxCombo, baseTwitUrl
14790
14771
  };
14791
14772
  let tweetResultTmp = makeResultText(g_headerObj.resultFormat, resultParams);
@@ -14832,13 +14813,13 @@ const resultInit = () => {
14832
14813
  drawText(unEscapeHtml(mTitleForView[1]), { hy: 2 });
14833
14814
  drawText(`${getEmojiForCanvas(g_emojiObj.memo)} ${unEscapeHtml(g_headerObj.tuning)} / ${getEmojiForCanvas(g_emojiObj.musical)} ${unEscapeHtml(artistName)}`,
14834
14815
  { hy: mTitleForView[1] !== `` ? 3 : 2, siz: 12 });
14835
- drawText(unEscapeHtml(difDataForImage), { hy: 4 });
14816
+ drawText(unEscapeHtml(settingData.difDataForImage), { hy: 4 });
14836
14817
 
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) });
14818
+ if (settingData.playStyleData.length > 60) {
14819
+ drawText(settingData.playStyleData.slice(0, playStyleBreakNum), { hy: 5, siz: getFontSize2(settingData.playStyleData.slice(0, playStyleBreakNum), 370) });
14820
+ drawText(settingData.playStyleData.slice(playStyleBreakNum), { hy: 6, siz: getFontSize2(settingData.playStyleData.slice(playStyleBreakNum), 370) });
14840
14821
  } else {
14841
- drawText(playStyleData, { hy: 5, siz: getFontSize2(lblStyleData.textContent, 370, { maxSiz: 15 }) });
14822
+ drawText(settingData.playStyleData, { hy: 5, siz: getFontSize2(settingData.playStyleData, 370, { maxSiz: 15 }) });
14842
14823
  }
14843
14824
  Object.keys(jdgScoreObj).forEach(score => {
14844
14825
  drawText(g_lblNameObj[`j_${score}`], { hy: 7 + jdgScoreObj[score].pos, color: jdgScoreObj[score].dfColor });
@@ -14983,7 +14964,7 @@ const resultInit = () => {
14983
14964
  makeResultSprite.style.pointerEvents = g_headerObj.maskresultButton ? C_DIS_AUTO : C_DIS_NONE;
14984
14965
 
14985
14966
  // リザルトモーションの0フレーム対応
14986
- g_animationData.filter(sprite => g_scoreObj[`${sprite}ResultFrameNum`] === 0 && g_headerObj[`${sprite}ResultData`][0] !== undefined)
14967
+ g_animationData.filter(sprite => g_scoreObj[`${sprite}ResultFrameNum`] === 0 && g_headerObj[`${sprite}ResultData`]?.[0] !== undefined)
14987
14968
  .forEach(sprite => {
14988
14969
  g_scoreObj[`${sprite}ResultFrameNum`] = g_animationFunc.draw[sprite](0, `result`, sprite);
14989
14970
  g_headerObj[`${sprite}ResultData`][0] = undefined;
@@ -15032,6 +15013,99 @@ const resultInit = () => {
15032
15013
  g_skinJsObj.result.forEach(func => func());
15033
15014
  };
15034
15015
 
15016
+ /**
15017
+ * 選択した設定の情報を取得
15018
+ * @param {string} _shuffleName
15019
+ * @returns {object}
15020
+ */
15021
+ const getSelectedSettingList = (_shuffleName) => {
15022
+
15023
+ const transKeyName = getTransKeyName();
15024
+ /**
15025
+ * プレイスタイルのカスタム有無
15026
+ * @param {string} _flg
15027
+ * @param {string|boolean} _defaultSet デフォルト値
15028
+ * @param {string} _displayText
15029
+ * @returns {string}
15030
+ */
15031
+ const withOptions = (_flg, _defaultSet, _displayText = _flg) =>
15032
+ (_flg !== _defaultSet ? getStgDetailName(_displayText) : ``);
15033
+
15034
+ const withDisplays = (_flg, _defaultSet, _displayText = _flg) =>
15035
+ (_flg !== _defaultSet
15036
+ ? getStgDetailName(_displayText) + (_flg === C_FLG_OFF ? `` : ` : ${getStgDetailName(_flg)}`) : ``);
15037
+
15038
+ // 譜面名の組み立て処理 (Ex: 9Akey / Normal-Leftless (maker) [X-Mirror])
15039
+ const keyUnitName = getStgDetailName(getKeyUnitName(g_keyObj.currentKey));
15040
+ const difDatas = [
15041
+ `${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyName} ${keyUnitName} / ${g_headerObj.difLabels[g_stateObj.scoreId]}`,
15042
+ `${withOptions(g_autoPlaysBase.includes(g_stateObj.autoPlay), true, `-${getStgDetailName(g_stateObj.autoPlay)}${getStgDetailName('less')}`)}`,
15043
+ `${withOptions(g_headerObj.makerView, false, `(${g_headerObj.creatorNames[g_stateObj.scoreId]})`)}`,
15044
+ `${withOptions(g_stateObj.shuffle, C_FLG_OFF, `[${_shuffleName}]`)}`
15045
+ ];
15046
+ let difData = difDatas.filter(value => value !== ``).join(` `);
15047
+ const difDataForImage = difDatas.filter((value, j) => value !== `` && j !== 2).join(` `);
15048
+
15049
+ // 設定の組み立て処理 (Ex: 4x, Brake, Reverse, Sudden+, NoRecovery)
15050
+ let playStyleData = [
15051
+ `${g_stateObj.speed}${g_lblNameObj.multi}`,
15052
+ withOptions(g_stateObj.motion, C_FLG_OFF),
15053
+ `${withOptions(g_stateObj.reverse, C_FLG_OFF,
15054
+ getStgDetailName(g_stateObj.scroll !== '---' ? 'R-' : 'Reverse'))}${withOptions(g_stateObj.scroll, '---')}`,
15055
+ withOptions(g_stateObj.appearance, `Visible`) +
15056
+ ((g_appearanceRanges.includes(g_stateObj.appearance) && g_stateObj.filterLock === C_FLG_ON) ? `(${g_hidSudObj.filterPos}%)` : ``),
15057
+ withOptions(g_stateObj.gauge, g_settings.gauges[0]),
15058
+ withOptions(g_stateObj.playWindow, `Default`),
15059
+ withOptions(g_stateObj.stepArea, `Default`),
15060
+ withOptions(g_stateObj.frzReturn, C_FLG_OFF, `FR:${g_stateObj.frzReturn}`),
15061
+ withOptions(g_stateObj.shaking, C_FLG_OFF),
15062
+ withOptions(g_stateObj.effect, C_FLG_OFF),
15063
+ withOptions(g_stateObj.camoufrage, C_FLG_OFF, `Cmf:${g_stateObj.camoufrage}`),
15064
+ withOptions(g_stateObj.swapping, C_FLG_OFF, `Swap:${g_stateObj.swapping}`),
15065
+ withOptions(g_stateObj.judgRange, `Normal`, `Judg:${g_stateObj.judgRange}`),
15066
+ ].filter(value => value !== ``).join(`, `);
15067
+
15068
+ // Display設定の組み立て処理 (Ex: Step : FlatBar, Judge, Life : OFF)
15069
+ let displayData = [
15070
+ withDisplays(g_stateObj.d_stepzone, C_FLG_ON, g_lblNameObj.rd_StepZone),
15071
+ withDisplays(g_stateObj.d_judgment, C_FLG_ON, g_lblNameObj.rd_Judgment),
15072
+ withDisplays(g_stateObj.d_fastslow, C_FLG_ON, g_lblNameObj.rd_FastSlow),
15073
+ withDisplays(g_stateObj.d_lifegauge, C_FLG_ON, g_lblNameObj.rd_LifeGauge),
15074
+ withDisplays(g_stateObj.d_score, C_FLG_ON, g_lblNameObj.rd_Score),
15075
+ withDisplays(g_stateObj.d_musicinfo, C_FLG_ON, g_lblNameObj.rd_MusicInfo),
15076
+ withDisplays(g_stateObj.d_filterline, C_FLG_ON, g_lblNameObj.rd_FilterLine),
15077
+ ].filter(value => value !== ``).join(`, `);
15078
+ if (displayData === ``) {
15079
+ displayData = `All Visible`;
15080
+ } else {
15081
+ // 表示設定のOFF項目を末尾にまとめる
15082
+ const displayList = displayData.split(`, `).sort((a, b) => b.includes(`:`) - a.includes(`:`));
15083
+ displayData = displayList.join(`, `);
15084
+ if (!displayList.at(-1).includes(`:`)) {
15085
+ displayData += ` : ${getStgDetailName(C_FLG_OFF)}`;
15086
+ }
15087
+ }
15088
+
15089
+ let display2Data = [
15090
+ withDisplays(g_stateObj.d_speed, C_FLG_ON, g_lblNameObj.rd_Speed),
15091
+ withDisplays(g_stateObj.d_color, C_FLG_ON, g_lblNameObj.rd_Color),
15092
+ withDisplays(g_stateObj.d_lyrics, C_FLG_ON, g_lblNameObj.rd_Lyrics),
15093
+ withDisplays(g_stateObj.d_background, C_FLG_ON, g_lblNameObj.rd_Background),
15094
+ withDisplays(g_stateObj.d_arroweffect, C_FLG_ON, g_lblNameObj.rd_ArrowEffect),
15095
+ withDisplays(g_stateObj.d_special, C_FLG_ON, g_lblNameObj.rd_Special),
15096
+ ].filter(value => value !== ``).join(`, `);
15097
+ if (display2Data !== ``) {
15098
+ // 表示設定のOFF項目を末尾にまとめる
15099
+ const display2List = display2Data.split(`, `).sort((a, b) => b.includes(`:`) - a.includes(`:`));
15100
+ display2Data = display2List.join(`, `);
15101
+ if (!display2List.at(-1).includes(`:`)) {
15102
+ display2Data += ` : ${getStgDetailName(C_FLG_OFF)}`;
15103
+ }
15104
+ }
15105
+
15106
+ return { difData, difDataForImage, playStyleData, displayData, display2Data };
15107
+ };
15108
+
15035
15109
  /**
15036
15110
  * リザルトフォーマットの整形処理
15037
15111
  * @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.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "./js/danoni_main.js",
6
6
  "scripts": {