danoniplus 36.4.2 → 36.6.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 +61 -16
- package/js/lib/danoni_constants.js +14 -6
- 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 : 2024/06/
|
|
7
|
+
* Revised : 2024/06/08
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 36.
|
|
12
|
-
const g_revisedDate = `2024/06/
|
|
11
|
+
const g_version = `Ver 36.6.0`;
|
|
12
|
+
const g_revisedDate = `2024/06/08`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -6453,7 +6453,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6453
6453
|
* @param {number} _scrollNum
|
|
6454
6454
|
*/
|
|
6455
6455
|
const changeTmpShuffleNum = (_j, _scrollNum = 1) => {
|
|
6456
|
-
const tmpShuffle = changeTmpData(`shuffle`,
|
|
6456
|
+
const tmpShuffle = changeTmpData(`shuffle`, g_keyObj[`keyCtrl${keyCtrlPtn}`].length - 1, _j, _scrollNum);
|
|
6457
6457
|
document.getElementById(`sArrow${_j}`).textContent = tmpShuffle + 1;
|
|
6458
6458
|
|
|
6459
6459
|
changeShuffleConfigColor(keyCtrlPtn, g_keyObj[`shuffle${keyCtrlPtn}_${g_keycons.shuffleGroupNum}`][_j], _j);
|
|
@@ -7638,6 +7638,7 @@ const applySRandom = (_keyNum, _shuffleGroup, _arrowHeader, _frzHeader) => {
|
|
|
7638
7638
|
|
|
7639
7639
|
const tmpArrowData = [...Array(_keyNum)].map(_ => []);
|
|
7640
7640
|
const tmpFrzData = [...Array(_keyNum)].map(_ => []);
|
|
7641
|
+
const scatterFrame = 10;
|
|
7641
7642
|
|
|
7642
7643
|
// シャッフルグループごとに処理
|
|
7643
7644
|
_shuffleGroup.forEach(_group => {
|
|
@@ -7654,28 +7655,61 @@ const applySRandom = (_keyNum, _shuffleGroup, _arrowHeader, _frzHeader) => {
|
|
|
7654
7655
|
// 重ならないようにフリーズを配置
|
|
7655
7656
|
allFreezeArrows.forEach(_freeze => {
|
|
7656
7657
|
// 置ける場所を検索
|
|
7658
|
+
const freeSpacesFlat = _group.filter(
|
|
7659
|
+
_key => tmpFrzData[_key].find(_other => _freeze.begin - scatterFrame <= _other.end + scatterFrame) === undefined
|
|
7660
|
+
);
|
|
7657
7661
|
const freeSpaces = _group.filter(
|
|
7658
7662
|
_key => tmpFrzData[_key].find(_other => _freeze.begin <= _other.end) === undefined
|
|
7659
7663
|
);
|
|
7664
|
+
let currentFreeSpaces = freeSpaces;
|
|
7665
|
+
if (g_stateObj.shuffle.startsWith(`Scatter`)) {
|
|
7666
|
+
currentFreeSpaces = freeSpacesFlat.length > 0 ? freeSpacesFlat : freeSpaces;
|
|
7667
|
+
}
|
|
7660
7668
|
// ランダムに配置
|
|
7661
|
-
const random = Math.floor(Math.random() *
|
|
7662
|
-
tmpFrzData[
|
|
7669
|
+
const random = Math.floor(Math.random() * currentFreeSpaces.length);
|
|
7670
|
+
tmpFrzData[currentFreeSpaces[random]].push(_freeze);
|
|
7663
7671
|
});
|
|
7664
7672
|
|
|
7665
7673
|
// 通常矢印の配置
|
|
7666
7674
|
const allArrows = _group.map(_key => g_scoreObj[`${_arrowHeader}Data`][_key]).flat();
|
|
7667
7675
|
allArrows.sort((_a, _b) => _a - _b);
|
|
7676
|
+
let prev2Num = 0, prevNum = 0;
|
|
7668
7677
|
allArrows.forEach(_arrow => {
|
|
7678
|
+
|
|
7679
|
+
// 直前の矢印のフレーム数を取得
|
|
7680
|
+
if (prev2Num !== _arrow) {
|
|
7681
|
+
if (prevNum !== _arrow) {
|
|
7682
|
+
prev2Num = prevNum;
|
|
7683
|
+
prevNum = _arrow;
|
|
7684
|
+
}
|
|
7685
|
+
}
|
|
7686
|
+
|
|
7669
7687
|
// 置ける場所を検索
|
|
7688
|
+
const freeSpacesFlat = _group.filter(_key =>
|
|
7689
|
+
// フリーズと重ならない (前後10フレーム)
|
|
7690
|
+
tmpFrzData[_key].find(_freeze => _arrow >= _freeze.begin - scatterFrame && _arrow <= _freeze.end + scatterFrame) === undefined
|
|
7691
|
+
// 通常矢印と重ならない (前後10フレーム)
|
|
7692
|
+
&& tmpArrowData[_key].find(_other => _arrow >= _other - scatterFrame && _arrow <= _other + scatterFrame) === undefined
|
|
7693
|
+
// 直前の矢印と重ならない
|
|
7694
|
+
&& tmpArrowData[_key].find(_other => prev2Num === _other) === undefined
|
|
7695
|
+
);
|
|
7670
7696
|
const freeSpaces = _group.filter(_key =>
|
|
7671
7697
|
// フリーズと重ならない
|
|
7672
7698
|
tmpFrzData[_key].find(_freeze => _arrow >= _freeze.begin && _arrow <= _freeze.end) === undefined
|
|
7673
7699
|
// 通常矢印と重ならない
|
|
7674
7700
|
&& tmpArrowData[_key].find(_other => _arrow === _other) === undefined
|
|
7675
7701
|
);
|
|
7702
|
+
const freeSpacesAlt = _group.filter(_key =>
|
|
7703
|
+
// 通常矢印と重ならない
|
|
7704
|
+
tmpArrowData[_key].find(_other => _arrow === _other) === undefined
|
|
7705
|
+
);
|
|
7676
7706
|
// ランダムに配置
|
|
7677
|
-
|
|
7678
|
-
|
|
7707
|
+
let currentFreeSpaces = freeSpaces.length > 0 ? freeSpaces : freeSpacesAlt;
|
|
7708
|
+
if (g_stateObj.shuffle.startsWith(`Scatter`)) {
|
|
7709
|
+
currentFreeSpaces = freeSpacesFlat.length > 0 ? freeSpacesFlat : currentFreeSpaces;
|
|
7710
|
+
}
|
|
7711
|
+
const random = Math.floor(Math.random() * currentFreeSpaces.length);
|
|
7712
|
+
tmpArrowData[currentFreeSpaces[random]].push(_arrow);
|
|
7679
7713
|
})
|
|
7680
7714
|
});
|
|
7681
7715
|
|
|
@@ -9223,8 +9257,8 @@ const mainInit = _ => {
|
|
|
9223
9257
|
const filterCss = g_stateObj.filterLock === C_FLG_OFF ? g_cssObj.life_Failed : g_cssObj.life_Cleared;
|
|
9224
9258
|
[`filterBar0`, `filterBar1`, `borderBar0`, `borderBar1`].forEach(obj =>
|
|
9225
9259
|
mainSprite.appendChild(createColorObject2(obj, g_lblPosObj.filterBar, filterCss)));
|
|
9226
|
-
borderBar0.style.top = wUnit(g_posObj.stepDiffY);
|
|
9227
|
-
borderBar1.style.top = wUnit(g_posObj.stepDiffY + g_posObj.arrowHeight);
|
|
9260
|
+
borderBar0.style.top = wUnit(g_posObj.stepDiffY + g_stateObj.hitPosition);
|
|
9261
|
+
borderBar1.style.top = wUnit(g_posObj.stepDiffY + g_posObj.arrowHeight - g_stateObj.hitPosition);
|
|
9228
9262
|
|
|
9229
9263
|
if (g_appearanceRanges.includes(g_stateObj.appearance)) {
|
|
9230
9264
|
mainSprite.appendChild(createDivCss2Label(`filterView`, ``, g_lblPosObj.filterView));
|
|
@@ -9509,8 +9543,17 @@ const mainInit = _ => {
|
|
|
9509
9543
|
);
|
|
9510
9544
|
}
|
|
9511
9545
|
|
|
9546
|
+
const msg = [];
|
|
9512
9547
|
if (getMusicUrl(g_stateObj.scoreId) === `nosound.mp3`) {
|
|
9513
|
-
|
|
9548
|
+
msg.push(g_msgInfoObj.I_0004);
|
|
9549
|
+
}
|
|
9550
|
+
if (g_stateObj.shuffle.indexOf(`Mirror`) !== -1 &&
|
|
9551
|
+
g_stateObj.dataSaveFlg && g_stateObj.autoAll === C_FLG_OFF &&
|
|
9552
|
+
g_keyObj[`shuffle${keyCtrlPtn}`].filter((shuffleGr, j) => shuffleGr !== g_keyObj[`shuffle${keyCtrlPtn}_0d`][j]).length > 0) {
|
|
9553
|
+
msg.push(g_msgInfoObj.I_0005);
|
|
9554
|
+
}
|
|
9555
|
+
if (msg.length > 0) {
|
|
9556
|
+
makeInfoWindow(msg.join(`<br>`), `leftToRightFade`, { _x: g_workObj.playingX, _y: g_headerObj.playingY });
|
|
9514
9557
|
}
|
|
9515
9558
|
|
|
9516
9559
|
// ユーザカスタムイベント(初期)
|
|
@@ -10403,8 +10446,8 @@ const changeAppearanceFilter = (_appearance, _num = 10) => {
|
|
|
10403
10446
|
$id(`arrowSprite${topNum}`).clipPath = topShape;
|
|
10404
10447
|
$id(`arrowSprite${bottomNum}`).clipPath = bottomShape;
|
|
10405
10448
|
|
|
10406
|
-
$id(`filterBar0`).top = wUnit(g_posObj.arrowHeight * _num / 100);
|
|
10407
|
-
$id(`filterBar1`).top = wUnit(g_posObj.arrowHeight * (100 - _num) / 100);
|
|
10449
|
+
$id(`filterBar0`).top = wUnit(g_posObj.arrowHeight * _num / 100 + g_stateObj.hitPosition);
|
|
10450
|
+
$id(`filterBar1`).top = wUnit(g_posObj.arrowHeight * (100 - _num) / 100 - g_stateObj.hitPosition);
|
|
10408
10451
|
|
|
10409
10452
|
if (g_appearanceRanges.includes(_appearance)) {
|
|
10410
10453
|
$id(`filterView`).top =
|
|
@@ -11048,6 +11091,8 @@ const resultInit = _ => {
|
|
|
11048
11091
|
|
|
11049
11092
|
const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
|
|
11050
11093
|
const transKeyName = (hasVal(g_keyObj[`transKey${keyCtrlPtn}`]) ? `(${g_keyObj[`transKey${keyCtrlPtn}`]})` : ``);
|
|
11094
|
+
const orgShuffleFlg = g_keyObj[`shuffle${keyCtrlPtn}`].filter((shuffleGr, j) => shuffleGr !== g_keyObj[`shuffle${keyCtrlPtn}_0d`][j]).length === 0;
|
|
11095
|
+
const shuffleName = `${getStgDetailName(g_stateObj.shuffle)}${!orgShuffleFlg && !g_stateObj.shuffle.endsWith(`+`) ? getStgDetailName('(S)') : ''}`;
|
|
11051
11096
|
|
|
11052
11097
|
/**
|
|
11053
11098
|
* プレイスタイルのカスタム有無
|
|
@@ -11062,7 +11107,7 @@ const resultInit = _ => {
|
|
|
11062
11107
|
`${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyName} ${getStgDetailName('key')} / ${g_headerObj.difLabels[g_stateObj.scoreId]}`,
|
|
11063
11108
|
`${withOptions(g_autoPlaysBase.includes(g_stateObj.autoPlay), true, `-${getStgDetailName(g_stateObj.autoPlay)}${getStgDetailName('less')}`)}`,
|
|
11064
11109
|
`${withOptions(g_headerObj.makerView, false, `(${g_headerObj.creatorNames[g_stateObj.scoreId]})`)}`,
|
|
11065
|
-
`${withOptions(g_stateObj.shuffle, C_FLG_OFF, `[${
|
|
11110
|
+
`${withOptions(g_stateObj.shuffle, C_FLG_OFF, `[${shuffleName}]`)}`
|
|
11066
11111
|
];
|
|
11067
11112
|
let difData = difDatas.filter(value => value !== ``).join(` `);
|
|
11068
11113
|
const difDataForImage = difDatas.filter((value, j) => value !== `` && j !== 2).join(` `);
|
|
@@ -11207,7 +11252,7 @@ const resultInit = _ => {
|
|
|
11207
11252
|
maxCombo: 0, fmaxCombo: 0, score: 0,
|
|
11208
11253
|
};
|
|
11209
11254
|
|
|
11210
|
-
const highscoreCondition = (g_stateObj.autoAll === C_FLG_OFF && (g_stateObj.shuffle === C_FLG_OFF || mirrorName !== ``));
|
|
11255
|
+
const highscoreCondition = (g_stateObj.autoAll === C_FLG_OFF && (g_stateObj.shuffle === C_FLG_OFF || (mirrorName !== `` && orgShuffleFlg)));
|
|
11211
11256
|
if (highscoreCondition) {
|
|
11212
11257
|
|
|
11213
11258
|
// ハイスコア差分描画
|
|
@@ -11314,7 +11359,7 @@ const resultInit = _ => {
|
|
|
11314
11359
|
const hashTag = (hasVal(g_headerObj.hashTag) ? ` ${g_headerObj.hashTag}` : ``);
|
|
11315
11360
|
let tweetDifData = `${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyName}${getStgDetailName('k-')}${g_headerObj.difLabels[g_stateObj.scoreId]}${assistFlg}`;
|
|
11316
11361
|
if (g_stateObj.shuffle !== `OFF`) {
|
|
11317
|
-
tweetDifData += `:${
|
|
11362
|
+
tweetDifData += `:${shuffleName}`;
|
|
11318
11363
|
}
|
|
11319
11364
|
const twiturl = new URL(g_localStorageUrl);
|
|
11320
11365
|
twiturl.searchParams.append(`scoreId`, g_stateObj.scoreId);
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2019/11/19
|
|
8
|
-
* Revised : 2024/
|
|
8
|
+
* Revised : 2024/06/08 (v36.6.0)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -122,9 +122,6 @@ const g_limitObj = {
|
|
|
122
122
|
|
|
123
123
|
// キーコンフィグで表示するカラーピッカー数
|
|
124
124
|
kcColorPickerNum: 5,
|
|
125
|
-
|
|
126
|
-
// キーコンフィグで設定できるシャッフルグループ上限数
|
|
127
|
-
kcShuffleNums: 20,
|
|
128
125
|
};
|
|
129
126
|
|
|
130
127
|
/** 設定項目の位置 */
|
|
@@ -966,7 +963,7 @@ const g_settings = {
|
|
|
966
963
|
scrolls: [],
|
|
967
964
|
scrollNum: 0,
|
|
968
965
|
|
|
969
|
-
shuffles: [C_FLG_OFF, `Mirror`, `X-Mirror`, `Turning`, `Random`, `Random+`, `S-Random`, `S-Random+`],
|
|
966
|
+
shuffles: [C_FLG_OFF, `Mirror`, `X-Mirror`, `Turning`, `Random`, `Random+`, `S-Random`, `S-Random+`, `Scatter`, `Scatter+`],
|
|
970
967
|
shuffleNum: 0,
|
|
971
968
|
swapPattern: [4, 5, 6, 7],
|
|
972
969
|
|
|
@@ -1057,6 +1054,14 @@ const g_shuffleFunc = {
|
|
|
1057
1054
|
applySRandom(keyNum, [[...Array(keyNum).keys()]], `arrow`, `frz`);
|
|
1058
1055
|
applySRandom(keyNum, [[...Array(keyNum).keys()]], `dummyArrow`, `dummyFrz`);
|
|
1059
1056
|
},
|
|
1057
|
+
'Scatter': (keyNum, shuffleGroup) => {
|
|
1058
|
+
applySRandom(keyNum, shuffleGroup, `arrow`, `frz`);
|
|
1059
|
+
applySRandom(keyNum, shuffleGroup, `dummyArrow`, `dummyFrz`);
|
|
1060
|
+
},
|
|
1061
|
+
'Scatter+': keyNum => {
|
|
1062
|
+
applySRandom(keyNum, [[...Array(keyNum).keys()]], `arrow`, `frz`);
|
|
1063
|
+
applySRandom(keyNum, [[...Array(keyNum).keys()]], `dummyArrow`, `dummyFrz`);
|
|
1064
|
+
},
|
|
1060
1065
|
};
|
|
1061
1066
|
|
|
1062
1067
|
/**
|
|
@@ -2848,6 +2853,7 @@ const g_lang_msgInfoObj = {
|
|
|
2848
2853
|
I_0002: `入力したキーは割り当てできません。他のキーを指定してください。`,
|
|
2849
2854
|
I_0003: `各譜面の明細情報をクリップボードにコピーしました!`,
|
|
2850
2855
|
I_0004: `musicUrlが設定されていないため、無音モードで再生します`,
|
|
2856
|
+
I_0005: `正規のミラー譜面で無いため、ハイスコアは保存されません`,
|
|
2851
2857
|
},
|
|
2852
2858
|
En: {
|
|
2853
2859
|
W_0001: `Your browser is not guaranteed to work.<br>
|
|
@@ -2897,6 +2903,7 @@ const g_lang_msgInfoObj = {
|
|
|
2897
2903
|
I_0002: `The specified key cannot be assigned. Please specify another key.`,
|
|
2898
2904
|
I_0003: `Charts information is copied to the clipboard!`,
|
|
2899
2905
|
I_0004: `Play in silence mode because "musicUrl" is not set`,
|
|
2906
|
+
I_0005: `Highscore is not saved because not a regular mirrored chart.`,
|
|
2900
2907
|
},
|
|
2901
2908
|
};
|
|
2902
2909
|
|
|
@@ -3034,6 +3041,7 @@ const g_lblNameObj = {
|
|
|
3034
3041
|
'u_Random+': `Random+`,
|
|
3035
3042
|
'u_S-Random': `S-Random`,
|
|
3036
3043
|
'u_S-Random+': `S-Random+`,
|
|
3044
|
+
'u_(S)': `(S)`,
|
|
3037
3045
|
|
|
3038
3046
|
'u_ALL': `ALL`,
|
|
3039
3047
|
'u_Onigiri': `Onigiri`,
|
|
@@ -3121,7 +3129,7 @@ const g_lblNameObj = {
|
|
|
3121
3129
|
* リンク先管理
|
|
3122
3130
|
*/
|
|
3123
3131
|
const g_linkObj = {
|
|
3124
|
-
x: `https://x.com/intent/
|
|
3132
|
+
x: `https://x.com/intent/post`,
|
|
3125
3133
|
discord: `https://discord.gg/5Hxu4wDEZR`,
|
|
3126
3134
|
};
|
|
3127
3135
|
|