danoniplus 42.3.1 → 42.4.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 +92 -63
- 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 : 2025/
|
|
7
|
+
* Revised : 2025/08/21
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 42.
|
|
12
|
-
const g_revisedDate = `2025/
|
|
11
|
+
const g_version = `Ver 42.4.0`;
|
|
12
|
+
const g_revisedDate = `2025/08/21`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -717,6 +717,21 @@ const padArray = (_array, _baseArray) => {
|
|
|
717
717
|
return _baseArray;
|
|
718
718
|
};
|
|
719
719
|
|
|
720
|
+
/**
|
|
721
|
+
* ベース配列(_baseArray)の空要素のみ、別配列(_array)の対応要素で補完する(既存値は上書きしない)
|
|
722
|
+
* @param {string[]|number[]} _array 補完元(ソース)
|
|
723
|
+
* @param {string[]|number[]} _baseArray ベース(既存値を優先)
|
|
724
|
+
* @returns {string[]|number[]}
|
|
725
|
+
*/
|
|
726
|
+
const fillMissingArrayElem = (_array = [], _baseArray = []) => {
|
|
727
|
+
const maxLen = Math.max(_baseArray.length, _array.length);
|
|
728
|
+
const res = _baseArray.slice();
|
|
729
|
+
for (let j = 0; j < maxLen; j++) {
|
|
730
|
+
if (!hasVal(res[j]) && hasVal(_array[j])) res[j] = _array[j];
|
|
731
|
+
}
|
|
732
|
+
return res;
|
|
733
|
+
}
|
|
734
|
+
|
|
720
735
|
/**
|
|
721
736
|
* 配列から上位N番目までに一致する位置を取得
|
|
722
737
|
*
|
|
@@ -2656,6 +2671,9 @@ const initialControl = async () => {
|
|
|
2656
2671
|
g_stateObj.dosDivideFlg = setBoolVal(document.getElementById(`externalDosDivide`)?.value ?? getQueryParamVal(`dosDivide`));
|
|
2657
2672
|
g_stateObj.scoreLockFlg = setBoolVal(document.getElementById(`externalDosLock`)?.value ?? getQueryParamVal(`dosLock`));
|
|
2658
2673
|
|
|
2674
|
+
// 非分割時は resetGaugeSetting が全難易度を一括構築するため、初回のみで十分
|
|
2675
|
+
const loopCount = g_stateObj.dosDivideFlg ? g_headerObj.keyLabels.length : 1;
|
|
2676
|
+
|
|
2659
2677
|
for (let j = 0; j < g_headerObj.keyLabels.length; j++) {
|
|
2660
2678
|
|
|
2661
2679
|
// 譜面ファイルが分割されている場合、譜面詳細情報取得のために譜面をロード
|
|
@@ -2664,10 +2682,10 @@ const initialControl = async () => {
|
|
|
2664
2682
|
resetColorSetting(j);
|
|
2665
2683
|
}
|
|
2666
2684
|
getScoreDetailData(j);
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
|
|
2685
|
+
if (j < loopCount) {
|
|
2686
|
+
// 分割時は各譜面ごとに上書き・補完、非分割時は初回のみ実行
|
|
2687
|
+
resetGaugeSetting(j);
|
|
2688
|
+
}
|
|
2671
2689
|
}
|
|
2672
2690
|
}
|
|
2673
2691
|
g_customJsObj.preTitle.forEach(func => func());
|
|
@@ -2727,12 +2745,12 @@ const initialControl = async () => {
|
|
|
2727
2745
|
|
|
2728
2746
|
keyGroupList.forEach((keyGroupNo, j) => {
|
|
2729
2747
|
const keyN = keyGroupNo === `0` ? key : `${key}_${j + 1}`;
|
|
2730
|
-
const filterCond = (
|
|
2731
|
-
const keyCtrlList = g_keyObj[keyCtrlPtn].filter((val,
|
|
2732
|
-
const charaList = g_keyObj[`chara${keyBase}`].filter((val,
|
|
2733
|
-
const colorList = g_keyObj[`color${keyBase}_0`].filter((val,
|
|
2734
|
-
const stepRtnList = g_keyObj[`stepRtn${keyBase}_0`].filter((val,
|
|
2735
|
-
const keyNum = g_keyObj[keyCtrlPtn].filter((val,
|
|
2748
|
+
const filterCond = (r) => keyGroup[r].findIndex(val => val === keyGroupNo) >= 0;
|
|
2749
|
+
const keyCtrlList = g_keyObj[keyCtrlPtn].filter((val, r) => filterCond(r));
|
|
2750
|
+
const charaList = g_keyObj[`chara${keyBase}`].filter((val, r) => filterCond(r));
|
|
2751
|
+
const colorList = g_keyObj[`color${keyBase}_0`].filter((val, r) => filterCond(r));
|
|
2752
|
+
const stepRtnList = g_keyObj[`stepRtn${keyBase}_0`].filter((val, r) => filterCond(r));
|
|
2753
|
+
const keyNum = g_keyObj[keyCtrlPtn].filter((val, r) => filterCond(r)).length;
|
|
2736
2754
|
|
|
2737
2755
|
// ---- Dancing☆Onigiri (CW Edition対応)のフォーマット
|
|
2738
2756
|
g_editorTmp[keyN] = {};
|
|
@@ -2755,7 +2773,7 @@ const initialControl = async () => {
|
|
|
2755
2773
|
if (divMaxPos > divPos) {
|
|
2756
2774
|
|
|
2757
2775
|
// posXの実際の相対位置を計算
|
|
2758
|
-
const orgPosList = g_keyObj[`pos${keyBase}`].filter((val,
|
|
2776
|
+
const orgPosList = g_keyObj[`pos${keyBase}`].filter((val, r) => filterCond(r));
|
|
2759
2777
|
const posList = orgPosList.map(val => val < divPos ? val - deltaXAbove : val - divPos - deltaXBelow);
|
|
2760
2778
|
|
|
2761
2779
|
g_editorTmp[keyN].orderGroups = [];
|
|
@@ -2804,18 +2822,17 @@ const initialControl = async () => {
|
|
|
2804
2822
|
}
|
|
2805
2823
|
|
|
2806
2824
|
// 矢印・フリーズアローのヘッダー情報を定義
|
|
2807
|
-
|
|
2808
|
-
|
|
2809
|
-
noteTxt += `|${val.slice(0, -(`_data`.length))}[i]_data=[a${String(j).padStart(2, `0`)}]|[E]<br>`);
|
|
2825
|
+
const noteTxt = g_editorTmp[keyN].noteNames.map((val, r) =>
|
|
2826
|
+
`|${val.slice(0, -(`_data`.length))}[i]_data=[a${String(r).padStart(2, `0`)}]|[E]<br>`).join(``);
|
|
2810
2827
|
|
|
2811
|
-
g_editorTmp[keyN].freezeNames.
|
|
2812
|
-
|
|
2828
|
+
const freezeTxt = g_editorTmp[keyN].freezeNames.map((val, r) =>
|
|
2829
|
+
`|${val.slice(0, -(`_data`.length))}[i]_data=[f${String(r).padStart(2, `0`)}]|[E]<br>`).join(``);
|
|
2813
2830
|
|
|
2814
2831
|
g_editorTmp2 += g_editorTmp2Template
|
|
2815
2832
|
.replace(`[__KEY__]`, keyN)
|
|
2816
2833
|
.replace(`[__MAP__]`, colorList.map(val => val < 3 ? (val + 1) % 3 : val % 7).join(','))
|
|
2817
|
-
.replace(`[__POS__]`, fillArray(keyNum).map((val,
|
|
2818
|
-
isNaN(parseFloat(stepRtnList[
|
|
2834
|
+
.replace(`[__POS__]`, fillArray(keyNum).map((val, r) =>
|
|
2835
|
+
isNaN(parseFloat(stepRtnList[r])) ? 28 : 24).join(`,`))
|
|
2819
2836
|
.replace(`[__TXT__]`, g_editorTmp[keyN].chars.map(val => val.replace(`, `, ``)).join(`,`))
|
|
2820
2837
|
.replace(`[__CONV__]`, convTxt)
|
|
2821
2838
|
.replace(`[__NOTE__]`, noteTxt)
|
|
@@ -3017,12 +3034,12 @@ const resetGaugeSetting = _scoreId => {
|
|
|
3017
3034
|
*/
|
|
3018
3035
|
const copySetColor = (_baseObj, _scoreId) => {
|
|
3019
3036
|
const obj = {};
|
|
3020
|
-
const
|
|
3021
|
-
const
|
|
3037
|
+
const srcIdHeader = setScoreIdHeader(_scoreId, g_stateObj.scoreLockFlg, true);
|
|
3038
|
+
const targetIdHeader = setScoreIdHeader(_scoreId, false, true);
|
|
3022
3039
|
[``, `Shadow`].forEach(pattern =>
|
|
3023
3040
|
[`set`, `frz`].filter(arrow => hasVal(_baseObj[`${arrow}${pattern}Color`]))
|
|
3024
|
-
.forEach(arrow => obj[`${arrow}${pattern}Color${
|
|
3025
|
-
(_baseObj[`${arrow}${pattern}Color${
|
|
3041
|
+
.forEach(arrow => obj[`${arrow}${pattern}Color${targetIdHeader}`] =
|
|
3042
|
+
(_baseObj[`${arrow}${pattern}Color${srcIdHeader}`] ?? _baseObj[`${arrow}${pattern}Color`]).concat()));
|
|
3026
3043
|
return obj;
|
|
3027
3044
|
};
|
|
3028
3045
|
|
|
@@ -3164,8 +3181,9 @@ const storeBaseData = (_scoreId, _scoreObj, _keyCtrlPtn) => {
|
|
|
3164
3181
|
/**
|
|
3165
3182
|
* ツール計算
|
|
3166
3183
|
* @param {object} _scoreObj
|
|
3167
|
-
* @param {number[][]} _scoreObj.arrowData
|
|
3168
|
-
* @param {number[][]} _scoreObj.frzData
|
|
3184
|
+
* @param {number[][]} _scoreObj.arrowData 矢印データ
|
|
3185
|
+
* @param {number[][]} _scoreObj.frzData フリーズデータ
|
|
3186
|
+
* @returns {{tool: string, tate: number, douji: number, push3Cnt: number, push3: number[]}}
|
|
3169
3187
|
*/
|
|
3170
3188
|
const calcLevel = _scoreObj => {
|
|
3171
3189
|
//--------------------------------------------------------------
|
|
@@ -3330,6 +3348,7 @@ const calcLevel = _scoreObj => {
|
|
|
3330
3348
|
* ロケールを含んだヘッダーの優先度設定
|
|
3331
3349
|
* @param {object} _obj
|
|
3332
3350
|
* @param {...any} [_params]
|
|
3351
|
+
* @returns {string}
|
|
3333
3352
|
*/
|
|
3334
3353
|
const getHeader = (_obj, ..._params) => {
|
|
3335
3354
|
let headerLocale, headerDf;
|
|
@@ -3350,7 +3369,7 @@ const getHname = _param => [_param, _param.toLowerCase()];
|
|
|
3350
3369
|
/**
|
|
3351
3370
|
* 譜面ヘッダーの分解(スキン、jsファイルなどの設定)
|
|
3352
3371
|
* @param {object} _dosObj
|
|
3353
|
-
* @returns
|
|
3372
|
+
* @returns {object}
|
|
3354
3373
|
*/
|
|
3355
3374
|
const preheaderConvert = _dosObj => {
|
|
3356
3375
|
|
|
@@ -3418,7 +3437,7 @@ const preheaderConvert = _dosObj => {
|
|
|
3418
3437
|
/**
|
|
3419
3438
|
* 譜面ヘッダーの分解(その他の設定)
|
|
3420
3439
|
* @param {object} _dosObj 譜面データオブジェクト
|
|
3421
|
-
* @returns
|
|
3440
|
+
* @returns {object}
|
|
3422
3441
|
*/
|
|
3423
3442
|
const headerConvert = _dosObj => {
|
|
3424
3443
|
|
|
@@ -3785,6 +3804,7 @@ const headerConvert = _dosObj => {
|
|
|
3785
3804
|
}
|
|
3786
3805
|
|
|
3787
3806
|
// カスタムゲージ設定、初期色設定(譜面ヘッダー)の譜面別設定
|
|
3807
|
+
Object.assign(obj, resetBaseColorList(obj, _dosObj));
|
|
3788
3808
|
for (let j = 0; j < obj.difLabels.length; j++) {
|
|
3789
3809
|
Object.assign(g_gaugeOptionObj, resetCustomGauge(_dosObj, { scoreId: j }));
|
|
3790
3810
|
Object.assign(obj, resetBaseColorList(obj, _dosObj, { scoreId: j }));
|
|
@@ -4156,9 +4176,9 @@ const resetColorType = ({ _from = ``, _to = ``, _fromObj = g_headerObj, _toObj =
|
|
|
4156
4176
|
};
|
|
4157
4177
|
|
|
4158
4178
|
/**
|
|
4159
|
-
*
|
|
4160
|
-
* @param {string[]|number[]} _arr
|
|
4161
|
-
* @param {string} _target
|
|
4179
|
+
* 配列に対象がいない場合、配列の先頭にその対象を追加
|
|
4180
|
+
* @param {string[]|number[]} _arr 検索対象の配列
|
|
4181
|
+
* @param {string|number} _target 検索対象
|
|
4162
4182
|
* @returns {string[]|number[]}
|
|
4163
4183
|
*/
|
|
4164
4184
|
const addValtoArray = (_arr, _target) => {
|
|
@@ -4233,12 +4253,12 @@ const addGaugeFulls = _obj => _obj.map(key => g_gaugeOptionObj.customFulls[key]
|
|
|
4233
4253
|
* @param {object} _baseObj
|
|
4234
4254
|
* @param {object} _dosObj
|
|
4235
4255
|
* @param {string} [object.scoreId='']
|
|
4236
|
-
* @returns
|
|
4256
|
+
* @returns {object} ※Object.assign(obj, resetBaseColorList(...))の形で呼び出しが必要
|
|
4237
4257
|
*/
|
|
4238
4258
|
const resetBaseColorList = (_baseObj, _dosObj, { scoreId = `` } = {}) => {
|
|
4239
4259
|
|
|
4240
4260
|
const obj = {};
|
|
4241
|
-
const idHeader = setScoreIdHeader(scoreId);
|
|
4261
|
+
const idHeader = setScoreIdHeader(scoreId, g_stateObj.scoreLockFlg, scoreId !== ``);
|
|
4242
4262
|
const getRefData = (_header, _dataName) => {
|
|
4243
4263
|
const data = _dosObj[`${_header}${_dataName}`];
|
|
4244
4264
|
return data?.startsWith(_header) ? _dosObj[data] : data;
|
|
@@ -4384,12 +4404,12 @@ const setColorList = (_data, _colorInit, _colorInitLength,
|
|
|
4384
4404
|
* |customGauge=Original::F,Normal::V,Escape::V|
|
|
4385
4405
|
* @param {object} _dosObj
|
|
4386
4406
|
* @param {string} [object.scoreId=0]
|
|
4387
|
-
* @returns
|
|
4407
|
+
* @returns {object} ※Object.assign(obj, resetCustomGauge(...))の形で呼び出しが必要
|
|
4388
4408
|
*/
|
|
4389
4409
|
const resetCustomGauge = (_dosObj, { scoreId = 0 } = {}) => {
|
|
4390
4410
|
|
|
4391
4411
|
const obj = {};
|
|
4392
|
-
const scoreIdHeader = setScoreIdHeader(scoreId, g_stateObj.scoreLockFlg);
|
|
4412
|
+
const scoreIdHeader = setScoreIdHeader(scoreId, g_stateObj.scoreLockFlg, false);
|
|
4393
4413
|
const dosCustomGauge = _dosObj[`customGauge${scoreIdHeader}`];
|
|
4394
4414
|
if (hasVal(dosCustomGauge)) {
|
|
4395
4415
|
if (g_gaugeOptionObj.defaultPlusList.includes(dosCustomGauge)) {
|
|
@@ -4456,7 +4476,9 @@ const getGaugeSetting = (_dosObj, _name, _difLength, { scoreId = 0 } = {}) => {
|
|
|
4456
4476
|
obj.lifeInits[_scoreId] = _gaugeDetails[3];
|
|
4457
4477
|
|
|
4458
4478
|
if (gaugeUpdateFlg && hasVal(g_gaugeOptionObj[`gauge${_name}s`])) {
|
|
4459
|
-
|
|
4479
|
+
// ゲージ上書き時は_gaugeDetails(obj)の値を優先し、デフォルト値で穴埋めする
|
|
4480
|
+
Object.keys(obj).forEach(key => g_gaugeOptionObj[`gauge${_name}s`][key] =
|
|
4481
|
+
fillMissingArrayElem(g_gaugeOptionObj[`gauge${_name}s`][key] || [], obj[key]));
|
|
4460
4482
|
return false;
|
|
4461
4483
|
}
|
|
4462
4484
|
return true;
|
|
@@ -4470,9 +4492,12 @@ const getGaugeSetting = (_dosObj, _name, _difLength, { scoreId = 0 } = {}) => {
|
|
|
4470
4492
|
*/
|
|
4471
4493
|
const getGaugeDetailList = (_scoreId, _defaultGaugeList) => {
|
|
4472
4494
|
if (_scoreId > 0) {
|
|
4473
|
-
const
|
|
4495
|
+
const idHeader = setScoreIdHeader(_scoreId, g_stateObj.scoreLockFlg, false);
|
|
4496
|
+
const dosId = (idHeader || 0) - 1;
|
|
4497
|
+
const headerName = `gauge${_name}${idHeader}`;
|
|
4474
4498
|
if (hasVal(_dosObj[headerName])) {
|
|
4475
|
-
|
|
4499
|
+
const gauges = splitLF2(_dosObj[headerName]);
|
|
4500
|
+
return (gauges[dosId] || gauges[0])?.split(`,`);
|
|
4476
4501
|
}
|
|
4477
4502
|
}
|
|
4478
4503
|
return _defaultGaugeList;
|
|
@@ -4480,12 +4505,12 @@ const getGaugeSetting = (_dosObj, _name, _difLength, { scoreId = 0 } = {}) => {
|
|
|
4480
4505
|
|
|
4481
4506
|
if (hasVal(_dosObj[`gauge${_name}`])) {
|
|
4482
4507
|
|
|
4508
|
+
const gauges = splitLF2(_dosObj[`gauge${_name}`]);
|
|
4483
4509
|
if (gaugeUpdateFlg) {
|
|
4484
|
-
gaugeCreateFlg = setGaugeDetails(scoreId,
|
|
4510
|
+
gaugeCreateFlg = setGaugeDetails(scoreId, (gauges[scoreId] || gauges[0])?.split(`,`));
|
|
4485
4511
|
} else {
|
|
4486
|
-
const gauges = splitLF2(_dosObj[`gauge${_name}`]);
|
|
4487
4512
|
for (let j = 0; j < _difLength; j++) {
|
|
4488
|
-
gaugeCreateFlg = setGaugeDetails(j, getGaugeDetailList(j, (gauges[j]
|
|
4513
|
+
gaugeCreateFlg = setGaugeDetails(j, getGaugeDetailList(j, (gauges[j] || gauges[0]).split(`,`)));
|
|
4489
4514
|
}
|
|
4490
4515
|
}
|
|
4491
4516
|
|
|
@@ -4545,6 +4570,7 @@ const getKeyCtrlVal = _kCdN => {
|
|
|
4545
4570
|
|
|
4546
4571
|
/**
|
|
4547
4572
|
* 一時的な追加キーの設定
|
|
4573
|
+
* - keyExtraListの指定がない場合は、_dosObj.keyCtrlXに合致するXを追加キーとして追加
|
|
4548
4574
|
* @param {object} _dosObj
|
|
4549
4575
|
* @param {string[]} object.keyExtraList
|
|
4550
4576
|
* @returns {string[]}
|
|
@@ -4640,6 +4666,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
|
|
|
4640
4666
|
|
|
4641
4667
|
/**
|
|
4642
4668
|
* キーパターンの略名から実際のデータへ展開
|
|
4669
|
+
* - charaX の場合に限り、a>5_0 の形式を aleft, adown, aup, aright, aspace に変換する
|
|
4643
4670
|
* @param {string} _str
|
|
4644
4671
|
* @param {string} _name
|
|
4645
4672
|
* @param {function} _convFunc
|
|
@@ -5434,7 +5461,7 @@ const drawTitle = (_titleName = g_headerObj.musicTitleForView, _scoreId = ``) =>
|
|
|
5434
5461
|
/**
|
|
5435
5462
|
* 製作者情報の取得
|
|
5436
5463
|
* @param {string[]} _creatorList
|
|
5437
|
-
* @returns [string, string, number]
|
|
5464
|
+
* @returns {[string, string, number]}
|
|
5438
5465
|
*/
|
|
5439
5466
|
const getCreatorInfo = (_creatorList) => {
|
|
5440
5467
|
const creatorName = makeDedupliArray(_creatorList).length === 1 ? _creatorList[0] : `Various`;
|
|
@@ -5480,7 +5507,7 @@ const playBGM = async (_num, _currentLoopNum = g_settings.musicLoopNum) => {
|
|
|
5480
5507
|
const encodeFlg = listMatching(musicUrl, [`.js`, `.txt`], { suffix: `$` });
|
|
5481
5508
|
const musicStart = g_headerObj.musicStarts?.[currentIdx] ?? 0;
|
|
5482
5509
|
const musicEnd = g_headerObj.musicEnds?.[currentIdx] ?? 0;
|
|
5483
|
-
const isTitle = () => g_currentPage === `title
|
|
5510
|
+
const isTitle = () => g_currentPage === `title` && _currentLoopNum === g_settings.musicLoopNum;
|
|
5484
5511
|
|
|
5485
5512
|
/**
|
|
5486
5513
|
* BGMのフェードアウトとシーク
|
|
@@ -5573,20 +5600,19 @@ const playBGM = async (_num, _currentLoopNum = g_settings.musicLoopNum) => {
|
|
|
5573
5600
|
}
|
|
5574
5601
|
};
|
|
5575
5602
|
|
|
5576
|
-
const musicPlayCheck = () => _currentLoopNum !== g_settings.musicLoopNum || g_currentPage !== `title`;
|
|
5577
5603
|
if (encodeFlg) {
|
|
5578
5604
|
try {
|
|
5579
5605
|
// base64エンコードは読込に時間が掛かるため、曲変更時のみ読込
|
|
5580
5606
|
if (!hasVal(g_musicdata) || Math.abs(_num) % g_headerObj.musicIdxList.length !== 0) {
|
|
5581
5607
|
await loadScript2(url);
|
|
5582
5608
|
musicInit();
|
|
5583
|
-
if (
|
|
5609
|
+
if (!isTitle()) {
|
|
5584
5610
|
return;
|
|
5585
5611
|
}
|
|
5586
5612
|
const tmpAudio = new AudioPlayer();
|
|
5587
5613
|
const array = Uint8Array.from(atob(g_musicdata), v => v.charCodeAt(0));
|
|
5588
5614
|
await tmpAudio.init(array.buffer);
|
|
5589
|
-
if (
|
|
5615
|
+
if (!isTitle()) {
|
|
5590
5616
|
tmpAudio.close();
|
|
5591
5617
|
return;
|
|
5592
5618
|
}
|
|
@@ -5609,7 +5635,7 @@ const playBGM = async (_num, _currentLoopNum = g_settings.musicLoopNum) => {
|
|
|
5609
5635
|
g_audio.volume = g_stateObj.bgmVolume / 100;
|
|
5610
5636
|
const loadedMeta = g_handler.addListener(g_audio, `loadedmetadata`, () => {
|
|
5611
5637
|
g_handler.removeListener(loadedMeta);
|
|
5612
|
-
if (
|
|
5638
|
+
if (!isTitle()) {
|
|
5613
5639
|
return;
|
|
5614
5640
|
}
|
|
5615
5641
|
g_audio.currentTime = musicStart;
|
|
@@ -8853,7 +8879,9 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
8853
8879
|
resetColorType({ _from: g_colorType, _to: g_colorType, _fromObj: g_dfColorObj });
|
|
8854
8880
|
|
|
8855
8881
|
// 影矢印が未指定の場合はType1, Type2の影矢印指定を無くす
|
|
8856
|
-
|
|
8882
|
+
const _idHeader = setScoreIdHeader(g_stateObj.scoreId, false, true);
|
|
8883
|
+
const _shadowDefault = g_headerObj[`setShadowColor${_idHeader}Default`];
|
|
8884
|
+
if ((!Array.isArray(_shadowDefault) || !hasVal(_shadowDefault[0])) &&
|
|
8857
8885
|
[`Type1`, `Type2`].includes(g_colorType)) {
|
|
8858
8886
|
|
|
8859
8887
|
g_headerObj.setShadowColor = fillArray(g_headerObj.setColorInit.length, ``);
|
|
@@ -9172,10 +9200,11 @@ const updateKeyInfo = (_header, _keyCtrlPtn) => {
|
|
|
9172
9200
|
|
|
9173
9201
|
/**
|
|
9174
9202
|
* 初期矢印色・フリーズアロー色の変更
|
|
9203
|
+
* - ここでのID管理は1譜面目も区別して設定する (setScoreIdHeaderの第三引数を使用)
|
|
9175
9204
|
*/
|
|
9176
9205
|
const changeSetColor = () => {
|
|
9177
9206
|
const isDefault = [`Default`, `Type0`].includes(g_colorType);
|
|
9178
|
-
const idHeader = setScoreIdHeader(g_stateObj.scoreId);
|
|
9207
|
+
const idHeader = setScoreIdHeader(g_stateObj.scoreId, false, true);
|
|
9179
9208
|
const defaultType = idHeader + g_colorType;
|
|
9180
9209
|
const currentTypes = {
|
|
9181
9210
|
'': (isDefault ? defaultType : g_colorType),
|
|
@@ -9521,15 +9550,16 @@ const loadingScoreInit = async () => {
|
|
|
9521
9550
|
* 譜面番号の取得
|
|
9522
9551
|
* @param {number} _scoreId
|
|
9523
9552
|
* @param {boolean} _scoreLockFlg
|
|
9553
|
+
* @param {boolean} _useOne 1譜面目指定有無フラグ (初期色に関する箇所のみ指定)
|
|
9524
9554
|
* @returns {number|string}
|
|
9525
9555
|
*/
|
|
9526
|
-
const setScoreIdHeader = (_scoreId = 0, _scoreLockFlg = false) => {
|
|
9556
|
+
const setScoreIdHeader = (_scoreId = 0, _scoreLockFlg = false, _useOne = false) => {
|
|
9527
9557
|
if (!_scoreLockFlg && _scoreId > 0) {
|
|
9528
9558
|
return Number(_scoreId) + 1;
|
|
9529
9559
|
} else if (_scoreLockFlg && g_headerObj.scoreNos?.[_scoreId] > 1) {
|
|
9530
9560
|
return g_headerObj.scoreNos[_scoreId];
|
|
9531
9561
|
}
|
|
9532
|
-
return ``;
|
|
9562
|
+
return _useOne ? 1 : ``;
|
|
9533
9563
|
};
|
|
9534
9564
|
|
|
9535
9565
|
/**
|
|
@@ -9757,7 +9787,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
|
|
|
9757
9787
|
// 矢印群の格納先
|
|
9758
9788
|
const obj = {};
|
|
9759
9789
|
|
|
9760
|
-
const scoreIdHeader = setScoreIdHeader(_scoreId, g_stateObj.scoreLockFlg);
|
|
9790
|
+
const scoreIdHeader = setScoreIdHeader(_scoreId, g_stateObj.scoreLockFlg, false);
|
|
9761
9791
|
const keyNum = g_keyObj[`${g_keyObj.defaultProp}${_keyCtrlPtn}`].length;
|
|
9762
9792
|
obj.arrowData = [];
|
|
9763
9793
|
obj.frzData = [];
|
|
@@ -11484,6 +11514,7 @@ const mainInit = () => {
|
|
|
11484
11514
|
g_workObj.lastFadeFrame = fillArray(wordMaxLen);
|
|
11485
11515
|
g_workObj.wordFadeFrame = fillArray(wordMaxLen);
|
|
11486
11516
|
const mainCommonPos = { w: g_headerObj.playingWidth, h: g_posObj.arrowHeight };
|
|
11517
|
+
const objOpacity = g_stateObj.opacity / 100;
|
|
11487
11518
|
|
|
11488
11519
|
// 背景スプライトを作成
|
|
11489
11520
|
createMultipleSprite(`backSprite`, g_scoreObj.backMaxDepth, { x: g_workObj.backX });
|
|
@@ -11564,11 +11595,11 @@ const mainInit = () => {
|
|
|
11564
11595
|
if (g_appearanceRanges.includes(g_stateObj.appearance)) {
|
|
11565
11596
|
mainSprite.appendChild(createDivCss2Label(`filterView`, ``, g_lblPosObj.filterView));
|
|
11566
11597
|
if (g_stateObj.d_filterline === C_FLG_ON) {
|
|
11567
|
-
$id(`filterView`).opacity =
|
|
11598
|
+
$id(`filterView`).opacity = objOpacity;
|
|
11568
11599
|
for (let j = 0; j < g_stateObj.layerNum; j++) {
|
|
11569
|
-
$id(`filterBar${j}`).opacity =
|
|
11600
|
+
$id(`filterBar${j}`).opacity = objOpacity;
|
|
11570
11601
|
if (doubleFilterFlg) {
|
|
11571
|
-
$id(`filterBar${j}_HS`).opacity =
|
|
11602
|
+
$id(`filterBar${j}_HS`).opacity = objOpacity;
|
|
11572
11603
|
}
|
|
11573
11604
|
}
|
|
11574
11605
|
}
|
|
@@ -11680,13 +11711,11 @@ const mainInit = () => {
|
|
|
11680
11711
|
|
|
11681
11712
|
// ライフ(数字)部作成
|
|
11682
11713
|
const intLifeVal = Math.floor(g_workObj.lifeVal);
|
|
11683
|
-
let lblInitColor;
|
|
11714
|
+
let lblInitColor = g_cssObj.life_Failed;
|
|
11684
11715
|
if (g_workObj.lifeVal === g_headerObj.maxLifeVal) {
|
|
11685
11716
|
lblInitColor = g_cssObj.life_Max;
|
|
11686
11717
|
} else if (g_workObj.lifeVal >= g_workObj.lifeBorder) {
|
|
11687
11718
|
lblInitColor = g_cssObj.life_Cleared;
|
|
11688
|
-
} else {
|
|
11689
|
-
lblInitColor = g_cssObj.life_Failed;
|
|
11690
11719
|
}
|
|
11691
11720
|
|
|
11692
11721
|
// 曲名・アーティスト名、譜面名表示
|
|
@@ -11792,7 +11821,7 @@ const mainInit = () => {
|
|
|
11792
11821
|
const charaJ = createDivCss2Label(`chara${jdg}`, ``, {
|
|
11793
11822
|
x: jdgX[j], y: jdgY[j],
|
|
11794
11823
|
w: g_limitObj.jdgCharaWidth, h: g_limitObj.jdgCharaHeight, siz: g_limitObj.jdgCharaSiz,
|
|
11795
|
-
opacity:
|
|
11824
|
+
opacity: objOpacity, display: g_workObj.judgmentDisp,
|
|
11796
11825
|
}, g_cssObj.common_ii);
|
|
11797
11826
|
charaJ.setAttribute(`cnt`, 0);
|
|
11798
11827
|
|
|
@@ -11805,14 +11834,14 @@ const mainInit = () => {
|
|
|
11805
11834
|
createDivCss2Label(`combo${jdg}`, ``, {
|
|
11806
11835
|
x: jdgX[j] + 170, y: jdgY[j],
|
|
11807
11836
|
w: g_limitObj.jdgCharaWidth, h: g_limitObj.jdgCharaHeight, siz: g_limitObj.jdgCharaSiz,
|
|
11808
|
-
opacity:
|
|
11837
|
+
opacity: objOpacity, display: g_workObj.judgmentDisp,
|
|
11809
11838
|
}, g_cssObj[`common_combo${jdg}`]),
|
|
11810
11839
|
|
|
11811
11840
|
// Fast/Slow表示
|
|
11812
11841
|
createDivCss2Label(`diff${jdg}`, ``, {
|
|
11813
11842
|
x: jdgX[j] + 170, y: jdgY[j] + 25,
|
|
11814
11843
|
w: g_limitObj.jdgCharaWidth, h: g_limitObj.jdgCharaHeight, siz: g_limitObj.mainSiz,
|
|
11815
|
-
opacity:
|
|
11844
|
+
opacity: objOpacity, display: g_workObj.fastslowDisp,
|
|
11816
11845
|
}, g_cssObj.common_combo),
|
|
11817
11846
|
|
|
11818
11847
|
);
|
|
@@ -13622,7 +13651,7 @@ const resultInit = () => {
|
|
|
13622
13651
|
} else {
|
|
13623
13652
|
// ゲームオーバー時は失敗時のリザルトモーションを適用
|
|
13624
13653
|
if (!g_finishFlg) {
|
|
13625
|
-
const scoreIdHeader = setScoreIdHeader(g_stateObj.scoreId, g_stateObj.scoreLockFlg);
|
|
13654
|
+
const scoreIdHeader = setScoreIdHeader(g_stateObj.scoreId, g_stateObj.scoreLockFlg, false);
|
|
13626
13655
|
|
|
13627
13656
|
g_animationData.forEach(sprite => {
|
|
13628
13657
|
const failedData = g_rootObj[`${sprite}failedS${scoreIdHeader}_data`] ?? g_rootObj[`${sprite}failedS_data`];
|