danoniplus 38.1.2 → 38.2.2

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/README.md CHANGED
@@ -1,7 +1,5 @@
1
1
  # Dancing☆Onigiri (CW Edition)
2
2
 
3
- [![CodeFactor](https://www.codefactor.io/repository/github/cwtickle/danoniplus/badge)](https://www.codefactor.io/repository/github/cwtickle/danoniplus)
4
- [![Codacy Badge](https://app.codacy.com/project/badge/Grade/1213a18348c34328ac4f10c9e8a2b987)](https://app.codacy.com/gh/cwtickle/danoniplus/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
5
3
  [![CodeQL](https://github.com/cwtickle/danoniplus/workflows/CodeQL/badge.svg)](https://github.com/cwtickle/danoniplus/actions?query=workflow%3ACodeQL)
6
4
  [![Discord](https://img.shields.io/discord/698460971231870977?style=flat&logo=discord&logoColor=%23ffffff&label=Discord&labelColor=%236666ff&color=%23000066)](https://discord.gg/YVWUdUGyMy)
7
5
  [![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/cwtickle/danoniplus?sort=semver)](https://github.com/cwtickle/danoniplus/security/policy)
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/19
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.2`;
12
+ const g_revisedDate = `2024/12/19`;
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);
@@ -8278,22 +8274,14 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
8278
8274
  // 矢印番号の組み立て
8279
8275
  const colorVals = [];
8280
8276
  replaceStr(patternStr[0], g_escapeStr.targetPatternName)?.split(`/`)?.forEach(val => {
8281
- if (val.startsWith('g')) {
8282
- // g付きの場合は矢印グループから対象の矢印番号を検索
8283
- const groupVal = setIntVal(val.slice(1));
8284
- for (let j = 0; j < keyNum; j++) {
8285
- if (g_keyObj[`color${_keyCtrlPtn}`][j] === groupVal) {
8286
- colorVals.push(j);
8287
- }
8288
- }
8289
- } else if (val.indexOf(`...`) > 0) {
8277
+ if (val.indexOf(`...`) > 0) {
8290
8278
  // 範囲指定表記の補完 例. 0...3 -> 0/1/2/3
8291
8279
  const [valMin, valMax] = [val.split(`...`)[0], val.split(`...`)[1]].map(val => setIntVal(val));
8292
8280
  for (let k = valMin; k <= valMax; k++) {
8293
- colorVals.push(setIntVal(k));
8281
+ colorVals.push(String(k));
8294
8282
  }
8295
8283
  } else {
8296
- colorVals.push(setIntVal(val));
8284
+ colorVals.push(val);
8297
8285
  }
8298
8286
  });
8299
8287
 
@@ -9211,6 +9199,9 @@ const getFrzLength = (_speedOnFrame, _startFrame, _endFrame) => {
9211
9199
 
9212
9200
  /**
9213
9201
  * キーパターン(デフォルト)に対応する矢印番号を格納
9202
+ * - 色変化、矢印・フリーズアローモーション、スクロール変化で
9203
+ * 矢印レーンの番号を実際のキーパターンに対応する番号に置き換える際に使用
9204
+ * - 例: [0, 1, 2, 3, 4] -> [4, 0, 1, 2, 3]
9214
9205
  */
9215
9206
  const convertReplaceNums = () => {
9216
9207
  const tkObj = getKeyInfo();
@@ -9288,7 +9279,17 @@ const pushColors = (_header, _frame, _val, _colorCd, _allFlg, _pattern = ``) =>
9288
9279
  allUseTypes.push(`Frz`);
9289
9280
  }
9290
9281
  // 色変化情報の格納
9291
- baseHeaders.forEach(baseHeader => pushColor(baseHeader, g_workObj.replaceNums[_val] + addAll));
9282
+ if (_val.startsWith('g')) {
9283
+ // g付きの場合は矢印グループから対象の矢印番号を検索
9284
+ const groupVal = setIntVal(_val.slice(1));
9285
+ for (let j = 0; j < tkObj.keyNum; j++) {
9286
+ if (g_keyObj[`color${tkObj.keyCtrlPtn}`][j] === groupVal) {
9287
+ baseHeaders.forEach(baseHeader => pushColor(baseHeader, j + addAll));
9288
+ }
9289
+ }
9290
+ } else {
9291
+ baseHeaders.forEach(baseHeader => pushColor(baseHeader, g_workObj.replaceNums[setIntVal(_val)] + addAll));
9292
+ }
9292
9293
  };
9293
9294
 
9294
9295
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "38.1.2",
3
+ "version": "38.2.2",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {