danoniplus 26.3.1 → 26.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 +187 -224
- 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 : 2022/02/
|
|
7
|
+
* Revised : 2022/02/25
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 26.
|
|
12
|
-
const g_revisedDate = `2022/02/
|
|
11
|
+
const g_version = `Ver 26.4.0`;
|
|
12
|
+
const g_revisedDate = `2022/02/25`;
|
|
13
13
|
const g_alphaVersion = ``;
|
|
14
14
|
|
|
15
15
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
@@ -48,16 +48,16 @@ const current = _ => {
|
|
|
48
48
|
};
|
|
49
49
|
const g_rootPath = current().match(/(^.*\/)/)[0];
|
|
50
50
|
const g_remoteFlg = g_rootPath.match(`^https://cwtickle.github.io/danoniplus/`) !== null;
|
|
51
|
+
const g_randTime = Date.now();
|
|
51
52
|
|
|
52
53
|
window.onload = async () => {
|
|
53
54
|
g_loadObj.main = true;
|
|
54
55
|
g_currentPage = `initial`;
|
|
55
56
|
|
|
56
57
|
// ロード直後に定数・初期化ファイル、旧バージョン定義関数を読込
|
|
57
|
-
|
|
58
|
-
await loadScript2(`${g_rootPath}../js/lib/
|
|
59
|
-
await loadScript2(`${g_rootPath}../js/lib/
|
|
60
|
-
await loadScript2(`${g_rootPath}../js/lib/danoni_legacy_function.js?${randTime}`, false);
|
|
58
|
+
await loadScript2(`${g_rootPath}../js/lib/danoni_localbinary.js?${g_randTime}`, false);
|
|
59
|
+
await loadScript2(`${g_rootPath}../js/lib/danoni_constants.js?${g_randTime}`);
|
|
60
|
+
await loadScript2(`${g_rootPath}../js/lib/danoni_legacy_function.js?${g_randTime}`, false);
|
|
61
61
|
initialControl();
|
|
62
62
|
};
|
|
63
63
|
|
|
@@ -1303,7 +1303,7 @@ const transTimerToFrame = _str => {
|
|
|
1303
1303
|
/* Scene : TITLE [melon] */
|
|
1304
1304
|
/*-----------------------------------------------------------*/
|
|
1305
1305
|
|
|
1306
|
-
function initialControl() {
|
|
1306
|
+
async function initialControl() {
|
|
1307
1307
|
|
|
1308
1308
|
[g_sWidth, g_sHeight] = [
|
|
1309
1309
|
setVal($id(`canvas-frame`).width, 600, C_TYP_FLOAT), setVal($id(`canvas-frame`).height, 500, C_TYP_FLOAT)
|
|
@@ -1345,14 +1345,8 @@ function initialControl() {
|
|
|
1345
1345
|
// 作品別ローカルストレージの読み込み
|
|
1346
1346
|
loadLocalStorage();
|
|
1347
1347
|
|
|
1348
|
-
// 譜面データの読み込み
|
|
1349
|
-
|
|
1350
|
-
}
|
|
1351
|
-
|
|
1352
|
-
/**
|
|
1353
|
-
* 共通設定ファイル、スキンファイル、カスタムファイルの読込
|
|
1354
|
-
*/
|
|
1355
|
-
async function loadBaseFiles() {
|
|
1348
|
+
// 譜面データの読み込み(1ファイル目)
|
|
1349
|
+
await loadChartFile(0);
|
|
1356
1350
|
|
|
1357
1351
|
// 共通設定ファイルの指定
|
|
1358
1352
|
let [settingType, settingRoot] = getFilePath(g_rootObj.settingType ?? ``, C_DIR_JS);
|
|
@@ -1361,8 +1355,7 @@ async function loadBaseFiles() {
|
|
|
1361
1355
|
}
|
|
1362
1356
|
|
|
1363
1357
|
// 共通設定ファイルの読込
|
|
1364
|
-
|
|
1365
|
-
await loadScript2(`${settingRoot}danoni_setting${settingType}.js?${randTime}`, false);
|
|
1358
|
+
await loadScript2(`${settingRoot}danoni_setting${settingType}.js?${g_randTime}`, false);
|
|
1366
1359
|
loadLegacySettingFunc();
|
|
1367
1360
|
if (document.querySelector(`#lblLoading`) !== null) {
|
|
1368
1361
|
divRoot.removeChild(document.querySelector(`#lblLoading`));
|
|
@@ -1453,13 +1446,25 @@ async function loadBaseFiles() {
|
|
|
1453
1446
|
}
|
|
1454
1447
|
}
|
|
1455
1448
|
|
|
1449
|
+
getScoreDetailData(0);
|
|
1450
|
+
|
|
1456
1451
|
if (g_loadObj.main) {
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1452
|
+
|
|
1453
|
+
// 譜面分割、譜面番号固定かどうかをチェック
|
|
1454
|
+
g_stateObj.dosDivideFlg = setVal(document.querySelector(`#externalDosDivide`)?.value ?? getQueryParamVal(`dosDivide`), false, C_TYP_BOOLEAN);
|
|
1455
|
+
g_stateObj.scoreLockFlg = setVal(document.querySelector(`#externalDosLock`)?.value ?? getQueryParamVal(`dosLock`), false, C_TYP_BOOLEAN);
|
|
1456
|
+
|
|
1457
|
+
for (let j = 1; j < g_headerObj.keyLabels.length; j++) {
|
|
1458
|
+
|
|
1459
|
+
// 譜面ファイルが分割されている場合、譜面詳細情報取得のために譜面をロード
|
|
1460
|
+
if (g_stateObj.dosDivideFlg) {
|
|
1461
|
+
await loadChartFile(j);
|
|
1462
|
+
resetColorAndGauge(j);
|
|
1463
|
+
}
|
|
1464
|
+
getScoreDetailData(j);
|
|
1465
|
+
}
|
|
1462
1466
|
}
|
|
1467
|
+
titleInit();
|
|
1463
1468
|
}
|
|
1464
1469
|
|
|
1465
1470
|
/**
|
|
@@ -1523,30 +1528,21 @@ function loadLocalStorage() {
|
|
|
1523
1528
|
|
|
1524
1529
|
/**
|
|
1525
1530
|
* 譜面読込
|
|
1526
|
-
* @param {function} _afterFunc 実行後の処理
|
|
1527
1531
|
* @param {number} _scoreId 譜面番号
|
|
1528
|
-
* @param {boolean} _cyclicFlg 再読込フラグ(譜面詳細情報取得用、再帰的にloadDosを呼び出す)
|
|
1529
1532
|
*/
|
|
1530
|
-
async function
|
|
1533
|
+
async function loadChartFile(_scoreId = g_stateObj.scoreId) {
|
|
1531
1534
|
|
|
1532
1535
|
const dosInput = document.querySelector(`#dos`);
|
|
1533
|
-
const externalDosInput = document.querySelector(`#externalDos`);
|
|
1534
1536
|
const divRoot = document.querySelector(`#divRoot`);
|
|
1535
|
-
const queryDos = getQueryParamVal(`dos`) !== null ? `dos/${getQueryParamVal('dos')}.txt` :
|
|
1536
|
-
(externalDosInput !== null ? externalDosInput.value : ``);
|
|
1537
|
+
const queryDos = getQueryParamVal(`dos`) !== null ? `dos/${getQueryParamVal('dos')}.txt` : (document.querySelector(`#externalDos`)?.value ?? ``);
|
|
1537
1538
|
|
|
1538
1539
|
if (dosInput === null && queryDos === ``) {
|
|
1539
1540
|
makeWarningWindow(g_msgInfoObj.E_0023);
|
|
1540
1541
|
g_loadObj.main = false;
|
|
1541
|
-
_afterFunc();
|
|
1542
1542
|
return;
|
|
1543
1543
|
}
|
|
1544
1544
|
|
|
1545
1545
|
// 譜面分割あり、譜面番号固定時のみ譜面データを一時クリア
|
|
1546
|
-
const dosDivideInput = document.querySelector(`#externalDosDivide`);
|
|
1547
|
-
const dosLockInput = document.querySelector(`#externalDosLock`);
|
|
1548
|
-
g_stateObj.dosDivideFlg = setVal(dosDivideInput !== null ? dosDivideInput.value : getQueryParamVal(`dosDivide`), false, C_TYP_BOOLEAN);
|
|
1549
|
-
g_stateObj.scoreLockFlg = setVal(dosLockInput !== null ? dosLockInput.value : getQueryParamVal(`dosLock`), false, C_TYP_BOOLEAN);
|
|
1550
1546
|
if (queryDos !== `` && g_stateObj.dosDivideFlg && g_stateObj.scoreLockFlg) {
|
|
1551
1547
|
const scoreList = Object.keys(g_rootObj).filter(data => {
|
|
1552
1548
|
return fuzzyListMatching(data, g_checkStr.resetDosHeader, g_checkStr.resetDosFooter);
|
|
@@ -1555,32 +1551,19 @@ async function loadDos(_afterFunc, _scoreId = g_stateObj.scoreId, _cyclicFlg = f
|
|
|
1555
1551
|
}
|
|
1556
1552
|
|
|
1557
1553
|
// HTML埋め込みdos
|
|
1558
|
-
if (dosInput !== null) {
|
|
1554
|
+
if (dosInput !== null && _scoreId === 0) {
|
|
1559
1555
|
Object.assign(g_rootObj, dosConvert(dosInput.value));
|
|
1560
|
-
if (queryDos === ``) {
|
|
1561
|
-
_afterFunc();
|
|
1562
|
-
if (_cyclicFlg) {
|
|
1563
|
-
reloadDos(_scoreId);
|
|
1564
|
-
}
|
|
1565
|
-
}
|
|
1566
1556
|
}
|
|
1567
1557
|
|
|
1568
1558
|
// 外部dos読み込み
|
|
1569
1559
|
if (queryDos !== ``) {
|
|
1570
|
-
|
|
1571
|
-
const
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
}
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
const filenameCommon = filenameBase.split(`.${filenameExtension}`)[0];
|
|
1578
|
-
const filename = (!g_stateObj.dosDivideFlg ?
|
|
1579
|
-
`${filenameCommon}.${filenameExtension}` :
|
|
1580
|
-
`${filenameCommon}${setScoreIdHeader(_scoreId)}.${filenameExtension}`);
|
|
1581
|
-
|
|
1582
|
-
const randTime = new Date().getTime();
|
|
1583
|
-
await loadScript2(`${filename}?${randTime}`, false, charset);
|
|
1560
|
+
const charset = document.querySelector(`#externalDosCharset`)?.value ?? document.characterSet;
|
|
1561
|
+
const fileBase = queryDos.match(/.+\..*/)[0];
|
|
1562
|
+
const fileExtension = fileBase.split(`.`).pop();
|
|
1563
|
+
const fileCommon = fileBase.split(`.${fileExtension}`)[0];
|
|
1564
|
+
const filename = `${fileCommon}${g_stateObj.dosDivideFlg ? setScoreIdHeader(_scoreId) : ''}.${fileExtension}`;
|
|
1565
|
+
|
|
1566
|
+
await loadScript2(`${filename}?${Date.now()}`, false, charset);
|
|
1584
1567
|
if (typeof externalDosInit === C_TYP_FUNCTION) {
|
|
1585
1568
|
if (document.querySelector(`#lblLoading`) !== null) {
|
|
1586
1569
|
divRoot.removeChild(document.querySelector(`#lblLoading`));
|
|
@@ -1595,37 +1578,23 @@ async function loadDos(_afterFunc, _scoreId = g_stateObj.scoreId, _cyclicFlg = f
|
|
|
1595
1578
|
} else {
|
|
1596
1579
|
makeWarningWindow(g_msgInfoObj.E_0022);
|
|
1597
1580
|
}
|
|
1598
|
-
_afterFunc();
|
|
1599
|
-
if (_cyclicFlg) {
|
|
1600
|
-
if (g_stateObj.dosDivideFlg && _scoreId > 0) {
|
|
1601
|
-
// 初期矢印・フリーズアロー色の再定義
|
|
1602
|
-
if (g_stateObj.scoreLockFlg) {
|
|
1603
|
-
Object.assign(g_rootObj, copySetColor(g_rootObj, _scoreId));
|
|
1604
|
-
}
|
|
1605
|
-
Object.assign(g_headerObj, resetBaseColorList(g_headerObj, g_rootObj, { scoreId: _scoreId }));
|
|
1606
|
-
|
|
1607
|
-
// ライフ設定のカスタム部分再取得(譜面ヘッダー加味)
|
|
1608
|
-
Object.assign(g_gaugeOptionObj, resetCustomGauge(g_rootObj, { scoreId: _scoreId }));
|
|
1609
|
-
Object.keys(g_gaugeOptionObj.customFulls).forEach(gaugePtn => getGaugeSetting(g_rootObj, gaugePtn, g_headerObj.difLabels.length, { scoreId: _scoreId }));
|
|
1610
|
-
}
|
|
1611
|
-
reloadDos(_scoreId);
|
|
1612
|
-
}
|
|
1613
1581
|
}
|
|
1614
1582
|
}
|
|
1615
1583
|
|
|
1616
1584
|
/**
|
|
1617
|
-
*
|
|
1618
|
-
* @param {
|
|
1585
|
+
* 譜面をファイルで分割している場合に初期色やゲージ情報を追加取得
|
|
1586
|
+
* @param {string} _scoreId
|
|
1619
1587
|
*/
|
|
1620
|
-
function
|
|
1621
|
-
|
|
1622
|
-
if (
|
|
1623
|
-
|
|
1624
|
-
getScoreDetailData(_scoreId);
|
|
1625
|
-
}, _scoreId, true);
|
|
1626
|
-
} else {
|
|
1627
|
-
titleInit();
|
|
1588
|
+
function resetColorAndGauge(_scoreId) {
|
|
1589
|
+
// 初期矢印・フリーズアロー色の再定義
|
|
1590
|
+
if (g_stateObj.scoreLockFlg) {
|
|
1591
|
+
Object.assign(g_rootObj, copySetColor(g_rootObj, _scoreId));
|
|
1628
1592
|
}
|
|
1593
|
+
Object.assign(g_headerObj, resetBaseColorList(g_headerObj, g_rootObj, { scoreId: _scoreId }));
|
|
1594
|
+
|
|
1595
|
+
// ライフ設定のカスタム部分再取得(譜面ヘッダー加味)
|
|
1596
|
+
Object.assign(g_gaugeOptionObj, resetCustomGauge(g_rootObj, { scoreId: _scoreId }));
|
|
1597
|
+
Object.keys(g_gaugeOptionObj.customFulls).forEach(gaugePtn => getGaugeSetting(g_rootObj, gaugePtn, g_headerObj.difLabels.length, { scoreId: _scoreId }));
|
|
1629
1598
|
}
|
|
1630
1599
|
|
|
1631
1600
|
/**
|
|
@@ -1961,7 +1930,7 @@ function loadMultipleFiles(_j, _fileData, _loadType, _afterFunc = _ => true) {
|
|
|
1961
1930
|
*/
|
|
1962
1931
|
async function loadMultipleFiles2(_fileData, _loadType) {
|
|
1963
1932
|
await Promise.all(_fileData.map(async filePart => {
|
|
1964
|
-
const filePath = `${filePart[1]}${filePart[0]}?${
|
|
1933
|
+
const filePath = `${filePart[1]}${filePart[0]}?${g_randTime}`;
|
|
1965
1934
|
if (filePart[0].endsWith(`.css`)) {
|
|
1966
1935
|
_loadType = `css`;
|
|
1967
1936
|
}
|
|
@@ -2103,7 +2072,7 @@ function makePlayButton(_func) {
|
|
|
2103
2072
|
* iOSの場合はAudioタグによる再生
|
|
2104
2073
|
* @param {string} _url
|
|
2105
2074
|
*/
|
|
2106
|
-
function setAudio(_url) {
|
|
2075
|
+
async function setAudio(_url) {
|
|
2107
2076
|
|
|
2108
2077
|
const loadMp3 = _ => {
|
|
2109
2078
|
if (g_isFile) {
|
|
@@ -2131,16 +2100,14 @@ function setAudio(_url) {
|
|
|
2131
2100
|
};
|
|
2132
2101
|
|
|
2133
2102
|
if (g_musicEncodedFlg) {
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
});
|
|
2143
|
-
|
|
2103
|
+
await loadScript2(_url);
|
|
2104
|
+
if (typeof musicInit === C_TYP_FUNCTION) {
|
|
2105
|
+
musicInit();
|
|
2106
|
+
readyToStart(_ => initWebAudioAPIfromBase64(g_musicdata));
|
|
2107
|
+
} else {
|
|
2108
|
+
makeWarningWindow(g_msgInfoObj.E_0031);
|
|
2109
|
+
musicAfterLoaded();
|
|
2110
|
+
}
|
|
2144
2111
|
} else {
|
|
2145
2112
|
readyToStart(_ => loadMp3());
|
|
2146
2113
|
}
|
|
@@ -3245,11 +3212,7 @@ function headerConvert(_dosObj) {
|
|
|
3245
3212
|
}
|
|
3246
3213
|
|
|
3247
3214
|
// タイミング調整
|
|
3248
|
-
|
|
3249
|
-
obj.adjustment = _dosObj.adjustment.split(`$`);
|
|
3250
|
-
} else {
|
|
3251
|
-
obj.adjustment = [0];
|
|
3252
|
-
}
|
|
3215
|
+
obj.adjustment = (hasVal(_dosObj.adjustment) ? _dosObj.adjustment.split(`$`) : [0]);
|
|
3253
3216
|
|
|
3254
3217
|
// 再生速度
|
|
3255
3218
|
obj.playbackRate = setVal(_dosObj.playbackRate, 1, C_TYP_FLOAT);
|
|
@@ -3590,7 +3553,7 @@ function resetBaseColorList(_baseObj, _dosObj, { scoreId = `` } = {}) {
|
|
|
3590
3553
|
for (let j = 0; j < _baseObj.setColorInit.length; j++) {
|
|
3591
3554
|
|
|
3592
3555
|
// デフォルト配列の作成(1番目の要素をベースに、フリーズアロー初期セット or 矢印色からデータを補完)
|
|
3593
|
-
|
|
3556
|
+
const currentFrzColors = [];
|
|
3594
3557
|
const baseLength = firstFrzColors.length === 0 || _baseObj.defaultFrzColorUse ?
|
|
3595
3558
|
_baseObj[_frzInit].length : firstFrzColors.length;
|
|
3596
3559
|
for (let k = 0; k < baseLength; k++) {
|
|
@@ -6337,164 +6300,164 @@ function changeSetColor() {
|
|
|
6337
6300
|
/**
|
|
6338
6301
|
* 読込画面初期化
|
|
6339
6302
|
*/
|
|
6340
|
-
function loadingScoreInit() {
|
|
6303
|
+
async function loadingScoreInit() {
|
|
6304
|
+
|
|
6341
6305
|
// 譜面データの読み込み
|
|
6342
|
-
|
|
6343
|
-
|
|
6344
|
-
|
|
6345
|
-
|
|
6306
|
+
await loadChartFile();
|
|
6307
|
+
const tkObj = getKeyInfo();
|
|
6308
|
+
const [keyCtrlPtn, keyNum] = [tkObj.keyCtrlPtn, tkObj.keyNum];
|
|
6309
|
+
g_headerObj.blankFrame = g_headerObj.blankFrameDef;
|
|
6346
6310
|
|
|
6347
|
-
|
|
6348
|
-
|
|
6349
|
-
|
|
6311
|
+
// ユーザカスタムイベント
|
|
6312
|
+
g_customJsObj.preloading.forEach(func => func());
|
|
6313
|
+
g_skinJsObj.preloading.forEach(func => func());
|
|
6350
6314
|
|
|
6351
|
-
|
|
6352
|
-
|
|
6353
|
-
|
|
6354
|
-
|
|
6355
|
-
|
|
6356
|
-
|
|
6357
|
-
}
|
|
6315
|
+
let dummyIdHeader = ``;
|
|
6316
|
+
if (g_stateObj.dummyId !== ``) {
|
|
6317
|
+
if (g_stateObj.dummyId === 0 || g_stateObj.dummyId === 1) {
|
|
6318
|
+
dummyIdHeader = ``;
|
|
6319
|
+
} else {
|
|
6320
|
+
dummyIdHeader = g_stateObj.dummyId;
|
|
6358
6321
|
}
|
|
6359
|
-
|
|
6360
|
-
|
|
6361
|
-
// 最終フレーム数の取得
|
|
6362
|
-
let lastFrame = getLastFrame(g_scoreObj) + g_headerObj.blankFrame;
|
|
6363
|
-
|
|
6364
|
-
// 最初の矢印データがあるフレーム数を取得
|
|
6365
|
-
let firstArrowFrame = getFirstArrowFrame(g_scoreObj);
|
|
6322
|
+
}
|
|
6323
|
+
g_scoreObj = scoreConvert(g_rootObj, g_stateObj.scoreId, 0, dummyIdHeader);
|
|
6366
6324
|
|
|
6367
|
-
|
|
6368
|
-
|
|
6369
|
-
g_scoreObj.baseFrame = g_scoreObj.frameNum - g_stateObj.intAdjustment;
|
|
6325
|
+
// 最終フレーム数の取得
|
|
6326
|
+
let lastFrame = getLastFrame(g_scoreObj) + g_headerObj.blankFrame;
|
|
6370
6327
|
|
|
6371
|
-
|
|
6372
|
-
|
|
6328
|
+
// 最初の矢印データがあるフレーム数を取得
|
|
6329
|
+
let firstArrowFrame = getFirstArrowFrame(g_scoreObj);
|
|
6373
6330
|
|
|
6374
|
-
|
|
6375
|
-
|
|
6376
|
-
|
|
6331
|
+
// 開始フレーム数の取得(フェードイン加味)
|
|
6332
|
+
g_scoreObj.frameNum = getStartFrame(lastFrame, g_stateObj.fadein);
|
|
6333
|
+
g_scoreObj.baseFrame = g_scoreObj.frameNum - g_stateObj.intAdjustment;
|
|
6377
6334
|
|
|
6378
|
-
|
|
6379
|
-
|
|
6380
|
-
let arrivalFrame = getFirstArrivalFrame(firstFrame, speedOnFrame, motionOnFrame);
|
|
6335
|
+
// フレームごとの速度を取得(配列形式)
|
|
6336
|
+
let speedOnFrame = setSpeedOnFrame(g_scoreObj.speedData, lastFrame);
|
|
6381
6337
|
|
|
6382
|
-
|
|
6383
|
-
|
|
6338
|
+
// Motionオプション適用時の矢印別の速度を取得(配列形式)
|
|
6339
|
+
const motionOnFrame = setMotionOnFrame();
|
|
6340
|
+
g_workObj.motionOnFrames = copyArray2d(motionOnFrame);
|
|
6384
6341
|
|
|
6385
|
-
|
|
6386
|
-
|
|
6387
|
-
|
|
6342
|
+
// 最初のフレームで出現する矢印が、ステップゾーンに到達するまでのフレーム数を取得
|
|
6343
|
+
const firstFrame = (g_scoreObj.frameNum === 0 ? 0 : g_scoreObj.frameNum + g_headerObj.blankFrame);
|
|
6344
|
+
let arrivalFrame = getFirstArrivalFrame(firstFrame, speedOnFrame, motionOnFrame);
|
|
6388
6345
|
|
|
6389
|
-
|
|
6390
|
-
|
|
6391
|
-
if (g_scoreObj.frameNum === 0) {
|
|
6392
|
-
if (firstArrowFrame - C_MAX_ADJUSTMENT < arrivalFrame) {
|
|
6393
|
-
preblankFrame = arrivalFrame - firstArrowFrame + C_MAX_ADJUSTMENT;
|
|
6346
|
+
// キーパターン(デフォルト)に対応する矢印番号を格納
|
|
6347
|
+
convertreplaceNums();
|
|
6394
6348
|
|
|
6395
|
-
|
|
6396
|
-
|
|
6397
|
-
|
|
6398
|
-
frz: true,
|
|
6399
|
-
dummyArrow: g_stateObj.shuffle === C_FLG_OFF,
|
|
6400
|
-
dummyFrz: g_stateObj.shuffle === C_FLG_OFF,
|
|
6401
|
-
};
|
|
6402
|
-
const tmpObj = scoreConvert(g_rootObj, g_stateObj.scoreId, preblankFrame, dummyIdHeader);
|
|
6403
|
-
for (let j = 0; j < keyNum; j++) {
|
|
6404
|
-
Object.keys(noteExistObj).forEach(name => {
|
|
6405
|
-
if (tmpObj[`${name}Data`][j] !== undefined && noteExistObj[name]) {
|
|
6406
|
-
g_scoreObj[`${name}Data`][j] = copyArray2d(tmpObj[`${name}Data`][j]);
|
|
6407
|
-
}
|
|
6408
|
-
});
|
|
6409
|
-
}
|
|
6349
|
+
const setData = (_data, _minLength = 1) => {
|
|
6350
|
+
return (hasArrayList(_data, _minLength) ? _data.concat() : []);
|
|
6351
|
+
}
|
|
6410
6352
|
|
|
6411
|
-
|
|
6412
|
-
|
|
6353
|
+
// フレーム・曲開始位置調整
|
|
6354
|
+
let preblankFrame = 0;
|
|
6355
|
+
if (g_scoreObj.frameNum === 0) {
|
|
6356
|
+
if (firstArrowFrame - C_MAX_ADJUSTMENT < arrivalFrame) {
|
|
6357
|
+
preblankFrame = arrivalFrame - firstArrowFrame + C_MAX_ADJUSTMENT;
|
|
6358
|
+
|
|
6359
|
+
// 譜面データの再読み込み
|
|
6360
|
+
const noteExistObj = {
|
|
6361
|
+
arrow: true,
|
|
6362
|
+
frz: true,
|
|
6363
|
+
dummyArrow: g_stateObj.shuffle === C_FLG_OFF,
|
|
6364
|
+
dummyFrz: g_stateObj.shuffle === C_FLG_OFF,
|
|
6365
|
+
};
|
|
6366
|
+
const tmpObj = scoreConvert(g_rootObj, g_stateObj.scoreId, preblankFrame, dummyIdHeader);
|
|
6367
|
+
for (let j = 0; j < keyNum; j++) {
|
|
6368
|
+
Object.keys(noteExistObj).forEach(name => {
|
|
6369
|
+
if (tmpObj[`${name}Data`][j] !== undefined && noteExistObj[name]) {
|
|
6370
|
+
g_scoreObj[`${name}Data`][j] = copyArray2d(tmpObj[`${name}Data`][j]);
|
|
6371
|
+
}
|
|
6413
6372
|
});
|
|
6414
|
-
|
|
6415
|
-
lastFrame += preblankFrame;
|
|
6416
|
-
firstArrowFrame += preblankFrame;
|
|
6417
|
-
speedOnFrame = setSpeedOnFrame(g_scoreObj.speedData, lastFrame);
|
|
6418
|
-
arrivalFrame = getFirstArrivalFrame(firstFrame, speedOnFrame, motionOnFrame);
|
|
6419
|
-
g_headerObj.blankFrame += preblankFrame;
|
|
6420
6373
|
}
|
|
6421
|
-
}
|
|
6422
6374
|
|
|
6423
|
-
|
|
6424
|
-
|
|
6425
|
-
|
|
6375
|
+
Object.keys(g_dataMinObj).forEach(dataType => {
|
|
6376
|
+
g_scoreObj[`${dataType}Data`] = setData(tmpObj[`${dataType}Data`], g_dataMinObj[dataType]);
|
|
6377
|
+
});
|
|
6378
|
+
|
|
6379
|
+
lastFrame += preblankFrame;
|
|
6380
|
+
firstArrowFrame += preblankFrame;
|
|
6381
|
+
speedOnFrame = setSpeedOnFrame(g_scoreObj.speedData, lastFrame);
|
|
6382
|
+
arrivalFrame = getFirstArrivalFrame(firstFrame, speedOnFrame, motionOnFrame);
|
|
6383
|
+
g_headerObj.blankFrame += preblankFrame;
|
|
6426
6384
|
}
|
|
6385
|
+
}
|
|
6427
6386
|
|
|
6428
|
-
|
|
6429
|
-
|
|
6430
|
-
|
|
6431
|
-
|
|
6432
|
-
if (shuffleGroupMap[_val] === undefined) {
|
|
6433
|
-
shuffleGroupMap[_val] = [];
|
|
6434
|
-
};
|
|
6435
|
-
shuffleGroupMap[_val].push(_i);
|
|
6436
|
-
});
|
|
6387
|
+
// シャッフルグループ未定義の場合
|
|
6388
|
+
if (g_keyObj[`shuffle${keyCtrlPtn}`] === undefined) {
|
|
6389
|
+
g_keyObj[`shuffle${keyCtrlPtn}`] = [...Array(keyNum)].fill(0);
|
|
6390
|
+
}
|
|
6437
6391
|
|
|
6438
|
-
|
|
6439
|
-
|
|
6392
|
+
// シャッフルグループを扱いやすくする
|
|
6393
|
+
// [0, 0, 0, 1, 0, 0, 0] -> [[0, 1, 2, 4, 5, 6], [3]]
|
|
6394
|
+
const shuffleGroupMap = {};
|
|
6395
|
+
g_keyObj[`shuffle${keyCtrlPtn}`].forEach((_val, _i) => {
|
|
6396
|
+
if (shuffleGroupMap[_val] === undefined) {
|
|
6397
|
+
shuffleGroupMap[_val] = [];
|
|
6398
|
+
};
|
|
6399
|
+
shuffleGroupMap[_val].push(_i);
|
|
6400
|
+
});
|
|
6440
6401
|
|
|
6441
|
-
|
|
6442
|
-
|
|
6443
|
-
|
|
6444
|
-
|
|
6445
|
-
|
|
6446
|
-
|
|
6447
|
-
|
|
6448
|
-
|
|
6449
|
-
|
|
6450
|
-
|
|
6451
|
-
|
|
6452
|
-
|
|
6453
|
-
|
|
6454
|
-
|
|
6402
|
+
// Mirror,Random,S-Randomの適用
|
|
6403
|
+
g_shuffleFunc[g_stateObj.shuffle](keyNum, Object.values(shuffleGroupMap));
|
|
6404
|
+
|
|
6405
|
+
// アシスト用の配列があれば、ダミーデータで上書き
|
|
6406
|
+
if (typeof g_keyObj[`assistPos${keyCtrlPtn}`] === C_TYP_OBJECT &&
|
|
6407
|
+
!g_autoPlaysBase.includes(g_stateObj.autoPlay)) {
|
|
6408
|
+
const assistArray = g_keyObj[`assistPos${keyCtrlPtn}`][g_stateObj.autoPlay];
|
|
6409
|
+
for (let j = 0; j < keyNum; j++) {
|
|
6410
|
+
if (assistArray[j] === 1) {
|
|
6411
|
+
g_scoreObj.dummyArrowData[j] = g_scoreObj.arrowData[j].concat();
|
|
6412
|
+
g_scoreObj.arrowData[j] = [];
|
|
6413
|
+
g_scoreObj.dummyFrzData[j] = g_scoreObj.frzData[j].concat();
|
|
6414
|
+
g_scoreObj.frzData[j] = [];
|
|
6415
|
+
} else {
|
|
6416
|
+
g_scoreObj.dummyArrowData[j] = [];
|
|
6417
|
+
g_scoreObj.dummyFrzData[j] = [];
|
|
6455
6418
|
}
|
|
6456
6419
|
}
|
|
6420
|
+
}
|
|
6457
6421
|
|
|
6458
|
-
|
|
6459
|
-
|
|
6460
|
-
|
|
6461
|
-
|
|
6462
|
-
|
|
6422
|
+
// 矢印・フリーズアロー数をカウント
|
|
6423
|
+
g_allArrow = 0;
|
|
6424
|
+
g_allFrz = 0;
|
|
6425
|
+
g_scoreObj.arrowData.forEach(data => g_allArrow += data.length);
|
|
6426
|
+
g_scoreObj.frzData.forEach(data => g_allFrz += data.length);
|
|
6463
6427
|
|
|
6464
|
-
|
|
6465
|
-
|
|
6466
|
-
|
|
6467
|
-
|
|
6468
|
-
|
|
6469
|
-
|
|
6428
|
+
// ライフ回復・ダメージ量の計算
|
|
6429
|
+
// フリーズ始点でも通常判定させる場合は総矢印数を水増しする
|
|
6430
|
+
if (g_headerObj.frzStartjdgUse) {
|
|
6431
|
+
g_allArrow += g_allFrz / 2;
|
|
6432
|
+
}
|
|
6433
|
+
g_fullArrows = g_allArrow + g_allFrz / 2;
|
|
6470
6434
|
|
|
6471
|
-
|
|
6435
|
+
calcLifeVals(g_fullArrows);
|
|
6472
6436
|
|
|
6473
|
-
|
|
6474
|
-
|
|
6437
|
+
// 矢印・フリーズアロー・速度/色変化格納処理
|
|
6438
|
+
pushArrows(g_scoreObj, speedOnFrame, motionOnFrame, arrivalFrame);
|
|
6475
6439
|
|
|
6476
|
-
|
|
6477
|
-
|
|
6440
|
+
// メインに入る前の最終初期化処理
|
|
6441
|
+
getArrowSettings();
|
|
6478
6442
|
|
|
6479
|
-
|
|
6480
|
-
|
|
6443
|
+
// ユーザカスタムイベント
|
|
6444
|
+
g_customJsObj.loading.forEach(func => func());
|
|
6481
6445
|
|
|
6482
|
-
|
|
6483
|
-
|
|
6484
|
-
|
|
6485
|
-
|
|
6486
|
-
|
|
6487
|
-
|
|
6488
|
-
|
|
6489
|
-
|
|
6490
|
-
executeMain();
|
|
6491
|
-
}
|
|
6492
|
-
} else {
|
|
6446
|
+
const tempId = setInterval(() => {
|
|
6447
|
+
const executeMain = _ => {
|
|
6448
|
+
clearInterval(tempId);
|
|
6449
|
+
MainInit();
|
|
6450
|
+
}
|
|
6451
|
+
if (g_audio.duration !== undefined) {
|
|
6452
|
+
if (g_userAgent.indexOf(`firefox`) !== -1) {
|
|
6453
|
+
if (g_preloadFiles.image.every(v => g_loadObj[v] === true)) {
|
|
6493
6454
|
executeMain();
|
|
6494
6455
|
}
|
|
6456
|
+
} else {
|
|
6457
|
+
executeMain();
|
|
6495
6458
|
}
|
|
6496
|
-
}
|
|
6497
|
-
});
|
|
6459
|
+
}
|
|
6460
|
+
}, 100);
|
|
6498
6461
|
}
|
|
6499
6462
|
|
|
6500
6463
|
function setScoreIdHeader(_scoreId = 0, _scoreLockFlg = false) {
|