danoniplus 50.5.5 → 50.5.7

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/09/29
7
+ * Revised : 2026/10/20
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 50.5.5`;
12
- const g_revisedDate = `2026/09/29`;
11
+ const g_version = `Ver 50.5.7`;
12
+ const g_revisedDate = `2026/10/20`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -648,7 +648,7 @@ const formatObject = (_obj, _indent = 0, { colorFmt = true, rootKey = `` } = {})
648
648
  if (_list.findIndex(val => val === rootKey) >= 0) {
649
649
  let result = `[`;
650
650
  for (let j = 0; j < _obj.length; j += _numOfSet) {
651
- result += `<br>${nestedIndent}${_obj[j]}: ${_obj[j + 1]}`;
651
+ result += `<br>${nestedIndent}${escapeHtml(_obj[j])}: ${escapeHtml(_obj[j + 1])}`;
652
652
  for (let k = 0; k < _numOfSet - 2; k++) {
653
653
  const idx = j + k + 2;
654
654
  if (idx < _obj.length) {
@@ -711,7 +711,8 @@ const formatObject = (_obj, _indent = 0, { colorFmt = true, rootKey = `` } = {})
711
711
  })
712
712
  : Object.entries(_obj).map(([key, value]) => {
713
713
  const formattedValue = getNextObject(value, rootKey === `` ? key : rootKey);
714
- return `<br>${nestedIndent}"${key}": ${formattedValue}`;
714
+ const formattedKey = colorFmt ? escapeHtml(key) : key;
715
+ return `<br>${nestedIndent}"${formattedKey}": ${formattedValue}`;
715
716
  })).filter(val => !hasVal(val) || val !== `----`);
716
717
 
717
718
  // 配列なら[]で囲む、オブジェクトなら{}で囲む
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2026/09/13
8
- * Revised : 2026/09/23 (v50.5.3)
8
+ * Revised : 2026/10/20 (v50.5.7)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -306,12 +306,15 @@ const musicAfterLoaded = () => new Promise((resolve, reject) => {
306
306
  }
307
307
  });
308
308
 
309
+ // リトライ時にプレイ用キー割り当てを復元するための退避 (初回保存でメモリが既定値へ戻るため)
310
+ let g_keyCtrlBackup = {};
311
+
309
312
  /**
310
313
  * 譜面データの変換処理
311
314
  * - 音源データの状態に依存しない部分のみを担う(g_audio非参照)
312
315
  * - loadMusic経由(並行フロー)、executeRetry経由(曲中リトライ)の両方から呼ばれる
313
316
  */
314
- const prepareScoreData = () => {
317
+ const prepareScoreData = (_retryFlg = false) => {
315
318
 
316
319
  const tkObj = getKeyInfo();
317
320
  const [keyCtrlPtn, keyNum] = [tkObj.keyCtrlPtn, tkObj.keyNum];
@@ -457,7 +460,7 @@ const prepareScoreData = () => {
457
460
  pushArrows(g_scoreObj, speedOnFrame, arrivalFrame);
458
461
 
459
462
  // メインに入る前の最終初期化処理
460
- getArrowSettings();
463
+ getArrowSettings(_retryFlg);
461
464
 
462
465
  // ユーザカスタムイベント
463
466
  safeExecuteCustomHooks(`g_customJsObj.loading`, g_customJsObj.loading);
@@ -2137,13 +2140,22 @@ const invertSpecificTransforms = (cssString, exceptList = []) => {
2137
2140
  /**
2138
2141
  * メイン画面前の初期化処理
2139
2142
  */
2140
- const getArrowSettings = () => {
2143
+ const getArrowSettings = (_retryFlg = false) => {
2141
2144
 
2142
2145
  g_attrObj = {};
2143
2146
  const tkObj = getKeyInfo();
2144
2147
  const [keyCtrlPtn, keyNum, posMax, divideCnt] =
2145
2148
  [tkObj.keyCtrlPtn, tkObj.keyNum, tkObj.posMax, tkObj.divideCnt];
2146
2149
 
2150
+ // 新しいプレイ開始時は前回プレイの退避を破棄 (リトライ時は保持して復元に使う)
2151
+ if (!_retryFlg) {
2152
+ g_keyCtrlBackup = {};
2153
+ }
2154
+ // リトライ時: 退避済みのキー割り当てをメモリへ戻してから以降の処理を行う
2155
+ const restoredFlg = _retryFlg && g_keyCtrlBackup[keyCtrlPtn] !== undefined;
2156
+ if (restoredFlg) {
2157
+ g_keyObj[`keyCtrl${keyCtrlPtn}`] = structuredClone(g_keyCtrlBackup[keyCtrlPtn]);
2158
+ }
2147
2159
  g_keyCopyLists.simpleDef.forEach(header => updateKeyInfo(header, keyCtrlPtn));
2148
2160
  g_headerObj.tuning = g_headerObj.creatorNames[g_stateObj.scoreId];
2149
2161
 
@@ -2446,6 +2458,7 @@ const getArrowSettings = () => {
2446
2458
 
2447
2459
  // FrzReturnの初期化
2448
2460
  g_workObj.frzReturnFlg = false;
2461
+ g_workObj.frzReturnPausedFlg = false;
2449
2462
  g_workObj.frzReturnSeq = g_frzReturnSeqFunc.get(g_stateObj.frzReturnType)();
2450
2463
  if (g_workObj.frzReturnTimerId) {
2451
2464
  g_timerHandler.clearTimeout(g_workObj.frzReturnTimerId);
@@ -2532,7 +2545,13 @@ const getArrowSettings = () => {
2532
2545
  }
2533
2546
 
2534
2547
  // リバース、キーコンフィグなどをローカルストレージへ保存(Data Save: ON かつ別キーモードで無い場合)
2535
- if (g_stateObj.dataSaveFlg && !hasVal(g_keyObj[`transKey${keyCtrlPtn}`])) {
2548
+ if (_retryFlg) {
2549
+ // リトライ時は初回に保存済みのため再保存しない (prevKey等も触らない)
2550
+ // 復元したキー割り当ては、初回保存時と同様にメモリ上を既定値へ戻す
2551
+ if (restoredFlg) {
2552
+ g_keyObj[`keyCtrl${keyCtrlPtn}`] = structuredClone(g_keyObj[`keyCtrl${keyCtrlPtn}d`]);
2553
+ }
2554
+ } else if (g_stateObj.dataSaveFlg && !hasVal(g_keyObj[`transKey${keyCtrlPtn}`])) {
2536
2555
 
2537
2556
  // 次回キーコンフィグ画面へ戻ったとき、保存済みキーコンフィグ設定が表示されるようにする
2538
2557
  g_keyObj.prevKey = `Dummy`;
@@ -2554,6 +2573,7 @@ const getArrowSettings = () => {
2554
2573
  storageObj[`keyCtrl${addKey}`] = setKeyCtrl(g_localKeyStorage, keyNum, keyCtrlPtn);
2555
2574
  if (g_keyObj.currentPtn !== -1) {
2556
2575
  storageObj[`keyCtrlPtn${addKey}`] = g_keyObj.currentPtn;
2576
+ g_keyCtrlBackup[keyCtrlPtn] = structuredClone(g_keyObj[`keyCtrl${keyCtrlPtn}`]);
2557
2577
  g_keyObj[`keyCtrl${keyCtrlPtn}`] = structuredClone(g_keyObj[`keyCtrl${keyCtrlPtn}d`]);
2558
2578
  }
2559
2579
 
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2026/09/13
8
- * Revised :
8
+ * Revised : 2026/10/20 (v50.5.7)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -1527,6 +1527,7 @@ const mainInit = () => {
1527
1527
  // FrzReturn演出はflowTimelineと独立したタイマーで動いているため、
1528
1528
  // 一時停止時点で早期終了させる(位置復元はせず、通常終了時と同じ後片付けを行う)
1529
1529
  resetFrzReturn();
1530
+ g_workObj.frzReturnPausedFlg = true;
1530
1531
  }
1531
1532
  g_timerHandler.clearTimeout(g_timeoutEvtId);
1532
1533
  g_audio.pause();
@@ -1603,6 +1604,11 @@ const mainInit = () => {
1603
1604
  pausedElapsedTime = null;
1604
1605
  pausedStartAdjustment = null;
1605
1606
  g_timeoutEvtId = g_timerHandler.setTimeout(flowTimeline, 1000 / g_fps);
1607
+
1608
+ if (g_workObj.frzReturnPausedFlg) {
1609
+ startFrzReturn();
1610
+ g_workObj.frzReturnPausedFlg = false;
1611
+ }
1606
1612
  };
1607
1613
 
1608
1614
  const tick = _remaining => {
@@ -1949,6 +1955,7 @@ const executeFrzReturn = (_seq, _idx, _axis) => {
1949
1955
  // 画面がプレイ画面から移動した場合
1950
1956
  g_workObj.frzReturnFlg = false;
1951
1957
  g_workObj.frzReturnTimerId = null;
1958
+ g_workObj.frzReturnPausedFlg = false;
1952
1959
  return;
1953
1960
  }
1954
1961
 
@@ -2012,7 +2019,7 @@ const executeRetry = async (_logLabel = `Retry`) => {
2012
2019
  clearWindow(`Main`);
2013
2020
  await musicAfterLoaded();
2014
2021
  await loadChartFile();
2015
- prepareScoreData();
2022
+ prepareScoreData(true);
2016
2023
  mainInit();
2017
2024
  } catch (e) {
2018
2025
  console.warn(`${_logLabel} audio load error: ${e}`);
@@ -2389,11 +2396,10 @@ const changeLifeColor = (_state = ``) => {
2389
2396
 
2390
2397
  if (_state !== `` && _state !== g_workObj.currentLifeState) {
2391
2398
  const lifeCss = g_cssObj[`life_${_state}`];
2392
- lblLife.classList.remove(g_cssObj.life_Max, g_cssObj.life_Cleared, g_cssObj.life_Failed);
2393
- lifeBar.classList.remove(g_cssObj.life_Max, g_cssObj.life_Cleared, g_cssObj.life_Failed);
2394
- lblLife.classList.add(lifeCss);
2395
- lifeBar.classList.add(lifeCss);
2396
-
2399
+ [lblLife, lifeBar].forEach(elm => {
2400
+ elm.classList.remove(g_cssObj.life_Max, g_cssObj.life_Cleared, g_cssObj.life_Failed);
2401
+ elm.classList.add(lifeCss);
2402
+ });
2397
2403
  g_workObj.currentLifeState = _state;
2398
2404
  }
2399
2405
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "50.5.5",
3
+ "version": "50.5.7",
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",