danoniplus 35.1.0 → 35.3.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 : 2024/02/03
7
+ * Revised : 2024/02/16
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 35.1.0`;
12
- const g_revisedDate = `2024/02/03`;
11
+ const g_version = `Ver 35.3.0`;
12
+ const g_revisedDate = `2024/02/16`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -3699,6 +3699,41 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3699
3699
  makeBaseArray(_str.split(`/`).map(n => getKeyCtrlVal(n)), g_keyObj.minKeyCtrlNum, 0);
3700
3700
  const toSplitArrayStr = _str => _str.split(`/`).map(n => n);
3701
3701
 
3702
+ // 略記記法を元の文字列に復元後、配列に変換 (1...3,5...7 -> 1,2,3,5,6,7)
3703
+ const toOriginalArray = (_val, _func) => _val?.split(`,`).map(n => _func(n)).join(`,`).split(`,`);
3704
+
3705
+ /**
3706
+ * 略記記法を元の文字列に変換 (1...5 -> 1,2,3,4,5 / 3...+4 -> 3,4,5,6,7)
3707
+ * @param {string} _str
3708
+ */
3709
+ const toFloatStr = _str => {
3710
+ const nums = _str?.split(`...`);
3711
+ const bottomMark = nums[0].startsWith(`b`) ? `b` : ``;
3712
+ const [startN, endN] = [parseFloat(bottomMark === `b` ? nums[0].slice(1) : nums[0]), parseFloat(nums[1])];
3713
+
3714
+ if (nums.length === 2 && !isNaN(startN) && !isNaN(endN)) {
3715
+ const endN2 = nums[1].startsWith(`+`) ? startN + endN : endN;
3716
+ const arr = [];
3717
+ for (let k = startN; k <= endN2; k++) {
3718
+ arr.push(`${bottomMark}${k}`);
3719
+ }
3720
+ return arr.join(`,`);
3721
+ } else {
3722
+ return _str;
3723
+ }
3724
+ };
3725
+
3726
+ /**
3727
+ * 略記記法を元の文字列に変換 (1@:5 -> 1,1,1,1,1 / onigiri!giko!c@:2 -> onigiri,giko,c,onigiri,giko,c)
3728
+ * @param {string} _str
3729
+ */
3730
+ const toSameValStr = _str => {
3731
+ const nums = _str?.split(`@:`);
3732
+ const groupStr = toFloatStr(nums[0]).split(`!`).join(`,`);
3733
+ return nums.length === 2 && !isNaN(parseInt(nums[1])) ?
3734
+ [...Array(Math.floor(parseInt(nums[1])))].fill(groupStr).join(`,`) : groupStr;
3735
+ };
3736
+
3702
3737
  /**
3703
3738
  * キーパターン(相対パターン)をキーパターン(実際のパターン番号)に変換
3704
3739
  * 例) 12_(0) -> 12_4
@@ -3751,8 +3786,9 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3751
3786
  continue;
3752
3787
  }
3753
3788
  // |keyCtrl9j=Tab,7_0,Enter| -> |keyCtrl9j=Tab,S,D,F,Space,J,K,L,Enter| のように補完
3789
+ // |pos9j=0..4,6..9| -> |pos9j=0,1,2,3,4,6,7,8,9|
3754
3790
  g_keyObj[`${keyheader}_${k + dfPtn}`] =
3755
- tmpArray[k].split(`,`).map(n =>
3791
+ toOriginalArray(tmpArray[k], toSameValStr).map(n =>
3756
3792
  structuredClone(g_keyObj[`${_name}${getKeyPtnName(n)}`]) ?? [_convFunc(n)]
3757
3793
  ).flat();
3758
3794
  if (baseCopyFlg) {
@@ -3803,7 +3839,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3803
3839
  // 通常の指定方法 (例: |shuffle8i=1,1,1,2,0,0,0,0/1,1,1,1,0,0,0,0| )の場合の取り込み
3804
3840
  // 部分的にキーパターン指定があった場合は既存パターンを展開 (例: |shuffle9j=2,7_0_0,2|)
3805
3841
  g_keyObj[`${keyheader}_${k + dfPtn}_${ptnCnt}`] =
3806
- makeBaseArray(list.split(`,`).map(n =>
3842
+ makeBaseArray(toOriginalArray(list, toSameValStr).map(n =>
3807
3843
  structuredClone(g_keyObj[`${_name}${getKeyPtnName(n)}`]) ??
3808
3844
  [isNaN(parseInt(n)) ? n : parseInt(n, 10)]
3809
3845
  ).flat(), g_keyObj[`${g_keyObj.defaultProp}${_key}_${k + dfPtn}`].length, 0);
@@ -3879,7 +3915,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3879
3915
  // 部分的にキーパターン指定があった場合は既存パターンを展開 (例: |scroll9j=Cross::1,7_0,1|)
3880
3916
  const tmpParamPair = pairs.split(`::`);
3881
3917
  g_keyObj[pairName][tmpParamPair[0]] =
3882
- makeBaseArray(tmpParamPair[1]?.split(`,`).map(n =>
3918
+ makeBaseArray(toOriginalArray(tmpParamPair[1], toSameValStr)?.map(n =>
3883
3919
  structuredClone(g_keyObj[`${_pairName}${getKeyPtnName(n)}`]?.[tmpParamPair[0]]) ??
3884
3920
  [n === `-` ? -1 : parseInt(n, 10)]
3885
3921
  ).flat(), g_keyObj[`${g_keyObj.defaultProp}${_key}_${k + dfPtn}`].length, _defaultVal);
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2024/01/28 (v35.0.0)
8
+ * Revised : 2024/02/08 (v35.2.1)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -1793,6 +1793,13 @@ const g_keyObj = {
1793
1793
  chara5_2: [`left`, `down`, `space`, `up`, `right`],
1794
1794
  chara8_2: [`sleft`, `left`, `leftdia`, `down`, `space`, `up`, `rightdia`, `right`],
1795
1795
 
1796
+ // 頻度の高い譜面データ名パターン
1797
+ // 後で chara4A, chara4A_a, chara4A_b, ... に変換する
1798
+ ptchara4A: [`left`, `down`, `up`, `right`],
1799
+ ptchara3S: [`left`, `leftdia`, `down`],
1800
+ ptchara3J: [`up`, `rightdia`, `right`],
1801
+ ptchara7: [`left`, `leftdia`, `down`, `space`, `up`, `rightdia`, `right`],
1802
+
1796
1803
  // ColorGroup - 1
1797
1804
  // - 同じ数字が同じグループになる
1798
1805
  color5_0_0: [0, 0, 0, 0, 2],
@@ -1930,6 +1937,12 @@ const g_keyObj = {
1930
1937
  // ShapeGroup - 3 (矢印回転、AAキャラクタ)
1931
1938
  stepRtn17_0_2: [45, 45, 0, 0, -45, -45, -90, -90, `onigiri`, 90, 90, 135, 135, 180, 180, 225, 225],
1932
1939
 
1940
+ // 頻度の高い部分ShapeGroupの定義
1941
+ stepRtn4A: [0, -90, 90, 180],
1942
+ stepRtn3S: [0, -45, -90],
1943
+ stepRtn3J: [90, 135, 180],
1944
+ stepRtn3Z: [`giko`, `onigiri`, `iyo`],
1945
+
1933
1946
  // 各キーの区切り位置
1934
1947
  // - 未指定の場合は下段への折り返し無し
1935
1948
  div9i_0: 6,
@@ -2008,6 +2021,17 @@ const g_keyObj = {
2008
2021
 
2009
2022
  keyCtrl8_5: [[`Shift`], [`Z`], [`S`], [`X`, `C`], [`D`, `F`], [`V`], [`G`], [`B`]],
2010
2023
 
2024
+ // 頻度の高い部分キーコンフィグの定義
2025
+ keyCtrl4A: [[`Left`], [`Down`], [`Up`], [`Right`]],
2026
+ keyCtrl4S: [[`S`], [`D`], [`E`, `R`], [`F`]],
2027
+ keyCtrl4J: [[`J`], [`K`], [`I`, `O`], [`L`]],
2028
+ keyCtrl4W: [[`W`], [`E`], [`D3`, `D4`], [`R`]],
2029
+ keyCtrl4U: [[`U`], [`I`], [`D8`, `D9`], [`O`]],
2030
+ keyCtrl3S: [[`S`], [`D`], [`F`]],
2031
+ keyCtrl3J: [[`J`], [`K`], [`L`]],
2032
+ keyCtrl3W: [[`W`], [`E`], [`R`]],
2033
+ keyCtrl3Z: [[`Z`], [`X`], [`C`]],
2034
+
2011
2035
  // 隣接するステップゾーン間の距離
2012
2036
  blank: 55,
2013
2037
  blank_def: 55,
@@ -2368,6 +2392,13 @@ Object.keys(g_copyKeyPtn).forEach(keyPtnTo => {
2368
2392
  }
2369
2393
  });
2370
2394
 
2395
+ // 頻度の高い譜面データ名の自動生成 (left -> aleft, bleft, ..., zleft を生成)
2396
+ Object.keys(g_keyObj).filter(val => val.startsWith(`ptchara`)).forEach(charaPtn => {
2397
+ g_keyObj[`${charaPtn.slice(2)}`] = g_keyObj[charaPtn].concat();
2398
+ [...Array(26)].map((a, b) => (10 + b).toString(36)).forEach(alphabet =>
2399
+ g_keyObj[`${charaPtn.slice(2)}_${alphabet}`] = g_keyObj[charaPtn].map(str => `${alphabet}${str}`));
2400
+ });
2401
+
2371
2402
  // デフォルト配列のコピー (g_keyObj.aaa_X から g_keyObj.aaa_Xd を作成)
2372
2403
  // keyCtrlX_Yについて1キーにつき2キー割り当てできるように配列を補完
2373
2404
  const keyCtrlName = Object.keys(g_keyObj).filter(val => val.startsWith(`keyCtrl`));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "35.1.0",
3
+ "version": "35.3.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {