danoniplus 49.6.5 → 49.6.6

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.
Files changed (2) hide show
  1. package/js/danoni_main.js +30 -10
  2. package/package.json +1 -1
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/09/29
7
+ * Revised : 2026/10/07
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 49.6.5`;
12
- const g_revisedDate = `2026/09/29`;
11
+ const g_version = `Ver 49.6.6`;
12
+ const g_revisedDate = `2026/10/07`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -629,7 +629,7 @@ const formatObject = (_obj, _indent = 0, { colorFmt = true, rootKey = `` } = {})
629
629
  if (_list.findIndex(val => val === rootKey) >= 0) {
630
630
  let result = `[`;
631
631
  for (let j = 0; j < _obj.length; j += _numOfSet) {
632
- result += `<br>${nestedIndent}${_obj[j]}: ${_obj[j + 1]}`;
632
+ result += `<br>${nestedIndent}${escapeHtml(_obj[j])}: ${escapeHtml(_obj[j + 1])}`;
633
633
  for (let k = 0; k < _numOfSet - 2; k++) {
634
634
  const idx = j + k + 2;
635
635
  if (idx < _obj.length) {
@@ -692,7 +692,8 @@ const formatObject = (_obj, _indent = 0, { colorFmt = true, rootKey = `` } = {})
692
692
  })
693
693
  : Object.entries(_obj).map(([key, value]) => {
694
694
  const formattedValue = getNextObject(value, rootKey === `` ? key : rootKey);
695
- return `<br>${nestedIndent}"${key}": ${formattedValue}`;
695
+ const formattedKey = colorFmt ? escapeHtml(key) : key;
696
+ return `<br>${nestedIndent}"${formattedKey}": ${formattedValue}`;
696
697
  })).filter(val => !hasVal(val) || val !== `----`);
697
698
 
698
699
  // 配列なら[]で囲む、オブジェクトなら{}で囲む
@@ -12544,12 +12545,15 @@ const musicAfterLoaded = () => new Promise((resolve, reject) => {
12544
12545
  }
12545
12546
  });
12546
12547
 
12548
+ // リトライ時にプレイ用キー割り当てを復元するための退避 (初回保存でメモリが既定値へ戻るため)
12549
+ let g_keyCtrlBackup = {};
12550
+
12547
12551
  /**
12548
12552
  * 譜面データの変換処理
12549
12553
  * - 音源データの状態に依存しない部分のみを担う(g_audio非参照)
12550
12554
  * - loadMusic経由(並行フロー)、executeRetry経由(曲中リトライ)の両方から呼ばれる
12551
12555
  */
12552
- const prepareScoreData = () => {
12556
+ const prepareScoreData = (_retryFlg = false) => {
12553
12557
 
12554
12558
  const tkObj = getKeyInfo();
12555
12559
  const [keyCtrlPtn, keyNum] = [tkObj.keyCtrlPtn, tkObj.keyNum];
@@ -12694,7 +12698,7 @@ const prepareScoreData = () => {
12694
12698
  pushArrows(g_scoreObj, speedOnFrame, arrivalFrame);
12695
12699
 
12696
12700
  // メインに入る前の最終初期化処理
12697
- getArrowSettings();
12701
+ getArrowSettings(_retryFlg);
12698
12702
 
12699
12703
  // ユーザカスタムイベント
12700
12704
  safeExecuteCustomHooks(`g_customJsObj.loading`, g_customJsObj.loading);
@@ -14391,13 +14395,22 @@ const invertSpecificTransforms = (cssString, exceptList = []) => {
14391
14395
  /**
14392
14396
  * メイン画面前の初期化処理
14393
14397
  */
14394
- const getArrowSettings = () => {
14398
+ const getArrowSettings = (_retryFlg = false) => {
14395
14399
 
14396
14400
  g_attrObj = {};
14397
14401
  const tkObj = getKeyInfo();
14398
14402
  const [keyCtrlPtn, keyNum, posMax, divideCnt] =
14399
14403
  [tkObj.keyCtrlPtn, tkObj.keyNum, tkObj.posMax, tkObj.divideCnt];
14400
14404
 
14405
+ // 新しいプレイ開始時は前回プレイの退避を破棄 (リトライ時は保持して復元に使う)
14406
+ if (!_retryFlg) {
14407
+ g_keyCtrlBackup = {};
14408
+ }
14409
+ // リトライ時: 退避済みのキー割り当てをメモリへ戻してから以降の処理を行う
14410
+ const restoredFlg = _retryFlg && g_keyCtrlBackup[keyCtrlPtn] !== undefined;
14411
+ if (restoredFlg) {
14412
+ g_keyObj[`keyCtrl${keyCtrlPtn}`] = structuredClone(g_keyCtrlBackup[keyCtrlPtn]);
14413
+ }
14401
14414
  g_keyCopyLists.simpleDef.forEach(header => updateKeyInfo(header, keyCtrlPtn));
14402
14415
  g_headerObj.tuning = g_headerObj.creatorNames[g_stateObj.scoreId];
14403
14416
 
@@ -14787,7 +14800,13 @@ const getArrowSettings = () => {
14787
14800
  }
14788
14801
 
14789
14802
  // リバース、キーコンフィグなどをローカルストレージへ保存(Data Save: ON かつ別キーモードで無い場合)
14790
- if (g_stateObj.dataSaveFlg && !hasVal(g_keyObj[`transKey${keyCtrlPtn}`])) {
14803
+ if (_retryFlg) {
14804
+ // リトライ時は初回に保存済みのため再保存しない (prevKey等も触らない)
14805
+ // 復元したキー割り当ては、初回保存時と同様にメモリ上を既定値へ戻す
14806
+ if (restoredFlg) {
14807
+ g_keyObj[`keyCtrl${keyCtrlPtn}`] = structuredClone(g_keyObj[`keyCtrl${keyCtrlPtn}d`]);
14808
+ }
14809
+ } else if (g_stateObj.dataSaveFlg && !hasVal(g_keyObj[`transKey${keyCtrlPtn}`])) {
14791
14810
 
14792
14811
  // 次回キーコンフィグ画面へ戻ったとき、保存済みキーコンフィグ設定が表示されるようにする
14793
14812
  g_keyObj.prevKey = `Dummy`;
@@ -14809,6 +14828,7 @@ const getArrowSettings = () => {
14809
14828
  storageObj[`keyCtrl${addKey}`] = setKeyCtrl(g_localKeyStorage, keyNum, keyCtrlPtn);
14810
14829
  if (g_keyObj.currentPtn !== -1) {
14811
14830
  storageObj[`keyCtrlPtn${addKey}`] = g_keyObj.currentPtn;
14831
+ g_keyCtrlBackup[keyCtrlPtn] = structuredClone(g_keyObj[`keyCtrl${keyCtrlPtn}`]);
14812
14832
  g_keyObj[`keyCtrl${keyCtrlPtn}`] = structuredClone(g_keyObj[`keyCtrl${keyCtrlPtn}d`]);
14813
14833
  }
14814
14834
 
@@ -16680,7 +16700,7 @@ const executeRetry = async (_logLabel = `Retry`) => {
16680
16700
  clearWindow(`Main`);
16681
16701
  await musicAfterLoaded();
16682
16702
  await loadChartFile();
16683
- prepareScoreData();
16703
+ prepareScoreData(true);
16684
16704
  mainInit();
16685
16705
  } catch (e) {
16686
16706
  console.warn(`${_logLabel} audio load error: ${e}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "49.6.5",
3
+ "version": "49.6.6",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "./js/danoni_main.js",
6
6
  "jsdelivr": "./js/danoni_main.js",