danoniplus 51.2.0 → 51.2.2

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/10/03
7
+ * Revised : 2026/10/07
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 51.2.0`;
12
- const g_revisedDate = `2026/10/03`;
11
+ const g_version = `Ver 51.2.2`;
12
+ const g_revisedDate = `2026/10/07`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -645,7 +645,7 @@ const formatObject = (_obj, _indent = 0, { colorFmt = true, rootKey = `` } = {})
645
645
  if (_list.findIndex(val => val === rootKey) >= 0) {
646
646
  let result = `[`;
647
647
  for (let j = 0; j < _obj.length; j += _numOfSet) {
648
- result += `<br>${nestedIndent}${_obj[j]}: ${_obj[j + 1]}`;
648
+ result += `<br>${nestedIndent}${escapeHtml(_obj[j])}: ${escapeHtml(_obj[j + 1])}`;
649
649
  for (let k = 0; k < _numOfSet - 2; k++) {
650
650
  const idx = j + k + 2;
651
651
  if (idx < _obj.length) {
@@ -708,7 +708,8 @@ const formatObject = (_obj, _indent = 0, { colorFmt = true, rootKey = `` } = {})
708
708
  })
709
709
  : Object.entries(_obj).map(([key, value]) => {
710
710
  const formattedValue = getNextObject(value, rootKey === `` ? key : rootKey);
711
- return `<br>${nestedIndent}"${key}": ${formattedValue}`;
711
+ const formattedKey = colorFmt ? escapeHtml(key) : key;
712
+ return `<br>${nestedIndent}"${formattedKey}": ${formattedValue}`;
712
713
  })).filter(val => !hasVal(val) || val !== `----`);
713
714
 
714
715
  // 配列なら[]で囲む、オブジェクトなら{}で囲む
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2026/09/13
8
- * Revised : 2026/09/23 (v51.0.1)
8
+ * Revised : 2026/10/07 (v51.2.2)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -307,12 +307,15 @@ const musicAfterLoaded = () => new Promise((resolve, reject) => {
307
307
  }
308
308
  });
309
309
 
310
+ // リトライ時にプレイ用キー割り当てを復元するための退避 (初回保存でメモリが既定値へ戻るため)
311
+ let g_keyCtrlBackup = {};
312
+
310
313
  /**
311
314
  * 譜面データの変換処理
312
315
  * - 音源データの状態に依存しない部分のみを担う(g_audio非参照)
313
316
  * - loadMusic経由(並行フロー)、executeRetry経由(曲中リトライ)の両方から呼ばれる
314
317
  */
315
- const prepareScoreData = () => {
318
+ const prepareScoreData = (_retryFlg = false) => {
316
319
 
317
320
  const tkObj = getKeyInfo();
318
321
  const [keyCtrlPtn, keyNum] = [tkObj.keyCtrlPtn, tkObj.keyNum];
@@ -458,7 +461,7 @@ const prepareScoreData = () => {
458
461
  pushArrows(g_scoreObj, speedOnFrame, arrivalFrame);
459
462
 
460
463
  // メインに入る前の最終初期化処理
461
- getArrowSettings();
464
+ getArrowSettings(_retryFlg);
462
465
 
463
466
  // ユーザカスタムイベント
464
467
  safeExecuteCustomHooks(`g_customJsObj.loading`, g_customJsObj.loading);
@@ -2141,13 +2144,22 @@ const invertSpecificTransforms = (cssString, exceptList = []) => {
2141
2144
  /**
2142
2145
  * メイン画面前の初期化処理
2143
2146
  */
2144
- const getArrowSettings = () => {
2147
+ const getArrowSettings = (_retryFlg = false) => {
2145
2148
 
2146
2149
  g_attrObj = {};
2147
2150
  const tkObj = getKeyInfo();
2148
2151
  const [keyCtrlPtn, keyNum, posMax, divideCnt] =
2149
2152
  [tkObj.keyCtrlPtn, tkObj.keyNum, tkObj.posMax, tkObj.divideCnt];
2150
2153
 
2154
+ // 新しいプレイ開始時は前回プレイの退避を破棄 (リトライ時は保持して復元に使う)
2155
+ if (!_retryFlg) {
2156
+ g_keyCtrlBackup = {};
2157
+ }
2158
+ // リトライ時: 退避済みのキー割り当てをメモリへ戻してから以降の処理を行う
2159
+ const restoredFlg = _retryFlg && g_keyCtrlBackup[keyCtrlPtn] !== undefined;
2160
+ if (restoredFlg) {
2161
+ g_keyObj[`keyCtrl${keyCtrlPtn}`] = structuredClone(g_keyCtrlBackup[keyCtrlPtn]);
2162
+ }
2151
2163
  g_keyCopyLists.simpleDef.forEach(header => updateKeyInfo(header, keyCtrlPtn));
2152
2164
  g_headerObj.tuning = g_headerObj.creatorNames[g_stateObj.scoreId];
2153
2165
 
@@ -2540,7 +2552,13 @@ const getArrowSettings = () => {
2540
2552
  }
2541
2553
 
2542
2554
  // リバース、キーコンフィグなどをローカルストレージへ保存(Data Save: ON かつ別キーモードで無い場合)
2543
- if (g_stateObj.dataSaveFlg && !hasVal(g_keyObj[`transKey${keyCtrlPtn}`])) {
2555
+ if (_retryFlg) {
2556
+ // リトライ時は初回に保存済みのため再保存しない (prevKey等も触らない)
2557
+ // 復元したキー割り当ては、初回保存時と同様にメモリ上を既定値へ戻す
2558
+ if (restoredFlg) {
2559
+ g_keyObj[`keyCtrl${keyCtrlPtn}`] = structuredClone(g_keyObj[`keyCtrl${keyCtrlPtn}d`]);
2560
+ }
2561
+ } else if (g_stateObj.dataSaveFlg && !hasVal(g_keyObj[`transKey${keyCtrlPtn}`])) {
2544
2562
 
2545
2563
  // 次回キーコンフィグ画面へ戻ったとき、保存済みキーコンフィグ設定が表示されるようにする
2546
2564
  g_keyObj.prevKey = `Dummy`;
@@ -2562,6 +2580,7 @@ const getArrowSettings = () => {
2562
2580
  storageObj[`keyCtrl${addKey}`] = setKeyCtrl(g_localKeyStorage, keyNum, keyCtrlPtn);
2563
2581
  if (g_keyObj.currentPtn !== -1) {
2564
2582
  storageObj[`keyCtrlPtn${addKey}`] = g_keyObj.currentPtn;
2583
+ g_keyCtrlBackup[keyCtrlPtn] = structuredClone(g_keyObj[`keyCtrl${keyCtrlPtn}`]);
2565
2584
  g_keyObj[`keyCtrl${keyCtrlPtn}`] = structuredClone(g_keyObj[`keyCtrl${keyCtrlPtn}d`]);
2566
2585
  }
2567
2586
 
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2026/09/13
8
- * Revised : 2026/10/03 (v51.2.0)
8
+ * Revised : 2026/10/07 (v51.2.2)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -2219,7 +2219,7 @@ const executeRetry = async (_logLabel = `Retry`) => {
2219
2219
  clearWindow(`Main`);
2220
2220
  await musicAfterLoaded();
2221
2221
  await loadChartFile();
2222
- prepareScoreData();
2222
+ prepareScoreData(true);
2223
2223
  mainInit();
2224
2224
  } catch (e) {
2225
2225
  console.warn(`${_logLabel} audio load error: ${e}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "51.2.0",
3
+ "version": "51.2.2",
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",