danoniplus 47.3.2 → 47.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 +46 -51
- package/package.json +1 -1
package/js/danoni_main.js
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Source by tickle
|
|
6
6
|
* Created : 2018/10/08
|
|
7
|
-
* Revised : 2026/04/
|
|
7
|
+
* Revised : 2026/04/26
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 47.
|
|
12
|
-
const g_revisedDate = `2026/04/
|
|
11
|
+
const g_version = `Ver 47.4.0`;
|
|
12
|
+
const g_revisedDate = `2026/04/26`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -11784,6 +11784,24 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
11784
11784
|
/** Motionの適用フレーム数 */
|
|
11785
11785
|
g_workObj.motionFrame = [];
|
|
11786
11786
|
|
|
11787
|
+
const boostData = [];
|
|
11788
|
+
if (hasArrayList(_dataObj.boostData, 2)) {
|
|
11789
|
+
const _data = _dataObj.boostData.concat();
|
|
11790
|
+
for (let k = 0; k < _data.length; k += 2) {
|
|
11791
|
+
boostData.push({ frame: _data[k], spd: getSpeedFactor(_data[k + 1]) });
|
|
11792
|
+
}
|
|
11793
|
+
if (boostData.length > 0 && boostData[0].frame > 0) {
|
|
11794
|
+
boostData.unshift({ frame: 0, spd: 1 });
|
|
11795
|
+
}
|
|
11796
|
+
}
|
|
11797
|
+
const getSpdByFrame = _targetFrame => {
|
|
11798
|
+
// targetFrame 以下の frame を持つ要素の中で、最後(最新)のものを見つける
|
|
11799
|
+
const result = boostData.findLast((item) => _targetFrame >= item.frame);
|
|
11800
|
+
|
|
11801
|
+
// 該当するものがない場合(frame: 0 未満など)のフォールバック
|
|
11802
|
+
return result ? result.spd : 1;
|
|
11803
|
+
};
|
|
11804
|
+
|
|
11787
11805
|
/**
|
|
11788
11806
|
* 矢印・フリーズアローのデータ格納処理
|
|
11789
11807
|
* @param {number} _j
|
|
@@ -11797,9 +11815,14 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
11797
11815
|
* @param {number} object.arrivalFrame
|
|
11798
11816
|
* @param {number} object.motionFrame
|
|
11799
11817
|
*/
|
|
11800
|
-
const setNotes = (_j, _k, _data, _startPoint, _header, _frzFlg = false, { initY, initBoostY, arrivalFrame, motionFrame } = {}) => {
|
|
11818
|
+
const setNotes = (_j, _k, _data, _startPoint, _header, _frzFlg = false, { initY, initBoostY, arrivalFrame, motionFrame, boostSpd } = {}) => {
|
|
11801
11819
|
if (_startPoint >= 0) {
|
|
11802
|
-
const arrowAttrs = {
|
|
11820
|
+
const arrowAttrs = {
|
|
11821
|
+
pos: _j, initY, initBoostY, arrivalFrame, motionFrame, boostSpd,
|
|
11822
|
+
get boostDir() {
|
|
11823
|
+
return Math.sign(this.boostSpd);
|
|
11824
|
+
}
|
|
11825
|
+
};
|
|
11803
11826
|
if (g_workObj[`mk${_header}Arrow`][_startPoint] === undefined) {
|
|
11804
11827
|
g_workObj[`mk${_header}Arrow`][_startPoint] = [arrowAttrs];
|
|
11805
11828
|
} else {
|
|
@@ -11863,8 +11886,10 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
11863
11886
|
if (_frzFlg) {
|
|
11864
11887
|
g_workObj[`mk${camelHeader}Length`][_j] = [];
|
|
11865
11888
|
}
|
|
11866
|
-
setNotes(_j, lastk, _data, startPoint[lastk], camelHeader, _frzFlg,
|
|
11867
|
-
|
|
11889
|
+
setNotes(_j, lastk, _data, startPoint[lastk], camelHeader, _frzFlg, {
|
|
11890
|
+
initY: tmpObj.startY, initBoostY: g_workObj.initBoostY[frmPrev],
|
|
11891
|
+
arrivalFrame: tmpObj.arrivalFrm, motionFrame: tmpObj.motionFrm, boostSpd: getSpdByFrame(arrowArrivalFrm)
|
|
11892
|
+
});
|
|
11868
11893
|
|
|
11869
11894
|
// 矢印は1つずつ、フリーズアローは2つで1セット
|
|
11870
11895
|
for (let k = lastk - setcnt; k >= 0; k -= setcnt) {
|
|
@@ -11943,9 +11968,10 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
11943
11968
|
}
|
|
11944
11969
|
|
|
11945
11970
|
// 出現タイミングを保存
|
|
11946
|
-
setNotes(_j, k, _data, startPoint[k], camelHeader, _frzFlg,
|
|
11947
|
-
|
|
11948
|
-
|
|
11971
|
+
setNotes(_j, k, _data, startPoint[k], camelHeader, _frzFlg, {
|
|
11972
|
+
initY: tmpObj.startY, initBoostY: g_workObj.initBoostY[frmPrev],
|
|
11973
|
+
arrivalFrame: tmpObj.arrivalFrm, motionFrame: tmpObj.motionFrm, boostSpd: getSpdByFrame(arrowArrivalFrm)
|
|
11974
|
+
});
|
|
11949
11975
|
}
|
|
11950
11976
|
};
|
|
11951
11977
|
|
|
@@ -11960,30 +11986,6 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
11960
11986
|
calcNotes(j, _dataObj.dummyFrzData[j], `dummyFrz`, true);
|
|
11961
11987
|
}
|
|
11962
11988
|
|
|
11963
|
-
// 個別加速のタイミング更新
|
|
11964
|
-
const calcBoostData = _data => {
|
|
11965
|
-
if (hasArrayList(_data, 2)) {
|
|
11966
|
-
let delIdx = 0;
|
|
11967
|
-
for (let k = _data.length - 2; k >= 0; k -= 2) {
|
|
11968
|
-
const tmpObj = getArrowStartFrame(_data[k], _speedOnFrame);
|
|
11969
|
-
if (tmpObj.frm < g_scoreObj.frameNum) {
|
|
11970
|
-
_data[k] = g_scoreObj.frameNum;
|
|
11971
|
-
delIdx = k;
|
|
11972
|
-
break;
|
|
11973
|
-
} else {
|
|
11974
|
-
_data[k] = tmpObj.frm;
|
|
11975
|
-
}
|
|
11976
|
-
_data[k + 1] = getSpeedFactor(_data[k + 1]);
|
|
11977
|
-
}
|
|
11978
|
-
for (let k = 0; k < delIdx; k++) {
|
|
11979
|
-
_data.shift();
|
|
11980
|
-
}
|
|
11981
|
-
return _data;
|
|
11982
|
-
}
|
|
11983
|
-
return [];
|
|
11984
|
-
};
|
|
11985
|
-
g_workObj.boostData = calcBoostData(_dataObj.boostData);
|
|
11986
|
-
|
|
11987
11989
|
/**
|
|
11988
11990
|
* 色変化・モーションデータ・スクロール反転データのタイミング更新
|
|
11989
11991
|
* - この関数を使用する場合、配列グループの先頭2つが「フレーム数、矢印番号」となっていないと動作しない
|
|
@@ -13044,10 +13046,8 @@ const mainInit = () => {
|
|
|
13044
13046
|
// EffectのArrowEffect追加処理
|
|
13045
13047
|
g_effectFunc.get(g_stateObj.effect)();
|
|
13046
13048
|
|
|
13047
|
-
//
|
|
13049
|
+
// 現在の矢印・フリーズアローの速度の初期化 (速度変化時に直す)
|
|
13048
13050
|
g_workObj.currentSpeed = 2;
|
|
13049
|
-
g_workObj.boostSpd = 1;
|
|
13050
|
-
g_workObj.boostDir = 1;
|
|
13051
13051
|
|
|
13052
13052
|
// 開始位置、楽曲再生位置の設定
|
|
13053
13053
|
const firstFrame = g_scoreObj.frameNum;
|
|
@@ -13718,8 +13718,8 @@ const mainInit = () => {
|
|
|
13718
13718
|
|
|
13719
13719
|
const arrowName = `${_name}${_j}_${_arrowCnt}`;
|
|
13720
13720
|
const stepY = C_STEP_Y + g_posObj.reverseStepY * dividePos;
|
|
13721
|
-
const firstPosY = stepY + (_attrs.initY *
|
|
13722
|
-
_attrs.initBoostY *
|
|
13721
|
+
const firstPosY = stepY + (_attrs.initY * _attrs.boostSpd +
|
|
13722
|
+
_attrs.initBoostY * _attrs.boostDir) * g_workObj.scrollDir[_j];
|
|
13723
13723
|
|
|
13724
13724
|
const arrowRoot = createEmptySprite(arrowSprite[g_workObj.dividePos[_j]], arrowName, {
|
|
13725
13725
|
x: 0, y: 0, w: C_ARW_WIDTH, h: C_ARW_WIDTH,
|
|
@@ -13733,13 +13733,13 @@ const mainInit = () => {
|
|
|
13733
13733
|
// 生存フレーム数 (ストップ分除去、個別加速/Motionオプション用)
|
|
13734
13734
|
boostCnt: _attrs.motionFrame,
|
|
13735
13735
|
// 個別加速量
|
|
13736
|
-
boostSpd:
|
|
13736
|
+
boostSpd: _attrs.boostSpd,
|
|
13737
13737
|
// ステップゾーン位置 (0: デフォルト, 1: リバース)
|
|
13738
13738
|
dividePos: dividePos,
|
|
13739
13739
|
// スクロール方向 (1: デフォルト, -1: リバース)
|
|
13740
13740
|
dir: g_workObj.scrollDir[_j],
|
|
13741
13741
|
// 個別加速方向 (1: 順方向加速, -1: 逆方向加速)
|
|
13742
|
-
boostDir:
|
|
13742
|
+
boostDir: _attrs.boostDir,
|
|
13743
13743
|
// 前フレーム時の位置 (判定で使用)
|
|
13744
13744
|
prevY: firstPosY,
|
|
13745
13745
|
// 現フレーム時の位置
|
|
@@ -13834,9 +13834,9 @@ const mainInit = () => {
|
|
|
13834
13834
|
const frzNo = `${_j}_${_arrowCnt}`;
|
|
13835
13835
|
const frzName = `${_name}${frzNo}`;
|
|
13836
13836
|
const stepY = C_STEP_Y + g_posObj.reverseStepY * dividePos;
|
|
13837
|
-
const firstPosY = stepY + (_attrs.initY *
|
|
13838
|
-
_attrs.initBoostY *
|
|
13839
|
-
const firstBarLength = g_workObj[`mk${toCapitalize(_name)}Length`][_j][(_arrowCnt - 1) * 2] *
|
|
13837
|
+
const firstPosY = stepY + (_attrs.initY * _attrs.boostSpd +
|
|
13838
|
+
_attrs.initBoostY * _attrs.boostDir) * g_workObj.scrollDir[_j];
|
|
13839
|
+
const firstBarLength = g_workObj[`mk${toCapitalize(_name)}Length`][_j][(_arrowCnt - 1) * 2] * _attrs.boostSpd;
|
|
13840
13840
|
|
|
13841
13841
|
const frzRoot = createEmptySprite(arrowSprite[g_workObj.dividePos[_j]], frzName, {
|
|
13842
13842
|
x: 0, y: 0, w: C_ARW_WIDTH, h: C_ARW_WIDTH + firstBarLength,
|
|
@@ -13864,13 +13864,13 @@ const mainInit = () => {
|
|
|
13864
13864
|
// キーを離していたフレーム数 (基準値超えでNG判定)
|
|
13865
13865
|
keyUpFrame: 0,
|
|
13866
13866
|
// 個別加速量
|
|
13867
|
-
boostSpd:
|
|
13867
|
+
boostSpd: _attrs.boostSpd,
|
|
13868
13868
|
// ステップゾーン位置 (0: デフォルト, 1: リバース)
|
|
13869
13869
|
dividePos: dividePos,
|
|
13870
13870
|
// スクロール方向 (1: デフォルト, -1: リバース)
|
|
13871
13871
|
dir: g_workObj.scrollDir[_j],
|
|
13872
13872
|
// 個別加速方向 (1: 順方向加速, -1: 逆方向加速)
|
|
13873
|
-
boostDir:
|
|
13873
|
+
boostDir: _attrs.boostDir,
|
|
13874
13874
|
// 現フレーム時のフリーズアロー本体の位置
|
|
13875
13875
|
y: firstPosY,
|
|
13876
13876
|
// フリーズアロー(帯)の相対位置
|
|
@@ -14082,11 +14082,6 @@ const mainInit = () => {
|
|
|
14082
14082
|
g_workObj.currentSpeed = g_workObj.speedData[speedCnts + 1];
|
|
14083
14083
|
speedCnts += 2;
|
|
14084
14084
|
}
|
|
14085
|
-
while (currentFrame >= g_workObj.boostData?.[boostCnts]) {
|
|
14086
|
-
g_workObj.boostSpd = g_workObj.boostData[boostCnts + 1];
|
|
14087
|
-
g_workObj.boostDir = (g_workObj.boostSpd > 0 ? 1 : -1);
|
|
14088
|
-
boostCnts += 2;
|
|
14089
|
-
}
|
|
14090
14085
|
|
|
14091
14086
|
objList.forEach(header => {
|
|
14092
14087
|
const headerU = toCapitalize(header);
|