danoniplus 36.2.0 → 36.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/js/danoni_main.js CHANGED
@@ -4,12 +4,12 @@
4
4
  *
5
5
  * Source by tickle
6
6
  * Created : 2018/10/08
7
- * Revised : 2024/05/01
7
+ * Revised : 2024/05/08
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 36.2.0`;
12
- const g_revisedDate = `2024/05/01`;
11
+ const g_version = `Ver 36.3.0`;
12
+ const g_revisedDate = `2024/05/08`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -409,13 +409,20 @@ const copyArray2d = _array2d => structuredClone(_array2d);
409
409
  */
410
410
  const sumData = _array => _array.reduce((p, x) => p + x);
411
411
 
412
+ /**
413
+ * 特定の値で埋めた配列を作成
414
+ * @param {number} _length
415
+ * @param {any} _val
416
+ */
417
+ const fillArray = (_length, _val = 0) => [...Array(_length)].fill(_val);
418
+
412
419
  /**
413
420
  * 最小配列長の配列を作成
414
421
  * @param {array} _array
415
422
  * @param {number} _minLength
416
423
  * @param {number} _defaultVal
417
424
  */
418
- const makeBaseArray = (_array = [], _minLength, _defaultVal) => padArray(_array, [...Array(_minLength)].fill(_defaultVal));
425
+ const makeBaseArray = (_array = [], _minLength, _defaultVal) => padArray(_array, fillArray(_minLength, _defaultVal));
419
426
 
420
427
  /**
421
428
  * ベースとする配列に対して別の配列で上書き
@@ -1021,9 +1028,9 @@ const getFontSize = (_str, _maxWidth, _font = getBasicFont(), _maxFontsize = 64,
1021
1028
  * @param {string} _str
1022
1029
  * @param {string} _altId
1023
1030
  */
1024
- const createDescDiv = (_id, _str, _altId = _id) =>
1025
- createDivCss2Label(_id, _str, Object.assign(g_lblPosObj[_altId], {
1026
- siz: getFontSize(_str, g_sWidth, getBasicFont(), g_limitObj.mainSiz),
1031
+ const createDescDiv = (_id, _str, { altId = _id, siz = g_limitObj.mainSiz } = {}) =>
1032
+ createDivCss2Label(_id, _str, Object.assign(g_lblPosObj[altId], {
1033
+ siz: getFontSize(_str, g_lblPosObj[altId]?.w || g_sWidth, getBasicFont(), siz),
1027
1034
  }));
1028
1035
 
1029
1036
  /*-----------------------------------------------------------*/
@@ -1584,7 +1591,7 @@ const makeSpriteData = (_data, _calcFrame = _frame => _frame) => {
1584
1591
  const tmpSpriteData = tmpData.split(`,`).map(val => trimStr(val));
1585
1592
 
1586
1593
  // 深度が"-"の場合はスキップ
1587
- if (tmpSpriteData.length <= 1 || tmpSpriteData[1] === `-`) {
1594
+ if (!hasVal(tmpSpriteData[1], `-`)) {
1588
1595
  return;
1589
1596
  }
1590
1597
 
@@ -2332,7 +2339,7 @@ const storeBaseData = (_scoreId, _scoreObj, _keyCtrlPtn) => {
2332
2339
 
2333
2340
  // 譜面密度グラフ用のデータ作成
2334
2341
  const noteCnt = { arrow: [], frz: [] };
2335
- const densityData = [...Array(g_limitObj.densityDivision)].fill(0);
2342
+ const densityData = fillArray(g_limitObj.densityDivision);
2336
2343
  let allData = 0;
2337
2344
 
2338
2345
  const types = [`arrow`, `frz`];
@@ -2359,8 +2366,8 @@ const storeBaseData = (_scoreId, _scoreObj, _keyCtrlPtn) => {
2359
2366
 
2360
2367
  fullData = fullData.filter(val => !isNaN(parseFloat(val))).sort((a, b) => a - b);
2361
2368
  let pushCnt = 1;
2362
- const density2PushData = [...Array(g_limitObj.densityDivision)].fill(0);
2363
- const density3PushData = [...Array(g_limitObj.densityDivision)].fill(0);
2369
+ const density2PushData = fillArray(g_limitObj.densityDivision);
2370
+ const density3PushData = fillArray(g_limitObj.densityDivision);
2364
2371
  fullData.forEach((note, j) => {
2365
2372
  if (fullData[j] === fullData[j + 1]) {
2366
2373
  pushCnt++;
@@ -3724,7 +3731,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3724
3731
  const nums = _str?.split(`@:`);
3725
3732
  const groupStr = toFloatStr(nums[0]).split(`!`).join(`,`);
3726
3733
  return nums.length === 2 && !isNaN(parseInt(nums[1])) ?
3727
- [...Array(Math.floor(parseInt(nums[1])))].fill(groupStr).join(`,`) : groupStr;
3734
+ fillArray(Math.floor(parseInt(nums[1])), groupStr).join(`,`) : groupStr;
3728
3735
  };
3729
3736
 
3730
3737
  /**
@@ -3833,7 +3840,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3833
3840
  const keyPtn = getKeyPtnName(list);
3834
3841
  if (list === ``) {
3835
3842
  // 空指定の場合は一律同じグループへ割り当て
3836
- g_keyObj[`${keyheader}_${k + dfPtn}_${ptnCnt}`] = [...Array(g_keyObj[`${g_keyObj.defaultProp}${_key}_${k + dfPtn}`].length)].fill(0);
3843
+ g_keyObj[`${keyheader}_${k + dfPtn}_${ptnCnt}`] = fillArray(g_keyObj[`${g_keyObj.defaultProp}${_key}_${k + dfPtn}`].length);
3837
3844
 
3838
3845
  } else if (g_keyObj[`${_name}${keyPtn}_0`] !== undefined) {
3839
3846
  // 他のキーパターン (例: |shuffle8i=8_0| ) を直接指定した場合、該当があれば既存パターンからコピー
@@ -3861,7 +3868,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3861
3868
  // 特に指定が無い場合はkeyCtrlX_Yの配列長で決定
3862
3869
  for (let k = 0; k < g_keyObj.minPatterns; k++) {
3863
3870
  const ptnName = `${_key}_${k + dfPtn}`;
3864
- g_keyObj[`${_name}${ptnName}_0`] = [...Array(g_keyObj[`${g_keyObj.defaultProp}${ptnName}`].length)].fill(0);
3871
+ g_keyObj[`${_name}${ptnName}_0`] = fillArray(g_keyObj[`${g_keyObj.defaultProp}${ptnName}`].length);
3865
3872
  g_keyObj[`${_name}${ptnName}`] = structuredClone(g_keyObj[`${_name}${ptnName}_0`]);
3866
3873
  }
3867
3874
  }
@@ -3910,7 +3917,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3910
3917
 
3911
3918
  // デフォルト項目がある場合は先に定義
3912
3919
  if (_defaultName !== ``) {
3913
- g_keyObj[pairName][_defaultName] = [...Array(g_keyObj[`${g_keyObj.defaultProp}${_key}_${k + dfPtn}`].length)].fill(_defaultVal);
3920
+ g_keyObj[pairName][_defaultName] = fillArray(g_keyObj[`${g_keyObj.defaultProp}${_key}_${k + dfPtn}`].length, _defaultVal);
3914
3921
  }
3915
3922
  tmpParam.split(`/`).forEach(pairs => {
3916
3923
  const keyPtn = getKeyPtnName(pairs);
@@ -4051,7 +4058,7 @@ const setKeyDfVal = _ptnName => {
4051
4058
  const baseLength = g_keyObj[`${g_keyObj.defaultProp}${_ptnName}`].length;
4052
4059
  g_keyObj[`chara${_ptnName}`] = padArray(g_keyObj[`chara${_ptnName}`], [...Array(baseLength).keys()].map(i => `${i + 1}a`));
4053
4060
  g_keyObj[`pos${_ptnName}`] = padArray(g_keyObj[`pos${_ptnName}`], [...Array(baseLength).keys()].map(i => i));
4054
- g_keyObj[`keyGroup${_ptnName}`] = padArray(g_keyObj[`keyGroup${_ptnName}`], [...Array(baseLength)].fill([`0`]));
4061
+ g_keyObj[`keyGroup${_ptnName}`] = padArray(g_keyObj[`keyGroup${_ptnName}`], fillArray(baseLength, [`0`]));
4055
4062
 
4056
4063
  if (g_keyObj[`div${_ptnName}`] === undefined) {
4057
4064
  g_keyObj[`div${_ptnName}`] = Math.max(...g_keyObj[`pos${_ptnName}`]) + 1;
@@ -5080,7 +5087,7 @@ const makeHighScore = _scoreId => {
5080
5087
  color: g_localStorage.highscores?.[scoreName]?.rankColor ?? `#666666`,
5081
5088
  fontFamily: getBasicFont(`"Bookman Old Style"`),
5082
5089
  })),
5083
- createScoreLabel(`lblHDateTime`, g_localStorage.highscores?.[scoreName]?.dateTime ?? `----/--/-- --/--`, { yPos: 12 }),
5090
+ createScoreLabel(`lblHDateTime`, g_localStorage.highscores?.[scoreName]?.dateTime ?? `----/--/-- --:--`, { yPos: 12 }),
5084
5091
  createScoreLabel(`lblHMarks`,
5085
5092
  `${g_localStorage.highscores?.[scoreName]?.fullCombo ?? '' ? '<span class="result_FullCombo">◆</span>' : ''}` +
5086
5093
  `${g_localStorage.highscores?.[scoreName]?.perfect ?? '' ? '<span class="result_Perfect">◆</span>' : ''}` +
@@ -5371,7 +5378,7 @@ const createOptionWindow = _sprite => {
5371
5378
  });
5372
5379
  if (g_headerObj.baseSpeed !== 1) {
5373
5380
  divRoot.appendChild(
5374
- createDivCss2Label(`lblBaseSpd`, `Δv: ${Math.round(g_headerObj.baseSpeed * 100) / 100}x`, { x: g_sWidth - 100, y: 0, w: 100, h: 20, siz: 14 })
5381
+ createDivCss2Label(`lblBaseSpd`, `Δv: ${Math.round(g_headerObj.baseSpeed * 100) / 100}x`, g_lblPosObj.lblBaseSpd)
5375
5382
  );
5376
5383
  }
5377
5384
 
