danoniplus 27.0.0 → 27.1.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.
@@ -2,11 +2,7 @@
2
2
  <html lang="ja">
3
3
  <head>
4
4
  <meta charset="utf-8">
5
- <meta http-equiv="Content-Script-Type" content="text/javascript">
6
- <meta http-equiv="Content-Style-Type" content="text/css">
7
5
  <script src="../js/danoni_main.js"></script>
8
- <link rel="stylesheet" type="text/css" href="../css/danoni_main.css">
9
-
10
6
 
11
7
  <title>Dancing★Onigiri</title>
12
8
 
@@ -27,8 +23,7 @@ table{
27
23
  border:0;
28
24
  border-collapse:collapse;
29
25
  width:800px;
30
- margin-left:auto;
31
- margin-right:auto;
26
+ margin:auto;
32
27
  }
33
28
  th,td{padding:0;}
34
29
 
@@ -54,7 +49,7 @@ a:hover { color:#FF9900; text-decoration: underline; }
54
49
  |titlefont=Century Gothic|
55
50
 
56
51
  //-->
57
- <div id="canvas-frame" style="width:600px;margin:auto;">
52
+ <div id="canvas-frame">
58
53
  <p>ゲームを準備しています...</p>
59
54
  <p>このメッセージがいつまでも消えない場合、<br>
60
55
  Google ChromeやFirefox等、HTML5に対応したブラウザをご利用ください。</p>
@@ -2,11 +2,7 @@
2
2
  <html lang="ja">
3
3
  <head>
4
4
  <meta charset="utf-8">
5
- <meta http-equiv="Content-Script-Type" content="text/javascript">
6
- <meta http-equiv="Content-Style-Type" content="text/css">
7
5
  <script src="../js/danoni_main.js"></script>
8
- <link rel="stylesheet" type="text/css" href="../css/danoni_main.css">
9
-
10
6
 
11
7
  <title>Dancing★Onigiri Preview</title>
12
8
 
@@ -27,8 +23,7 @@ table{
27
23
  border:0;
28
24
  border-collapse:collapse;
29
25
  width:800px;
30
- margin-left:auto;
31
- margin-right:auto;
26
+ margin:auto;
32
27
  }
33
28
  th,td{padding:0;}
34
29
 
@@ -173,7 +168,7 @@ a:hover { color:#FF9900; text-decoration: underline; }
173
168
  |
174
169
 
175
170
  '>
176
- <div id="canvas-frame" style="width:600px;margin:auto;">
171
+ <div id="canvas-frame">
177
172
  <p>ゲームを準備しています...</p>
178
173
  <p>このメッセージがいつまでも消えない場合、<br>
179
174
  Google ChromeやFirefox等、HTML5に対応したブラウザをご利用ください。</p>
@@ -2,11 +2,7 @@
2
2
  <html lang="ja">
3
3
  <head>
4
4
  <meta charset="utf-8">
5
- <meta http-equiv="Content-Script-Type" content="text/javascript">
6
- <meta http-equiv="Content-Style-Type" content="text/css">
7
5
  <script src="https://cwtickle.github.io/danoniplus/js/danoni_main.js" charset="UTF-8"></script>
8
- <link rel="stylesheet" type="text/css" href="https://cwtickle.github.io/danoniplus/css/danoni_main.css">
9
-
10
6
 
11
7
  <title>Dancing★Onigiri Preview</title>
12
8
 
@@ -27,8 +23,7 @@ table{
27
23
  border:0;
28
24
  border-collapse:collapse;
29
25
  width:800px;
30
- margin-left:auto;
31
- margin-right:auto;
26
+ margin:auto;
32
27
  }
33
28
  th,td{padding:0;}
34
29
 
@@ -125,7 +120,7 @@ a:hover { color:#FF9900; text-decoration: underline; }
125
120
  |
126
121
 
127
122
  '>
128
- <div id="canvas-frame" style="width:600px;margin:auto;">
123
+ <div id="canvas-frame">
129
124
  <p>ゲームを準備しています...</p>
130
125
  <p>このメッセージがいつまでも消えない場合、<br>
131
126
  Google ChromeやFirefox等、HTML5に対応したブラウザをご利用ください。</p>
@@ -2,11 +2,7 @@
2
2
  <html lang="ja">
3
3
  <head>
4
4
  <meta charset="utf-8">
5
- <meta http-equiv="Content-Script-Type" content="text/javascript">
6
- <meta http-equiv="Content-Style-Type" content="text/css">
7
5
  <script src="../js/danoni_main.js"></script>
8
- <link rel="stylesheet" type="text/css" href="../css/danoni_main.css">
9
-
10
6
 
11
7
  <title>Dancing★Onigiri Test</title>
12
8
 
@@ -26,9 +22,7 @@ body{
26
22
  table{
27
23
  border:0;
28
24
  border-collapse:collapse;
29
- width:500px;
30
- margin-left:auto;
31
- margin-right:auto;
25
+ margin:auto;
32
26
  }
33
27
  th,td{padding:0;}
34
28
 
@@ -65,7 +59,6 @@ a:hover { color:#FF9900; text-decoration: underline; }
65
59
 
66
60
  |left_data=203,628,1012,1032,1052,1214,1416,1599,1740,2468,2549,2630,2711,2792,2873,2954,3085,3156,3227,3318,3378,3520,3601,3621,3682,3722,3763,3843,3924,4046,4127,4369,4450,4511,4693,4774,4855,4936,5219,5279,5846,5906,6018,6200,6270,6432,6452,6473,6594,6715,6817,6958,7181,7342,7565,7878,7909,8060,8101,8146,8192,8232,8434,8485,8576,8617,8697,8738,8793,8839,8910,9082,9183,9223,9992,10063,10214,10295,10356,10452|leftdia_data=284,304,324,446,567,587,769,810,891,992,1113,1234,1376,1396,1518,1578,1659,1679,1821,1841,1861,1882,1902,1922,1942,1963,1983,2003,2023,2043,2064,2084,2104,2124,2509,2590,2670,2751,2832,2913,2994,3333,3378,3399,3439,3459,3596,3702,3732,3773,3864,3904,3945,4005,4025,4066,4106,4268,4329,4349,4390,4430,4501,4582,4652,4703,4764,4824,4865,4895,5057,5290,5552,5603,5896,5937,6200,6260,6412,6574,6614,6695,6857,6918,6958,7079,7100,7160,7241,7282,7464,7524,7626,7686,7767,7868,7914,7990,8030,8141,8202,8247,8333,8505,8586,8637,8677,8718,8788,8844,8920,9112,9132,9173,9203,9264,9284,9304,9324,9345,9365,9385,9405,9426,9446,9466,9486,9506,9527,9547,9567,9911,9931,10068,10154,10214,10417,10467|down_data=466,607,648,870,1093,1214,1255,1275,1437,1497,1659,1679,2145,2165,2185,2205,2225,2246,2266,2286,2306,2327,2347,2367,2387,2408,2428,2448,2488,2529,2569,2610,2650,2691,2731,2772,2812,2852,2893,2933,2974,3014,3095,3176,3237,3348,3399,3439,3459,3535,3591,3742,3783,3884,3955,4086,4167,4187,4248,4410,4491,4521,4572,4612,4663,4713,4743,4814,4875,4905,5128,5229,5300,5451,5552,5613,5775,5886,5927,6099,6250,6554,6594,6675,6837,6918,6999,7019,7322,7363,7484,7605,7666,7727,7747,7808,7828,7848,7919,7969,8010,8050,8091,8131,8212,8293,8323,8455,8526,8566,8657,8748,8778,9163,9223,9587,9608,9628,9648,9668,9688,9709,9729,9749,9769,9790,9810,9830,9850,9870,9891,9911,9931,10007,10073,10113,10154,10275,10346,10437|space_data=264,345,425,668,749,992,1073,1740,5178,5825,6270,6412,6493,6736,6817,7241,7261,7282,7302,7383,7464,7787,10477|up_data=506,688,729,850,1133,1174,1295,1315,1477,1538,1700,1720,1781,1983,2064,2104,2306,2387,2428,2630,2711,2772,2913,3065,3115,3136,3211,3267,3419,3479,3560,3672,3894,4046,4096,4208,4238,4258,4369,4420,4531,4561,4592,4683,4733,4834,4925,5037,5199,5249,5370,5532,5583,5623,5684,5765,6008,6210,6513,6634,6776,6877,6938,7039,7059,7403,7443,7504,7565,7646,7686,7727,7888,7979,8020,8070,8111,8161,8283,8546,8667,8768,8809,8849,8879,8930,8970,9142,9243,9426,9506,9547,9709,9840,9951,10032,10128,10174,10235,10255,10315,10396|rightdia_data=365,385,405,486,527,547,790,830,911,1073,1154,1194,1336,1356,1558,1619,1700,1720,1801,1963,2043,2124,2286,2367,2448,2610,2691,2751,2933,3014,3045,3115,3136,3272,3358,3419,3656,3712,3752,3803,3874,3914,3965,4005,4025,4066,4116,4228,4278,4329,4349,4390,4440,4541,4602,4673,4723,4754,4845,4885,4915,5017,5057,5360,5441,5532,5573,5664,5704,5947,6179,6220,6493,6533,6655,6756,6796,6897,6938,6978,7120,7140,7201,7261,7302,7383,7545,7605,7706,7767,7899,8000,8040,8172,8273,8541,8596,8647,8687,8728,8819,8854,8981,9102,9122,9152,9213,9405,9486,9567,9729,9810,9860,10093,10174,10194,10235,10255,10391|right_data=203,709,931,951,972,1174,1457,1639,1821,1942,2145,2266,2468,2590,2792,2954,3034,3196,3277,3297,3358,3500,3550,3641,3692,3793,3854,3934,4127,4218,4288,4450,4551,4774,4936,4996,5118,5259,5563,5643,5866,6088,6179,6230,6351,6372,6392,6634,6736,6978,7221,7423,7585,7646,7787,8081,8121,8177,8263,8536,8627,8708,8758,8824,8859,8895,8940,9193,9243,9264,9385,9587,9749,9830,9891,9972,10022,10143,10194,10331,10386,10477|frzLeft_data=|frzLdia_data=|frzDown_data=|frzSpace_data=|frzUp_data=|frzRdia_data=|frzRight_data=|boost_data=|speed_change=|color_data=200,0,#cc0000|
67
61
 
68
- |keyExtraList=7,6,8|
69
62
  |blank8=50|
70
63
  |color6=0,1,0,1,0,2$0,1,0,1,0,2|
71
64
  |chara6=arrowA,arrowB,arrowC,arrowD,arrowE,arrowF$arrowA,arrowB,arrowC,arrowD,arrowE,arrowF|
@@ -81,13 +74,7 @@ a:hover { color:#FF9900; text-decoration: underline; }
81
74
  |blank6=60|
82
75
  |transKey6=$6i|
83
76
 
84
- |color7=$0,1,0,2,0,1,0$0,0,0,0,1,2,1$0,0,0,0,1,2,1|
85
- |chara7=$left,leftdia,down,space,up,rightdia,right$left,down,up,right,leftdia,space,rightdia$left,down,up,right,leftdia,space,rightdia|
86
- |div7=$7$7$4|
87
- |blank7=55$55$55$110|
88
- |pos7=$0,1,2,10,11,12,13$0,2,4,6,7,9,11$0,1,2,3,4,5,6|
89
- |stepRtn7=$0,-45,-90,onigiri,90,135,180$0,-90,90,180,-45,onigiri,135$0,-90,90,180,-45,onigiri,135|
90
- |keyCtrl7=$83,68/0,70,32/0,74,75/0,76$83,70,74,76,68/0,32/0,75/0$83,70,74,76,68/0,32/0,75/0|
77
+ |autoSpread=false|
91
78
 
92
79
  |backtitle_data=
93
80
 
@@ -147,7 +134,7 @@ a:hover { color:#FF9900; text-decoration: underline; }
147
134
 
148
135
  |tuning=ティックル,http://cw7.sakura.ne.jp/|
149
136
  '>
150
- <div id="canvas-frame" style="width:500px;margin:auto;">
137
+ <div id="canvas-frame" style="width:500px">
151
138
  <p>ゲームを準備しています...</p>
152
139
  <p>このメッセージがいつまでも消えない場合、<br>
153
140
  Google ChromeやFirefox等、HTML5に対応したブラウザをご利用ください。</p>
@@ -2,10 +2,7 @@
2
2
  <html lang="ja">
3
3
  <head>
4
4
  <meta charset="utf-8">
5
- <meta http-equiv="Content-Script-Type" content="text/javascript">
6
- <meta http-equiv="Content-Style-Type" content="text/css">
7
5
  <script src="../js/danoni_main.js"></script>
8
- <link rel="stylesheet" type="text/css" href="../css/danoni_main.css">
9
6
  <title>Dancing★Onigiri Test2</title>
10
7
  <style type="text/css">
11
8
  <!--//
@@ -23,9 +20,7 @@ body{
23
20
  table{
24
21
  border:0;
25
22
  border-collapse:collapse;
26
- width:500px;
27
- margin-left:auto;
28
- margin-right:auto;
23
+ margin:auto;
29
24
  }
30
25
  th,td{padding:0;}
31
26
 
@@ -41,7 +36,7 @@ a:hover { color:#FF9900; text-decoration: underline; }
41
36
  <input type="hidden" name="externalDosDivide" id="externalDosDivide" value="false">
42
37
  <input type="hidden" name="externalDosLock" id="externalDosLock" value="false">
43
38
  <input type="hidden" name="externalDosCharset" id="externalDosCharset" value="Shift_JIS">
44
- <div id="canvas-frame" style="width:500px;margin:auto;">
39
+ <div id="canvas-frame">
45
40
  <p>ゲームを準備しています...</p>
46
41
  <p>このメッセージがいつまでも消えない場合、<br>
47
42
  Google ChromeやFirefox等、HTML5に対応したブラウザをご利用ください。</p>
@@ -2,10 +2,7 @@
2
2
  <html lang="ja">
3
3
  <head>
4
4
  <meta charset="utf-8">
5
- <meta http-equiv="Content-Script-Type" content="text/javascript">
6
- <meta http-equiv="Content-Style-Type" content="text/css">
7
5
  <script src="../js/danoni_main.js"></script>
8
- <link rel="stylesheet" type="text/css" href="../css/danoni_main.css">
9
6
  <title>Dancing★Onigiri Test3</title>
10
7
  <style type="text/css">
11
8
  <!--//
@@ -23,9 +20,7 @@ body{
23
20
  table{
24
21
  border:0;
25
22
  border-collapse:collapse;
26
- width:800px;
27
- margin-left:auto;
28
- margin-right:auto;
23
+ margin:auto;
29
24
  }
30
25
  th,td{padding:0;}
31
26
 
@@ -77,9 +72,7 @@ a:hover { color:#FF9900; text-decoration: underline; }
77
72
  |left4_data=200,203,206,209|frzLeft4_data=300,303,306,500|
78
73
 
79
74
  '>
80
- <div id="canvas-frame" style="width:800px;margin:auto;">
81
- <canvas id="layer0" width="800" height="500"></canvas>
82
- <canvas id="layer1" width="800" height="500"></canvas>
75
+ <div id="canvas-frame">
83
76
  <p>ゲームを準備しています...</p>
84
77
  <p>このメッセージがいつまでも消えない場合、<br>
85
78
  Google ChromeやFirefox等、HTML5に対応したブラウザをご利用ください。</p>
@@ -2,10 +2,7 @@
2
2
  <html lang="ja">
3
3
  <head>
4
4
  <meta charset="utf-8">
5
- <meta http-equiv="Content-Script-Type" content="text/javascript">
6
- <meta http-equiv="Content-Style-Type" content="text/css">
7
5
  <script src="../js/danoni_main.js"></script>
8
- <link rel="stylesheet" type="text/css" href="../css/danoni_main.css">
9
6
  <title>Dancing★Onigiri Preview</title>
10
7
  <style type="text/css">
11
8
  <!--//
@@ -24,8 +21,7 @@ body{
24
21
  border:0;
25
22
  border-collapse:collapse;
26
23
  width:800px;
27
- margin-left:auto;
28
- margin-right:auto;
24
+ margin:auto;
29
25
  }
30
26
  th,td{padding:0;}
31
27
 
@@ -57,7 +53,7 @@ a:hover { color:#FF9900; text-decoration: underline; }
57
53
 
58
54
  |tuning=7chat,http://cw7.sakura.ne.jp/7chat/|
59
55
  '>
60
- <div id="canvas-frame" style="width:600px;">
56
+ <div id="canvas-frame">
61
57
  <p>ゲームを準備しています...</p>
62
58
  <p>このメッセージがいつまでも消えない場合、<br>
63
59
  Google ChromeやFirefox等、HTML5に対応したブラウザをご利用ください。</p>
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/03/12
7
+ * Revised : 2022/03/25
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 27.0.0`;
12
- const g_revisedDate = `2022/03/18`;
11
+ const g_version = `Ver 27.1.0`;
12
+ const g_revisedDate = `2022/03/25`;
13
13
  const g_alphaVersion = ``;
14
14
 
15
15
  // カスタム用バージョン (danoni_custom.js 等で指定可)
@@ -54,6 +54,10 @@ const g_randTime = Date.now();
54
54
  window.onload = async () => {
55
55
  g_loadObj.main = true;
56
56
  g_currentPage = `initial`;
57
+ const links = document.querySelectorAll(`link`);
58
+ if (Array.from(links).filter(elem => elem.getAttribute(`href`).indexOf(`danoni_main.css`) !== -1).length === 0) {
59
+ await importCssFile2(`${g_rootPath}../css/danoni_main.css?${g_randTime}`);
60
+ }
57
61
 
58
62
  // ロード直後に定数・初期化ファイル、旧バージョン定義関数を読込
59
63
  await loadScript2(`${g_rootPath}../js/lib/danoni_localbinary.js?${g_randTime}`, false);
@@ -240,7 +244,7 @@ const hasVal = _data => _data !== undefined && _data !== ``;
240
244
  * @param {string} _default
241
245
  * @param {string} _type
242
246
  */
243
- const setVal = (_checkStr, _default, _type) => {
247
+ const setVal = (_checkStr, _default, _type = C_TYP_STRING) => {
244
248
 
245
249
  let convertStr = _checkStr;
246
250
 
@@ -1386,7 +1390,7 @@ const makeSpriteData = (_data, _calcFrame = _frame => _frame) => {
1386
1390
  width: setIntVal(tmpSpriteData[6]), // spanタグの場合は font-size
1387
1391
  height: escapeHtml(tmpSpriteData[7] ?? ``), // spanタグの場合は color(文字列可)
1388
1392
  opacity: setVal(tmpSpriteData[8], 1, C_TYP_FLOAT),
1389
- animationName: escapeHtml(setVal(tmpSpriteData[9], C_DIS_NONE, C_TYP_STRING)),
1393
+ animationName: escapeHtml(setVal(tmpSpriteData[9], C_DIS_NONE)),
1390
1394
  animationDuration: setIntVal(tmpSpriteData[10]) / g_fps,
1391
1395
  };
1392
1396
  if (g_headerObj.autoPreload) {
@@ -1703,15 +1707,8 @@ const initialControl = async () => {
1703
1707
  g_canLoadDifInfoFlg = true;
1704
1708
 
1705
1709
  // 譜面データの読み込みオプション
1706
- const ampSplitInput = document.querySelector(`#enableAmpersandSplit`);
1707
- if (ampSplitInput !== null) {
1708
- g_enableAmpersandSplit = setBoolVal(ampSplitInput.value, true);
1709
- }
1710
-
1711
- const decodeUriInput = document.querySelector(`#enableDecodeURI`);
1712
- if (decodeUriInput !== null) {
1713
- g_enableDecodeURI = setBoolVal(decodeUriInput.value);
1714
- }
1710
+ g_enableAmpersandSplit = setBoolVal(document.querySelector(`#enableAmpersandSplit`)?.value, true);
1711
+ g_enableDecodeURI = setBoolVal(document.querySelector(`#enableDecodeURI`)?.value);
1715
1712
 
1716
1713
  // 作品別ローカルストレージの読み込み
1717
1714
  loadLocalStorage();
@@ -1763,6 +1760,21 @@ const initialControl = async () => {
1763
1760
  makeDedupliArray(g_rootObj.keyExtraList.split(`,`), g_headerObj.undefinedKeyLists) : g_headerObj.undefinedKeyLists),
1764
1761
  });
1765
1762
 
1763
+ // 自動横幅拡張設定
1764
+ if (g_headerObj.autoSpread) {
1765
+ const widthList = [g_sWidth, g_presetObj.autoMinWidth ?? g_keyObj.minWidth];
1766
+ g_headerObj.keyLists.forEach(key => widthList.push(g_keyObj[`minWidth${key}`] ?? g_keyObj.minWidthDefault));
1767
+
1768
+ g_sWidth = Math.max(...widthList);
1769
+ $id(`canvas-frame`).width = `${g_sWidth}px`;
1770
+ }
1771
+ if (g_headerObj.playingWidth === `default`) {
1772
+ g_headerObj.playingWidth = g_sWidth;
1773
+ }
1774
+
1775
+ // 可変ウィンドウサイズを更新
1776
+ updateWindowSiz();
1777
+
1766
1778
  // キー数情報を初期化
1767
1779
  g_keyObj.currentKey = g_headerObj.keyLabels[g_stateObj.scoreId];
1768
1780
  g_keyObj.currentPtn = 0;
@@ -1791,12 +1803,12 @@ const initialControl = async () => {
1791
1803
  if (termRoopCnts.length === 1) {
1792
1804
  // Pattern Bの場合
1793
1805
  lastCnt = setIntVal(tmpPreloadImages[1], 1);
1794
- paddingLen = String(setVal(tmpPreloadImages[1], 1, C_TYP_STRING)).length;
1806
+ paddingLen = String(setVal(tmpPreloadImages[1], 1)).length;
1795
1807
  } else {
1796
1808
  // Pattern C, Dの場合
1797
1809
  startCnt = setIntVal(termRoopCnts[0], 1);
1798
1810
  lastCnt = setIntVal(termRoopCnts[1], 1);
1799
- paddingLen = String(setVal(termRoopCnts[1], 1, C_TYP_STRING)).length;
1811
+ paddingLen = String(setVal(termRoopCnts[1], 1)).length;
1800
1812
  }
1801
1813
  for (let k = startCnt; k <= lastCnt; k++) {
1802
1814
  preloadFile(`image`, tmpPreloadImages[0].replaceAll(`*`, String(k).padStart(paddingLen, `0`)));
@@ -2296,6 +2308,12 @@ const preheaderConvert = _dosObj => {
2296
2308
  // ヘッダー群の格納先
2297
2309
  const obj = {};
2298
2310
 
2311
+ // ウィンドウ位置の設定
2312
+ const align = _dosObj.windowAlign ?? g_presetObj.windowAlign;
2313
+ if (align !== undefined) {
2314
+ g_windowAlign[align]();
2315
+ }
2316
+
2299
2317
  obj.jsData = [];
2300
2318
 
2301
2319
  const setJsFiles = (_files, _defaultDir, _type = `custom`) => {
@@ -2315,11 +2333,11 @@ const preheaderConvert = _dosObj => {
2315
2333
 
2316
2334
  // 外部jsファイルの指定
2317
2335
  const tmpCustomjs = _dosObj.customjs ?? g_presetObj.customJs ?? C_JSF_CUSTOM;
2318
- setJsFiles(tmpCustomjs.split(`,`), C_DIR_JS);
2336
+ setJsFiles(tmpCustomjs.replaceAll(`*`, g_presetObj.customJs).split(`,`), C_DIR_JS);
2319
2337
 
2320
2338
  // 外部cssファイルの指定
2321
2339
  const tmpCustomcss = _dosObj.customcss ?? g_presetObj.customCss ?? ``;
2322
- setJsFiles(tmpCustomcss.split(`,`), C_DIR_CSS);
2340
+ setJsFiles(tmpCustomcss.replaceAll(`*`, g_presetObj.customCss).split(`,`), C_DIR_CSS);
2323
2341
 
2324
2342
  // デフォルト曲名表示、背景、Ready表示の利用有無
2325
2343
  g_titleLists.init.forEach(objName => {
@@ -2388,6 +2406,15 @@ const headerConvert = _dosObj => {
2388
2406
  Object.assign(g_lblNameObj, g_lang_lblNameObj[g_localeObj.val], g_presetObj.lblName?.[g_localeObj.val]);
2389
2407
  Object.assign(g_msgObj, g_lang_msgObj[g_localeObj.val], g_presetObj.msg?.[g_localeObj.val]);
2390
2408
 
2409
+ // 自動横幅拡張設定
2410
+ obj.autoSpread = setBoolVal(_dosObj.autoSpread, g_presetObj.autoSpread ?? true);
2411
+
2412
+ // 横幅設定
2413
+ if (hasVal(_dosObj.windowWidth)) {
2414
+ g_sWidth = setIntVal(_dosObj.windowWidth, g_sWidth);
2415
+ $id(`canvas-frame`).width = `${g_sWidth}px`;
2416
+ }
2417
+
2391
2418
  // 曲名
2392
2419
  obj.musicTitles = [];
2393
2420
  obj.musicTitlesForView = [];
@@ -2676,9 +2703,7 @@ const headerConvert = _dosObj => {
2676
2703
  }
2677
2704
 
2678
2705
  // ハッシュタグ
2679
- if (hasVal(_dosObj.hashTag)) {
2680
- obj.hashTag = _dosObj.hashTag;
2681
- }
2706
+ obj.hashTag = setVal(_dosObj.hashTag, ``);
2682
2707
 
2683
2708
  // 自動プリロードの設定
2684
2709
  obj.autoPreload = setBoolVal(_dosObj.autoPreload, true);
@@ -2719,13 +2744,9 @@ const headerConvert = _dosObj => {
2719
2744
  // デフォルト曲名表示のフォント名
2720
2745
  // (使用例: |titlefont=Century,Meiryo UI|)
2721
2746
  obj.titlefonts = g_titleLists.defaultFonts.concat();
2722
- if (hasVal(_dosObj.titlefont)) {
2723
- _dosObj.titlefont.split(`$`).forEach((font, j) => {
2724
- obj.titlefonts[j] = `'${(font.replaceAll(`,`, `', '`))}'`;
2725
- });
2726
- if (obj.titlefonts[1] === undefined) {
2727
- obj.titlefonts[1] = obj.titlefonts[0];
2728
- }
2747
+ _dosObj.titlefont?.split(`$`).forEach((font, j) => obj.titlefonts[j] = `'${(font.replaceAll(`,`, `', '`))}'`);
2748
+ if (obj.titlefonts[1] === undefined) {
2749
+ obj.titlefonts[1] = obj.titlefonts[0];
2729
2750
  }
2730
2751
 
2731
2752
  // デフォルト曲名表示, 背景矢印のグラデーション指定css
@@ -2740,11 +2761,7 @@ const headerConvert = _dosObj => {
2740
2761
 
2741
2762
  // デフォルト曲名表示の表示位置調整
2742
2763
  obj.titlepos = [[0, 0], [0, 0]];
2743
- if (hasVal(_dosObj.titlepos)) {
2744
- _dosObj.titlepos.split(`$`).forEach((pos, j) => {
2745
- obj.titlepos[j] = pos.split(`,`).map(x => parseFloat(x));
2746
- });
2747
- }
2764
+ _dosObj.titlepos?.split(`$`).forEach((pos, j) => obj.titlepos[j] = pos.split(`,`).map(x => parseFloat(x)));
2748
2765
 
2749
2766
  // タイトル文字のアニメーション設定
2750
2767
  obj.titleAnimationName = [`leftToRight`];
@@ -2752,20 +2769,18 @@ const headerConvert = _dosObj => {
2752
2769
  obj.titleAnimationDelay = [0];
2753
2770
  obj.titleAnimationTimingFunction = [`ease`];
2754
2771
  obj.titleAnimationClass = [``];
2755
- if (hasVal(_dosObj.titleanimation)) {
2756
- _dosObj.titleanimation.split(`$`).forEach((pos, j) => {
2757
- const titleAnimation = pos.split(`,`);
2758
- obj.titleAnimationName[j] = setVal(titleAnimation[0], obj.titleAnimationName[0], C_TYP_STRING);
2759
- obj.titleAnimationDuration[j] = setVal(titleAnimation[1] / g_fps, obj.titleAnimationDuration[0], C_TYP_FLOAT);
2760
- obj.titleAnimationDelay[j] = setVal(titleAnimation[2] / g_fps, obj.titleAnimationDelay[0], C_TYP_FLOAT);
2761
- obj.titleAnimationTimingFunction[j] = setVal(titleAnimation[3], obj.titleAnimationName[3], C_TYP_STRING);
2762
- });
2763
- }
2764
- if (hasVal(_dosObj.titleanimationclass)) {
2765
- _dosObj.titleanimationclass.split(`$`).forEach((animationClass, j) => {
2766
- obj.titleAnimationClass[j] = animationClass ?? ``;
2767
- });
2768
- }
2772
+
2773
+ _dosObj.titleanimation?.split(`$`).forEach((pos, j) => {
2774
+ const titleAnimation = pos.split(`,`);
2775
+ obj.titleAnimationName[j] = setVal(titleAnimation[0], obj.titleAnimationName[0]);
2776
+ obj.titleAnimationDuration[j] = setVal(titleAnimation[1] / g_fps, obj.titleAnimationDuration[0], C_TYP_FLOAT);
2777
+ obj.titleAnimationDelay[j] = setVal(titleAnimation[2] / g_fps, obj.titleAnimationDelay[0], C_TYP_FLOAT);
2778
+ obj.titleAnimationTimingFunction[j] = setVal(titleAnimation[3], obj.titleAnimationName[3]);
2779
+ });
2780
+ _dosObj.titleanimationclass?.split(`$`).forEach((animationClass, j) => {
2781
+ obj.titleAnimationClass[j] = animationClass ?? ``;
2782
+ });
2783
+
2769
2784
  if (obj.titleAnimationName.length === 1) {
2770
2785
  g_titleLists.animation.forEach(pattern => {
2771
2786
  obj[`titleAnimation${pattern}`][1] = obj[`titleAnimation${pattern}`][0];
@@ -2899,7 +2914,7 @@ const headerConvert = _dosObj => {
2899
2914
  obj.wordAutoReverse = _dosObj.wordAutoReverse ?? g_presetObj.wordAutoReverse ?? `auto`;
2900
2915
 
2901
2916
  // プレイサイズ(X方向)
2902
- obj.playingWidth = setIntVal(_dosObj.playingWidth, g_sWidth);
2917
+ obj.playingWidth = setIntVal(_dosObj.playingWidth, `default`);
2903
2918
 
2904
2919
  // プレイ左上位置(X座標)
2905
2920
  obj.playingX = setIntVal(_dosObj.playingX);
@@ -2969,9 +2984,7 @@ const updateImgType = _imgType => {
2969
2984
  * ゲージ設定リストへの追加
2970
2985
  * @param {object} _obj
2971
2986
  */
2972
- const addGaugeFulls = _obj => {
2973
- _obj.map(key => g_gaugeOptionObj.customFulls[key] = false);
2974
- };
2987
+ const addGaugeFulls = _obj => _obj.map(key => g_gaugeOptionObj.customFulls[key] = false);
2975
2988
 
2976
2989
  /**
2977
2990
  * 矢印・フリーズアロー色のデータ変換
@@ -3020,19 +3033,18 @@ const resetBaseColorList = (_baseObj, _dosObj, { scoreId = `` } = {}) => {
3020
3033
  _baseObj[_frzInit].length : firstFrzColors.length;
3021
3034
  for (let k = 0; k < baseLength; k++) {
3022
3035
  currentFrzColors[k] = setVal(firstFrzColors[k],
3023
- _baseObj.defaultFrzColorUse ? _baseObj[_frzInit][k] : obj[`${_name}Str`][j], C_TYP_STRING);
3036
+ _baseObj.defaultFrzColorUse ? _baseObj[_frzInit][k] : obj[`${_name}Str`][j]);
3024
3037
  }
3025
3038
 
3026
- Object.keys(_baseObj.dfColorgrdSet).forEach(type => {
3039
+ Object.keys(_baseObj.dfColorgrdSet).forEach(type =>
3027
3040
  [obj[`${_frzName}${type}`][j], obj[`${_frzName}Str${type}`][j], obj[`${_frzName}Org${type}`][j]] =
3028
- setColorList(tmpFrzColors[j], currentFrzColors, _baseObj[_frzInit].length, {
3029
- _defaultColorgrd: _baseObj.dfColorgrdSet[type],
3030
- _colorCdPaddingUse: _baseObj.colorCdPaddingUse,
3031
- _defaultFrzColorUse: _baseObj.defaultFrzColorUse,
3032
- _objType: `frz`,
3033
- _shadowFlg: pattern === `Shadow`,
3034
- });
3035
- });
3041
+ setColorList(tmpFrzColors[j], currentFrzColors, _baseObj[_frzInit].length, {
3042
+ _defaultColorgrd: _baseObj.dfColorgrdSet[type],
3043
+ _colorCdPaddingUse: _baseObj.colorCdPaddingUse,
3044
+ _defaultFrzColorUse: _baseObj.defaultFrzColorUse,
3045
+ _objType: `frz`,
3046
+ _shadowFlg: pattern === `Shadow`,
3047
+ }));
3036
3048
  }
3037
3049
 
3038
3050
  obj[`${_name}Default`] = obj[_name].concat();
@@ -3316,8 +3328,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3316
3328
  if (_dosObj[keyheader] !== undefined) {
3317
3329
  const tmps = _dosObj[keyheader].split(`$`);
3318
3330
  for (let k = 0; k < tmps.length; k++) {
3319
- g_keyObj[`${keyheader}_${k}`] = setVal(g_keyObj[`${_name}${tmps[k]}`],
3320
- setVal(tmps[k], ``, _type), C_TYP_STRING);
3331
+ g_keyObj[`${keyheader}_${k}`] = setVal(g_keyObj[`${_name}${tmps[k]}`], setVal(tmps[k], ``, _type));
3321
3332
  }
3322
3333
  }
3323
3334
  };
@@ -3372,6 +3383,9 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
3372
3383
  // キーの名前 (keyNameX)
3373
3384
  g_keyObj[`keyName${newKey}`] = _dosObj[`keyName${newKey}`] ?? newKey;
3374
3385
 
3386
+ // キーの最小横幅 (minWidthX)
3387
+ g_keyObj[`minWidth${newKey}`] = _dosObj[`minWidth${newKey}`] ?? g_keyObj.minWidthDefault;
3388
+
3375
3389
  // 矢印色パターン (colorX_Y)
3376
3390
  tmpMinPatterns = newKeyMultiParam(newKey, `color`, toNumber, {
3377
3391
  errCd: `E_0101`,
@@ -3534,11 +3548,8 @@ const titleInit = _ => {
3534
3548
  const titlegrd2 = g_headerObj.titlegrds[1] || titlegrd1;
3535
3549
 
3536
3550
  const titlegrds = [];
3537
- [titlegrd1, titlegrd2].forEach((titlegrd, j) => {
3538
- titlegrds[j] = makeColorGradation(titlegrd, {
3539
- _defaultColorgrd: false, _objType: `titleMusic`,
3540
- });
3541
- });
3551
+ [titlegrd1, titlegrd2].forEach((titlegrd, j) =>
3552
+ titlegrds[j] = makeColorGradation(titlegrd, { _defaultColorgrd: false, _objType: `titleMusic` }));
3542
3553
 
3543
3554
  let titlefontsize = 64;
3544
3555
  for (let j = 0; j < g_headerObj.musicTitleForView.length; j++) {
@@ -3943,12 +3954,11 @@ const optionInit = _ => {
3943
3954
  const setSpriteList = _settingList => {
3944
3955
  const optionWidth = (g_sWidth - 450) / 2;
3945
3956
  const spriteList = [];
3946
- _settingList.forEach(setting => {
3957
+ _settingList.forEach(setting =>
3947
3958
  spriteList[setting[0]] = createEmptySprite(optionsprite, `${setting[0]}Sprite`, {
3948
3959
  x: 25, y: setting[1] * C_LEN_SETLBL_HEIGHT + setting[2] + 20,
3949
3960
  w: optionWidth + setting[3], h: C_LEN_SETLBL_HEIGHT + setting[4],
3950
- });
3951
- });
3961
+ }));
3952
3962
  return spriteList;
3953
3963
  };
3954
3964
 
@@ -4210,7 +4220,7 @@ const createOptionWindow = _sprite => {
4210
4220
  setSetting(_val, `scoreDetail`);
4211
4221
  viewScText();
4212
4222
  $id(`detail${g_stateObj.scoreDetail}`).visibility = `visible`;
4213
- }
4223
+ };
4214
4224
 
4215
4225
  multiAppend(scoreDetail,
4216
4226
  createScoreDetail(`Speed`),
@@ -4440,9 +4450,8 @@ const createOptionWindow = _sprite => {
4440
4450
  * @param {string} _data
4441
4451
  * @param {object} _obj
4442
4452
  */
4443
- const makeDifInfoLabel = (_lbl, _data, { x = 130, y = 25, w = 125, h = 35, siz = C_SIZ_DIFSELECTOR, ...rest } = {}) => {
4444
- return createDivCss2Label(_lbl, _data, { x, y, w, h, siz, align: C_ALIGN_LEFT, ...rest });
4445
- }
4453
+ const makeDifInfoLabel = (_lbl, _data, { x = 130, y = 25, w = 125, h = 35, siz = C_SIZ_DIFSELECTOR, ...rest } = {}) =>
4454
+ createDivCss2Label(_lbl, _data, { x, y, w, h, siz, align: C_ALIGN_LEFT, ...rest });
4446
4455
 
4447
4456
  let printData = ``;
4448
4457
  for (let j = 0; j < g_detailObj.arrowCnt.length; j++) {
@@ -6737,7 +6746,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
6737
6746
  const frame = calcFrame(tmpcssMotionData[0]);
6738
6747
  const arrowNum = parseFloat(tmpcssMotionData[1]);
6739
6748
  const styleUp = (tmpcssMotionData[2] === `none` ? `` : tmpcssMotionData[2]);
6740
- const styleDown = (tmpcssMotionData[3] === `none` ? `` : setVal(tmpcssMotionData[3], styleUp, C_TYP_STRING));
6749
+ const styleDown = (tmpcssMotionData[3] === `none` ? `` : setVal(tmpcssMotionData[3], styleUp));
6741
6750
 
6742
6751
  cssMotionData.push([frame, arrowNum, styleUp, styleDown]);
6743
6752
  });
@@ -9883,7 +9892,7 @@ const resultInit = _ => {
9883
9892
 
9884
9893
  // Twitter用リザルト
9885
9894
  // スコアを上塗りする可能性があるため、カスタムイベント後に配置
9886
- const hashTag = (g_headerObj.hashTag !== undefined ? ` ${g_headerObj.hashTag}` : ``);
9895
+ const hashTag = (hasVal(g_headerObj.hashTag) ? ` ${g_headerObj.hashTag}` : ``);
9887
9896
  let tweetDifData = `${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyData}${getStgDetailName('k-')}${g_headerObj.difLabels[g_stateObj.scoreId]}${assistFlg}`;
9888
9897
  if (g_stateObj.shuffle !== `OFF`) {
9889
9898
  tweetDifData += `:${getShuffleName()}`;
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2022/03/18 (v27.0.0)
8
+ * Revised : 2022/03/25 (v27.1.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -73,30 +73,57 @@ const C_TYP_CALC = `calc`;
73
73
 
74
74
  // ウィンドウサイズ
75
75
  let [g_sWidth, g_sHeight] = [
76
- setVal($id(`canvas-frame`).width, 600, C_TYP_FLOAT), setVal($id(`canvas-frame`).height, 500, C_TYP_FLOAT)
76
+ setVal($id(`canvas-frame`).width, 500, C_TYP_FLOAT), setVal($id(`canvas-frame`).height, 500, C_TYP_FLOAT)
77
77
  ];
78
+ $id(`canvas-frame`).width = `${g_sWidth}px`;
79
+ $id(`canvas-frame`).margin = `auto`;
78
80
 
79
81
  // 固定ウィンドウサイズ
80
82
  const g_windowObj = {
81
83
  divRoot: { margin: `auto`, letterSpacing: `normal` },
82
84
  divBack: { background: `linear-gradient(#000000, #222222)` },
83
85
 
84
- optionSprite: { x: (g_sWidth - 450) / 2, y: 65 + (g_sHeight - 500) / 2, w: 450, h: 325 },
86
+ optionSprite: { w: 450, h: 325 },
85
87
  difList: { x: 165, y: 65, w: 280, h: 255, overflow: `auto` },
86
88
  difCover: { x: 25, y: 65, w: 140, h: 255, overflow: `auto`, opacity: 0.95 },
87
89
 
88
90
  scoreDetail: { x: 20, y: 90, w: 420, h: 230, visibility: `hidden` },
89
91
  detailObj: { w: 420, h: 230, visibility: `hidden` },
90
92
 
91
- displaySprite: { x: 25, y: 30, w: (g_sWidth - 450) / 2, h: C_LEN_SETLBL_HEIGHT * 5 },
92
- keyconSprite: { y: 88 + (g_sHeight - 500) / 2, h: g_sHeight, overflow: `auto` },
93
+ displaySprite: { x: 25, y: 30, h: C_LEN_SETLBL_HEIGHT * 5 },
94
+ keyconSprite: { overflow: `auto` },
93
95
 
94
- loader: { y: g_sHeight - 10, h: 10, backgroundColor: `#333333` },
96
+ loader: { h: 10, backgroundColor: `#333333` },
95
97
 
96
- playDataWindow: { x: g_sWidth / 2 - 225, y: 70 + (g_sHeight - 500) / 2, w: 450, h: 110 },
97
- resultWindow: { x: g_sWidth / 2 - 200, y: 185 + (g_sHeight - 500) / 2, w: 400, h: 210 },
98
+ playDataWindow: { w: 450, h: 110 },
99
+ resultWindow: { w: 400, h: 210 },
98
100
  };
99
101
 
102
+ // 可変部分のウィンドウサイズを更新
103
+ const updateWindowSiz = _ => {
104
+ Object.assign(g_windowObj.optionSprite, { x: (g_sWidth - 450) / 2, y: 65 + (g_sHeight - 500) / 2 });
105
+ Object.assign(g_windowObj.displaySprite, { w: (g_sWidth - 450) / 2 });
106
+ Object.assign(g_windowObj.keyconSprite, { y: 88 + (g_sHeight - 500) / 2, h: g_sHeight });
107
+ Object.assign(g_windowObj.loader, { y: g_sHeight - 10 });
108
+ Object.assign(g_windowObj.playDataWindow, { x: g_sWidth / 2 - 225, y: 70 + (g_sHeight - 500) / 2 });
109
+ Object.assign(g_windowObj.resultWindow, { x: g_sWidth / 2 - 200, y: 185 + (g_sHeight - 500) / 2 });
110
+ };
111
+
112
+ // ウィンドウ位置
113
+ const g_windowAlign = {
114
+ left: _ => {
115
+ $id(`canvas-frame`).marginLeft = `0px`;
116
+ $id(`canvas-frame`).marginRight = `auto`;
117
+ },
118
+ center: _ => {
119
+ $id(`canvas-frame`).margin = `auto`;
120
+ },
121
+ right: _ => {
122
+ $id(`canvas-frame`).marginLeft = `auto`;
123
+ $id(`canvas-frame`).marginRight = `0px`;
124
+ },
125
+ }
126
+
100
127
  const g_imgObj = {};
101
128
 
102
129
  // 画像ファイル
@@ -2252,7 +2279,19 @@ const g_keyObj = {
2252
2279
  'Right': [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1],
2253
2280
  },
2254
2281
 
2255
- dummy: 0 // ダミー(カンマ抜け落ち防止)
2282
+ // 横幅最小値
2283
+ minWidth: 500,
2284
+ minWidthDefault: 600,
2285
+
2286
+ minWidth5: 500,
2287
+ minWidth7i: 550,
2288
+ minWidth9A: 650,
2289
+ minWidth11i: 650,
2290
+ minWidth13: 650,
2291
+ minWidth16i: 650,
2292
+ minWidth17: 800,
2293
+ minWidth23: 900,
2294
+
2256
2295
  };
2257
2296
 
2258
2297
  // デフォルト配列のコピー (g_keyObj.aaa_X から g_keyObj.aaa_Xd を作成)
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
  /**
3
3
  * Dancing☆Onigiri 設定用jsファイル
4
- * Template Update: 2022/02/23 (v26.3.1)
4
+ * Template Update: 2022/03/25 (v27.1.0)
5
5
  *
6
6
  * このファイルでは、作品全体に対しての初期設定を行うことができます。
7
7
  * 譜面データ側で個別に同様の項目が設定されている場合は、譜面データ側の設定が優先されます。
@@ -12,7 +12,7 @@
12
12
 
13
13
  /*
14
14
  ------------------------------------------------------------------------
15
- 制作者クレジット
15
+ 制作者クレジット・基本設定
16
16
  https://github.com/cwtickle/danoniplus/wiki/dos-s0001-makerInfo
17
17
  ------------------------------------------------------------------------
18
18
  */
@@ -23,6 +23,14 @@ g_presetObj.tuning = `name`;
23
23
  /** 譜面製作者URL */
24
24
  g_presetObj.tuningUrl = `https://www.google.co.jp/`;
25
25
 
26
+ /** 自動横幅拡張設定 (true:有効、false:無効 / デフォルトは true) */
27
+ //g_presetObj.autoSpread = false;
28
+
29
+ /** 個人サイト別の最小横幅設定 */
30
+ //g_presetObj.autoMinWidth = 600;
31
+
32
+ /** 個人サイト別のウィンドウ位置 (left:左寄せ, center:中央, right:右寄せ)*/
33
+ //g_presetObj.windowAlign = `center`;
26
34
 
27
35
  /*
28
36
  ------------------------------------------------------------------------
@@ -43,7 +51,6 @@ g_presetObj.skinType = `default`;
43
51
  /** 背景・マスクモーションで使用する画像パスの指定方法を他の設定に合わせる設定 (trueで有効化) */
44
52
  //g_presetObj.syncBackPath = true;
45
53
 
46
-
47
54
  /*
48
55
  ------------------------------------------------------------------------
49
56
  ゲージ設定
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "27.0.0",
3
+ "version": "27.1.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {