danoniplus 27.4.0 → 27.6.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.
@@ -38,8 +38,8 @@ a:hover { color:#FF9900; text-decoration: underline; }
38
38
  <input type="hidden" name="dos" id="dos" value='
39
39
  |musicTitle=Stormy wing<br>2019.3.23,SHIKI,http://shiki2.sakura.ne.jp/|
40
40
  |difData=7,Normal,3.5,70,2,7$6,Extra,3.5,70,2,7$8|
41
- |setColor=0x99ffff,0xCCCC33,0xFFFFFF,0xff0066|
42
- |frzColor=0x66ffff,0x6666ff,0xffff66,0xffff66|
41
+ |setColor=#99ffff,#CCCC33,#FFFFFF,#ff0066|
42
+ |frzColor=#66ffff,#6666ff,#ffff66,#ffff66|
43
43
  |startFrame=0|blankFrame=157|
44
44
  |musicUrl=nosound.mp3|
45
45
  |blankFrame=200|
@@ -35,11 +35,31 @@ a:hover { color:#FF9900; text-decoration: underline; }
35
35
  <input type="hidden" name="dos" id="dos" value='
36
36
 
37
37
  |musicTitle=twinkle star,えむ,http://em--mk.xrea.bz/index.htm|
38
- |difData=11,Normal,3.5,x,2,7$11,Hard,3.5,75,2,7$12,Hard$5,Easy,1.5,75,1,5$7,Normal,2,5,1,5$7i,易しい,2,5,1,5$8,Normal+,2.75,75,1,5$9A,SemiHard,2.75,75,1,5$9B,Hard,2.75,75,1,5$9i,Enjoyable,2.75,75,1,5$11,Normal,3.5,75,1,5$11L,Normal+,3.25,75,1,5$12,Hard,3.75,75,1,5$14,Hard+,4,75,1,5$17,Very Hard,4.5,75,1,5$11i,Very Hard,4.5,75,1,5$14i,Very Hard,4.5,75,1,5$16i,Extra,4.5,75,1,5$15B,Very Hard,4.5,75,1,5$13,Hard,4.5,75,1,5|
38
+ |difData=
39
+ 11,Normal,3.5,x,2,7
40
+ 11,Hard,3.5,75,2,7
41
+ 12,Hard
42
+ 5,Easy,1.5,75,1,5
43
+ 7,Normal,2,5,1,5
44
+ 7i,易しい,2,5,1,5
45
+ 8,Normal+,2.75,75,1,5
46
+ 9A,SemiHard,2.75,75,1,5
47
+ 9B,Hard,2.75,75,1,5
48
+ 9i,Enjoyable,2.75,75,1,5
49
+ 11,Normal,3.5,75,1,5
50
+ 11L,Normal+,3.25,75,1,5
51
+ 12,Hard,3.75,75,1,5
52
+ 14,Hard+,4,75,1,5
53
+ 17,Very Hard,4.5,75,1,5
54
+ 11i,Very Hard,4.5,75,1,5
55
+ 14i,Very Hard,4.5,75,1,5
56
+ 16i,Extra,4.5,75,1,5
57
+ 15B,Very Hard,4.5,75,1,5
58
+ 13,Hard,4.5,75,1,5
59
+ |
39
60
  |difSelectorUse=true|
40
- |setColor=0xcc99ff,0xffccff,0xffffff,0xffff99,0xff9966|
41
- |frzColor=0x00ffff,0x6600ff,0xffff66,0xffff66|
42
- |scoreLabel=11-070-1,11-070-2|
61
+ |setColor=#cc99ff,#ffccff,#ffffff,#ffff99,#ff9966|
62
+ |frzColor=#00ffff,#6600ff,#ffff66,#ffff66|
43
63
  |dummyId=2$1$5|
44
64
  |startFrame=0|blankFrame=270|
45
65
  |musicUrl=nosound.mp3|
@@ -41,9 +41,9 @@ a:hover { color:#FF9900; text-decoration: underline; }
41
41
 
42
42
  |musicTitle=dreamin&#39; -happycore version-,AOiRO_Manbow,https://cw7.sakura.ne.jp/rdart/?artistId=37|
43
43
  |difData=7,tickle,3$7,イズデラ,3$7i,t24,3$7,Air,3$7,MFV2,3$7i,ch3cooh,3$7,メイヂ,3$7,T/R,3$7,max,3|
44
- |setColor2=0xffff66,0xcccc99,0xffffff,0xffff99,0xff9966|
45
- |setColor=0x999900,0x666600,0x000000,0xffff99,0xff9966|
46
- |frzColor=0x00ffff,0x6600ff|
44
+ |setColor2=#ffff66,#cccc99,#ffffff,#ffff99,#ff9966|
45
+ |setColor=#999900,#666600,#000000,#ffff99,#ff9966|
46
+ |frzColor=#00ffff,#6600ff|
47
47
  |startFrame=0|blankFrame=142|
48
48
  |musicUrl=nosound.mp3|skinType=skyblue|settingType=(..)tickle|
49
49
  |titlesize=38|
@@ -3,19 +3,27 @@ function externalDosInit() {
3
3
  g_externalDos = `
4
4
 
5
5
  |musicTitle=Combative Instinct�U,Trial,http://trialmsc.com/|
6
- |difData=14,Easy,3.5,x,10,5,50$14,Normal,2.5,70,2,5$9A,Normal,2,70,3,7$7i$5,Hard,2.5,70,2,5$11L,Hard,3.5,70,2,5$12,Hard,3.5,80,2,5|
7
- |setColor=0x6666ff,0x99ffff,0xffffff,0xffff99,0xff9966|
8
- |frzColor=0x00ffff,0x6600ff,0xffff66,0xffff66|
6
+ |difData=
7
+ 14,Easy,3.5,x,10,5,50
8
+ 14,Normal,2.5,70,2,5
9
+ 9A,Normal,2,70,3,7
10
+ 7i
11
+ 5,Hard,2.5,70,2,5
12
+ 11L,Hard,3.5,70,2,5
13
+ 12,Hard,3.5,80,2,5
14
+ |
15
+ |setColor=#6666ff,#99ffff,#ffffff,#ffff99,#ff9966|
16
+ |frzColor=#00ffff,#6600ff,#ffff66,#ffff66|
9
17
  |scoreLabel=283-1,283-2|
10
18
  |startFrame=0|fadeFrame=5847$5847|endFrame=$7200$3600|
11
19
  |gaugeNormal=$80,1,7,40|
12
20
  |gaugeEasy=$50,3,5,40$50,3,5,40$$70,3,5,10$60,3,9,35$90,4,9,35|
13
21
  |musicUrl=nosound.mp3|
14
22
 
15
- |oni_data=2474,3350,3540,4108,5648|left_data=248,437,2190,2521,2545,2569,3374,3398,4274|leftdia_data=627,1764,2711,2735,2758,3232,3469,3492,4321,4369,5269,5292,5316|down_data=342,532,1953,2048,2237,2616,2640,2664,3327,3398,4132,4203,4250|space_data=674,769,1811,3256,3516,5364,5387,5411|up_data=295,485,2332,3303,3445,4156,4227,4298|rightdia_data=721,1858,2142,2379,3185,3492,4416,5340,5435|right_data=390,579,3279,3421,3445,4179|sleftdia_data=1006,1385,2853,3658,3706,3990,4582,4866,5553|sleft_data=2995,3114,3611,4487,4677,5458|sdown_data=816,864,1100,1479,2900,3161,3587,3729,3824,4085,4511,4606,4819,5482|sup_data=1053,1432,3042,3753,3848,4653,5506|sright_data=911,2829,2948,3137,3564,3895,4464,4842,5529|srightdia_data=1195,1290,1574,1669,3090,3942,4037,4061,4700,4748,4795,5624|foni_data=|frzLeft_data=|frzLdia_data=|frzDown_data=|frzSpace_data=|frzUp_data=|frzRdia_data=4890,4985|frzRight_data=|sfrzLdia_data=|sfrzLeft_data=|sfrzDown_data=2806,2829|sfrzUp_data=|sfrzRight_data=|sfrzRdia_data=2427,2450|speed_change=400,0.25|color_data=200,30,0x00ffcc,200,31,0x339999,200,34,0xcc99ff,200,35,0x9966ff||tuning=�e�B�b�N��,http://cw7.sakura.ne.jp/|
23
+ |oni_data=2474,3350,3540,4108,5648|left_data=248,437,2190,2521,2545,2569,3374,3398,4274|leftdia_data=627,1764,2711,2735,2758,3232,3469,3492,4321,4369,5269,5292,5316|down_data=342,532,1953,2048,2237,2616,2640,2664,3327,3398,4132,4203,4250|space_data=674,769,1811,3256,3516,5364,5387,5411|up_data=295,485,2332,3303,3445,4156,4227,4298|rightdia_data=721,1858,2142,2379,3185,3492,4416,5340,5435|right_data=390,579,3279,3421,3445,4179|sleftdia_data=1006,1385,2853,3658,3706,3990,4582,4866,5553|sleft_data=2995,3114,3611,4487,4677,5458|sdown_data=816,864,1100,1479,2900,3161,3587,3729,3824,4085,4511,4606,4819,5482|sup_data=1053,1432,3042,3753,3848,4653,5506|sright_data=911,2829,2948,3137,3564,3895,4464,4842,5529|srightdia_data=1195,1290,1574,1669,3090,3942,4037,4061,4700,4748,4795,5624|foni_data=|frzLeft_data=|frzLdia_data=|frzDown_data=|frzSpace_data=|frzUp_data=|frzRdia_data=4890,4985|frzRight_data=|sfrzLdia_data=|sfrzLeft_data=|sfrzDown_data=2806,2829|sfrzUp_data=|sfrzRight_data=|sfrzRdia_data=2427,2450|speed_change=400,0.25|color_data=200,30,#00ffcc,200,31,#339999,200,34,#cc99ff,200,35,#9966ff||tuning=�e�B�b�N��,http://cw7.sakura.ne.jp/|
16
24
  |boost_data=200,3|
17
25
 
18
- |oni2_data=1029,1077,1124,1171,1219,1266,1314,1361,1408,1456,1503,1550,1598,1645,1740,2829,3350,3635,3729,4108,4392,4487,5648|left2_data=248,437,816,864,3232,3410,3469,4132,4369,4440,4464,4511,5056,5506|leftdia2_data=627,650,698,1764,1811,1835,1882,2048,2214,2261,2320,2912,3220,3445,3540,4179,4392,4606,4629,4653,4677,4842,4914,4937,4961,4985,5008,5032,5387,5423,5612|down2_data=342,532,792,828,1953,2000,2016,2367,3196,3244,3398,3481,3540,3658,3682,3694,3706,3729,4144,4345,4381,4452,4523,4546,4570,4594,5079,5103,5127,5150,5174,5198,5221,5292,5328,5517|space2_data=721,745,1006,1053,1148,1195,1242,1258,1385,1432,1479,1527,1574,2119,2225,2308,3433,3457,3564,3587,3599,3611,3635,4191,4404,4606,5245,5375,5411,5482|up2_data=295,485,864,1085,1171,1274,1456,1562,1621,1637,1977,2032,2142,2202,2237,2261,2356,3208,3256,3386,3492,3516,4156,4357,4511,4535,4558,4582,5281,5316,5340,5435,5553,5577,5589|rightdia2_data=674,769,1069,1160,1444,1539,1653,1787,1858,1906,2119,2308,2900,3185,3421,4203,4617,4641,4665,4689,4854,5364,5399,5458,5494,5600|right2_data=390,579,840,1100,1183,1467,1550,2142,2190,2237,3374,3504,5269,5304,5340,5529|sleftdia2_data=1006,1053,1100,1148,1195,1242,1290,1337,2166,2332,2486,2711,2948,3042,3090,3339,3942,4085,4306,4487,4748,4866|sleft2_data=887,982,1385,1432,1479,1527,1574,1621,1716,1929,2095,2296,2498,2545,2687,2746,2806,2889,2983,3019,3114,3753,3777,3789,3824,3931,3990,4061,4250,4321,4700,4736,4760|sdown2_data=911,946,1314,1669,1692,2071,2285,2557,2600,2735,2770,2794,2853,2971,3031,3125,3315,3812,3836,3895,3978,4227,4321,4416,4724,4795,4819|sup2_data=935,958,2095,2474,2569,2585,3007,3848,3871,3883,4712,4807,4831|sright2_data=887,982,1290,1692,1835,2071,2285,2379,2395,2510,2758,2924,3137,3800,3919,3966,4073,4239,4314,4416,4700,4771|srightdia2_data=2411,2521,2782,2877,2995,3161,3279,3303,3327,3350,4014,4037,4274,4298,4748,4866,5624|foni2_data=|frzLeft2_data=|frzLdia2_data=|frzDown2_data=|frzSpace2_data=|frzUp2_data=|frzRdia2_data=|frzRight2_data=|sfrzLdia2_data=|sfrzLeft2_data=|sfrzDown2_data=2427,2450,2652,2669|sfrzUp2_data=4890,4985|sfrzRight2_data=2616,2634|sfrzRdia2_data=|speed2_change=|boost2_data=|color2_data=200,30,0x00ffcc,200,31,0x339999,200,34,0xcc99ff,200,35,0x9966ff|
26
+ |oni2_data=1029,1077,1124,1171,1219,1266,1314,1361,1408,1456,1503,1550,1598,1645,1740,2829,3350,3635,3729,4108,4392,4487,5648|left2_data=248,437,816,864,3232,3410,3469,4132,4369,4440,4464,4511,5056,5506|leftdia2_data=627,650,698,1764,1811,1835,1882,2048,2214,2261,2320,2912,3220,3445,3540,4179,4392,4606,4629,4653,4677,4842,4914,4937,4961,4985,5008,5032,5387,5423,5612|down2_data=342,532,792,828,1953,2000,2016,2367,3196,3244,3398,3481,3540,3658,3682,3694,3706,3729,4144,4345,4381,4452,4523,4546,4570,4594,5079,5103,5127,5150,5174,5198,5221,5292,5328,5517|space2_data=721,745,1006,1053,1148,1195,1242,1258,1385,1432,1479,1527,1574,2119,2225,2308,3433,3457,3564,3587,3599,3611,3635,4191,4404,4606,5245,5375,5411,5482|up2_data=295,485,864,1085,1171,1274,1456,1562,1621,1637,1977,2032,2142,2202,2237,2261,2356,3208,3256,3386,3492,3516,4156,4357,4511,4535,4558,4582,5281,5316,5340,5435,5553,5577,5589|rightdia2_data=674,769,1069,1160,1444,1539,1653,1787,1858,1906,2119,2308,2900,3185,3421,4203,4617,4641,4665,4689,4854,5364,5399,5458,5494,5600|right2_data=390,579,840,1100,1183,1467,1550,2142,2190,2237,3374,3504,5269,5304,5340,5529|sleftdia2_data=1006,1053,1100,1148,1195,1242,1290,1337,2166,2332,2486,2711,2948,3042,3090,3339,3942,4085,4306,4487,4748,4866|sleft2_data=887,982,1385,1432,1479,1527,1574,1621,1716,1929,2095,2296,2498,2545,2687,2746,2806,2889,2983,3019,3114,3753,3777,3789,3824,3931,3990,4061,4250,4321,4700,4736,4760|sdown2_data=911,946,1314,1669,1692,2071,2285,2557,2600,2735,2770,2794,2853,2971,3031,3125,3315,3812,3836,3895,3978,4227,4321,4416,4724,4795,4819|sup2_data=935,958,2095,2474,2569,2585,3007,3848,3871,3883,4712,4807,4831|sright2_data=887,982,1290,1692,1835,2071,2285,2379,2395,2510,2758,2924,3137,3800,3919,3966,4073,4239,4314,4416,4700,4771|srightdia2_data=2411,2521,2782,2877,2995,3161,3279,3303,3327,3350,4014,4037,4274,4298,4748,4866,5624|foni2_data=|frzLeft2_data=|frzLdia2_data=|frzDown2_data=|frzSpace2_data=|frzUp2_data=|frzRdia2_data=|frzRight2_data=|sfrzLdia2_data=|sfrzLeft2_data=|sfrzDown2_data=2427,2450,2652,2669|sfrzUp2_data=4890,4985|sfrzRight2_data=2616,2634|sfrzRdia2_data=|speed2_change=|boost2_data=|color2_data=200,30,#00ffcc,200,31,#339999,200,34,#cc99ff,200,35,#9966ff|
19
27
 
20
28
 
21
29
  `;
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 : 2022/04/16
7
+ * Revised : 2022/06/07
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 27.4.0`;
12
- const g_revisedDate = `2022/04/16`;
11
+ const g_version = `Ver 27.6.0`;
12
+ const g_revisedDate = `2022/06/07`;
13
13
  const g_alphaVersion = ``;
14
14
 
15
15
  // カスタム用バージョン (danoni_custom.js 等で指定可)
@@ -41,11 +41,11 @@ let g_localVersion2 = ``;
41
41
  */
42
42
  const current = _ => {
43
43
  if (document.currentScript) {
44
- return encodeURI(document.currentScript.src);
44
+ return document.currentScript.src;
45
45
  }
46
- const scripts = document.getElementsByTagName(`script`);
47
- const targetScript = scripts[scripts.length - 1];
48
- return encodeURI(targetScript.src);
46
+ const scripts = Array.from(document.getElementsByTagName(`script`));
47
+ const targetScript = scripts.find(file => file.src.endsWith(`danoni_main.js`));
48
+ return targetScript.src;
49
49
  };
50
50
  const g_rootPath = current().match(/(^.*\/)/)[0];
51
51
  const g_remoteFlg = g_rootPath.match(`^https://cwtickle.github.io/danoniplus/`) !== null;
@@ -342,6 +342,15 @@ const hasArrayList = (_data, _length = 1) => _data !== undefined && _data.length
342
342
  */
343
343
  const splitLF = _str => _str.split(`\r`).join(`\n`).split(`\n`);
344
344
 
345
+ /**
346
+ * 改行コード区切りを本来の区切り文字に変換して配列展開
347
+ * (改行区切りで間が空行だった場合は無効化)
348
+ * @param {string} _str
349
+ * @param {string} _delim
350
+ * @returns
351
+ */
352
+ const splitLF2 = (_str, _delim = `$`) => splitLF(_str).filter(val => val !== ``).join(_delim).split(_delim);
353
+
345
354
  /**
346
355
  * 重複を排除した配列の生成
347
356
  * @param {array} _array1
@@ -456,8 +465,12 @@ const blockCode = _setCode => !C_BLOCK_KEYS.map(key => g_kCdN[key]).includes(_se
456
465
  * @param {object} _evt
457
466
  * @param {string} _displayName
458
467
  * @param {function} _func
468
+ * @param {boolean} _dfEvtFlg
459
469
  */
460
- const commonKeyDown = (_evt, _displayName, _func = _code => { }) => {
470
+ const commonKeyDown = (_evt, _displayName, _func = _code => { }, _dfEvtFlg) => {
471
+ if (!_dfEvtFlg) {
472
+ _evt.preventDefault();
473
+ }
461
474
  const setCode = transCode(_evt.code);
462
475
  if (_evt.repeat && (g_unrepeatObj.page.includes(_displayName) || g_unrepeatObj.key.includes(setCode))) {
463
476
  return blockCode(setCode);
@@ -533,12 +546,12 @@ const createScTextCommon = _displayName => {
533
546
  * @param {string} _displayName
534
547
  * @param {function} _func
535
548
  */
536
- const setShortcutEvent = (_displayName, _func = _ => true, _displayFlg = true) => {
537
- if (_displayFlg) {
549
+ const setShortcutEvent = (_displayName, _func = _ => true, { displayFlg = true, dfEvtFlg = false } = {}) => {
550
+ if (displayFlg) {
538
551
  createScTextCommon(_displayName);
539
552
  }
540
553
  const evList = _ => {
541
- document.onkeydown = evt => commonKeyDown(evt, _displayName, _func);
554
+ document.onkeydown = evt => commonKeyDown(evt, _displayName, _func, dfEvtFlg);
542
555
  document.onkeyup = evt => commonKeyUp(evt);
543
556
  };
544
557
  if (g_initialFlg && g_btnWaitFrame[_displayName].initial) {
@@ -1239,7 +1252,10 @@ const getTitleDivLabel = (_id, _titlename, _x, _y, ..._classes) =>
1239
1252
  */
1240
1253
  const resetKeyControl = _ => {
1241
1254
  document.onkeyup = _ => { };
1242
- document.onkeydown = evt => blockCode(transCode(evt.code));
1255
+ document.onkeydown = evt => {
1256
+ evt.preventDefault();
1257
+ return blockCode(transCode(evt.code));
1258
+ };
1243
1259
  g_inputKeyBuffer = {};
1244
1260
  };
1245
1261
 
@@ -2407,7 +2423,7 @@ const headerConvert = _dosObj => {
2407
2423
  if (!g_isFile) {
2408
2424
  let tmpImgTypes = [];
2409
2425
  if (hasVal(_dosObj.imgType)) {
2410
- tmpImgTypes = _dosObj.imgType.split(`$`);
2426
+ tmpImgTypes = splitLF2(_dosObj.imgType);
2411
2427
  } else if (g_presetObj.imageSets !== undefined) {
2412
2428
  tmpImgTypes = g_presetObj.imageSets.concat();
2413
2429
  }
@@ -2459,7 +2475,7 @@ const headerConvert = _dosObj => {
2459
2475
  obj.musicNos = [];
2460
2476
 
2461
2477
  if (hasVal(_dosObj.musicTitle)) {
2462
- const musicData = _dosObj.musicTitle.split(`$`);
2478
+ const musicData = splitLF2(_dosObj.musicTitle);
2463
2479
 
2464
2480
  if (hasVal(_dosObj.musicNo)) {
2465
2481
  obj.musicNos = _dosObj.musicNo.split(`$`);
@@ -2527,7 +2543,7 @@ const headerConvert = _dosObj => {
2527
2543
 
2528
2544
  // 譜面情報
2529
2545
  if (hasVal(_dosObj.difData)) {
2530
- const difs = _dosObj.difData.split(`$`);
2546
+ const difs = splitLF2(_dosObj.difData);
2531
2547
  const difpos = {
2532
2548
  Key: 0, Name: 1, Speed: 2, Border: 3, Recovery: 4, Damage: 5, Init: 6,
2533
2549
  };
@@ -2553,7 +2569,7 @@ const headerConvert = _dosObj => {
2553
2569
  obj.lifeInits.push(lifeData(`Init`, 25));
2554
2570
 
2555
2571
  // キー数
2556
- const keyLabel = difDetails[difpos.Key] ?? `7`;
2572
+ const keyLabel = difDetails[difpos.Key] || `7`;
2557
2573
  obj.keyLabels.push(g_keyObj.keyTransPattern[keyLabel] ?? keyLabel);
2558
2574
 
2559
2575
  // 譜面名、制作者名
@@ -2733,7 +2749,7 @@ const headerConvert = _dosObj => {
2733
2749
 
2734
2750
  // 楽曲URL
2735
2751
  if (hasVal(_dosObj.musicUrl)) {
2736
- obj.musicUrls = _dosObj.musicUrl.split(`$`);
2752
+ obj.musicUrls = splitLF2(_dosObj.musicUrl);
2737
2753
  } else {
2738
2754
  makeWarningWindow(g_msgInfoObj.E_0031);
2739
2755
  }
@@ -3058,7 +3074,7 @@ const resetBaseColorList = (_baseObj, _dosObj, { scoreId = `` } = {}) => {
3058
3074
  });
3059
3075
 
3060
3076
  // フリーズアロー色
3061
- const tmpFrzColors = (frzColorTxt !== undefined ? frzColorTxt.split(`$`) : []);
3077
+ const tmpFrzColors = (frzColorTxt !== undefined ? splitLF2(frzColorTxt) : []);
3062
3078
  const firstFrzColors = (tmpFrzColors[0] !== undefined ? tmpFrzColors[0].split(`,`) : []);
3063
3079
 
3064
3080
  for (let j = 0; j < _baseObj.setColorInit.length; j++) {
@@ -3266,7 +3282,7 @@ const getGaugeSetting = (_dosObj, _name, _difLength, { scoreId = 0 } = {}) => {
3266
3282
  if (gaugeUpdateFlg) {
3267
3283
  gaugeCreateFlg = setGaugeDetails(scoreId, _dosObj[`gauge${_name}`].split(`,`));
3268
3284
  } else {
3269
- const gauges = _dosObj[`gauge${_name}`].split(`$`);
3285
+ const gauges = splitLF2(_dosObj[`gauge${_name}`]);
3270
3286
  const gHeaderLen = gauges.length;
3271
3287
  for (let j = 0; j < gHeaderLen; j++) {
3272
3288
  gaugeCreateFlg = setGaugeDetails(j, getGaugeDetailList(j, gauges[j].split(`,`)));
@@ -3333,17 +3349,18 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3333
3349
  const newKeyMultiParam = (_key, _name, _convFunc, { errCd = ``, baseCopyFlg = false, loopFunc = _ => true } = {}) => {
3334
3350
  let tmpMinPatterns = 1;
3335
3351
  const keyheader = _name + _key;
3352
+ const dfPtn = setIntVal(g_keyObj.dfPtnNum);
3336
3353
  if (hasVal(_dosObj[keyheader])) {
3337
- const tmpArray = _dosObj[keyheader].split(`$`);
3354
+ const tmpArray = splitLF2(_dosObj[keyheader]);
3338
3355
  tmpMinPatterns = tmpArray.length;
3339
3356
  for (let k = 0; k < tmpMinPatterns; k++) {
3340
- if (existParam(tmpArray[k], `${keyheader}_${k}`)) {
3357
+ if (existParam(tmpArray[k], `${keyheader}_${k + dfPtn}`)) {
3341
3358
  continue;
3342
3359
  }
3343
- g_keyObj[`${keyheader}_${k}`] = g_keyObj[`${_name}${tmpArray[k]}`] !== undefined ?
3360
+ g_keyObj[`${keyheader}_${k + dfPtn}`] = g_keyObj[`${_name}${tmpArray[k]}`] !== undefined ?
3344
3361
  copyArray2d(g_keyObj[`${_name}${tmpArray[k]}`]) : tmpArray[k].split(`,`).map(n => _convFunc(n));
3345
3362
  if (baseCopyFlg) {
3346
- g_keyObj[`${keyheader}_${k}d`] = copyArray2d(g_keyObj[`${keyheader}_${k}`]);
3363
+ g_keyObj[`${keyheader}_${k + dfPtn}d`] = copyArray2d(g_keyObj[`${keyheader}_${k + dfPtn}`]);
3347
3364
  }
3348
3365
  loopFunc(k, keyheader);
3349
3366
  }
@@ -3361,10 +3378,11 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3361
3378
  */
3362
3379
  const newKeySingleParam = (_key, _name, _type) => {
3363
3380
  const keyheader = _name + _key;
3381
+ const dfPtn = setIntVal(g_keyObj.dfPtnNum);
3364
3382
  if (_dosObj[keyheader] !== undefined) {
3365
3383
  const tmps = _dosObj[keyheader].split(`$`);
3366
3384
  for (let k = 0; k < tmps.length; k++) {
3367
- g_keyObj[`${keyheader}_${k}`] = setVal(g_keyObj[`${_name}${tmps[k]}`], setVal(tmps[k], ``, _type));
3385
+ g_keyObj[`${keyheader}_${k + dfPtn}`] = setVal(g_keyObj[`${_name}${tmps[k]}`], setVal(tmps[k], ``, _type));
3368
3386
  }
3369
3387
  }
3370
3388
  };
@@ -3379,11 +3397,12 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3379
3397
  */
3380
3398
  const newKeyPairParam = (_key, _name, _pairName, _defaultName = ``, _defaultVal = 0) => {
3381
3399
  const keyheader = _name + _key;
3400
+ const dfPtn = setIntVal(g_keyObj.dfPtnNum);
3382
3401
 
3383
3402
  if (_dosObj[keyheader] !== undefined) {
3384
- const tmpParams = _dosObj[keyheader].split(`$`);
3403
+ const tmpParams = splitLF2(_dosObj[keyheader]);
3385
3404
  for (let k = 0; k < tmpParams.length; k++) {
3386
- const pairName = `${_pairName}${_key}_${k}`;
3405
+ const pairName = `${_pairName}${_key}_${k + dfPtn}`;
3387
3406
  if (!hasVal(tmpParams[k])) {
3388
3407
  continue;
3389
3408
  }
@@ -3392,7 +3411,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3392
3411
  Object.assign(g_keyObj[pairName], g_keyObj[`${_pairName}${tmpParams[k]}`]);
3393
3412
  } else {
3394
3413
  if (_defaultName !== ``) {
3395
- g_keyObj[pairName][_defaultName] = [...Array(g_keyObj[`color${_key}_${k}`].length)].fill(_defaultVal);
3414
+ g_keyObj[pairName][_defaultName] = [...Array(g_keyObj[`color${_key}_${k + dfPtn}`].length)].fill(_defaultVal);
3396
3415
  }
3397
3416
  tmpParams[k].split(`/`).forEach(pairs => {
3398
3417
  const tmpParamPair = pairs.split(`::`);
@@ -3409,18 +3428,31 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3409
3428
  * @param {string} _header
3410
3429
  * @returns
3411
3430
  */
3412
- const copyChildArray = (_k, _header) => g_keyObj[`${_header}_${_k}_0`] = copyArray2d(g_keyObj[`${_header}_${_k}`]);
3431
+ const copyChildArray = (_k, _header) =>
3432
+ g_keyObj[`${_header}_${_k + g_keyObj.dfPtnNum}_0`] = copyArray2d(g_keyObj[`${_header}_${_k + g_keyObj.dfPtnNum}`]);
3413
3433
 
3414
3434
  // 対象キー毎に処理
3415
3435
  keyExtraList.forEach(newKey => {
3416
3436
  let tmpDivPtn = [];
3417
3437
  let tmpMinPatterns = 1;
3438
+ g_keyObj.dfPtnNum = 0;
3439
+
3440
+ // キーパターンの追記 (appendX)
3441
+ if (setBoolVal(_dosObj[`append${newKey}`])) {
3442
+ for (let j = 0; ; j++) {
3443
+ if (g_keyObj[`color${newKey}_${j}`] === undefined) {
3444
+ break;
3445
+ }
3446
+ g_keyObj.dfPtnNum++;
3447
+ }
3448
+ }
3449
+ const dfPtnNum = g_keyObj.dfPtnNum;
3418
3450
 
3419
3451
  // キーの名前 (keyNameX)
3420
3452
  g_keyObj[`keyName${newKey}`] = _dosObj[`keyName${newKey}`] ?? newKey;
3421
3453
 
3422
3454
  // キーの最小横幅 (minWidthX)
3423
- g_keyObj[`minWidth${newKey}`] = _dosObj[`minWidth${newKey}`] ?? g_keyObj.minWidthDefault;
3455
+ g_keyObj[`minWidth${newKey}`] = _dosObj[`minWidth${newKey}`] ?? g_keyObj[`minWidth${newKey}`] ?? g_keyObj.minWidthDefault;
3424
3456
 
3425
3457
  // 矢印色パターン (colorX_Y)
3426
3458
  tmpMinPatterns = newKeyMultiParam(newKey, `color`, toNumber, {
@@ -3442,24 +3474,25 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3442
3474
  const tmpDivs = _dosObj[`div${newKey}`].split(`$`);
3443
3475
  for (let k = 0; k < tmpDivs.length; k++) {
3444
3476
  tmpDivPtn = tmpDivs[k].split(`,`);
3477
+ const ptnName = `${newKey}_${k + dfPtnNum}`;
3445
3478
 
3446
3479
  if (setIntVal(tmpDivPtn[0], -1) !== -1) {
3447
- g_keyObj[`div${newKey}_${k}`] = setIntVal(tmpDivPtn[0], g_keyObj[`chara${newKey}_0`].length);
3480
+ g_keyObj[`div${ptnName}`] = setIntVal(tmpDivPtn[0], g_keyObj[`chara${newKey}_0`].length);
3448
3481
  } else if (g_keyObj[`div${tmpDivPtn[0]}`] !== undefined) {
3449
3482
  // 既定キーパターンが指定された場合、存在すればその値を適用
3450
- g_keyObj[`div${newKey}_${k}`] = g_keyObj[`div${tmpDivPtn[0]}`];
3451
- g_keyObj[`divMax${newKey}_${k}`] = setIntVal(g_keyObj[`divMax${tmpDivPtn[0]}`], undefined);
3452
- } else if (setIntVal(g_keyObj[`div${newKey}_${k}`], -1) !== -1) {
3483
+ g_keyObj[`div${ptnName}`] = g_keyObj[`div${tmpDivPtn[0]}`];
3484
+ g_keyObj[`divMax${ptnName}`] = setIntVal(g_keyObj[`divMax${tmpDivPtn[0]}`], undefined);
3485
+ } else if (setIntVal(g_keyObj[`div${ptnName}`], -1) !== -1) {
3453
3486
  // すでに定義済みの場合はスキップ
3454
3487
  continue;
3455
3488
  } else if (g_keyObj[`chara${newKey}_0`] !== undefined) {
3456
3489
  // 特に指定が無い場合はcharaX_Yの配列長で決定
3457
- g_keyObj[`div${newKey}_${k}`] = g_keyObj[`chara${newKey}_0`].length;
3490
+ g_keyObj[`div${ptnName}`] = g_keyObj[`chara${newKey}_0`].length;
3458
3491
  }
3459
3492
 
3460
3493
  // ステップゾーン位置の最終番号
3461
3494
  if (tmpDivPtn.length > 1) {
3462
- g_keyObj[`divMax${newKey}_${k}`] = setVal(tmpDivPtn[1], -1, C_TYP_FLOAT);
3495
+ g_keyObj[`divMax${ptnName}`] = setVal(tmpDivPtn[1], -1, C_TYP_FLOAT);
3463
3496
  }
3464
3497
  }
3465
3498
  }
@@ -3467,16 +3500,18 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3467
3500
  // ステップゾーン位置 (posX_Y)
3468
3501
  newKeyMultiParam(newKey, `pos`, toFloat, {
3469
3502
  loopFunc: (k, keyheader) => {
3470
- if (g_keyObj[`divMax${newKey}_${k}`] === undefined || g_keyObj[`divMax${newKey}_${k}`] === -1) {
3471
- const posLength = g_keyObj[`${keyheader}_${k}`].length;
3472
- g_keyObj[`divMax${newKey}_${k}`] = g_keyObj[`${keyheader}_${k}`][posLength - 1] + 1;
3503
+ const ptnName = `${newKey}_${k + dfPtnNum}`;
3504
+ if (g_keyObj[`divMax${ptnName}`] === undefined || g_keyObj[`divMax${ptnName}`] === -1) {
3505
+ const posLength = g_keyObj[`${keyheader}_${k + dfPtnNum}`].length;
3506
+ g_keyObj[`divMax${ptnName}`] = g_keyObj[`${keyheader}_${k + dfPtnNum}`][posLength - 1] + 1;
3473
3507
  }
3474
3508
  }
3475
3509
  });
3476
3510
  if (_dosObj[`pos${newKey}`] === undefined) {
3477
3511
  for (let k = 0; k < tmpMinPatterns; k++) {
3478
- if (g_keyObj[`color${newKey}_${k}`] !== undefined) {
3479
- g_keyObj[`pos${newKey}_${k}`] = [...Array(g_keyObj[`color${newKey}_${k}`].length).keys()].map(i => i);
3512
+ const ptnName = `${newKey}_${k + dfPtnNum}`;
3513
+ if (g_keyObj[`color${ptnName}`] !== undefined) {
3514
+ g_keyObj[`pos${ptnName}`] = [...Array(g_keyObj[`color${ptnName}`].length).keys()].map(i => i);
3480
3515
  }
3481
3516
  }
3482
3517
  }
@@ -3798,7 +3833,7 @@ const titleInit = _ => {
3798
3833
  g_timeoutEvtTitleId = setTimeout(_ => flowTitleTimeline(), 1000 / g_fps);
3799
3834
 
3800
3835
  // キー操作イベント(デフォルト)
3801
- setShortcutEvent(g_currentPage);
3836
+ setShortcutEvent(g_currentPage, _ => true, { dfEvtFlg: true });
3802
3837
 
3803
3838
  document.oncontextmenu = _ => true;
3804
3839
  divRoot.oncontextmenu = _ => false;
@@ -3963,7 +3998,7 @@ const optionInit = _ => {
3963
3998
  commonSettingBtn(`Display`);
3964
3999
 
3965
4000
  // キー操作イベント(デフォルト)
3966
- setShortcutEvent(g_currentPage);
4001
+ setShortcutEvent(g_currentPage, _ => true, { dfEvtFlg: true });
3967
4002
  document.oncontextmenu = _ => true;
3968
4003
  g_initialFlg = true;
3969
4004
 
@@ -4044,7 +4079,7 @@ const createOptionWindow = _sprite => {
4044
4079
  deleteChildspriteAll(`difList`);
4045
4080
  [`difList`, `difCover`, `btnDifU`, `btnDifD`].forEach(obj => optionsprite.removeChild(document.getElementById(obj)));
4046
4081
  g_currentPage = `option`;
4047
- setShortcutEvent(g_currentPage, _ => true, false);
4082
+ setShortcutEvent(g_currentPage, _ => true, { displayFlg: false, dfEvtFlg: true });
4048
4083
  }
4049
4084
  };
4050
4085
 
@@ -5520,17 +5555,16 @@ const keyConfigInit = (_kcType = g_kcType) => {
5520
5555
  */
5521
5556
  const changeKeyConfigColor = (_j, _k, _cssName) => {
5522
5557
  const obj = document.querySelector(`#keycon${_j}_${_k}`);
5558
+ const resetClass = _className => {
5559
+ if (obj.classList.contains(_className)) {
5560
+ obj.classList.remove(_className);
5561
+ }
5562
+ };
5523
5563
 
5524
5564
  // CSSクラスの除去
5525
- if (obj.classList.contains(g_cssObj.keyconfig_Changekey)) {
5526
- obj.classList.remove(g_cssObj.keyconfig_Changekey);
5527
- }
5528
- if (obj.classList.contains(g_cssObj.keyconfig_Defaultkey)) {
5529
- obj.classList.remove(g_cssObj.keyconfig_Defaultkey);
5530
- }
5531
- if (obj.classList.contains(g_cssObj.title_base)) {
5532
- obj.classList.remove(g_cssObj.title_base);
5533
- }
5565
+ resetClass(g_cssObj.keyconfig_Changekey);
5566
+ resetClass(g_cssObj.keyconfig_Defaultkey);
5567
+ resetClass(g_cssObj.title_base);
5534
5568
 
5535
5569
  // 指定されたCSSクラスを適用
5536
5570
  obj.classList.add(_cssName);
@@ -6372,7 +6406,7 @@ const loadingScoreInit = async () => {
6372
6406
  let arrivalFrame = getFirstArrivalFrame(firstFrame, speedOnFrame, motionOnFrame);
6373
6407
 
6374
6408
  // キーパターン(デフォルト)に対応する矢印番号を格納
6375
- convertreplaceNums();
6409
+ convertReplaceNums();
6376
6410
 
6377
6411
  const setData = (_data, _minLength = 1) => {
6378
6412
  return (hasArrayList(_data, _minLength) ? _data.concat() : []);
@@ -6474,7 +6508,7 @@ const loadingScoreInit = async () => {
6474
6508
  const tempId = setInterval(() => {
6475
6509
  const executeMain = _ => {
6476
6510
  clearInterval(tempId);
6477
- MainInit();
6511
+ mainInit();
6478
6512
  }
6479
6513
  if (g_audio.duration !== undefined) {
6480
6514
  if (g_userAgent.indexOf(`firefox`) !== -1) {
@@ -7529,7 +7563,7 @@ const getFrzLength = (_speedOnFrame, _startFrame, _endFrame) => {
7529
7563
  /**
7530
7564
  * キーパターン(デフォルト)に対応する矢印番号を格納
7531
7565
  */
7532
- const convertreplaceNums = _ => {
7566
+ const convertReplaceNums = _ => {
7533
7567
  const tkObj = getKeyInfo();
7534
7568
  const baseCharas = g_keyObj[`chara${g_keyObj.currentKey}_0`];
7535
7569
  const convCharas = g_keyObj[`chara${tkObj.keyCtrlPtn}`];
@@ -7857,7 +7891,7 @@ const setKeyCtrl = (_localStorage, _keyNum, _keyCtrlPtn) => {
7857
7891
  /**
7858
7892
  * メイン画面初期化
7859
7893
  */
7860
- const MainInit = _ => {
7894
+ const mainInit = _ => {
7861
7895
  clearWindow(true, `Main`);
7862
7896
  const divRoot = document.querySelector(`#divRoot`);
7863
7897
  document.oncontextmenu = _ => false;
@@ -8437,7 +8471,7 @@ const MainInit = _ => {
8437
8471
 
8438
8472
  /**
8439
8473
  * 自動判定
8440
- * ※MainInit内部で指定必須(arrowSprite指定)
8474
+ * ※mainInit内部で指定必須(arrowSprite指定)
8441
8475
  *
8442
8476
  * @param _j 矢印位置
8443
8477
  * @param _arrow 矢印(オブジェクト)
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2022/04/16 (v27.4.0)
8
+ * Revised : 2022/06/07 (v27.6.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -1412,6 +1412,7 @@ const g_keyObj = {
1412
1412
  currentPtn: 0,
1413
1413
 
1414
1414
  prevKey: `Dummy`,
1415
+ dfPtnNum: 0,
1415
1416
 
1416
1417
  // キー別ヘッダー
1417
1418
  // - 譜面データ中に出てくる矢印(ノーツ)の種類と順番(ステップゾーン表示順)を管理する。
@@ -3280,6 +3281,10 @@ const g_skinJsObj = {
3280
3281
  result: [],
3281
3282
  };
3282
3283
 
3284
+ /** 過去関数の互換 */
3285
+ const convertreplaceNums = _ => convertReplaceNums();
3286
+ const MainInit = _ => mainInit();
3287
+
3283
3288
  /**
3284
3289
  * 従来のカスタム関数をg_customJsObj, g_skinJsObjへ追加
3285
3290
  * - customjsファイルを読み込んだ直後にこの関数を呼び出している
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "27.4.0",
3
+ "version": "27.6.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {