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 CHANGED
@@ -4,12 +4,12 @@
4
4
  *
5
5
  * Source by tickle
6
6
  * Created : 2018/10/08
7
- * Revised : 2023/05/07
7
+ * Revised : 2023/05/21
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 32.1.0`;
12
- const g_revisedDate = `2023/05/13`;
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
- obj.scoreDetailUse = setBoolVal(_dosObj.scoreDetailUse, true);
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 (g_headerObj.scoreDetailUse) {
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 (g_headerObj.scoreDetailUse) {
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, _asymFlg = false) => {
7083
+ const applyMirror = (_keyNum, _shuffleGroup, _swapFlg = false) => {
7084
+
7068
7085
  // シャッフルグループごとにミラー
7069
7086
  const style = structuredClone(_shuffleGroup).map(_group => _group.reverse());
7070
- if (_asymFlg) {
7071
- // グループが4の倍数のとき、4n+1, 4n+2のみ入れ替える
7072
- style.forEach((group, i) => {
7073
- if (group.length % 4 === 0) {
7074
- for (let k = 0; k < group.length / 4; k++) {
7075
- [style[i][4 * k + 1], style[i][4 * k + 2]] = [style[i][4 * k + 2], style[i][4 * k + 1]];
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 ? `-Mirror` : ``);
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/07 (v32.0.0)
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`, `Asym-Mirror`, `Turning`, `Random`, `Random+`, `S-Random`, `S-Random+`],
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
- scoreDetails: [`Speed`, `Density`, `ToolDif`],
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
- 'Asym-Mirror': (keyNum, shuffleGroup) => applyMirror(keyNum, shuffleGroup, true),
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: [3, 0, 0, 0, 0, 3, 1, 2, 2, 2, 2, 2, 2, 2],
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
- 'u_Asym-Mirror': `Asym-Mirror`,
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/Asym-Mirror/Turning/Random/S-Random選択時、シャッフルするグループを変更します。\n矢印の上にある同じ数字同士でシャッフルします。`,
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, Asym-Mirror, Turning, Random or S-Random are selected.\nShuffle with the same numbers listed above.`,
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.`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "32.1.0",
3
+ "version": "32.2.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {