danoniplus 51.0.2 → 51.1.0
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 +12 -6
- package/js/lib/dosConverter.js +91 -35
- package/js/lib/settings.js +20 -105
- 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/27
|
|
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.1.0`;
|
|
12
|
+
const g_revisedDate = `2026/09/27`;
|
|
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/27 (v51.1.0)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -1340,6 +1340,12 @@ const g_gaugeDefObj = {
|
|
|
1340
1340
|
Easy: { Border: 70, Recovery: 4, Damage: 7, Init: 25, Variable: C_FLG_ON, headerOverridable: true, deriveRecoveryFrom: `Normal` },
|
|
1341
1341
|
};
|
|
1342
1342
|
|
|
1343
|
+
/**
|
|
1344
|
+
* 譜面ヘッダー由来のゲージ設定をまとめて定義
|
|
1345
|
+
* - 定義方法はg_gaugeSelObjと類似しており、ゲージ名プロパティがない以外はほぼ同じ構造。
|
|
1346
|
+
*/
|
|
1347
|
+
const g_gaugeHeaderObj = {};
|
|
1348
|
+
|
|
1343
1349
|
/**
|
|
1344
1350
|
* カスタムゲージの選択状態・個別上書き値
|
|
1345
1351
|
* - g_gaugeSelObj[scoreId] = {
|
|
@@ -1368,11 +1374,10 @@ const g_gaugeDefObj = {
|
|
|
1368
1374
|
*/
|
|
1369
1375
|
const g_gaugeSelObj = {};
|
|
1370
1376
|
|
|
1371
|
-
/**
|
|
1372
|
-
*
|
|
1373
|
-
* - 定義方法はg_gaugeSelObjと類似しており、ゲージ名プロパティがない以外はほぼ同じ構造。
|
|
1377
|
+
/**
|
|
1378
|
+
* 最終的に適用するゲージ設定値のサマリー
|
|
1374
1379
|
*/
|
|
1375
|
-
const
|
|
1380
|
+
const g_gaugeResolvedObj = {};
|
|
1376
1381
|
|
|
1377
1382
|
/** どの名前をどの順で選択肢に出すかだけを持つ。詳細値はg_gaugeDefObj、g_gaugeHeaderObj, g_gaugeSelObjを参照 */
|
|
1378
1383
|
const g_gaugeOptionObj = {
|
|
@@ -1537,7 +1542,8 @@ const g_settings = {
|
|
|
1537
1542
|
settingWindowNum: 0,
|
|
1538
1543
|
|
|
1539
1544
|
preconditions: [`g_rootObj`, `g_headerObj`, `g_keyObj`, `g_scoreObj`, `g_workObj`,
|
|
1540
|
-
`g_detailObj`, `g_stateObj`, `g_attrObj`,
|
|
1545
|
+
`g_detailObj`, `g_stateObj`, `g_attrObj`,
|
|
1546
|
+
`g_gaugeDefObj`, `g_gaugeHeaderObj`, `g_gaugeSelObj`, `g_gaugeResolvedObj`, `g_editorTmp`, `g_editorTmp2`],
|
|
1541
1547
|
preconditionNum: 0,
|
|
1542
1548
|
preconditionNumSub: 0,
|
|
1543
1549
|
};
|
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/27 (v51.1.0)
|
|
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,13 +258,14 @@ 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
|
}
|
|
265
|
+
// g_loadObj.mainがfalseで上のブロックが丸ごとスキップされた場合でも、
|
|
266
|
+
// setGaugeが必ずg_gaugeResolvedObjを引けるよう毎回解決し直す
|
|
267
|
+
resolveGaugeValuesAll();
|
|
268
|
+
|
|
271
269
|
safeExecuteCustomHooks(`g_customJsObj.preTitle`, g_customJsObj.preTitle);
|
|
272
270
|
const queryMusicId = getQueryParamVal(`musicId`);
|
|
273
271
|
g_settings.musicIdxNum = queryMusicId !== null ? Number(queryMusicId) :
|
|
@@ -2074,7 +2072,7 @@ const resetCustomGauge = (_dosObj, { scoreId = 0 } = {}) => {
|
|
|
2074
2072
|
|
|
2075
2073
|
const scoreIdHeader = (scoreId === 0 && hasVal(_dosObj[`customGauge1`]))
|
|
2076
2074
|
? 1 : setScoreIdHeader(scoreId, g_stateObj.scoreLockFlg, false);
|
|
2077
|
-
const dosCustomGauge = _dosObj[`customGauge${scoreIdHeader}`];
|
|
2075
|
+
const dosCustomGauge = _dosObj[`customGauge${scoreIdHeader}`] ?? _dosObj.customGauge;
|
|
2078
2076
|
if (!hasVal(dosCustomGauge)) return;
|
|
2079
2077
|
|
|
2080
2078
|
g_gaugeSelObj[scoreId] = structuredClone(g_gaugeSelObj.default ?? { __order: [] });
|
|
@@ -2103,31 +2101,17 @@ const resetCustomGauge = (_dosObj, { scoreId = 0 } = {}) => {
|
|
|
2103
2101
|
* ゲージ別個別設定の取得
|
|
2104
2102
|
* @param {object} _dosObj
|
|
2105
2103
|
* @param {string} _name
|
|
2106
|
-
* @param {number} _difLength
|
|
2107
2104
|
* @param {string} [object.scoreId=0]
|
|
2108
2105
|
*/
|
|
2109
|
-
const getGaugeSetting = (_dosObj, _name,
|
|
2110
|
-
|
|
2111
|
-
/** ゲージ設定上書きフラグ */
|
|
2112
|
-
const gaugeUpdateFlg = g_stateObj.scoreLockFlg && scoreId > 0;
|
|
2106
|
+
const getGaugeSetting = (_dosObj, _name, { scoreId = 0 } = {}) => {
|
|
2113
2107
|
const gauges = hasVal(_dosObj[`gauge${_name}`]) ? splitLF2(_dosObj[`gauge${_name}`]) : [];
|
|
2114
2108
|
|
|
2115
|
-
const registerGaugeDetails = (_scoreId) => {
|
|
2116
|
-
const gaugeDetails = getGaugeDetailList(_scoreId);
|
|
2117
|
-
if (!hasVal(gaugeDetails)) return; // baseも譜面別ヘッダーもどちらも無ければ何もしない
|
|
2118
|
-
const [border, recovery, damage, init] = gaugeDetails;
|
|
2119
|
-
g_gaugeSelObj[_scoreId] ??= structuredClone(g_gaugeSelObj.default ?? { __order: [] });
|
|
2120
|
-
g_gaugeSelObj[_scoreId][_name] = { ...g_gaugeSelObj[_scoreId][_name], Border: border, Recovery: recovery, Damage: damage, Init: init };
|
|
2121
|
-
};
|
|
2122
|
-
|
|
2123
2109
|
/**
|
|
2124
2110
|
* gaugeNormal2, gaugeEasy2などの個別設定があった場合にその値から配列を作成
|
|
2125
|
-
* @param {number} _scoreId
|
|
2126
|
-
* @param {number[]} _defaultGaugeList
|
|
2127
2111
|
* @returns {number[]}
|
|
2128
2112
|
*/
|
|
2129
|
-
const getGaugeDetailList = (
|
|
2130
|
-
const idHeader = (
|
|
2113
|
+
const getGaugeDetailList = () => {
|
|
2114
|
+
const idHeader = (scoreId === 0) ? 1 : setScoreIdHeader(scoreId, g_stateObj.scoreLockFlg, false);
|
|
2131
2115
|
if (hasVal(idHeader)) {
|
|
2132
2116
|
const dosId = (idHeader || 0) - 1;
|
|
2133
2117
|
const headerName = `gauge${_name}${idHeader}`;
|
|
@@ -2136,16 +2120,78 @@ const getGaugeSetting = (_dosObj, _name, _difLength, { scoreId = 0 } = {}) => {
|
|
|
2136
2120
|
return (detailGauges[dosId] || detailGauges[0])?.split(`,`);
|
|
2137
2121
|
}
|
|
2138
2122
|
}
|
|
2139
|
-
return (gauges[
|
|
2123
|
+
return (gauges[scoreId] || gauges[0])?.split(`,`);
|
|
2140
2124
|
};
|
|
2141
2125
|
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2126
|
+
const gaugeDetails = getGaugeDetailList();
|
|
2127
|
+
if (!hasVal(gaugeDetails)) return;
|
|
2128
|
+
const [border, recovery, damage, init] = gaugeDetails;
|
|
2129
|
+
g_gaugeSelObj[scoreId] ??= structuredClone(g_gaugeSelObj.default ?? { __order: [] });
|
|
2130
|
+
g_gaugeSelObj[scoreId][_name] = { ...g_gaugeSelObj[scoreId][_name], Border: border, Recovery: recovery, Damage: damage, Init: init };
|
|
2131
|
+
};
|
|
2132
|
+
|
|
2133
|
+
/**
|
|
2134
|
+
* 全ゲージ名の最終値(Border/Recovery/Damage/Init/Variable)を決定する関数
|
|
2135
|
+
*/
|
|
2136
|
+
const resolveGaugeValuesAll = () => {
|
|
2137
|
+
for (let j = 0; j < g_headerObj.difLabels.length; j++) {
|
|
2138
|
+
resolveGaugeValues(j);
|
|
2148
2139
|
}
|
|
2140
|
+
}
|
|
2141
|
+
|
|
2142
|
+
/**
|
|
2143
|
+
* (scoreId)単位で、その譜面の全ゲージ名の最終値(Border/Recovery/Damage/Init/Variable)を
|
|
2144
|
+
* 事前に解決し、g_gaugeResolvedObj[scoreId]として保持する。
|
|
2145
|
+
* カーソル位置には依存しない、譜面が決まれば決まる値なので、getGaugeSetting(j)の直後に1回だけ呼ぶ
|
|
2146
|
+
* @param {number} _scoreId
|
|
2147
|
+
*/
|
|
2148
|
+
const resolveGaugeValues = (_scoreId) => {
|
|
2149
|
+
const getGaugeCalc = (_val, _defaultVal) => setVal(convertStrToVal(
|
|
2150
|
+
replaceStr(_val, g_escapeStr.gaugeParamName)?.split(`{0}`).join(_scoreId)
|
|
2151
|
+
), _defaultVal, C_TYP_CALC);
|
|
2152
|
+
const resolveBorder = (_border, _defaultVal) => (_border === `x` ? `x` : getGaugeCalc(_border, _defaultVal));
|
|
2153
|
+
|
|
2154
|
+
const currentGaugeSel = g_gaugeSelObj[_scoreId] || g_gaugeSelObj[0] || g_gaugeSelObj.default;
|
|
2155
|
+
const header = g_gaugeHeaderObj[_scoreId];
|
|
2156
|
+
const isCustom = currentGaugeSel?.__order?.length > 0;
|
|
2157
|
+
const order = isCustom
|
|
2158
|
+
? currentGaugeSel.__order
|
|
2159
|
+
: g_gaugeOptionObj[header.Border === `x` ? `survival` : `border`];
|
|
2160
|
+
|
|
2161
|
+
// __order内で最初に出てくるheaderOverridable「系統」だけにdifDataを適用する(Light/EasyはOriginal/Normalの系統扱い)
|
|
2162
|
+
const getGaugeRoot = _name => g_gaugeDefObj[_name]?.deriveRecoveryFrom ?? _name;
|
|
2163
|
+
const firstOverridableRoot = getGaugeRoot(order.find(name => g_gaugeDefObj[name]?.headerOverridable));
|
|
2164
|
+
|
|
2165
|
+
const resolved = { __order: order.concat(), __custom: isCustom };
|
|
2166
|
+
order.forEach(name => {
|
|
2167
|
+
const def = g_gaugeDefObj[name] ?? {};
|
|
2168
|
+
|
|
2169
|
+
// Step1:基本設定(g_gaugeDefObj)をまず適用
|
|
2170
|
+
const value = { Border: def.Border, Recovery: def.Recovery, Damage: def.Damage, Init: def.Init };
|
|
2171
|
+
|
|
2172
|
+
// Step2:譜面ヘッダー(headerOverridable、系統一致のみ)
|
|
2173
|
+
if (def.headerOverridable && (!isCustom || getGaugeRoot(name) === firstOverridableRoot)) {
|
|
2174
|
+
value.Border = resolveBorder(header.Border, value.Border);
|
|
2175
|
+
value.Recovery = getGaugeCalc(header.Recovery, value.Recovery) * (hasVal(def.deriveRecoveryFrom) ? 2 : 1);
|
|
2176
|
+
value.Damage = getGaugeCalc(header.Damage, value.Damage);
|
|
2177
|
+
value.Init = getGaugeCalc(header.Init, value.Init);
|
|
2178
|
+
}
|
|
2179
|
+
|
|
2180
|
+
// Step3:ゲージ個別設定(最優先)
|
|
2181
|
+
const override = currentGaugeSel?.[name];
|
|
2182
|
+
if (override?.Recovery !== undefined) {
|
|
2183
|
+
if (hasVal(override.Border)) {
|
|
2184
|
+
value.Border = resolveBorder(override.Border, value.Border);
|
|
2185
|
+
}
|
|
2186
|
+
value.Recovery = getGaugeCalc(override.Recovery, value.Recovery);
|
|
2187
|
+
value.Damage = getGaugeCalc(override.Damage, value.Damage);
|
|
2188
|
+
value.Init = getGaugeCalc(override.Init, value.Init);
|
|
2189
|
+
}
|
|
2190
|
+
|
|
2191
|
+
value.Variable = override?.Variable ?? def.Variable ?? C_FLG_OFF;
|
|
2192
|
+
resolved[name] = value;
|
|
2193
|
+
});
|
|
2194
|
+
g_gaugeResolvedObj[_scoreId] = resolved;
|
|
2149
2195
|
};
|
|
2150
2196
|
|
|
2151
2197
|
/**
|
|
@@ -2184,11 +2230,21 @@ const restoreLegacyGaugeHeaderReference = () => {
|
|
|
2184
2230
|
})
|
|
2185
2231
|
};
|
|
2186
2232
|
|
|
2233
|
+
/**
|
|
2234
|
+
* 【反映用】カスタムスクリプトが旧形式で作った個別ゲージ設定の適用
|
|
2235
|
+
* - g_gaugeOptionObj[`gauge${name}s`](旧形式)で用意した各ゲージ名の個別設定を
|
|
2236
|
+
* まとめてg_gaugeSelObjへ反映し、影響する全譜面分のg_gaugeResolvedObjを再計算する。
|
|
2237
|
+
* - カスタムJS側はこの1関数を呼ぶだけでよく、applyLegacyGaugeOverride単体での呼び出しは不要
|
|
2238
|
+
*/
|
|
2239
|
+
const applyLegacyGaugeOverrides = () => {
|
|
2240
|
+
Object.keys(g_gaugeOptionObj.customFulls).forEach(name => applyLegacyGaugeOverride(name));
|
|
2241
|
+
resolveGaugeValuesAll();
|
|
2242
|
+
};
|
|
2243
|
+
|
|
2187
2244
|
/**
|
|
2188
2245
|
* 【反映用】カスタムスクリプトが旧形式で作った個別ゲージ設定
|
|
2189
2246
|
* - g_gaugeOptionObj[`gauge${_name}s`] = { lifeBorders, lifeRecoverys, lifeDamages, lifeInits }
|
|
2190
2247
|
* (それぞれscoreId順の配列)を、新プロパティ g_gaugeSelObj[scoreId][_name] へ変換して反映する
|
|
2191
|
-
* - 本体からの呼び出しは無いため、カスタムスクリプト側で呼び出しする想定
|
|
2192
2248
|
* @param {string} _name ゲージ名
|
|
2193
2249
|
*/
|
|
2194
2250
|
const applyLegacyGaugeOverride = (_name) => {
|
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/27 (v51.1.0)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -2175,110 +2175,25 @@ const setReverseView = _btn => {
|
|
|
2175
2175
|
* ゲージ設定メイン
|
|
2176
2176
|
* @param {number} _scrollNum
|
|
2177
2177
|
*/
|
|
2178
|
-
const setGauge = (
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
const resolveCustomGaugeSel = () => {
|
|
2198
|
-
currentGaugeSel = g_gaugeSelObj[g_stateObj.scoreId] || g_gaugeSelObj[0] || g_gaugeSelObj.default;
|
|
2199
|
-
};
|
|
2200
|
-
|
|
2201
|
-
/**
|
|
2202
|
-
* 【Step1】ゲージ種別(g_gaugeType)を確定し、ゲージ配列とカーソル位置を入れ替える
|
|
2203
|
-
* @param {number} _scrollNum
|
|
2204
|
-
* @param {boolean} _gaugeInitFlg true時は前回選択していたゲージ名を引き継がず、配列の先頭を強制的に使う
|
|
2205
|
-
*/
|
|
2206
|
-
const resolveGaugeType = (_scrollNum, _gaugeInitFlg) => {
|
|
2207
|
-
applyLifeModeSwitch(g_gaugeHeaderObj[g_stateObj.scoreId].Border);
|
|
2208
|
-
g_gaugeType = (currentGaugeSel?.__order?.length > 0 ? C_LFE_CUSTOM : g_stateObj.lifeMode);
|
|
2209
|
-
|
|
2210
|
-
g_settings.gauges = structuredClone(g_gaugeType === C_LFE_CUSTOM
|
|
2211
|
-
? currentGaugeSel.__order
|
|
2212
|
-
: g_gaugeOptionObj[g_gaugeType.toLowerCase()]);
|
|
2213
|
-
g_settings.gaugeNum = (_gaugeInitFlg ? 0 : getCurrentNo(g_settings.gauges, g_stateObj.gauge));
|
|
2214
|
-
g_stateObj.gauge = g_settings.gauges[g_settings.gaugeNum];
|
|
2215
|
-
|
|
2216
|
-
setSetting(_scrollNum, `gauge`);
|
|
2217
|
-
g_stateObj.lifeVariable = currentGaugeSel?.[g_stateObj.gauge]?.Variable
|
|
2218
|
-
?? g_gaugeDefObj[g_stateObj.gauge]?.Variable
|
|
2219
|
-
?? C_FLG_OFF;
|
|
2220
|
-
};
|
|
2221
|
-
|
|
2222
|
-
/** 【Step2:基本設定】g_gaugeDefObjのカーソル位置に対応する初期設定を適用 */
|
|
2223
|
-
const applyBaseGaugeSettings = () => {
|
|
2224
|
-
const def = g_gaugeDefObj[g_stateObj.gauge];
|
|
2225
|
-
if (!hasVal(def)) return;
|
|
2226
|
-
g_stateObj.lifeMode = (def.Border === `x` ? C_LFE_SURVIVAL : C_LFE_BORDER);
|
|
2227
|
-
g_stateObj.lifeBorder = (def.Border === `x` ? 0 : def.Border);
|
|
2228
|
-
g_stateObj.lifeInit = def.Init;
|
|
2229
|
-
g_stateObj.lifeRcv = def.Recovery;
|
|
2230
|
-
g_stateObj.lifeDmg = def.Damage;
|
|
2231
|
-
};
|
|
2232
|
-
|
|
2233
|
-
/** 【Step3:譜面ヘッダー】headerOverridable指定ゲージのみ、difData由来の値で上書き */
|
|
2234
|
-
const applyHeaderGaugeSettings = () => {
|
|
2235
|
-
const def = g_gaugeDefObj[g_stateObj.gauge];
|
|
2236
|
-
if (!def?.headerOverridable) return;
|
|
2237
|
-
if (g_gaugeType === C_LFE_CUSTOM) {
|
|
2238
|
-
// カスタム選択でOriginal/Normal等headerOverridable対象が複数混在する場合、
|
|
2239
|
-
// difDataは1つしか値を持たないため、選択順で最初に出てきた「系統」だけに適用する。
|
|
2240
|
-
// Light/EasyはOriginal/Normalの系統として扱う(deriveRecoveryFromで判定)
|
|
2241
|
-
const getGaugeRoot = _name => g_gaugeDefObj[_name]?.deriveRecoveryFrom ?? _name;
|
|
2242
|
-
const firstOverridableRoot = getGaugeRoot(
|
|
2243
|
-
g_settings.gauges.find(name => g_gaugeDefObj[name]?.headerOverridable)
|
|
2244
|
-
);
|
|
2245
|
-
if (getGaugeRoot(g_stateObj.gauge) !== firstOverridableRoot) return;
|
|
2246
|
-
}
|
|
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)
|
|
2251
|
-
* (hasVal(def.deriveRecoveryFrom) ? 2 : 1);
|
|
2252
|
-
g_stateObj.lifeDmg = getGaugeCalc(header.Damage, g_stateObj.lifeDmg);
|
|
2253
|
-
};
|
|
2254
|
-
|
|
2255
|
-
/**
|
|
2256
|
-
* 【Step4:ゲージ個別設定(最優先)】gaugeXXXで明示的に設定された値があれば上書き。
|
|
2257
|
-
* g_gaugeSelObj[scoreId][name]は既に単一譜面分の値なので、g_headerObj用の
|
|
2258
|
-
* applyLifeModeSwitch/applyLifeCategory(配列アクセス版)は使わず直接適用する
|
|
2259
|
-
*/
|
|
2260
|
-
const applyIndividualGaugeSettings = () => {
|
|
2261
|
-
const override = currentGaugeSel?.[g_stateObj.gauge];
|
|
2262
|
-
if (override?.Recovery === undefined) return; // gaugeXXXヘッダー由来の上書きが無い(overrideが無い/Variableのみの場合を含む)
|
|
2263
|
-
if (hasVal(override.Border)) {
|
|
2264
|
-
applyLifeModeSwitch(override.Border);
|
|
2265
|
-
}
|
|
2266
|
-
g_stateObj.lifeInit = getGaugeCalc(override.Init, g_stateObj.lifeInit);
|
|
2267
|
-
g_stateObj.lifeRcv = getGaugeCalc(override.Recovery, g_stateObj.lifeRcv);
|
|
2268
|
-
g_stateObj.lifeDmg = getGaugeCalc(override.Damage, g_stateObj.lifeDmg);
|
|
2269
|
-
};
|
|
2270
|
-
|
|
2271
|
-
return (_scrollNum, _gaugeInitFlg = false) => {
|
|
2272
|
-
resolveCustomGaugeSel();
|
|
2273
|
-
resolveGaugeType(_scrollNum, _gaugeInitFlg);
|
|
2274
|
-
applyBaseGaugeSettings();
|
|
2275
|
-
applyHeaderGaugeSettings();
|
|
2276
|
-
applyIndividualGaugeSettings();
|
|
2277
|
-
|
|
2278
|
-
lblGauge2.innerHTML = gaugeFormat(g_stateObj.lifeMode,
|
|
2279
|
-
g_stateObj.lifeBorder, g_stateObj.lifeRcv, g_stateObj.lifeDmg, g_stateObj.lifeInit, g_stateObj.lifeVariable);
|
|
2280
|
-
};
|
|
2281
|
-
})();
|
|
2178
|
+
const setGauge = (_scrollNum, _gaugeInitFlg = false) => {
|
|
2179
|
+
const resolved = g_gaugeResolvedObj[g_stateObj.scoreId];
|
|
2180
|
+
|
|
2181
|
+
g_settings.gauges = structuredClone(resolved.__order);
|
|
2182
|
+
g_settings.gaugeNum = (_gaugeInitFlg ? 0 : getCurrentNo(g_settings.gauges, g_stateObj.gauge));
|
|
2183
|
+
g_stateObj.gauge = g_settings.gauges[g_settings.gaugeNum];
|
|
2184
|
+
setSetting(_scrollNum, `gauge`);
|
|
2185
|
+
|
|
2186
|
+
const value = resolved[g_stateObj.gauge];
|
|
2187
|
+
g_stateObj.lifeMode = (value.Border === `x` ? C_LFE_SURVIVAL : C_LFE_BORDER);
|
|
2188
|
+
g_stateObj.lifeBorder = (value.Border === `x` ? 0 : value.Border);
|
|
2189
|
+
g_stateObj.lifeInit = value.Init;
|
|
2190
|
+
g_stateObj.lifeRcv = value.Recovery;
|
|
2191
|
+
g_stateObj.lifeDmg = value.Damage;
|
|
2192
|
+
g_stateObj.lifeVariable = value.Variable;
|
|
2193
|
+
|
|
2194
|
+
lblGauge2.innerHTML = gaugeFormat(g_stateObj.lifeMode,
|
|
2195
|
+
g_stateObj.lifeBorder, g_stateObj.lifeRcv, g_stateObj.lifeDmg, g_stateObj.lifeInit, g_stateObj.lifeVariable);
|
|
2196
|
+
};
|
|
2282
2197
|
|
|
2283
2198
|
/**
|
|
2284
2199
|
* ゲージ設定の詳細表示を整形
|