@@ -5617,7 +5624,7 @@ const createOptionWindow = _sprite => {
5617
5624
  * @param {object} _options
5618
5625
  */
5619
5626
  const createGeneralSetting = (_obj, _settingName, { unitName = ``,
5620
- skipTerms = [...Array(3)].fill(1), hiddenBtn = false, addRFunc = _ => { }, addLFunc = _ => { },
5627
+ skipTerms = fillArray(3, 1), hiddenBtn = false, addRFunc = _ => { }, addLFunc = _ => { },
5621
5628
  settingLabel = _settingName, displayName = g_currentPage, scLabel = ``, roundNum = 0, adjY = 0 } = {}) => {
5622
5629
 
5623
5630
  const settingUpper = toCapitalize(_settingName);
@@ -5918,7 +5925,7 @@ const gaugeFormat = (_mode, _border, _rcv, _dmg, _init, _lifeValFlg) => {
5918
5925
 
5919
5926
  // 達成率(Accuracy)・許容ミス数の計算
5920
5927
  const [rateText, allowableCntsText] = getAccuracy(borderVal, realRcv, realDmg, initVal, allCnt);
5921
- g_resultObj.requiredAccuracy = rateText;
5928
+ g_workObj.requiredAccuracy = rateText;
5922
5929
 
5923
5930
  return `<div id="gaugeDivCover" class="settings_gaugeDivCover">
5924
5931
  <div id="lblGaugeDivTable" class="settings_gaugeDivTable">
@@ -6065,10 +6072,7 @@ const makeSettingLblCssButton = (_id, _name, _heightPos, _func, { x, y, w, h, si
6065
6072
  */
6066
6073
  const makeDifLblCssButton = (_id, _name, _heightPos, _func, { x = 0, w = g_limitObj.difSelectorWidth, h = g_limitObj.setLblHeight, btnStyle = `Default` } = {}) =>
6067
6074
  createCss2Button(_id, _name, _func, {
6068
- x, y: h * _heightPos,
6069
- w, h,
6070
- siz: g_limitObj.difSelectorSiz,
6071
- borderStyle: `solid`,
6075
+ x, y: h * _heightPos, w, h, siz: g_limitObj.difSelectorSiz, borderStyle: `solid`,
6072
6076
  }, g_cssObj[`button_${btnStyle}`], g_cssObj.button_ON);
6073
6077
 
6074
6078
  /**
@@ -6080,10 +6084,8 @@ const makeDifLblCssButton = (_id, _name, _heightPos, _func, { x = 0, w = g_limit
6080
6084
  */
6081
6085
  const makeMiniCssButton = (_id, _directionFlg, _heightPos, _func, { dx = 0, dy = 0, dw = 0, dh = 0, dsiz = 0, visibility = `visible` } = {}) =>
6082
6086
  createCss2Button(`${_id}${_directionFlg}`, g_settingBtnObj.chara[_directionFlg], _func, {
6083
- x: g_settingBtnObj.pos[_directionFlg] + dx,
6084
- y: g_limitObj.setLblHeight * _heightPos + dy,
6085
- w: g_limitObj.setMiniWidth + dw, h: g_limitObj.setLblHeight + dh, siz: g_limitObj.setLblSiz + dsiz,
6086
- visibility: visibility
6087
+ x: g_settingBtnObj.pos[_directionFlg] + dx, y: g_limitObj.setLblHeight * _heightPos + dy,
6088
+ w: g_limitObj.setMiniWidth + dw, h: g_limitObj.setLblHeight + dh, siz: g_limitObj.setLblSiz + dsiz, visibility,
6087
6089
  }, g_cssObj.button_Mini);
6088
6090
 
6089
6091
  /**
@@ -6377,6 +6379,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
6377
6379
  g_keycons.cursorNumList = [...Array(keyNum).keys()].map(i => i);
6378
6380
  const configKeyGroupList = g_headerObj.keyGroupOrder[g_stateObj.scoreId] ??
6379
6381
  g_keyObj[`keyGroupOrder${keyCtrlPtn}`] ?? tkObj.keyGroupList;
6382
+ g_keycons.colorCursorNum = 0;
6380
6383
 
6381
6384
  /**
6382
6385
  * keyconSpriteのスクロール位置調整
@@ -6447,7 +6450,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
6447
6450
  * @param {number} _scrollNum
6448
6451
  */
6449
6452
  const changeTmpShuffleNum = (_j, _scrollNum = 1) => {
6450
- const tmpShuffle = changeTmpData(`shuffle`, 10, _j, _scrollNum);
6453
+ const tmpShuffle = changeTmpData(`shuffle`, g_limitObj.kcShuffleNums, _j, _scrollNum);
6451
6454
  document.getElementById(`sArrow${_j}`).textContent = tmpShuffle + 1;
6452
6455
 
6453
6456
  changeShuffleConfigColor(keyCtrlPtn, g_keyObj[`shuffle${keyCtrlPtn}_${g_keycons.shuffleGroupNum}`][_j], _j);
@@ -6639,7 +6642,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
6639
6642
  // ショートカットキーメッセージ
6640
6643
  createDescDiv(`scMsg`, g_lblNameObj.kcShortcutDesc.split(`{0}`)
6641
6644
  .join(g_isMac ? `Shift+${g_kCd[g_headerObj.keyRetry]}` : g_kCd[g_headerObj.keyTitleBack])
6642
- .split(`{1}`).join(g_kCd[g_headerObj.keyRetry]), `scKcMsg`),
6645
+ .split(`{1}`).join(g_kCd[g_headerObj.keyRetry]), { altId: `scKcMsg` }),
6643
6646
 
6644
6647
  // 別キーモード警告メッセージ
6645
6648
  createDivCss2Label(
@@ -6792,6 +6795,26 @@ const keyConfigInit = (_kcType = g_kcType) => {
6792
6795
  }
6793
6796
  };
6794
6797
 
6798
+ /**
6799
+ * ColorPickerに対応する実際の番号を取得
6800
+ * @param {number} _j
6801
+ */
6802
+ const getGroupNum = _j => _j + g_keycons.colorCursorNum * g_limitObj.kcColorPickerNum;
6803
+
6804
+ /**
6805
+ * ColorPicker(一式)の切替
6806
+ */
6807
+ const changeColorPickers = _ => {
6808
+ lnkColorR.innerHTML = `[${g_keycons.colorCursorNum + 1} /`;
6809
+ for (let j = 0; j < g_limitObj.kcColorPickerNum; j++) {
6810
+ const m = getGroupNum(j);
6811
+ changeColorPicker(j, `arrow`, g_headerObj.setColor[m]);
6812
+ changeColorPicker(j, `arrowShadow`, g_headerObj.setShadowColor[m]);
6813
+ changeColorPicker(j, `frz`, g_headerObj.frzColor[m][0]);
6814
+ changeColorPicker(j, `frzBar`, g_headerObj.frzColor[m][1]);
6815
+ }
6816
+ };
6817
+
6795
6818
  /**
6796
6819
  * ColorTypeの制御
6797
6820
  * @param {number} _scrollNum
@@ -6807,12 +6830,8 @@ const keyConfigInit = (_kcType = g_kcType) => {
6807
6830
  lnkColorType.textContent = `${getStgDetailName(g_colorType)}${g_localStorage.colorType === g_colorType ? ' *' : ''}`;
6808
6831
  if (_reloadFlg) {
6809
6832
  colorPickSprite.style.display = ([`Default`, `Type0`].includes(g_colorType) ? C_DIS_NONE : C_DIS_INHERIT);
6810
- for (let j = 0; j < g_headerObj.setColor.length; j++) {
6811
- changeColorPicker(j, `arrow`, g_headerObj.setColor[j]);
6812
- changeColorPicker(j, `arrowShadow`, g_headerObj.setShadowColor[j]);
6813
- changeColorPicker(j, `frz`, g_headerObj.frzColor[j][0]);
6814
- changeColorPicker(j, `frzBar`, g_headerObj.frzColor[j][1]);
6815
- }
6833
+ g_keycons.colorCursorNum = g_keycons.colorCursorNum % Math.ceil(g_headerObj.setColor.length / g_limitObj.kcColorPickerNum);
6834
+ changeColorPickers();
6816
6835
  }
6817
6836
  };
6818
6837
 
@@ -6831,17 +6850,49 @@ const keyConfigInit = (_kcType = g_kcType) => {
6831
6850
  colorPickSprite.style.display = C_DIS_NONE;
6832
6851
  }
6833
6852
  multiAppend(colorPickSprite,
6834
- createDivCss2Label(`lblPickArrow`, g_lblNameObj.s_arrow, Object.assign({ y: 0 }, g_lblPosObj.pickPos)),
6835
- createDivCss2Label(`lblPickFrz`, g_lblNameObj.s_frz, Object.assign({ y: 140 }, g_lblPosObj.pickPos)),
6836
- createCss2Button(`lnkColorCopy`, `[↓]`, _ => {
6853
+
6854
+ // ColorPickerの切替
6855
+ createCss2Button(`lnkColorR`, `[${g_keycons.colorCursorNum + 1} /`, _ => {
6856
+ g_keycons.colorCursorNum = (g_keycons.colorCursorNum + 1) % Math.ceil(g_headerObj.setColor.length / g_limitObj.kcColorPickerNum);
6857
+ changeColorPickers();
6858
+ }, g_lblPosObj.lnkColorR, g_cssObj.button_Start),
6859
+
6860
+ // 矢印の配色をフリーズアローへ反映
6861
+ createCss2Button(`lnkColorCopy`, `↓]`, _ => {
6837
6862
  if (window.confirm(g_msgObj.colorCopyConfirm)) {
6838
6863
  for (let j = 0; j < g_headerObj.setColor.length; j++) {
6839
- g_headerObj[`frzColor${g_colorType}`][j] = [...Array(g_headerObj[`frzColor${g_colorType}`][j].length)].fill(g_headerObj[`setColor${g_colorType}`][j]);
6864
+ g_headerObj.frzColor[j] = g_headerObj[`frzColor${g_colorType}`][j] =
6865
+ fillArray(g_headerObj[`frzColor${g_colorType}`][j].length, g_headerObj[`setColor${g_colorType}`][j]);
6866
+ }
6867
+ for (let j = 0; j < g_limitObj.kcColorPickerNum; j++) {
6868
+ const m = getGroupNum(j);
6840
6869
  [``, `Bar`].forEach((val, k) =>
6841
- document.getElementById(`pickfrz${val}${j}`).value = g_headerObj[`frzColor${g_colorType}`][j][k]);
6870
+ document.getElementById(`pickfrz${val}${j}`).value = g_headerObj[`frzColor${g_colorType}`][m][k]);
6842
6871
  }
6843
6872
  }
6844
6873
  }, g_lblPosObj.lnkColorCopy, g_cssObj.button_Start),
6874
+
6875
+ createDivCss2Label(`lblPickArrow`, g_lblNameObj.s_arrow, Object.assign({ y: 0 }, g_lblPosObj.pickPos)),
6876
+ createDivCss2Label(`lblPickFrz`, g_lblNameObj.s_frz, Object.assign({ y: 140 }, g_lblPosObj.pickPos)),
6877
+
6878
+ // ColorPickerの色を元に戻す
6879
+ createCss2Button(`lnkColorReset`, g_lblNameObj.b_cReset, _ => {
6880
+ if (window.confirm(g_msgObj.colorResetConfirm)) {
6881
+ resetColorType({ _from: g_colorType, _to: ``, _fromObj: g_dfColorObj });
6882
+ resetColorType({ _from: g_colorType, _to: g_colorType, _fromObj: g_dfColorObj });
6883
+
6884
+ // 影矢印が未指定の場合はType1, Type2の影矢印指定を無くす
6885
+ if (!hasVal(g_headerObj[`setShadowColor${setScoreIdHeader(g_stateObj.scoreId)}Default`][0]) &&
6886
+ [`Type1`, `Type2`].includes(g_colorType)) {
6887
+
6888
+ g_headerObj.setShadowColor = fillArray(g_headerObj.setColorInit.length, ``);
6889
+ g_headerObj[`setShadowColor${g_colorType}`] = fillArray(g_headerObj.setColorInit.length, ``);
6890
+ }
6891
+
6892
+ changeColorPickers();
6893
+ viewGroupObj.color(`_${g_keycons.colorGroupNum}`);
6894
+ }
6895
+ }, g_lblPosObj.lnkColorReset, g_cssObj.button_Reset),
6845
6896
  );
6846
6897
 
6847
6898
  /**
@@ -6854,20 +6905,21 @@ const keyConfigInit = (_kcType = g_kcType) => {
6854
6905
  const createColorPickWindow = (_j, _type, _func, { x = 0, y = 15 } = {}) =>
6855
6906
  createColorPicker(colorPickSprite, `pick${_type}${_j}`, _func, { x, y: y + 25 * _j });
6856
6907
 
6857
- for (let j = 0; j < g_headerObj.setColor.length; j++) {
6908
+ for (let j = 0; j < g_limitObj.kcColorPickerNum; j++) {
6858
6909
  createColorPickWindow(j, `arrow`, _ => {
6859
- g_headerObj[`setColor${g_colorType}`][j] = document.getElementById(`pickarrow${j}`).value;
6910
+ g_headerObj[`setColor${g_colorType}`][getGroupNum(j)] = document.getElementById(`pickarrow${j}`).value;
6860
6911
  setColorType(0, false);
6861
6912
  });
6862
6913
 
6863
6914
  createColorPickWindow(j, `arrowShadow`, _ => {
6864
- g_headerObj[`setShadowColor${g_colorType}`][j] = `${document.getElementById(`pickarrowShadow${j}`).value}80`;
6915
+ g_headerObj[`setShadowColor${g_colorType}`][getGroupNum(j)] = `${document.getElementById(`pickarrowShadow${j}`).value}80`;
6865
6916
  setColorType(0, false);
6866
6917
  }, { x: 25 });
6867
6918
 
6868
6919
  [``, `Bar`].forEach((val, k) =>
6869
- createColorPickWindow(j, `frz${val}`, _ =>
6870
- g_headerObj[`frzColor${g_colorType}`][j][k] = document.getElementById(`pickfrz${val}${j}`).value, { x: 25 * k, y: 155 }));
6920
+ createColorPickWindow(j, `frz${val}`, _ => {
6921
+ g_headerObj[`frzColor${g_colorType}`][getGroupNum(j)][k] = document.getElementById(`pickfrz${val}${j}`).value;
6922
+ }, { x: 25 * k, y: 155 }));
6871
6923
  }
6872
6924
 
6873
6925
  // ConfigType, ColorTypeの初期設定
@@ -6949,12 +7001,11 @@ const keyConfigInit = (_kcType = g_kcType) => {
6949
7001
  // 部分キー表示用ボタン描画
6950
7002
  if (configKeyGroupList.length > 1) {
6951
7003
  multiAppend(divRoot,
6952
- createDivCss2Label(`lblkey`, `KeySwitch`, { x: g_sWidth - 80, y: 90, w: 60, h: 20, siz: 14 }));
7004
+ createDivCss2Label(`lblkey`, `KeySwitch`, g_lblPosObj.lblkey));
6953
7005
  configKeyGroupList.forEach((val, j) =>
6954
7006
  divRoot.appendChild(
6955
- createCss2Button(`key${j}`, `${j + 1}`, _ => {
6956
- appearConfigSteps(j);
6957
- }, { x: g_sWidth - 60, y: 110 + j * 20, w: 50, h: 20, siz: 14 }, g_cssObj.button_Mini),
7007
+ createCss2Button(`key${j}`, `${j + 1}`, _ => appearConfigSteps(j),
7008
+ Object.assign({ y: 110 + j * 20 }, g_lblPosObj.lnkKeySwitch), g_cssObj.button_Mini),
6958
7009
  ));
6959
7010
  }
6960
7011
 
@@ -7085,7 +7136,7 @@ const getKeyInfo = _ => {
7085
7136
  const keyNum = g_keyObj[`${g_keyObj.defaultProp}${keyCtrlPtn}`].length;
7086
7137
  const posMax = g_keyObj[`divMax${keyCtrlPtn}`] ?? Math.max(...g_keyObj[`pos${keyCtrlPtn}`]) + 1;
7087
7138
  const divideCnt = g_keyObj[`div${keyCtrlPtn}`] - 1;
7088
- const keyGroupMaps = setVal(g_keyObj[`keyGroup${keyCtrlPtn}`], [...Array(keyNum)].fill([`0`]), C_TYP_STRING);
7139
+ const keyGroupMaps = setVal(g_keyObj[`keyGroup${keyCtrlPtn}`], fillArray(keyNum, [`0`]), C_TYP_STRING);
7089
7140
  const keyGroupList = makeDedupliArray(keyGroupMaps.flat()).sort((a, b) => parseInt(a) - parseInt(b));
7090
7141
 
7091
7142
  return {
@@ -7116,6 +7167,9 @@ const changeSetColor = _ => {
7116
7167
  };
7117
7168
  Object.keys(currentTypes).forEach(pattern => {
7118
7169
  g_headerObj[`set${pattern}Color`] = structuredClone(g_headerObj[`set${pattern}Color${currentTypes[pattern]}`]);
7170
+ if (g_headerObj[`frz${pattern}Color`] === undefined) {
7171
+ g_headerObj[`frz${pattern}Color`] = fillArray(g_headerObj.setColorInit.length, ``);
7172
+ }
7119
7173
  for (let j = 0; j < g_headerObj.setColorInit.length; j++) {
7120
7174
  g_headerObj[`frz${pattern}Color`][j] = structuredClone(g_headerObj[`frz${pattern}Color${currentTypes[pattern]}`][j]);
7121
7175
  }
@@ -7126,7 +7180,7 @@ const changeSetColor = _ => {
7126
7180
 
7127
7181
  // 影矢印が未指定の場合はType1, Type2の影矢印指定を無くす
7128
7182
  if (!hasVal(g_headerObj[`setShadowColor${idHeader}Default`][0]) && [`Type1`, `Type2`].includes(g_colorType)) {
7129
- g_headerObj.setShadowColor = [...Array(g_headerObj.setColorInit.length)].fill(``);
7183
+ g_headerObj.setShadowColor = fillArray(g_headerObj.setColorInit.length, ``);
7130
7184
  }
7131
7185
  };
7132
7186
 
@@ -7397,7 +7451,7 @@ const loadingScoreInit = async () => {
7397
7451
 
7398
7452
  // シャッフルグループ未定義の場合
7399
7453
  if (g_keyObj[`shuffle${keyCtrlPtn}`] === undefined) {
7400
- g_keyObj[`shuffle${keyCtrlPtn}`] = [...Array(keyNum)].fill(0);
7454
+ g_keyObj[`shuffle${keyCtrlPtn}`] = fillArray(keyNum);
7401
7455
  }
7402
7456
 
7403
7457
  // シャッフルグループを扱いやすくする
@@ -8254,7 +8308,7 @@ const setSpeedOnFrame = (_speedData, _lastFrame) => {
8254
8308
  * Motionオプション適用時の矢印別の速度設定
8255
8309
  * - 矢印が表示される最大フレーム数を 縦ピクセル数×20 と定義。
8256
8310
  */
8257
- const setMotionOnFrame = _ => g_motionFunc[g_stateObj.motion]([...Array(g_headerObj.playingHeight * 20 + 1)].fill(0));
8311
+ const setMotionOnFrame = _ => g_motionFunc[g_stateObj.motion](fillArray(g_headerObj.playingHeight * 20 + 1));
8258
8312
 
8259
8313
  /**
8260
8314
  * Boost用の適用関数
@@ -8879,9 +8933,9 @@ const getArrowSettings = _ => {
8879
8933
  }
8880
8934
  }
8881
8935
 
8882
- g_typeLists.arrow.forEach(type => g_workObj[`judg${toCapitalize(type)}Cnt`] = [...Array(keyNum)].fill(1));
8883
- g_workObj.judgFrzHitCnt = [...Array(keyNum)].fill(1);
8884
- g_judgObj.lockFlgs = [...Array(keyNum)].fill(false);
8936
+ g_typeLists.arrow.forEach(type => g_workObj[`judg${toCapitalize(type)}Cnt`] = fillArray(keyNum, 1));
8937
+ g_workObj.judgFrzHitCnt = fillArray(keyNum, 1);
8938
+ g_judgObj.lockFlgs = fillArray(keyNum, false);
8885
8939
 
8886
8940
  // 矢印色管理 (個別・全体)
8887
8941
  const eachOrAll = [``, `All`];
@@ -8894,9 +8948,9 @@ const getArrowSettings = _ => {
8894
8948
  });
8895
8949
 
8896
8950
  // モーション管理
8897
- g_typeLists.arrow.forEach(type => g_workObj[`${type}CssMotions`] = [...Array(keyNum)].fill(``));
8951
+ g_typeLists.arrow.forEach(type => g_workObj[`${type}CssMotions`] = fillArray(keyNum, ``));
8898
8952
 
8899
- const scrollDirOptions = g_keyObj[`scrollDir${keyCtrlPtn}`]?.[g_stateObj.scroll] ?? [...Array(keyNum)].fill(1);
8953
+ const scrollDirOptions = g_keyObj[`scrollDir${keyCtrlPtn}`]?.[g_stateObj.scroll] ?? fillArray(keyNum, 1);
8900
8954
 
8901
8955
  g_stateObj.autoAll = boolToSwitch(g_stateObj.autoPlay === C_FLG_ALL);
8902
8956
  g_workObj.hitPosition = (g_stateObj.autoAll === C_FLG_ON ? 0 : g_stateObj.hitPosition);
@@ -9050,10 +9104,10 @@ const mainInit = _ => {
9050
9104
 
9051
9105
  g_currentArrows = 0;
9052
9106
  const wordMaxLen = g_scoreObj.wordMaxDepth + 1;
9053
- g_workObj.fadeInNo = [...Array(wordMaxLen)].fill(0);
9054
- g_workObj.fadeOutNo = [...Array(wordMaxLen)].fill(0);
9055
- g_workObj.lastFadeFrame = [...Array(wordMaxLen)].fill(0);
9056
- g_workObj.wordFadeFrame = [...Array(wordMaxLen)].fill(0);
9107
+ g_workObj.fadeInNo = fillArray(wordMaxLen);
9108
+ g_workObj.fadeOutNo = fillArray(wordMaxLen);
9109
+ g_workObj.lastFadeFrame = fillArray(wordMaxLen);
9110
+ g_workObj.wordFadeFrame = fillArray(wordMaxLen);
9057
9111
 
9058
9112
  // 背景スプライトを作成
9059
9113
  createMultipleSprite(`backSprite`, g_scoreObj.backMaxDepth, { x: g_workObj.backX });
@@ -9088,10 +9142,10 @@ const mainInit = _ => {
9088
9142
  }
9089
9143
 
9090
9144
  // 矢印・フリーズアロー・速度変化 移動/判定/変化対象の初期化
9091
- const arrowCnts = [...Array(keyNum)].fill(0);
9092
- const frzCnts = [...Array(keyNum)].fill(0);
9093
- const dummyArrowCnts = [...Array(keyNum)].fill(0);
9094
- const dummyFrzCnts = [...Array(keyNum)].fill(0);
9145
+ const arrowCnts = fillArray(keyNum);
9146
+ const frzCnts = fillArray(keyNum);
9147
+ const dummyArrowCnts = fillArray(keyNum);
9148
+ const dummyFrzCnts = fillArray(keyNum);
9095
9149
  let speedCnts = 0;
9096
9150
  let boostCnts = 0;
9097
9151
  let keychCnts = 0;
@@ -9267,9 +9321,7 @@ const mainInit = _ => {
9267
9321
  const fullTime = transFrameToTimer(fullFrame - g_stateObj.intAdjustment);
9268
9322
 
9269
9323
  // フレーム数
9270
- divRoot.appendChild(
9271
- createDivCss2Label(`lblframe`, g_scoreObj.baseFrame, { x: 0, y: 0, w: 100, h: 30, siz: 20, display: g_workObj.lifegaugeDisp, })
9272
- );
9324
+ divRoot.appendChild(createDivCss2Label(`lblframe`, g_scoreObj.baseFrame, Object.assign(g_lblPosObj.lblframe, { display: g_workObj.lifegaugeDisp })));
9273
9325
 
9274
9326
  // ライフ(数字)部作成
9275
9327
  const intLifeVal = Math.floor(g_workObj.lifeVal);
@@ -10992,7 +11044,7 @@ const resultInit = _ => {
10992
11044
  }
10993
11045
 
10994
11046
  const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
10995
- const transKeyData = hasVal(g_keyObj[`transKey${keyCtrlPtn}`]) ? `(` + g_keyObj[`transKey${keyCtrlPtn}`] + `)` : ``;
11047
+ const transKeyName = (hasVal(g_keyObj[`transKey${keyCtrlPtn}`]) ? `(${g_keyObj[`transKey${keyCtrlPtn}`]})` : ``);
10996
11048
 
10997
11049
  /**
10998
11050
  * プレイスタイルのカスタム有無
@@ -11004,7 +11056,7 @@ const resultInit = _ => {
11004
11056
  (_flg !== _defaultSet ? getStgDetailName(_displayText) : ``);
11005
11057
 
11006
11058
  const difDatas = [
11007
- `${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyData} ${getStgDetailName('key')} / ${g_headerObj.difLabels[g_stateObj.scoreId]}`,
11059
+ `${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyName} ${getStgDetailName('key')} / ${g_headerObj.difLabels[g_stateObj.scoreId]}`,
11008
11060
  `${withOptions(g_autoPlaysBase.includes(g_stateObj.autoPlay), true, `-${getStgDetailName(g_stateObj.autoPlay)}${getStgDetailName('less')}`)}`,
11009
11061
  `${withOptions(g_headerObj.makerView, false, `(${g_headerObj.creatorNames[g_stateObj.scoreId]})`)}`,
11010
11062
  `${withOptions(g_stateObj.shuffle, C_FLG_OFF, `[${getStgDetailName(g_stateObj.shuffle)}]`)}`
@@ -11052,17 +11104,18 @@ const resultInit = _ => {
11052
11104
  display2Data += ` : OFF`;
11053
11105
  }
11054
11106
 
11107
+ const [lblRX, dataRX] = [20, 60];
11055
11108
  multiAppend(playDataWindow,
11056
- makeCssResultPlayData(`lblMusic`, 20, g_cssObj.result_lbl, 0, g_lblNameObj.rt_Music, C_ALIGN_LEFT),
11057
- makeCssResultPlayData(`lblMusicData`, 60, g_cssObj.result_style, 0, mTitleForView[0]),
11058
- makeCssResultPlayData(`lblMusicData2`, 60, g_cssObj.result_style, 1, mTitleForView[1]),
11059
- makeCssResultPlayData(`lblDifficulty`, 20, g_cssObj.result_lbl, 2, g_lblNameObj.rt_Difficulty, C_ALIGN_LEFT),
11060
- makeCssResultPlayData(`lblDifData`, 60, g_cssObj.result_style, 2, difData),
11061
- makeCssResultPlayData(`lblStyle`, 20, g_cssObj.result_lbl, 3, g_lblNameObj.rt_Style, C_ALIGN_LEFT),
11062
- makeCssResultPlayData(`lblStyleData`, 60, g_cssObj.result_style, 3, playStyleData),
11063
- makeCssResultPlayData(`lblDisplay`, 20, g_cssObj.result_lbl, 4, g_lblNameObj.rt_Display, C_ALIGN_LEFT),
11064
- makeCssResultPlayData(`lblDisplayData`, 60, g_cssObj.result_style, 4, displayData),
11065
- makeCssResultPlayData(`lblDisplay2Data`, 60, g_cssObj.result_style, 5, display2Data),
11109
+ makeCssResultPlayData(`lblMusic`, lblRX, g_cssObj.result_lbl, 0, g_lblNameObj.rt_Music, C_ALIGN_LEFT),
11110
+ makeCssResultPlayData(`lblMusicData`, dataRX, g_cssObj.result_style, 0, mTitleForView[0]),
11111
+ makeCssResultPlayData(`lblMusicData2`, dataRX, g_cssObj.result_style, 1, mTitleForView[1]),
11112
+ makeCssResultPlayData(`lblDifficulty`, lblRX, g_cssObj.result_lbl, 2, g_lblNameObj.rt_Difficulty, C_ALIGN_LEFT),
11113
+ makeCssResultPlayData(`lblDifData`, dataRX, g_cssObj.result_style, 2, difData),
11114
+ makeCssResultPlayData(`lblStyle`, lblRX, g_cssObj.result_lbl, 3, g_lblNameObj.rt_Style, C_ALIGN_LEFT),
11115
+ makeCssResultPlayData(`lblStyleData`, dataRX, g_cssObj.result_style, 3, playStyleData),
11116
+ makeCssResultPlayData(`lblDisplay`, lblRX, g_cssObj.result_lbl, 4, g_lblNameObj.rt_Display, C_ALIGN_LEFT),
11117
+ makeCssResultPlayData(`lblDisplayData`, dataRX, g_cssObj.result_style, 4, displayData),
11118
+ makeCssResultPlayData(`lblDisplay2Data`, dataRX, g_cssObj.result_style, 5, display2Data),
11066
11119
  );
11067
11120
 
11068
11121
  // キャラクタ、スコア描画のID共通部、色CSS名、スコア変数名
@@ -11086,22 +11139,23 @@ const resultInit = _ => {
11086
11139
  makeCssResultSymbol(`lbl${jdgScoreObj[score].id}S`, 50, g_cssObj.common_score, jdgScoreObj[score].pos, g_resultObj[score], C_ALIGN_RIGHT),
11087
11140
  ));
11088
11141
  if (g_stateObj.autoAll === C_FLG_OFF) {
11142
+ const [lblPosX, dataPosX] = [350, 260];
11089
11143
  multiAppend(resultWindow,
11090
- makeCssResultSymbol(`lblFast`, 350, g_cssObj.common_diffFast, 0, g_lblNameObj.j_fast),
11091
- makeCssResultSymbol(`lblSlow`, 350, g_cssObj.common_diffSlow, 2, g_lblNameObj.j_slow),
11092
- makeCssResultSymbol(`lblFastS`, 260, g_cssObj.score, 1, g_resultObj.fast, C_ALIGN_RIGHT),
11093
- makeCssResultSymbol(`lblSlowS`, 260, g_cssObj.score, 3, g_resultObj.slow, C_ALIGN_RIGHT),
11144
+ makeCssResultSymbol(`lblFast`, lblPosX, g_cssObj.common_diffFast, 0, g_lblNameObj.j_fast),
11145
+ makeCssResultSymbol(`lblSlow`, lblPosX, g_cssObj.common_diffSlow, 2, g_lblNameObj.j_slow),
11146
+ makeCssResultSymbol(`lblFastS`, dataPosX, g_cssObj.score, 1, g_resultObj.fast, C_ALIGN_RIGHT),
11147
+ makeCssResultSymbol(`lblSlowS`, dataPosX, g_cssObj.score, 3, g_resultObj.slow, C_ALIGN_RIGHT),
11094
11148
  );
11095
11149
  if (estimatedAdj !== ``) {
11096
11150
  multiAppend(resultWindow,
11097
- makeCssResultSymbol(`lblAdj`, 350, g_cssObj.common_estAdj, 4, g_lblNameObj.j_adj),
11098
- makeCssResultSymbol(`lblAdjS`, 260, g_cssObj.score, 5, `${getDiffFrame(estimatedAdj)}`, C_ALIGN_RIGHT),
11151
+ makeCssResultSymbol(`lblAdj`, lblPosX, g_cssObj.common_estAdj, 4, g_lblNameObj.j_adj),
11152
+ makeCssResultSymbol(`lblAdjS`, dataPosX, g_cssObj.score, 5, `${getDiffFrame(estimatedAdj)}`, C_ALIGN_RIGHT),
11099
11153
  );
11100
11154
  }
11101
11155
  if (g_stateObj.excessive === C_FLG_ON) {
11102
11156
  multiAppend(resultWindow,
11103
- makeCssResultSymbol(`lblExcessive`, 350, g_cssObj.common_excessive, 6, g_lblNameObj.j_excessive),
11104
- makeCssResultSymbol(`lblExcessiveS`, 260, g_cssObj.score, 7, g_resultObj.excessive, C_ALIGN_RIGHT),
11157
+ makeCssResultSymbol(`lblExcessive`, lblPosX, g_cssObj.common_excessive, 6, g_lblNameObj.j_excessive),
11158
+ makeCssResultSymbol(`lblExcessiveS`, dataPosX, g_cssObj.score, 7, g_resultObj.excessive, C_ALIGN_RIGHT),
11105
11159
  );
11106
11160
  }
11107
11161
  }
@@ -11140,7 +11194,6 @@ const resultInit = _ => {
11140
11194
  // ハイスコア差分計算
11141
11195
  const assistFlg = (g_autoPlaysBase.includes(g_stateObj.autoPlay) ? `` : `-${g_stateObj.autoPlay}less`);
11142
11196
  const mirrorName = (g_stateObj.shuffle.indexOf(`Mirror`) !== -1 ? `-${g_stateObj.shuffle}` : ``);
11143
- const transKeyName = (hasVal(g_keyObj[`transKey${keyCtrlPtn}`]) ? `(${g_keyObj[`transKey${keyCtrlPtn}`]})` : ``);
11144
11197
  let scoreName = `${g_headerObj.keyLabels[g_stateObj.scoreId]}${transKeyName}${getStgDetailName('k-')}${g_headerObj.difLabels[g_stateObj.scoreId]}${assistFlg}${mirrorName}`;
11145
11198
  if (g_headerObj.makerView) {
11146
11199
  scoreName += `-${g_headerObj.creatorNames[g_stateObj.scoreId]}`;
@@ -11223,7 +11276,7 @@ const resultInit = _ => {
11223
11276
  if (![``, `failed`, `cleared`].includes(g_resultObj.spState)) {
11224
11277
  g_localStorage.highscores[scoreName][g_resultObj.spState] = true;
11225
11278
  }
11226
- if (!g_gameOverFlg && g_finishFlg && g_resultObj.requiredAccuracy !== `----`) {
11279
+ if (!g_gameOverFlg && g_finishFlg && g_workObj.requiredAccuracy !== `----`) {
11227
11280
  if (g_localStorage.highscores[scoreName].clearLamps === undefined) {
11228
11281
  g_localStorage.highscores[scoreName].clearLamps = [];
11229
11282
  }
@@ -11256,7 +11309,7 @@ const resultInit = _ => {
11256
11309
  // Twitter用リザルト
11257
11310
  // スコアを上塗りする可能性があるため、カスタムイベント後に配置
11258
11311
  const hashTag = (hasVal(g_headerObj.hashTag) ? ` ${g_headerObj.hashTag}` : ``);
11259
- let tweetDifData = `${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyData}${getStgDetailName('k-')}${g_headerObj.difLabels[g_stateObj.scoreId]}${assistFlg}`;
11312
+ let tweetDifData = `${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyName}${getStgDetailName('k-')}${g_headerObj.difLabels[g_stateObj.scoreId]}${assistFlg}`;
11260
11313
  if (g_stateObj.shuffle !== `OFF`) {
11261
11314
  tweetDifData += `:${getStgDetailName(g_stateObj.shuffle)}`;
11262
11315
  }
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2024/05/01 (v36.2.0)
8
+ * Revised : 2024/05/08 (v36.3.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -119,6 +119,12 @@ const g_limitObj = {
119
119
 
120
120
  // キーコンフィグのカラーピッカー幅
121
121
  kcColorPickerX: 60,
122
+
123
+ // キーコンフィグで表示するカラーピッカー数
124
+ kcColorPickerNum: 5,
125
+
126
+ // キーコンフィグで設定できるシャッフルグループ上限数
127
+ kcShuffleNums: 20,
122
128
  };
123
129
 
124
130
  /** 設定項目の位置 */
@@ -200,7 +206,7 @@ const updateWindowSiz = _ => {
200
206
  displaySprite: { x: 25, y: 30, w: (g_sWidth - 450) / 2, h: g_limitObj.setLblHeight * 5 },
201
207
  scoreDetail: { x: 20, y: 85, w: (g_sWidth - 500) / 2 + 420, h: 240, visibility: `hidden` },
202
208
  detailObj: { w: (g_sWidth - 500) / 2 + 420, h: 230, visibility: `hidden` },
203
- keyconSprite: { y: 88, h: g_sHeight - 85, overflow: `auto` },
209
+ keyconSprite: { y: 105, h: g_sHeight - 85, overflow: `auto` },
204
210
  loader: { y: g_sHeight - 10, h: 10, backgroundColor: `#333333` },
205
211
  playDataWindow: { x: g_sWidth / 2 - 225, y: 70, w: 450, h: 110 },
206
212
  resultWindow: { x: g_sWidth / 2 - 200, y: 185, w: 400, h: 210 },
@@ -260,6 +266,9 @@ const updateWindowSiz = _ => {
260
266
  title: g_msgObj.dataSave, borderStyle: `solid`,
261
267
  },
262
268
 
269
+ lblBaseSpd: {
270
+ x: g_sWidth - 100, y: 0, w: 100, h: 20, siz: 14,
271
+ },
263
272
  btnReverse: {
264
273
  x: 160, y: 0, w: 90, h: 21, siz: g_limitObj.difSelectorSiz, borderStyle: `solid`,
265
274
  },
@@ -343,16 +352,28 @@ const updateWindowSiz = _ => {
343
352
  pointerEvents: `none`,
344
353
  },
345
354
  kcDesc: {
346
- x: g_btnX(), y: 68, w: g_btnWidth(), h: 20,
355
+ x: g_btnX() + 50, y: 68, w: g_btnWidth() - 100, h: 20,
347
356
  },
348
357
  kcShuffleDesc: {
349
- x: 5 + g_btnX(), y: g_sHeight - 125, w: g_btnWidth(), h: 20, align: C_ALIGN_LEFT,
358
+ x: g_btnX() + 50, y: 85, w: g_btnWidth() - 100, h: 20,
350
359
  },
351
360
  pickPos: {
352
361
  x: 0, w: 50, h: 15, siz: 11, align: C_ALIGN_LEFT, background: `#${g_headerObj.baseBrightFlg ? `eeeeee` : `111111`}80`,
353
362
  },
363
+ lnkColorR: {
364
+ x: 0, y: -20, w: 30, h: 20, siz: 14, title: g_msgObj.pickColorR,
365
+ },
354
366
  lnkColorCopy: {
355
- x: 35, y: -5, w: 30, h: 20, siz: 14, title: g_msgObj.pickColorCopy,
367
+ x: 30, y: -20, w: 30, h: 20, siz: 14, title: g_msgObj.pickColorCopy,
368
+ },
369
+ lnkColorReset: {
370
+ x: 0, y: 280, w: 50, h: 20, siz: 14, title: g_msgObj.pickColorReset,
371
+ },
372
+ lblkey: {
373
+ x: g_sWidth - 80, y: 90, w: 60, h: 20, siz: 14,
374
+ },
375
+ lnkKeySwitch: {
376
+ x: g_sWidth - 60, w: 50, h: 20, siz: 14,
356
377
  },
357
378
 
358
379
  btnKcBack: {
@@ -381,6 +402,7 @@ const updateWindowSiz = _ => {
381
402
  btnKcReset: {
382
403
  x: g_btnX(), y: g_sHeight - 75,
383
404
  w: g_btnWidth(1 / 3), h: g_limitObj.btnHeight / 2, siz: g_limitObj.btnSiz * 2 / 3,
405
+ title: g_msgObj.kcReset,
384
406
  },
385
407
 
386
408
  /** メイン画面 */
@@ -396,6 +418,9 @@ const updateWindowSiz = _ => {
396
418
  frzHitTop: {
397
419
  x: -8, y: -8, w: C_ARW_WIDTH + 16, h: C_ARW_WIDTH + 16,
398
420
  },
421
+ lblframe: {
422
+ x: 0, y: 0, w: 100, h: 30, siz: 20,
423
+ },
399
424
  lblCredit: {
400
425
  x: 125, y: g_headerObj.playingHeight - 30, w: g_headerObj.playingWidth - 125, h: 20, align: C_ALIGN_LEFT,
401
426
  },
@@ -1074,6 +1099,7 @@ const g_keycons = {
1074
1099
  cursorNumList: [],
1075
1100
  cursorNum: 0,
1076
1101
  keySwitchNum: 0,
1102
+ colorCursorNum: 0,
1077
1103
  };
1078
1104
 
1079
1105
  let g_displays = [`stepZone`, `judgment`, `fastSlow`, `lifeGauge`, `score`, `musicInfo`, `filterLine`,
@@ -2613,8 +2639,8 @@ const g_dataMinObj = {
2613
2639
  const g_dfColorObj = {
2614
2640
 
2615
2641
  // 矢印初期色情報
2616
- setColorInit: [`#6666ff`, `#99ffff`, `#ffffff`, `#ffff99`, `#ff9966`],
2617
- setShadowColorInit: [``, ``, ``, ``, ``],
2642
+ setColorInit: [`#6666ff`, `#99ffff`, `#ffffff`, `#ffff99`, `#ff9966`, `#6666ff`, `#99ffff`, `#ffffff`, `#ffff99`, `#ff9966`],
2643
+ setShadowColorInit: [``, ``, ``, ``, ``, ``, ``, ``, ``, ``],
2618
2644
 
2619
2645
  // フリーズアロー初期色情報
2620
2646
  frzColorInit: [`#66ffff`, `#6600ff`, `#cccc33`, `#999933`],
@@ -2627,83 +2653,123 @@ const g_cssBkProperties = {};
2627
2653
  const g_dfColorBaseObj = {
2628
2654
 
2629
2655
  dark: {
2630
- setColorType1: [`#6666ff`, `#99ffff`, `#ffffff`, `#ffff99`, `#ff9966`],
2631
- setColorType2: [`#ffffff`, `#9999ff`, `#99ccff`, `#ffccff`, `#ff9999`],
2632
- setColorType3: [`#ccccff`, `#ccffff`, `#ffffff`, `#ffffcc`, `#ffcc99`],
2633
- setColorType4: [`#ffffff`, `#ccccff`, `#99ccff`, `#ffccff`, `#ffcccc`],
2656
+ setColorType1: [`#6666ff`, `#99ffff`, `#ffffff`, `#ffff99`, `#ff9966`, `#ff9999`, `#ff6699`, `#99ff99`, `#6699ff`, `#9966ff`],
2657
+ setColorType2: [`#ffffff`, `#9999ff`, `#99ccff`, `#ffccff`, `#ff9999`, `#669966`, `#ccffcc`, `#cc99ff`, `#ffff99`, `#cc9966`],
2658
+ setColorType3: [`#ccccff`, `#ccffff`, `#ffffff`, `#ffffcc`, `#ffcc99`, `#ffcccc`, `#ff99cc`, `#ccffcc`, `#99ccff`, `#cc99ff`],
2659
+ setColorType4: [`#ffffff`, `#ccccff`, `#99ccff`, `#ffccff`, `#ffcccc`, `#99cc99`, `#ccffcc`, `#cc99ff`, `#ffff99`, `#ffcc99`],
2634
2660
 
2635
- setShadowColorType1: [`#00000080`, `#00000080`, `#00000080`, `#00000080`, `#00000080`],
2636
- setShadowColorType2: [`#00000080`, `#00000080`, `#00000080`, `#00000080`, `#00000080`],
2637
- setShadowColorType3: [`#6666ff60`, `#33999960`, `#66666660`, `#99993360`, `#cc663360`],
2638
- setShadowColorType4: [`#66666660`, `#6666ff60`, `#3366cc60`, `#99339960`, `#99333360`],
2661
+ setShadowColorType1: [`#00000080`, `#00000080`, `#00000080`, `#00000080`, `#00000080`, `#00000080`, `#00000080`, `#00000080`, `#00000080`, `#00000080`],
2662
+ setShadowColorType2: [`#00000080`, `#00000080`, `#00000080`, `#00000080`, `#00000080`, `#00000080`, `#00000080`, `#00000080`, `#00000080`, `#00000080`],
2663
+ setShadowColorType3: [`#6666ff60`, `#33999960`, `#66666660`, `#99993360`, `#cc663360`, `#99666660`, `#99336660`, `#33993360`, `#33669960`, `#66339960`],
2664
+ setShadowColorType4: [`#66666660`, `#6666ff60`, `#3366cc60`, `#99339960`, `#99333360`, `#33663360`, `#66996660`, `#66339960`, `#66663360`, `#99663360`],
2639
2665
 
2640
2666
  frzColorType1: [
2641
2667
  [`#66ffff`, `#6600ff`, `#cccc33`, `#999933`],
2642
2668
  [`#00ffcc`, `#339999`, `#cccc33`, `#999933`],
2643
2669
  [`#66ffff`, `#6600ff`, `#cccc33`, `#999933`],
2644
2670
  [`#cc99ff`, `#9966ff`, `#cccc33`, `#999933`],
2645
- [`#ff99cc`, `#ff6699`, `#cccc33`, `#999933`]
2671
+ [`#ff99cc`, `#ff6699`, `#cccc33`, `#999933`],
2672
+ [`#ff9999`, `#ffcccc`, `#cccc33`, `#999933`],
2673
+ [`#ff6699`, `#ff99cc`, `#cccc33`, `#999933`],
2674
+ [`#99ff99`, `#ccffcc`, `#cccc33`, `#999933`],
2675
+ [`#6699ff`, `#99ccff`, `#cccc33`, `#999933`],
2676
+ [`#9966ff`, `#cc99ff`, `#cccc33`, `#999933`],
2646
2677
  ],
2647
2678
  frzColorType2: [
2648
2679
  [`#cccccc`, `#999999`, `#cccc33`, `#999933`],
2649
2680
  [`#66ffff`, `#6600ff`, `#cccc33`, `#999933`],
2650
2681
  [`#66ffff`, `#6600ff`, `#cccc33`, `#999933`],
2651
2682
  [`#cc99cc`, `#ff99ff`, `#cccc33`, `#999933`],
2652
- [`#ff6666`, `#ff9999`, `#cccc33`, `#999933`]
2683
+ [`#ff6666`, `#ff9999`, `#cccc33`, `#999933`],
2684
+ [`#669966`, `#669966`, `#cccc33`, `#999933`],
2685
+ [`#ccffcc`, `#ccffcc`, `#cccc33`, `#999933`],
2686
+ [`#cc99ff`, `#cc99ff`, `#cccc33`, `#999933`],
2687
+ [`#ffff99`, `#ffff99`, `#cccc33`, `#999933`],
2688
+ [`#cc9966`, `#cc9966`, `#cccc33`, `#999933`],
2653
2689
  ],
2654
2690
  frzColorType3: [
2655
2691
  [`#66ffff`, `#6600ff`, `#cccc33`, `#999933`],
2656
2692
  [`#00ffcc`, `#339999`, `#cccc33`, `#999933`],
2657
2693
  [`#66ffff`, `#6600ff`, `#cccc33`, `#999933`],
2658
2694
  [`#cc99ff`, `#9966ff`, `#cccc33`, `#999933`],
2659
- [`#ff99cc`, `#ff6699`, `#cccc33`, `#999933`]
2695
+ [`#ff99cc`, `#ff6699`, `#cccc33`, `#999933`],
2696
+ [`#ff9999`, `#ffcccc`, `#cccc33`, `#999933`],
2697
+ [`#ff6699`, `#ff99cc`, `#cccc33`, `#999933`],
2698
+ [`#99ff99`, `#ccffcc`, `#cccc33`, `#999933`],
2699
+ [`#6699ff`, `#99ccff`, `#cccc33`, `#999933`],
2700
+ [`#9966ff`, `#cc99ff`, `#cccc33`, `#999933`],
2660
2701
  ],
2661
2702
  frzColorType4: [
2662
2703
  [`#cccccc`, `#999999`, `#cccc33`, `#999933`],
2663
2704
  [`#66ffff`, `#6600ff`, `#cccc33`, `#999933`],
2664
2705
  [`#66ffff`, `#6600ff`, `#cccc33`, `#999933`],
2665
2706
  [`#cc99cc`, `#ff99ff`, `#cccc33`, `#999933`],
2666
- [`#ff6666`, `#ff9999`, `#cccc33`, `#999933`]
2707
+ [`#ff6666`, `#ff9999`, `#cccc33`, `#999933`],
2708
+ [`#669966`, `#669966`, `#cccc33`, `#999933`],
2709
+ [`#ccffcc`, `#ccffcc`, `#cccc33`, `#999933`],
2710
+ [`#cc99ff`, `#cc99ff`, `#cccc33`, `#999933`],
2711
+ [`#ffff99`, `#ffff99`, `#cccc33`, `#999933`],
2712
+ [`#cc9966`, `#cc9966`, `#cccc33`, `#999933`],
2667
2713
  ],
2668
2714
  },
2669
2715
  light: {
2670
- setColorType1: [`#6666ff`, `#66cccc`, `#000000`, `#999966`, `#cc6600`],
2671
- setColorType2: [`#000000`, `#6666ff`, `#cc0000`, `#cc99cc`, `#cc3366`],
2672
- setColorType3: [`#000000`, `#000000`, `#000000`, `#000000`, `#000000`],
2673
- setColorType4: [`#000000`, `#000000`, `#000000`, `#000000`, `#000000`],
2716
+ setColorType1: [`#6666ff`, `#66cccc`, `#000000`, `#999966`, `#cc6600`, `#996666`, `#ff6699`, `#66cc66`, `#3399ff`, `#6633cc`],
2717
+ setColorType2: [`#000000`, `#6666ff`, `#cc0000`, `#cc99cc`, `#cc3366`, `#669966`, `#336633`, `#9966cc`, `#999900`, `#996633`],
2718
+ setColorType3: [`#000000`, `#000000`, `#000000`, `#000000`, `#000000`, `#000000`, `#000000`, `#000000`, `#000000`, `#000000`],
2719
+ setColorType4: [`#000000`, `#000000`, `#000000`, `#000000`, `#000000`, `#000000`, `#000000`, `#000000`, `#000000`, `#000000`],
2674
2720
 
2675
- setShadowColorType1: [`#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`],
2676
- setShadowColorType2: [`#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`],
2677
- setShadowColorType3: [`#6666ff80`, `#66cccc80`, `#ffffff80`, `#99996680`, `#cc660080`],
2678
- setShadowColorType4: [`#00000080`, `#6666ff80`, `#cc000080`, `#cc99cc80`, `#cc336680`],
2721
+ setShadowColorType1: [`#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`],
2722
+ setShadowColorType2: [`#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`, `#ffffff80`],
2723
+ setShadowColorType3: [`#6666ff80`, `#66cccc80`, `#ffffff80`, `#99996680`, `#cc660080`, `#ff666680`, `#cc669980`, `#99cc9980`, `#6699cc80`, `#9966cc80`],
2724
+ setShadowColorType4: [`#00000080`, `#6666ff80`, `#cc000080`, `#cc99cc80`, `#cc336680`, `#66996680`, `#99cc9980`, `#9966cc80`, `#99993380`, `#cc996680`],
2679
2725
 
2680
2726
  frzColorType1: [
2681
2727
  [`#66ffff`, `#6600ff`, `#ffff00`, `#999900`],
2682
2728
  [`#00ffcc`, `#339999`, `#ffff00`, `#999900`],
2683
2729
  [`#66ffff`, `#6600ff`, `#ffff00`, `#999900`],
2684
2730
  [`#cc99ff`, `#9966ff`, `#ffff00`, `#999900`],
2685
- [`#ff99cc`, `#ff6699`, `#ffff00`, `#999900`]
2731
+ [`#ff99cc`, `#ff6699`, `#ffff00`, `#999900`],
2732
+ [`#996666`, `#996666`, `#cccc33`, `#999933`],
2733
+ [`#ff6699`, `#ff6699`, `#cccc33`, `#999933`],
2734
+ [`#66cc66`, `#66cc66`, `#cccc33`, `#999933`],
2735
+ [`#3399ff`, `#3399ff`, `#cccc33`, `#999933`],
2736
+ [`#6633cc`, `#6633cc`, `#cccc33`, `#999933`],
2686
2737
  ],
2687
2738
  frzColorType2: [
2688
2739
  [`#cccccc`, `#999999`, `#ffff00`, `#999900`],
2689
2740
  [`#66ffff`, `#6600ff`, `#ffff00`, `#999900`],
2690
2741
  [`#66ffff`, `#6600ff`, `#ffff00`, `#999900`],
2691
2742
  [`#cc99cc`, `#ff99ff`, `#ffff00`, `#999900`],
2692
- [`#ff6666`, `#ff9999`, `#ffff00`, `#999900`]
2743
+ [`#ff6666`, `#ff9999`, `#ffff00`, `#999900`],
2744
+ [`#669966`, `#669966`, `#cccc33`, `#999933`],
2745
+ [`#336633`, `#336633`, `#cccc33`, `#999933`],
2746
+ [`#9966cc`, `#9966cc`, `#cccc33`, `#999933`],
2747
+ [`#999900`, `#999900`, `#cccc33`, `#999933`],
2748
+ [`#996633`, `#996633`, `#cccc33`, `#999933`],
2693
2749
  ],
2694
2750
  frzColorType3: [
2695
2751
  [`#66ffff`, `#6600ff`, `#ffff00`, `#999900`],
2696
2752
  [`#00ffcc`, `#339999`, `#ffff00`, `#999900`],
2697
2753
  [`#66ffff`, `#6600ff`, `#ffff00`, `#999900`],
2698
2754
  [`#cc99ff`, `#9966ff`, `#ffff00`, `#999900`],
2699
- [`#ff99cc`, `#ff6699`, `#ffff00`, `#999900`]
2755
+ [`#ff99cc`, `#ff6699`, `#ffff00`, `#999900`],
2756
+ [`#996666`, `#996666`, `#cccc33`, `#999933`],
2757
+ [`#ff6699`, `#ff6699`, `#cccc33`, `#999933`],
2758
+ [`#66cc66`, `#66cc66`, `#cccc33`, `#999933`],
2759
+ [`#3399ff`, `#3399ff`, `#cccc33`, `#999933`],
2760
+ [`#6633cc`, `#6633cc`, `#cccc33`, `#999933`],
2700
2761
  ],
2701
2762
  frzColorType4: [
2702
2763
  [`#cccccc`, `#999999`, `#ffff00`, `#999900`],
2703
2764
  [`#66ffff`, `#6600ff`, `#ffff00`, `#999900`],
2704
2765
  [`#66ffff`, `#6600ff`, `#ffff00`, `#999900`],
2705
2766
  [`#cc99cc`, `#ff99ff`, `#ffff00`, `#999900`],
2706
- [`#ff6666`, `#ff9999`, `#ffff00`, `#999900`]
2767
+ [`#ff6666`, `#ff9999`, `#ffff00`, `#999900`],
2768
+ [`#669966`, `#669966`, `#cccc33`, `#999933`],
2769
+ [`#336633`, `#336633`, `#cccc33`, `#999933`],
2770
+ [`#9966cc`, `#9966cc`, `#cccc33`, `#999933`],
2771
+ [`#999900`, `#999900`, `#cccc33`, `#999933`],
2772
+ [`#996633`, `#996633`, `#cccc33`, `#999933`],
2707
2773
  ],
2708
2774
  },
2709
2775
  };
@@ -2868,13 +2934,14 @@ const g_lblNameObj = {
2868
2934
  b_back: `Back`,
2869
2935
  b_keyConfig: `KeyConfig`,
2870
2936
  b_play: `PLAY!`,
2871
- b_reset: `Reset`,
2937
+ b_reset: `Reset Key`,
2872
2938
  b_settings: `To Settings`,
2873
2939
  b_copy: `CopyResult`,
2874
2940
  b_tweet: `Tweet`,
2875
2941
  b_gitter: `Gitter`,
2876
2942
  b_retry: `Retry`,
2877
2943
  b_close: `Close`,
2944
+ b_cReset: `Reset`,
2878
2945
 
2879
2946
  Difficulty: `Difficulty`,
2880
2947
  Speed: `Speed`,
@@ -3152,6 +3219,7 @@ const g_lang_msgObj = {
3152
3219
  keyResetConfirm: `キーを初期配置に戻します。よろしいですか?`,
3153
3220
  highscResetConfirm: `この譜面のハイスコアを消去します。よろしいですか?`,
3154
3221
  colorCopyConfirm: `フリーズアローの配色を矢印色に置き換えます\n(通常・ヒット時双方を置き換えます)。よろしいですか?`,
3222
+ colorResetConfirm: `矢印・フリーズアローの配色を元に戻します。よろしいですか?`,
3155
3223
 
3156
3224
  difficulty: `譜面を選択します。`,
3157
3225
  speed: `矢印の流れる速度を設定します。\n外側のボタンは1x単位、内側は0.25x単位で変更できます。`,
@@ -3195,9 +3263,12 @@ const g_lang_msgObj = {
3195
3263
  colorGroup: `矢印・フリーズアロー色グループの割り当てパターンを変更します。`,
3196
3264
  shuffleGroup: `Mirror/X-Mirror/Turning/Random/S-Random選択時、シャッフルするグループを変更します。\n矢印の上にある同じ数字同士でシャッフルします。`,
3197
3265
  stepRtnGroup: `矢印などノーツの種類、回転に関するパターンを切り替えます。\nあらかじめ設定されている場合のみ変更可能です。`,
3266
+ kcReset: `対応するキーの割り当てを元に戻します。`,
3198
3267
 
3199
3268
  pickArrow: `色番号ごとの矢印色(枠、塗りつぶし)、通常時のフリーズアロー色(枠、帯)を\nカラーピッカーから選んで変更できます。`,
3269
+ pickColorR: `設定する矢印色の種類を切り替えます。`,
3200
3270
  pickColorCopy: `このボタンを押すと、フリーズアローの配色を矢印(枠)の色で上書きします。\nヒット時のフリーズアローの色も上書きします。`,
3271
+ pickColorReset: `矢印・フリーズアローの配色を元に戻します。`,
3201
3272
  },
3202
3273
 
3203
3274
  En: {
@@ -3210,6 +3281,7 @@ const g_lang_msgObj = {
3210
3281
  keyResetConfirm: `Resets the assigned key to the initial state. Is it OK?`,
3211
3282
  highscResetConfirm: `Erases the high score for this chart. Is it OK?`,
3212
3283
  colorCopyConfirm: `Replace freeze arrow color scheme with arrow color\n(replace both normal and hit). Is this OK?`,
3284
+ colorResetConfirm: `Restore the color scheme for arrows and freeze arrows. Is this OK?`,
3213
3285
 
3214
3286
  difficulty: `Select a chart.`,
3215
3287
  speed: `Set the speed of the sequences.\nThe outer button can be changed in 1x increments and the inner button in 0.25x increments.`,
@@ -3253,9 +3325,12 @@ const g_lang_msgObj = {
3253
3325
  colorGroup: `Change the sequences color group assignment pattern.`,
3254
3326
  shuffleGroup: `Change the shuffle group when Mirror, X-Mirror, Turning, Random or S-Random are selected.\nShuffle with the same numbers listed above.`,
3255
3327
  stepRtnGroup: `Switches the type of notes, such as arrows, and the pattern regarding rotation.\nThis can only be changed if it has been set in advance.`,
3328
+ kcReset: `Restores the corresponding key assignments.`,
3256
3329
 
3257
3330
  pickArrow: `Change the frame or fill of arrow color and the frame or bar of normal freeze-arrow color\nfor each color number from the color picker.`,
3331
+ pickColorR: `Switches the arrow color type to be set.`,
3258
3332
  pickColorCopy: `Pressing this button will override the color scheme of the freeze arrow with the frame color of the arrow. \nIt also overrides the color of the freeze arrow on hit.`,
3333
+ pickColorReset: `Restore the color scheme for arrows and freeze arrows.`,
3259
3334
  },
3260
3335
 
3261
3336
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "36.2.0",
3
+ "version": "36.3.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {