danoniplus 50.5.2 → 51.0.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.
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2026/09/13
8
- * Revised : 2026/09/23 (v50.5.2)
8
+ * Revised : 2026/09/23 (v51.0.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -115,11 +115,17 @@ const updateSettingSummary = () => {
115
115
  if (document.getElementById(`settingSumSprite`) === null) return;
116
116
  const orgShuffleFlg = getOrgShuffleFlg();
117
117
  const settingData = getSelectedSettingList(orgShuffleFlg);
118
- const estimatedHighscoreCondition = g_stateObj.dataSaveFlg && (g_stateObj.autoPlay !== C_FLG_ALL && g_headerObj.playbackRate === 1 && g_stateObj.fadein < 10 &&
119
- (g_stateObj.shuffle === C_FLG_OFF || (g_stateObj.shuffle.endsWith(`Mirror`) && orgShuffleFlg)));
120
-
121
- document.getElementById(`lblSummaryDifInfo`).innerHTML = settingData.difData + `${estimatedHighscoreCondition ? '' : ` | <span class="common_auto common_bold">No Records</span>`}`;
122
- document.getElementById(`lblSummaryPlaystyleInfo`).textContent = settingData.playStyleData + `${g_stateObj.excessive === C_FLG_ON ? ' | Excessive' : ''}`;
118
+ const estimatedHighscoreCondition =
119
+ g_stateObj.dataSaveFlg &&
120
+ g_stateObj.autoPlay !== C_FLG_ALL &&
121
+ g_headerObj.playbackRate === 1 &&
122
+ g_stateObj.fadein < 10 &&
123
+ (g_stateObj.shuffle === C_FLG_OFF || (g_stateObj.shuffle.endsWith(`Mirror`) && orgShuffleFlg));
124
+
125
+ document.getElementById(`lblSummaryDifInfo`).innerHTML =
126
+ settingData.difData + `${estimatedHighscoreCondition ? '' : ` | <span class="common_auto common_bold">No Records</span>`}`;
127
+ document.getElementById(`lblSummaryPlaystyleInfo`).textContent =
128
+ settingData.playStyleData + `${g_stateObj.excessive === C_FLG_ON ? ' | Excessive' : ''}`;
123
129
  document.getElementById(`lblSummaryDisplayInfo`).textContent = settingData.displayData;
124
130
  document.getElementById(`lblSummaryDisplay2Info`).textContent = settingData.display2Data;
125
131
  document.getElementById(`lblSummaryEnvironment`).textContent =
@@ -585,8 +591,12 @@ const drawDensityGraph = _scoreId => {
585
591
  for (let j = 0; j < g_limitObj.densityDivision; j++) {
586
592
  context.beginPath();
587
593
  [``, `2Push`, `3Push`].forEach(val => {
588
- context.fillStyle = (g_detailObj.maxDensity[_scoreId].includes(j) ? g_graphColorObj[`max${val}`] : g_graphColorObj[`default${val}`]);
589
- context.fillRect(16 * j * 16 / g_limitObj.densityDivision + 30, 195 - 9 * g_detailObj[`density${val}Data`][_scoreId][j] / 10,
594
+ context.fillStyle = (g_detailObj.maxDensity[_scoreId].includes(j)
595
+ ? g_graphColorObj[`max${val}`]
596
+ : g_graphColorObj[`default${val}`]
597
+ );
598
+ context.fillRect(16 * j * 16 / g_limitObj.densityDivision + 30,
599
+ 195 - 9 * g_detailObj[`density${val}Data`][_scoreId][j] / 10,
590
600
  15.5 * 16 / g_limitObj.densityDivision, 9 * g_detailObj[`density${val}Diff`][_scoreId][j] / 10
591
601
  );
592
602
  });
@@ -610,7 +620,8 @@ const drawDensityGraph = _scoreId => {
610
620
  updateScoreDetailLabel(`Density`, `APM`, obj.apm, 0, g_lblNameObj.s_apm);
611
621
  updateScoreDetailLabel(`Density`, `Time`, obj.playingTime, 1, g_lblNameObj.s_time);
612
622
  updateScoreDetailLabel(`Density`, `Arrow`, obj.arrowCnts, 3, g_lblNameObj.s_arrow);
613
- updateScoreDetailLabel(`Density`, `Frz`, obj.frzCnts, 4, `${g_lblNameObj.s_frz}${g_headerObj.frzStartjdgUse ? ' <span class="common_bold">(2x)</span>' : ''}`);
623
+ updateScoreDetailLabel(`Density`, `Frz`, obj.frzCnts, 4,
624
+ `${g_lblNameObj.s_frz}${g_headerObj.frzStartjdgUse ? ' <span class="common_bold">(2x)</span>' : ''}`);
614
625
  };
615
626
 
616
627
  /**
@@ -759,7 +770,10 @@ const makeDifInfo = _scoreId => {
759
770
 
760
771
  const arrowCnts = sumData(g_detailObj.arrowCnt[_scoreId]);
761
772
  const frzCnts = sumData(g_detailObj.frzCnt[_scoreId].map(val => Math.floor(val)));
762
- const push3CntStr = (g_detailObj.toolDif[_scoreId].push3.length === 0 ? `None` : `(${g_detailObj.toolDif[_scoreId].push3.join(', ')})`);
773
+ const push3CntStr = (g_detailObj.toolDif[_scoreId].push3.length === 0
774
+ ? `None`
775
+ : `(${g_detailObj.toolDif[_scoreId].push3.join(', ')})`
776
+ );
763
777
 
764
778
  if (document.getElementById(`lblTooldif`) === null) {
765
779
  makeDifInfoLabels(_scoreId);
@@ -769,8 +783,11 @@ const makeDifInfo = _scoreId => {
769
783
  dataTate.textContent = g_detailObj.toolDif[_scoreId].tate;
770
784
  lblArrowInfo2.innerHTML = g_lblNameObj.s_linecnts.split(`{0}`)
771
785
  .join(`${makeDedupliArray(g_detailObj.toolDif[_scoreId].push3).length} /cnt:${g_detailObj.toolDif[_scoreId].push3cnt}`);
772
- dataArrowInfo.innerHTML = `${arrowCnts + frzCnts * (g_headerObj.frzStartjdgUse ? 2 : 1)}
773
- <span style="font-size:${wUnit(g_limitObj.difSelectorSiz)};">(${arrowCnts} + ${frzCnts}${g_headerObj.frzStartjdgUse ? ' <span class="common_bold">x 2</span>' : ''})</span>`;
786
+ dataArrowInfo.innerHTML =
787
+ `${arrowCnts + frzCnts * (g_headerObj.frzStartjdgUse ? 2 : 1)} ` +
788
+ `<span style="font-size:${wUnit(g_limitObj.difSelectorSiz)};">` +
789
+ `(${arrowCnts} + ${frzCnts}${g_headerObj.frzStartjdgUse ? ' <span class="common_bold">x 2</span>' : ''})` +
790
+ `</span>`;
774
791
 
775
792
  const makeArrowCntsView = (_cntlist) => {
776
793
  const targetKey = g_headerObj.keyLabels[_scoreId];
@@ -789,8 +806,9 @@ const makeDifInfo = _scoreId => {
789
806
  cntlistStr += `[ `;
790
807
  array.forEach((val, j) => {
791
808
  if (maxVal !== minVal) {
792
- array[j] = (val === minVal ? `<span class="settings_minArrowCnts">${val}</span>` :
793
- (val === maxVal ? `<span class="settings_maxArrowCnts common_bold">${val}</span>` : val));
809
+ array[j] = (val === minVal
810
+ ? `<span class="settings_minArrowCnts">${val}</span>`
811
+ : (val === maxVal ? `<span class="settings_maxArrowCnts common_bold">${val}</span>` : val));
794
812
  }
795
813
  if (val - Math.floor(val) > 0) {
796
814
  array[j] = `<span class="keyconfig_warning">${val}</span>`;
@@ -840,7 +858,9 @@ const makeHighScore = _scoreId => {
840
858
  }
841
859
  }
842
860
 
843
- const createScoreLabel = (_id, _text, { xPos = 0, yPos = 0, dx = 0, w = 150, h = 17, colorName = _id, align = C_ALIGN_LEFT, overflow = `visible` } = {}) =>
861
+ const createScoreLabel = (_id, _text, {
862
+ xPos = 0, yPos = 0, dx = 0, w = 150, h = 17, colorName = _id, align = C_ALIGN_LEFT, overflow = `visible`
863
+ } = {}) =>
844
864
  createDivCss2Label(`lblH${toCapitalize(_id)}`, _text, {
845
865
  x: xPos * 150 + 130 + dx, y: yPos * 16 + 5, w, h, siz: 14, align, overflow,
846
866
  }, g_cssObj[`common_${colorName}`]);
@@ -898,12 +918,24 @@ const makeHighScore = _scoreId => {
898
918
  createScoreLabel(`lblHMarks`,
899
919
  `${g_localStorage.highscores?.[scoreName]?.fullCombo ?? '' ? '<span class="result_FullCombo">◆</span>' : ''}` +
900
920
  `${g_localStorage.highscores?.[scoreName]?.perfect ?? '' ? '<span class="result_Perfect">◆</span>' : ''}` +
901
- `${g_localStorage.highscores?.[scoreName]?.allPerfect ?? '' ? '<span class="result_AllPerfect">◆</span>' : ''}`, { xPos: 1, dx: 20, yPos: 12, w: 100, align: C_ALIGN_CENTER }),
902
- createScoreLabel(`lblHClearLamps`, `Cleared: ` + (g_localStorage.highscores?.[scoreName]?.clearLamps?.join(', ') ?? C_FLG_HYPHEN), { yPos: 13, overflow: C_DIS_AUTO, w: g_sWidth / 2 + 40, h: 37 }),
903
-
904
- createScoreLabel(`lblHShuffle`, g_stateObj.shuffle.indexOf(`Mirror`) < 0 ? `` : `Shuffle: <span class="common_shuffle">${g_stateObj.shuffle}</span>`, { yPos: 11.5, dx: -130 }),
905
- createScoreLabel(`lblHAssist`, g_autoPlaysBase.includes(g_stateObj.autoPlay) ? `` : `Assist: <span class="common_assist">${g_stateObj.autoPlay}</span>`, { yPos: 12.5, dx: -130 }),
906
- createScoreLabel(`lblHAnother`, !hasVal(g_keyObj[`transKey${keyCtrlPtn}`]) ? `` : `A.Keymode: <span class="common_another">${g_keyObj[`transKey${keyCtrlPtn}`]}</span>`, { yPos: 13.5, dx: -130 }),
921
+ `${g_localStorage.highscores?.[scoreName]?.allPerfect ?? '' ? '<span class="result_AllPerfect">◆</span>' : ''}`,
922
+ { xPos: 1, dx: 20, yPos: 12, w: 100, align: C_ALIGN_CENTER }),
923
+ createScoreLabel(`lblHClearLamps`,
924
+ `Cleared: ` + (g_localStorage.highscores?.[scoreName]?.clearLamps?.join(', ') ?? C_FLG_HYPHEN),
925
+ { yPos: 13, overflow: C_DIS_AUTO, w: g_sWidth / 2 + 40, h: 37 }),
926
+
927
+ createScoreLabel(`lblHShuffle`,
928
+ g_stateObj.shuffle.indexOf(`Mirror`) < 0
929
+ ? `` : `Shuffle: <span class="common_shuffle">${g_stateObj.shuffle}</span>`,
930
+ { yPos: 11.5, dx: -130 }),
931
+ createScoreLabel(`lblHAssist`,
932
+ g_autoPlaysBase.includes(g_stateObj.autoPlay)
933
+ ? `` : `Assist: <span class="common_assist">${g_stateObj.autoPlay}</span>`,
934
+ { yPos: 12.5, dx: -130 }),
935
+ createScoreLabel(`lblHAnother`,
936
+ !hasVal(g_keyObj[`transKey${keyCtrlPtn}`])
937
+ ? `` : `A.Keymode: <span class="common_another">${g_keyObj[`transKey${keyCtrlPtn}`]}</span>`,
938
+ { yPos: 13.5, dx: -130 }),
907
939
  );
908
940
 
909
941
  // 結果をクリップボードへコピー (ハイスコア保存分)
@@ -1297,17 +1329,18 @@ const applyTransKeySelfPattern = () => {
1297
1329
  * - [キーコン]->[初期化]->[名称設定]の順に配置する。
1298
1330
  * 初期化処理にてキー数関連の設定を行っているため、この順序で無いとデータが正しく格納されない
1299
1331
  *
1300
- * @param {boolean} _initFlg
1332
+ * @param {boolean} _chartChangeFlg
1301
1333
  */
1302
- const setDifficulty = (_initFlg) => {
1334
+ const setDifficulty = (_chartChangeFlg) => {
1335
+ const scoreId = g_stateObj.scoreId;
1303
1336
 
1304
1337
  // ---------------------------------------------------
1305
1338
  // 1. キーコンフィグ設定 (KeyConfig)
1306
- g_keyObj.currentKey = g_headerObj.keyLabels[g_stateObj.scoreId];
1339
+ g_keyObj.currentKey = g_headerObj.keyLabels[scoreId];
1307
1340
  const isNotSameKey = (g_keyObj.prevKey !== g_keyObj.currentKey);
1308
1341
 
1309
1342
  if (g_headerObj.dummyScoreNos !== undefined) {
1310
- g_stateObj.dummyId = setIntVal(g_headerObj.dummyScoreNos[g_stateObj.scoreId], ``);
1343
+ g_stateObj.dummyId = setIntVal(g_headerObj.dummyScoreNos[scoreId], ``);
1311
1344
  }
1312
1345
  // 特殊キーフラグ
1313
1346
  g_stateObj.extraKeyFlg = g_headerObj.keyExtraList.includes(g_keyObj.currentKey);
@@ -1317,13 +1350,15 @@ const setDifficulty = (_initFlg) => {
1317
1350
 
1318
1351
  // 保存した設定の再読込条件(設定画面切り替え時はスキップ)
1319
1352
  // ローカルストレージで保存した設定を呼び出し
1320
- if ((g_canLoadDifInfoFlg && (isNotSameKey && g_stateObj.dataSaveFlg)) || _initFlg) {
1353
+ let keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
1354
+ if ((g_canLoadDifInfoFlg && (isNotSameKey && g_stateObj.dataSaveFlg)) || _chartChangeFlg) {
1321
1355
 
1322
1356
  if (isNotSameKey && g_keyObj.prevKey !== `Dummy`) {
1323
1357
  // キーパターン初期化
1324
1358
  g_keyObj.currentPtn = 0;
1325
1359
  g_keycons.keySwitchNum = 0;
1326
1360
  }
1361
+ keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
1327
1362
  const [storageObj, addKey] = getKeyStorageObjByName(g_keyObj.currentKey);
1328
1363
  if (isNotSameKey) {
1329
1364
  if (!g_stateObj.extraKeyFlg) {
@@ -1353,8 +1388,6 @@ const setDifficulty = (_initFlg) => {
1353
1388
  g_keycons.colorTypes = g_keycons.colorTypes.filter(val => val !== g_keycons.colorSelf);
1354
1389
  }
1355
1390
 
1356
- const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
1357
-
1358
1391
  // カラーグループ、シャッフルグループの設定
1359
1392
  g_keycons.groups.forEach(type => {
1360
1393
  resetGroupList(type, keyCtrlPtn);
@@ -1376,21 +1409,24 @@ const setDifficulty = (_initFlg) => {
1376
1409
 
1377
1410
  // スクロール設定用の配列を入れ替え
1378
1411
  g_settings.scrolls = structuredClone(
1379
- typeof g_keyObj[`scrollDir${g_keyObj.currentKey}_${g_keyObj.currentPtn}`] === C_TYP_OBJECT ?
1380
- Object.keys(g_keyObj[`scrollDir${g_keyObj.currentKey}_${g_keyObj.currentPtn}`]) : g_keyObj.scrollName_def
1412
+ typeof g_keyObj[`scrollDir${keyCtrlPtn}`] === C_TYP_OBJECT
1413
+ ? Object.keys(g_keyObj[`scrollDir${keyCtrlPtn}`])
1414
+ : g_keyObj.scrollName_def
1381
1415
  );
1382
1416
 
1383
1417
  // アシスト設定の配列を入れ替え
1384
- g_settings.autoPlays = (typeof g_keyObj[`assistPos${g_keyObj.currentKey}_${g_keyObj.currentPtn}`] === C_TYP_OBJECT ?
1385
- g_autoPlaysBase.concat(Object.keys(g_keyObj[`assistPos${g_keyObj.currentKey}_${g_keyObj.currentPtn}`])) :
1386
- g_autoPlaysBase.concat());
1418
+ g_settings.autoPlays = (
1419
+ typeof g_keyObj[`assistPos${keyCtrlPtn}`] === C_TYP_OBJECT
1420
+ ? g_autoPlaysBase.concat(Object.keys(g_keyObj[`assistPos${keyCtrlPtn}`]))
1421
+ : g_autoPlaysBase.concat()
1422
+ );
1387
1423
 
1388
1424
  // ゲージ設定及びカーソル位置調整
1389
1425
  setGauge(0, !g_canLoadDifInfoFlg);
1390
1426
 
1391
1427
  // 速度、スクロール、アシスト設定のカーソル位置調整
1392
- if (_initFlg) {
1393
- g_stateObj.speed = g_headerObj.initSpeeds[g_stateObj.scoreId];
1428
+ if (_chartChangeFlg) {
1429
+ g_stateObj.speed = g_headerObj.initSpeeds[scoreId];
1394
1430
  g_settings.speedNum = getCurrentNo(g_settings.speeds, g_stateObj.speed);
1395
1431
  }
1396
1432
  g_settings.scrollNum = getCurrentNo(g_settings.scrolls, g_stateObj.scroll);
@@ -1398,8 +1434,9 @@ const setDifficulty = (_initFlg) => {
1398
1434
 
1399
1435
 
1400
1436
  // 選択中のキーのヘルプ表示
1401
- const targetKeymode = hasVal(g_keyObj[`transKey${g_keyObj.currentKey}_${g_keyObj.currentPtn}`])
1402
- ? g_keyObj[`transKey${g_keyObj.currentKey}_${g_keyObj.currentPtn}`] : g_keyObj.currentKey;
1437
+ const targetKeymode = hasVal(g_keyObj[`transKey${keyCtrlPtn}`])
1438
+ ? g_keyObj[`transKey${keyCtrlPtn}`]
1439
+ : g_keyObj.currentKey;
1403
1440
  btnKeymodeHelp.classList.remove(g_cssObj.button_Setting, g_cssObj.button_Tweet);
1404
1441
  btnKeymodeHelp.classList.add(
1405
1442
  g_cssObj[`button_${targetKeymode !== g_keyObj.currentKey
@@ -1419,14 +1456,14 @@ const setDifficulty = (_initFlg) => {
1419
1456
  const keyUnitName = getStgDetailName(getKeyUnitName(g_keyObj.currentKey));
1420
1457
 
1421
1458
  const prefix = `${getKeyName(g_keyObj.currentKey)}${transKeyName} ${keyUnitName} / `;
1422
- let difLabel = `${g_headerObj.difLabels[g_stateObj.scoreId]}`;
1459
+ let difLabel = `${g_headerObj.difLabels[scoreId]}`;
1423
1460
 
1424
1461
  const [difName, difSiz] = getFontSizeMulti(difLabel, difWidth, { maxSiz: g_limitObj.setLblSiz, prefix });
1425
1462
  lnkDifficulty.style.fontSize = wUnit(difSiz);
1426
1463
 
1427
1464
  const difNames = [difName];
1428
1465
  if (g_headerObj.makerView) {
1429
- difNames.push(`(${g_headerObj.creatorNames[g_stateObj.scoreId]})`);
1466
+ difNames.push(`(${g_headerObj.creatorNames[scoreId]})`);
1430
1467
  difNames.forEach((difName, j) => {
1431
1468
  const tmpSize = getFontSize2(difName, difWidth);
1432
1469
  difNames[j] = `<span style="font-size:${wUnit(tmpSize)}">${difName}</span>`;
@@ -1461,28 +1498,28 @@ const setDifficulty = (_initFlg) => {
1461
1498
  lnkAutoPlay.textContent = getStgDetailName(g_stateObj.autoPlay);
1462
1499
 
1463
1500
  // 譜面毎のExcessive再設定(意図的に変更した場合のみ元に戻さない)
1464
- if (g_canLoadDifInfoFlg && (g_stateObj.excessiveScoreId !== g_stateObj.scoreId)) {
1465
- g_headerObj.excessiveJdgUse = g_headerObj.excessiveJdgUses[g_stateObj.scoreId];
1501
+ if (g_canLoadDifInfoFlg && (g_stateObj.excessiveScoreId !== scoreId)) {
1502
+ g_headerObj.excessiveJdgUse = g_headerObj.excessiveJdgUses[scoreId];
1466
1503
  g_stateObj.excessive = boolToSwitch(g_headerObj.excessiveJdgUse);
1467
1504
  }
1468
- g_headerObj.excessiveUse = g_headerObj.excessiveUses[g_stateObj.scoreId];
1505
+ g_headerObj.excessiveUse = g_headerObj.excessiveUses[scoreId];
1469
1506
  if (g_headerObj.excessiveUse) {
1470
1507
  setExcessive(document.getElementById(`lnkExcessive`), g_stateObj.excessive === C_FLG_ON);
1471
1508
  lblExcessive.style.display = C_DIS_NONE;
1472
1509
  lnkExcessive.style.display = C_DIS_INHERIT;
1473
1510
  } else {
1474
1511
  g_stateObj.excessiveChgFlg = false;
1475
- lblExcessive.style.display = (g_headerObj.excessiveJdgUses[g_stateObj.scoreId] ? C_DIS_INHERIT : C_DIS_NONE);
1512
+ lblExcessive.style.display = (g_headerObj.excessiveJdgUses[scoreId] ? C_DIS_INHERIT : C_DIS_NONE);
1476
1513
  lnkExcessive.style.display = C_DIS_NONE;
1477
1514
  }
1478
1515
 
1479
1516
  // 譜面明細画面の再描画
1480
1517
  if (g_settings.scoreDetails.length > 0) {
1481
- drawSpeedGraph(g_stateObj.scoreId);
1482
- drawDensityGraph(g_stateObj.scoreId);
1483
- makeDifInfo(g_stateObj.scoreId);
1484
- makeHighScore(g_stateObj.scoreId);
1485
- drawMinimap(g_stateObj.scoreId, { _initFlg: true });
1518
+ drawSpeedGraph(scoreId);
1519
+ drawDensityGraph(scoreId);
1520
+ makeDifInfo(scoreId);
1521
+ makeHighScore(scoreId);
1522
+ drawMinimap(scoreId, { _initFlg: true });
1486
1523
  }
1487
1524
 
1488
1525
  // 楽曲データの表示
@@ -1490,7 +1527,7 @@ const setDifficulty = (_initFlg) => {
1490
1527
  lblMusicInfo.style.fontSize = wUnit(getFontSize2(lblMusicInfo.textContent, g_btnWidth(3 / 4), { maxSiz: 12 }));
1491
1528
 
1492
1529
  // ユーザカスタムイベント(初期)
1493
- safeExecuteCustomHooks(`g_customJsObj.difficulty`, g_customJsObj.difficulty, _initFlg, g_canLoadDifInfoFlg);
1530
+ safeExecuteCustomHooks(`g_customJsObj.difficulty`, g_customJsObj.difficulty, _chartChangeFlg, g_canLoadDifInfoFlg);
1494
1531
  resolveKeyFamily();
1495
1532
 
1496
1533
  // 設定サマリー表示の更新
@@ -1613,8 +1650,9 @@ const createOptionWindow = _sprite => {
1613
1650
  }
1614
1651
  multiAppend(difficultySprite,
1615
1652
  createCss2Button(`btnKeymodeHelp`, `?`, () => {
1616
- const targetKeymode = hasVal(g_keyObj[`transKey${g_keyObj.currentKey}_${g_keyObj.currentPtn}`])
1617
- ? g_keyObj[`transKey${g_keyObj.currentKey}_${g_keyObj.currentPtn}`] : g_keyObj.currentKey;
1653
+ const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
1654
+ const targetKeymode = hasVal(g_keyObj[`transKey${keyCtrlPtn}`])
1655
+ ? g_keyObj[`transKey${keyCtrlPtn}`] : g_keyObj.currentKey;
1618
1656
  openLink(
1619
1657
  g_keyObj.defaultKeyList.includes(targetKeymode)
1620
1658
  ? g_lblNameObj.keymodeUrl + targetKeymode
@@ -1698,7 +1736,8 @@ const createOptionWindow = _sprite => {
1698
1736
  // 選択先を表示、ボタン色を選択中に変更
1699
1737
  // Qキーを押したときのリンク先を次の明細へ変更
1700
1738
  g_stateObj.scoreDetail = g_settings.scoreDetails[_val];
1701
- [`option`, `difSelector`, `scoreDetail`].forEach(page => g_shortcutObj[page].KeyQ.id = g_settings.scoreDetailCursors[nextPos(_val, 1, g_settings.scoreDetailCursors.length)]);
1739
+ [`option`, `difSelector`, `scoreDetail`].forEach(page =>
1740
+ g_shortcutObj[page].KeyQ.id = g_settings.scoreDetailCursors[nextPos(_val, 1, g_settings.scoreDetailCursors.length)]);
1702
1741
  g_shortcutObj.scoreDetail.ArrowDown.id = g_settings.scoreDetailCursorsOrg[nextPos(_val, 1, g_settings.scoreDetailCursorsOrg.length)];
1703
1742
  g_shortcutObj.scoreDetail.ArrowUp.id = g_settings.scoreDetailCursorsOrg[nextPos(_val, -1, g_settings.scoreDetailCursorsOrg.length)];
1704
1743
 
@@ -1858,8 +1897,10 @@ const createOptionWindow = _sprite => {
1858
1897
  createDivCss2Label(`lnkAdjustment2`, ``, g_lblPosObj.lnkAdjustment2),
1859
1898
  );
1860
1899
  }
1861
- document.getElementById(`lnkAdjustment1`).textContent = `${adjustmentVal}${g_lblNameObj.frame}`;
1862
- document.getElementById(`lnkAdjustment2`).textContent = `(${g_stateObj.adjustment.toFixed(1)}${g_localStorage.adjustment === g_stateObj.adjustment ? '*' : ''})`;
1900
+ document.getElementById(`lnkAdjustment1`).textContent =
1901
+ `${adjustmentVal}${g_lblNameObj.frame}`;
1902
+ document.getElementById(`lnkAdjustment2`).textContent =
1903
+ `(${g_stateObj.adjustment.toFixed(1)}${g_localStorage.adjustment === g_stateObj.adjustment ? '*' : ''})`;
1863
1904
  }
1864
1905
  };
1865
1906
  viewAdjustment();
@@ -1984,8 +2025,10 @@ const createGeneralSetting = (_obj, _settingName, { unitName = ``,
1984
2025
  // 右回し・左回しボタン(不可視)
1985
2026
  if (hiddenBtn) {
1986
2027
  multiAppend(_obj,
1987
- makeMiniCssButton(linkId, `HR`, 0, () => setSetting(1, _settingName, { func: () => addRFunc(), unitName, roundNum }), { visibility: `hidden` }),
1988
- makeMiniCssButton(linkId, `HL`, 0, () => setSetting(-1, _settingName, { func: () => addLFunc(), unitName, roundNum }), { visibility: `hidden` }),
2028
+ makeMiniCssButton(linkId, `HR`, 0, () =>
2029
+ setSetting(1, _settingName, { func: () => addRFunc(), unitName, roundNum }), { visibility: `hidden` }),
2030
+ makeMiniCssButton(linkId, `HL`, 0, () =>
2031
+ setSetting(-1, _settingName, { func: () => addLFunc(), unitName, roundNum }), { visibility: `hidden` }),
1989
2032
  );
1990
2033
  }
1991
2034
 
@@ -2054,7 +2097,8 @@ const setSetting = (_scrollNum, _settingName, { func = () => true, unitName = ``
2054
2097
  g_stateObj[_settingName] = settingList[settingNum];
2055
2098
  g_settings[`${_settingName}Num`] = settingNum;
2056
2099
 
2057
- const settingName = `${getStgDetailName(g_stateObj[_settingName])}${unitName}${g_localStorage[_settingName] === g_stateObj[_settingName] ? ' *' : ''}`;
2100
+ const settingName = `${getStgDetailName(g_stateObj[_settingName])}${unitName}` +
2101
+ `${g_localStorage[_settingName] === g_stateObj[_settingName] ? ' *' : ''}`;
2058
2102
  const lnkName = `lnk${toCapitalize(_settingName)}`;
2059
2103
  document.getElementById(lnkName).textContent = settingName;
2060
2104
  $id(lnkName).fontSize = wUnit(getFontSize2(settingName, parseFloat($id(lnkName).width), { maxSiz }));
@@ -2120,107 +2164,119 @@ const setReverseView = _btn => {
2120
2164
  }
2121
2165
  };
2122
2166
 
2167
+ // ============================================================
2168
+ // ゲージ設定の適用パイプライン(wiki: ゲージ設定適用順仕様)
2169
+ // 優先度は「低→高」= 基本設定(g_gaugeDefObj) → 譜面ヘッダー(初期ゲージのみ) → ゲージ個別設定。
2170
+ // 下記のapply*/resolve*はsetGaugeから“この順番のまま”呼ばれ、後段が前段を上書きすることで
2171
+ // 優先度を表現する。順序の変更は仕様変更を意味する。
2172
+ // ============================================================
2173
+
2123
2174
  /**
2124
2175
  * ゲージ設定メイン
2125
- * @param {number} _scrollNum
2126
- * @param {boolean} _gaugeInitFlg
2176
+ * @param {number} _scrollNum
2127
2177
  */
2128
- const setGauge = (_scrollNum, _gaugeInitFlg = false) => {
2178
+ const setGauge = (() => {
2129
2179
 
2130
- /**
2131
- * 数式からゲージ値に変換
2132
- * arrow[] -> 矢印数, frz[] -> フリーズアロー数, all[] -> 矢印+フリーズアロー数に置換する
2133
- * @param {string} _val
2134
- * @param {string} _defaultVal
2135
- * @returns {number}
2136
- */
2137
- const getGaugeCalc = (_val, _defaultVal) => {
2138
- return setVal(convertStrToVal(
2139
- replaceStr(_val, g_escapeStr.gaugeParamName)?.split(`{0}`).join(g_stateObj.scoreId)
2140
- ), _defaultVal, C_TYP_CALC);
2141
- };
2142
- /**
2143
- * ゲージ詳細一括変更
2144
- * @param {object} _baseObj
2145
- * @param {number} object.magInit
2146
- * @param {number} object.magRcv
2147
- * @param {number} object.magDmg
2148
- */
2149
- const setLifeCategory = (_baseObj, { _magInit = 1, _magRcv = 1, _magDmg = 1 } = {}) => {
2150
- g_stateObj.lifeInit = getGaugeCalc(_baseObj.lifeInits[g_stateObj.scoreId], g_stateObj.lifeInit) * _magInit;
2151
- g_stateObj.lifeRcv = getGaugeCalc(_baseObj.lifeRecoverys[g_stateObj.scoreId], g_stateObj.lifeRcv) * _magRcv;
2152
- g_stateObj.lifeDmg = getGaugeCalc(_baseObj.lifeDamages[g_stateObj.scoreId], g_stateObj.lifeDmg) * _magDmg;
2153
- };
2180
+ const getGaugeCalc = (_val, _defaultVal) => setVal(convertStrToVal(
2181
+ replaceStr(_val, g_escapeStr.gaugeParamName)?.split(`{0}`).join(g_stateObj.scoreId)
2182
+ ), _defaultVal, C_TYP_CALC);
2154
2183
 
2155
- /**
2156
- * ライフモード切替
2157
- * @param {object} _baseObj
2158
- */
2159
- const changeLifeMode = (_baseObj) => {
2160
- if (_baseObj.lifeBorders[g_stateObj.scoreId] === `x`) {
2184
+ /** Border値からライフ制/ノルマ制を切り替える */
2185
+ const applyLifeModeSwitch = (_border) => {
2186
+ if (_border === `x`) {
2161
2187
  g_stateObj.lifeBorder = 0;
2162
2188
  g_stateObj.lifeMode = C_LFE_SURVIVAL;
2163
2189
  } else {
2164
- g_stateObj.lifeBorder = getGaugeCalc(_baseObj.lifeBorders[g_stateObj.scoreId], g_stateObj.lifeBorder);
2190
+ g_stateObj.lifeBorder = getGaugeCalc(_border, g_stateObj.lifeBorder);
2165
2191
  g_stateObj.lifeMode = C_LFE_BORDER;
2166
2192
  }
2167
2193
  };
2168
2194
 
2169
- // ゲージ初期化
2170
-
2171
- // カスタムゲージの設定取得
2172
- const defaultCustomGauge = g_gaugeOptionObj.custom0 || g_gaugeOptionObj.customDefault;
2173
- if (hasVal(defaultCustomGauge)) {
2174
- g_gaugeOptionObj.custom = (g_gaugeOptionObj[`custom${g_stateObj.scoreId}`] || defaultCustomGauge).concat();
2175
- g_gaugeOptionObj.varCustom = (g_gaugeOptionObj[`varCustom${g_stateObj.scoreId}`] || g_gaugeOptionObj.varCustom0 || g_gaugeOptionObj.varCustomDefault).concat();
2176
- }
2177
-
2178
- // ゲージタイプの設定
2179
- changeLifeMode(g_headerObj);
2180
- g_gaugeType = (g_gaugeOptionObj.custom.length > 0 ? C_LFE_CUSTOM : g_stateObj.lifeMode);
2181
-
2182
- // ゲージ配列を入れ替え
2183
- g_settings.gauges = structuredClone(g_gaugeOptionObj[g_gaugeType.toLowerCase()]);
2184
- g_settings.gaugeNum = _gaugeInitFlg ? 0 : getCurrentNo(g_settings.gauges, g_stateObj.gauge);
2185
- g_stateObj.gauge = g_settings.gauges[g_settings.gaugeNum];
2195
+ let currentGaugeSel = null;
2186
2196
 
2187
- setSetting(_scrollNum, `gauge`);
2188
- g_stateObj.lifeVariable = g_gaugeOptionObj[`var${g_gaugeType}`][g_settings.gaugeNum];
2197
+ const resolveCustomGaugeSel = () => {
2198
+ currentGaugeSel = g_gaugeSelObj[g_stateObj.scoreId] || g_gaugeSelObj[0] || g_gaugeSelObj.default;
2199
+ };
2189
2200
 
2190
- // デフォルトゲージの設定を適用(g_gaugeOptionObjから取得)
2191
- if (g_settings.gaugeNum !== 0 &&
2192
- (g_gaugeOptionObj.custom.length === 0 ||
2193
- g_gaugeOptionObj.defaultList.includes(g_gaugeOptionObj[`defaultGauge${g_stateObj.scoreId}`]))) {
2201
+ /**
2202
+ * 【Step1】ゲージ種別(g_gaugeType)を確定し、ゲージ配列とカーソル位置を入れ替える
2203
+ * @param {number} _scrollNum
2204
+ * @param {boolean} _gaugeInitFlg true時は前回選択していたゲージ名を引き継がず、配列の先頭を強制的に使う
2205
+ */
2206
+ const resolveGaugeType = (_scrollNum, _gaugeInitFlg) => {
2207
+ applyLifeModeSwitch(g_headerObj.lifeBorders[g_stateObj.scoreId]);
2208
+ g_gaugeType = (currentGaugeSel?.__order?.length > 0 ? C_LFE_CUSTOM : g_stateObj.lifeMode);
2209
+
2210
+ g_settings.gauges = structuredClone(g_gaugeType === C_LFE_CUSTOM
2211
+ ? currentGaugeSel.__order
2212
+ : g_gaugeOptionObj[g_gaugeType.toLowerCase()]);
2213
+ g_settings.gaugeNum = (_gaugeInitFlg ? 0 : getCurrentNo(g_settings.gauges, g_stateObj.gauge));
2214
+ g_stateObj.gauge = g_settings.gauges[g_settings.gaugeNum];
2215
+
2216
+ setSetting(_scrollNum, `gauge`);
2217
+ g_stateObj.lifeVariable = currentGaugeSel?.[g_stateObj.gauge]?.Variable
2218
+ ?? g_gaugeDefObj[g_stateObj.gauge]?.Variable
2219
+ ?? C_FLG_OFF;
2220
+ };
2194
2221
 
2195
- const gType = (g_gaugeType === C_LFE_CUSTOM ?
2196
- toCapitalize(g_gaugeOptionObj[`defaultGauge${g_stateObj.scoreId}`]) : g_gaugeType);
2197
- const getGaugeVal = _type => g_gaugeOptionObj[`${_type}${gType}`][g_settings.gaugeNum];
2198
- g_stateObj.lifeMode = getGaugeVal(`type`);
2199
- g_stateObj.lifeBorder = getGaugeVal(`clear`);
2200
- g_stateObj.lifeInit = getGaugeVal(`init`);
2201
- g_stateObj.lifeRcv = getGaugeVal(`rcv`);
2202
- g_stateObj.lifeDmg = getGaugeVal(`dmg`);
2203
- }
2222
+ /** 【Step2:基本設定】g_gaugeDefObjのカーソル位置に対応する初期設定を適用 */
2223
+ const applyBaseGaugeSettings = () => {
2224
+ const def = g_gaugeDefObj[g_stateObj.gauge];
2225
+ if (!hasVal(def)) return;
2226
+ g_stateObj.lifeMode = (def.Border === `x` ? C_LFE_SURVIVAL : C_LFE_BORDER);
2227
+ g_stateObj.lifeBorder = (def.Border === `x` ? 0 : def.Border);
2228
+ g_stateObj.lifeInit = def.Init;
2229
+ g_stateObj.lifeRcv = def.Recovery;
2230
+ g_stateObj.lifeDmg = def.Damage;
2231
+ };
2204
2232
 
2205
- // デフォルトゲージの初期設定(Light, Easyでは回復量を2倍にする)
2206
- if ([`Original`, `Light`, `Normal`, `Easy`].includes(g_stateObj.gauge)) {
2207
- setLifeCategory(g_headerObj, { _magRcv: [`Light`, `Easy`].includes(g_stateObj.gauge) ? 2 : 1 });
2208
- }
2233
+ /** 【Step3:譜面ヘッダー】headerOverridable指定ゲージのみ、difData由来の値で上書き */
2234
+ const applyHeaderGaugeSettings = () => {
2235
+ const def = g_gaugeDefObj[g_stateObj.gauge];
2236
+ if (!def?.headerOverridable) return;
2237
+ if (g_gaugeType === C_LFE_CUSTOM) {
2238
+ // カスタム選択でOriginal/Normal等headerOverridable対象が複数混在する場合、
2239
+ // difDataは1つしか値を持たないため、選択順で最初に出てきた「系統」だけに適用する。
2240
+ // Light/EasyはOriginal/Normalの系統として扱う(deriveRecoveryFromで判定)
2241
+ const getGaugeRoot = _name => g_gaugeDefObj[_name]?.deriveRecoveryFrom ?? _name;
2242
+ const firstOverridableRoot = getGaugeRoot(
2243
+ g_settings.gauges.find(name => g_gaugeDefObj[name]?.headerOverridable)
2244
+ );
2245
+ if (getGaugeRoot(g_stateObj.gauge) !== firstOverridableRoot) return;
2246
+ }
2247
+ g_stateObj.lifeInit = getGaugeCalc(g_headerObj.lifeInits[g_stateObj.scoreId], g_stateObj.lifeInit);
2248
+ g_stateObj.lifeRcv = getGaugeCalc(g_headerObj.lifeRecoverys[g_stateObj.scoreId], g_stateObj.lifeRcv)
2249
+ * (hasVal(def.deriveRecoveryFrom) ? 2 : 1);
2250
+ g_stateObj.lifeDmg = getGaugeCalc(g_headerObj.lifeDamages[g_stateObj.scoreId], g_stateObj.lifeDmg);
2251
+ };
2209
2252
 
2210
- // ゲージ設定別に個別設定した場合はここで設定を上書き
2211
- // 譜面ヘッダー:gaugeXXX で設定した値がここで適用される
2212
- if (hasVal(g_gaugeOptionObj[`gauge${g_stateObj.gauge}s`])) {
2213
- const tmpGaugeObj = g_gaugeOptionObj[`gauge${g_stateObj.gauge}s`];
2214
- if (hasVal(tmpGaugeObj.lifeBorders[g_stateObj.scoreId])) {
2215
- changeLifeMode(tmpGaugeObj);
2253
+ /**
2254
+ * 【Step4:ゲージ個別設定(最優先)】gaugeXXXで明示的に設定された値があれば上書き。
2255
+ * g_gaugeSelObj[scoreId][name]は既に単一譜面分の値なので、g_headerObj用の
2256
+ * applyLifeModeSwitch/applyLifeCategory(配列アクセス版)は使わず直接適用する
2257
+ */
2258
+ const applyIndividualGaugeSettings = () => {
2259
+ const override = currentGaugeSel?.[g_stateObj.gauge];
2260
+ if (override?.Recovery === undefined) return; // gaugeXXXヘッダー由来の上書きが無い(overrideが無い/Variableのみの場合を含む)
2261
+ if (hasVal(override.Border)) {
2262
+ applyLifeModeSwitch(override.Border);
2216
2263
  }
2217
- setLifeCategory(tmpGaugeObj);
2218
- }
2264
+ g_stateObj.lifeInit = getGaugeCalc(override.Init, g_stateObj.lifeInit);
2265
+ g_stateObj.lifeRcv = getGaugeCalc(override.Recovery, g_stateObj.lifeRcv);
2266
+ g_stateObj.lifeDmg = getGaugeCalc(override.Damage, g_stateObj.lifeDmg);
2267
+ };
2219
2268
 
2220
- // ゲージ詳細情報を表示
2221
- lblGauge2.innerHTML = gaugeFormat(g_stateObj.lifeMode,
2222
- g_stateObj.lifeBorder, g_stateObj.lifeRcv, g_stateObj.lifeDmg, g_stateObj.lifeInit, g_stateObj.lifeVariable);
2223
- };
2269
+ return (_scrollNum, _gaugeInitFlg = false) => {
2270
+ resolveCustomGaugeSel();
2271
+ resolveGaugeType(_scrollNum, _gaugeInitFlg);
2272
+ applyBaseGaugeSettings();
2273
+ applyHeaderGaugeSettings();
2274
+ applyIndividualGaugeSettings();
2275
+
2276
+ lblGauge2.innerHTML = gaugeFormat(g_stateObj.lifeMode,
2277
+ g_stateObj.lifeBorder, g_stateObj.lifeRcv, g_stateObj.lifeDmg, g_stateObj.lifeInit, g_stateObj.lifeVariable);
2278
+ };
2279
+ })();
2224
2280
 
2225
2281
  /**
2226
2282
  * ゲージ設定の詳細表示を整形
@@ -2321,7 +2377,9 @@ const getAccuracy = (_border, _rcv, _dmg, _init, _allCnt) => {
2321
2377
 
2322
2378
  // 許容ミス数の計算
2323
2379
  const allowableCnts = Math.min(_allCnt - minRecovery, _allCnt);
2324
- let allowableCntsText = _allCnt > 0 && allowableCnts !== 0 ? (allowableCnts > 0 ? `${allowableCnts}miss↓` : `(${allowableCnts}miss)`) : ``;
2380
+ let allowableCntsText = _allCnt > 0 && allowableCnts !== 0
2381
+ ? (allowableCnts > 0 ? `${allowableCnts}miss↓` : `(${allowableCnts}miss)`)
2382
+ : ``;
2325
2383
 
2326
2384
  if ((_rcv === 0 && _dmg === 0) || _rcv < 0 || _dmg < 0) {
2327
2385
  rateText = `----`;
@@ -2411,8 +2469,11 @@ const getKeyCtrl = (_localStorage, _extraKeyName = ``) => {
2411
2469
  const makeSettingLblCssButton = (_id, _name, _heightPos, _func, {
2412
2470
  x = g_limitObj.setLblLeft, y = g_limitObj.setLblHeight * _heightPos,
2413
2471
  w = g_limitObj.setLblWidth, h = g_limitObj.setLblHeight, siz = g_limitObj.setLblSiz,
2414
- cxtFunc = () => true, ...rest } = {}, ..._classes) =>
2415
- createCss2Button(_id, _name, _func, { x, y, w, h, siz: getFontSize2(_name, w, { maxSiz: siz }), cxtFunc, ...rest }, g_cssObj.button_Default, ..._classes);
2472
+ cxtFunc = () => true, ...rest
2473
+ } = {}, ..._classes) =>
2474
+ createCss2Button(_id, _name, _func, {
2475
+ x, y, w, h, siz: getFontSize2(_name, w, { maxSiz: siz }), cxtFunc, ...rest
2476
+ }, g_cssObj.button_Default, ..._classes);
2416
2477
 
2417
2478
  /**
2418
2479
  * 譜面変更セレクター用ボタン
@@ -2430,7 +2491,8 @@ const makeSettingLblCssButton = (_id, _name, _heightPos, _func, {
2430
2491
  */
2431
2492
  const makeDifLblCssButton = (_id, _name, _heightPos, _func, {
2432
2493
  x = 0, h = g_limitObj.setLblHeight, y = h * _heightPos,
2433
- w = g_limitObj.difSelectorWidth, siz = g_limitObj.difSelectorSiz, btnStyle = `Default` } = {}) =>
2494
+ w = g_limitObj.difSelectorWidth, siz = g_limitObj.difSelectorSiz, btnStyle = `Default`,
2495
+ } = {}) =>
2434
2496
  createCss2Button(_id, _name, _func, {
2435
2497
  x, y, w, h, siz, borderStyle: `solid`, title: g_msgObj[_id] ?? ``,
2436
2498
  }, g_cssObj[`button_${btnStyle}`], g_cssObj.button_ON);
@@ -2449,7 +2511,9 @@ const makeDifLblCssButton = (_id, _name, _heightPos, _func, {
2449
2511
  * @param {string} [object.visibility='visible']
2450
2512
  * @returns {HTMLDivElement}
2451
2513
  */
2452
- const makeMiniCssButton = (_id, _directionFlg, _heightPos, _func, { dx = 0, dy = 0, dw = 0, dh = 0, dsiz = 0, visibility = `visible` } = {}) =>
2514
+ const makeMiniCssButton = (_id, _directionFlg, _heightPos, _func, {
2515
+ dx = 0, dy = 0, dw = 0, dh = 0, dsiz = 0, visibility = `visible`,
2516
+ } = {}) =>
2453
2517
  createCss2Button(`${_id}${_directionFlg}`, g_settingBtnObj.chara[_directionFlg], _func, {
2454
2518
  x: g_settingBtnObj.pos[_directionFlg] + dx, y: g_limitObj.setLblHeight * _heightPos + dy,
2455
2519
  w: g_limitObj.setMiniWidth + dw, h: g_limitObj.setLblHeight + dh, siz: g_limitObj.setLblSiz + dsiz, visibility,
@@ -2826,7 +2890,8 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
2826
2890
  } else {
2827
2891
  const creditName = `Sample Music / Artist Name`;
2828
2892
  const difName = `[7key / Normal]`;
2829
- const checkMusicSiz = (_text, _siz) => getFontSize2(_text, g_headerObj.playingWidth - g_headerObj.customViewWidth - 125, { maxSiz: _siz });
2893
+ const checkMusicSiz = (_text, _siz) =>
2894
+ getFontSize2(_text, g_headerObj.playingWidth - g_headerObj.customViewWidth - 125, { maxSiz: _siz });
2830
2895
 
2831
2896
  multiAppend(_frame,
2832
2897
  createDivCss2Label(`previewCredit`, creditName, {
@@ -2835,9 +2900,7 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
2835
2900
  createDivCss2Label(`previewDifName`, difName, {
2836
2901
  ...g_lblPosObj.lblDifName, siz: checkMusicSiz(difName, 12)
2837
2902
  }),
2838
- createDivCss2Label(`previewTime1`, `0:04 /`, {
2839
- ...g_lblPosObj.lblTime1,
2840
- }),
2903
+ createDivCss2Label(`previewTime1`, `0:04 /`, g_lblPosObj.lblTime1),
2841
2904
  createDivCss2Label(`previewTime2`, `2:54`, g_lblPosObj.lblTime2),
2842
2905
 
2843
2906
  // ゲージ設定名
@@ -2853,15 +2916,27 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
2853
2916
  y: _playH - 100 + g_diffObj.shortcutY, w: 80, h: 100, pointerEvents: C_DIS_AUTO,
2854
2917
  });
2855
2918
  multiAppend(scGroup,
2856
- createDivCss2Label(`lblRetry`, `[${g_lblNameObj.l_retry}]`, { ...g_lblPosObj.lblMainScHeader, x: 0, y: 0 }),
2857
- createDivCss2Label(`lblRetrySc`, g_kCd[g_headerObj.keyRetry],
2858
- { ...g_lblPosObj.lblMainScKey, x: 0, y: 15, fontWeight: g_headerObj.keyRetry === C_KEY_RETRY ? `normal` : `bold` }),
2859
- createDivCss2Label(`lblTitleBack`, `[${g_lblNameObj.l_titleBack}]`, { ...g_lblPosObj.lblMainScHeader, x: 0, y: 35 }),
2860
- createDivCss2Label(`lblTitleBackSc`, g_isMac ? `Shift+${g_kCd[g_headerObj.keyRetry]}` : g_kCd[g_headerObj.keyTitleBack],
2861
- { ...g_lblPosObj.lblMainScKey, x: 0, y: 50, fontWeight: g_headerObj.keyTitleBack === C_KEY_TITLEBACK ? `normal` : `bold` }),
2862
- createDivCss2Label(`lblPause`, `[${g_lblNameObj.l_pause}]`, { ...g_lblPosObj.lblMainScHeader, x: 0, y: 70 }),
2863
- createDivCss2Label(`lblPauseSc`, g_kCd[g_headerObj.keyPause],
2864
- { ...g_lblPosObj.lblMainScKey, x: 0, y: 85, fontWeight: g_headerObj.keyPause === C_KEY_PAUSE ? `normal` : `bold` }),
2919
+ createDivCss2Label(`lblRetry`, `[${g_lblNameObj.l_retry}]`, {
2920
+ ...g_lblPosObj.lblMainScHeader, x: 0, y: 0,
2921
+ }),
2922
+ createDivCss2Label(`lblRetrySc`, g_kCd[g_headerObj.keyRetry], {
2923
+ ...g_lblPosObj.lblMainScKey, x: 0, y: 15,
2924
+ fontWeight: g_headerObj.keyRetry === C_KEY_RETRY ? `normal` : `bold`,
2925
+ }),
2926
+ createDivCss2Label(`lblTitleBack`, `[${g_lblNameObj.l_titleBack}]`, {
2927
+ ...g_lblPosObj.lblMainScHeader, x: 0, y: 35,
2928
+ }),
2929
+ createDivCss2Label(`lblTitleBackSc`, g_isMac ? `Shift+${g_kCd[g_headerObj.keyRetry]}` : g_kCd[g_headerObj.keyTitleBack], {
2930
+ ...g_lblPosObj.lblMainScKey, x: 0, y: 50,
2931
+ fontWeight: g_headerObj.keyTitleBack === C_KEY_TITLEBACK ? `normal` : `bold`,
2932
+ }),
2933
+ createDivCss2Label(`lblPause`, `[${g_lblNameObj.l_pause}]`, {
2934
+ ...g_lblPosObj.lblMainScHeader, x: 0, y: 70,
2935
+ }),
2936
+ createDivCss2Label(`lblPauseSc`, g_kCd[g_headerObj.keyPause], {
2937
+ ...g_lblPosObj.lblMainScKey, x: 0, y: 85,
2938
+ fontWeight: g_headerObj.keyPause === C_KEY_PAUSE ? `normal` : `bold`,
2939
+ }),
2865
2940
  );
2866
2941
  const scConfig = {
2867
2942
  toastTitle: g_lblNameObj.shortcutUpdate,
@@ -3072,13 +3147,18 @@ const createSettingsDisplayWindow = _sprite => {
3072
3147
  if (g_headerObj[`${_name}Use`]) {
3073
3148
 
3074
3149
  // 設定名、CSS名(2種)、表示名
3075
- const list = [C_FLG_OFF, C_FLG_ON].concat(g_settings[`d_${_name}s`] || []);
3076
- const cssBarList = [C_FLG_OFF, C_FLG_ON].concat(Array(g_settings[`d_${_name}s`]?.length).fill(g_settings.d_cssBarExName) || []);
3077
- const cssBgList = [g_settings.d_cssBgName, g_settings.d_cssBgName].concat(Array(g_settings[`d_${_name}s`]?.length).fill(g_settings.d_cssBgExName) || []);
3078
- const lbls = [toCapitalize(_name), toCapitalize(_name)].concat(g_settings[`d_${_name}s`] || []);
3079
-
3080
- const dispView = () => [C_FLG_OFF, C_FLG_ON].includes(g_stateObj[`d_${_name.toLowerCase()}`]) ?
3081
- g_lblNameObj[`d_${toCapitalize(_name)}`] : getStgDetailName(lbls[g_settings.displayNum[_name]]);
3150
+ const list = [C_FLG_OFF, C_FLG_ON]
3151
+ .concat(g_settings[`d_${_name}s`] || []);
3152
+ const cssBarList = [C_FLG_OFF, C_FLG_ON]
3153
+ .concat(Array(g_settings[`d_${_name}s`]?.length).fill(g_settings.d_cssBarExName) || []);
3154
+ const cssBgList = [g_settings.d_cssBgName, g_settings.d_cssBgName]
3155
+ .concat(Array(g_settings[`d_${_name}s`]?.length).fill(g_settings.d_cssBgExName) || []);
3156
+ const lbls = [toCapitalize(_name), toCapitalize(_name)]
3157
+ .concat(g_settings[`d_${_name}s`] || []);
3158
+
3159
+ const dispView = () => [C_FLG_OFF, C_FLG_ON].includes(g_stateObj[`d_${_name.toLowerCase()}`])
3160
+ ? g_lblNameObj[`d_${toCapitalize(_name)}`]
3161
+ : getStgDetailName(lbls[g_settings.displayNum[_name]]);
3082
3162
 
3083
3163
  const withShortCutDesc = () => createScText(document.getElementById(linkId), `${toCapitalize(_name)}`,
3084
3164
  { displayName: g_currentPage, targetLabel: linkId, x: -5 });
@@ -3111,8 +3191,7 @@ const createSettingsDisplayWindow = _sprite => {
3111
3191
  displaySprite.appendChild(
3112
3192
  makeSettingLblCssButton(linkId, dispView(), _heightPos, () => switchDisplay(), {
3113
3193
  x: 30 + 180 * _widthPos, y: 20 * _heightPos, w: 170, h: 18,
3114
- title: g_msgObj[`d_${_name.toLowerCase()}`], borderStyle: `solid`,
3115
- cxtFunc: () => switchDisplay(-1),
3194
+ title: g_msgObj[`d_${_name.toLowerCase()}`], borderStyle: `solid`, cxtFunc: () => switchDisplay(-1),
3116
3195
  }, `button_${cssBgList[g_settings.displayNum[_name]]}`, `button_${cssBarList[g_settings.displayNum[_name]]}`)
3117
3196
  );
3118
3197
  withShortCutDesc();
@@ -3154,8 +3233,11 @@ const createSettingsDisplayWindow = _sprite => {
3154
3233
 
3155
3234
  // Hidden+/Sudden+初期値用スライダー、ロックボタン
3156
3235
  multiAppend(spriteList.appearance,
3157
- createDivCss2Label(`lblAppearancePos`, `${g_hidSudObj.distH[g_stateObj.appearance](g_hidSudObj.filterPos)}`, g_lblPosObj.lblAppearancePos),
3158
- createDivCss2Label(`lblAppearanceBar`, `<input id="appearanceSlider" type="range" value="${g_hidSudObj.filterPos}" min="0" max="100" step="1">`,
3236
+ createDivCss2Label(`lblAppearancePos`,
3237
+ `${g_hidSudObj.distH[g_stateObj.appearance](g_hidSudObj.filterPos)}`,
3238
+ g_lblPosObj.lblAppearancePos),
3239
+ createDivCss2Label(`lblAppearanceBar`,
3240
+ `<input id="appearanceSlider" type="range" value="${g_hidSudObj.filterPos}" min="0" max="100" step="1">`,
3159
3241
  g_lblPosObj.lblAppearanceBar),
3160
3242
  createCss2Button(`lnkLockBtn`, g_lblNameObj.filterLock, evt => setLockView(evt.target), {
3161
3243
  ...g_lblPosObj.lnkLockBtn, cxtFunc: evt => setLockView(evt.target),
@@ -3235,7 +3317,9 @@ const interlockingButton = (_headerObj, _name, _current, _next, _buttonFlg = fal
3235
3317
  txtDisabled = `Disabled`;
3236
3318
  document.getElementById(`lnk${defaultOption}`).textContent = `${toCapitalize(defaultOption)}:${_next}`;
3237
3319
  }
3238
- document.getElementById(`lnk${defaultOption}`).classList.replace(g_cssObj[`button_${txtDisabled}${_current}`], g_cssObj[`button_Disabled${_next}`]);
3320
+ document.getElementById(`lnk${defaultOption}`).classList.replace(
3321
+ g_cssObj[`button_${txtDisabled}${_current}`], g_cssObj[`button_Disabled${_next}`]
3322
+ );
3239
3323
  }
3240
3324
  // さらに連動する場合は設定を反転
3241
3325
  interlockingButton(_headerObj, defaultOption, _next, _current, _buttonFlg);
@@ -3297,8 +3381,8 @@ const exSettingInit = () => {
3297
3381
 
3298
3382
  multiAppend(judgRangeSprite,
3299
3383
  createDivCss2Label(`lblJudgRangeView`, getJudgRangeView(), {
3300
- x: parseFloat($id(`lblJudgRange`).left) + 10, y: parseFloat($id(`lblJudgRange`).top) + 25, w: 300, h: 30, siz: 13,
3301
- align: C_ALIGN_LEFT,
3384
+ x: parseFloat($id(`lblJudgRange`).left) + 10, y: parseFloat($id(`lblJudgRange`).top) + 25,
3385
+ w: 300, h: 30, siz: 13, align: C_ALIGN_LEFT,
3302
3386
  }),
3303
3387
  );
3304
3388
 
@@ -3345,7 +3429,9 @@ const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF],
3345
3429
  $id(`lnk${camelH}`).width = wUnit(g_limitObj.setLblWidthShort);
3346
3430
  }
3347
3431
  const labelWidth = isDefault ? g_limitObj.setLblWidth : g_limitObj.setLblWidthShort - 10;
3348
- $id(`lnk${camelH}`).fontSize = wUnit(getFontSize2(getStgDetailName(g_stateObj[_name]), labelWidth, { maxSiz: g_limitObj.setLblSiz }));
3432
+ $id(`lnk${camelH}`).fontSize = wUnit(getFontSize2(
3433
+ getStgDetailName(g_stateObj[_name]), labelWidth, { maxSiz: g_limitObj.setLblSiz }
3434
+ ));
3349
3435
  };
3350
3436
 
3351
3437
  /**
@@ -3380,7 +3466,9 @@ const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF],
3380
3466
  });
3381
3467
  }
3382
3468
  document.getElementById(`lnk${settingLabel}`).classList.remove(g_cssObj.button_RevON, g_cssObj.button_RevOFF);
3383
- document.getElementById(`lnk${settingLabel}`).classList.add(g_cssObj[`button_Rev${boolToSwitch(g_stateObj[`${_name}Type`] !== C_FLG_HYPHEN)}`]);
3469
+ document.getElementById(`lnk${settingLabel}`).classList.add(
3470
+ g_cssObj[`button_Rev${boolToSwitch(g_stateObj[`${_name}Type`] !== C_FLG_HYPHEN)}`]
3471
+ );
3384
3472
  };
3385
3473
 
3386
3474
  // TypeUse 未定義時は true 扱いにする