danoniplus 50.3.1 → 50.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 +59 -81
- package/package.json +1 -1
package/js/danoni_main.js
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Source by tickle
|
|
6
6
|
* Created : 2018/10/08
|
|
7
|
-
* Revised : 2026/09/
|
|
7
|
+
* Revised : 2026/09/12
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 50.
|
|
12
|
-
const g_revisedDate = `2026/09/
|
|
11
|
+
const g_version = `Ver 50.4.0`;
|
|
12
|
+
const g_revisedDate = `2026/09/12`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -13893,15 +13893,6 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
13893
13893
|
[``, `Dummy`].forEach(header =>
|
|
13894
13894
|
g_typeLists.dataList.forEach(name => g_workObj[`mk${header}${name}`] = []));
|
|
13895
13895
|
|
|
13896
|
-
/** 矢印の移動距離 */
|
|
13897
|
-
g_workObj.initY = [];
|
|
13898
|
-
/** 矢印の移動距離 (Motion加算分) */
|
|
13899
|
-
g_workObj.initBoostY = [];
|
|
13900
|
-
/** 矢印がステップゾーンに到達するまでのフレーム数 */
|
|
13901
|
-
g_workObj.arrivalFrame = [];
|
|
13902
|
-
/** Motionの適用フレーム数 */
|
|
13903
|
-
g_workObj.motionFrame = [];
|
|
13904
|
-
|
|
13905
13896
|
const boostData = [];
|
|
13906
13897
|
if (hasArrayList(_dataObj.boostData, 2)) {
|
|
13907
13898
|
const _data = _dataObj.boostData.concat();
|
|
@@ -13976,14 +13967,13 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
13976
13967
|
return;
|
|
13977
13968
|
}
|
|
13978
13969
|
|
|
13979
|
-
const calcInitBoostY =
|
|
13970
|
+
const calcInitBoostY = _arrivalFrame => sumData(g_workObj.motionOnFrames.filter((val, j) => j <= _arrivalFrame));
|
|
13980
13971
|
const camelHeader = toCapitalize(_header);
|
|
13981
13972
|
const setcnt = (_frzFlg ? 2 : 1);
|
|
13982
13973
|
if (_frzFlg && _data.length % 2 !== 0) {
|
|
13983
13974
|
_data.pop();
|
|
13984
13975
|
}
|
|
13985
13976
|
|
|
13986
|
-
const startPoint = [];
|
|
13987
13977
|
let spdNext = Infinity;
|
|
13988
13978
|
let spdk = (_dataObj.speedData?.length ?? 0) - 2;
|
|
13989
13979
|
let spdPrev = _dataObj.speedData?.[spdk] ?? 0;
|
|
@@ -13993,19 +13983,15 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
13993
13983
|
let arrowArrivalFrm = _data[lastk];
|
|
13994
13984
|
let tmpObj = getArrowStartFrame(arrowArrivalFrm, _speedOnFrame);
|
|
13995
13985
|
|
|
13996
|
-
startPoint
|
|
13997
|
-
let
|
|
13998
|
-
|
|
13999
|
-
g_workObj.arrivalFrame[frmPrev] = tmpObj.arrivalFrm;
|
|
14000
|
-
g_workObj.motionFrame[frmPrev] = tmpObj.motionFrm;
|
|
14001
|
-
g_workObj.initBoostY[frmPrev] = calcInitBoostY(frmPrev);
|
|
14002
|
-
let minNotesFrame = startPoint[lastk];
|
|
13986
|
+
let startPoint = tmpObj.frm;
|
|
13987
|
+
let arrivalFrm = tmpObj.arrivalFrm;
|
|
13988
|
+
let minNotesFrame = startPoint;
|
|
14003
13989
|
|
|
14004
13990
|
if (_frzFlg) {
|
|
14005
13991
|
g_workObj[`mk${camelHeader}Length`][_j] = [];
|
|
14006
13992
|
}
|
|
14007
|
-
setNotes(_j, lastk, _data, startPoint
|
|
14008
|
-
initY: tmpObj.startY, initBoostY:
|
|
13993
|
+
setNotes(_j, lastk, _data, startPoint, camelHeader, _frzFlg, {
|
|
13994
|
+
initY: tmpObj.startY, initBoostY: calcInitBoostY(tmpObj.motionFrm),
|
|
14009
13995
|
arrivalFrame: tmpObj.arrivalFrm, motionFrame: tmpObj.motionFrm, boostSpd: getSpdByFrame(arrowArrivalFrm)
|
|
14010
13996
|
});
|
|
14011
13997
|
|
|
@@ -14021,16 +14007,11 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
14021
14007
|
}
|
|
14022
14008
|
break;
|
|
14023
14009
|
|
|
14024
|
-
} else if ((arrowArrivalFrm -
|
|
14010
|
+
} else if ((arrowArrivalFrm - arrivalFrm > spdPrev)
|
|
14025
14011
|
&& arrowArrivalFrm < spdNext) {
|
|
14026
14012
|
|
|
14027
|
-
//
|
|
14028
|
-
|
|
14029
|
-
startPoint[k] = tmpFrame;
|
|
14030
|
-
g_workObj.initY[tmpFrame] = g_workObj.initY[frmPrev];
|
|
14031
|
-
g_workObj.arrivalFrame[tmpFrame] = g_workObj.arrivalFrame[frmPrev];
|
|
14032
|
-
g_workObj.motionFrame[tmpFrame] = g_workObj.motionFrame[frmPrev];
|
|
14033
|
-
g_workObj.initBoostY[tmpFrame] = calcInitBoostY(tmpFrame);
|
|
14013
|
+
// 最初から最後まで同じスピードのときは前回のデータを流用(ステップゾーン到達フレーム - 移動フレーム)
|
|
14014
|
+
startPoint = arrowArrivalFrm - arrivalFrm;
|
|
14034
14015
|
|
|
14035
14016
|
} else {
|
|
14036
14017
|
|
|
@@ -14041,53 +14022,28 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
14041
14022
|
spdPrev = _dataObj.speedData[spdk];
|
|
14042
14023
|
}
|
|
14043
14024
|
tmpObj = getArrowStartFrame(arrowArrivalFrm, _speedOnFrame);
|
|
14044
|
-
|
|
14045
|
-
|
|
14046
|
-
|
|
14047
|
-
|
|
14048
|
-
|
|
14049
|
-
|
|
14050
|
-
|
|
14051
|
-
|
|
14052
|
-
|
|
14053
|
-
|
|
14054
|
-
|
|
14055
|
-
|
|
14056
|
-
|
|
14057
|
-
|
|
14058
|
-
|
|
14059
|
-
// 逆転している場合は、最小生成フレームまでさらに遡って、出現フレームを再計算する。
|
|
14060
|
-
if (minNotesFrame < startPoint[k]) {
|
|
14061
|
-
|
|
14062
|
-
const getAdjArrowStartFrame = (_obj, _speedOnFrame, _targetFrame) => {
|
|
14063
|
-
while (_obj.frm > _targetFrame) {
|
|
14064
|
-
_obj.startY += _speedOnFrame[_obj.frm - 1];
|
|
14065
|
-
|
|
14066
|
-
if (_speedOnFrame[_obj.frm - 1] !== 0) {
|
|
14067
|
-
_obj.motionFrm++;
|
|
14068
|
-
}
|
|
14069
|
-
_obj.frm--;
|
|
14070
|
-
_obj.arrivalFrm++;
|
|
14071
|
-
}
|
|
14072
|
-
return _obj;
|
|
14073
|
-
};
|
|
14074
|
-
tmpObj = getAdjArrowStartFrame(tmpObj, _speedOnFrame, minNotesFrame);
|
|
14075
|
-
startPoint[k] = tmpObj.frm;
|
|
14076
|
-
frmPrev = tmpObj.frm;
|
|
14077
|
-
g_workObj.initY[frmPrev] = tmpObj.startY;
|
|
14078
|
-
g_workObj.arrivalFrame[frmPrev] = tmpObj.arrivalFrm;
|
|
14079
|
-
g_workObj.motionFrame[frmPrev] = tmpObj.motionFrm;
|
|
14080
|
-
g_workObj.initBoostY[frmPrev] = calcInitBoostY(frmPrev);
|
|
14025
|
+
startPoint = tmpObj.frm;
|
|
14026
|
+
arrivalFrm = tmpObj.arrivalFrm;
|
|
14027
|
+
|
|
14028
|
+
// --- 逆転検知ロジック ---
|
|
14029
|
+
// 後ろからループしているため、minNotesFrameには「自分より譜面上後ろにあるノーツ」の
|
|
14030
|
+
// 最小生成フレーム(最も早く出現するもの)が入っている。
|
|
14031
|
+
|
|
14032
|
+
// 「自分より後ろのノーツ」の方が、「自分」よりも早く出現する場合、
|
|
14033
|
+
// 配列の順序と出現時間の順序が入れ替わっている(逆転)とみなす。
|
|
14034
|
+
// 逆転している場合は、最小生成フレームまでさらに遡って、出現フレームを再計算する。
|
|
14035
|
+
if (minNotesFrame < startPoint) {
|
|
14036
|
+
tmpObj = getAdjArrowStartFrame({ ...tmpObj, frm: startPoint }, _speedOnFrame, minNotesFrame);
|
|
14037
|
+
startPoint = tmpObj.frm;
|
|
14038
|
+
arrivalFrm = tmpObj.arrivalFrm;
|
|
14039
|
+
}
|
|
14081
14040
|
}
|
|
14082
|
-
|
|
14083
14041
|
// 最小値を更新
|
|
14084
|
-
|
|
14085
|
-
minNotesFrame = startPoint[k];
|
|
14086
|
-
}
|
|
14042
|
+
minNotesFrame = Math.min(minNotesFrame, startPoint);
|
|
14087
14043
|
|
|
14088
14044
|
// 出現タイミングを保存
|
|
14089
|
-
setNotes(_j, k, _data, startPoint
|
|
14090
|
-
initY: tmpObj.startY, initBoostY:
|
|
14045
|
+
setNotes(_j, k, _data, startPoint, camelHeader, _frzFlg, {
|
|
14046
|
+
initY: tmpObj.startY, initBoostY: calcInitBoostY(tmpObj.motionFrm),
|
|
14091
14047
|
arrivalFrame: tmpObj.arrivalFrm, motionFrame: tmpObj.motionFrm, boostSpd: getSpdByFrame(arrowArrivalFrm)
|
|
14092
14048
|
});
|
|
14093
14049
|
}
|
|
@@ -14125,6 +14081,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
14125
14081
|
return;
|
|
14126
14082
|
}
|
|
14127
14083
|
const frontData = [];
|
|
14084
|
+
let minDataFrame = Infinity;
|
|
14128
14085
|
for (let k = baseData.length - _term; k >= 0; k -= _term) {
|
|
14129
14086
|
const calcFrameFlg = (_colorFlg && !baseData[k + 3]) || _calcFrameFlg;
|
|
14130
14087
|
|
|
@@ -14135,13 +14092,19 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
14135
14092
|
}
|
|
14136
14093
|
} else {
|
|
14137
14094
|
if (calcFrameFlg) {
|
|
14138
|
-
|
|
14095
|
+
let tmpObj = getArrowStartFrame(baseData[k], _speedOnFrame);
|
|
14096
|
+
|
|
14097
|
+
// 到達フレームがより早い(=baseData[k]がより小さい)要素なのに、
|
|
14098
|
+
// より遅い要素より後ろで出現してしまう場合は矢印と同様に補正する
|
|
14099
|
+
if (minDataFrame < tmpObj.frm) {
|
|
14100
|
+
tmpObj = getAdjArrowStartFrame(tmpObj, _speedOnFrame, minDataFrame);
|
|
14101
|
+
}
|
|
14139
14102
|
if (tmpObj.frm < g_scoreObj.frameNum) {
|
|
14140
14103
|
const diff = g_scoreObj.frameNum - tmpObj.frm;
|
|
14141
14104
|
tmpObj.frm = g_scoreObj.frameNum;
|
|
14142
14105
|
tmpObj.arrivalFrm -= diff;
|
|
14143
14106
|
}
|
|
14144
|
-
|
|
14107
|
+
minDataFrame = Math.min(minDataFrame, tmpObj.frm);
|
|
14145
14108
|
baseData[k] = tmpObj.frm;
|
|
14146
14109
|
}
|
|
14147
14110
|
_setFunc(toCapitalize(_header), ...baseData.slice(k, k + _term));
|
|
@@ -14246,6 +14209,26 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
14246
14209
|
}
|
|
14247
14210
|
};
|
|
14248
14211
|
|
|
14212
|
+
/**
|
|
14213
|
+
* 出現フレームを指定フレームまで強制的に遡って再計算する(逆転補正用)
|
|
14214
|
+
* @param {object} _obj getArrowStartFrameの戻り値
|
|
14215
|
+
* @param {object} _speedOnFrame
|
|
14216
|
+
* @param {number} _targetFrame
|
|
14217
|
+
* @returns {{ frm: number, startY: number, arrivalFrm: number, motionFrm: number }}
|
|
14218
|
+
*/
|
|
14219
|
+
const getAdjArrowStartFrame = (_obj, _speedOnFrame, _targetFrame) => {
|
|
14220
|
+
while (_obj.frm > _targetFrame) {
|
|
14221
|
+
_obj.startY += _speedOnFrame[_obj.frm - 1];
|
|
14222
|
+
|
|
14223
|
+
if (_speedOnFrame[_obj.frm - 1] !== 0) {
|
|
14224
|
+
_obj.motionFrm++;
|
|
14225
|
+
}
|
|
14226
|
+
_obj.frm--;
|
|
14227
|
+
_obj.arrivalFrm++;
|
|
14228
|
+
}
|
|
14229
|
+
return _obj;
|
|
14230
|
+
};
|
|
14231
|
+
|
|
14249
14232
|
/**
|
|
14250
14233
|
* ステップゾーン到達地点から逆算して開始フレームを取得
|
|
14251
14234
|
* @param {number} _frame
|
|
@@ -14579,11 +14562,6 @@ const getArrowSettings = () => {
|
|
|
14579
14562
|
g_keyCopyLists.simpleDef.forEach(header => updateKeyInfo(header, keyCtrlPtn));
|
|
14580
14563
|
g_headerObj.tuning = g_headerObj.creatorNames[g_stateObj.scoreId];
|
|
14581
14564
|
|
|
14582
|
-
delete g_workObj.initY;
|
|
14583
|
-
delete g_workObj.initBoostY;
|
|
14584
|
-
delete g_workObj.arrivalFrame;
|
|
14585
|
-
delete g_workObj.motionFrame;
|
|
14586
|
-
|
|
14587
14565
|
// 各種初期化
|
|
14588
14566
|
// g_workObj.frzArrowInitRtnはフリーズアロー(初期表示)としての利用に限定
|
|
14589
14567
|
g_workObj.stepX = [];
|