danoniplus 32.1.0 → 32.2.1
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 -16
- package/js/lib/danoni_constants.js +14 -10
- 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/25
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 32.1
|
|
12
|
-
const g_revisedDate = `2023/05/
|
|
11
|
+
const g_version = `Ver 32.2.1`;
|
|
12
|
+
const g_revisedDate = `2023/05/25`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -3105,7 +3105,10 @@ 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] || ``;
|
|
3110
|
+
g_settings.scoreDetailCursors = g_settings.scoreDetails.map(val => `lnk${val}G`);
|
|
3111
|
+
g_settings.scoreDetailCursors.push(`btnGraph`);
|
|
3109
3112
|
|
|
3110
3113
|
// 判定位置をBackgroundのON/OFFと連動してリセットする設定
|
|
3111
3114
|
obj.jdgPosReset = setBoolVal(_dosObj.jdgPosReset, true);
|
|
@@ -4531,9 +4534,12 @@ const drawSpeedGraph = _scoreId => {
|
|
|
4531
4534
|
const context = canvas.getContext(`2d`);
|
|
4532
4535
|
drawBaseLine(context);
|
|
4533
4536
|
|
|
4537
|
+
const avgX = [0, 0];
|
|
4538
|
+
const avgSubX = [1, 1];
|
|
4534
4539
|
Object.keys(speedObj).forEach((speedType, j) => {
|
|
4535
4540
|
context.beginPath();
|
|
4536
4541
|
let preY;
|
|
4542
|
+
let avgSubFrame = playingFrame;
|
|
4537
4543
|
|
|
4538
4544
|
for (let i = 0; i < speedObj[speedType].frame.length; i++) {
|
|
4539
4545
|
const x = speedObj[speedType].frame[i] * (g_limitObj.graphWidth - 30) / playingFrame + 30;
|
|
@@ -4542,7 +4548,17 @@ const drawSpeedGraph = _scoreId => {
|
|
|
4542
4548
|
context.lineTo(x, preY);
|
|
4543
4549
|
context.lineTo(x, y);
|
|
4544
4550
|
preY = y;
|
|
4551
|
+
|
|
4552
|
+
const deltaFrame = speedObj[speedType].frame[i] - (speedObj[speedType].frame[i - 1] ?? startFrame);
|
|
4553
|
+
avgX[j] += deltaFrame * (speedObj[speedType].speed[i - 1] ?? 1);
|
|
4554
|
+
if ((speedObj[speedType].speed[i - 1] ?? 1) === 1) {
|
|
4555
|
+
avgSubFrame -= deltaFrame;
|
|
4556
|
+
} else {
|
|
4557
|
+
avgSubX[j] += deltaFrame * (speedObj[speedType].speed[i - 1]);
|
|
4558
|
+
}
|
|
4545
4559
|
}
|
|
4560
|
+
avgX[j] /= playingFrame;
|
|
4561
|
+
avgSubX[j] /= Math.max(avgSubFrame, 1);
|
|
4546
4562
|
|
|
4547
4563
|
context.lineWidth = 1;
|
|
4548
4564
|
context.strokeStyle = speedObj[speedType].strokeColor;
|
|
@@ -4557,7 +4573,9 @@ const drawSpeedGraph = _scoreId => {
|
|
|
4557
4573
|
context.fillText(speedType, lineX + 35, 218);
|
|
4558
4574
|
|
|
4559
4575
|
updateScoreDetailLabel(`Speed`, `${speedType}S`, speedObj[speedType].cnt, j, g_lblNameObj[`s_${speedType}`]);
|
|
4576
|
+
updateScoreDetailLabel(`Speed`, `avgD${speedType}`, avgSubX[j] === 1 ? `----` : `${(avgSubX[j]).toFixed(2)}x`, j + 4, g_lblNameObj[`s_avgD${speedType}`]);
|
|
4560
4577
|
});
|
|
4578
|
+
updateScoreDetailLabel(`Speed`, `avgS`, `${(avgX[0] * avgX[1]).toFixed(2)}x`, 2, g_lblNameObj.s_avg);
|
|
4561
4579
|
};
|
|
4562
4580
|
|
|
4563
4581
|
/**
|
|
@@ -4897,7 +4915,7 @@ const setDifficulty = (_initFlg) => {
|
|
|
4897
4915
|
|
|
4898
4916
|
// 速度設定 (Speed)
|
|
4899
4917
|
setSetting(0, `speed`, ` ${g_lblNameObj.multi}`);
|
|
4900
|
-
if (
|
|
4918
|
+
if (g_settings.scoreDetails.length > 0) {
|
|
4901
4919
|
drawSpeedGraph(g_stateObj.scoreId);
|
|
4902
4920
|
drawDensityGraph(g_stateObj.scoreId);
|
|
4903
4921
|
makeDifInfo(g_stateObj.scoreId);
|
|
@@ -5014,7 +5032,7 @@ const createOptionWindow = _sprite => {
|
|
|
5014
5032
|
return detailObj;
|
|
5015
5033
|
};
|
|
5016
5034
|
|
|
5017
|
-
if (
|
|
5035
|
+
if (g_settings.scoreDetails.length > 0) {
|
|
5018
5036
|
spriteList.speed.appendChild(
|
|
5019
5037
|
createCss2Button(`btnGraph`, `i`, _ => true, {
|
|
5020
5038
|
x: -25, y: -60, w: 30, h: 30, siz: g_limitObj.jdgCharaSiz, title: g_msgObj.graph,
|
|
@@ -7064,18 +7082,30 @@ const applyShuffle = (_keyNum, _shuffleGroup, _style) => {
|
|
|
7064
7082
|
* @param {number} _keyNum
|
|
7065
7083
|
* @param {array} _shuffleGroup
|
|
7066
7084
|
*/
|
|
7067
|
-
const applyMirror = (_keyNum, _shuffleGroup,
|
|
7085
|
+
const applyMirror = (_keyNum, _shuffleGroup, _swapFlg = false) => {
|
|
7086
|
+
|
|
7068
7087
|
// シャッフルグループごとにミラー
|
|
7069
7088
|
const style = structuredClone(_shuffleGroup).map(_group => _group.reverse());
|
|
7070
|
-
|
|
7071
|
-
|
|
7072
|
-
|
|
7073
|
-
|
|
7074
|
-
|
|
7075
|
-
|
|
7076
|
-
|
|
7089
|
+
let swapUseFlg = false;
|
|
7090
|
+
|
|
7091
|
+
// X-Mirror作成用の入れ替え関数
|
|
7092
|
+
// グループが4の倍数のとき、4n+1, 4n+2のみ入れ替える
|
|
7093
|
+
const swapGroupNums = (_group, _i, _divideNum) => {
|
|
7094
|
+
if (_group.length % _divideNum === 0) {
|
|
7095
|
+
swapUseFlg = true;
|
|
7096
|
+
for (let k = 0; k < _group.length / _divideNum; k++) {
|
|
7097
|
+
const swap1 = Math.floor(_divideNum * (k + 1 / 2) - 1);
|
|
7098
|
+
const swap2 = Math.ceil(_divideNum * (k + 1 / 2));
|
|
7099
|
+
[style[_i][swap1], style[_i][swap2]] = [style[_i][swap2], style[_i][swap1]];
|
|
7077
7100
|
}
|
|
7078
|
-
}
|
|
7101
|
+
}
|
|
7102
|
+
};
|
|
7103
|
+
|
|
7104
|
+
if (_swapFlg) {
|
|
7105
|
+
style.forEach((group, i) => g_settings.swapPattern.forEach(val => swapGroupNums(group, i, val)));
|
|
7106
|
+
if (!swapUseFlg) {
|
|
7107
|
+
g_stateObj.shuffle = `Mirror`;
|
|
7108
|
+
}
|
|
7079
7109
|
}
|
|
7080
7110
|
applyShuffle(_keyNum, _shuffleGroup, style);
|
|
7081
7111
|
};
|
|
@@ -10608,7 +10638,7 @@ const resultInit = _ => {
|
|
|
10608
10638
|
|
|
10609
10639
|
// ハイスコア差分計算
|
|
10610
10640
|
const assistFlg = (g_autoPlaysBase.includes(g_stateObj.autoPlay) ? `` : `-${g_stateObj.autoPlay}less`);
|
|
10611
|
-
const mirrorName = (g_stateObj.shuffle.indexOf(`Mirror`) !== -1 ?
|
|
10641
|
+
const mirrorName = (g_stateObj.shuffle.indexOf(`Mirror`) !== -1 ? `-${g_stateObj.shuffle}` : ``);
|
|
10612
10642
|
const transKeyName = (hasVal(g_keyObj[`transKey${keyCtrlPtn}`]) ? `(${g_keyObj[`transKey${keyCtrlPtn}`]})` : ``);
|
|
10613
10643
|
let scoreName = `${g_headerObj.keyLabels[g_stateObj.scoreId]}${transKeyName}${getStgDetailName('k-')}${g_headerObj.difLabels[g_stateObj.scoreId]}${assistFlg}${mirrorName}`;
|
|
10614
10644
|
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/25 (v32.2.1)
|
|
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,14 +911,13 @@ 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
|
|
|
917
919
|
g_settings.volumeNum = g_settings.volumes.length - 1;
|
|
918
920
|
g_settings.opacityNum = g_settings.opacitys.length - 1;
|
|
919
|
-
g_settings.scoreDetailCursors = g_settings.scoreDetails.map(val => `lnk${val}G`);
|
|
920
|
-
g_settings.scoreDetailCursors.push(`btnGraph`);
|
|
921
921
|
|
|
922
922
|
/**
|
|
923
923
|
* 設定画面間移動
|
|
@@ -934,7 +934,7 @@ const g_jumpSettingWindow = {
|
|
|
934
934
|
const g_shuffleFunc = {
|
|
935
935
|
'OFF': _ => true,
|
|
936
936
|
'Mirror': (keyNum, shuffleGroup) => applyMirror(keyNum, shuffleGroup),
|
|
937
|
-
'
|
|
937
|
+
'X-Mirror': (keyNum, shuffleGroup) => applyMirror(keyNum, shuffleGroup, true),
|
|
938
938
|
'Turning': (keyNum, shuffleGroup) => applyTurning(keyNum, shuffleGroup),
|
|
939
939
|
'Random': (keyNum, shuffleGroup) => applyRandom(keyNum, shuffleGroup),
|
|
940
940
|
'Random+': keyNum => applyRandom(keyNum, [[...Array(keyNum).keys()]]),
|
|
@@ -1762,7 +1762,7 @@ const g_keyObj = {
|
|
|
1762
1762
|
shuffle11i_0_0: [0, 0, 1, 0, 0, 2, 3, 3, 4, 3, 3],
|
|
1763
1763
|
shuffle12_0_0: [0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2],
|
|
1764
1764
|
shuffle13_0_0: [0, 0, 0, 0, 1, 1, 1, 1, 2, 3, 3, 3, 3],
|
|
1765
|
-
shuffle14_0_0: [
|
|
1765
|
+
shuffle14_0_0: [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2],
|
|
1766
1766
|
shuffle14i_0_0: [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 2, 2, 2],
|
|
1767
1767
|
shuffle15A_0_0: [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 2, 2, 2],
|
|
1768
1768
|
shuffle16i_0_0: [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 2, 2, 2, 2],
|
|
@@ -2635,6 +2635,10 @@ const g_lblNameObj = {
|
|
|
2635
2635
|
|
|
2636
2636
|
s_speed: `Speed`,
|
|
2637
2637
|
s_boost: `Boost`,
|
|
2638
|
+
s_avg: `Avg.`,
|
|
2639
|
+
s_avgDspeed: `AvgS)`,
|
|
2640
|
+
s_avgDboost: `AvgB)`,
|
|
2641
|
+
|
|
2638
2642
|
s_apm: `APM`,
|
|
2639
2643
|
s_time: `Time`,
|
|
2640
2644
|
s_arrow: `Arrow`,
|
|
@@ -2679,7 +2683,7 @@ const g_lblNameObj = {
|
|
|
2679
2683
|
'u_Reverse': `Reverse`,
|
|
2680
2684
|
|
|
2681
2685
|
'u_Mirror': `Mirror`,
|
|
2682
|
-
'
|
|
2686
|
+
'u_X-Mirror': `X-Mirror`,
|
|
2683
2687
|
'u_Turning': `Turning`,
|
|
2684
2688
|
'u_Random': `Random`,
|
|
2685
2689
|
'u_Random+': `Random+`,
|
|
@@ -2896,7 +2900,7 @@ const g_lang_msgObj = {
|
|
|
2896
2900
|
colorType: `矢印・フリーズアローの配色セットをあらかじめ定義されたリストから選択できます。\nType1~4選択時は色変化が自動でOFFになり、カラーピッカーから好きな色に変更できます。\n[Type0] グラデーション切替, [Type1~4] デフォルトパターン`,
|
|
2897
2901
|
imgType: `矢印・フリーズアローなどのオブジェクトの見た目を変更します。`,
|
|
2898
2902
|
colorGroup: `矢印・フリーズアロー色グループの割り当てパターンを変更します。`,
|
|
2899
|
-
shuffleGroup: `Mirror/
|
|
2903
|
+
shuffleGroup: `Mirror/X-Mirror/Turning/Random/S-Random選択時、シャッフルするグループを変更します。\n矢印の上にある同じ数字同士でシャッフルします。`,
|
|
2900
2904
|
stepRtnGroup: `矢印などノーツの種類、回転に関するパターンを切り替えます。\nあらかじめ設定されている場合のみ変更可能です。`,
|
|
2901
2905
|
|
|
2902
2906
|
pickArrow: `色番号ごとの矢印色(枠、塗りつぶし)、通常時のフリーズアロー色(枠、帯)を\nカラーピッカーから選んで変更できます。`,
|
|
@@ -2952,7 +2956,7 @@ const g_lang_msgObj = {
|
|
|
2952
2956
|
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
2957
|
imgType: `Change the appearance of sequences.`,
|
|
2954
2958
|
colorGroup: `Change the sequences color group assignment pattern.`,
|
|
2955
|
-
shuffleGroup: `Change the shuffle group when Mirror,
|
|
2959
|
+
shuffleGroup: `Change the shuffle group when Mirror, X-Mirror, Turning, Random or S-Random are selected.\nShuffle with the same numbers listed above.`,
|
|
2956
2960
|
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
2961
|
|
|
2958
2962
|
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.`,
|