danoniplus 41.4.2 → 42.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.
@@ -46,16 +46,21 @@ a:hover { color:#FF9900; text-decoration: underline; }
46
46
  9A,SemiHard,2.75,75,1,5
47
47
  9B,Hard,2.75,75,1,5
48
48
  9i,Enjoyable,2.75,75,1,5
49
+ 9d,SemiHard,2.75,75,1,5
50
+ 9h,SemiHard,2.75,75,1,5
49
51
  11,Normal,3.5,75,1,5
50
52
  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
53
  11i,Very Hard,4.5,75,1,5
54
+ 11j,Hard+,3.5,75,1,7
55
+ 12,Normal,3.75,75,1,5
56
+ 12i,Normal+,3.75,75,1,5
57
+ 13,Hard,4.5,75,1,5
58
+ 14,Hard+,4,75,1,5
55
59
  14i,Very Hard,4.5,75,1,5
56
- 16i,Extra,4.5,75,1,5
60
+ 15A,Very Hard,4.5,75,1,5
57
61
  15B,Very Hard,4.5,75,1,5
58
- 13,Hard,4.5,75,1,5
62
+ 16i,Extra,4.5,75,1,5
63
+ 17,Very Hard,4.5,75,1,5
59
64
  |
60
65
  |difSelectorUse=true|
61
66
  |setColor=#cc99ff,#ffccff,#ffffff,#ffff99,#ff9966|
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 : 2025/05/23
7
+ * Revised : 2025/06/07
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 41.4.2`;
12
- const g_revisedDate = `2025/05/23`;
11
+ const g_version = `Ver 42.1.0`;
12
+ const g_revisedDate = `2025/06/07`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -66,7 +66,7 @@ const g_referenceDomains = [
66
66
  Object.freeze(g_referenceDomains);
67
67
 
68
68
  const g_rootPath = current().match(/(^.*\/)/)[0];
69
- const g_workPath = new URL(location.href).href.match(/(^.*\/)/)[0];
69
+ let g_workPath;
70
70
  const hasRemoteDomain = _path => g_referenceDomains.some(domain => _path.match(`^https://${domain}/`) !== null);
71
71
  const g_remoteFlg = hasRemoteDomain(g_rootPath);
72
72
 
@@ -821,6 +821,26 @@ const unEscapeHtml = _str => unEscapeEmoji(replaceStr(_str, g_escapeStr.unEscape
821
821
  */
822
822
  const escapeHtmlForArray = _array => _array.map(str => escapeHtml(str));
823
823
 
824
+ /**
825
+ * URLのパスを検証し、絶対URLまたは相対パスであればその値を返す
826
+ * @param {string} _input
827
+ * @param {string} _defaultUrl
828
+ * @returns {string}
829
+ */
830
+ const validatePath = (_input, _defaultUrl = ``) => {
831
+ // 絶対 URL(http, https, ftp, fileなど)
832
+ const absoluteUrlPattern = /^(https?:\/\/|ftp:\/\/|file:\/\/)/;
833
+
834
+ // 相対パス(ルート相対 `/path/to/file` もしくは `./file`, `../file` )
835
+ const relativePathPattern = /^\/|^\.{1,2}\//;
836
+
837
+ const raw = _input && (absoluteUrlPattern.test(_input) || relativePathPattern.test(_input))
838
+ ? encodeURI(_input) : _defaultUrl;
839
+
840
+ // URL または相対パスが合致すればその値を返し、そうでなければデフォルト URL を返す
841
+ return raw.endsWith(`/`) ? raw : raw + `/`;
842
+ };
843
+
824
844
  /**
825
845
  * 次のカーソルへ移動
826
846
  * @param {number} _basePos
@@ -1354,18 +1374,18 @@ const getStrWidth = (_str, _fontsize, _font) => {
1354
1374
  * 指定した横幅に合ったフォントサイズを取得
1355
1375
  * @param {string} _str
1356
1376
  * @param {number} _maxWidth
1357
- * @param {string} _font
1358
- * @param {number} _maxFontsize
1359
- * @param {number} _minFontsize
1377
+ * @param {string} [object.font=getBasicFont()]
1378
+ * @param {number} [object.maxSiz=14]
1379
+ * @param {number} [object.minSiz=5]
1360
1380
  * @returns {number}
1361
1381
  */
1362
- const getFontSize = (_str, _maxWidth, _font = getBasicFont(), _maxFontsize = 64, _minFontsize = 5) => {
1363
- for (let siz = _maxFontsize; siz >= _minFontsize; siz--) {
1364
- if (_maxWidth >= getStrWidth(getLongestStr(_str?.split(`<br>`)), siz, _font)) {
1382
+ const getFontSize2 = (_str, _maxWidth, { font = getBasicFont(), maxSiz = 14, minSiz = 5 } = {}) => {
1383
+ for (let siz = maxSiz; siz >= minSiz; siz--) {
1384
+ if (_maxWidth >= getStrWidth(getLongestStr(_str?.split(`<br>`)), siz, font)) {
1365
1385
  return siz;
1366
1386
  }
1367
1387
  }
1368
- return _minFontsize;
1388
+ return minSiz;
1369
1389
  };
1370
1390
 
1371
1391
  /**
@@ -1392,7 +1412,7 @@ const getLongestStr = _array => {
1392
1412
  */
1393
1413
  const createDescDiv = (_id, _str, { altId = _id, siz = g_limitObj.mainSiz } = {}) =>
1394
1414
  createDivCss2Label(_id, _str, Object.assign(g_lblPosObj[altId], {
1395
- siz: getFontSize(_str, g_lblPosObj[altId]?.w || g_sWidth, getBasicFont(), siz),
1415
+ siz: getFontSize2(_str, g_lblPosObj[altId]?.w || g_sWidth, { maxSiz: siz }),
1396
1416
  }));
1397
1417
 
1398
1418
  /*-----------------------------------------------------------*/
@@ -2454,6 +2474,8 @@ const initialControl = async () => {
2454
2474
 
2455
2475
  const stage = document.getElementById(`canvas-frame`);
2456
2476
  const divRoot = createEmptySprite(stage, `divRoot`, g_windowObj.divRoot);
2477
+ g_workPath = validatePath(document.getElementById(`jsRootUrl`)?.value,
2478
+ new URL(location.href).href.match(/(^.*\/)/)[0]);
2457
2479
 
2458
2480
  // 背景の表示
2459
2481
  if (document.getElementById(`layer0`) !== null) {
@@ -4467,6 +4489,14 @@ const getKeyName = _key => unEscapeHtml(escapeHtml(g_keyObj[`keyName${_key}`]?.[
4467
4489
  */
4468
4490
  const getKeyUnitName = _key => unEscapeHtml(escapeHtml(g_keyObj[`keyName${_key}`]?.[1] ?? `key`));
4469
4491
 
4492
+ /**
4493
+ * 別キーモード時の表示名の取得
4494
+ * @param {boolean} _spaceFlg
4495
+ * @returns {string} 別キー名
4496
+ */
4497
+ const getTransKeyName = (_spaceFlg = false) => hasVal(g_keyObj[`transKey${g_keyObj.currentKey}_${g_keyObj.currentPtn}`])
4498
+ ? (_spaceFlg ? ` ` : ``) + `(${g_keyObj[`transKey${g_keyObj.currentKey}_${g_keyObj.currentPtn}`]})` : ``;
4499
+
4470
4500
  /**
4471
4501
  * KeyBoardEvent.code の値をCW Edition用のキーコードに変換
4472
4502
  * 簡略指定ができるように、以下の記述を許容
@@ -5126,7 +5156,7 @@ const titleInit = (_initFlg = false) => {
5126
5156
  }
5127
5157
  const releaseDate = (g_headerObj.releaseDate !== `` ? ` @${g_headerObj.releaseDate}` : ``);
5128
5158
  const versionName = `&copy; 2018-${g_revisedDate.slice(0, 4)} ティックル, CW ${g_version}${customVersion}${releaseDate}`;
5129
- const getLinkSiz = _name => getFontSize(_name, g_sWidth / 2 - 20, getBasicFont(), g_limitObj.lnkSiz, 12);
5159
+ const getLinkSiz = _name => getFontSize2(_name, g_sWidth / 2 - 20, { maxSiz: g_limitObj.lnkSiz, minSiz: 12 });
5130
5160
 
5131
5161
  /**
5132
5162
  * クレジット用リンク作成
@@ -5195,7 +5225,7 @@ const titleInit = (_initFlg = false) => {
5195
5225
  // バージョン描画
5196
5226
  createCss2Button(`lnkVersion`, versionName, () => true,
5197
5227
  Object.assign(g_lblPosObj.lnkVersion, {
5198
- siz: getFontSize(versionName, g_sWidth * 3 / 4 - 20, getBasicFont(), 12),
5228
+ siz: getFontSize2(versionName, g_sWidth * 3 / 4 - 20, { maxSiz: 12 }),
5199
5229
  resetFunc: () => openLink(`https://github.com/cwtickle/danoniplus`),
5200
5230
  }), g_cssObj.button_Tweet),
5201
5231
 
@@ -5308,7 +5338,7 @@ const drawTitle = (_titleName = g_headerObj.musicTitleForView, _scoreId = ``) =>
5308
5338
  let titlefontsize = 64;
5309
5339
  for (let j = 0; j < _titleName.length; j++) {
5310
5340
  if (_titleName[j] !== ``) {
5311
- titlefontsize = getFontSize(_titleName[j], g_sWidth - 100, g_headerObj.titlefonts[j], titlefontsize);
5341
+ titlefontsize = getFontSize2(_titleName[j], g_sWidth - 100, { font: g_headerObj.titlefonts[j], maxSiz: titlefontsize });
5312
5342
  }
5313
5343
  }
5314
5344
 
@@ -5558,7 +5588,7 @@ const changeMSelect = (_num, _initFlg = false) => {
5558
5588
  if (j === 0) {
5559
5589
  } else {
5560
5590
  document.getElementById(`btnMusicSelect${j}`).style.fontSize =
5561
- getFontSize(g_headerObj.musicTitles[idx].slice(0, limitedMLength), g_btnWidth(1 / 2), getBasicFont(), 14);
5591
+ getFontSize2(g_headerObj.musicTitles[idx].slice(0, limitedMLength), g_btnWidth(1 / 2));
5562
5592
  document.getElementById(`btnMusicSelect${j}`).innerHTML =
5563
5593
  `${g_headerObj.musicTitles[idx].slice(0, limitedMLength)}${g_headerObj.musicTitles[idx].length > limitedMLength ? '...' : ''}<br>` +
5564
5594
  `<span style="font-size:0.7em;line-height:9px"> / ${g_headerObj.artistNames[idx]}</span>`;
@@ -5593,7 +5623,7 @@ const changeMSelect = (_num, _initFlg = false) => {
5593
5623
  // 選択した楽曲の情報表示
5594
5624
  const idx = g_headerObj.musicIdxList[g_settings.musicIdxNum];
5595
5625
  document.getElementById(`lblMusicSelect`).innerHTML =
5596
- `<span style="font-size:${getFontSize(g_headerObj.musicTitlesForView[idx].join(`<br>`), g_btnWidth(1 / 2), getBasicFont(), 18)}px;` +
5626
+ `<span style="font-size:${getFontSize2(g_headerObj.musicTitlesForView[idx].join(`<br>`), g_btnWidth(1 / 2), { maxSiz: 18 })}px;` +
5597
5627
  `font-weight:bold">${g_headerObj.musicTitlesForView[idx].join(`<br>`)}</span>`;
5598
5628
  document.getElementById(`lblMusicSelectDetail`).innerHTML =
5599
5629
  `Maker: ${creatorLink} / Artist: <a href="${g_headerObj.artistUrls[idx]}" target="_blank">` +
@@ -5843,7 +5873,7 @@ const dataMgtInit = () => {
5843
5873
  const keyWidth = Math.min(Math.max(50, getStrWidth(getKeyName(key), g_limitObj.setLblSiz, getBasicFont())), 80);
5844
5874
  keyListSprite.appendChild(createMgtButton(key, j - 2, 0, {
5845
5875
  w: keyWidth,
5846
- siz: getFontSize(getKeyName(key), keyWidth, getBasicFont(), g_limitObj.setLblSiz, 10),
5876
+ siz: getFontSize2(getKeyName(key), keyWidth, { maxSiz: g_limitObj.setLblSiz, minSiz: 10 }),
5847
5877
  }));
5848
5878
  document.getElementById(`btn${toCapitalize(key)}`).innerHTML = getKeyName(key);
5849
5879
 
@@ -6142,7 +6172,7 @@ const optionInit = () => {
6142
6172
  // 楽曲データの表示
6143
6173
  const text = getMusicInfoView();
6144
6174
  divRoot.appendChild(createDivCss2Label(`lblMusicInfo`, text,
6145
- Object.assign({ siz: getFontSize(text, g_btnWidth(3 / 4), getBasicFont(), 12) }, g_lblPosObj.lblMusicInfo)));
6175
+ Object.assign({ siz: getFontSize2(text, g_btnWidth(3 / 4), { maxSiz: 12 }) }, g_lblPosObj.lblMusicInfo)));
6146
6176
 
6147
6177
  // タイトル文字描画
6148
6178
  divRoot.appendChild(getTitleDivLabel(`lblTitle`, g_lblNameObj.settings, 0, 15, `settings_Title`));
@@ -6713,7 +6743,7 @@ const makeHighScore = _scoreId => {
6713
6743
  const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
6714
6744
  const assistFlg = (g_autoPlaysBase.includes(g_stateObj.autoPlay) ? `` : `-${getStgDetailName(g_stateObj.autoPlay)}${getStgDetailName('less')}`);
6715
6745
  const mirrorName = (g_stateObj.shuffle === C_FLG_OFF ? `` : `-${g_stateObj.shuffle}`);
6716
- const transKeyName = (hasVal(g_keyObj[`transKey${keyCtrlPtn}`]) ? `(${g_keyObj[`transKey${keyCtrlPtn}`]})` : ``);
6746
+ const transKeyName = getTransKeyName();
6717
6747
  let scoreName = `${g_headerObj.keyLabels[_scoreId]}${transKeyName}${getStgDetailName('k-')}${g_headerObj.difLabels[_scoreId]}${assistFlg}${mirrorName}`;
6718
6748
  if (g_headerObj.makerView) {
6719
6749
  scoreName += `-${g_headerObj.creatorNames[_scoreId]}`;
@@ -6959,14 +6989,15 @@ const setDifficulty = (_initFlg) => {
6959
6989
 
6960
6990
  // 譜面名設定 (Difficulty)
6961
6991
  const difWidth = parseFloat(lnkDifficulty.style.width);
6992
+ const transKeyName = getTransKeyName();
6962
6993
  const keyUnitName = getStgDetailName(getKeyUnitName(g_keyObj.currentKey));
6963
- const difNames = [`${getKeyName(g_keyObj.currentKey)} ${keyUnitName} / ${g_headerObj.difLabels[g_stateObj.scoreId]}`];
6964
- lnkDifficulty.style.fontSize = wUnit(getFontSize(difNames[0], difWidth, getBasicFont(), g_limitObj.setLblSiz));
6994
+ const difNames = [`${getKeyName(g_keyObj.currentKey)}${transKeyName} ${keyUnitName} / ${g_headerObj.difLabels[g_stateObj.scoreId]}`];
6995
+ lnkDifficulty.style.fontSize = wUnit(getFontSize2(difNames[0], difWidth, { maxSiz: g_limitObj.setLblSiz }));
6965
6996
 
6966
6997
  if (g_headerObj.makerView) {
6967
6998
  difNames.push(`(${g_headerObj.creatorNames[g_stateObj.scoreId]})`);
6968
6999
  difNames.forEach((difName, j) => {
6969
- const tmpSize = getFontSize(difName, difWidth, getBasicFont(), 14);
7000
+ const tmpSize = getFontSize2(difName, difWidth);
6970
7001
  difNames[j] = `<span style="font-size:${wUnit(tmpSize)}">${difName}</span>`;
6971
7002
  });
6972
7003
  }
@@ -7008,7 +7039,7 @@ const setDifficulty = (_initFlg) => {
7008
7039
 
7009
7040
  // 楽曲データの表示
7010
7041
  lblMusicInfo.textContent = getMusicInfoView();
7011
- lblMusicInfo.style.fontSize = wUnit(getFontSize(lblMusicInfo.textContent, g_btnWidth(3 / 4), getBasicFont(), 12));
7042
+ lblMusicInfo.style.fontSize = wUnit(getFontSize2(lblMusicInfo.textContent, g_btnWidth(3 / 4), { maxSiz: 12 }));
7012
7043
 
7013
7044
  // ユーザカスタムイベント(初期)
7014
7045
  g_customJsObj.difficulty.forEach(func => func(_initFlg, g_canLoadDifInfoFlg));
@@ -8980,10 +9011,10 @@ const keyConfigInit = (_kcType = g_kcType) => {
8980
9011
  g_headerObj[`key${selectedKc}`] = setKey;
8981
9012
  g_headerObj[`key${selectedKc}Def`] = setKey;
8982
9013
  document.getElementById(`sc${selectedKc}`).textContent = getScMsg[selectedKc]();
8983
- document.getElementById(`sc${selectedKc}`).style.fontSize = `${getFontSize(getScMsg[selectedKc](), g_btnWidth(5 / 12) - 40, getBasicFont(), 13)}px`;
9014
+ document.getElementById(`sc${selectedKc}`).style.fontSize = `${getFontSize2(getScMsg[selectedKc](), g_btnWidth(5 / 12) - 40, { maxSiz: 13 })}px`;
8984
9015
  if (g_isMac) {
8985
9016
  scTitleBack.textContent = getScMsg.TitleBack();
8986
- scTitleBack.style.fontSize = `${getFontSize(getScMsg.TitleBack(), g_btnWidth(5 / 12) - 40, getBasicFont(), 13)}px`;
9017
+ scTitleBack.style.fontSize = `${getFontSize2(getScMsg.TitleBack(), g_btnWidth(5 / 12) - 40, { maxSiz: 13 })}px`;
8987
9018
  }
8988
9019
  changeConfigColor(document.getElementById(`sc${selectedKc}`),
8989
9020
  g_headerObj[`key${selectedKc}`] === g_headerObj[`key${selectedKc}Def2`] ?
@@ -11596,10 +11627,11 @@ const mainInit = () => {
11596
11627
  const shuffleName = (g_stateObj.shuffle !== C_FLG_OFF ? `: ${getStgDetailName(g_stateObj.shuffle)}` : ``);
11597
11628
 
11598
11629
  // 曲名・アーティスト名、譜面名のサイズ調整
11599
- const checkMusicSiz = (_text, _siz) => getFontSize(_text, g_headerObj.playingWidth - g_headerObj.customViewWidth - 125, getBasicFont(), _siz);
11630
+ const checkMusicSiz = (_text, _siz) => getFontSize2(_text, g_headerObj.playingWidth - g_headerObj.customViewWidth - 125, { maxSiz: _siz });
11600
11631
 
11601
11632
  const makerView = g_headerObj.makerView ? ` (${g_headerObj.creatorNames[g_stateObj.scoreId]})` : ``;
11602
- let difName = `[${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])} / ${g_headerObj.difLabels[g_stateObj.scoreId]}${assistFlg}${shuffleName}${makerView}]`;
11633
+ const transKeyName = getTransKeyName();
11634
+ let difName = `[${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyName} / ${g_headerObj.difLabels[g_stateObj.scoreId]}${assistFlg}${shuffleName}${makerView}]`;
11603
11635
  let creditName = `${musicTitle} / ${artistName}`;
11604
11636
  if (checkMusicSiz(creditName, g_limitObj.musicTitleSiz) < 12) {
11605
11637
  creditName = `${musicTitle}`;
@@ -13580,7 +13612,7 @@ const resultInit = () => {
13580
13612
  }
13581
13613
 
13582
13614
  const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
13583
- const transKeyName = (hasVal(g_keyObj[`transKey${keyCtrlPtn}`]) ? `(${g_keyObj[`transKey${keyCtrlPtn}`]})` : ``);
13615
+ const transKeyName = getTransKeyName();
13584
13616
  const orgShuffleFlg = g_keyObj[`shuffle${keyCtrlPtn}`].filter((shuffleGr, j) => shuffleGr !== g_keyObj[`shuffle${keyCtrlPtn}_0d`][j]).length === 0;
13585
13617
  const shuffleName = `${getStgDetailName(g_stateObj.shuffle)}${!orgShuffleFlg && !g_stateObj.shuffle.endsWith(`+`) ? getStgDetailName('(S)') : ''}`;
13586
13618
 
@@ -13681,9 +13713,9 @@ const resultInit = () => {
13681
13713
  lblStyleData.style.top = `${parseFloat(lblStyleData.style.top) - 3}px`;
13682
13714
  lblStyleData.innerHTML = `${lblStyleData.textContent.slice(0, playStyleBreakNum)}<br>` +
13683
13715
  `${lblStyleData.textContent.slice(playStyleBreakNum)}`;
13684
- lblStyleData.style.fontSize = `${getFontSize(lblStyleData.textContent.slice(0, playStyleBreakNum), 350, getBasicFont(), 10)}px`;
13716
+ lblStyleData.style.fontSize = `${getFontSize2(lblStyleData.textContent.slice(0, playStyleBreakNum), 350, { maxSiz: 10 })}px`;
13685
13717
  } else {
13686
- lblStyleData.style.fontSize = `${getFontSize(lblStyleData.textContent, 350, getBasicFont(), 14)}px`;
13718
+ lblStyleData.style.fontSize = `${getFontSize2(lblStyleData.textContent, 350)}px`;
13687
13719
  }
13688
13720
 
13689
13721
  /**
@@ -13957,10 +13989,10 @@ const resultInit = () => {
13957
13989
  drawText(unEscapeHtml(difDataForImage), { hy: 4 });
13958
13990
 
13959
13991
  if (playStyleData.length > 60) {
13960
- drawText(playStyleData.slice(0, playStyleBreakNum), { hy: 5, siz: getFontSize(playStyleData.slice(0, playStyleBreakNum), 370, getBasicFont(), 14) });
13961
- drawText(playStyleData.slice(playStyleBreakNum), { hy: 6, siz: getFontSize(playStyleData.slice(playStyleBreakNum), 370, getBasicFont(), 14) });
13992
+ drawText(playStyleData.slice(0, playStyleBreakNum), { hy: 5, siz: getFontSize2(playStyleData.slice(0, playStyleBreakNum), 370) });
13993
+ drawText(playStyleData.slice(playStyleBreakNum), { hy: 6, siz: getFontSize2(playStyleData.slice(playStyleBreakNum), 370) });
13962
13994
  } else {
13963
- drawText(playStyleData, { hy: 5, siz: getFontSize(lblStyleData.textContent, 370, getBasicFont(), 15) });
13995
+ drawText(playStyleData, { hy: 5, siz: getFontSize2(lblStyleData.textContent, 370, { maxSiz: 15 }) });
13964
13996
  }
13965
13997
  Object.keys(jdgScoreObj).forEach(score => {
13966
13998
  drawText(g_lblNameObj[`j_${score}`], { hy: 7 + jdgScoreObj[score].pos, color: jdgScoreObj[score].dfColor });
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2025/05/09 (v41.2.0)
8
+ * Revised : 2025/05/24 (v42.0.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -509,11 +509,11 @@ const updateWindowSiz = () => {
509
509
  },
510
510
  scTitleBack: {
511
511
  x: g_btnX(1 / 4) + 20, y: g_sHeight - 50, align: C_ALIGN_LEFT,
512
- w: g_btnWidth(5 / 12) - 40, h: C_KYC_REPHEIGHT, siz: getFontSize(getScMsg.TitleBack(), g_btnWidth(5 / 12) - 40, getBasicFont(), 13),
512
+ w: g_btnWidth(5 / 12) - 40, h: C_KYC_REPHEIGHT, siz: getFontSize2(getScMsg.TitleBack(), g_btnWidth(5 / 12) - 40, { maxSiz: 13 }),
513
513
  },
514
514
  scRetry: {
515
515
  x: g_btnX(5 / 8) + 20, y: g_sHeight - 50, align: C_ALIGN_LEFT,
516
- w: g_btnWidth(5 / 12) - 40, h: C_KYC_REPHEIGHT, siz: getFontSize(getScMsg.Retry(), g_btnWidth(5 / 12) - 40, getBasicFont(), 13),
516
+ w: g_btnWidth(5 / 12) - 40, h: C_KYC_REPHEIGHT, siz: getFontSize2(getScMsg.Retry(), g_btnWidth(5 / 12) - 40, getBasicFont(), { maxSiz: 13 }),
517
517
  },
518
518
 
519
519
  /** メイン画面 */
@@ -2609,16 +2609,22 @@ const g_keyObj = {
2609
2609
  chara9A_0: [`left`, `down`, `up`, `right`, `space`, `sleft`, `sdown`, `sup`, `sright`],
2610
2610
  chara9B_0: [`left`, `down`, `up`, `right`, `space`, `sleft`, `sdown`, `sup`, `sright`],
2611
2611
  chara9i_0: [`sleft`, `sdown`, `sup`, `sright`, `left`, `down`, `up`, `right`, `space`],
2612
+ chara9d_0: [`left`, `down`, `up`, `right`, `space`, `sleft`, `sdown`, `sup`, `sright`],
2613
+ chara9h_0: [`1x`, `yx`, `ux`, `ix`, `ax`, `zx`, `sx`, `hx`, `mx`],
2612
2614
  chara11_0: [`sleft`, `sdown`, `sup`, `sright`,
2613
2615
  `left`, `leftdia`, `down`, `space`, `up`, `rightdia`, `right`],
2614
2616
  chara11L_0: [`sleft`, `sdown`, `sup`, `sright`,
2615
2617
  `left`, `leftdia`, `down`, `space`, `up`, `rightdia`, `right`],
2616
2618
  chara11i_0: [`left`, `down`, `gor`, `up`, `right`, `space`,
2617
2619
  `sleft`, `sdown`, `siyo`, `sup`, `sright`],
2620
+ chara11j_0: [`gor`, `left`, `down`, `up`, `right`, `space`,
2621
+ `sleft`, `sdown`, `sup`, `sright`, `siyo`],
2618
2622
  chara11W_0: [`sleft`, `sdown`, `sup`, `sright`,
2619
2623
  `left`, `leftdia`, `down`, `space`, `up`, `rightdia`, `right`],
2620
2624
  chara12_0: [`sleft`, `sdown`, `sup`, `sright`,
2621
2625
  `oni`, `left`, `leftdia`, `down`, `space`, `up`, `rightdia`, `right`],
2626
+ chara12i_0: [`oni`, `left`, `leftdia`, `down`, `space`, `up`, `rightdia`, `right`,
2627
+ `sleft`, `sdown`, `sup`, `sright`],
2622
2628
  chara13_0: [`tleft`, `tdown`, `tup`, `tright`,
2623
2629
  `left`, `down`, `up`, `right`, `space`, `sleft`, `sdown`, `sup`, `sright`],
2624
2630
  chara14_0: [`sleftdia`, `sleft`, `sdown`, `sup`, `sright`, `srightdia`,
@@ -2638,11 +2644,25 @@ const g_keyObj = {
2638
2644
  chara5_1: [`space`, `left`, `down`, `up`, `right`],
2639
2645
  chara8_1: [`sleft`, `left`, `leftdia`, `down`, `space`, `up`, `rightdia`, `right`],
2640
2646
  chara9i_1: [`left`, `down`, `up`, `right`, `space`, `sleft`, `sdown`, `sup`, `sright`],
2647
+ chara9h_1: [`1x`, `ax`, `zx`, `sx`, `hx`, `yx`, `ux`, `mx`, `ix`],
2641
2648
  chara17_1: [`aleft`, `adown`, `aup`, `aright`, `space`, `dleft`, `ddown`, `dup`, `dright`,
2642
2649
  `bleft`, `bdown`, `bup`, `bright`, `cleft`, `cdown`, `cup`, `cright`],
2643
2650
 
2644
2651
  chara5_2: [`left`, `down`, `space`, `up`, `right`],
2645
2652
  chara8_2: [`sleft`, `left`, `leftdia`, `down`, `space`, `up`, `rightdia`, `right`],
2653
+ chara9h_2: [`1x`, `ax`, `zx`, `sx`, `hx`, `yx`, `ux`, `mx`, `ix`],
2654
+ chara11_2: [`left`, `sleft`, `sdown`, `leftdia`, `down`, `space`,
2655
+ `up`, `sup`, `sright`, `rightdia`, `right`],
2656
+ chara11L_2: [`left`, `sleft`, `sdown`, `leftdia`, `down`, `space`,
2657
+ `up`, `sup`, `sright`, `rightdia`, `right`],
2658
+
2659
+ chara9h_3: [`1x`, `ax`, `zx`, `sx`, `hx`, `yx`, `ux`, `mx`, `ix`],
2660
+ chara9h_4: [`1x`, `ax`, `gor`, `zx`, `sx`, `hx`, `yx`, `ux`, `siyo`, `mx`, `ix`],
2661
+ chara9h_5: [`1x`, `ax`, `zx`, `sx`, `hx`, `yx`, `ux`, `mx`, `ix`],
2662
+ chara9h_6: [`1x`, `ax`, `zx`, `sx`, `hx`, `yx`, `ux`, `mx`, `ix`],
2663
+
2664
+ chara9A_7: [`left`, `sleft`, `sdown`, `sright`, `down`, `up`, `right`, `space`, `sup`],
2665
+ chara9h_7: [`1x`, `ax`, `zx`, `sx`, `hx`, `yx`, `ux`, `mx`, `ix`],
2646
2666
 
2647
2667
  // 頻度の高い譜面データ名パターン
2648
2668
  // 後で chara4A, chara4A_a, chara4A_b, ... に変換する
@@ -2660,11 +2680,15 @@ const g_keyObj = {
2660
2680
  color9A_0_0: [0, 0, 0, 0, 2, 3, 3, 3, 3],
2661
2681
  color9B_0_0: [1, 0, 1, 0, 2, 0, 1, 0, 1],
2662
2682
  color9i_0_0: [0, 0, 0, 0, 2, 2, 2, 2, 2],
2683
+ color9d_0_0: [0, 1, 0, 2, 2, 2, 0, 1, 0],
2684
+ color9h_0_0: [2, 3, 3, 3, 1, 0, 1, 1, 0],
2663
2685
  color11_0_0: [3, 3, 3, 3, 0, 1, 0, 2, 0, 1, 0],
2664
2686
  color11L_0_0: [3, 3, 3, 3, 0, 1, 0, 2, 0, 1, 0],
2665
2687
  color11W_0_0: [2, 3, 3, 2, 0, 1, 0, 2, 0, 1, 0],
2666
2688
  color11i_0_0: [0, 0, 2, 0, 0, 2, 3, 3, 2, 3, 3],
2689
+ color11j_0_0: [2, 0, 0, 0, 0, 2, 3, 3, 3, 3, 2],
2667
2690
  color12_0_0: [3, 3, 3, 3, 2, 0, 1, 0, 1, 0, 1, 0],
2691
+ color12i_0_0: [1, 0, 1, 0, 3, 3, 3, 3, 0, 1, 0, 1],
2668
2692
  color13_0_0: [4, 4, 4, 4, 0, 0, 0, 0, 2, 3, 3, 3, 3],
2669
2693
  color14_0_0: [4, 3, 3, 3, 3, 4, 2, 0, 1, 0, 1, 0, 1, 0],
2670
2694
  color14i_0_0: [2, 2, 2, 3, 3, 3, 3, 0, 1, 0, 2, 0, 1, 0],
@@ -2685,6 +2709,8 @@ const g_keyObj = {
2685
2709
  color9A_2_0: [3, 0, 3, 0, 2, 0, 3, 0, 3],
2686
2710
  color9B_2_0: [0, 0, 0, 0, 2, 1, 1, 1, 1],
2687
2711
 
2712
+ color9B_3_0: [0, 0, 2, 0, 0, 2, 1, 1, 2, 1, 1],
2713
+
2688
2714
  // ColorGroup - 2
2689
2715
  color9A_0_1: [0, 0, 3, 0, 2, 0, 0, 3, 0],
2690
2716
  color9B_0_1: [4, 3, 1, 0, 2, 0, 1, 3, 4],
@@ -2715,11 +2741,15 @@ const g_keyObj = {
2715
2741
  shuffle9A_0_0: [0, 0, 0, 0, 1, 0, 0, 0, 0],
2716
2742
  shuffle9B_0_0: [0, 0, 0, 0, 1, 0, 0, 0, 0],
2717
2743
  shuffle9i_0_0: [0, 0, 0, 0, 1, 1, 1, 1, 1],
2744
+ shuffle9d_0_0: [0, 0, 0, 1, 1, 1, 2, 2, 2],
2745
+ shuffle9h_0_0: [1, 0, 0, 0, 1, 1, 1, 0, 0],
2718
2746
  shuffle11_0_0: [0, 0, 0, 0, 1, 1, 1, 2, 1, 1, 1],
2719
2747
  shuffle11L_0_0: [0, 0, 0, 0, 1, 1, 1, 2, 1, 1, 1],
2720
2748
  shuffle11W_0_0: [0, 0, 0, 0, 1, 1, 1, 2, 1, 1, 1],
2721
2749
  shuffle11i_0_0: [0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0],
2750
+ shuffle11j_0_0: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
2722
2751
  shuffle12_0_0: [0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2],
2752
+ shuffle12i_0_0: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
2723
2753
  shuffle13_0_0: [0, 0, 0, 0, 1, 1, 1, 1, 2, 3, 3, 3, 3],
2724
2754
  shuffle14_0_0: [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2],
2725
2755
  shuffle14i_0_0: [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 2, 2, 2],
@@ -2741,6 +2771,8 @@ const g_keyObj = {
2741
2771
  shuffle11_0_1: [0, 0, 0, 0, 1, 1, 1, 2, 3, 3, 3],
2742
2772
  shuffle11L_0_1: [0, 0, 0, 0, 1, 1, 1, 2, 3, 3, 3],
2743
2773
  shuffle11i_0_1: [0, 0, 1, 0, 0, 2, 3, 3, 4, 3, 3],
2774
+ shuffle11j_0_1: [3, 0, 0, 0, 0, 1, 2, 2, 2, 2, 4],
2775
+ shuffle12i_0_1: [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2],
2744
2776
  shuffle15A_0_1: [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 4, 4, 4],
2745
2777
  shuffle17_0_1: [0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2],
2746
2778
  shuffle23_0_1: [0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2],
@@ -2761,11 +2793,15 @@ const g_keyObj = {
2761
2793
  stepRtn9A_0_0: [0, -90, 90, 180, `onigiri`, 0, -90, 90, 180],
2762
2794
  stepRtn9B_0_0: [45, 0, -45, -90, `onigiri`, 90, 135, 180, 225],
2763
2795
  stepRtn9i_0_0: [0, -90, 90, 180, `monar`, `giko`, `c`, `morara`, `onigiri`],
2796
+ stepRtn9d_0_0: [0, -45, -90, `giko`, `onigiri`, `iyo`, 90, 135, 180],
2797
+ stepRtn9h_0_0: [`giko`, 0, -90, 180, 45, -90, 135, -45, -90],
2764
2798
  stepRtn11_0_0: [0, -90, 90, 180, 0, -45, -90, `onigiri`, 90, 135, 180],
2765
2799
  stepRtn11L_0_0: [0, -90, 90, 180, 0, -45, -90, `onigiri`, 90, 135, 180],
2766
2800
  stepRtn11W_0_0: [`giko`, 135, 45, `iyo`, 0, -45, -90, `onigiri`, 90, 135, 180],
2767
2801
  stepRtn11i_0_0: [0, -90, `giko`, 90, 180, `onigiri`, 0, -90, `iyo`, 90, 180],
2802
+ stepRtn11j_0_0: [`giko`, 0, -90, 90, 180, `onigiri`, 0, -90, 90, 180, `iyo`],
2768
2803
  stepRtn12_0_0: [0, -90, 90, 180, `onigiri`, 0, 30, 60, 90, 120, 150, 180],
2804
+ stepRtn12i_0_0: [45, 0, -45, -90, `giko`, `onigiri`, `iyo`, `c`, 90, 135, 180, 225],
2769
2805
  stepRtn13_0_0: [0, -90, 90, 180, 0, -90, 90, 180, `onigiri`, 0, -90, 90, 180],
2770
2806
  stepRtn14_0_0: [45, 0, -90, 90, 180, 135, `onigiri`, 0, 30, 60, 90, 120, 150, 180],
2771
2807
  stepRtn14i_0_0: [`giko`, `onigiri`, `iyo`, 0, -90, 90, 180, 0, -45, -90, `onigiri`, 90, 135, 180],
@@ -2779,8 +2815,6 @@ const g_keyObj = {
2779
2815
  stepRtn9i_1_0: [`monar`, `giko`, `c`, `morara`, `onigiri`, 0, -90, 90, 180],
2780
2816
  stepRtn17_1_0: [0, -45, -90, -135, `onigiri`, 45, 90, 135, 180,
2781
2817
  -22.5, -67.5, -112.5, -157.5, 22.5, 67.5, 112.5, 157.5],
2782
- stepRtn17_1_1: [45, 0, -45, -90, `onigiri`, 90, 135, 180, 225,
2783
- 45, 0, -45, -90, 90, 135, 180, 225],
2784
2818
 
2785
2819
  stepRtn5_2_0: [0, -90, `onigiri`, 90, 180],
2786
2820
  stepRtn8_2_0: [`onigiri`, 0, 30, 60, 90, 120, 150, 180],
@@ -2789,6 +2823,9 @@ const g_keyObj = {
2789
2823
  stepRtn11i_0_1: [0, -135, `giko`, 45, 180, `onigiri`, 0, -135, `iyo`, 45, 180],
2790
2824
  stepRtn17_0_1: [-30, 0, 30, 60, 90, 120, 150, 180, `onigiri`, 0, 30, 60, 90, 120, 150, 180, 210],
2791
2825
 
2826
+ stepRtn17_1_1: [45, 0, -45, -90, `onigiri`, 90, 135, 180, 225,
2827
+ 45, 0, -45, -90, 90, 135, 180, 225],
2828
+
2792
2829
  // ShapeGroup - 3 (矢印回転、AAキャラクタ)
2793
2830
  stepRtn17_0_2: [45, 45, 0, 0, -45, -45, -90, -90, `onigiri`, 90, 90, 135, 135, 180, 180, 225, 225],
2794
2831
 
@@ -2801,6 +2838,7 @@ const g_keyObj = {
2801
2838
  // 各キーの区切り位置
2802
2839
  // - 未指定の場合は下段への折り返し無し
2803
2840
  div9i_0: 6,
2841
+ div9h_0: 7,
2804
2842
  div11_0: 6,
2805
2843
  div11L_0: 6,
2806
2844
  div11W_0: 6,
@@ -2814,9 +2852,13 @@ const g_keyObj = {
2814
2852
 
2815
2853
  div17_1: 9,
2816
2854
 
2855
+ // 各キーの下段最終位置
2856
+ divMax9h_0: 15,
2857
+
2817
2858
  // 各キーの位置関係
2818
2859
  // - 未指定の場合は0からの連番が入る
2819
2860
  pos9i_0: [2, 3, 4, 5, 6, 7, 8, 9, 10],
2861
+ pos9h_0: [0, 4, 5, 6, 8, 9, 10, 11.75, 13],
2820
2862
  pos11_0: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
2821
2863
  pos11L_0: [0, 1, 2, 3, 6, 7, 8, 9, 10, 11, 12],
2822
2864
  pos11W_0: [0, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12],
@@ -2837,11 +2879,15 @@ const g_keyObj = {
2837
2879
  keyCtrl9A_0: [[`S`], [`D`], [`E`, `R`], [`F`], [`Space`], [`J`], [`K`], [`I`], [`L`]],
2838
2880
  keyCtrl9B_0: [[`A`], [`S`], [`D`], [`F`], [`Space`], [`J`], [`K`], [`L`], [`;`]],
2839
2881
  keyCtrl9i_0: [[`Left`], [`Down`], [`Up`], [`Right`], [`A`], [`S`], [`D`], [`F`], [`Space`]],
2882
+ keyCtrl9d_0: [[`S`], [`D`], [`F`], [`V`], [`B`], [`N`], [`J`], [`K`], [`L`]],
2883
+ keyCtrl9h_0: [[`D1`], [`Y`], [`U`], [`I`], [`A`], [`Z`], [`S`], [`H`], [`M`]],
2840
2884
  keyCtrl11_0: [[`Left`], [`Down`], [`Up`], [`Right`], [`S`], [`D`], [`F`], [`Space`], [`J`], [`K`], [`L`]],
2841
2885
  keyCtrl11L_0: [[`W`], [`E`], [`D3`, `D4`], [`R`], [`S`], [`D`], [`F`], [`Space`], [`J`], [`K`], [`L`]],
2842
2886
  keyCtrl11W_0: [[`D1`, `D2`], [`T`], [`Y`], [`D0`, `Minus`], [`S`], [`D`], [`F`], [`Space`], [`J`], [`K`], [`L`]],
2843
2887
  keyCtrl11i_0: [[`S`], [`X`, `C`], [`D`], [`E`, `R`], [`F`], [`Space`], [`J`], [`M`, `Comma`], [`K`], [`I`, `O`], [`L`]],
2888
+ keyCtrl11j_0: [[`Tab`], [`S`], [`D`], [`E`, `R`], [`F`], [`Space`], [`J`], [`K`], [`I`], [`L`], [`Enter`]],
2844
2889
  keyCtrl12_0: [[`U`], [`I`], [`D8`, `D9`], [`O`], [`Space`], [`N`], [`J`], [`M`], [`K`], [`Comma`], [`L`], [`Period`]],
2890
+ keyCtrl12i_0: [[`F1`], [`F2`], [`F3`], [`F4`], [`F5`], [`F6`], [`F7`], [`F8`], [`F9`], [`F10`], [`F11`], [`F12`]],
2845
2891
  keyCtrl13_0: [[`Left`], [`Down`], [`Up`], [`Right`], [`S`], [`D`], [`E`, `R`], [`F`], [`Space`], [`J`], [`K`], [`I`], [`L`]],
2846
2892
  keyCtrl14_0: [[`T`, `Y`], [`U`], [`I`], [`D8`, `D7`, `D9`, `D0`], [`O`], [`BracketLeft`, `P`], [`Space`], [`N`], [`J`], [`M`], [`K`], [`Comma`], [`L`], [`Period`]],
2847
2893
  keyCtrl14i_0: [[`Z`, `W`], [`X`, `E`], [`C`, `R`], [`Left`], [`Down`], [`Up`], [`Right`], [`S`], [`D`], [`F`], [`Space`], [`J`], [`K`], [`L`]],
@@ -2860,6 +2906,7 @@ const g_keyObj = {
2860
2906
  keyCtrl9A_1: [[`S`], [`D`], [`E`, `R`], [`F`], [`Space`], [`Left`], [`Down`], [`Up`], [`Right`]],
2861
2907
  keyCtrl9i_1: [[`A`], [`S`], [`D`], [`F`], [`Space`], [`Left`], [`Down`], [`Up`], [`Right`]],
2862
2908
  keyCtrl12_1: [[`Y`], [`U`, `I`], [`D8`, `D7`, `D9`], [`O`], [`Space`], [`B`], [`H`], [`N`, `M`], [`J`, `K`], [`Comma`], [`L`], [`Period`]],
2909
+ keyCtrl12i_1: [[`Q`], [`W`], [`E`], [`R`], [`T`], [`Y`], [`U`], [`I`], [`O`], [`P`], [`Ja-@`], [`Ja-[`]],
2863
2910
  keyCtrl14_1: [[`R`, `T`], [`Y`], [`U`, `I`], [`D8`, `D6`, `D7`, `D9`, `D0`], [`O`], [`BracketLeft`, `P`], [`Space`], [`B`], [`H`], [`N`, `M`], [`J`, `K`], [`Comma`], [`L`], [`Period`]],
2864
2911
  keyCtrl17_1: [[`A`], [`S`], [`D`], [`F`], [`Space`], [`J`], [`K`], [`L`], [`;`], [`Z`], [`X`], [`C`], [`V`], [`N`], [`M`], [`Comma`], [`Period`]],
2865
2912
 
@@ -2897,6 +2944,10 @@ const g_keyObj = {
2897
2944
  blank5_2: 57.5,
2898
2945
  blank9A_0: 52.5,
2899
2946
  blank9B_0: 52.5,
2947
+ blank9i_1: 52.5,
2948
+ blank9d_0: 52.5,
2949
+ blank11j_0: 50,
2950
+ blank12i_0: 50,
2900
2951
  blank23_0: 50,
2901
2952
 
2902
2953
  // 矢印群の倍率指定
@@ -2905,11 +2956,13 @@ const g_keyObj = {
2905
2956
  scale17_0: 0.95,
2906
2957
 
2907
2958
  // ショートカットキーコード
2908
- keyRetry: 8,
2909
- keyRetry8_0: 9,
2959
+ keyRetry: 8, // 8: Backspace
2960
+ keyRetry8_0: 9, // 9: Tab
2910
2961
  keyRetry8_1: 9,
2962
+ keyRetry11j_0: 123, // 123: F12
2911
2963
 
2912
- keyTitleBack: 46,
2964
+ keyTitleBack: 46, // 46: Delete
2965
+ keyTitleBack11j_0: 27, // 27: Escape
2913
2966
 
2914
2967
  // 別キー
2915
2968
  transKey8_2: '12',
@@ -2925,6 +2978,7 @@ const g_keyObj = {
2925
2978
  '9A-2': '9A',
2926
2979
  '9B-1': '9B',
2927
2980
  '9B-2': '9B',
2981
+ 'himsiyauz': '9h',
2928
2982
  'TP': '13',
2929
2983
  '15': '15A',
2930
2984
  '15R': '15B',
@@ -3010,7 +3064,6 @@ const g_keyObj = {
3010
3064
  'Twist': [1, 1, -1, -1, -1, 1, 1, -1, -1],
3011
3065
  'Asymmetry': [1, -1, -1, 1, -1, -1, 1, 1, -1],
3012
3066
  },
3013
-
3014
3067
  scrollDir9i_1: {
3015
3068
  '---': [1, 1, 1, 1, 1, 1, 1, 1, 1],
3016
3069
  'Cross': [1, 1, -1, -1, -1, -1, -1, 1, 1],
@@ -3019,6 +3072,18 @@ const g_keyObj = {
3019
3072
  'Twist': [1, 1, -1, -1, 1, 1, 1, -1, -1],
3020
3073
  'Asymmetry': [1, -1, -1, 1, -1, -1, 1, 1, -1],
3021
3074
  },
3075
+ scrollDir9d_0: {
3076
+ '---': [1, 1, 1, 1, 1, 1, 1, 1, 1],
3077
+ 'Cross': [1, 1, 1, -1, -1, -1, 1, 1, 1],
3078
+ 'Split': [1, 1, 1, 1, -1, -1, -1, -1, -1],
3079
+ 'Alternate': [1, -1, 1, -1, 1, -1, 1, -1, 1],
3080
+ 'Twist': [1, 1, -1, -1, -1, 1, 1, -1, -1],
3081
+ 'Asymmetry': [1, -1, -1, 1, -1, -1, 1, 1, -1],
3082
+ },
3083
+ scrollDir9h_0: {
3084
+ '---': [1, 1, 1, 1, 1, 1, 1, 1, 1],
3085
+ 'Flat': [1, 1, 1, 1, -1, -1, -1, -1, -1],
3086
+ },
3022
3087
 
3023
3088
  scrollDir11_0: {
3024
3089
  '---': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
@@ -3040,12 +3105,25 @@ const g_keyObj = {
3040
3105
  'Twist': [1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1],
3041
3106
  'Asymmetry': [1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1],
3042
3107
  },
3108
+ scrollDir11j_0: {
3109
+ '---': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
3110
+ 'Cross': [1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1],
3111
+ 'Split': [1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1],
3112
+ 'Alternate': [1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1],
3113
+ 'AA-Split': [1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1],
3114
+ },
3043
3115
 
3044
3116
  scrollDir12_0: {
3045
3117
  '---': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
3046
3118
  'Flat': [1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1],
3047
3119
  'Twist': [1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1],
3048
3120
  },
3121
+ scrollDir12i_0: {
3122
+ '---': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
3123
+ 'Cross': [1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1],
3124
+ 'Split': [1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1],
3125
+ 'Alternate': [1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1],
3126
+ },
3049
3127
  scrollDir13_0: {
3050
3128
  '---': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
3051
3129
  'Flat': [1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
@@ -3097,6 +3175,10 @@ const g_keyObj = {
3097
3175
  'Left': [1, 1, 1, 1, 0, 0, 0, 0, 0],
3098
3176
  'Right': [0, 0, 0, 0, 0, 1, 1, 1, 1],
3099
3177
  },
3178
+ assistPos9d_0: {
3179
+ 'Left': [1, 1, 1, 1, 0, 0, 0, 0, 0],
3180
+ 'Right': [0, 0, 0, 0, 0, 1, 1, 1, 1],
3181
+ },
3100
3182
 
3101
3183
  assistPos11i_0: {
3102
3184
  'Left': [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
@@ -3123,7 +3205,16 @@ const g_keyObj = {
3123
3205
  minWidth5: 500,
3124
3206
  minWidth7i: 550,
3125
3207
  minWidth9A: 650,
3208
+ minWidth9B: 650,
3209
+ minWidth9i: 650,
3210
+ minWidth9d: 650,
3211
+ minWidth9h: 650,
3212
+ minWidth11: 650,
3213
+ minWidth11L: 650,
3126
3214
  minWidth11i: 650,
3215
+ minWidth11j: 650,
3216
+ minWidth12: 675,
3217
+ minWidth12i: 675,
3127
3218
  minWidth13: 650,
3128
3219
  minWidth16i: 650,
3129
3220
  minWidth17: 825,
@@ -3143,7 +3234,7 @@ Object.keys(g_keyObj)
3143
3234
  // ・コピー先:コピー元の順に指定する
3144
3235
  // ・上から順に処理する
3145
3236
  const g_copyKeyPtn = {
3146
- '8_3': `8_2`,
3237
+ '8_3': `8_2`, // 12key下部はマッピングが異なるため、8_2を流用
3147
3238
  '8_4': `8_2`,
3148
3239
  '8_5': `8_2`,
3149
3240
  '7_1': `7_0`,
@@ -3163,27 +3254,74 @@ const g_copyKeyPtn = {
3163
3254
  '9A_1': `9A_0`,
3164
3255
  '9A_2': `9B_0`,
3165
3256
  '9A_3': `11i_0`,
3257
+ '9A_4': `9i_0`,
3258
+ '9A_5': `9i_1`,
3259
+ '9A_6': `9d_0`,
3260
+ '9A_7': `9h_0`,
3261
+
3166
3262
  '9B_1': `9A_0`,
3167
3263
  '9B_2': `9A_1`,
3168
-
3264
+ '9B_3': `11i_0`,
3265
+ '9B_4': `9i_0`,
3266
+ '9B_5': `9i_1`,
3267
+ '9B_6': `9d_0`,
3268
+ '9B_7': `9A_7`, // 9hはcharaX_Yのマッピングが異なるため、9A_7を流用
3269
+
3270
+ '9i_2': `9A_0`,
3271
+ '9i_3': `9A_1`,
3272
+ '9i_4': `9B_0`,
3273
+ '9i_5': `11i_0`,
3274
+ '9i_6': `9d_0`,
3275
+ '9i_7': `9A_7`, // 9hはcharaX_Yのマッピングが異なるため、9A_7を流用
3276
+
3277
+ '9d_1': `9A_0`,
3278
+ '9d_2': `9A_1`,
3279
+ '9d_3': `9B_0`,
3280
+ '9d_4': `11i_0`,
3281
+ '9d_5': `9i_0`,
3282
+ '9d_6': `9i_1`,
3283
+ '9d_7': `9A_7`, // 9hはcharaX_Yのマッピングが異なるため、9A_7を流用
3284
+
3285
+ // 9hはcharaX_Yのマッピングが異なるため、既存パターンをコピーしたうえでcharaX_Yを入れ替え
3286
+ '9h_1': `9A_0`,
3287
+ '9h_2': `9A_1`,
3288
+ '9h_3': `9B_0`,
3289
+ '9h_4': `11i_0`,
3290
+ '9h_5': `9i_0`,
3291
+ '9h_6': `9i_1`,
3292
+ '9h_7': `9d_0`,
3293
+
3294
+ '12i_1': `12i_0`, // 12keyで12ikeyの参照を行うため先に定義
3169
3295
  '12_1': `12_0`,
3170
3296
  '12_2': `12_0`,
3171
3297
  '12_3': `12_0`,
3298
+ '12_4': `12i_0`,
3299
+ '12_5': `12i_1`,
3300
+
3172
3301
  '11_1': `11L_0`,
3173
- '11_2': `12_0`,
3174
- '11_3': `12_1`,
3175
- '11_4': `12_2`,
3176
- '11_5': `12_3`,
3302
+ '11_2': `11i_0`,
3303
+ '11_3': `12_0`,
3304
+ '11_4': `12_1`,
3305
+ '11_5': `12_2`,
3306
+ '11_6': `12_3`,
3307
+
3177
3308
  '11L_1': `11_0`,
3178
- '11L_2': `12_0`,
3179
- '11L_3': `12_1`,
3180
- '11L_4': `12_2`,
3181
- '11L_5': `12_3`,
3309
+ '11L_2': `11_2`, // 1iiはcharaX_Yのマッピングが異なるため、11_2を流用
3310
+ '11L_3': `12_0`,
3311
+ '11L_4': `12_1`,
3312
+ '11L_5': `12_2`,
3313
+ '11L_6': `12_3`,
3314
+
3182
3315
  '11W_1': `12_0`,
3183
3316
  '11W_2': `12_1`,
3184
3317
  '11W_3': `12_2`,
3185
3318
  '11W_4': `12_3`,
3186
3319
 
3320
+ '12i_2': `12_0`,
3321
+ '12i_3': `12_1`,
3322
+ '12i_4': `12_2`,
3323
+ '12i_5': `12_3`,
3324
+
3187
3325
  '14_1': `14_0`,
3188
3326
  '14_2': `14_0`,
3189
3327
  '14_3': `14_0`,
@@ -3245,10 +3383,12 @@ Object.keys(g_copyKeyPtn).forEach(keyPtnTo => {
3245
3383
  copyKeyPtnVal(`keyRetry`);
3246
3384
  copyKeyPtnVal(`keyTitleBack`);
3247
3385
 
3248
- if (g_keyObj[`transKey${keyPtnFrom}`] !== undefined) {
3249
- g_keyObj[`transKey${keyPtnTo}`] = g_keyObj[`transKey${keyPtnFrom}`];
3250
- } else if (g_keyObj[`transKey${keyPtnTo}`] === undefined && keyPtnFrom.split(`_`)[0] !== keyPtnTo.split(`_`)[0]) {
3251
- g_keyObj[`transKey${keyPtnTo}`] = keyPtnFrom.split(`_`)[0];
3386
+ if (g_keyObj[`transKey${keyPtnTo}`] === undefined || g_keyObj[`transKey${keyPtnTo}`].includes(`_`)) {
3387
+ if (g_keyObj[`transKey${keyPtnFrom}`] !== undefined) {
3388
+ g_keyObj[`transKey${keyPtnTo}`] = g_keyObj[`transKey${keyPtnFrom}`];
3389
+ } else if (g_keyObj[`transKey${keyPtnTo}`] === undefined && keyPtnFrom.split(`_`)[0] !== keyPtnTo.split(`_`)[0]) {
3390
+ g_keyObj[`transKey${keyPtnTo}`] = keyPtnFrom.split(`_`)[0];
3391
+ }
3252
3392
  }
3253
3393
  });
3254
3394
 
@@ -5,11 +5,15 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2024/10/29
8
- * Revised : 2024/11/07 (v38.0.2)
8
+ * Revised : 2025/05/24 (v42.0.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
12
12
 
13
+ /** @deprecated */
14
+ const getFontSize = (_str, _maxWidth, _font = getBasicFont(), _maxFontsize = 64, _minFontsize = 5) =>
15
+ getFontSize2(_str, _maxWidth, { font: _font, maxSiz: _maxFontsize, minSiz: _minFontsize });
16
+
13
17
  /** @deprecated */
14
18
  const createSprite = (_parentObjName, _newObjName, x, y, w, h, _options = {}) =>
15
19
  createEmptySprite(document.getElementById(_parentObjName), _newObjName, { x, y, w, h, title: _options?.description });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "41.4.2",
3
+ "version": "42.1.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "./js/danoni_main.js",
6
6
  "scripts": {