danoniplus 46.5.3 → 46.6.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 +178 -45
- package/js/lib/danoni_constants.js +15 -1
- package/jsconfig.json +5 -1
- 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/04/
|
|
7
|
+
* Revised : 2026/04/07
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 46.
|
|
12
|
-
const g_revisedDate = `2026/04/
|
|
11
|
+
const g_version = `Ver 46.6.0`;
|
|
12
|
+
const g_revisedDate = `2026/04/07`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -1213,7 +1213,7 @@ const safeExecuteCustomHooks = (_hookName, _funcArray, ...args) => {
|
|
|
1213
1213
|
}
|
|
1214
1214
|
}
|
|
1215
1215
|
}
|
|
1216
|
-
}
|
|
1216
|
+
};
|
|
1217
1217
|
|
|
1218
1218
|
/**
|
|
1219
1219
|
* 与えられたパスより、キーワードとディレクトリに分割
|
|
@@ -1233,7 +1233,7 @@ const getFilePath = (_fileName, _directory = ``) => {
|
|
|
1233
1233
|
}
|
|
1234
1234
|
const dirPos = fullPath.lastIndexOf(`/`);
|
|
1235
1235
|
return [fullPath.slice(dirPos + 1), fullPath.slice(0, dirPos + 1)];
|
|
1236
|
-
}
|
|
1236
|
+
};
|
|
1237
1237
|
|
|
1238
1238
|
/**
|
|
1239
1239
|
* 画像ファイルの存在チェック後、プリロードする処理
|
|
@@ -1445,6 +1445,32 @@ const getStrWidth = (_str, _fontsize, _font) => {
|
|
|
1445
1445
|
return g_ctx.measureText(unEscapeHtml(_str)).width;
|
|
1446
1446
|
};
|
|
1447
1447
|
|
|
1448
|
+
const getStrHeight = (_str, _fontsize, _font = getBasicFont()) => {
|
|
1449
|
+
g_ctx.font = `${wUnit(_fontsize)} ${_font}`;
|
|
1450
|
+
const lines = unEscapeHtml(_str).split(`<br>`);
|
|
1451
|
+
|
|
1452
|
+
let totalHeight = 0;
|
|
1453
|
+
const lineGap = 1;
|
|
1454
|
+
|
|
1455
|
+
lines.forEach((line, index) => {
|
|
1456
|
+
const metrics = g_ctx.measureText(line);
|
|
1457
|
+
|
|
1458
|
+
// 基本の高さ(フォントサイズ)を取得
|
|
1459
|
+
// fontBoundingBox が使えれば正確ですが、なければ _fontsize を使用
|
|
1460
|
+
const h = metrics.fontBoundingBoxAscent
|
|
1461
|
+
? (metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent)
|
|
1462
|
+
: _fontsize;
|
|
1463
|
+
|
|
1464
|
+
if (index < lines.length - 1) {
|
|
1465
|
+
totalHeight += h * lineGap; // 途中の行は行間を足す
|
|
1466
|
+
} else {
|
|
1467
|
+
totalHeight += h; // 最終行
|
|
1468
|
+
}
|
|
1469
|
+
});
|
|
1470
|
+
|
|
1471
|
+
return totalHeight;
|
|
1472
|
+
};
|
|
1473
|
+
|
|
1448
1474
|
/**
|
|
1449
1475
|
* Canvas上で使用する絵文字を取得
|
|
1450
1476
|
* - HTMLのdiv要素に絵文字を設定することで、Canvas上で使用できるようにする
|
|
@@ -1457,7 +1483,7 @@ const getEmojiForCanvas = _str => {
|
|
|
1457
1483
|
const result = div.innerHTML;
|
|
1458
1484
|
div.remove();
|
|
1459
1485
|
return result;
|
|
1460
|
-
}
|
|
1486
|
+
};
|
|
1461
1487
|
|
|
1462
1488
|
/**
|
|
1463
1489
|
* 指定した横幅に合ったフォントサイズを取得
|
|
@@ -1489,7 +1515,7 @@ const getLongestStr = _array => {
|
|
|
1489
1515
|
return _array.reduce((longest, current) => {
|
|
1490
1516
|
return current.length > longest.length ? current : longest;
|
|
1491
1517
|
}, ``);
|
|
1492
|
-
}
|
|
1518
|
+
};
|
|
1493
1519
|
|
|
1494
1520
|
/**
|
|
1495
1521
|
* 補足説明部分のラベル作成
|
|
@@ -2098,7 +2124,7 @@ const getCssCustomProperties = () => {
|
|
|
2098
2124
|
// 上記でもNGの場合は何もしない
|
|
2099
2125
|
}
|
|
2100
2126
|
}
|
|
2101
|
-
}
|
|
2127
|
+
};
|
|
2102
2128
|
|
|
2103
2129
|
/**
|
|
2104
2130
|
* 背景・マスク用画像の描画
|
|
@@ -3221,7 +3247,7 @@ const getFullMusicUrl = (_musicUrl = ``) => {
|
|
|
3221
3247
|
}
|
|
3222
3248
|
const [musicFile, musicPath] = getFilePath(baseMusicUrl, baseDir);
|
|
3223
3249
|
return `${musicPath}${musicFile}`;
|
|
3224
|
-
}
|
|
3250
|
+
};
|
|
3225
3251
|
|
|
3226
3252
|
/**
|
|
3227
3253
|
* 譜面ファイル読込後処理(譜面詳細情報取得用)
|
|
@@ -3731,9 +3757,20 @@ const headerConvert = _dosObj => {
|
|
|
3731
3757
|
obj.musicTitlesForView[0] = escapeHtmlForArray(getMusicNameMultiLine(alternativeTitle));
|
|
3732
3758
|
}
|
|
3733
3759
|
|
|
3734
|
-
//
|
|
3735
|
-
|
|
3760
|
+
// 選曲機能の利用有無(最後のカンマ後の文字をBGM利用フラグとして利用)
|
|
3761
|
+
const rawPackageName = _dosObj.packageName || ``;
|
|
3762
|
+
const packageNameParts = rawPackageName.split(`,`);
|
|
3763
|
+
const bgmUseSwitch = setVal(trimStr(packageNameParts.at(-1)), ``, C_TYP_SWITCH);
|
|
3764
|
+
const packageName = bgmUseSwitch === ``
|
|
3765
|
+
? rawPackageName
|
|
3766
|
+
: packageNameParts.slice(0, -1).join(`,`);
|
|
3767
|
+
obj.packageNames = (packageName || ``).split(`<br>`);
|
|
3736
3768
|
obj.musicSelectUse = _dosObj.packageName !== undefined;
|
|
3769
|
+
obj.bgmUseFlg = bgmUseSwitch === C_FLG_ON;
|
|
3770
|
+
|
|
3771
|
+
if (!obj.bgmUseFlg) {
|
|
3772
|
+
g_stateObj.bgmMuteFlg = true;
|
|
3773
|
+
}
|
|
3737
3774
|
|
|
3738
3775
|
// 最小・最大速度の設定
|
|
3739
3776
|
obj.minSpeed = Math.round(setVal(_dosObj.minSpeed, C_MIN_SPEED, C_TYP_FLOAT) * 4) / 4;
|
|
@@ -3806,6 +3843,7 @@ const headerConvert = _dosObj => {
|
|
|
3806
3843
|
obj.lifeDamages = [];
|
|
3807
3844
|
obj.lifeInits = [];
|
|
3808
3845
|
obj.creatorNames = [];
|
|
3846
|
+
obj.difficulties = [];
|
|
3809
3847
|
g_stateObj.scoreId = (g_stateObj.scoreId < difs.length ? g_stateObj.scoreId : 0);
|
|
3810
3848
|
|
|
3811
3849
|
difs.forEach(dif => {
|
|
@@ -3827,10 +3865,12 @@ const headerConvert = _dosObj => {
|
|
|
3827
3865
|
if (hasVal(difDetails[difpos.Name])) {
|
|
3828
3866
|
const difNameInfo = difDetails[difpos.Name].split(`::`);
|
|
3829
3867
|
obj.difLabels.push(escapeHtml(difNameInfo[0] ?? `Normal`));
|
|
3830
|
-
obj.creatorNames.push(
|
|
3868
|
+
obj.creatorNames.push(setVal(escapeHtml(difNameInfo[1]), obj.tuning));
|
|
3869
|
+
obj.difficulties.push(setIntVal(difNameInfo[2], 0));
|
|
3831
3870
|
} else {
|
|
3832
3871
|
obj.difLabels.push(`Normal`);
|
|
3833
3872
|
obj.creatorNames.push(obj.tuning);
|
|
3873
|
+
obj.difficulties.push(0);
|
|
3834
3874
|
}
|
|
3835
3875
|
|
|
3836
3876
|
// 初期速度
|
|
@@ -3846,6 +3886,7 @@ const headerConvert = _dosObj => {
|
|
|
3846
3886
|
obj.lifeDamages = [40];
|
|
3847
3887
|
obj.lifeInits = [25];
|
|
3848
3888
|
obj.creatorNames = [obj.tuning];
|
|
3889
|
+
obj.difficulties = [0];
|
|
3849
3890
|
}
|
|
3850
3891
|
const keyLists = makeDedupliArray(obj.keyLabels);
|
|
3851
3892
|
obj.viewLists = [...Array(obj.keyLabels.length).keys()];
|
|
@@ -3865,6 +3906,54 @@ const headerConvert = _dosObj => {
|
|
|
3865
3906
|
obj.musicIdxList = [...Array(Math.max(...obj.musicNos) + 1).keys()];
|
|
3866
3907
|
}
|
|
3867
3908
|
|
|
3909
|
+
// 難易度配色の設定(選曲画面でのみ使用)
|
|
3910
|
+
const normalizeCssColor = _color => {
|
|
3911
|
+
const tmp = document.createElement(`span`);
|
|
3912
|
+
tmp.style.color = ``;
|
|
3913
|
+
tmp.style.color = trimStr(_color ?? ``);
|
|
3914
|
+
return tmp.style.color;
|
|
3915
|
+
};
|
|
3916
|
+
obj.difColorList = [
|
|
3917
|
+
{ threshold: Infinity, color: `` }
|
|
3918
|
+
];
|
|
3919
|
+
if (hasVal(_dosObj.difColor)) {
|
|
3920
|
+
_dosObj.difColor.split(`,`).forEach(val => {
|
|
3921
|
+
const difColorSet = val.split(`/`);
|
|
3922
|
+
obj.difColorList.push({
|
|
3923
|
+
threshold: setIntVal(difColorSet[0]),
|
|
3924
|
+
color: hasVal(difColorSet[1]) ? normalizeCssColor(difColorSet[1]) : ``
|
|
3925
|
+
});
|
|
3926
|
+
})
|
|
3927
|
+
}
|
|
3928
|
+
obj.difColorList.sort((a, b) => a.threshold - b.threshold);
|
|
3929
|
+
|
|
3930
|
+
const sanitizeCustomLink = _link => {
|
|
3931
|
+
try {
|
|
3932
|
+
const raw = trimStr(_link);
|
|
3933
|
+
if (!hasVal(raw)) return undefined;
|
|
3934
|
+
const url = new URL(raw, location.href); // allows relative inputs
|
|
3935
|
+
const allowed = g_isFile ? [`http:`, `https:`, `file:`] : [`http:`, `https:`];
|
|
3936
|
+
return allowed.includes(url.protocol) ? url.href : undefined;
|
|
3937
|
+
} catch {
|
|
3938
|
+
return undefined;
|
|
3939
|
+
}
|
|
3940
|
+
};
|
|
3941
|
+
obj.difCustomLink = [];
|
|
3942
|
+
if (hasVal(_dosObj.difCustomLink)) {
|
|
3943
|
+
splitLF2(_dosObj.difCustomLink).forEach(val => {
|
|
3944
|
+
const commaPos = val.indexOf(`,`);
|
|
3945
|
+
if (commaPos < 0) return;
|
|
3946
|
+
const idxStr = trimStr(val.slice(0, commaPos));
|
|
3947
|
+
const linkStr = val.slice(commaPos + 1);
|
|
3948
|
+
const idx = setIntVal(idxStr, -1);
|
|
3949
|
+
if (!Number.isFinite(idx) || idx < 0 || idx >= obj.difLabels.length) return;
|
|
3950
|
+
const safeHref = sanitizeCustomLink(linkStr);
|
|
3951
|
+
if (safeHref !== undefined) {
|
|
3952
|
+
obj.difCustomLink[idx] = safeHref;
|
|
3953
|
+
}
|
|
3954
|
+
});
|
|
3955
|
+
}
|
|
3956
|
+
|
|
3868
3957
|
// 譜面変更セレクターの利用有無
|
|
3869
3958
|
obj.difSelectorUse = getDifSelectorUse(_dosObj.difSelectorUse, obj.viewLists);
|
|
3870
3959
|
|
|
@@ -5332,22 +5421,36 @@ const titleInit = (_initFlg = false) => {
|
|
|
5332
5421
|
changeMSelect(Math.floor(Math.random() * (g_headerObj.musicIdxList.length - 1)) + 1),
|
|
5333
5422
|
g_lblPosObj.btnMusicSelectRandom, g_cssObj.button_Default),
|
|
5334
5423
|
createDivCss2Label(`lblMusicCnt`, ``, g_lblPosObj.lblMusicCnt),
|
|
5335
|
-
createDivCss2Label(`lblCommentM`, ``, g_lblPosObj.lblComment_music),
|
|
5336
|
-
|
|
5337
|
-
createDivCss2Label(`lblBgmVolume`, `BGM Volume`, g_lblPosObj.lblBgmVolume),
|
|
5338
|
-
createCss2Button(`btnBgmMute`, g_stateObj.bgmMuteFlg ? g_emojiObj.muted : g_emojiObj.speaker, evt => {
|
|
5339
|
-
g_stateObj.bgmMuteFlg = !g_stateObj.bgmMuteFlg;
|
|
5340
|
-
g_stateObj.bgmMuteFlg ? pauseBGM() : playBGM(0);
|
|
5341
|
-
evt.target.innerHTML = g_stateObj.bgmMuteFlg ? g_emojiObj.muted : g_emojiObj.speaker;
|
|
5342
|
-
}, g_lblPosObj.btnBgmMute, g_cssObj.button_Default),
|
|
5343
|
-
createCss2Button(`btnBgmVolume`, `${g_stateObj.bgmVolume}${g_lblNameObj.percent}`, () => setBGMVolume(), {
|
|
5344
|
-
...g_lblPosObj.btnBgmVolume, cxtFunc: () => setBGMVolume(-1),
|
|
5345
|
-
}, g_cssObj.button_Default),
|
|
5346
|
-
createCss2Button(`btnBgmVolumeL`, `<`, () => setBGMVolume(-1),
|
|
5347
|
-
g_lblPosObj.btnBgmVolumeL, g_cssObj.button_Setting),
|
|
5348
|
-
createCss2Button(`btnBgmVolumeR`, `>`, () => setBGMVolume(),
|
|
5349
|
-
g_lblPosObj.btnBgmVolumeR, g_cssObj.button_Setting),
|
|
5350
5424
|
);
|
|
5425
|
+
createEmptySprite(divRoot, `lblCommentM`, g_lblPosObj.lblComment_music);
|
|
5426
|
+
multiAppend(lblCommentM,
|
|
5427
|
+
createDivCss2Label(`lblDifNameInfoM`, ``, g_lblPosObj.lblDifNameInfoM),
|
|
5428
|
+
createDivCss2Label(`lblDiffiInfoM`, ``, g_lblPosObj.lblDiffiInfoM),
|
|
5429
|
+
createDivCss2Label(`lblNotesInfoM`, ``, g_lblPosObj.lblNotesInfoM),
|
|
5430
|
+
createDivCss2Label(`lblCommentInfoM`, ``, g_lblPosObj.lblCommentInfoM),
|
|
5431
|
+
);
|
|
5432
|
+
|
|
5433
|
+
if (g_headerObj.bgmUseFlg) {
|
|
5434
|
+
multiAppend(divRoot,
|
|
5435
|
+
createDivCss2Label(`lblBgmVolume`, g_lblNameObj.bgmVolume, g_lblPosObj.lblBgmVolume),
|
|
5436
|
+
createCss2Button(`btnBgmMute`, g_stateObj.bgmMuteFlg ? g_emojiObj.muted : g_emojiObj.speaker, evt => {
|
|
5437
|
+
g_stateObj.bgmMuteFlg = !g_stateObj.bgmMuteFlg;
|
|
5438
|
+
g_stateObj.bgmMuteFlg ? pauseBGM() : playBGM(0);
|
|
5439
|
+
evt.target.innerHTML = g_stateObj.bgmMuteFlg ? g_emojiObj.muted : g_emojiObj.speaker;
|
|
5440
|
+
}, g_lblPosObj.btnBgmMute, g_cssObj.button_Default),
|
|
5441
|
+
createCss2Button(`btnBgmVolume`, `${g_stateObj.bgmVolume}${g_lblNameObj.percent}`, () => setBGMVolume(), {
|
|
5442
|
+
...g_lblPosObj.btnBgmVolume, cxtFunc: () => setBGMVolume(-1),
|
|
5443
|
+
}, g_cssObj.button_Default),
|
|
5444
|
+
createCss2Button(`btnBgmVolumeL`, `<`, () => setBGMVolume(-1),
|
|
5445
|
+
g_lblPosObj.btnBgmVolumeL, g_cssObj.button_Setting),
|
|
5446
|
+
createCss2Button(`btnBgmVolumeR`, `>`, () => setBGMVolume(),
|
|
5447
|
+
g_lblPosObj.btnBgmVolumeR, g_cssObj.button_Setting),
|
|
5448
|
+
);
|
|
5449
|
+
} else {
|
|
5450
|
+
multiAppend(divRoot,
|
|
5451
|
+
createDivCss2Label(`lblBgmVolume`, `${g_lblNameObj.bgmMuted} ${g_emojiObj.muted}`, g_lblPosObj.btnBgmVolume),
|
|
5452
|
+
);
|
|
5453
|
+
}
|
|
5351
5454
|
changeMSelect(0, _initFlg);
|
|
5352
5455
|
|
|
5353
5456
|
let wheelCnt = 0;
|
|
@@ -5698,7 +5801,7 @@ const getCreatorInfo = (_creatorList) => {
|
|
|
5698
5801
|
const creatorIdx = g_headerObj.tuningNames.findIndex(val => val === creatorName);
|
|
5699
5802
|
const creatorUrl = creatorIdx >= 0 ? g_headerObj.tuningUrls[creatorIdx] : ``;
|
|
5700
5803
|
return [creatorName, creatorUrl, creatorIdx];
|
|
5701
|
-
}
|
|
5804
|
+
};
|
|
5702
5805
|
|
|
5703
5806
|
/**
|
|
5704
5807
|
* BGMの停止
|
|
@@ -6016,20 +6119,23 @@ const changeMSelect = (_num, _initFlg = false) => {
|
|
|
6016
6119
|
|
|
6017
6120
|
// 選択した楽曲に対応する譜面番号、製作者情報、曲長を取得
|
|
6018
6121
|
g_headerObj.viewLists = [];
|
|
6019
|
-
const
|
|
6122
|
+
const keyList = [], creatorList = [], playingFrameList = [], bpmList = [], difNameList = [], diffiList = [], notesList = [];
|
|
6020
6123
|
const targetIdx = g_headerObj.musicIdxList[(g_settings.musicIdxNum + g_headerObj.musicIdxList.length * 20) % g_headerObj.musicIdxList.length];
|
|
6021
6124
|
g_headerObj.musicNos.forEach((val, j) => {
|
|
6022
6125
|
if ((g_headerObj.musicGroups?.[val] ?? val) === targetIdx) {
|
|
6023
6126
|
g_headerObj.viewLists.push(j);
|
|
6024
|
-
|
|
6025
|
-
|
|
6026
|
-
|
|
6027
|
-
|
|
6127
|
+
keyList.push(g_headerObj.keyLabels[j]);
|
|
6128
|
+
creatorList.push(g_headerObj.creatorNames[j]);
|
|
6129
|
+
playingFrameList.push(g_detailObj.playingFrameWithBlank[j]);
|
|
6130
|
+
bpmList.push(g_headerObj.bpms[g_headerObj.musicNos[j]]);
|
|
6131
|
+
difNameList.push(`${g_headerObj.keyLabels[j]} / ${g_headerObj.difLabels[j]}`);
|
|
6132
|
+
diffiList.push(g_headerObj.difficulties[j]);
|
|
6133
|
+
notesList.push(`Arrows: ${sumData(g_detailObj.arrowCnt[j])}+${sumData(g_detailObj.frzCnt[j])}`);
|
|
6028
6134
|
}
|
|
6029
6135
|
});
|
|
6030
|
-
const playingFrames = makeDedupliArray(
|
|
6031
|
-
const bpm = makeDedupliArray(
|
|
6032
|
-
const [creatorName, creatorUrl, creatorIdx] = getCreatorInfo(
|
|
6136
|
+
const playingFrames = makeDedupliArray(playingFrameList.map(val => transFrameToTimer(val))).join(`, `);
|
|
6137
|
+
const bpm = makeDedupliArray(bpmList).join(`, `);
|
|
6138
|
+
const [creatorName, creatorUrl, creatorIdx] = getCreatorInfo(creatorList);
|
|
6033
6139
|
const creatorLink = creatorIdx >= 0 ?
|
|
6034
6140
|
`<a href="${creatorUrl}" target="_blank">${creatorName}</a>` : creatorName;
|
|
6035
6141
|
|
|
@@ -6044,7 +6150,7 @@ const changeMSelect = (_num, _initFlg = false) => {
|
|
|
6044
6150
|
|
|
6045
6151
|
// 選択した楽曲で使われているキー種の一覧を作成
|
|
6046
6152
|
deleteChildspriteAll(`keyTitleSprite`);
|
|
6047
|
-
makeDedupliArray(
|
|
6153
|
+
makeDedupliArray(keyList).sort((a, b) => parseInt(a) - parseInt(b))
|
|
6048
6154
|
.forEach((val, j) => keyTitleSprite.appendChild(
|
|
6049
6155
|
createDivCss2Label(`btnKeyTitle${val}`, val, { ...g_lblPosObj.btnKeyTitle, x: 10 + j * 40 })));
|
|
6050
6156
|
|
|
@@ -6061,8 +6167,35 @@ const changeMSelect = (_num, _initFlg = false) => {
|
|
|
6061
6167
|
g_settings.speedNum = getCurrentNo(g_settings.speeds, g_stateObj.speed);
|
|
6062
6168
|
}
|
|
6063
6169
|
|
|
6064
|
-
//
|
|
6065
|
-
|
|
6170
|
+
// 譜面情報、コメント文の加工
|
|
6171
|
+
lblDifNameInfoM.innerHTML = ``;
|
|
6172
|
+
lblDiffiInfoM.innerHTML = ``;
|
|
6173
|
+
lblNotesInfoM.innerHTML = ``;
|
|
6174
|
+
let notesInfo = ``;
|
|
6175
|
+
for (let j = 0; j < difNameList.length; j++) {
|
|
6176
|
+
let noteInfo = `${difNameList[j]}`;
|
|
6177
|
+
if (makeDedupliArray(creatorList).length > 1) {
|
|
6178
|
+
noteInfo += ` (${creatorList[j]})`;
|
|
6179
|
+
}
|
|
6180
|
+
lblDifNameInfoM.innerHTML += g_headerObj.difCustomLink[g_headerObj.viewLists[j]] !== undefined
|
|
6181
|
+
? `<a href="${g_headerObj.difCustomLink[g_headerObj.viewLists[j]]}" target="_blank" rel="noopener noreferrer">${noteInfo}</a>`
|
|
6182
|
+
: noteInfo;
|
|
6183
|
+
lblDifNameInfoM.innerHTML += `<br>`;
|
|
6184
|
+
notesInfo += `${noteInfo}<br>`;
|
|
6185
|
+
|
|
6186
|
+
const difColorPart = g_headerObj.difColorList.find(val => diffiList[j] < val.threshold);
|
|
6187
|
+
lblDiffiInfoM.innerHTML += `${diffiList[j] > 0
|
|
6188
|
+
? `<span style="color:${difColorPart?.color || ''}">${diffiList[j]}</span>`
|
|
6189
|
+
: `-`}<br>`;
|
|
6190
|
+
lblNotesInfoM.innerHTML += `/ ${notesList[j]}<br>`;
|
|
6191
|
+
}
|
|
6192
|
+
lblDifNameInfoM.style.fontSize = wUnit(getFontSize2(notesInfo,
|
|
6193
|
+
g_lblPosObj.lblDifNameInfoM.w, { maxSiz: g_lblPosObj.lblDifNameInfoM.siz }));
|
|
6194
|
+
lblDiffiInfoM.style.fontSize = lblDifNameInfoM.style.fontSize;
|
|
6195
|
+
lblNotesInfoM.style.fontSize = lblDifNameInfoM.style.fontSize;
|
|
6196
|
+
lblCommentInfoM.style.top = `${getStrHeight(lblDifNameInfoM.innerHTML, parseFloat(lblDifNameInfoM.style.fontSize))}px`;
|
|
6197
|
+
lblCommentInfoM.innerHTML = convertStrToVal(g_headerObj[`commentVal${g_settings.musicIdxNum}`]);
|
|
6198
|
+
lblCommentM.scrollTop = 0;
|
|
6066
6199
|
|
|
6067
6200
|
// BGM再生処理
|
|
6068
6201
|
if (!g_stateObj.bgmMuteFlg) {
|
|
@@ -8895,7 +9028,7 @@ const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF],
|
|
|
8895
9028
|
setExpandedBtnSiz();
|
|
8896
9029
|
createExpandedScView();
|
|
8897
9030
|
}
|
|
8898
|
-
}
|
|
9031
|
+
};
|
|
8899
9032
|
|
|
8900
9033
|
/*-----------------------------------------------------------*/
|
|
8901
9034
|
/* Scene : KEYCONFIG [orange] */
|
|
@@ -10751,7 +10884,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
|
|
|
10751
10884
|
splitLF(data)?.filter(val => val?.startsWith(_header) && _dosObj[val] !== undefined)
|
|
10752
10885
|
.forEach(val => dataStr = dataStr.replace(val, _dosObj[val]));
|
|
10753
10886
|
return dataStr;
|
|
10754
|
-
}
|
|
10887
|
+
};
|
|
10755
10888
|
|
|
10756
10889
|
/**
|
|
10757
10890
|
* 譜面データの優先順配列パターンの取得
|
|
@@ -11134,7 +11267,7 @@ const getSpeedFactor = _speed => {
|
|
|
11134
11267
|
return (1 + Math.abs(_speed)) / 2 * Math.sign(_speed);
|
|
11135
11268
|
}
|
|
11136
11269
|
return _speed;
|
|
11137
|
-
}
|
|
11270
|
+
};
|
|
11138
11271
|
|
|
11139
11272
|
/**
|
|
11140
11273
|
* 各フレームごとの速度を格納
|
|
@@ -13875,7 +14008,7 @@ const changeAppearanceBar = (_num = 10, _dirPlus = 2) => {
|
|
|
13875
14008
|
}
|
|
13876
14009
|
}
|
|
13877
14010
|
}
|
|
13878
|
-
}
|
|
14011
|
+
};
|
|
13879
14012
|
|
|
13880
14013
|
/**
|
|
13881
14014
|
* アルファマスクの再描画 (Appearance: Hidden+, Sudden+ 用)
|
|
@@ -14311,7 +14444,7 @@ const judgeArrow = _j => {
|
|
|
14311
14444
|
stepDivHit.classList.value = ``;
|
|
14312
14445
|
stepDivHit.classList.add(g_cssObj[`main_step${_resultJdg}`]);
|
|
14313
14446
|
stepDivHit.setAttribute(`cnt`, C_FRM_HITMOTION);
|
|
14314
|
-
}
|
|
14447
|
+
};
|
|
14315
14448
|
|
|
14316
14449
|
if (g_stateObj.excessive === C_FLG_ON && _difFrame <= g_judgObj.arrowJ[g_judgPosObj.uwan] && _difFrame > g_judgObj.arrowJ[g_judgPosObj.shobon]) {
|
|
14317
14450
|
// 空押し判定(有効かつ早押し時のみ)
|
|
@@ -15354,7 +15487,7 @@ const resultInit = () => {
|
|
|
15354
15487
|
...g_lblPosObj.btnRsGitter, resetFunc: () => openLink(g_linkObj.discord),
|
|
15355
15488
|
}, g_cssObj.button_Discord),
|
|
15356
15489
|
);
|
|
15357
|
-
}
|
|
15490
|
+
};
|
|
15358
15491
|
|
|
15359
15492
|
// ボタン描画
|
|
15360
15493
|
multiAppend(divRoot,
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2019/11/19
|
|
8
|
-
* Revised : 2026/
|
|
8
|
+
* Revised : 2026/04/07 (v46.6.0)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -301,6 +301,18 @@ const updateWindowSiz = () => {
|
|
|
301
301
|
siz: g_limitObj.difSelectorSiz, align: C_ALIGN_LEFT,
|
|
302
302
|
overflow: C_DIS_AUTO, whiteSpace: `normal`,
|
|
303
303
|
},
|
|
304
|
+
lblDifNameInfoM: {
|
|
305
|
+
w: 180, siz: 12, align: C_ALIGN_LEFT, pointerEvents: C_DIS_AUTO, lineHeight: `16px`,
|
|
306
|
+
},
|
|
307
|
+
lblDiffiInfoM: {
|
|
308
|
+
x: 180, w: 20, siz: 12, align: C_ALIGN_RIGHT, lineHeight: `16px`, fontWeight: `bold`,
|
|
309
|
+
},
|
|
310
|
+
lblNotesInfoM: {
|
|
311
|
+
x: 220, w: 150, siz: 12, align: C_ALIGN_LEFT, lineHeight: `16px`,
|
|
312
|
+
},
|
|
313
|
+
lblCommentInfoM: {
|
|
314
|
+
siz: g_limitObj.difSelectorSiz, align: C_ALIGN_LEFT, pointerEvents: C_DIS_AUTO,
|
|
315
|
+
},
|
|
304
316
|
btnBgmMute: {
|
|
305
317
|
x: g_btnX() + 90, y: g_sHeight - 105, w: 40, h: 35, siz: 30,
|
|
306
318
|
},
|
|
@@ -4355,6 +4367,8 @@ const g_lblNameObj = {
|
|
|
4355
4367
|
dataSave: `Data Save`,
|
|
4356
4368
|
clickHere: `Click Here!!`,
|
|
4357
4369
|
comment: `Comment`,
|
|
4370
|
+
bgmVolume: `BGM Volume`,
|
|
4371
|
+
bgmMuted: `BGM Muted`,
|
|
4358
4372
|
|
|
4359
4373
|
nowLoading: `Now Loading...`,
|
|
4360
4374
|
pleaseWait: `Please Wait...`,
|
package/jsconfig.json
CHANGED