danoniplus 51.0.1 → 51.0.3
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 +3 -3
- package/js/lib/danoni_constants.js +10 -3
- package/js/lib/dosConverter.js +35 -48
- package/js/lib/settings.js +8 -6
- 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/
|
|
7
|
+
* Revised : 2026/09/26
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 51.0.
|
|
12
|
-
const g_revisedDate = `2026/09/
|
|
11
|
+
const g_version = `Ver 51.0.3`;
|
|
12
|
+
const g_revisedDate = `2026/09/26`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2019/11/19
|
|
8
|
-
* Revised : 2026/09/
|
|
8
|
+
* Revised : 2026/09/25 (v51.0.2)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -1368,7 +1368,13 @@ const g_gaugeDefObj = {
|
|
|
1368
1368
|
*/
|
|
1369
1369
|
const g_gaugeSelObj = {};
|
|
1370
1370
|
|
|
1371
|
-
/**
|
|
1371
|
+
/**
|
|
1372
|
+
* 譜面ヘッダー由来のゲージ設定をまとめて定義
|
|
1373
|
+
* - 定義方法はg_gaugeSelObjと類似しており、ゲージ名プロパティがない以外はほぼ同じ構造。
|
|
1374
|
+
*/
|
|
1375
|
+
const g_gaugeHeaderObj = {};
|
|
1376
|
+
|
|
1377
|
+
/** どの名前をどの順で選択肢に出すかだけを持つ。詳細値はg_gaugeDefObj、g_gaugeHeaderObj, g_gaugeSelObjを参照 */
|
|
1372
1378
|
const g_gaugeOptionObj = {
|
|
1373
1379
|
survival: [`Original`, `Heavy`, `NoRecovery`, `SuddenDeath`, `Practice`, `Light`],
|
|
1374
1380
|
border: [`Normal`, `Hard`, `SuddenDeath`, `Easy`],
|
|
@@ -1531,7 +1537,7 @@ const g_settings = {
|
|
|
1531
1537
|
settingWindowNum: 0,
|
|
1532
1538
|
|
|
1533
1539
|
preconditions: [`g_rootObj`, `g_headerObj`, `g_keyObj`, `g_scoreObj`, `g_workObj`,
|
|
1534
|
-
`g_detailObj`, `g_stateObj`, `g_attrObj`, `g_gaugeDefObj`, `g_gaugeSelObj`, `g_editorTmp`, `g_editorTmp2`],
|
|
1540
|
+
`g_detailObj`, `g_stateObj`, `g_attrObj`, `g_gaugeDefObj`, `g_gaugeHeaderObj`, `g_gaugeSelObj`, `g_editorTmp`, `g_editorTmp2`],
|
|
1535
1541
|
preconditionNum: 0,
|
|
1536
1542
|
preconditionNumSub: 0,
|
|
1537
1543
|
};
|
|
@@ -5328,6 +5334,7 @@ const g_root = {
|
|
|
5328
5334
|
get g_judgObj() { return g_judgObj },
|
|
5329
5335
|
get g_judgRanges() { return g_judgRanges },
|
|
5330
5336
|
get g_gaugeDefObj() { return g_gaugeDefObj },
|
|
5337
|
+
get g_gaugeHeaderObj() { return g_gaugeHeaderObj },
|
|
5331
5338
|
get g_gaugeSelObj() { return g_gaugeSelObj },
|
|
5332
5339
|
};
|
|
5333
5340
|
const getPathVal = _path => _path.split(`.`).reduce((o, k) => o?.[k], g_root);
|
package/js/lib/dosConverter.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2026/09/13
|
|
8
|
-
* Revised : 2026/09/
|
|
8
|
+
* Revised : 2026/09/26 (v51.0.3)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -228,9 +228,6 @@ const initialControl = async () => {
|
|
|
228
228
|
// 初期色設定(譜面ヘッダー)の初期設定
|
|
229
229
|
Object.assign(g_headerObj, resetBaseColorList(g_headerObj, g_rootObj));
|
|
230
230
|
|
|
231
|
-
// 非分割時は getGaugeSetting が全難易度を一括構築するため、初回のみで十分
|
|
232
|
-
const loopCount = g_stateObj.dosDivideFlg ? g_headerObj.keyLabels.length : 1;
|
|
233
|
-
|
|
234
231
|
for (let j = 0; j < g_headerObj.difLabels.length; j++) {
|
|
235
232
|
|
|
236
233
|
// 譜面ファイルが分割されている場合、譜面詳細情報取得のために譜面をロード
|
|
@@ -261,11 +258,8 @@ const initialControl = async () => {
|
|
|
261
258
|
|
|
262
259
|
// カスタムゲージの設定(譜面ヘッダー側)
|
|
263
260
|
resetCustomGauge(g_rootObj, { scoreId: j });
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
Object.keys(g_gaugeOptionObj.customFulls).forEach(gaugePtn =>
|
|
267
|
-
getGaugeSetting(g_rootObj, gaugePtn, g_headerObj.difLabels.length, { scoreId: j }));
|
|
268
|
-
}
|
|
261
|
+
Object.keys(g_gaugeOptionObj.customFulls).forEach(gaugePtn =>
|
|
262
|
+
getGaugeSetting(g_rootObj, gaugePtn, { scoreId: j }));
|
|
269
263
|
}
|
|
270
264
|
}
|
|
271
265
|
safeExecuteCustomHooks(`g_customJsObj.preTitle`, g_customJsObj.preTitle);
|
|
@@ -1242,24 +1236,20 @@ const headerConvert = _dosObj => {
|
|
|
1242
1236
|
obj.keyLabels = [];
|
|
1243
1237
|
obj.difLabels = [];
|
|
1244
1238
|
obj.initSpeeds = [];
|
|
1245
|
-
obj.lifeBorders = [];
|
|
1246
|
-
obj.lifeRecoverys = [];
|
|
1247
|
-
obj.lifeDamages = [];
|
|
1248
|
-
obj.lifeInits = [];
|
|
1249
1239
|
obj.creatorNames = [];
|
|
1250
1240
|
obj.difficulties = [];
|
|
1251
1241
|
g_stateObj.scoreId = (g_stateObj.scoreId < difs.length ? g_stateObj.scoreId : 0);
|
|
1252
1242
|
|
|
1253
|
-
difs.forEach(dif => {
|
|
1243
|
+
difs.forEach((dif, scoreId) => {
|
|
1254
1244
|
const difDetails = dif.split(`,`);
|
|
1255
1245
|
const lifeData = (_type) =>
|
|
1256
1246
|
difDetails[difpos[_type]] || g_presetObj.gauge?.[_type] || g_gaugeDefObj.Original[_type];
|
|
1257
1247
|
|
|
1258
1248
|
// ライフ:ノルマ、回復量、ダメージ量、初期値の設定
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1249
|
+
g_gaugeHeaderObj[scoreId] = {
|
|
1250
|
+
Border: lifeData(`Border`), Recovery: lifeData(`Recovery`),
|
|
1251
|
+
Damage: lifeData(`Damage`), Init: lifeData(`Init`),
|
|
1252
|
+
};
|
|
1263
1253
|
|
|
1264
1254
|
// キー数
|
|
1265
1255
|
const keyLabel = difDetails[difpos.Key] || g_keyObj.initKeyLabel;
|
|
@@ -1285,10 +1275,7 @@ const headerConvert = _dosObj => {
|
|
|
1285
1275
|
obj.keyLabels = [g_keyObj.initKeyLabel];
|
|
1286
1276
|
obj.difLabels = [`Normal`];
|
|
1287
1277
|
obj.initSpeeds = [3.5];
|
|
1288
|
-
|
|
1289
|
-
obj.lifeRecoverys = [6];
|
|
1290
|
-
obj.lifeDamages = [40];
|
|
1291
|
-
obj.lifeInits = [25];
|
|
1278
|
+
g_gaugeHeaderObj[0] = { ...g_gaugeDefObj.Original };
|
|
1292
1279
|
obj.creatorNames = [obj.tuning];
|
|
1293
1280
|
obj.difficulties = [0];
|
|
1294
1281
|
}
|
|
@@ -2110,31 +2097,17 @@ const resetCustomGauge = (_dosObj, { scoreId = 0 } = {}) => {
|
|
|
2110
2097
|
* ゲージ別個別設定の取得
|
|
2111
2098
|
* @param {object} _dosObj
|
|
2112
2099
|
* @param {string} _name
|
|
2113
|
-
* @param {number} _difLength
|
|
2114
2100
|
* @param {string} [object.scoreId=0]
|
|
2115
2101
|
*/
|
|
2116
|
-
const getGaugeSetting = (_dosObj, _name,
|
|
2117
|
-
|
|
2118
|
-
/** ゲージ設定上書きフラグ */
|
|
2119
|
-
const gaugeUpdateFlg = g_stateObj.scoreLockFlg && scoreId > 0;
|
|
2102
|
+
const getGaugeSetting = (_dosObj, _name, { scoreId = 0 } = {}) => {
|
|
2120
2103
|
const gauges = hasVal(_dosObj[`gauge${_name}`]) ? splitLF2(_dosObj[`gauge${_name}`]) : [];
|
|
2121
2104
|
|
|
2122
|
-
const registerGaugeDetails = (_scoreId) => {
|
|
2123
|
-
const gaugeDetails = getGaugeDetailList(_scoreId);
|
|
2124
|
-
if (!hasVal(gaugeDetails)) return; // baseも譜面別ヘッダーもどちらも無ければ何もしない
|
|
2125
|
-
const [border, recovery, damage, init] = gaugeDetails;
|
|
2126
|
-
g_gaugeSelObj[_scoreId] ??= structuredClone(g_gaugeSelObj.default ?? { __order: [] });
|
|
2127
|
-
g_gaugeSelObj[_scoreId][_name] = { ...g_gaugeSelObj[_scoreId][_name], Border: border, Recovery: recovery, Damage: damage, Init: init };
|
|
2128
|
-
};
|
|
2129
|
-
|
|
2130
2105
|
/**
|
|
2131
2106
|
* gaugeNormal2, gaugeEasy2などの個別設定があった場合にその値から配列を作成
|
|
2132
|
-
* @param {number} _scoreId
|
|
2133
|
-
* @param {number[]} _defaultGaugeList
|
|
2134
2107
|
* @returns {number[]}
|
|
2135
2108
|
*/
|
|
2136
|
-
const getGaugeDetailList = (
|
|
2137
|
-
const idHeader = (
|
|
2109
|
+
const getGaugeDetailList = () => {
|
|
2110
|
+
const idHeader = (scoreId === 0) ? 1 : setScoreIdHeader(scoreId, g_stateObj.scoreLockFlg, false);
|
|
2138
2111
|
if (hasVal(idHeader)) {
|
|
2139
2112
|
const dosId = (idHeader || 0) - 1;
|
|
2140
2113
|
const headerName = `gauge${_name}${idHeader}`;
|
|
@@ -2143,21 +2116,19 @@ const getGaugeSetting = (_dosObj, _name, _difLength, { scoreId = 0 } = {}) => {
|
|
|
2143
2116
|
return (detailGauges[dosId] || detailGauges[0])?.split(`,`);
|
|
2144
2117
|
}
|
|
2145
2118
|
}
|
|
2146
|
-
return (gauges[
|
|
2119
|
+
return (gauges[scoreId] || gauges[0])?.split(`,`);
|
|
2147
2120
|
};
|
|
2148
2121
|
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
}
|
|
2155
|
-
}
|
|
2122
|
+
const gaugeDetails = getGaugeDetailList();
|
|
2123
|
+
if (!hasVal(gaugeDetails)) return;
|
|
2124
|
+
const [border, recovery, damage, init] = gaugeDetails;
|
|
2125
|
+
g_gaugeSelObj[scoreId] ??= structuredClone(g_gaugeSelObj.default ?? { __order: [] });
|
|
2126
|
+
g_gaugeSelObj[scoreId][_name] = { ...g_gaugeSelObj[scoreId][_name], Border: border, Recovery: recovery, Damage: damage, Init: init };
|
|
2156
2127
|
};
|
|
2157
2128
|
|
|
2158
2129
|
/**
|
|
2159
2130
|
* 【参照用】g_gaugeOptionObjの旧プロパティを参照できるようにする関数
|
|
2160
|
-
* (initXXX/rcvXXX/dmgXXX/clearXXX
|
|
2131
|
+
* (initXXX/rcvXXX/dmgXXX/clearXXX/typeXXX/varXXX)
|
|
2161
2132
|
* - カスタムスクリプト側で既存ゲージの既定値を参照するための補助関数。本体からの呼び出しはない。
|
|
2162
2133
|
*/
|
|
2163
2134
|
const restoreLegacyGaugeReference = () => {
|
|
@@ -2175,6 +2146,22 @@ const restoreLegacyGaugeReference = () => {
|
|
|
2175
2146
|
});
|
|
2176
2147
|
};
|
|
2177
2148
|
|
|
2149
|
+
/**
|
|
2150
|
+
* 【参照用】g_headerObjの旧プロパティを参照可能にする関数
|
|
2151
|
+
* (lifeBorders/lifeRecoverys/lifeDamages/lifeInits)
|
|
2152
|
+
* - カスタムスクリプト側で既存ゲージの既定値を参照するための補助関数。本体からの呼び出しはない。
|
|
2153
|
+
*/
|
|
2154
|
+
const restoreLegacyGaugeHeaderReference = () => {
|
|
2155
|
+
[`Border`, `Recovery`, `Damage`, `Init`].forEach(type => {
|
|
2156
|
+
const legacyType = `life${type}s`;
|
|
2157
|
+
g_headerObj[legacyType] = [];
|
|
2158
|
+
|
|
2159
|
+
for (let j = 0; j < g_headerObj.difLabels.length; j++) {
|
|
2160
|
+
g_headerObj[legacyType].push(g_gaugeHeaderObj[j][type]);
|
|
2161
|
+
}
|
|
2162
|
+
})
|
|
2163
|
+
};
|
|
2164
|
+
|
|
2178
2165
|
/**
|
|
2179
2166
|
* 【反映用】カスタムスクリプトが旧形式で作った個別ゲージ設定
|
|
2180
2167
|
* - g_gaugeOptionObj[`gauge${_name}s`] = { lifeBorders, lifeRecoverys, lifeDamages, lifeInits }
|
package/js/lib/settings.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2026/09/13
|
|
8
|
-
* Revised : 2026/09/
|
|
8
|
+
* Revised : 2026/09/25 (v51.0.2)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -1422,7 +1422,7 @@ const setDifficulty = (_chartChangeFlg) => {
|
|
|
1422
1422
|
);
|
|
1423
1423
|
|
|
1424
1424
|
// ゲージ設定及びカーソル位置調整
|
|
1425
|
-
setGauge(0, !
|
|
1425
|
+
setGauge(0, !g_initialFlg);
|
|
1426
1426
|
|
|
1427
1427
|
// 速度、スクロール、アシスト設定のカーソル位置調整
|
|
1428
1428
|
if (_chartChangeFlg) {
|
|
@@ -2204,7 +2204,7 @@ const setGauge = (() => {
|
|
|
2204
2204
|
* @param {boolean} _gaugeInitFlg true時は前回選択していたゲージ名を引き継がず、配列の先頭を強制的に使う
|
|
2205
2205
|
*/
|
|
2206
2206
|
const resolveGaugeType = (_scrollNum, _gaugeInitFlg) => {
|
|
2207
|
-
applyLifeModeSwitch(
|
|
2207
|
+
applyLifeModeSwitch(g_gaugeHeaderObj[g_stateObj.scoreId].Border);
|
|
2208
2208
|
g_gaugeType = (currentGaugeSel?.__order?.length > 0 ? C_LFE_CUSTOM : g_stateObj.lifeMode);
|
|
2209
2209
|
|
|
2210
2210
|
g_settings.gauges = structuredClone(g_gaugeType === C_LFE_CUSTOM
|
|
@@ -2244,10 +2244,12 @@ const setGauge = (() => {
|
|
|
2244
2244
|
);
|
|
2245
2245
|
if (getGaugeRoot(g_stateObj.gauge) !== firstOverridableRoot) return;
|
|
2246
2246
|
}
|
|
2247
|
-
|
|
2248
|
-
|
|
2247
|
+
const header = g_gaugeHeaderObj[g_stateObj.scoreId];
|
|
2248
|
+
applyLifeModeSwitch(header.Border);
|
|
2249
|
+
g_stateObj.lifeInit = getGaugeCalc(header.Init, g_stateObj.lifeInit);
|
|
2250
|
+
g_stateObj.lifeRcv = getGaugeCalc(header.Recovery, g_stateObj.lifeRcv)
|
|
2249
2251
|
* (hasVal(def.deriveRecoveryFrom) ? 2 : 1);
|
|
2250
|
-
g_stateObj.lifeDmg = getGaugeCalc(
|
|
2252
|
+
g_stateObj.lifeDmg = getGaugeCalc(header.Damage, g_stateObj.lifeDmg);
|
|
2251
2253
|
};
|
|
2252
2254
|
|
|
2253
2255
|
/**
|