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 +6 -5
- package/js/lib/dataLoader.js +25 -5
- package/js/lib/mainWindow.js +13 -7
- 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/
|
|
7
|
+
* Revised : 2026/10/20
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 50.5.
|
|
12
|
-
const g_revisedDate = `2026/
|
|
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
|
-
|
|
714
|
+
const formattedKey = colorFmt ? escapeHtml(key) : key;
|
|
715
|
+
return `<br>${nestedIndent}"${formattedKey}": ${formattedValue}`;
|
|
715
716
|
})).filter(val => !hasVal(val) || val !== `----`);
|
|
716
717
|
|
|
717
718
|
// 配列なら[]で囲む、オブジェクトなら{}で囲む
|
package/js/lib/dataLoader.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2026/09/13
|
|
8
|
-
* Revised : 2026/
|
|
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 (
|
|
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
|
|
package/js/lib/mainWindow.js
CHANGED
|
@@ -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
|
|
2393
|
-
|
|
2394
|
-
|
|
2395
|
-
|
|
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
|
|