danoniplus 30.3.0 → 30.3.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 CHANGED
@@ -4,12 +4,12 @@
4
4
  *
5
5
  * Source by tickle
6
6
  * Created : 2018/10/08
7
- * Revised : 2023/03/01
7
+ * Revised : 2023/03/04
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 30.3.0`;
12
- const g_revisedDate = `2023/03/01`;
11
+ const g_version = `Ver 30.3.1`;
12
+ const g_revisedDate = `2023/03/04`;
13
13
  const g_alphaVersion = ``;
14
14
 
15
15
  // カスタム用バージョン (danoni_custom.js 等で指定可)
@@ -3511,7 +3511,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3511
3511
  // 通常の指定方法 (例: |shuffle8i=1,1,1,2,0,0,0,0/1,1,1,1,0,0,0,0| )の場合の取り込み
3512
3512
  tmpArray[k].split(`/`).forEach((list, m) =>
3513
3513
  g_keyObj[`${keyheader}_${k + dfPtn}_${m}`] = (list === `` ?
3514
- [...Array(g_keyObj[`color${_key}_${k + dfPtn}`].length)].fill(0) : list.split(`,`).map(n => parseInt(n, 10))));
3514
+ [...Array(g_keyObj[`chara${_key}_${k + dfPtn}`].length)].fill(0) : list.split(`,`).map(n => parseInt(n, 10))));
3515
3515
  }
3516
3516
  g_keyObj[`${keyheader}_${k + dfPtn}`] = structuredClone(g_keyObj[`${keyheader}_${k + dfPtn}_0`]);
3517
3517
  }
@@ -3563,7 +3563,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3563
3563
  Object.assign(g_keyObj[pairName], g_keyObj[`${_pairName}${tmpParams[k]}`]);
3564
3564
  } else {
3565
3565
  if (_defaultName !== ``) {
3566
- g_keyObj[pairName][_defaultName] = [...Array(g_keyObj[`color${_key}_${k + dfPtn}`].length)].fill(_defaultVal);
3566
+ g_keyObj[pairName][_defaultName] = [...Array(g_keyObj[`chara${_key}_${k + dfPtn}`].length)].fill(_defaultVal);
3567
3567
  }
3568
3568
  tmpParams[k].split(`/`).forEach(pairs => {
3569
3569
  const tmpParamPair = pairs.split(`::`);
@@ -3582,7 +3582,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3582
3582
  // キーパターンの追記 (appendX)
3583
3583
  if (setBoolVal(_dosObj[`append${newKey}`])) {
3584
3584
  for (let j = 0; ; j++) {
3585
- if (g_keyObj[`color${newKey}_${j}`] === undefined) {
3585
+ if (g_keyObj[`chara${newKey}_${j}`] === undefined) {
3586
3586
  break;
3587
3587
  }
3588
3588
  g_keyObj.dfPtnNum++;
@@ -3610,14 +3610,6 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3610
3610
 
3611
3611
  // ステップゾーン位置 (posX_Y)
3612
3612
  newKeyMultiParam(newKey, `pos`, toFloat);
3613
- if (_dosObj[`pos${newKey}`] === undefined) {
3614
- for (let k = 0; k < tmpMinPatterns; k++) {
3615
- const ptnName = `${newKey}_${k + dfPtnNum}`;
3616
- if (g_keyObj[`color${ptnName}`] !== undefined) {
3617
- g_keyObj[`pos${ptnName}`] = [...Array(g_keyObj[`color${ptnName}`].length).keys()].map(i => i);
3618
- }
3619
- }
3620
- }
3621
3613
 
3622
3614
  // 各キーの区切り位置 (divX_Y)
3623
3615
  if (_dosObj[`div${newKey}`] !== undefined) {
@@ -3629,7 +3621,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3629
3621
  if (g_keyObj[`div${tmpDivPtn[0]}`] !== undefined) {
3630
3622
  // 既定キーパターンが指定された場合、存在すればその値を適用
3631
3623
  g_keyObj[`div${ptnName}`] = g_keyObj[`div${tmpDivPtn[0]}`];
3632
- g_keyObj[`divMax${ptnName}`] = setVal(g_keyObj[`divMax${tmpDivPtn[0]}`], Math.max(...g_keyObj[`pos${ptnName}`]) + 1, C_TYP_FLOAT);
3624
+ g_keyObj[`divMax${ptnName}`] = setVal(g_keyObj[`divMax${tmpDivPtn[0]}`], undefined, C_TYP_FLOAT);
3633
3625
  } else if (!hasVal(tmpDivPtn[0]) && setIntVal(g_keyObj[`div${ptnName}`], -1) !== -1) {
3634
3626
  // カスタムキー側のdivXが未定義だが、すでに初期設定で定義済みの場合はスキップ
3635
3627
  continue;
@@ -3640,13 +3632,9 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3640
3632
  }
3641
3633
  }
3642
3634
  }
3643
- // divX_Yが未指定の場合はposX_Yを元に適用
3635
+ // posX_Y, divX_Y, divMaxX_Yが未指定の場合はcharaX_Yを元に適用
3644
3636
  for (let k = 0; k < tmpMinPatterns; k++) {
3645
- const ptnName = `${newKey}_${k + dfPtnNum}`;
3646
- if (g_keyObj[`div${ptnName}`] === undefined) {
3647
- g_keyObj[`div${ptnName}`] = Math.max(...g_keyObj[`pos${ptnName}`]) + 1;
3648
- g_keyObj[`divMax${ptnName}`] = g_keyObj[`div${ptnName}`];
3649
- }
3637
+ setKeyDfVal(`${newKey}_${k + dfPtnNum}`);
3650
3638
  }
3651
3639
 
3652
3640
  // ステップゾーン間隔 (blankX_Y)
@@ -3670,7 +3658,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3670
3658
  // 特に指定が無い場合はcolorX_Yの配列長で決定
3671
3659
  for (let k = 0; k < tmpMinPatterns; k++) {
3672
3660
  const ptnName = `${newKey}_${k + dfPtnNum}`;
3673
- g_keyObj[`shuffle${ptnName}_0`] = [...Array(g_keyObj[`color${ptnName}`].length)].fill(0);
3661
+ g_keyObj[`shuffle${ptnName}_0`] = [...Array(g_keyObj[`chara${ptnName}`].length)].fill(0);
3674
3662
  g_keyObj[`shuffle${ptnName}`] = structuredClone(g_keyObj[`shuffle${ptnName}_0`]);
3675
3663
  }
3676
3664
  }
@@ -3690,6 +3678,22 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3690
3678
  return keyExtraList;
3691
3679
  };
3692
3680
 
3681
+ /**
3682
+ * キーパターンのデフォルト値設定
3683
+ * @param {string} _ptnName
3684
+ */
3685
+ const setKeyDfVal = _ptnName => {
3686
+ if (g_keyObj[`pos${_ptnName}`] === undefined) {
3687
+ g_keyObj[`pos${_ptnName}`] = [...Array(g_keyObj[`chara${_ptnName}`].length).keys()].map(i => i);
3688
+ }
3689
+ if (g_keyObj[`div${_ptnName}`] === undefined) {
3690
+ g_keyObj[`div${_ptnName}`] = Math.max(...g_keyObj[`pos${_ptnName}`]) + 1;
3691
+ }
3692
+ if (g_keyObj[`divMax${_ptnName}`] === undefined) {
3693
+ g_keyObj[`divMax${_ptnName}`] = Math.max(...g_keyObj[`pos${_ptnName}`]) + 1;
3694
+ }
3695
+ };
3696
+
3693
3697
  /*-----------------------------------------------------------*/
3694
3698
  /* Scene : TITLE [melon] */
3695
3699
  /*-----------------------------------------------------------*/
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2023/03/01 (v30.3.0)
8
+ * Revised : 2023/03/04 (v30.3.1)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -1583,7 +1583,6 @@ const g_keyObj = {
1583
1583
 
1584
1584
  // シャッフルグループ(パターン3)
1585
1585
  shuffle15A_0_2: [0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 3, 2, 2, 2],
1586
- shuffle15B_0_2: [0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 3, 2, 2, 2],
1587
1586
 
1588
1587
  // 基本パターン (矢印回転、AAキャラクタ)
1589
1588
  // - AAキャラクタの場合、キャラクタ名を指定
@@ -1622,63 +1621,32 @@ const g_keyObj = {
1622
1621
  stepRtn8_2: [`onigiri`, 0, 30, 60, 90, 120, 150, 180],
1623
1622
 
1624
1623
  // 各キーの区切り位置
1625
- div5_0: 5,
1626
- div7_0: 7,
1627
- div7i_0: 7,
1628
- div8_0: 8,
1629
- div9A_0: 9,
1630
- div9B_0: 9,
1631
1624
  div9i_0: 6,
1632
1625
  div11_0: 6,
1633
1626
  div11L_0: 6,
1634
1627
  div11W_0: 6,
1635
- div11i_0: 11,
1636
1628
  div12_0: 5,
1637
1629
  div13_0: 8,
1638
1630
  div14_0: 7,
1639
1631
  div14i_0: 8,
1640
1632
  div15A_0: 8,
1641
1633
  div16i_0: 8,
1642
- div17_0: 17,
1643
1634
  div23_0: 12,
1644
1635
 
1645
- div5_1: 5,
1646
- div8_1: 8,
1647
- div9i_1: 9,
1648
1636
  div17_1: 9,
1649
1637
 
1650
- div5_2: 5,
1651
- div8_2: 8,
1652
-
1653
1638
  // 各キーの位置関係
1654
- pos5_0: [0, 1, 2, 3, 4],
1655
- pos7_0: [0, 1, 2, 3, 4, 5, 6],
1656
- pos7i_0: [0, 1, 2, 3, 4, 5, 6],
1657
- pos8_0: [0, 1, 2, 3, 4, 5, 6, 7],
1658
- pos9A_0: [0, 1, 2, 3, 4, 5, 6, 7, 8],
1659
- pos9B_0: [0, 1, 2, 3, 4, 5, 6, 7, 8],
1660
1639
  pos9i_0: [2, 3, 4, 5, 6, 7, 8, 9, 10],
1661
1640
  pos11_0: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
1662
1641
  pos11L_0: [0, 1, 2, 3, 6, 7, 8, 9, 10, 11, 12],
1663
1642
  pos11W_0: [0, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12],
1664
- pos11i_0: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
1665
1643
  pos12_0: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
1666
1644
  pos13_0: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
1667
1645
  pos14_0: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
1668
- pos14i_0: [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15],
1669
- pos15A_0: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
1646
+ pos14i_0: [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14],
1670
1647
  pos16i_0: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
1671
- pos17_0: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
1672
1648
  pos23_0: [0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26],
1673
1649
 
1674
- pos5_1: [0, 1, 2, 3, 4],
1675
- pos8_1: [0, 1, 2, 3, 4, 5, 6, 7],
1676
- pos9i_1: [0, 1, 2, 3, 4, 5, 6, 7, 8],
1677
- pos17_1: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
1678
-
1679
- pos5_2: [0, 1, 2, 3, 4],
1680
- pos8_2: [0, 1, 2, 3, 4, 5, 6, 7],
1681
-
1682
1650
  // 基本パターン (キーコンフィグ)
1683
1651
  // - 順番はchara, stepRtnと対応している。
1684
1652
  // - 多次元配列内はステップに対応するキーコードを示す。カンマ区切りで複数指定できる。
@@ -1968,6 +1936,11 @@ const g_keyObj = {
1968
1936
 
1969
1937
  };
1970
1938
 
1939
+ // posX_Y, divX_Y, divMaxX_Yが未定義のときに0からの連番で補完する処理 (charaX_Yが定義されていることが前提)
1940
+ Object.keys(g_keyObj).filter(val => val.startsWith(`chara`)).forEach(charaPtn => {
1941
+ setKeyDfVal(charaPtn.slice(`chara`.length));
1942
+ });
1943
+
1971
1944
  // キーパターンのコピーリスト
1972
1945
  // ・コピー先:コピー元の順に指定する
1973
1946
  // ・上から順に処理する
@@ -2049,6 +2022,7 @@ Object.keys(g_copyKeyPtn).forEach(keyPtnTo => {
2049
2022
  copyKeyPtn(`assistPos`);
2050
2023
 
2051
2024
  copyKeyPtnVal(`div`);
2025
+ copyKeyPtnVal(`divMax`);
2052
2026
  copyKeyPtnVal(`blank`);
2053
2027
  copyKeyPtnVal(`scale`);
2054
2028
  copyKeyPtnVal(`keyRetry`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "30.3.0",
3
+ "version": "30.3.1",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {