danoniplus 42.2.3 → 42.3.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 +63 -20
- package/js/lib/danoni_constants.js +11 -8
- 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 : 2025/06/
|
|
7
|
+
* Revised : 2025/06/26
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 42.
|
|
12
|
-
const g_revisedDate = `2025/06/
|
|
11
|
+
const g_version = `Ver 42.3.0`;
|
|
12
|
+
const g_revisedDate = `2025/06/26`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -9989,6 +9989,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
|
|
|
9989
9989
|
const setScrollchData = (_scoreNo) => {
|
|
9990
9990
|
const dosScrollchData = getRefData(`scrollch`, `${_scoreNo}_data`) || _dosObj.scrollch_data;
|
|
9991
9991
|
const scrollchData = [];
|
|
9992
|
+
let maxLayerGroup = 0;
|
|
9992
9993
|
|
|
9993
9994
|
if (hasVal(dosScrollchData)) {
|
|
9994
9995
|
splitLF(dosScrollchData).filter(data => hasVal(data)).forEach(tmpData => {
|
|
@@ -10000,9 +10001,12 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
|
|
|
10000
10001
|
const arrowNum = parseFloat(tmpScrollchData[1]);
|
|
10001
10002
|
const scrollDir = parseFloat(tmpScrollchData[2] ?? `1`);
|
|
10002
10003
|
const layerGroup = parseFloat(tmpScrollchData[3] ?? `-1`);
|
|
10004
|
+
const layerTrans = tmpScrollchData[4] ?? ``;
|
|
10005
|
+
maxLayerGroup = Math.max(maxLayerGroup, layerGroup);
|
|
10003
10006
|
|
|
10004
|
-
scrollchData.push([frame, arrowNum, frame, scrollDir, layerGroup]);
|
|
10007
|
+
scrollchData.push([frame, arrowNum, frame, scrollDir, layerGroup, layerTrans]);
|
|
10005
10008
|
});
|
|
10009
|
+
g_stateObj.layerNumDf = Math.max((maxLayerGroup + 1) * 2, 2);
|
|
10006
10010
|
return scrollchData.sort((_a, _b) => _a[0] - _b[0]).flat();
|
|
10007
10011
|
}
|
|
10008
10012
|
return [];
|
|
@@ -10218,6 +10222,9 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
|
|
|
10218
10222
|
obj.colorData = mergeColorData();
|
|
10219
10223
|
obj.dummyColorData = mergeColorData(`Dummy`);
|
|
10220
10224
|
|
|
10225
|
+
// レイヤー数の初期値設定(譜面ごとに設定のため)
|
|
10226
|
+
g_stateObj.layerNumDf = 2;
|
|
10227
|
+
|
|
10221
10228
|
// 矢印モーション(個別)データの分解(3~4つで1セット, セット毎の改行区切り)
|
|
10222
10229
|
obj.arrowCssMotionData = setCssMotionData(`arrow`, scoreIdHeader);
|
|
10223
10230
|
obj.frzCssMotionData = setCssMotionData(`frz`, scoreIdHeader);
|
|
@@ -10784,7 +10791,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
10784
10791
|
g_typeLists.arrow.forEach(header =>
|
|
10785
10792
|
calcDataTiming(`cssMotion`, header, pushCssMotions, { _calcFrameFlg: true }));
|
|
10786
10793
|
|
|
10787
|
-
calcDataTiming(`scrollch`, ``, pushScrollchs, { _term:
|
|
10794
|
+
calcDataTiming(`scrollch`, ``, pushScrollchs, { _term: 6, _calcFrameFlg: true });
|
|
10788
10795
|
|
|
10789
10796
|
g_fadeinStockList.forEach(type =>
|
|
10790
10797
|
_dataObj[`${type}Data`] = calcAnimationData(type, _dataObj[`${type}Data`]));
|
|
@@ -11048,8 +11055,10 @@ const pushCssMotions = (_header, _frame, _val, _styleName, _styleNameRev) => {
|
|
|
11048
11055
|
* @param {number} _val
|
|
11049
11056
|
* @param {number} _frameStep
|
|
11050
11057
|
* @param {number} _scrollDir
|
|
11058
|
+
* @param {number} _layerGroup
|
|
11059
|
+
* @param {number} _layerTrans
|
|
11051
11060
|
*/
|
|
11052
|
-
const pushScrollchs = (_header, _frameArrow, _val, _frameStep, _scrollDir, _layerGroup) => {
|
|
11061
|
+
const pushScrollchs = (_header, _frameArrow, _val, _frameStep, _scrollDir, _layerGroup, _layerTrans) => {
|
|
11053
11062
|
const tkObj = getKeyInfo();
|
|
11054
11063
|
g_stateObj.layerNum = Math.max(g_stateObj.layerNum, (_layerGroup + 1) * 2);
|
|
11055
11064
|
|
|
@@ -11060,10 +11069,12 @@ const pushScrollchs = (_header, _frameArrow, _val, _frameStep, _scrollDir, _laye
|
|
|
11060
11069
|
const pushScrollData = _j => {
|
|
11061
11070
|
pushData(`Arrow`, frameArrow, _j);
|
|
11062
11071
|
pushData(`ArrowDir`, frameArrow, _scrollDir);
|
|
11063
|
-
pushData(`
|
|
11072
|
+
pushData(`ArrowLayerGroup`, frameArrow, _layerGroup);
|
|
11073
|
+
pushData(`ArrowLayerTrans`, frameArrow, _layerTrans);
|
|
11064
11074
|
pushData(`Step`, frameStep, _j);
|
|
11065
11075
|
pushData(`StepDir`, frameStep, _scrollDir);
|
|
11066
|
-
pushData(`
|
|
11076
|
+
pushData(`StepLayerGroup`, frameStep, _layerGroup);
|
|
11077
|
+
pushData(`StepLayerTrans`, frameStep, _layerTrans);
|
|
11067
11078
|
};
|
|
11068
11079
|
|
|
11069
11080
|
if (_val < 20 || _val >= 1000) {
|
|
@@ -11108,7 +11119,6 @@ const getArrowSettings = () => {
|
|
|
11108
11119
|
g_workObj.keyCtrl = structuredClone(g_keyObj[`keyCtrl${keyCtrlPtn}`]);
|
|
11109
11120
|
g_workObj.diffList = [];
|
|
11110
11121
|
g_workObj.mainEndTime = 0;
|
|
11111
|
-
g_stateObj.layerNum = 2;
|
|
11112
11122
|
|
|
11113
11123
|
g_workObj.keyGroupMaps = tkObj.keyGroupMaps;
|
|
11114
11124
|
g_workObj.keyGroupList = tkObj.keyGroupList;
|
|
@@ -11175,9 +11185,14 @@ const getArrowSettings = () => {
|
|
|
11175
11185
|
});
|
|
11176
11186
|
}
|
|
11177
11187
|
g_workObj.orgFlatFlg = g_workObj.dividePos.every(v => v === g_workObj.dividePos[0]);
|
|
11188
|
+
g_stateObj.layerNumDf = Math.max(g_stateObj.layerNumDf, Math.ceil((Math.max(...g_workObj.dividePos) + 1) / 2) * 2);
|
|
11189
|
+
|
|
11190
|
+
// StepArea(Default, Halfway以外)によるレイヤー移動
|
|
11191
|
+
// ずらした位置に表示するため、レイヤーを倍化して倍化した先に割り当てる
|
|
11178
11192
|
if (g_stateObj.stepArea === `X-Flower` || (g_stateObj.stepArea.includes(`Mismatched`) && g_workObj.orgFlatFlg)) {
|
|
11179
11193
|
for (let j = 0; j < keyNum; j++) {
|
|
11180
|
-
g_workObj.dividePos[j] = (g_workObj.stepX[j] < (g_headerObj.playingWidth - C_ARW_WIDTH) / 2 ? 0 : 1) *
|
|
11194
|
+
g_workObj.dividePos[j] = (g_workObj.stepX[j] < (g_headerObj.playingWidth - C_ARW_WIDTH) / 2 ? 0 : 1) *
|
|
11195
|
+
g_stateObj.layerNumDf + g_workObj.dividePos[j];
|
|
11181
11196
|
}
|
|
11182
11197
|
}
|
|
11183
11198
|
if (g_stateObj.stepArea === `2Step`) {
|
|
@@ -11187,14 +11202,14 @@ const getArrowSettings = () => {
|
|
|
11187
11202
|
g_workObj.scrollDir[j] *= -1;
|
|
11188
11203
|
}
|
|
11189
11204
|
if (g_workObj.dividePos[j] % 2 === (Number(g_stateObj.reverse === C_FLG_ON) + 1) % 2) {
|
|
11190
|
-
g_workObj.dividePos[j] = g_stateObj.
|
|
11205
|
+
g_workObj.dividePos[j] = g_stateObj.layerNumDf + g_workObj.dividePos[j] + Number(g_stateObj.reverse === C_FLG_ON ? 1 : -1);
|
|
11191
11206
|
g_workObj.scrollDir[j] *= -1;
|
|
11192
11207
|
}
|
|
11193
11208
|
}
|
|
11194
11209
|
}
|
|
11195
11210
|
g_workObj.scrollDirDefault = g_workObj.scrollDir.concat();
|
|
11196
11211
|
g_workObj.dividePosDefault = g_workObj.dividePos.concat();
|
|
11197
|
-
g_stateObj.layerNum =
|
|
11212
|
+
g_stateObj.layerNum = g_stateObj.layerNumDf * (g_settings.stepAreaLayers.includes(g_stateObj.stepArea) ? 2 : 1);
|
|
11198
11213
|
|
|
11199
11214
|
// g_workObjの不要なプロパティを削除
|
|
11200
11215
|
if (g_stateObj.dummyId === `` && g_autoPlaysBase.includes(g_stateObj.autoPlay)) {
|
|
@@ -11213,7 +11228,7 @@ const getArrowSettings = () => {
|
|
|
11213
11228
|
}
|
|
11214
11229
|
});
|
|
11215
11230
|
[`Arrow`, `Step`].forEach(type => {
|
|
11216
|
-
[``, `Dir`, `
|
|
11231
|
+
[``, `Dir`, `LayerGroup`, `LayerTrans`].forEach(type2 => {
|
|
11217
11232
|
if (g_workObj[`mkScrollch${type}${type2}`].length === 0) {
|
|
11218
11233
|
delete g_workObj[`mkScrollch${type}${type2}`];
|
|
11219
11234
|
}
|
|
@@ -11534,8 +11549,12 @@ const mainInit = () => {
|
|
|
11534
11549
|
if (doubleFilterFlg) {
|
|
11535
11550
|
mainSpriteJ.appendChild(createColorObject2(`filterBar${j % 2 == 0 ? j + 1 : j - 1}_HS`, g_lblPosObj.filterBar, filterCss));
|
|
11536
11551
|
}
|
|
11552
|
+
|
|
11553
|
+
// レイヤーごとのTransition設定
|
|
11554
|
+
// StepAreaオプションにより、レイヤーが倍化される場合があるため基準レイヤー数ごとに設定
|
|
11555
|
+
const transj = j % g_stateObj.layerNumDf;
|
|
11537
11556
|
addTransform(`mainSprite${j}`, `mainSprite${j}`,
|
|
11538
|
-
g_keyObj[`layerTrans${keyCtrlPtn}`]?.[0]?.[Math.floor(
|
|
11557
|
+
g_keyObj[`layerTrans${keyCtrlPtn}`]?.[0]?.[Math.floor(transj / 2) * 2 + (transj + Number(g_stateObj.reverse === C_FLG_ON)) % 2]);
|
|
11539
11558
|
|
|
11540
11559
|
stepSprite.push(createEmptySprite(mainSpriteJ, `stepSprite${j}`, mainCommonPos));
|
|
11541
11560
|
arrowSprite.push(createEmptySprite(mainSpriteJ, `arrowSprite${j}`, Object.assign({ y: g_workObj.hitPosition * (j % 2 === 0 ? 1 : -1) }, mainCommonPos)));
|
|
@@ -13063,16 +13082,41 @@ const changeCssMotions = (_header, _name, _frameNum) => {
|
|
|
13063
13082
|
};
|
|
13064
13083
|
|
|
13065
13084
|
/**
|
|
13066
|
-
*
|
|
13085
|
+
* 基準となる階層グループの取得
|
|
13086
|
+
* @param {number} _layerGroup
|
|
13087
|
+
* @param {number} _j
|
|
13088
|
+
* @returns {number}
|
|
13089
|
+
*/
|
|
13090
|
+
const getBaseLayerGroup = (_layerGroup, _j) =>
|
|
13091
|
+
_layerGroup === -1
|
|
13092
|
+
? Math.floor(g_workObj.dividePosDefault[_j] / 2)
|
|
13093
|
+
: _layerGroup + (g_workObj.dividePosDefault[_j] > g_stateObj.layerNumDf ? g_stateObj.layerNumDf / 2 : 0);
|
|
13094
|
+
|
|
13095
|
+
/**
|
|
13096
|
+
* スクロール方向、レイヤーの変更(矢印・フリーズアロー)
|
|
13097
|
+
* StepAreaがDefault/Halfway以外の場合はレイヤー数が倍化するため、その設定にも追従する
|
|
13067
13098
|
* @param {number} _frameNum
|
|
13068
13099
|
*/
|
|
13069
|
-
const changeScrollArrowDirs = (_frameNum) =>
|
|
13100
|
+
const changeScrollArrowDirs = (_frameNum) => {
|
|
13101
|
+
if (g_workObj.mkScrollchArrow?.[_frameNum] === undefined) {
|
|
13102
|
+
return;
|
|
13103
|
+
}
|
|
13104
|
+
const tmpObj = new Map();
|
|
13070
13105
|
g_workObj.mkScrollchArrow?.[_frameNum]?.forEach((targetj, j) => {
|
|
13071
13106
|
g_workObj.scrollDir[targetj] = g_workObj.scrollDirDefault[targetj] * g_workObj.mkScrollchArrowDir[_frameNum][j];
|
|
13072
|
-
|
|
13073
|
-
|
|
13107
|
+
|
|
13108
|
+
// レイヤー変更
|
|
13109
|
+
const baseLayer = getBaseLayerGroup(g_workObj.mkScrollchArrowLayerGroup[_frameNum][j], targetj);
|
|
13074
13110
|
g_workObj.dividePos[targetj] = baseLayer * 2 + (g_workObj.scrollDir[targetj] === 1 ? 0 : 1);
|
|
13111
|
+
|
|
13112
|
+
// 対象の矢印が属するレイヤーに対するTransitionを設定
|
|
13113
|
+
// ステップゾーンの移動よりも矢印・フリーズアローの方が早く変わるため、この関数のみ適用
|
|
13114
|
+
if (g_workObj.mkScrollchArrowLayerTrans[_frameNum][j] !== ``) {
|
|
13115
|
+
tmpObj.set(g_workObj.dividePos[targetj], g_workObj.mkScrollchArrowLayerTrans[_frameNum][j]);
|
|
13116
|
+
}
|
|
13075
13117
|
});
|
|
13118
|
+
tmpObj.forEach((val, key, map) => addTransform(`mainSprite${key}`, `scrollch`, val));
|
|
13119
|
+
};
|
|
13076
13120
|
|
|
13077
13121
|
/**
|
|
13078
13122
|
* ステップゾーンの位置反転
|
|
@@ -13091,8 +13135,7 @@ const changeStepY = (_frameNum) =>
|
|
|
13091
13135
|
document.getElementById(`frzHit${targetj}`).remove();
|
|
13092
13136
|
|
|
13093
13137
|
// レイヤーを変更しステップゾーンを再生成。移動元の不透明度、表示・非表示を反映
|
|
13094
|
-
const baseLayer = g_workObj.
|
|
13095
|
-
Math.floor(g_workObj.dividePosDefault[targetj] / 2) : g_workObj.mkScrollchStepLayer[_frameNum][j];
|
|
13138
|
+
const baseLayer = getBaseLayerGroup(g_workObj.mkScrollchStepLayerGroup[_frameNum][j], targetj);
|
|
13096
13139
|
g_workObj.dividePos[targetj] = baseLayer * 2 + dividePos;
|
|
13097
13140
|
makeStepZone(targetj, `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`);
|
|
13098
13141
|
appearStepZone(targetj, _stepDisplay, _stepOpacity);
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2019/11/19
|
|
8
|
-
* Revised : 2025/06/
|
|
8
|
+
* Revised : 2025/06/26 (v42.3.0)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -771,7 +771,8 @@ const g_typeLists = {
|
|
|
771
771
|
dataList: [
|
|
772
772
|
`Arrow`, `FrzArrow`, `FrzLength`,
|
|
773
773
|
`Color`, `ColorCd`, `ColorShadow`, `ColorShadowCd`,
|
|
774
|
-
`ScrollchArrow`, `ScrollchStep`, `ScrollchArrowDir`, `ScrollchStepDir`,
|
|
774
|
+
`ScrollchArrow`, `ScrollchStep`, `ScrollchArrowDir`, `ScrollchStepDir`,
|
|
775
|
+
`ScrollchArrowLayerGroup`, `ScrollchStepLayerGroup`, `ScrollchArrowLayerTrans`, `ScrollchStepLayerTrans`,
|
|
775
776
|
`FColorNormal`, `FColorNormalCd`, `FColorNormalBar`, `FColorNormalBarCd`,
|
|
776
777
|
`FColorNormalShadow`, `FColorNormalShadowCd`,
|
|
777
778
|
`FColorHit`, `FColorHitCd`, `FColorHitBar`, `FColorHitBarCd`,
|
|
@@ -1099,7 +1100,8 @@ const g_stateObj = {
|
|
|
1099
1100
|
dm_customKey: C_FLG_OFF,
|
|
1100
1101
|
dm_others: C_FLG_OFF,
|
|
1101
1102
|
|
|
1102
|
-
layerNum: 2,
|
|
1103
|
+
layerNum: 2, // オプションを加味した実際のレイヤー数
|
|
1104
|
+
layerNumDf: 2, // 基準レイヤー数
|
|
1103
1105
|
};
|
|
1104
1106
|
|
|
1105
1107
|
const C_VAL_MAXLIFE = 1000;
|
|
@@ -1243,6 +1245,7 @@ const g_settings = {
|
|
|
1243
1245
|
playWindowNum: 0,
|
|
1244
1246
|
|
|
1245
1247
|
stepAreas: [`Default`, `Halfway`, `2Step`, `Mismatched`, `R-Mismatched`, `X-Flower`],
|
|
1248
|
+
stepAreaLayers: [`2Step`, `Mismatched`, `R-Mismatched`, `X-Flower`],
|
|
1246
1249
|
stepAreaNum: 0,
|
|
1247
1250
|
|
|
1248
1251
|
frzReturns: [C_FLG_OFF, `X-Axis`, `Y-Axis`, `Z-Axis`, `Random`, `XY-Axis`, `XZ-Axis`, `YZ-Axis`, `Random+`],
|
|
@@ -1555,7 +1558,7 @@ const g_stepAreaFunc = new Map([
|
|
|
1555
1558
|
}
|
|
1556
1559
|
if (g_workObj.orgFlatFlg) {
|
|
1557
1560
|
g_arrowGroupSprite.forEach(sprite => {
|
|
1558
|
-
for (let j =
|
|
1561
|
+
for (let j = g_stateObj.layerNumDf; j < g_stateObj.layerNum; j++) {
|
|
1559
1562
|
addY(`${sprite}${j}`, `stepArea`, halfwayOffset(j));
|
|
1560
1563
|
}
|
|
1561
1564
|
});
|
|
@@ -1567,7 +1570,7 @@ const g_stepAreaFunc = new Map([
|
|
|
1567
1570
|
}
|
|
1568
1571
|
if (g_workObj.orgFlatFlg) {
|
|
1569
1572
|
g_arrowGroupSprite.forEach(sprite => {
|
|
1570
|
-
for (let j = 0; j <
|
|
1573
|
+
for (let j = 0; j < g_stateObj.layerNumDf; j++) {
|
|
1571
1574
|
addY(`${sprite}${j}`, `stepArea`, halfwayOffset(j));
|
|
1572
1575
|
}
|
|
1573
1576
|
});
|
|
@@ -1575,14 +1578,14 @@ const g_stepAreaFunc = new Map([
|
|
|
1575
1578
|
}],
|
|
1576
1579
|
['2Step', () => {
|
|
1577
1580
|
g_arrowGroupSprite.forEach(sprite => {
|
|
1578
|
-
for (let j =
|
|
1581
|
+
for (let j = g_stateObj.layerNumDf; j < g_stateObj.layerNum; j++) {
|
|
1579
1582
|
addY(`${sprite}${j}`, `stepArea`, halfwayOffset(j));
|
|
1580
1583
|
}
|
|
1581
1584
|
});
|
|
1582
1585
|
}],
|
|
1583
1586
|
['X-Flower', () => {
|
|
1584
|
-
for (let j = 0; j <
|
|
1585
|
-
addTransform(`mainSprite${j}`, `stepArea`, `rotate(${(j % 2 === 0 ? 1 : -1) * (j
|
|
1587
|
+
for (let j = 0; j < g_stateObj.layerNum; j++) {
|
|
1588
|
+
addTransform(`mainSprite${j}`, `stepArea`, `rotate(${(j % 2 === 0 ? 1 : -1) * (j < g_stateObj.layerNumDf ? 1 : -1) * -15}deg)`);
|
|
1586
1589
|
}
|
|
1587
1590
|
}],
|
|
1588
1591
|
]);
|