danoniplus 38.1.2 → 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 +25 -29
  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.2`;
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "38.1.2",
3
+ "version": "38.2.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {