danoniplus 34.4.0 → 34.4.2
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 +214 -276
- package/js/lib/danoni_constants.js +8 -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 : 2023/
|
|
7
|
+
* Revised : 2023/11/03
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 34.4.
|
|
12
|
-
const g_revisedDate = `2023/
|
|
11
|
+
const g_version = `Ver 34.4.2`;
|
|
12
|
+
const g_revisedDate = `2023/11/03`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -209,7 +209,7 @@ let g_canLoadDifInfoFlg = false;
|
|
|
209
209
|
* div要素のstyleを取得
|
|
210
210
|
* @param {string} _id
|
|
211
211
|
*/
|
|
212
|
-
const $id = _id => document.getElementById(
|
|
212
|
+
const $id = _id => document.getElementById(_id).style;
|
|
213
213
|
|
|
214
214
|
/**
|
|
215
215
|
* 複数のdiv子要素を親要素へ接続
|
|
@@ -360,7 +360,7 @@ const hasValInArray = (_val, _array, _pos = 0) =>
|
|
|
360
360
|
* @param {array} _data
|
|
361
361
|
* @param {integer} _length
|
|
362
362
|
*/
|
|
363
|
-
const hasArrayList = (_data, _length = 1) => _data
|
|
363
|
+
const hasArrayList = (_data, _length = 1) => _data?.length >= _length;
|
|
364
364
|
|
|
365
365
|
/**
|
|
366
366
|
* 改行コード区切りの配列展開
|
|
@@ -536,6 +536,21 @@ const blockCode = _setCode => !C_BLOCK_KEYS.includes(_setCode);
|
|
|
536
536
|
/* ショートカット制御 */
|
|
537
537
|
/*-----------------------------------------------------------*/
|
|
538
538
|
|
|
539
|
+
/**
|
|
540
|
+
* キーを押した状態を格納
|
|
541
|
+
* (KeyboardEvent.codeが空のときは、別キーとして扱う)
|
|
542
|
+
* @param {object} _evt
|
|
543
|
+
* @param {boolean} _keyHitFlg
|
|
544
|
+
*/
|
|
545
|
+
const switchKeyHit = (_evt, _keyHitFlg = false) => {
|
|
546
|
+
if (_evt.code === ``) {
|
|
547
|
+
g_inputKeyBuffer[''] = false;
|
|
548
|
+
g_inputKeyBuffer[_evt.key === `Shift` ? g_kCdNameObj.shiftRKey : g_kCdNameObj.unknownKey] = _keyHitFlg;
|
|
549
|
+
} else {
|
|
550
|
+
g_inputKeyBuffer[_evt.code] = _keyHitFlg;
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
|
|
539
554
|
/**
|
|
540
555
|
* キーを押したときの動作(汎用)
|
|
541
556
|
* @param {object} _evt
|
|
@@ -551,24 +566,15 @@ const commonKeyDown = (_evt, _displayName, _func = _code => { }, _dfEvtFlg) => {
|
|
|
551
566
|
if (_evt.repeat && (g_unrepeatObj.page.includes(_displayName) || g_unrepeatObj.key.includes(setCode))) {
|
|
552
567
|
return blockCode(setCode);
|
|
553
568
|
}
|
|
554
|
-
|
|
555
|
-
if (_evt.key === `Shift` && setCode === ``) {
|
|
556
|
-
g_inputKeyBuffer.ShiftRight = true;
|
|
557
|
-
}
|
|
569
|
+
switchKeyHit(_evt, true);
|
|
558
570
|
|
|
559
571
|
// 対象ボタンを検索
|
|
560
|
-
const scLists = Object.keys(g_shortcutObj[_displayName])
|
|
561
|
-
|
|
562
|
-
return (keyset.length > 2 ? keyIsDown(keyset[0]) && keyIsDown(keyset[1]) && keyIsDown(keyset[2]) :
|
|
563
|
-
(keyset.length > 1 ? keyIsDown(keyset[0]) && keyIsDown(keyset[1]) : keyIsDown(keyset[0])));
|
|
564
|
-
});
|
|
572
|
+
const scLists = Object.keys(g_shortcutObj[_displayName])
|
|
573
|
+
.filter(keys => keys.split(`_`).every(key => keyIsDown(key)));
|
|
565
574
|
if (scLists.length > 0) {
|
|
566
575
|
// リンク先にジャンプする場合はonkeyUpイベントが動かないため、事前にキー状態をリセット
|
|
567
576
|
if (g_shortcutObj[_displayName][scLists[0]].reset) {
|
|
568
|
-
|
|
569
|
-
if (_evt.key === `Shift` && setCode === ``) {
|
|
570
|
-
g_inputKeyBuffer.ShiftRight = false;
|
|
571
|
-
}
|
|
577
|
+
switchKeyHit(_evt);
|
|
572
578
|
}
|
|
573
579
|
// 対象ボタン処理を実行
|
|
574
580
|
const targetId = document.getElementById(g_shortcutObj[_displayName][scLists[0]].id);
|
|
@@ -588,7 +594,7 @@ const commonKeyDown = (_evt, _displayName, _func = _code => { }, _dfEvtFlg) => {
|
|
|
588
594
|
const commonKeyUp = _evt => {
|
|
589
595
|
g_inputKeyBuffer[g_kCdNameObj.metaLKey] = false;
|
|
590
596
|
g_inputKeyBuffer[g_kCdNameObj.metaRKey] = false;
|
|
591
|
-
|
|
597
|
+
switchKeyHit(_evt);
|
|
592
598
|
};
|
|
593
599
|
|
|
594
600
|
/**
|
|
@@ -603,7 +609,7 @@ const createScText = (_obj, _settingLabel, { displayName = `option`, dfLabel = `
|
|
|
603
609
|
if (scKey.length > 0) {
|
|
604
610
|
multiAppend(_obj,
|
|
605
611
|
createDivCss2Label(`sc${_settingLabel}`,
|
|
606
|
-
g_scViewObj.format.split(`{0}`).join(dfLabel
|
|
612
|
+
g_scViewObj.format.split(`{0}`).join(dfLabel || (`${g_kCd[g_kCdN.findIndex(kCd => kCd === scKey[0])] ?? ''}`)), {
|
|
607
613
|
x, y, w, siz, fontWeight: `bold`, opacity: 0.75, pointerEvents: C_DIS_NONE,
|
|
608
614
|
})
|
|
609
615
|
);
|
|
@@ -685,11 +691,7 @@ const preloadFile = (_as, _href, _type = ``, _crossOrigin = `anonymous`) => {
|
|
|
685
691
|
|
|
686
692
|
if (preloadFlg === undefined) {
|
|
687
693
|
g_preloadFiles.all.push(_href);
|
|
688
|
-
|
|
689
|
-
if (g_preloadFiles[_as] === undefined) {
|
|
690
|
-
g_preloadFiles[_as] = [];
|
|
691
|
-
}
|
|
692
|
-
g_preloadFiles[_as].push(_href);
|
|
694
|
+
g_preloadFiles[_as]?.push(_href) || (g_preloadFiles[_as] = [_href]);
|
|
693
695
|
|
|
694
696
|
if (g_userAgent.indexOf(`firefox`) !== -1 && _as === `image`) {
|
|
695
697
|
// Firefoxの場合のみpreloadが効かないため、画像読込形式にする
|
|
@@ -886,7 +888,7 @@ const colorNameToCode = _color => {
|
|
|
886
888
|
* 10進 -> 16進数変換 (カラーコード形式になるよう0埋め)
|
|
887
889
|
* @param {number} _num
|
|
888
890
|
*/
|
|
889
|
-
const byteToHex = _num =>
|
|
891
|
+
const byteToHex = _num => _num.toString(16).padStart(2, '0');
|
|
890
892
|
|
|
891
893
|
/**
|
|
892
894
|
* カラーコードかどうかを判定 (簡易版)
|
|
@@ -1154,13 +1156,11 @@ const createColorObject2 = (_id,
|
|
|
1154
1156
|
const style = div.style;
|
|
1155
1157
|
|
|
1156
1158
|
// 矢印・オブジェクト判定
|
|
1157
|
-
let charaStyle
|
|
1159
|
+
let charaStyle = `arrow${styleName}`;
|
|
1158
1160
|
if (isNaN(parseFloat(rotate))) {
|
|
1159
1161
|
const objData = rotate.split(`:`);
|
|
1160
1162
|
rotate = setVal(objData[1], 0, C_TYP_FLOAT);
|
|
1161
1163
|
charaStyle = `${objData[0]}${styleName}`;
|
|
1162
|
-
} else {
|
|
1163
|
-
charaStyle = `arrow${styleName}`;
|
|
1164
1164
|
}
|
|
1165
1165
|
if (g_stateObj.rotateEnabled) {
|
|
1166
1166
|
style.transform = `rotate(${rotate}deg)`;
|
|
@@ -1205,7 +1205,7 @@ const createEmptySprite = (_parentObj, _newObjId, { x = 0, y = 0, w = g_sWidth,
|
|
|
1205
1205
|
* @param {number} _num
|
|
1206
1206
|
*/
|
|
1207
1207
|
const createMultipleSprite = (_baseName, _num, { x = 0 } = {}) => {
|
|
1208
|
-
const sprite = createEmptySprite(divRoot,
|
|
1208
|
+
const sprite = createEmptySprite(divRoot, _baseName);
|
|
1209
1209
|
for (let j = 0; j <= _num; j++) {
|
|
1210
1210
|
createEmptySprite(sprite, `${_baseName}${j}`, { x });
|
|
1211
1211
|
}
|
|
@@ -1249,7 +1249,7 @@ const g_handler = (_ => {
|
|
|
1249
1249
|
*/
|
|
1250
1250
|
const deleteChildspriteAll = _parentObjName => {
|
|
1251
1251
|
|
|
1252
|
-
const parentsprite = document.
|
|
1252
|
+
const parentsprite = document.getElementById(_parentObjName);
|
|
1253
1253
|
while (parentsprite.hasChildNodes()) {
|
|
1254
1254
|
g_handler.removeListener(parentsprite.firstChild.getAttribute(`lsnrkey`));
|
|
1255
1255
|
g_handler.removeListener(parentsprite.firstChild.getAttribute(`lsnrkeyTS`));
|
|
@@ -1348,7 +1348,7 @@ const createCss2Button = (_id, _text, _func = _ => true, { x = 0, y = g_sHeight
|
|
|
1348
1348
|
* @param {object} _obj (x, y, w, h, siz, align, title, ...rest)
|
|
1349
1349
|
*/
|
|
1350
1350
|
const changeStyle = (_id, { x, y, w, h, siz, align, title, ...rest } = {}) => {
|
|
1351
|
-
const div = document.
|
|
1351
|
+
const div = document.getElementById(_id);
|
|
1352
1352
|
const style = div.style;
|
|
1353
1353
|
|
|
1354
1354
|
const obj = {
|
|
@@ -1427,12 +1427,12 @@ const clearWindow = (_redrawFlg = false, _customDisplayName = ``) => {
|
|
|
1427
1427
|
return ctx;
|
|
1428
1428
|
};
|
|
1429
1429
|
|
|
1430
|
-
if (document.
|
|
1430
|
+
if (document.getElementById(`layer0`) !== null) {
|
|
1431
1431
|
|
|
1432
1432
|
// レイヤー情報取得
|
|
1433
1433
|
const l0ctx = getLayerWithClear(`layer0`);
|
|
1434
1434
|
|
|
1435
|
-
if (document.
|
|
1435
|
+
if (document.getElementById(`layer1`) !== null) {
|
|
1436
1436
|
const l1ctx = getLayerWithClear(`layer1`);
|
|
1437
1437
|
|
|
1438
1438
|
// 線画 (title-line)
|
|
@@ -1448,7 +1448,7 @@ const clearWindow = (_redrawFlg = false, _customDisplayName = ``) => {
|
|
|
1448
1448
|
l1ctx.lineTo(layer1.width, g_sHeight);
|
|
1449
1449
|
l1ctx.stroke();
|
|
1450
1450
|
}
|
|
1451
|
-
if (document.
|
|
1451
|
+
if (document.getElementById(`layer2`) !== null) {
|
|
1452
1452
|
getLayerWithClear(`layer2`);
|
|
1453
1453
|
}
|
|
1454
1454
|
|
|
@@ -1469,7 +1469,7 @@ const clearWindow = (_redrawFlg = false, _customDisplayName = ``) => {
|
|
|
1469
1469
|
g_cxtAddFunc = {};
|
|
1470
1470
|
g_cxtDeleteFlg = {};
|
|
1471
1471
|
|
|
1472
|
-
if (document.
|
|
1472
|
+
if (document.getElementById(`layer0`) === null ||
|
|
1473
1473
|
(!g_headerObj[`customBack${_customDisplayName}Use`] && !g_headerObj.defaultSkinFlg)) {
|
|
1474
1474
|
|
|
1475
1475
|
$id(`canvas-frame`).width = wUnit(g_sWidth + diffX);
|
|
@@ -1492,11 +1492,9 @@ const clearWindow = (_redrawFlg = false, _customDisplayName = ``) => {
|
|
|
1492
1492
|
* @param {string} _propData
|
|
1493
1493
|
*/
|
|
1494
1494
|
const getCssCustomProperty = (_prop, _propData) =>
|
|
1495
|
-
document.documentElement.style.getPropertyValue(_propData)
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
g_cssBkProperties[_propData] :
|
|
1499
|
-
_prop.endsWith(`-x`) ? _propData : reviseCssText(makeColorGradation(_propData, { _defaultColorgrd: false }));
|
|
1495
|
+
document.documentElement.style.getPropertyValue(_propData) || (g_cssBkProperties[_propData] ?? (
|
|
1496
|
+
_prop.endsWith(`-x`) ? _propData : reviseCssText(makeColorGradation(_propData, { _defaultColorgrd: false }))
|
|
1497
|
+
));
|
|
1500
1498
|
|
|
1501
1499
|
/**
|
|
1502
1500
|
* CSSカスタムプロパティの値をオブジェクトへ退避
|
|
@@ -1729,11 +1727,11 @@ const getSpriteJumpFrame = _frames => {
|
|
|
1729
1727
|
* @param {boolean} _condition
|
|
1730
1728
|
*/
|
|
1731
1729
|
const drawBaseSpriteData = (_spriteData, _name, _condition = true) => {
|
|
1732
|
-
const baseSprite = document.
|
|
1730
|
+
const baseSprite = document.getElementById(`${_name}Sprite${_spriteData.depth}`);
|
|
1733
1731
|
if (_spriteData.command === ``) {
|
|
1734
1732
|
if (_spriteData.depth === C_FLG_ALL) {
|
|
1735
1733
|
for (let j = 0; j <= g_scoreObj[`${_name}MaxDepth`]; j++) {
|
|
1736
|
-
document.
|
|
1734
|
+
document.getElementById(`${_name}Sprite${j}`).textContent = ``;
|
|
1737
1735
|
}
|
|
1738
1736
|
} else {
|
|
1739
1737
|
baseSprite.textContent = ``;
|
|
@@ -1887,10 +1885,7 @@ class AudioPlayer {
|
|
|
1887
1885
|
}
|
|
1888
1886
|
|
|
1889
1887
|
addEventListener(_type, _listener) {
|
|
1890
|
-
|
|
1891
|
-
this._eventListeners[_type] = [];
|
|
1892
|
-
}
|
|
1893
|
-
this._eventListeners[_type].push(_listener);
|
|
1888
|
+
this._eventListeners[_type]?.push(_listener) || (this._eventListeners[_type] = [_listener]);
|
|
1894
1889
|
}
|
|
1895
1890
|
|
|
1896
1891
|
removeEventListener(_type, _listener) {
|
|
@@ -1987,12 +1982,12 @@ const transTimerToFrame = _str => {
|
|
|
1987
1982
|
|
|
1988
1983
|
const initialControl = async () => {
|
|
1989
1984
|
|
|
1990
|
-
const stage = document.
|
|
1985
|
+
const stage = document.getElementById(`canvas-frame`);
|
|
1991
1986
|
const divRoot = createEmptySprite(stage, `divRoot`, g_windowObj.divRoot);
|
|
1992
1987
|
|
|
1993
1988
|
// 背景の表示
|
|
1994
|
-
if (document.
|
|
1995
|
-
const layer0 = document.
|
|
1989
|
+
if (document.getElementById(`layer0`) !== null) {
|
|
1990
|
+
const layer0 = document.getElementById(`layer0`);
|
|
1996
1991
|
makeBgCanvas(layer0.getContext(`2d`));
|
|
1997
1992
|
} else {
|
|
1998
1993
|
createEmptySprite(divRoot, `divBack`, g_windowObj.divBack);
|
|
@@ -2005,8 +2000,8 @@ const initialControl = async () => {
|
|
|
2005
2000
|
g_canLoadDifInfoFlg = true;
|
|
2006
2001
|
|
|
2007
2002
|
// 譜面データの読み込みオプション
|
|
2008
|
-
g_enableAmpersandSplit = setBoolVal(document.
|
|
2009
|
-
g_enableDecodeURI = setBoolVal(document.
|
|
2003
|
+
g_enableAmpersandSplit = setBoolVal(document.getElementById(`enableAmpersandSplit`)?.value, true);
|
|
2004
|
+
g_enableDecodeURI = setBoolVal(document.getElementById(`enableDecodeURI`)?.value);
|
|
2010
2005
|
|
|
2011
2006
|
// 作品別ローカルストレージの読み込み
|
|
2012
2007
|
loadLocalStorage();
|
|
@@ -2032,7 +2027,7 @@ const initialControl = async () => {
|
|
|
2032
2027
|
Object.assign(g_headerObj, preheaderConvert(g_rootObj));
|
|
2033
2028
|
|
|
2034
2029
|
// CSSファイル内のbackgroundを取得するために再描画
|
|
2035
|
-
if (document.
|
|
2030
|
+
if (document.getElementById(`layer0`) === null) {
|
|
2036
2031
|
deleteDiv(divRoot, `divBack`);
|
|
2037
2032
|
createEmptySprite(divRoot, `divBack`);
|
|
2038
2033
|
} else if (!g_headerObj.defaultSkinFlg && !g_headerObj.customBackUse) {
|
|
@@ -2139,8 +2134,8 @@ const initialControl = async () => {
|
|
|
2139
2134
|
if (g_loadObj.main) {
|
|
2140
2135
|
|
|
2141
2136
|
// 譜面分割、譜面番号固定かどうかをチェック
|
|
2142
|
-
g_stateObj.dosDivideFlg = setBoolVal(document.
|
|
2143
|
-
g_stateObj.scoreLockFlg = setBoolVal(document.
|
|
2137
|
+
g_stateObj.dosDivideFlg = setBoolVal(document.getElementById(`externalDosDivide`)?.value ?? getQueryParamVal(`dosDivide`));
|
|
2138
|
+
g_stateObj.scoreLockFlg = setBoolVal(document.getElementById(`externalDosLock`)?.value ?? getQueryParamVal(`dosLock`));
|
|
2144
2139
|
|
|
2145
2140
|
for (let j = 1; j < g_headerObj.keyLabels.length; j++) {
|
|
2146
2141
|
|
|
@@ -2248,10 +2243,10 @@ const dosConvert = (_dos = ``) => {
|
|
|
2248
2243
|
*/
|
|
2249
2244
|
const loadChartFile = async (_scoreId = g_stateObj.scoreId) => {
|
|
2250
2245
|
|
|
2251
|
-
const dosInput = document.
|
|
2252
|
-
const divRoot = document.
|
|
2246
|
+
const dosInput = document.getElementById(`dos`);
|
|
2247
|
+
const divRoot = document.getElementById(`divRoot`);
|
|
2253
2248
|
const queryDos = getQueryParamVal(`dos`) !== null ?
|
|
2254
|
-
`dos/${getQueryParamVal('dos')}.txt` : encodeURI(document.
|
|
2249
|
+
`dos/${getQueryParamVal('dos')}.txt` : encodeURI(document.getElementById(`externalDos`)?.value ?? ``);
|
|
2255
2250
|
|
|
2256
2251
|
if (dosInput === null && queryDos === ``) {
|
|
2257
2252
|
makeWarningWindow(g_msgInfoObj.E_0023);
|
|
@@ -2272,7 +2267,7 @@ const loadChartFile = async (_scoreId = g_stateObj.scoreId) => {
|
|
|
2272
2267
|
|
|
2273
2268
|
// 外部dos読み込み
|
|
2274
2269
|
if (queryDos !== ``) {
|
|
2275
|
-
const charset = document.
|
|
2270
|
+
const charset = document.getElementById(`externalDosCharset`)?.value ?? document.characterSet;
|
|
2276
2271
|
const fileBase = queryDos.match(/.+\..*/)[0];
|
|
2277
2272
|
const fileExtension = fileBase.split(`.`).pop();
|
|
2278
2273
|
const fileCommon = fileBase.split(`.${fileExtension}`)[0];
|
|
@@ -3160,14 +3155,14 @@ const headerConvert = _dosObj => {
|
|
|
3160
3155
|
|
|
3161
3156
|
// Display使用可否設定を分解 |displayUse=false,ON|
|
|
3162
3157
|
const displayTempUse = _dosObj[`${option}Use`] ?? g_presetObj.settingUse?.[option] ?? `true`;
|
|
3163
|
-
const displayUse =
|
|
3158
|
+
const displayUse = displayTempUse?.split(`,`) ?? [true, C_FLG_ON];
|
|
3164
3159
|
|
|
3165
3160
|
// displayUse -> ボタンの有効/無効, displaySet -> ボタンの初期値(ON/OFF)
|
|
3166
3161
|
obj[`${option}Use`] = setBoolVal(displayUse[0], true);
|
|
3167
3162
|
obj[`${option}Set`] = setVal(displayUse.length > 1 ? displayUse[1] :
|
|
3168
3163
|
boolToSwitch(obj[`${option}Use`]), ``, C_TYP_SWITCH);
|
|
3169
3164
|
g_stateObj[`d_${option.toLowerCase()}`] = setVal(obj[`${option}Set`], C_FLG_ON, C_TYP_SWITCH);
|
|
3170
|
-
obj[`${option}ChainOFF`] =
|
|
3165
|
+
obj[`${option}ChainOFF`] = _dosObj[`${option}ChainOFF`]?.split(`,`) ?? [];
|
|
3171
3166
|
|
|
3172
3167
|
// Displayのデフォルト設定で、双方向に設定されている場合は設定をブロック
|
|
3173
3168
|
g_displays.filter((option2, k) =>
|
|
@@ -3245,7 +3240,7 @@ const headerConvert = _dosObj => {
|
|
|
3245
3240
|
obj.commentVal = tmpComment.split(`\n`).join(newlineTag);
|
|
3246
3241
|
|
|
3247
3242
|
// クレジット表示
|
|
3248
|
-
if (document.
|
|
3243
|
+
if (document.getElementById(`webMusicTitle`) !== null) {
|
|
3249
3244
|
webMusicTitle.innerHTML =
|
|
3250
3245
|
`<span style="font-size:${wUnit(32)}">${obj.musicTitleForView.join(`<br>`)}</span><br>
|
|
3251
3246
|
<span style="font-size:${wUnit(16)}">(Artist: <a href="${obj.artistUrl}" target="_blank">${obj.artistName}</a>)</span>`;
|
|
@@ -3408,7 +3403,7 @@ const resetBaseColorList = (_baseObj, _dosObj, { scoreId = `` } = {}) => {
|
|
|
3408
3403
|
|
|
3409
3404
|
// フリーズアロー色
|
|
3410
3405
|
const tmpFrzColors = (frzColorTxt !== undefined ? splitLF2(frzColorTxt) : []);
|
|
3411
|
-
const firstFrzColors =
|
|
3406
|
+
const firstFrzColors = tmpFrzColors[0]?.split(`,`) ?? [];
|
|
3412
3407
|
|
|
3413
3408
|
for (let j = 0; j < _baseObj.setColorInit.length; j++) {
|
|
3414
3409
|
|
|
@@ -3735,8 +3730,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
|
|
|
3735
3730
|
// |keyCtrl9j=Tab,7_0,Enter| -> |keyCtrl9j=Tab,S,D,F,Space,J,K,L,Enter| のように補完
|
|
3736
3731
|
g_keyObj[`${keyheader}_${k + dfPtn}`] =
|
|
3737
3732
|
tmpArray[k].split(`,`).map(n =>
|
|
3738
|
-
g_keyObj[`${_name}${getKeyPtnName(n)}`]
|
|
3739
|
-
structuredClone(g_keyObj[`${_name}${getKeyPtnName(n)}`]) : [_convFunc(n)]
|
|
3733
|
+
structuredClone(g_keyObj[`${_name}${getKeyPtnName(n)}`]) ?? [_convFunc(n)]
|
|
3740
3734
|
).flat();
|
|
3741
3735
|
if (baseCopyFlg) {
|
|
3742
3736
|
g_keyObj[`${keyheader}_${k + dfPtn}d`] = structuredClone(g_keyObj[`${keyheader}_${k + dfPtn}`]);
|
|
@@ -3787,9 +3781,8 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
|
|
|
3787
3781
|
// 部分的にキーパターン指定があった場合は既存パターンを展開 (例: |shuffle9j=2,7_0_0,2|)
|
|
3788
3782
|
g_keyObj[`${keyheader}_${k + dfPtn}_${ptnCnt}`] =
|
|
3789
3783
|
makeBaseArray(list.split(`,`).map(n =>
|
|
3790
|
-
g_keyObj[`${_name}${getKeyPtnName(n)}`]
|
|
3791
|
-
|
|
3792
|
-
[isNaN(parseInt(n)) ? n : parseInt(n, 10)]
|
|
3784
|
+
structuredClone(g_keyObj[`${_name}${getKeyPtnName(n)}`]) ??
|
|
3785
|
+
[isNaN(parseInt(n)) ? n : parseInt(n, 10)]
|
|
3793
3786
|
).flat(), g_keyObj[`${g_keyObj.defaultProp}${_key}_${k + dfPtn}`].length, 0);
|
|
3794
3787
|
ptnCnt++;
|
|
3795
3788
|
}
|
|
@@ -3864,9 +3857,8 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
|
|
|
3864
3857
|
const tmpParamPair = pairs.split(`::`);
|
|
3865
3858
|
g_keyObj[pairName][tmpParamPair[0]] =
|
|
3866
3859
|
makeBaseArray(tmpParamPair[1]?.split(`,`).map(n =>
|
|
3867
|
-
g_keyObj[`${_pairName}${getKeyPtnName(n)}`]
|
|
3868
|
-
|
|
3869
|
-
[n === `-` ? -1 : parseInt(n, 10)]
|
|
3860
|
+
structuredClone(g_keyObj[`${_pairName}${getKeyPtnName(n)}`]?.[tmpParamPair[0]]) ??
|
|
3861
|
+
[n === `-` ? -1 : parseInt(n, 10)]
|
|
3870
3862
|
).flat(), g_keyObj[`${g_keyObj.defaultProp}${_key}_${k + dfPtn}`].length, _defaultVal);
|
|
3871
3863
|
}
|
|
3872
3864
|
});
|
|
@@ -3900,10 +3892,10 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
|
|
|
3900
3892
|
errCd: `E_0104`, baseCopyFlg: true,
|
|
3901
3893
|
loopFunc: (k, keyheader) => {
|
|
3902
3894
|
const addShiftRKey = (_pattern = ``) => {
|
|
3903
|
-
const keyCtrls = g_keyObj[`${keyheader}_${k +
|
|
3895
|
+
const keyCtrls = g_keyObj[`${keyheader}_${k + dfPtnNum}${_pattern}`];
|
|
3904
3896
|
for (let j = 0; j < keyCtrls.length; j++) {
|
|
3905
|
-
if (keyCtrls[j].includes(
|
|
3906
|
-
keyCtrls[j].push(
|
|
3897
|
+
if (keyCtrls[j].includes(g_kCdObj.shiftRkey) && !keyCtrls[j].includes(g_kCdObj.shiftRAltKey)) {
|
|
3898
|
+
keyCtrls[j].push(g_kCdObj.shiftRAltKey);
|
|
3907
3899
|
}
|
|
3908
3900
|
}
|
|
3909
3901
|
};
|
|
@@ -4037,7 +4029,7 @@ const titleInit = _ => {
|
|
|
4037
4029
|
if (!g_stateObj.dataSaveFlg || hasVal(g_keyObj[`transKey${keyCtrlPtn}`])) {
|
|
4038
4030
|
g_canLoadDifInfoFlg = false;
|
|
4039
4031
|
}
|
|
4040
|
-
const divRoot = document.
|
|
4032
|
+
const divRoot = document.getElementById(`divRoot`);
|
|
4041
4033
|
|
|
4042
4034
|
// 曲時間制御変数
|
|
4043
4035
|
let thisTime;
|
|
@@ -4090,7 +4082,7 @@ const titleInit = _ => {
|
|
|
4090
4082
|
}
|
|
4091
4083
|
|
|
4092
4084
|
// 変数 titlesize の定義 (使用例: |titlesize=40$20|)
|
|
4093
|
-
const titlefontsizes = (g_headerObj.titlesize
|
|
4085
|
+
const titlefontsizes = (g_headerObj.titlesize?.split(`$`).join(`,`).split(`,`) || [titlefontsize, titlefontsize]);
|
|
4094
4086
|
const titlefontsize1 = setIntVal(titlefontsizes[0], titlefontsize);
|
|
4095
4087
|
const titlefontsize2 = setIntVal(titlefontsizes[1], titlefontsize1);
|
|
4096
4088
|
|
|
@@ -4242,7 +4234,7 @@ const titleInit = _ => {
|
|
|
4242
4234
|
// コメント文の加工
|
|
4243
4235
|
const convCommentVal = convertStrToVal(g_headerObj.commentVal);
|
|
4244
4236
|
if (g_headerObj.commentExternal) {
|
|
4245
|
-
if (document.
|
|
4237
|
+
if (document.getElementById(`commentArea`) !== null) {
|
|
4246
4238
|
commentArea.innerHTML = convCommentVal;
|
|
4247
4239
|
}
|
|
4248
4240
|
} else {
|
|
@@ -4435,7 +4427,7 @@ const makePlayButton = _func => createCss2Button(`btnPlay`, g_lblNameObj.b_play,
|
|
|
4435
4427
|
const optionInit = _ => {
|
|
4436
4428
|
|
|
4437
4429
|
clearWindow(true);
|
|
4438
|
-
const divRoot = document.
|
|
4430
|
+
const divRoot = document.getElementById(`divRoot`);
|
|
4439
4431
|
g_baseDisp = `Settings`;
|
|
4440
4432
|
g_currentPage = `option`;
|
|
4441
4433
|
g_stateObj.filterKeys = ``;
|
|
@@ -4490,7 +4482,7 @@ const inputSlider = (_slider, _link) => {
|
|
|
4490
4482
|
* 譜面変更セレクターの削除
|
|
4491
4483
|
*/
|
|
4492
4484
|
const resetDifWindow = _ => {
|
|
4493
|
-
if (document.
|
|
4485
|
+
if (document.getElementById(`difList`) !== null) {
|
|
4494
4486
|
deleteChildspriteAll(`difList`);
|
|
4495
4487
|
[`difList`, `difCover`, `btnDifU`, `btnDifD`].forEach(obj => document.getElementById(obj).remove());
|
|
4496
4488
|
g_currentPage = `option`;
|
|
@@ -4615,7 +4607,7 @@ const createDifWindow = (_key = ``) => {
|
|
|
4615
4607
|
const changeDifficulty = (_num = 1) => {
|
|
4616
4608
|
if (g_headerObj.difSelectorUse) {
|
|
4617
4609
|
g_stateObj.filterKeys = ``;
|
|
4618
|
-
if (document.
|
|
4610
|
+
if (document.getElementById(`difList`) === null) {
|
|
4619
4611
|
g_keyObj.prevKey = g_keyObj.currentKey;
|
|
4620
4612
|
createDifWindow();
|
|
4621
4613
|
} else {
|
|
@@ -4658,20 +4650,18 @@ const drawSpeedGraph = _scoreId => {
|
|
|
4658
4650
|
const speed = speedObj[speedType].speed;
|
|
4659
4651
|
const speedData = g_detailObj[`${speedType}Data`][_scoreId];
|
|
4660
4652
|
|
|
4661
|
-
|
|
4662
|
-
|
|
4663
|
-
|
|
4664
|
-
|
|
4665
|
-
speed.push(speedData[i + 1]);
|
|
4666
|
-
}
|
|
4667
|
-
speedObj[speedType].cnt++;
|
|
4653
|
+
for (let i = 0; i < speedData?.length; i += 2) {
|
|
4654
|
+
if (speedData[i] >= startFrame) {
|
|
4655
|
+
frame.push(speedData[i] - startFrame);
|
|
4656
|
+
speed.push(speedData[i + 1]);
|
|
4668
4657
|
}
|
|
4669
|
-
|
|
4670
|
-
speed.push(speed.at(-1));
|
|
4658
|
+
speedObj[speedType].cnt++;
|
|
4671
4659
|
}
|
|
4660
|
+
frame.push(playingFrame);
|
|
4661
|
+
speed.push(speed.at(-1));
|
|
4672
4662
|
});
|
|
4673
4663
|
|
|
4674
|
-
const canvas = document.
|
|
4664
|
+
const canvas = document.getElementById(`graphSpeed`);
|
|
4675
4665
|
const context = canvas.getContext(`2d`);
|
|
4676
4666
|
drawBaseLine(context);
|
|
4677
4667
|
|
|
@@ -4725,7 +4715,7 @@ const drawSpeedGraph = _scoreId => {
|
|
|
4725
4715
|
*/
|
|
4726
4716
|
const drawDensityGraph = _scoreId => {
|
|
4727
4717
|
|
|
4728
|
-
const canvas = document.
|
|
4718
|
+
const canvas = document.getElementById(`graphDensity`);
|
|
4729
4719
|
const context = canvas.getContext(`2d`);
|
|
4730
4720
|
drawBaseLine(context);
|
|
4731
4721
|
for (let j = 0; j < g_limitObj.densityDivision; j++) {
|
|
@@ -4771,16 +4761,16 @@ const drawDensityGraph = _scoreId => {
|
|
|
4771
4761
|
*/
|
|
4772
4762
|
const updateScoreDetailLabel = (_name, _label, _value, _pos = 0, _labelname = _label) => {
|
|
4773
4763
|
const baseLabel = (_bLabel, _bLabelname, _bAlign) =>
|
|
4774
|
-
document.
|
|
4775
|
-
createDivCss2Label(
|
|
4764
|
+
document.getElementById(`detail${_name}`).appendChild(
|
|
4765
|
+
createDivCss2Label(_bLabel, _bLabelname, {
|
|
4776
4766
|
x: 10, y: 105 + _pos * 20, w: 100, h: 20, siz: g_limitObj.difSelectorSiz, align: _bAlign,
|
|
4777
4767
|
})
|
|
4778
4768
|
);
|
|
4779
|
-
if (document.
|
|
4769
|
+
if (document.getElementById(`data${_label}`) === null) {
|
|
4780
4770
|
baseLabel(`lbl${_label}`, `${_labelname}`, C_ALIGN_LEFT);
|
|
4781
4771
|
baseLabel(`data${_label}`, `${_value}`, C_ALIGN_RIGHT);
|
|
4782
4772
|
} else {
|
|
4783
|
-
document.
|
|
4773
|
+
document.getElementById(`data${_label}`).textContent = `${_value}`;
|
|
4784
4774
|
}
|
|
4785
4775
|
};
|
|
4786
4776
|
|
|
@@ -4815,7 +4805,7 @@ const drawLine = (_context, _y, _lineType, _fixed = 0) => {
|
|
|
4815
4805
|
_context.lineWidth = 1;
|
|
4816
4806
|
|
|
4817
4807
|
if (_lineType === `main`) {
|
|
4818
|
-
const textBaseObj = document.
|
|
4808
|
+
const textBaseObj = document.getElementById(`lnkDifficulty`);
|
|
4819
4809
|
const textColor = window.getComputedStyle(textBaseObj, ``).color;
|
|
4820
4810
|
_context.strokeStyle = textColor;
|
|
4821
4811
|
_context.font = `${wUnit(12)} ${getBasicFont()}`;
|
|
@@ -4834,7 +4824,7 @@ const drawLine = (_context, _y, _lineType, _fixed = 0) => {
|
|
|
4834
4824
|
const makeDifInfoLabels = _scoreId => {
|
|
4835
4825
|
|
|
4836
4826
|
// ツール難易度
|
|
4837
|
-
const detailToolDif = document.
|
|
4827
|
+
const detailToolDif = document.getElementById(`detailToolDif`);
|
|
4838
4828
|
/**
|
|
4839
4829
|
* 譜面の難易度情報ラベルの作成
|
|
4840
4830
|
* @param {string} _lbl
|
|
@@ -4898,7 +4888,7 @@ const makeDifInfo = _scoreId => {
|
|
|
4898
4888
|
const frzCnts = sumData(g_detailObj.frzCnt[_scoreId]);
|
|
4899
4889
|
const push3CntStr = (g_detailObj.toolDif[_scoreId].push3.length === 0 ? `None` : `(${g_detailObj.toolDif[_scoreId].push3})`);
|
|
4900
4890
|
|
|
4901
|
-
if (document.
|
|
4891
|
+
if (document.getElementById(`lblTooldif`) === null) {
|
|
4902
4892
|
makeDifInfoLabels(_scoreId);
|
|
4903
4893
|
}
|
|
4904
4894
|
dataTooldif.textContent = g_detailObj.toolDif[_scoreId].tool;
|
|
@@ -5075,7 +5065,7 @@ const setDifficulty = (_initFlg) => {
|
|
|
5075
5065
|
g_shortcutObj.option.KeyR.exId : g_shortcutObj.option.KeyR.dfId;
|
|
5076
5066
|
|
|
5077
5067
|
if (g_settings.scrolls.length > 1) {
|
|
5078
|
-
setReverseView(document.
|
|
5068
|
+
setReverseView(document.getElementById(`btnReverse`));
|
|
5079
5069
|
}
|
|
5080
5070
|
} else {
|
|
5081
5071
|
g_settings.scrolls = structuredClone(g_keyObj.scrollName_def);
|
|
@@ -5148,7 +5138,7 @@ const createOptionWindow = _sprite => {
|
|
|
5148
5138
|
|
|
5149
5139
|
if (_graphUseFlg) {
|
|
5150
5140
|
const graphObj = document.createElement(`canvas`);
|
|
5151
|
-
const textBaseObj = document.
|
|
5141
|
+
const textBaseObj = document.getElementById(`lnkDifficulty`);
|
|
5152
5142
|
const bkColor = window.getComputedStyle(textBaseObj, ``).backgroundColor;
|
|
5153
5143
|
|
|
5154
5144
|
graphObj.id = `graph${_name}`;
|
|
@@ -5225,8 +5215,8 @@ const createOptionWindow = _sprite => {
|
|
|
5225
5215
|
g_stateObj.scoreDetailViewFlg = false;
|
|
5226
5216
|
g_shortcutObj.difSelector.KeyQ.id = g_settings.scoreDetailCursors[0];
|
|
5227
5217
|
}
|
|
5228
|
-
const scoreDetail = document.
|
|
5229
|
-
const detailObj = document.
|
|
5218
|
+
const scoreDetail = document.getElementById(`scoreDetail`);
|
|
5219
|
+
const detailObj = document.getElementById(`detail${g_stateObj.scoreDetail}`);
|
|
5230
5220
|
const visibles = [`hidden`, `visible`];
|
|
5231
5221
|
|
|
5232
5222
|
g_stateObj.scoreDetailViewFlg = !g_stateObj.scoreDetailViewFlg;
|
|
@@ -5346,7 +5336,7 @@ const createOptionWindow = _sprite => {
|
|
|
5346
5336
|
|
|
5347
5337
|
);
|
|
5348
5338
|
|
|
5349
|
-
const fadeinSlider = document.
|
|
5339
|
+
const fadeinSlider = document.getElementById(`fadeinSlider`);
|
|
5350
5340
|
fadeinSlider.addEventListener(`input`, _ =>
|
|
5351
5341
|
g_stateObj.fadein = inputSlider(fadeinSlider, lnkFadein), false);
|
|
5352
5342
|
|
|
@@ -5434,7 +5424,7 @@ const createGeneralSetting = (_obj, _settingName, { unitName = ``,
|
|
|
5434
5424
|
createScText(_obj, settingUpper, { displayName: displayName, dfLabel: scLabel });
|
|
5435
5425
|
|
|
5436
5426
|
} else {
|
|
5437
|
-
document.
|
|
5427
|
+
document.getElementById(`lbl${settingUpper}`).classList.add(g_cssObj.settings_Disabled);
|
|
5438
5428
|
_obj.appendChild(makeDisabledLabel(linkId, 0, initName));
|
|
5439
5429
|
}
|
|
5440
5430
|
};
|
|
@@ -5488,7 +5478,7 @@ const setSetting = (_scrollNum, _settingName, _unitName = ``, _roundNum = 0) =>
|
|
|
5488
5478
|
}
|
|
5489
5479
|
g_stateObj[_settingName] = settingList[settingNum];
|
|
5490
5480
|
g_settings[`${_settingName}Num`] = settingNum;
|
|
5491
|
-
document.
|
|
5481
|
+
document.getElementById(`lnk${toCapitalize(_settingName)}`).textContent =
|
|
5492
5482
|
`${getStgDetailName(g_stateObj[_settingName])}${_unitName}${g_localStorage[_settingName] === g_stateObj[_settingName] ? ' *' : ''}`;
|
|
5493
5483
|
};
|
|
5494
5484
|
|
|
@@ -5498,11 +5488,10 @@ const setSetting = (_scrollNum, _settingName, _unitName = ``, _roundNum = 0) =>
|
|
|
5498
5488
|
* @param {number} _heightPos
|
|
5499
5489
|
* @param {string} _defaultStr
|
|
5500
5490
|
*/
|
|
5501
|
-
const makeDisabledLabel = (_id, _heightPos, _defaultStr) =>
|
|
5502
|
-
|
|
5491
|
+
const makeDisabledLabel = (_id, _heightPos, _defaultStr) =>
|
|
5492
|
+
createDivCss2Label(_id, _defaultStr, {
|
|
5503
5493
|
x: g_limitObj.setLblLeft, y: g_limitObj.setLblHeight * _heightPos,
|
|
5504
5494
|
}, g_cssObj.settings_Disabled);
|
|
5505
|
-
};
|
|
5506
5495
|
|
|
5507
5496
|
/**
|
|
5508
5497
|
* 保存済みリバース取得処理
|
|
@@ -5760,7 +5749,7 @@ const getKeyCtrl = (_localStorage, _extraKeyName = ``) => {
|
|
|
5760
5749
|
const basePtn = `${g_keyObj.currentKey}_${g_keyObj.storagePtn}`;
|
|
5761
5750
|
const baseKeyNum = g_keyObj[`${g_keyObj.defaultProp}${basePtn}`].length;
|
|
5762
5751
|
|
|
5763
|
-
if (_localStorage[`keyCtrl${_extraKeyName}`]
|
|
5752
|
+
if (_localStorage[`keyCtrl${_extraKeyName}`]?.[0].length > 0) {
|
|
5764
5753
|
const prevPtn = g_keyObj.currentPtn;
|
|
5765
5754
|
g_keyObj.currentPtn = -1;
|
|
5766
5755
|
const copyPtn = `${g_keyObj.currentKey}_-1`;
|
|
@@ -5802,12 +5791,12 @@ const getKeyCtrl = (_localStorage, _extraKeyName = ``) => {
|
|
|
5802
5791
|
*/
|
|
5803
5792
|
const makeSettingLblCssButton = (_id, _name, _heightPos, _func, { x, y, w, h, siz, cxtFunc = _ => true, ...rest } = {}, ..._classes) => {
|
|
5804
5793
|
const tmpObj = {
|
|
5805
|
-
x: x
|
|
5806
|
-
y: y
|
|
5807
|
-
w: w
|
|
5808
|
-
h: h
|
|
5809
|
-
siz: siz
|
|
5810
|
-
cxtFunc: cxtFunc
|
|
5794
|
+
x: x ?? g_limitObj.setLblLeft,
|
|
5795
|
+
y: y ?? g_limitObj.setLblHeight * _heightPos,
|
|
5796
|
+
w: w ?? g_limitObj.setLblWidth,
|
|
5797
|
+
h: h ?? g_limitObj.setLblHeight,
|
|
5798
|
+
siz: siz ?? g_limitObj.setLblSiz,
|
|
5799
|
+
cxtFunc: cxtFunc ?? (_ => true),
|
|
5811
5800
|
};
|
|
5812
5801
|
return createCss2Button(_id, _name, _func, { ...tmpObj, ...rest }, g_cssObj.button_Default, ..._classes);
|
|
5813
5802
|
};
|
|
@@ -5819,14 +5808,13 @@ const makeSettingLblCssButton = (_id, _name, _heightPos, _func, { x, y, w, h, si
|
|
|
5819
5808
|
* @param {number} _heightPos 上からの配置順
|
|
5820
5809
|
* @param {function} _func
|
|
5821
5810
|
*/
|
|
5822
|
-
const makeDifLblCssButton = (_id, _name, _heightPos, _func, { x = 0, w = g_limitObj.difSelectorWidth, btnStyle = `Default` } = {}) =>
|
|
5823
|
-
|
|
5824
|
-
x
|
|
5825
|
-
w
|
|
5811
|
+
const makeDifLblCssButton = (_id, _name, _heightPos, _func, { x = 0, w = g_limitObj.difSelectorWidth, btnStyle = `Default` } = {}) =>
|
|
5812
|
+
createCss2Button(_id, _name, _func, {
|
|
5813
|
+
x, y: g_limitObj.setLblHeight * _heightPos,
|
|
5814
|
+
w, h: g_limitObj.setLblHeight,
|
|
5826
5815
|
siz: g_limitObj.difSelectorSiz,
|
|
5827
5816
|
borderStyle: `solid`,
|
|
5828
5817
|
}, g_cssObj[`button_${btnStyle}`], g_cssObj.button_ON);
|
|
5829
|
-
};
|
|
5830
5818
|
|
|
5831
5819
|
/**
|
|
5832
5820
|
* 設定・オプション用の設定変更ミニボタン
|
|
@@ -5835,14 +5823,13 @@ const makeDifLblCssButton = (_id, _name, _heightPos, _func, { x = 0, w = g_limit
|
|
|
5835
5823
|
* @param {number} _heightPos 上からの配置順
|
|
5836
5824
|
* @param {function} _func
|
|
5837
5825
|
*/
|
|
5838
|
-
const makeMiniCssButton = (_id, _directionFlg, _heightPos, _func, { dx = 0, dy = 0, dw = 0, dh = 0, dsiz = 0, visibility = `visible` } = {}) =>
|
|
5839
|
-
|
|
5826
|
+
const makeMiniCssButton = (_id, _directionFlg, _heightPos, _func, { dx = 0, dy = 0, dw = 0, dh = 0, dsiz = 0, visibility = `visible` } = {}) =>
|
|
5827
|
+
createCss2Button(`${_id}${_directionFlg}`, g_settingBtnObj.chara[_directionFlg], _func, {
|
|
5840
5828
|
x: g_settingBtnObj.pos[_directionFlg] + dx,
|
|
5841
5829
|
y: g_limitObj.setLblHeight * _heightPos + dy,
|
|
5842
5830
|
w: g_limitObj.setMiniWidth + dw, h: g_limitObj.setLblHeight + dh, siz: g_limitObj.setLblSiz + dsiz,
|
|
5843
5831
|
visibility: visibility
|
|
5844
5832
|
}, g_cssObj.button_Mini);
|
|
5845
|
-
};
|
|
5846
5833
|
|
|
5847
5834
|
/**
|
|
5848
5835
|
* カラーグループ、シャッフルグループの再設定
|
|
@@ -5855,7 +5842,7 @@ const resetGroupList = (_type, _keyCtrlPtn) => {
|
|
|
5855
5842
|
if (g_keyObj.currentPtn === -1) {
|
|
5856
5843
|
g_keycons[`${_type}Groups`] = addValtoArray(g_keycons[`${_type}Groups`], -1);
|
|
5857
5844
|
}
|
|
5858
|
-
g_keycons[`${_type}GroupNum`] = (g_keyObj.currentPtn
|
|
5845
|
+
g_keycons[`${_type}GroupNum`] = Math.min(g_keyObj.currentPtn, 0);
|
|
5859
5846
|
while (g_keyObj[`${_type}${_keyCtrlPtn}_${k}`] !== undefined) {
|
|
5860
5847
|
g_keycons[`${_type}Groups`].push(k);
|
|
5861
5848
|
k++;
|
|
@@ -5869,7 +5856,7 @@ const resetGroupList = (_type, _keyCtrlPtn) => {
|
|
|
5869
5856
|
const settingsDisplayInit = _ => {
|
|
5870
5857
|
|
|
5871
5858
|
clearWindow(true);
|
|
5872
|
-
const divRoot = document.
|
|
5859
|
+
const divRoot = document.getElementById(`divRoot`);
|
|
5873
5860
|
g_baseDisp = `Display`;
|
|
5874
5861
|
g_currentPage = `settingsDisplay`;
|
|
5875
5862
|
|
|
@@ -5916,21 +5903,6 @@ const createSettingsDisplayWindow = _sprite => {
|
|
|
5916
5903
|
const list = [C_FLG_OFF, C_FLG_ON];
|
|
5917
5904
|
const linkId = `lnk${_name}`;
|
|
5918
5905
|
|
|
5919
|
-
/**
|
|
5920
|
-
* 無効化用ラベル作成
|
|
5921
|
-
* @param {string} _id
|
|
5922
|
-
* @param {number} _heightPos
|
|
5923
|
-
* @param {number} _widthPos
|
|
5924
|
-
* @param {string} _defaultStr
|
|
5925
|
-
* @param {string} _flg
|
|
5926
|
-
*/
|
|
5927
|
-
const makeDisabledDisplayLabel = (_id, _heightPos, _widthPos, _defaultStr, _flg) => {
|
|
5928
|
-
return createDivCss2Label(_id, _defaultStr, {
|
|
5929
|
-
x: 30 + 180 * _widthPos, y: 3 + g_limitObj.setLblHeight * _heightPos,
|
|
5930
|
-
w: 170, siz: g_limitObj.difSelectorSiz,
|
|
5931
|
-
}, g_cssObj[`button_Disabled${flg}`]);
|
|
5932
|
-
};
|
|
5933
|
-
|
|
5934
5906
|
if (g_headerObj[`${_name}Use`]) {
|
|
5935
5907
|
const switchDisplay = evt => {
|
|
5936
5908
|
const displayFlg = g_stateObj[`d_${_name.toLowerCase()}`];
|
|
@@ -5951,8 +5923,12 @@ const createSettingsDisplayWindow = _sprite => {
|
|
|
5951
5923
|
createScText(document.getElementById(linkId), `${toCapitalize(_name)}`,
|
|
5952
5924
|
{ displayName: g_currentPage, targetLabel: linkId, x: -5 });
|
|
5953
5925
|
} else {
|
|
5954
|
-
displaySprite.appendChild(
|
|
5955
|
-
g_lblNameObj[`d_${toCapitalize(_name)}`] + `:${g_headerObj[`${_name}Set`]}`,
|
|
5926
|
+
displaySprite.appendChild(
|
|
5927
|
+
createDivCss2Label(linkId, g_lblNameObj[`d_${toCapitalize(_name)}`] + `:${g_headerObj[`${_name}Set`]}`, {
|
|
5928
|
+
x: 30 + 180 * _widthPos, y: 3 + g_limitObj.setLblHeight * _heightPos,
|
|
5929
|
+
w: 170, siz: g_limitObj.difSelectorSiz,
|
|
5930
|
+
}, g_cssObj[`button_Disabled${flg}`])
|
|
5931
|
+
);
|
|
5956
5932
|
}
|
|
5957
5933
|
};
|
|
5958
5934
|
|
|
@@ -5994,7 +5970,7 @@ const createSettingsDisplayWindow = _sprite => {
|
|
|
5994
5970
|
g_cssObj[`button_Rev${g_stateObj.filterLock}`]);
|
|
5995
5971
|
};
|
|
5996
5972
|
|
|
5997
|
-
const appearanceSlider = document.
|
|
5973
|
+
const appearanceSlider = document.getElementById(`appearanceSlider`);
|
|
5998
5974
|
appearanceSlider.addEventListener(`input`, _ =>
|
|
5999
5975
|
g_hidSudObj.filterPos = inputSlider(appearanceSlider, lblAppearancePos), false);
|
|
6000
5976
|
|
|
@@ -6052,9 +6028,9 @@ const interlockingButton = (_headerObj, _name, _current, _next, _buttonFlg = fal
|
|
|
6052
6028
|
let txtDisabled = ``;
|
|
6053
6029
|
if (!g_headerObj[`${defaultOption}Use`]) {
|
|
6054
6030
|
txtDisabled = `Disabled`;
|
|
6055
|
-
document.
|
|
6031
|
+
document.getElementById(`lnk${defaultOption}`).textContent = `${toCapitalize(defaultOption)}:${_next}`;
|
|
6056
6032
|
}
|
|
6057
|
-
document.
|
|
6033
|
+
document.getElementById(`lnk${defaultOption}`).classList.replace(g_cssObj[`button_${txtDisabled}${_current}`], g_cssObj[`button_Disabled${_next}`]);
|
|
6058
6034
|
}
|
|
6059
6035
|
// さらに連動する場合は設定を反転
|
|
6060
6036
|
interlockingButton(_headerObj, defaultOption, _next, _current, _buttonFlg);
|
|
@@ -6072,7 +6048,7 @@ const interlockingButton = (_headerObj, _name, _current, _next, _buttonFlg = fal
|
|
|
6072
6048
|
const keyConfigInit = (_kcType = g_kcType) => {
|
|
6073
6049
|
|
|
6074
6050
|
clearWindow(true);
|
|
6075
|
-
const divRoot = document.
|
|
6051
|
+
const divRoot = document.getElementById(`divRoot`);
|
|
6076
6052
|
g_kcType = _kcType;
|
|
6077
6053
|
g_currentPage = `keyConfig`;
|
|
6078
6054
|
|
|
@@ -6141,7 +6117,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6141
6117
|
* @param {string} _cssName
|
|
6142
6118
|
*/
|
|
6143
6119
|
const changeKeyConfigColor = (_j, _k, _cssName) =>
|
|
6144
|
-
changeConfigColor(document.
|
|
6120
|
+
changeConfigColor(document.getElementById(`keycon${_j}_${_k}`), _cssName);
|
|
6145
6121
|
|
|
6146
6122
|
/**
|
|
6147
6123
|
* 一時的に矢印色・シャッフルグループを変更(共通処理)
|
|
@@ -6732,7 +6708,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6732
6708
|
const j = g_keycons.cursorNumList[m];
|
|
6733
6709
|
for (let k = 0; k < g_keyObj[`keyCtrl${keyCtrlPtn}`][j].length; k++) {
|
|
6734
6710
|
g_keyObj[`keyCtrl${keyCtrlPtn}`][j][k] = setIntVal(g_keyObj[`keyCtrl${keyCtrlPtn}d`][j][k]);
|
|
6735
|
-
document.
|
|
6711
|
+
document.getElementById(`keycon${j}_${k}`).textContent = g_kCd[g_keyObj[`keyCtrl${keyCtrlPtn}`][j][k]];
|
|
6736
6712
|
changeKeyConfigColor(j, k, g_keyObj.currentPtn === -1 ? g_cssObj.keyconfig_Defaultkey : g_cssObj.title_base);
|
|
6737
6713
|
}
|
|
6738
6714
|
}
|
|
@@ -6747,12 +6723,12 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6747
6723
|
|
|
6748
6724
|
// キーボード押下時処理
|
|
6749
6725
|
setShortcutEvent(g_currentPage, (kbCode, kbKey) => {
|
|
6750
|
-
const keyCdObj = document.
|
|
6726
|
+
const keyCdObj = document.getElementById(`keycon${g_currentj}_${g_currentk}`);
|
|
6751
6727
|
let setKey = g_kCdN.findIndex(kCd => kCd === kbCode);
|
|
6752
6728
|
|
|
6753
6729
|
// 右シフトキー対応
|
|
6754
|
-
if (setKey ===
|
|
6755
|
-
setKey =
|
|
6730
|
+
if (setKey === g_kCdObj.unknown && kbKey === `Shift`) {
|
|
6731
|
+
setKey = g_kCdObj.shiftRAltKey;
|
|
6756
6732
|
}
|
|
6757
6733
|
|
|
6758
6734
|
// 全角切替、BackSpace、Deleteキー、Escキーは割り当て禁止
|
|
@@ -6770,7 +6746,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6770
6746
|
return;
|
|
6771
6747
|
}
|
|
6772
6748
|
|
|
6773
|
-
if (setKey === C_KEY_RETRY && (!g_isMac ||
|
|
6749
|
+
if (setKey === C_KEY_RETRY && (!g_isMac || g_currentk === 0)) {
|
|
6774
6750
|
// スキップ
|
|
6775
6751
|
} else {
|
|
6776
6752
|
// キー割り当て処理
|
|
@@ -6817,8 +6793,7 @@ const getShadowColor = (_colorPos, _arrowColor) => g_headerObj.setShadowColor[_c
|
|
|
6817
6793
|
const getKeyInfo = _ => {
|
|
6818
6794
|
const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
|
|
6819
6795
|
const keyNum = g_keyObj[`${g_keyObj.defaultProp}${keyCtrlPtn}`].length;
|
|
6820
|
-
const posMax =
|
|
6821
|
-
g_keyObj[`divMax${keyCtrlPtn}`] : Math.max(...g_keyObj[`pos${keyCtrlPtn}`]) + 1);
|
|
6796
|
+
const posMax = g_keyObj[`divMax${keyCtrlPtn}`] ?? Math.max(...g_keyObj[`pos${keyCtrlPtn}`]) + 1;
|
|
6822
6797
|
const divideCnt = g_keyObj[`div${keyCtrlPtn}`] - 1;
|
|
6823
6798
|
const keyGroupMaps = setVal(g_keyObj[`keyGroup${keyCtrlPtn}`], [...Array(keyNum)].fill([`0`]), C_TYP_STRING);
|
|
6824
6799
|
const keyGroupList = makeDedupliArray(keyGroupMaps.flat()).sort((a, b) => parseInt(a) - parseInt(b));
|
|
@@ -6944,7 +6919,7 @@ const loadMusic = _ => {
|
|
|
6944
6919
|
|
|
6945
6920
|
// 進捗時
|
|
6946
6921
|
request.addEventListener(`progress`, _event => {
|
|
6947
|
-
const lblLoading = document.
|
|
6922
|
+
const lblLoading = document.getElementById(`lblLoading`);
|
|
6948
6923
|
|
|
6949
6924
|
if (_event.lengthComputable) {
|
|
6950
6925
|
const rate = _event.loaded / _event.total;
|
|
@@ -6958,8 +6933,8 @@ const loadMusic = _ => {
|
|
|
6958
6933
|
});
|
|
6959
6934
|
|
|
6960
6935
|
// エラー処理
|
|
6961
|
-
request.addEventListener(`timeout`, _ => makeWarningWindow(
|
|
6962
|
-
request.addEventListener(`error`, _ => makeWarningWindow(
|
|
6936
|
+
request.addEventListener(`timeout`, _ => makeWarningWindow(g_msgInfoObj.E_0033, { backBtnUse: true }));
|
|
6937
|
+
request.addEventListener(`error`, _ => makeWarningWindow(g_msgInfoObj.E_0034, { backBtnUse: true }));
|
|
6963
6938
|
|
|
6964
6939
|
request.send();
|
|
6965
6940
|
};
|
|
@@ -7138,12 +7113,8 @@ const loadingScoreInit = async () => {
|
|
|
7138
7113
|
// シャッフルグループを扱いやすくする
|
|
7139
7114
|
// [0, 0, 0, 1, 0, 0, 0] -> [[0, 1, 2, 4, 5, 6], [3]]
|
|
7140
7115
|
const shuffleGroupMap = {};
|
|
7141
|
-
g_keyObj[`shuffle${keyCtrlPtn}`].forEach((_val, _i) =>
|
|
7142
|
-
|
|
7143
|
-
shuffleGroupMap[_val] = [];
|
|
7144
|
-
}
|
|
7145
|
-
shuffleGroupMap[_val].push(_i);
|
|
7146
|
-
});
|
|
7116
|
+
g_keyObj[`shuffle${keyCtrlPtn}`].forEach((_val, _i) =>
|
|
7117
|
+
shuffleGroupMap[_val]?.push(_i) || (shuffleGroupMap[_val] = [_i]));
|
|
7147
7118
|
|
|
7148
7119
|
// Mirror,Random,S-Randomの適用
|
|
7149
7120
|
g_shuffleFunc[g_stateObj.shuffle](keyNum, Object.values(shuffleGroupMap));
|
|
@@ -7898,7 +7869,7 @@ const setSpeedOnFrame = (_speedData, _lastFrame) => {
|
|
|
7898
7869
|
let currentSpeed = g_stateObj.speed * 2;
|
|
7899
7870
|
|
|
7900
7871
|
for (let frm = 0, s = 0; frm <= _lastFrame; frm++) {
|
|
7901
|
-
while (
|
|
7872
|
+
while (frm >= _speedData?.[s]) {
|
|
7902
7873
|
currentSpeed = _speedData[s + 1] * g_stateObj.speed * 2;
|
|
7903
7874
|
s += 2;
|
|
7904
7875
|
}
|
|
@@ -7983,11 +7954,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
|
|
|
7983
7954
|
|
|
7984
7955
|
const setNotes = (_j, _k, _data, _startPoint, _header, _frzFlg = false) => {
|
|
7985
7956
|
if (_startPoint >= 0) {
|
|
7986
|
-
|
|
7987
|
-
g_workObj[`mk${_header}Arrow`][_startPoint] = [];
|
|
7988
|
-
}
|
|
7989
|
-
g_workObj[`mk${_header}Arrow`][_startPoint].push(_j);
|
|
7990
|
-
|
|
7957
|
+
g_workObj[`mk${_header}Arrow`][_startPoint]?.push(_j) || (g_workObj[`mk${_header}Arrow`][_startPoint] = [_j]);
|
|
7991
7958
|
if (_frzFlg) {
|
|
7992
7959
|
g_workObj[`mk${_header}Length`][_j][_k] = getFrzLength(_speedOnFrame, _data[_k], _data[_k + 1]);
|
|
7993
7960
|
}
|
|
@@ -8230,12 +8197,10 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
|
|
|
8230
8197
|
g_workObj.speedData.push(g_scoreObj.frameNum);
|
|
8231
8198
|
g_workObj.speedData.push(_speedOnFrame[g_scoreObj.frameNum]);
|
|
8232
8199
|
|
|
8233
|
-
|
|
8234
|
-
|
|
8235
|
-
|
|
8236
|
-
|
|
8237
|
-
g_workObj.speedData.push(_speedOnFrame[_dataObj.speedData[k]]);
|
|
8238
|
-
}
|
|
8200
|
+
for (let k = 0; k < _dataObj?.speedData.length; k += 2) {
|
|
8201
|
+
if (_dataObj.speedData[k] >= g_scoreObj.frameNum) {
|
|
8202
|
+
g_workObj.speedData.push(_dataObj.speedData[k]);
|
|
8203
|
+
g_workObj.speedData.push(_speedOnFrame[_dataObj.speedData[k]]);
|
|
8239
8204
|
}
|
|
8240
8205
|
}
|
|
8241
8206
|
};
|
|
@@ -8325,17 +8290,6 @@ const pushColors = (_header, _frame, _val, _colorCd, _allFlg) => {
|
|
|
8325
8290
|
const addAll = Number(_allFlg) * 1000;
|
|
8326
8291
|
const allUseTypes = [];
|
|
8327
8292
|
|
|
8328
|
-
/**
|
|
8329
|
-
* 色変化用配列(フレーム別)の初期化
|
|
8330
|
-
* @param {string} _baseStr
|
|
8331
|
-
*/
|
|
8332
|
-
const initialize = (_baseStr) => {
|
|
8333
|
-
if (g_workObj[_baseStr][_frame] === undefined) {
|
|
8334
|
-
g_workObj[_baseStr][_frame] = [];
|
|
8335
|
-
g_workObj[`${_baseStr}Cd`][_frame] = [];
|
|
8336
|
-
}
|
|
8337
|
-
};
|
|
8338
|
-
|
|
8339
8293
|
/**
|
|
8340
8294
|
* 全体色変化の有効化(フレーム別)
|
|
8341
8295
|
* @param {...any} _types
|
|
@@ -8352,8 +8306,8 @@ const pushColors = (_header, _frame, _val, _colorCd, _allFlg) => {
|
|
|
8352
8306
|
* @param {number} _cVal
|
|
8353
8307
|
*/
|
|
8354
8308
|
const pushColor = (_baseStr, _cVal) => {
|
|
8355
|
-
g_workObj[_baseStr][_frame]
|
|
8356
|
-
g_workObj[`${_baseStr}Cd`][_frame]
|
|
8309
|
+
g_workObj[_baseStr][_frame]?.push(_cVal) || (g_workObj[_baseStr][_frame] = [_cVal]);
|
|
8310
|
+
g_workObj[`${_baseStr}Cd`][_frame]?.push(colorCd) || (g_workObj[`${_baseStr}Cd`][_frame] = [colorCd]);
|
|
8357
8311
|
};
|
|
8358
8312
|
|
|
8359
8313
|
if (_val < 30 || _val >= 1000) {
|
|
@@ -8369,8 +8323,6 @@ const pushColors = (_header, _frame, _val, _colorCd, _allFlg) => {
|
|
|
8369
8323
|
|
|
8370
8324
|
// 矢印の色変化 (追随指定時はフリーズアローも色変化)
|
|
8371
8325
|
baseHeaders.forEach(baseHeader => {
|
|
8372
|
-
initialize(baseHeader);
|
|
8373
|
-
|
|
8374
8326
|
if (_val < 20 || _val >= 1000) {
|
|
8375
8327
|
pushColor(baseHeader, g_workObj.replaceNums[_val % 1000] + addAll);
|
|
8376
8328
|
} else if (_val >= 20) {
|
|
@@ -8408,7 +8360,6 @@ const pushColors = (_header, _frame, _val, _colorCd, _allFlg) => {
|
|
|
8408
8360
|
|
|
8409
8361
|
g_keyObj[`color${tkObj.keyCtrlPtn}`].forEach((cpattern, k) => {
|
|
8410
8362
|
if (colorPos === cpattern) {
|
|
8411
|
-
initialize(baseHeader + ctype);
|
|
8412
8363
|
pushColor(baseHeader + ctype, k + addAll);
|
|
8413
8364
|
}
|
|
8414
8365
|
});
|
|
@@ -8465,30 +8416,24 @@ const pushScrollchs = (_header, _frameArrow, _val, _frameStep, _scrollDir) => {
|
|
|
8465
8416
|
|
|
8466
8417
|
const frameArrow = Math.max(_frameArrow, g_scoreObj.frameNum);
|
|
8467
8418
|
const frameStep = Math.max(_frameStep, g_scoreObj.frameNum);
|
|
8419
|
+
const pushData = (_pattern, _frame, _val) =>
|
|
8420
|
+
g_workObj[`mkScrollch${_pattern}`][_frame]?.push(_val) || (g_workObj[`mkScrollch${_pattern}`][_frame] = [_val]);
|
|
8468
8421
|
|
|
8469
|
-
if (g_workObj.mkScrollchArrow[frameArrow] === undefined) {
|
|
8470
|
-
g_workObj.mkScrollchArrow[frameArrow] = [];
|
|
8471
|
-
g_workObj.mkScrollchArrowDir[frameArrow] = [];
|
|
8472
|
-
}
|
|
8473
|
-
if (g_workObj.mkScrollchStep[frameStep] === undefined) {
|
|
8474
|
-
g_workObj.mkScrollchStep[frameStep] = [];
|
|
8475
|
-
g_workObj.mkScrollchStepDir[frameStep] = [];
|
|
8476
|
-
}
|
|
8477
8422
|
if (_val < 20 || _val >= 1000) {
|
|
8478
8423
|
const realVal = g_workObj.replaceNums[_val % 1000];
|
|
8479
|
-
|
|
8480
|
-
|
|
8481
|
-
|
|
8482
|
-
|
|
8424
|
+
pushData(`Arrow`, frameArrow, realVal);
|
|
8425
|
+
pushData(`ArrowDir`, frameArrow, _scrollDir);
|
|
8426
|
+
pushData(`Step`, frameStep, realVal);
|
|
8427
|
+
pushData(`StepDir`, frameStep, _scrollDir);
|
|
8483
8428
|
|
|
8484
8429
|
} else {
|
|
8485
8430
|
const colorNum = _val - 20;
|
|
8486
8431
|
for (let j = 0; j < tkObj.keyNum; j++) {
|
|
8487
8432
|
if (g_keyObj[`color${tkObj.keyCtrlPtn}`][j] === colorNum) {
|
|
8488
|
-
|
|
8489
|
-
|
|
8490
|
-
|
|
8491
|
-
|
|
8433
|
+
pushData(`Arrow`, frameArrow, j);
|
|
8434
|
+
pushData(`ArrowDir`, frameArrow, _scrollDir);
|
|
8435
|
+
pushData(`Step`, frameStep, j);
|
|
8436
|
+
pushData(`StepDir`, frameStep, _scrollDir);
|
|
8492
8437
|
}
|
|
8493
8438
|
}
|
|
8494
8439
|
}
|
|
@@ -8527,6 +8472,13 @@ const getArrowSettings = _ => {
|
|
|
8527
8472
|
for (let j = 0; j < g_workObj.keyCtrl.length; j++) {
|
|
8528
8473
|
for (let k = 0; k < g_workObj.keyCtrl[j].length; k++) {
|
|
8529
8474
|
g_workObj.keyCtrlN[j][k] = g_kCdN[g_workObj.keyCtrl[j][k]];
|
|
8475
|
+
|
|
8476
|
+
// 内部のキーコードにより、KeyboardEvent.codeの値を切り替え
|
|
8477
|
+
if (g_workObj.keyCtrl[j][k] === g_kCdObj.unknown) {
|
|
8478
|
+
g_workObj.keyCtrlN[j][k] = g_kCdNameObj.unknownKey;
|
|
8479
|
+
} else if (g_workObj.keyCtrl[j][k] === g_kCdObj.shiftRAltKey) {
|
|
8480
|
+
g_workObj.keyCtrlN[j][k] = g_kCdNameObj.shiftRKey;
|
|
8481
|
+
}
|
|
8530
8482
|
g_workObj.keyHitFlg[j][k] = false;
|
|
8531
8483
|
}
|
|
8532
8484
|
}
|
|
@@ -8550,8 +8502,7 @@ const getArrowSettings = _ => {
|
|
|
8550
8502
|
// モーション管理
|
|
8551
8503
|
g_typeLists.arrow.forEach(type => g_workObj[`${type}CssMotions`] = [...Array(keyNum)].fill(``));
|
|
8552
8504
|
|
|
8553
|
-
const scrollDirOptions =
|
|
8554
|
-
g_keyObj[`scrollDir${keyCtrlPtn}`][g_stateObj.scroll] : [...Array(keyNum)].fill(1));
|
|
8505
|
+
const scrollDirOptions = g_keyObj[`scrollDir${keyCtrlPtn}`]?.[g_stateObj.scroll] ?? [...Array(keyNum)].fill(1);
|
|
8555
8506
|
|
|
8556
8507
|
g_stateObj.autoAll = boolToSwitch(g_stateObj.autoPlay === C_FLG_ALL);
|
|
8557
8508
|
g_workObj.hitPosition = (g_stateObj.autoAll === C_FLG_ON ? 0 : g_stateObj.hitPosition);
|
|
@@ -8697,7 +8648,7 @@ const setKeyCtrl = (_localStorage, _keyNum, _keyCtrlPtn) => {
|
|
|
8697
8648
|
*/
|
|
8698
8649
|
const mainInit = _ => {
|
|
8699
8650
|
clearWindow(true, `Main`);
|
|
8700
|
-
const divRoot = document.
|
|
8651
|
+
const divRoot = document.getElementById(`divRoot`);
|
|
8701
8652
|
document.oncontextmenu = _ => false;
|
|
8702
8653
|
g_currentPage = `main`;
|
|
8703
8654
|
|
|
@@ -8883,31 +8834,27 @@ const mainInit = _ => {
|
|
|
8883
8834
|
g_scoreObj.fadeOutTerm = C_FRM_AFTERFADE;
|
|
8884
8835
|
|
|
8885
8836
|
// フェードアウト時間指定の場合、その7秒(=420フレーム)後に終了する
|
|
8886
|
-
|
|
8887
|
-
|
|
8888
|
-
|
|
8889
|
-
|
|
8890
|
-
|
|
8891
|
-
|
|
8892
|
-
|
|
8893
|
-
|
|
8894
|
-
g_scoreObj.fadeOutFrame = Math.ceil(duration / g_headerObj.playbackRate + g_headerObj.blankFrame + g_stateObj.adjustment);
|
|
8837
|
+
let fadeNo = -1;
|
|
8838
|
+
if (g_headerObj.fadeFrame?.length >= g_stateObj.scoreId + 1) {
|
|
8839
|
+
fadeNo = (isNaN(parseInt(g_headerObj.fadeFrame[g_stateObj.scoreId][0])) ? -1 : g_stateObj.scoreId);
|
|
8840
|
+
}
|
|
8841
|
+
if (fadeNo !== -1) {
|
|
8842
|
+
// フェードアウト指定の場合、曲長(フェードアウト開始まで)は FadeFrame - (本来のblankFrame)
|
|
8843
|
+
duration = parseInt(g_headerObj.fadeFrame[fadeNo][0]) - g_headerObj.blankFrameDef;
|
|
8844
|
+
g_scoreObj.fadeOutFrame = Math.ceil(duration / g_headerObj.playbackRate + g_headerObj.blankFrame + g_stateObj.adjustment);
|
|
8895
8845
|
|
|
8896
|
-
|
|
8897
|
-
|
|
8898
|
-
}
|
|
8846
|
+
if (g_headerObj.fadeFrame[fadeNo].length > 1) {
|
|
8847
|
+
g_scoreObj.fadeOutTerm = Number(g_headerObj.fadeFrame[fadeNo][1]);
|
|
8899
8848
|
}
|
|
8900
8849
|
}
|
|
8901
8850
|
|
|
8902
8851
|
// 終了時間指定の場合、その値を適用する
|
|
8903
8852
|
let endFrameUseFlg = false;
|
|
8904
|
-
|
|
8905
|
-
|
|
8906
|
-
|
|
8907
|
-
|
|
8908
|
-
|
|
8909
|
-
endFrameUseFlg = true;
|
|
8910
|
-
}
|
|
8853
|
+
const tmpEndFrame = g_headerObj.endFrame?.[g_stateObj.scoreId] || g_headerObj.endFrame?.[0];
|
|
8854
|
+
if (!isNaN(parseInt(tmpEndFrame))) {
|
|
8855
|
+
// 終了時間指定の場合、曲長は EndFrame - (本来のblankFrame)
|
|
8856
|
+
duration = parseInt(tmpEndFrame) - g_headerObj.blankFrameDef;
|
|
8857
|
+
endFrameUseFlg = true;
|
|
8911
8858
|
}
|
|
8912
8859
|
|
|
8913
8860
|
let fullFrame = Math.ceil(duration / g_headerObj.playbackRate + g_headerObj.blankFrame + g_stateObj.adjustment);
|
|
@@ -9084,14 +9031,14 @@ const mainInit = _ => {
|
|
|
9084
9031
|
|
|
9085
9032
|
// Ready?表示
|
|
9086
9033
|
if (!g_headerObj.customReadyUse) {
|
|
9087
|
-
const readyColor =
|
|
9034
|
+
const readyColor = g_headerObj.readyColor || g_headerObj.setColorOrg[0];
|
|
9088
9035
|
let readyDelayFrame = 0;
|
|
9089
9036
|
if (g_stateObj.fadein === 0 && g_headerObj.readyDelayFrame > 0 &&
|
|
9090
9037
|
g_headerObj.readyDelayFrame + g_stateObj.adjustment > 0) {
|
|
9091
9038
|
readyDelayFrame = g_headerObj.readyDelayFrame + g_stateObj.adjustment;
|
|
9092
9039
|
}
|
|
9093
|
-
const readyHtml =
|
|
9094
|
-
`<span style='color:${readyColor};font-size:${wUnit(60)};'>R</span>EADY<span style='font-size:${wUnit(50)};'>?</span
|
|
9040
|
+
const readyHtml = g_headerObj.readyHtml ||
|
|
9041
|
+
`<span style='color:${readyColor};font-size:${wUnit(60)};'>R</span>EADY<span style='font-size:${wUnit(50)};'>?</span>`;
|
|
9095
9042
|
|
|
9096
9043
|
divRoot.appendChild(
|
|
9097
9044
|
createDivCss2Label(`lblReady`, readyHtml, {
|
|
@@ -9117,17 +9064,16 @@ const mainInit = _ => {
|
|
|
9117
9064
|
*/
|
|
9118
9065
|
const mainKeyDownActFunc = {
|
|
9119
9066
|
|
|
9120
|
-
OFF: (
|
|
9067
|
+
OFF: (_code, _key) => {
|
|
9068
|
+
const convCode = _code || (_key === `Shift` ? g_kCdNameObj.shiftRKey : g_kCdNameObj.unknownKey);
|
|
9121
9069
|
const matchKeys = g_workObj.keyCtrlN;
|
|
9122
9070
|
|
|
9123
9071
|
for (let j = 0; j < keyNum; j++) {
|
|
9124
|
-
matchKeys[j].filter((key, k) =>
|
|
9072
|
+
matchKeys[j].filter((key, k) => convCode === key && !g_workObj.keyHitFlg[j][k] && !g_judgObj.lockFlgs[j])
|
|
9125
9073
|
.forEach(() => {
|
|
9126
|
-
|
|
9127
|
-
|
|
9128
|
-
|
|
9129
|
-
g_judgObj.lockFlgs[j] = false;
|
|
9130
|
-
}
|
|
9074
|
+
g_judgObj.lockFlgs[j] = true;
|
|
9075
|
+
judgeArrow(j);
|
|
9076
|
+
g_judgObj.lockFlgs[j] = false;
|
|
9131
9077
|
});
|
|
9132
9078
|
}
|
|
9133
9079
|
},
|
|
@@ -9143,12 +9089,8 @@ const mainInit = _ => {
|
|
|
9143
9089
|
if (evt.repeat && !g_mainRepeatObj.key.includes(setCode)) {
|
|
9144
9090
|
return blockCode(setCode);
|
|
9145
9091
|
}
|
|
9146
|
-
|
|
9147
|
-
|
|
9148
|
-
if (evt.key === `Shift` && setCode === ``) {
|
|
9149
|
-
g_inputKeyBuffer.ShiftRight = true;
|
|
9150
|
-
}
|
|
9151
|
-
mainKeyDownActFunc[g_stateObj.autoAll](setCode);
|
|
9092
|
+
switchKeyHit(evt, true);
|
|
9093
|
+
mainKeyDownActFunc[g_stateObj.autoAll](setCode, evt.key);
|
|
9152
9094
|
|
|
9153
9095
|
// 曲中リトライ、タイトルバック
|
|
9154
9096
|
if (setCode === g_kCdN[g_headerObj.keyRetry]) {
|
|
@@ -9209,11 +9151,7 @@ const mainInit = _ => {
|
|
|
9209
9151
|
};
|
|
9210
9152
|
|
|
9211
9153
|
document.onkeyup = evt => {
|
|
9212
|
-
|
|
9213
|
-
g_inputKeyBuffer[setCode] = false;
|
|
9214
|
-
if (evt.key === `Shift` && setCode === ``) {
|
|
9215
|
-
g_inputKeyBuffer.ShiftRight = false;
|
|
9216
|
-
}
|
|
9154
|
+
switchKeyHit(evt);
|
|
9217
9155
|
mainKeyUpActFunc[g_stateObj.autoAll]();
|
|
9218
9156
|
};
|
|
9219
9157
|
|
|
@@ -9227,7 +9165,7 @@ const mainInit = _ => {
|
|
|
9227
9165
|
if (g_workObj[`mk${toCapitalize(_name)}ColorChangeAll`][g_scoreObj.frameNum]) {
|
|
9228
9166
|
const colorSelf = g_workObj[`${_name}Colors`][_j];
|
|
9229
9167
|
const colorAll = g_workObj[`${_name}ColorsAll`][_j];
|
|
9230
|
-
const arrowTop = document.
|
|
9168
|
+
const arrowTop = document.getElementById(`${_name}Top${_j}_${_k}`);
|
|
9231
9169
|
|
|
9232
9170
|
if (arrowTop.getAttribute(`color`) !== colorSelf && colorAll === colorSelf) {
|
|
9233
9171
|
arrowTop.style.background = colorAll;
|
|
@@ -9246,9 +9184,9 @@ const mainInit = _ => {
|
|
|
9246
9184
|
const changeFrzColor = (_j, _k, _name, _state) => {
|
|
9247
9185
|
|
|
9248
9186
|
if (g_workObj[`mk${toCapitalize(_name)}ColorChangeAll`][g_scoreObj.frameNum]) {
|
|
9249
|
-
const frzTop = document.
|
|
9250
|
-
const frzBar = document.
|
|
9251
|
-
const frzBtm = document.
|
|
9187
|
+
const frzTop = document.getElementById(`${_name}Top${_j}_${_k}`);
|
|
9188
|
+
const frzBar = document.getElementById(`${_name}Bar${_j}_${_k}`);
|
|
9189
|
+
const frzBtm = document.getElementById(`${_name}Btm${_j}_${_k}`);
|
|
9252
9190
|
const frzName = `${_name}${_state}`;
|
|
9253
9191
|
|
|
9254
9192
|
// 矢印部分の色変化
|
|
@@ -9323,7 +9261,7 @@ const mainInit = _ => {
|
|
|
9323
9261
|
// 矢印(オート、AutoPlay: ON)
|
|
9324
9262
|
arrowON: (_j, _arrowName, _cnt) => {
|
|
9325
9263
|
if (_cnt === 0) {
|
|
9326
|
-
const stepDivHit = document.
|
|
9264
|
+
const stepDivHit = document.getElementById(`stepHit${_j}`);
|
|
9327
9265
|
|
|
9328
9266
|
judgeIi(_cnt);
|
|
9329
9267
|
stepDivHit.style.opacity = 1;
|
|
@@ -9335,7 +9273,7 @@ const mainInit = _ => {
|
|
|
9335
9273
|
// ダミー矢印(オート、AutoPlay: OFF)
|
|
9336
9274
|
dummyArrowOFF: (_j, _arrowName, _cnt) => {
|
|
9337
9275
|
if (_cnt === 0) {
|
|
9338
|
-
const stepDivHit = document.
|
|
9276
|
+
const stepDivHit = document.getElementById(`stepHit${_j}`);
|
|
9339
9277
|
|
|
9340
9278
|
g_customJsObj.dummyArrow.forEach(func => func());
|
|
9341
9279
|
stepDivHit.style.top = wUnit(-15);
|
|
@@ -9752,11 +9690,11 @@ const mainInit = _ => {
|
|
|
9752
9690
|
g_customJsObj.mainEnterFrame.forEach(func => func());
|
|
9753
9691
|
|
|
9754
9692
|
// 速度変化 (途中変速, 個別加速)
|
|
9755
|
-
while (
|
|
9693
|
+
while (currentFrame >= g_workObj.speedData?.[speedCnts]) {
|
|
9756
9694
|
g_workObj.currentSpeed = g_workObj.speedData[speedCnts + 1];
|
|
9757
9695
|
speedCnts += 2;
|
|
9758
9696
|
}
|
|
9759
|
-
while (
|
|
9697
|
+
while (currentFrame >= g_workObj.boostData?.[boostCnts]) {
|
|
9760
9698
|
g_workObj.boostSpd = g_workObj.boostData[boostCnts + 1];
|
|
9761
9699
|
g_workObj.boostDir = (g_workObj.boostSpd > 0 ? 1 : -1);
|
|
9762
9700
|
boostCnts += 2;
|
|
@@ -9812,7 +9750,7 @@ const mainInit = _ => {
|
|
|
9812
9750
|
|
|
9813
9751
|
// 矢印・フリーズアロー移動&消去
|
|
9814
9752
|
for (let j = 0; j < keyNum; j++) {
|
|
9815
|
-
const stepDivHit = document.
|
|
9753
|
+
const stepDivHit = document.getElementById(`stepHit${j}`);
|
|
9816
9754
|
|
|
9817
9755
|
// ダミー矢印
|
|
9818
9756
|
for (let k = g_workObj.judgDummyArrowCnt[j]; k <= dummyArrowCnts[j]; k++) {
|
|
@@ -9848,7 +9786,7 @@ const mainInit = _ => {
|
|
|
9848
9786
|
g_scoreObj.wordData[currentFrame]?.forEach(tmpObj => {
|
|
9849
9787
|
g_wordObj.wordDir = tmpObj[0];
|
|
9850
9788
|
g_wordObj.wordDat = tmpObj[1];
|
|
9851
|
-
g_wordSprite = document.
|
|
9789
|
+
g_wordSprite = document.getElementById(`lblword${g_wordObj.wordDir}`);
|
|
9852
9790
|
|
|
9853
9791
|
const wordDepth = Number(g_wordObj.wordDir);
|
|
9854
9792
|
if (g_wordObj.wordDat.substring(0, 5) === `[fade`) {
|
|
@@ -9894,13 +9832,13 @@ const mainInit = _ => {
|
|
|
9894
9832
|
|
|
9895
9833
|
// 判定キャラクタ消去
|
|
9896
9834
|
jdgGroups.forEach(jdg => {
|
|
9897
|
-
let charaJCnt = document.
|
|
9835
|
+
let charaJCnt = document.getElementById(`chara${jdg}`).getAttribute(`cnt`);
|
|
9898
9836
|
if (charaJCnt > 0) {
|
|
9899
|
-
document.
|
|
9837
|
+
document.getElementById(`chara${jdg}`).setAttribute(`cnt`, --charaJCnt);
|
|
9900
9838
|
if (charaJCnt === 0) {
|
|
9901
|
-
document.
|
|
9902
|
-
document.
|
|
9903
|
-
document.
|
|
9839
|
+
document.getElementById(`chara${jdg}`).textContent = ``;
|
|
9840
|
+
document.getElementById(`combo${jdg}`).textContent = ``;
|
|
9841
|
+
document.getElementById(`diff${jdg}`).textContent = ``;
|
|
9904
9842
|
}
|
|
9905
9843
|
}
|
|
9906
9844
|
});
|
|
@@ -10202,7 +10140,7 @@ const judgeArrow = _j => {
|
|
|
10202
10140
|
const judgeTargetArrow = _difFrame => {
|
|
10203
10141
|
const _difCnt = Math.abs(_difFrame);
|
|
10204
10142
|
const stepHitTargetArrow = _resultJdg => {
|
|
10205
|
-
const stepDivHit = document.
|
|
10143
|
+
const stepDivHit = document.getElementById(`stepHit${_j}`);
|
|
10206
10144
|
stepDivHit.style.top = wUnit(currentArrow.prevY - parseFloat($id(`stepRoot${_j}`).top) - 15 + g_workObj.hitPosition * g_workObj.scrollDir[_j]);
|
|
10207
10145
|
stepDivHit.style.opacity = 0.75;
|
|
10208
10146
|
stepDivHit.classList.value = ``;
|
|
@@ -10299,8 +10237,8 @@ const displayDiff = (_difFrame, _fjdg = ``, _justFrames = g_headerObj.justFrames
|
|
|
10299
10237
|
* @param {string} _state
|
|
10300
10238
|
*/
|
|
10301
10239
|
const changeLifeColor = (_state = ``) => {
|
|
10302
|
-
const lblLife = document.
|
|
10303
|
-
const lifeBar = document.
|
|
10240
|
+
const lblLife = document.getElementById(`lblLife`);
|
|
10241
|
+
const lifeBar = document.getElementById(`lifeBar`);
|
|
10304
10242
|
if (_state !== ``) {
|
|
10305
10243
|
const lifeCss = g_cssObj[`life_${_state}`];
|
|
10306
10244
|
lblLife.classList.remove(g_cssObj.life_Max, g_cssObj.life_Cleared, g_cssObj.life_Failed);
|
|
@@ -10350,9 +10288,9 @@ const lifeDamage = (_excessive = false) => {
|
|
|
10350
10288
|
const changeJudgeCharacter = (_name, _character, _fjdg = ``) => {
|
|
10351
10289
|
g_resultObj[_name]++;
|
|
10352
10290
|
g_currentArrows++;
|
|
10353
|
-
document.
|
|
10354
|
-
document.
|
|
10355
|
-
document.
|
|
10291
|
+
document.getElementById(`chara${_fjdg}J`).innerHTML = `<span class="common_${_name}">${_character}</span>`;
|
|
10292
|
+
document.getElementById(`chara${_fjdg}J`).setAttribute(`cnt`, C_FRM_JDGMOTION);
|
|
10293
|
+
document.getElementById(`lbl${toCapitalize(_name)}`).textContent = g_resultObj[_name];
|
|
10356
10294
|
};
|
|
10357
10295
|
|
|
10358
10296
|
/**
|
|
@@ -10482,7 +10420,7 @@ const makeFinishView = _text => {
|
|
|
10482
10420
|
finishView.innerHTML = _text;
|
|
10483
10421
|
finishView.style.opacity = 1;
|
|
10484
10422
|
[`charaJ`, `comboJ`, `diffJ`, `charaFJ`, `comboFJ`, `diffFJ`].forEach(label =>
|
|
10485
|
-
document.
|
|
10423
|
+
document.getElementById(label).textContent = ``);
|
|
10486
10424
|
};
|
|
10487
10425
|
|
|
10488
10426
|
const finishViewing = _ => {
|
|
@@ -10521,7 +10459,7 @@ const resultInit = _ => {
|
|
|
10521
10459
|
g_scoreObj[`${sprite}ResultLoopCount`] = 0;
|
|
10522
10460
|
});
|
|
10523
10461
|
|
|
10524
|
-
const divRoot = document.
|
|
10462
|
+
const divRoot = document.getElementById(`divRoot`);
|
|
10525
10463
|
|
|
10526
10464
|
// 曲時間制御変数
|
|
10527
10465
|
let thisTime;
|
|
@@ -10782,7 +10720,7 @@ const resultInit = _ => {
|
|
|
10782
10720
|
|
|
10783
10721
|
} else {
|
|
10784
10722
|
resultWindow.appendChild(makeCssResultSymbol(`lblAutoView`, 215, g_cssObj.result_noRecord, 4, `(No Record)`));
|
|
10785
|
-
const lblAutoView = document.
|
|
10723
|
+
const lblAutoView = document.getElementById(`lblAutoView`);
|
|
10786
10724
|
lblAutoView.style.fontSize = wUnit(20);
|
|
10787
10725
|
}
|
|
10788
10726
|
|
|
@@ -10815,8 +10753,8 @@ const resultInit = _ => {
|
|
|
10815
10753
|
jdgScore.pos, `)`),
|
|
10816
10754
|
);
|
|
10817
10755
|
} else {
|
|
10818
|
-
document.
|
|
10819
|
-
document.
|
|
10756
|
+
document.getElementById(`lbl${jdgScore.id}L1`).textContent = `(${highscoreDfObj[score] >= 0 ? "+" : "-"}`;
|
|
10757
|
+
document.getElementById(`lbl${jdgScore.id}LS`).textContent = Math.abs(highscoreDfObj[score]);
|
|
10820
10758
|
}
|
|
10821
10759
|
});
|
|
10822
10760
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2019/11/19
|
|
8
|
-
* Revised : 2023/10/
|
|
8
|
+
* Revised : 2023/10/31 (v34.4.1)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -1361,6 +1361,13 @@ const g_kCdNameObj = {
|
|
|
1361
1361
|
shiftRKey: `ShiftRight`,
|
|
1362
1362
|
metaLKey: `MetaLeft`,
|
|
1363
1363
|
metaRKey: `MetaRight`,
|
|
1364
|
+
unknownKey: `Unknown`,
|
|
1365
|
+
};
|
|
1366
|
+
|
|
1367
|
+
const g_kCdObj = {
|
|
1368
|
+
unknown: 1,
|
|
1369
|
+
shiftRkey: 256,
|
|
1370
|
+
shiftRAltKey: 260,
|
|
1364
1371
|
};
|
|
1365
1372
|
|
|
1366
1373
|
// 画面別ショートカット
|