danoniplus 32.1.0 → 32.2.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 +44 -16
- package/js/lib/danoni_constants.js +14 -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 : 2023/05/
|
|
7
|
+
* Revised : 2023/05/21
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 32.
|
|
12
|
-
const g_revisedDate = `2023/05/
|
|
11
|
+
const g_version = `Ver 32.2.0`;
|
|
12
|
+
const g_revisedDate = `2023/05/21`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -3105,7 +3105,8 @@ const headerConvert = _dosObj => {
|
|
|
3105
3105
|
obj.resultMotionSet = setBoolVal(_dosObj.resultMotionSet, true);
|
|
3106
3106
|
|
|
3107
3107
|
// 譜面明細の使用可否
|
|
3108
|
-
|
|
3108
|
+
g_settings.scoreDetails = _dosObj.scoreDetailUse?.split(`,`).filter(val => hasVal(val) && val !== `false`) || g_settings.scoreDetailDefs;
|
|
3109
|
+
g_stateObj.scoreDetail = g_settings.scoreDetails[0] || ``;
|
|
3109
3110
|
|
|
3110
3111
|
// 判定位置をBackgroundのON/OFFと連動してリセットする設定
|
|
3111
3112
|
obj.jdgPosReset = setBoolVal(_dosObj.jdgPosReset, true);
|
|
@@ -4531,9 +4532,12 @@ const drawSpeedGraph = _scoreId => {
|
|
|
4531
4532
|
const context = canvas.getContext(`2d`);
|
|
4532
4533
|
drawBaseLine(context);
|
|
4533
4534
|
|
|
4535
|
+
const avgX = [0, 0];
|
|
4536
|
+
const avgSubX = [1, 1];
|
|
4534
4537
|
Object.keys(speedObj).forEach((speedType, j) => {
|
|
4535
4538
|
context.beginPath();
|
|
4536
4539
|
let preY;
|
|
4540
|
+
let avgSubFrame = playingFrame;
|
|
4537
4541
|
|
|
4538
4542
|
for (let i = 0; i < speedObj[speedType].frame.length; i++) {
|
|
4539
4543
|
const x = speedObj[speedType].frame[i] * (g_limitObj.graphWidth - 30) / playingFrame + 30;
|
|
@@ -4542,7 +4546,17 @@ const drawSpeedGraph = _scoreId => {
|
|
|
4542
4546
|
context.lineTo(x, preY);
|
|
4543
4547
|
context.lineTo(x, y);
|
|
4544
4548
|
preY = y;
|
|
4549
|
+
|
|
4550
|
+
const deltaFrame = speedObj[speedType].frame[i] - (speedObj[speedType].frame[i - 1] ?? startFrame);
|
|
4551
|
+
avgX[j] += deltaFrame * (speedObj[speedType].speed[i - 1] ?? 1);
|
|
4552
|
+
if ((speedObj[speedType].speed[i - 1] ?? 1) === 1) {
|
|
4553
|
+
avgSubFrame -= deltaFrame;
|
|
4554
|
+
} else {
|
|
4555
|
+
avgSubX[j] += deltaFrame * (speedObj[speedType].speed[i - 1]);
|
|
4556
|
+
}
|
|
4545
4557
|
}
|
|
4558
|
+
avgX[j] /= playingFrame;
|
|
4559
|
+
avgSubX[j] /= Math.max(avgSubFrame, 1);
|
|
4546
4560
|
|
|
4547
4561
|
context.lineWidth = 1;
|
|
4548
4562
|
context.strokeStyle = speedObj[speedType].strokeColor;
|
|
@@ -4557,7 +4571,9 @@ const drawSpeedGraph = _scoreId => {
|
|
|
4557
4571
|
context.fillText(speedType, lineX + 35, 218);
|
|
4558
4572
|
|
|
4559
4573
|
updateScoreDetailLabel(`Speed`, `${speedType}S`, speedObj[speedType].cnt, j, g_lblNameObj[`s_${speedType}`]);
|
|
4574
|
+
updateScoreDetailLabel(`Speed`, `avgD${speedType}`, `${(avgSubX[j]).toFixed(2)}x`, j + 4, g_lblNameObj[`s_avgD${speedType}`]);
|
|
4560
4575
|
});
|
|
4576
|
+
updateScoreDetailLabel(`Speed`, `avgS`, `${(avgX[0] * avgX[1]).toFixed(2)}x`, 2, g_lblNameObj.s_avg);
|
|
4561
4577
|
};
|
|
4562
4578
|
|
|
4563
4579
|
/**
|
|
@@ -4897,7 +4913,7 @@ const setDifficulty = (_initFlg) => {
|
|
|
4897
4913
|
|
|
4898
4914
|
// 速度設定 (Speed)
|
|
4899
4915
|
setSetting(0, `speed`, ` ${g_lblNameObj.multi}`);
|
|
4900
|
-
if (
|
|
4916
|
+
if (g_settings.scoreDetails.length > 0) {
|
|
4901
4917
|
drawSpeedGraph(g_stateObj.scoreId);
|
|
4902
4918
|
drawDensityGraph(g_stateObj.scoreId);
|
|
4903
4919
|
makeDifInfo(g_stateObj.scoreId);
|
|
@@ -5014,7 +5030,7 @@ const createOptionWindow = _sprite => {
|
|
|
5014
5030
|
return detailObj;
|
|
5015
5031
|
};
|
|
5016
5032
|
|
|
5017
|
-
if (
|
|
5033
|
+
if (g_settings.scoreDetails.length > 0) {
|
|
5018
5034
|
spriteList.speed.appendChild(
|
|
5019
5035
|
createCss2Button(`btnGraph`, `i`, _ => true, {
|
|
5020
5036
|
x: -25, y: -60, w: 30, h: 30, siz: g_limitObj.jdgCharaSiz, title: g_msgObj.graph,
|
|
@@ -7064,18 +7080,30 @@ const applyShuffle = (_keyNum, _shuffleGroup, _style) => {
|
|
|
7064
7080
|
* @param {number} _keyNum
|
|
7065
7081
|
* @param {array} _shuffleGroup
|
|
7066
7082
|
*/
|
|
7067
|
-
const applyMirror = (_keyNum, _shuffleGroup,
|
|
7083
|
+
const applyMirror = (_keyNum, _shuffleGroup, _swapFlg = false) => {
|
|
7084
|
+
|
|
7068
7085
|
// シャッフルグループごとにミラー
|
|
7069
7086
|
const style = structuredClone(_shuffleGroup).map(_group => _group.reverse());
|
|
7070
|
-
|
|
7071
|
-
|
|
7072
|
-
|
|
7073
|
-
|
|
7074
|
-
|
|
7075
|
-
|
|
7076
|
-
|
|
7087
|
+
let swapUseFlg = false;
|
|
7088
|
+
|
|
7089
|
+
// X-Mirror作成用の入れ替え関数
|
|
7090
|
+
// グループが4の倍数のとき、4n+1, 4n+2のみ入れ替える
|
|
7091
|
+
const swapGroupNums = (_group, _i, _divideNum) => {
|
|
7092
|
+
if (_group.length % _divideNum === 0) {
|
|
7093
|
+
swapUseFlg = true;
|
|
7094
|
+
for (let k = 0; k < _group.length / _divideNum; k++) {
|
|
7095
|
+
const swap1 = Math.floor(_divideNum * (k + 1 / 2) - 1);
|
|
7096
|
+
const swap2 = Math.ceil(_divideNum * (k + 1 / 2));
|
|
7097
|
+
[style[_i][swap1], style[_i][swap2]] = [style[_i][swap2], style[_i][swap1]];
|
|
7077
7098
|
}
|
|
7078
|
-
}
|
|
7099
|
+
}
|
|
7100
|
+
};
|
|
7101
|
+
|
|
7102
|
+
if (_swapFlg) {
|
|
7103
|
+
style.forEach((group, i) => g_settings.swapPattern.forEach(val => swapGroupNums(group, i, val)));
|
|
7104
|
+
if (!swapUseFlg) {
|
|
7105
|
+
g_stateObj.shuffle = `Mirror`;
|
|
7106
|
+
}
|
|
7079
7107
|
}
|
|
7080
7108
|
applyShuffle(_keyNum, _shuffleGroup, style);
|
|
7081
7109
|
};
|
|
@@ -10608,7 +10636,7 @@ const resultInit = _ => {
|
|
|
10608
10636
|
|
|
10609
10637
|
// ハイスコア差分計算
|
|
10610
10638
|
const assistFlg = (g_autoPlaysBase.includes(g_stateObj.autoPlay) ? `` : `-${g_stateObj.autoPlay}less`);
|
|
10611
|
-
const mirrorName = (g_stateObj.shuffle.indexOf(`Mirror`) !== -1 ?
|
|
10639
|
+
const mirrorName = (g_stateObj.shuffle.indexOf(`Mirror`) !== -1 ? `-${g_stateObj.shuffle}` : ``);
|
|
10612
10640
|
const transKeyName = (hasVal(g_keyObj[`transKey${keyCtrlPtn}`]) ? `(${g_keyObj[`transKey${keyCtrlPtn}`]})` : ``);
|
|
10613
10641
|
let scoreName = `${g_headerObj.keyLabels[g_stateObj.scoreId]}${transKeyName}${getStgDetailName('k-')}${g_headerObj.difLabels[g_stateObj.scoreId]}${assistFlg}${mirrorName}`;
|
|
10614
10642
|
if (g_headerObj.makerView) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2019/11/19
|
|
8
|
-
* Revised : 2023/05/
|
|
8
|
+
* Revised : 2023/05/21 (v32.2.0)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -883,8 +883,9 @@ const g_settings = {
|
|
|
883
883
|
scrollNum: 0,
|
|
884
884
|
scrollFlat: [`Flat`, `R-Flat`],
|
|
885
885
|
|
|
886
|
-
shuffles: [C_FLG_OFF, `Mirror`, `
|
|
886
|
+
shuffles: [C_FLG_OFF, `Mirror`, `X-Mirror`, `Turning`, `Random`, `Random+`, `S-Random`, `S-Random+`],
|
|
887
887
|
shuffleNum: 0,
|
|
888
|
+
swapPattern: [4, 5, 6, 7],
|
|
888
889
|
|
|
889
890
|
gauges: [],
|
|
890
891
|
gaugeNum: 0,
|
|
@@ -910,7 +911,8 @@ const g_settings = {
|
|
|
910
911
|
|
|
911
912
|
opacitys: [10, 25, 50, 75, 100],
|
|
912
913
|
|
|
913
|
-
|
|
914
|
+
scoreDetailDefs: [`Speed`, `Density`, `ToolDif`],
|
|
915
|
+
scoreDetails: [],
|
|
914
916
|
scoreDetailCursors: [],
|
|
915
917
|
};
|
|
916
918
|
|
|
@@ -934,7 +936,7 @@ const g_jumpSettingWindow = {
|
|
|
934
936
|
const g_shuffleFunc = {
|
|
935
937
|
'OFF': _ => true,
|
|
936
938
|
'Mirror': (keyNum, shuffleGroup) => applyMirror(keyNum, shuffleGroup),
|
|
937
|
-
'
|
|
939
|
+
'X-Mirror': (keyNum, shuffleGroup) => applyMirror(keyNum, shuffleGroup, true),
|
|
938
940
|
'Turning': (keyNum, shuffleGroup) => applyTurning(keyNum, shuffleGroup),
|
|
939
941
|
'Random': (keyNum, shuffleGroup) => applyRandom(keyNum, shuffleGroup),
|
|
940
942
|
'Random+': keyNum => applyRandom(keyNum, [[...Array(keyNum).keys()]]),
|
|
@@ -1762,7 +1764,7 @@ const g_keyObj = {
|
|
|
1762
1764
|
shuffle11i_0_0: [0, 0, 1, 0, 0, 2, 3, 3, 4, 3, 3],
|
|
1763
1765
|
shuffle12_0_0: [0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2],
|
|
1764
1766
|
shuffle13_0_0: [0, 0, 0, 0, 1, 1, 1, 1, 2, 3, 3, 3, 3],
|
|
1765
|
-
shuffle14_0_0: [
|
|
1767
|
+
shuffle14_0_0: [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2],
|
|
1766
1768
|
shuffle14i_0_0: [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 2, 2, 2],
|
|
1767
1769
|
shuffle15A_0_0: [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 2, 2, 2],
|
|
1768
1770
|
shuffle16i_0_0: [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 2, 2, 2, 2],
|
|
@@ -2635,6 +2637,10 @@ const g_lblNameObj = {
|
|
|
2635
2637
|
|
|
2636
2638
|
s_speed: `Speed`,
|
|
2637
2639
|
s_boost: `Boost`,
|
|
2640
|
+
s_avg: `Avg.`,
|
|
2641
|
+
s_avgDspeed: `AvgS)`,
|
|
2642
|
+
s_avgDboost: `AvgB)`,
|
|
2643
|
+
|
|
2638
2644
|
s_apm: `APM`,
|
|
2639
2645
|
s_time: `Time`,
|
|
2640
2646
|
s_arrow: `Arrow`,
|
|
@@ -2679,7 +2685,7 @@ const g_lblNameObj = {
|
|
|
2679
2685
|
'u_Reverse': `Reverse`,
|
|
2680
2686
|
|
|
2681
2687
|
'u_Mirror': `Mirror`,
|
|
2682
|
-
'
|
|
2688
|
+
'u_X-Mirror': `X-Mirror`,
|
|
2683
2689
|
'u_Turning': `Turning`,
|
|
2684
2690
|
'u_Random': `Random`,
|
|
2685
2691
|
'u_Random+': `Random+`,
|
|
@@ -2896,7 +2902,7 @@ const g_lang_msgObj = {
|
|
|
2896
2902
|
colorType: `矢印・フリーズアローの配色セットをあらかじめ定義されたリストから選択できます。\nType1~4選択時は色変化が自動でOFFになり、カラーピッカーから好きな色に変更できます。\n[Type0] グラデーション切替, [Type1~4] デフォルトパターン`,
|
|
2897
2903
|
imgType: `矢印・フリーズアローなどのオブジェクトの見た目を変更します。`,
|
|
2898
2904
|
colorGroup: `矢印・フリーズアロー色グループの割り当てパターンを変更します。`,
|
|
2899
|
-
shuffleGroup: `Mirror/
|
|
2905
|
+
shuffleGroup: `Mirror/X-Mirror/Turning/Random/S-Random選択時、シャッフルするグループを変更します。\n矢印の上にある同じ数字同士でシャッフルします。`,
|
|
2900
2906
|
stepRtnGroup: `矢印などノーツの種類、回転に関するパターンを切り替えます。\nあらかじめ設定されている場合のみ変更可能です。`,
|
|
2901
2907
|
|
|
2902
2908
|
pickArrow: `色番号ごとの矢印色(枠、塗りつぶし)、通常時のフリーズアロー色(枠、帯)を\nカラーピッカーから選んで変更できます。`,
|
|
@@ -2952,7 +2958,7 @@ const g_lang_msgObj = {
|
|
|
2952
2958
|
colorType: `Change the color scheme set for arrows and freeze-arrows from the predefined set.\nWhen Type1 to 4 is selected, color change is automatically turned off and can be changed to any color from the color picker.\n[Type0] Switch the sequences color gradations, [Type1~4] default color scheme`,
|
|
2953
2959
|
imgType: `Change the appearance of sequences.`,
|
|
2954
2960
|
colorGroup: `Change the sequences color group assignment pattern.`,
|
|
2955
|
-
shuffleGroup: `Change the shuffle group when Mirror,
|
|
2961
|
+
shuffleGroup: `Change the shuffle group when Mirror, X-Mirror, Turning, Random or S-Random are selected.\nShuffle with the same numbers listed above.`,
|
|
2956
2962
|
stepRtnGroup: `Switches the type of notes, such as arrows, and the pattern regarding rotation.\nThis can only be changed if it has been set in advance.`,
|
|
2957
2963
|
|
|
2958
2964
|
pickArrow: `Change the frame or fill of arrow color and the frame or bar of normal freeze-arrow color\nfor each color number from the color picker.`,
|