danoniplus 30.1.2 → 30.2.1
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 +146 -34
- package/js/lib/danoni_constants.js +2 -2
- 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/02/
|
|
7
|
+
* Revised : 2023/02/18
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 30.1
|
|
12
|
-
const g_revisedDate = `2023/02/
|
|
11
|
+
const g_version = `Ver 30.2.1`;
|
|
12
|
+
const g_revisedDate = `2023/02/18`;
|
|
13
13
|
const g_alphaVersion = ``;
|
|
14
14
|
|
|
15
15
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
@@ -7134,6 +7134,31 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
|
|
|
7134
7134
|
return [];
|
|
7135
7135
|
};
|
|
7136
7136
|
|
|
7137
|
+
/**
|
|
7138
|
+
* スクロール変化データの分解
|
|
7139
|
+
* @param {number} _scoreNo
|
|
7140
|
+
*/
|
|
7141
|
+
const setScrollchData = (_scoreNo) => {
|
|
7142
|
+
const dosScrollchData = _dosObj[`scrollch${_scoreNo}_data`] || _dosObj.scrollch_data;
|
|
7143
|
+
const scrollchData = [];
|
|
7144
|
+
|
|
7145
|
+
if (hasVal(dosScrollchData)) {
|
|
7146
|
+
splitLF(dosScrollchData).filter(data => hasVal(data)).forEach(tmpData => {
|
|
7147
|
+
const tmpScrollchData = tmpData.split(`,`);
|
|
7148
|
+
if (isNaN(parseInt(tmpScrollchData[0]))) {
|
|
7149
|
+
return;
|
|
7150
|
+
}
|
|
7151
|
+
const frame = calcFrame(tmpScrollchData[0]);
|
|
7152
|
+
const arrowNum = parseFloat(tmpScrollchData[1]);
|
|
7153
|
+
const scrollDir = parseFloat(tmpScrollchData[2] ?? `1`);
|
|
7154
|
+
|
|
7155
|
+
scrollchData.push([frame, arrowNum, frame, scrollDir]);
|
|
7156
|
+
});
|
|
7157
|
+
return scrollchData.sort((_a, _b) => _a[0] - _b[0]).flat();
|
|
7158
|
+
}
|
|
7159
|
+
return [];
|
|
7160
|
+
};
|
|
7161
|
+
|
|
7137
7162
|
/**
|
|
7138
7163
|
* 譜面データの優先順配列の取得
|
|
7139
7164
|
* @param {string} _header
|
|
@@ -7155,24 +7180,23 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
|
|
|
7155
7180
|
const getPriorityHeader = _ => {
|
|
7156
7181
|
const list = [];
|
|
7157
7182
|
const anotherKeyFlg = hasVal(g_keyObj[`transKey${_keyCtrlPtn}`]);
|
|
7158
|
-
const addPriorityList = (_type = ``) => {
|
|
7159
|
-
if (anotherKeyFlg) {
|
|
7160
|
-
list.push(`${_type}A`);
|
|
7161
|
-
}
|
|
7162
|
-
list.push(_type);
|
|
7163
|
-
};
|
|
7164
7183
|
let type = ``;
|
|
7165
7184
|
if (g_stateObj.scroll !== `---`) {
|
|
7166
7185
|
type = `Alt`;
|
|
7167
7186
|
} else if (g_stateObj.reverse === C_FLG_ON) {
|
|
7168
7187
|
type = `Rev`;
|
|
7169
7188
|
}
|
|
7170
|
-
|
|
7171
|
-
|
|
7189
|
+
|
|
7190
|
+
if (anotherKeyFlg) {
|
|
7191
|
+
list.push(`${g_stateObj.scroll}A`);
|
|
7192
|
+
list.push(`${type}A`);
|
|
7193
|
+
list.push(`A`);
|
|
7172
7194
|
}
|
|
7173
|
-
|
|
7195
|
+
list.push(g_stateObj.scroll);
|
|
7196
|
+
list.push(type);
|
|
7197
|
+
list.push(``);
|
|
7174
7198
|
|
|
7175
|
-
return list;
|
|
7199
|
+
return makeDedupliArray(list);
|
|
7176
7200
|
};
|
|
7177
7201
|
|
|
7178
7202
|
/**
|
|
@@ -7327,6 +7351,9 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
|
|
|
7327
7351
|
obj.dummyFrzCssMotionData = setCssMotionData(`frz`, _dummyNo);
|
|
7328
7352
|
}
|
|
7329
7353
|
|
|
7354
|
+
// スクロール変化データの分解
|
|
7355
|
+
obj.scrollchData = setScrollchData(scoreIdHeader);
|
|
7356
|
+
|
|
7330
7357
|
// 歌詞データの分解 (3つで1セット, セット毎の改行区切り可)
|
|
7331
7358
|
obj.wordData = [];
|
|
7332
7359
|
obj.wordMaxDepth = -1;
|
|
@@ -7368,7 +7395,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
|
|
|
7368
7395
|
// キー変化定義
|
|
7369
7396
|
obj.keychFrames = [];
|
|
7370
7397
|
if (hasVal(_dosObj[`keych${setScoreIdHeader(g_stateObj.scoreId, g_stateObj.scoreLockFlg)}_data`])) {
|
|
7371
|
-
const keychdata = _dosObj[`keych${setScoreIdHeader(g_stateObj.scoreId, g_stateObj.scoreLockFlg)}_data`]
|
|
7398
|
+
const keychdata = splitLF2(_dosObj[`keych${setScoreIdHeader(g_stateObj.scoreId, g_stateObj.scoreLockFlg)}_data`], `,`);
|
|
7372
7399
|
obj.keychFrames = keychdata.filter((val, j) => j % 2 === 0);
|
|
7373
7400
|
obj.keychTarget = keychdata.filter((val, j) => j % 2 === 1);
|
|
7374
7401
|
} else {
|
|
@@ -7688,29 +7715,31 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
|
|
|
7688
7715
|
}
|
|
7689
7716
|
|
|
7690
7717
|
// 個別加速のタイミング更新
|
|
7691
|
-
|
|
7692
|
-
|
|
7693
|
-
|
|
7694
|
-
|
|
7695
|
-
|
|
7696
|
-
|
|
7697
|
-
|
|
7698
|
-
|
|
7699
|
-
|
|
7700
|
-
|
|
7701
|
-
|
|
7702
|
-
|
|
7703
|
-
_dataObj.boostData[k] = tmpObj.frm;
|
|
7718
|
+
const getTimingData = _data => {
|
|
7719
|
+
if (hasArrayList(_data, 2)) {
|
|
7720
|
+
let delIdx = 0;
|
|
7721
|
+
for (let k = _data.length - 2; k >= 0; k -= 2) {
|
|
7722
|
+
const tmpObj = getArrowStartFrame(_data[k], _speedOnFrame, _motionOnFrame);
|
|
7723
|
+
if (tmpObj.frm < g_scoreObj.frameNum) {
|
|
7724
|
+
_data[k] = g_scoreObj.frameNum;
|
|
7725
|
+
delIdx = k;
|
|
7726
|
+
break;
|
|
7727
|
+
} else {
|
|
7728
|
+
_data[k] = tmpObj.frm;
|
|
7729
|
+
}
|
|
7704
7730
|
}
|
|
7731
|
+
for (let k = 0; k < delIdx; k++) {
|
|
7732
|
+
_data.shift();
|
|
7733
|
+
}
|
|
7734
|
+
return copyArray2d(_data);
|
|
7705
7735
|
}
|
|
7706
|
-
|
|
7707
|
-
|
|
7708
|
-
|
|
7709
|
-
g_workObj.boostData = copyArray2d(_dataObj.boostData);
|
|
7710
|
-
}
|
|
7736
|
+
return [];
|
|
7737
|
+
};
|
|
7738
|
+
g_workObj.boostData = getTimingData(_dataObj.boostData);
|
|
7711
7739
|
|
|
7712
7740
|
/**
|
|
7713
|
-
*
|
|
7741
|
+
* 色変化・モーションデータ・スクロール反転データのタイミング更新
|
|
7742
|
+
* - この関数を使用する場合、配列グループの先頭2つが「フレーム数、矢印番号」となっていないと動作しない
|
|
7714
7743
|
* @param {string} _type
|
|
7715
7744
|
* @param {string} _header
|
|
7716
7745
|
* @param {function} _setFunc
|
|
@@ -7731,6 +7760,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
|
|
|
7731
7760
|
const calcFrameFlg = (_colorFlg && !isFrzHitColor(baseData[k + 1]) && !baseData[k + 3]) || _calcFrameFlg;
|
|
7732
7761
|
|
|
7733
7762
|
if (baseData[k] < g_scoreObj.frameNum) {
|
|
7763
|
+
// フェードイン直前にある色変化・モーションデータ・スクロール反転データを取得して格納
|
|
7734
7764
|
if (!hasValInArray(baseData[k + 1], frontData)) {
|
|
7735
7765
|
frontData.unshift(baseData.slice(k + 1, k + _term));
|
|
7736
7766
|
}
|
|
@@ -7816,13 +7846,15 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
|
|
|
7816
7846
|
return _data;
|
|
7817
7847
|
};
|
|
7818
7848
|
|
|
7819
|
-
//
|
|
7849
|
+
// 個別・全体色変化、モーションデータ・スクロール反転データのタイミング更新
|
|
7820
7850
|
[``, `dummy`].forEach(type =>
|
|
7821
7851
|
calcDataTiming(`color`, type, pushColors, { _colorFlg: true }));
|
|
7822
7852
|
|
|
7823
7853
|
g_typeLists.arrow.forEach(header =>
|
|
7824
7854
|
calcDataTiming(`cssMotion`, header, pushCssMotions, { _calcFrameFlg: true }));
|
|
7825
7855
|
|
|
7856
|
+
calcDataTiming(`scrollch`, ``, pushScrollchs, { _calcFrameFlg: true });
|
|
7857
|
+
|
|
7826
7858
|
g_fadeinStockList.forEach(type =>
|
|
7827
7859
|
_dataObj[`${type}Data`] = calcAnimationData(type, _dataObj[`${type}Data`]));
|
|
7828
7860
|
|
|
@@ -8056,6 +8088,48 @@ const pushCssMotions = (_header, _frame, _val, _styleName, _styleNameRev) => {
|
|
|
8056
8088
|
}
|
|
8057
8089
|
};
|
|
8058
8090
|
|
|
8091
|
+
/**
|
|
8092
|
+
* スクロール変化情報の格納
|
|
8093
|
+
* @param {string} _header
|
|
8094
|
+
* @param {number} _frameArrow
|
|
8095
|
+
* @param {number} _frameStep
|
|
8096
|
+
* @param {number} _val
|
|
8097
|
+
* @param {number} _scrollDir
|
|
8098
|
+
*/
|
|
8099
|
+
const pushScrollchs = (_header, _frameArrow, _val, _frameStep, _scrollDir) => {
|
|
8100
|
+
const tkObj = getKeyInfo();
|
|
8101
|
+
|
|
8102
|
+
const frameArrow = Math.max(_frameArrow, g_scoreObj.frameNum);
|
|
8103
|
+
const frameStep = Math.max(_frameStep, g_scoreObj.frameNum);
|
|
8104
|
+
|
|
8105
|
+
if (g_workObj.mkScrollchArrow[frameArrow] === undefined) {
|
|
8106
|
+
g_workObj.mkScrollchArrow[frameArrow] = [];
|
|
8107
|
+
g_workObj.mkScrollchArrowDir[frameArrow] = [];
|
|
8108
|
+
}
|
|
8109
|
+
if (g_workObj.mkScrollchStep[frameStep] === undefined) {
|
|
8110
|
+
g_workObj.mkScrollchStep[frameStep] = [];
|
|
8111
|
+
g_workObj.mkScrollchStepDir[frameStep] = [];
|
|
8112
|
+
}
|
|
8113
|
+
if (_val < 20 || _val >= 1000) {
|
|
8114
|
+
const realVal = g_workObj.replaceNums[_val % 1000];
|
|
8115
|
+
g_workObj.mkScrollchArrow[frameArrow].push(realVal);
|
|
8116
|
+
g_workObj.mkScrollchArrowDir[frameArrow].push(_scrollDir);
|
|
8117
|
+
g_workObj.mkScrollchStep[frameStep].push(realVal);
|
|
8118
|
+
g_workObj.mkScrollchStepDir[frameStep].push(_scrollDir);
|
|
8119
|
+
|
|
8120
|
+
} else {
|
|
8121
|
+
const colorNum = _val - 20;
|
|
8122
|
+
for (let j = 0; j < tkObj.keyNum; j++) {
|
|
8123
|
+
if (g_keyObj[`color${tkObj.keyCtrlPtn}`][j] === colorNum) {
|
|
8124
|
+
g_workObj.mkScrollchArrow[frameArrow].push(j);
|
|
8125
|
+
g_workObj.mkScrollchArrowDir[frameArrow].push(_scrollDir);
|
|
8126
|
+
g_workObj.mkScrollchStep[frameStep].push(j);
|
|
8127
|
+
g_workObj.mkScrollchStepDir[frameStep].push(_scrollDir);
|
|
8128
|
+
}
|
|
8129
|
+
}
|
|
8130
|
+
}
|
|
8131
|
+
};
|
|
8132
|
+
|
|
8059
8133
|
/**
|
|
8060
8134
|
* メイン画面前の初期化処理
|
|
8061
8135
|
*/
|
|
@@ -8071,6 +8145,7 @@ const getArrowSettings = _ => {
|
|
|
8071
8145
|
|
|
8072
8146
|
g_workObj.stepX = [];
|
|
8073
8147
|
g_workObj.scrollDir = [];
|
|
8148
|
+
g_workObj.scrollDirDefault = [];
|
|
8074
8149
|
g_workObj.dividePos = [];
|
|
8075
8150
|
g_workObj.stepRtn = copyArray2d(g_keyObj[`stepRtn${keyCtrlPtn}`]);
|
|
8076
8151
|
g_workObj.stepHitRtn = copyArray2d(g_keyObj[`stepRtn${keyCtrlPtn}`]);
|
|
@@ -8142,6 +8217,7 @@ const getArrowSettings = _ => {
|
|
|
8142
8217
|
});
|
|
8143
8218
|
});
|
|
8144
8219
|
}
|
|
8220
|
+
g_workObj.scrollDirDefault = g_workObj.scrollDir.concat();
|
|
8145
8221
|
|
|
8146
8222
|
Object.keys(g_resultObj).forEach(judgeCnt => g_resultObj[judgeCnt] = 0);
|
|
8147
8223
|
g_resultObj.spState = ``;
|
|
@@ -9333,6 +9409,10 @@ const mainInit = _ => {
|
|
|
9333
9409
|
keychCnts++;
|
|
9334
9410
|
}
|
|
9335
9411
|
|
|
9412
|
+
// スクロール変化
|
|
9413
|
+
changeScrollArrowDirs(currentFrame);
|
|
9414
|
+
changeStepY(currentFrame);
|
|
9415
|
+
|
|
9336
9416
|
// ダミー矢印生成(背面に表示するため先に処理)
|
|
9337
9417
|
if (g_workObj.mkDummyArrow[currentFrame] !== undefined) {
|
|
9338
9418
|
g_workObj.mkDummyArrow[currentFrame].forEach(data =>
|
|
@@ -9626,6 +9706,38 @@ const changeCssMotions = (_header, _name, _frameNum) => {
|
|
|
9626
9706
|
}
|
|
9627
9707
|
};
|
|
9628
9708
|
|
|
9709
|
+
/**
|
|
9710
|
+
* スクロール方向の変更(矢印・フリーズアロー)
|
|
9711
|
+
* @param {number} _frameNum
|
|
9712
|
+
*/
|
|
9713
|
+
const changeScrollArrowDirs = (_frameNum) => {
|
|
9714
|
+
const frameData = g_workObj.mkScrollchArrow[_frameNum];
|
|
9715
|
+
if (frameData !== undefined) {
|
|
9716
|
+
for (let j = 0; j < frameData.length; j++) {
|
|
9717
|
+
const targetj = frameData[j];
|
|
9718
|
+
g_workObj.scrollDir[targetj] = g_workObj.scrollDirDefault[targetj] * g_workObj.mkScrollchArrowDir[_frameNum][j];
|
|
9719
|
+
g_workObj.dividePos[targetj] = (g_workObj.scrollDir[targetj] === 1 ? 0 : 1);
|
|
9720
|
+
}
|
|
9721
|
+
}
|
|
9722
|
+
};
|
|
9723
|
+
|
|
9724
|
+
/**
|
|
9725
|
+
* ステップゾーンの位置反転
|
|
9726
|
+
* @param {number} _frameNum
|
|
9727
|
+
*/
|
|
9728
|
+
const changeStepY = (_frameNum) => {
|
|
9729
|
+
const frameData = g_workObj.mkScrollchStep[_frameNum];
|
|
9730
|
+
if (frameData !== undefined) {
|
|
9731
|
+
for (let j = 0; j < frameData.length; j++) {
|
|
9732
|
+
const targetj = frameData[j];
|
|
9733
|
+
const dividePos = (g_workObj.scrollDirDefault[targetj] * g_workObj.mkScrollchStepDir[_frameNum][j] === 1 ? 0 : 1);
|
|
9734
|
+
const baseY = C_STEP_Y + g_posObj.reverseStepY * dividePos;
|
|
9735
|
+
$id(`stepRoot${targetj}`).top = `${baseY}px`;
|
|
9736
|
+
$id(`frzHit${targetj}`).top = `${baseY}px`;
|
|
9737
|
+
}
|
|
9738
|
+
}
|
|
9739
|
+
};
|
|
9740
|
+
|
|
9629
9741
|
/**
|
|
9630
9742
|
* フリーズアローヒット時の描画変更
|
|
9631
9743
|
* @param {number} _j
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2019/11/19
|
|
8
|
-
* Revised : 2023/02/
|
|
8
|
+
* Revised : 2023/02/17 (v30.2.0)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -486,7 +486,7 @@ const g_typeLists = {
|
|
|
486
486
|
frzColor: [`Normal`, `NormalBar`, `Hit`, `HitBar`],
|
|
487
487
|
dataList: [
|
|
488
488
|
`Arrow`, `FrzArrow`, `FrzLength`,
|
|
489
|
-
`Color`, `ColorCd`,
|
|
489
|
+
`Color`, `ColorCd`, `ScrollchArrow`, `ScrollchStep`, `ScrollchArrowDir`, `ScrollchStepDir`,
|
|
490
490
|
`FColorNormal`, `FColorNormalCd`, `FColorNormalBar`, `FColorNormalBarCd`,
|
|
491
491
|
`FColorHit`, `FColorHitCd`, `FColorHitBar`, `FColorHitBarCd`,
|
|
492
492
|
`ArrowCssMotion`, `ArrowCssMotionName`,
|