danoniplus 38.1.1 → 38.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.
Files changed (2) hide show
  1. package/js/danoni_main.js +30 -33
  2. 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/12/07
7
+ * Revised : 2024/12/14
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 38.1.1`;
12
- const g_revisedDate = `2024/12/07`;
11
+ const g_version = `Ver 38.2.0`;
12
+ const g_revisedDate = `2024/12/14`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -8054,40 +8054,36 @@ const applySRandom = (_keyNum, _shuffleGroup, _arrowHeader, _frzHeader) => {
8054
8054
  // 通常矢印の配置
8055
8055
  const allArrows = _group.map(_key => g_scoreObj[`${_arrowHeader}Data`][_key]).flat();
8056
8056
  allArrows.sort((_a, _b) => _a - _b);
8057
- let prev2Num = 0, prevNum = 0;
8057
+ let prev2Num = 0, prevNum = 0, sameFlg = true;
8058
8058
  allArrows.forEach(_arrow => {
8059
8059
 
8060
8060
  // 直前の矢印のフレーム数を取得
8061
- if (prev2Num !== _arrow) {
8062
- if (prevNum !== _arrow) {
8063
- prev2Num = prevNum;
8064
- prevNum = _arrow;
8065
- }
8066
- }
8061
+ sameFlg = true;
8062
+ if (prev2Num !== _arrow && prevNum !== _arrow) {
8063
+ prev2Num = prevNum;
8064
+ prevNum = _arrow;
8065
+ sameFlg = false;
8066
+ }
8067
+
8068
+ const getFreeSpaces = ({ scatterFrame = 0, frzFlg = false, prevFlg = false } = {}) =>
8069
+ _group.filter(_key =>
8070
+ // 通常矢印と重ならない
8071
+ tmpArrowData[_key].find(_other => _arrow >= _other - scatterFrame && _arrow <= _other + scatterFrame) === undefined
8072
+ // フリーズと重ならない
8073
+ && (!frzFlg || tmpFrzData[_key].find(_freeze => _arrow >= _freeze.begin - scatterFrame && _arrow <= _freeze.end + scatterFrame) === undefined)
8074
+ // 直前の矢印と重ならない
8075
+ && (!prevFlg || tmpArrowData[_key].find(_other => prev2Num === _other) === undefined)
8076
+ );
8067
8077
 
8068
8078
  // 置ける場所を検索
8069
- const freeSpacesFlat = _group.filter(_key =>
8070
- // フリーズと重ならない (前後10フレーム)
8071
- tmpFrzData[_key].find(_freeze => _arrow >= _freeze.begin - scatterFrame && _arrow <= _freeze.end + scatterFrame) === undefined
8072
- // 通常矢印と重ならない (前後10フレーム)
8073
- && tmpArrowData[_key].find(_other => _arrow >= _other - scatterFrame && _arrow <= _other + scatterFrame) === undefined
8074
- // 直前の矢印と重ならない
8075
- && tmpArrowData[_key].find(_other => prev2Num === _other) === undefined
8076
- );
8077
- const freeSpaces = _group.filter(_key =>
8078
- // フリーズと重ならない
8079
- tmpFrzData[_key].find(_freeze => _arrow >= _freeze.begin && _arrow <= _freeze.end) === undefined
8080
- // 通常矢印と重ならない
8081
- && tmpArrowData[_key].find(_other => _arrow === _other) === undefined
8082
- );
8083
- const freeSpacesAlt = _group.filter(_key =>
8084
- // 通常矢印と重ならない
8085
- tmpArrowData[_key].find(_other => _arrow === _other) === undefined
8086
- );
8079
+ const freeSpacesFlat = getFreeSpaces({ scatterFrame, frzFlg: true, prevFlg: true });
8080
+ const freeSpaces = getFreeSpaces({ frzFlg: true });
8081
+ const freeSpacesAlt = getFreeSpaces();
8082
+
8087
8083
  // ランダムに配置
8088
8084
  let currentFreeSpaces = freeSpaces.length > 0 ? freeSpaces : freeSpacesAlt;
8089
8085
  if (g_stateObj.shuffle.startsWith(`Scatter`)) {
8090
- currentFreeSpaces = freeSpacesFlat.length > 0 ? freeSpacesFlat : currentFreeSpaces;
8086
+ currentFreeSpaces = freeSpacesFlat.length > 0 && !sameFlg ? freeSpacesFlat : currentFreeSpaces;
8091
8087
  }
8092
8088
  const random = Math.floor(Math.random() * currentFreeSpaces.length);
8093
8089
  tmpArrowData[currentFreeSpaces[random]].push(_arrow);
@@ -8809,7 +8805,7 @@ const getBrakeTrace = _frms => {
8809
8805
  const getFountainTrace = (_frms, _spd) => {
8810
8806
  const minj = C_MOTION_STD_POS + 1;
8811
8807
  const maxj = C_MOTION_STD_POS + Math.ceil(400 / _spd) + 1;
8812
- const maxMotionFrm = Math.max(maxj, C_MOTION_STD_POS + 200);
8808
+ const maxMotionFrm = Math.max(maxj, C_MOTION_STD_POS + g_sHeight / 2);
8813
8809
  const diff = 50 / (maxj - minj);
8814
8810
  const factor = 0.5 + _spd / 40;
8815
8811
 
@@ -8910,6 +8906,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
8910
8906
  return;
8911
8907
  }
8912
8908
 
8909
+ const calcInitBoostY = _frm => sumData(g_workObj.motionOnFrames.filter((val, j) => j <= g_workObj.motionFrame[_frm]));
8913
8910
  const camelHeader = toCapitalize(_header);
8914
8911
  const setcnt = (_frzFlg ? 2 : 1);
8915
8912
  if (_frzFlg && _data.length % 2 !== 0) {
@@ -8931,7 +8928,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
8931
8928
  g_workObj.initY[frmPrev] = tmpObj.startY;
8932
8929
  g_workObj.arrivalFrame[frmPrev] = tmpObj.arrivalFrm;
8933
8930
  g_workObj.motionFrame[frmPrev] = tmpObj.motionFrm;
8934
- g_workObj.initBoostY[frmPrev] = sumData(g_workObj.motionOnFrames.filter((val, j) => j < g_workObj.motionFrame[frmPrev]));
8931
+ g_workObj.initBoostY[frmPrev] = calcInitBoostY(frmPrev);
8935
8932
 
8936
8933
  if (_frzFlg) {
8937
8934
  g_workObj[`mk${camelHeader}Length`][_j] = [];
@@ -8960,7 +8957,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
8960
8957
  g_workObj.initY[tmpFrame] = g_workObj.initY[frmPrev];
8961
8958
  g_workObj.arrivalFrame[tmpFrame] = g_workObj.arrivalFrame[frmPrev];
8962
8959
  g_workObj.motionFrame[tmpFrame] = g_workObj.motionFrame[frmPrev];
8963
- g_workObj.initBoostY[tmpFrame] = sumData(g_workObj.motionOnFrames.filter((val, j) => j < g_workObj.motionFrame[frmPrev]));
8960
+ g_workObj.initBoostY[tmpFrame] = calcInitBoostY(tmpFrame);
8964
8961
 
8965
8962
  } else {
8966
8963
 
@@ -8977,7 +8974,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
8977
8974
  g_workObj.initY[frmPrev] = tmpObj.startY;
8978
8975
  g_workObj.arrivalFrame[frmPrev] = tmpObj.arrivalFrm;
8979
8976
  g_workObj.motionFrame[frmPrev] = tmpObj.motionFrm;
8980
- g_workObj.initBoostY[frmPrev] = sumData(g_workObj.motionOnFrames.filter((val, j) => j < g_workObj.motionFrame[frmPrev]));
8977
+ g_workObj.initBoostY[frmPrev] = calcInitBoostY(frmPrev);
8981
8978
  }
8982
8979
 
8983
8980
  // 出現タイミングを保存
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "38.1.1",
3
+ "version": "38.2.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {