danoniplus 36.5.0 → 36.6.1

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/06/01
7
+ * Revised : 2024/06/20
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 36.5.0`;
12
- const g_revisedDate = `2024/06/05`;
11
+ const g_version = `Ver 36.6.1`;
12
+ const g_revisedDate = `2024/06/20`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -6453,7 +6453,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
6453
6453
  * @param {number} _scrollNum
6454
6454
  */
6455
6455
  const changeTmpShuffleNum = (_j, _scrollNum = 1) => {
6456
- const tmpShuffle = changeTmpData(`shuffle`, g_limitObj.kcShuffleNums, _j, _scrollNum);
6456
+ const tmpShuffle = changeTmpData(`shuffle`, g_keyObj[`keyCtrl${keyCtrlPtn}`].length - 1, _j, _scrollNum);
6457
6457
  document.getElementById(`sArrow${_j}`).textContent = tmpShuffle + 1;
6458
6458
 
6459
6459
  changeShuffleConfigColor(keyCtrlPtn, g_keyObj[`shuffle${keyCtrlPtn}_${g_keycons.shuffleGroupNum}`][_j], _j);
@@ -8005,6 +8005,19 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
8005
8005
  getRefData(_header, `${_type}_data`)
8006
8006
  ];
8007
8007
 
8008
+ /**
8009
+ * 譜面データの優先順配列パターンの取得
8010
+ * @param {string} _type
8011
+ * @param {number} _scoreNo
8012
+ * @returns
8013
+ */
8014
+ const getPriorityVal = (_type, _scoreNo) => [
8015
+ `${_type}${g_localeObj.val}${_scoreNo}_data`,
8016
+ `${_type}${g_localeObj.val}_data`,
8017
+ `${_type}${_scoreNo}_data`,
8018
+ `${_type}_data`
8019
+ ];
8020
+
8008
8021
  /**
8009
8022
  * 歌詞表示、背景・マスクデータの優先順取得
8010
8023
  */
@@ -8040,16 +8053,25 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
8040
8053
  */
8041
8054
  const makeWordData = _scoreNo => {
8042
8055
  const wordDataList = [];
8056
+ const wordTargets = [];
8043
8057
  let wordReverseFlg = false;
8044
8058
  const divideCnt = getKeyInfo().divideCnt;
8045
- const addDataList = (_type = ``) => wordDataList.push(...getPriorityList(`word`, _type, _scoreNo));
8059
+ const addDataList = (_type = ``) => wordTargets.push(...getPriorityVal(_type, _scoreNo));
8046
8060
  getPriorityHeader().forEach(val => addDataList(val));
8061
+ makeDedupliArray(wordTargets).forEach(val => wordDataList.push(getRefData(`word`, val)));
8047
8062
 
8048
8063
  if (g_stateObj.reverse === C_FLG_ON) {
8064
+ let wordTarget = ``;
8065
+ for (let val of makeDedupliArray(wordTargets)) {
8066
+ if (getRefData(`word`, val) !== undefined) {
8067
+ wordTarget = val;
8068
+ break;
8069
+ }
8070
+ }
8049
8071
 
8050
8072
  // wordRev_dataが指定されている場合はそのままの位置を採用
8051
8073
  // word_dataのみ指定されている場合、下記ルールに従って設定
8052
- if (wordDataList.find((v) => v !== undefined) === undefined) {
8074
+ if (!wordTarget.includes(`Rev`) && g_stateObj.scroll === `---`) {
8053
8075
  // Reverse時の歌詞の自動反転制御設定
8054
8076
  if (g_headerObj.wordAutoReverse !== `auto`) {
8055
8077
  wordReverseFlg = g_headerObj.wordAutoReverse === C_FLG_ON;
@@ -9011,7 +9033,8 @@ const getArrowSettings = _ => {
9011
9033
 
9012
9034
  g_typeLists.frzColor.forEach((frzType, k) => {
9013
9035
  g_workObj[`frz${frzType}Colors${type}`][j] = g_headerObj.frzColor[colorj][k] || ``;
9014
- g_workObj[`dummyFrz${frzType}Colors${type}`][j] = g_headerObj.setDummyColor[colorj];
9036
+ g_workObj[`dummyFrz${frzType}Colors${type}`][j] =
9037
+ frzType.includes(`Shadow`) ? `` : g_headerObj.setDummyColor[colorj] || ``;
9015
9038
  });
9016
9039
  g_workObj[`frzNormalShadowColors${type}`][j] = g_headerObj.frzShadowColor[colorj][0] || ``;
9017
9040
  g_workObj[`frzHitShadowColors${type}`][j] = g_headerObj.frzShadowColor[colorj][1] || ``;
@@ -9257,8 +9280,8 @@ const mainInit = _ => {
9257
9280
  const filterCss = g_stateObj.filterLock === C_FLG_OFF ? g_cssObj.life_Failed : g_cssObj.life_Cleared;
9258
9281
  [`filterBar0`, `filterBar1`, `borderBar0`, `borderBar1`].forEach(obj =>
9259
9282
  mainSprite.appendChild(createColorObject2(obj, g_lblPosObj.filterBar, filterCss)));
9260
- borderBar0.style.top = wUnit(g_posObj.stepDiffY);
9261
- borderBar1.style.top = wUnit(g_posObj.stepDiffY + g_posObj.arrowHeight);
9283
+ borderBar0.style.top = wUnit(g_posObj.stepDiffY + g_stateObj.hitPosition);
9284
+ borderBar1.style.top = wUnit(g_posObj.stepDiffY + g_posObj.arrowHeight - g_stateObj.hitPosition);
9262
9285
 
9263
9286
  if (g_appearanceRanges.includes(g_stateObj.appearance)) {
9264
9287
  mainSprite.appendChild(createDivCss2Label(`filterView`, ``, g_lblPosObj.filterView));
@@ -9543,8 +9566,17 @@ const mainInit = _ => {
9543
9566
  );
9544
9567
  }
9545
9568
 
9569
+ const msg = [];
9546
9570
  if (getMusicUrl(g_stateObj.scoreId) === `nosound.mp3`) {
9547
- makeInfoWindow(g_msgInfoObj.I_0004, `leftToRightFade`, { _x: g_workObj.playingX, _y: g_headerObj.playingY });
9571
+ msg.push(g_msgInfoObj.I_0004);
9572
+ }
9573
+ if (g_stateObj.shuffle.indexOf(`Mirror`) !== -1 &&
9574
+ g_stateObj.dataSaveFlg && g_stateObj.autoAll === C_FLG_OFF &&
9575
+ g_keyObj[`shuffle${keyCtrlPtn}`].filter((shuffleGr, j) => shuffleGr !== g_keyObj[`shuffle${keyCtrlPtn}_0d`][j]).length > 0) {
9576
+ msg.push(g_msgInfoObj.I_0005);
9577
+ }
9578
+ if (msg.length > 0) {
9579
+ makeInfoWindow(msg.join(`<br>`), `leftToRightFade`, { _x: g_workObj.playingX, _y: g_headerObj.playingY });
9548
9580
  }
9549
9581
 
9550
9582
  // ユーザカスタムイベント(初期)
@@ -10262,7 +10294,7 @@ const mainInit = _ => {
10262
10294
  // ダミーフリーズアロー生成
10263
10295
  g_workObj.mkDummyFrzArrow[currentFrame]?.forEach(data =>
10264
10296
  makeFrzArrow(data, ++dummyFrzCnts[data], `dummyFrz`, g_workObj.dummyFrzNormalColors[data],
10265
- _workObj.dummyFrzNormalBarColors[data], g_workObj.dummyFrzNormalShadowColors[data]));
10297
+ g_workObj.dummyFrzNormalBarColors[data], g_workObj.dummyFrzNormalShadowColors[data]));
10266
10298
 
10267
10299
  // フリーズアロー生成
10268
10300
  g_workObj.mkFrzArrow[currentFrame]?.forEach(data =>
@@ -10437,8 +10469,8 @@ const changeAppearanceFilter = (_appearance, _num = 10) => {
10437
10469
  $id(`arrowSprite${topNum}`).clipPath = topShape;
10438
10470
  $id(`arrowSprite${bottomNum}`).clipPath = bottomShape;
10439
10471
 
10440
- $id(`filterBar0`).top = wUnit(g_posObj.arrowHeight * _num / 100);
10441
- $id(`filterBar1`).top = wUnit(g_posObj.arrowHeight * (100 - _num) / 100);
10472
+ $id(`filterBar0`).top = wUnit(g_posObj.arrowHeight * _num / 100 + g_stateObj.hitPosition);
10473
+ $id(`filterBar1`).top = wUnit(g_posObj.arrowHeight * (100 - _num) / 100 - g_stateObj.hitPosition);
10442
10474
 
10443
10475
  if (g_appearanceRanges.includes(_appearance)) {
10444
10476
  $id(`filterView`).top =
@@ -10565,6 +10597,7 @@ const changeHitFrz = (_j, _k, _name, _difFrame = 0) => {
10565
10597
 
10566
10598
  const styfrzBar = $id(`${_name}Bar${frzNo}`);
10567
10599
  const styfrzBtm = $id(`${_name}Btm${frzNo}`);
10600
+ const styfrzTop = $id(`${_name}Top${frzNo}`);
10568
10601
  const styfrzTopShadow = $id(`${_name}TopShadow${frzNo}`);
10569
10602
  const styfrzBtmShadow = $id(`${_name}BtmShadow${frzNo}`);
10570
10603
 
@@ -10601,7 +10634,8 @@ const changeHitFrz = (_j, _k, _name, _difFrame = 0) => {
10601
10634
  styfrzBar.background = getColor(`HitBar`);
10602
10635
  styfrzBtm.top = wUnit(currentFrz.btmY);
10603
10636
  styfrzBtm.background = tmpHitColor;
10604
- styfrzTopShadow.opacity = 0;
10637
+ styfrzTop.top = wUnit(- hitPos);
10638
+ styfrzTopShadow.top = styfrzTop.top;
10605
10639
  styfrzBtmShadow.top = styfrzBtm.top;
10606
10640
  if (_name === `frz`) {
10607
10641
  const tmpShadowColor = getColor(`HitShadow`);
@@ -10626,17 +10660,11 @@ const changeFailedFrz = (_j, _k) => {
10626
10660
  $id(`frzHit${_j}`).opacity = 0;
10627
10661
  $id(`frzTop${frzNo}`).display = C_DIS_INHERIT;
10628
10662
  $id(`frzTop${frzNo}`).background = `#cccccc`;
10629
- $id(`frzTopShadow${frzNo}`).opacity = 1;
10630
10663
  $id(`frzTopShadow${frzNo}`).background = `#333333`;
10631
10664
  $id(`frzBtmShadow${frzNo}`).background = `#333333`;
10632
10665
  $id(`frzBar${frzNo}`).background = `#999999`;
10633
10666
  $id(`frzBar${frzNo}`).opacity = 1;
10634
10667
  $id(`frzBtm${frzNo}`).background = `#cccccc`;
10635
-
10636
- // 判定位置調整分の補正
10637
- const hitPos = g_workObj.hitPosition * g_workObj.scrollDir[_j];
10638
- $id(`frzTop${frzNo}`).top = wUnit(- hitPos);
10639
- $id(`frzTopShadow${frzNo}`).top = wUnit(- hitPos);
10640
10668
  };
10641
10669
 
10642
10670
  /**
@@ -11082,6 +11110,8 @@ const resultInit = _ => {
11082
11110
 
11083
11111
  const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
11084
11112
  const transKeyName = (hasVal(g_keyObj[`transKey${keyCtrlPtn}`]) ? `(${g_keyObj[`transKey${keyCtrlPtn}`]})` : ``);
11113
+ const orgShuffleFlg = g_keyObj[`shuffle${keyCtrlPtn}`].filter((shuffleGr, j) => shuffleGr !== g_keyObj[`shuffle${keyCtrlPtn}_0d`][j]).length === 0;
11114
+ const shuffleName = `${getStgDetailName(g_stateObj.shuffle)}${!orgShuffleFlg && !g_stateObj.shuffle.endsWith(`+`) ? getStgDetailName('(S)') : ''}`;
11085
11115
 
11086
11116
  /**
11087
11117
  * プレイスタイルのカスタム有無
@@ -11096,7 +11126,7 @@ const resultInit = _ => {
11096
11126
  `${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyName} ${getStgDetailName('key')} / ${g_headerObj.difLabels[g_stateObj.scoreId]}`,
11097
11127
  `${withOptions(g_autoPlaysBase.includes(g_stateObj.autoPlay), true, `-${getStgDetailName(g_stateObj.autoPlay)}${getStgDetailName('less')}`)}`,
11098
11128
  `${withOptions(g_headerObj.makerView, false, `(${g_headerObj.creatorNames[g_stateObj.scoreId]})`)}`,
11099
- `${withOptions(g_stateObj.shuffle, C_FLG_OFF, `[${getStgDetailName(g_stateObj.shuffle)}]`)}`
11129
+ `${withOptions(g_stateObj.shuffle, C_FLG_OFF, `[${shuffleName}]`)}`
11100
11130
  ];
11101
11131
  let difData = difDatas.filter(value => value !== ``).join(` `);
11102
11132
  const difDataForImage = difDatas.filter((value, j) => value !== `` && j !== 2).join(` `);
@@ -11241,7 +11271,7 @@ const resultInit = _ => {
11241
11271
  maxCombo: 0, fmaxCombo: 0, score: 0,
11242
11272
  };
11243
11273
 
11244
- const highscoreCondition = (g_stateObj.autoAll === C_FLG_OFF && (g_stateObj.shuffle === C_FLG_OFF || mirrorName !== ``));
11274
+ const highscoreCondition = (g_stateObj.autoAll === C_FLG_OFF && (g_stateObj.shuffle === C_FLG_OFF || (mirrorName !== `` && orgShuffleFlg)));
11245
11275
  if (highscoreCondition) {
11246
11276
 
11247
11277
  // ハイスコア差分描画
@@ -11348,7 +11378,7 @@ const resultInit = _ => {
11348
11378
  const hashTag = (hasVal(g_headerObj.hashTag) ? ` ${g_headerObj.hashTag}` : ``);
11349
11379
  let tweetDifData = `${getKeyName(g_headerObj.keyLabels[g_stateObj.scoreId])}${transKeyName}${getStgDetailName('k-')}${g_headerObj.difLabels[g_stateObj.scoreId]}${assistFlg}`;
11350
11380
  if (g_stateObj.shuffle !== `OFF`) {
11351
- tweetDifData += `:${getStgDetailName(g_stateObj.shuffle)}`;
11381
+ tweetDifData += `:${shuffleName}`;
11352
11382
  }
11353
11383
  const twiturl = new URL(g_localStorageUrl);
11354
11384
  twiturl.searchParams.append(`scoreId`, g_stateObj.scoreId);
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2024/06/05 (v36.5.0)
8
+ * Revised : 2024/06/08 (v36.6.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -122,9 +122,6 @@ const g_limitObj = {
122
122
 
123
123
  // キーコンフィグで表示するカラーピッカー数
124
124
  kcColorPickerNum: 5,
125
-
126
- // キーコンフィグで設定できるシャッフルグループ上限数
127
- kcShuffleNums: 20,
128
125
  };
129
126
 
130
127
  /** 設定項目の位置 */
@@ -2856,6 +2853,7 @@ const g_lang_msgInfoObj = {
2856
2853
  I_0002: `入力したキーは割り当てできません。他のキーを指定してください。`,
2857
2854
  I_0003: `各譜面の明細情報をクリップボードにコピーしました!`,
2858
2855
  I_0004: `musicUrlが設定されていないため、無音モードで再生します`,
2856
+ I_0005: `正規のミラー譜面で無いため、ハイスコアは保存されません`,
2859
2857
  },
2860
2858
  En: {
2861
2859
  W_0001: `Your browser is not guaranteed to work.<br>
@@ -2905,6 +2903,7 @@ const g_lang_msgInfoObj = {
2905
2903
  I_0002: `The specified key cannot be assigned. Please specify another key.`,
2906
2904
  I_0003: `Charts information is copied to the clipboard!`,
2907
2905
  I_0004: `Play in silence mode because "musicUrl" is not set`,
2906
+ I_0005: `Highscore is not saved because not a regular mirrored chart.`,
2908
2907
  },
2909
2908
  };
2910
2909
 
@@ -3042,6 +3041,7 @@ const g_lblNameObj = {
3042
3041
  'u_Random+': `Random+`,
3043
3042
  'u_S-Random': `S-Random`,
3044
3043
  'u_S-Random+': `S-Random+`,
3044
+ 'u_(S)': `(S)`,
3045
3045
 
3046
3046
  'u_ALL': `ALL`,
3047
3047
  'u_Onigiri': `Onigiri`,
@@ -3129,7 +3129,7 @@ const g_lblNameObj = {
3129
3129
  * リンク先管理
3130
3130
  */
3131
3131
  const g_linkObj = {
3132
- x: `https://x.com/intent/tweet`,
3132
+ x: `https://x.com/intent/post`,
3133
3133
  discord: `https://discord.gg/5Hxu4wDEZR`,
3134
3134
  };
3135
3135
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "36.5.0",
3
+ "version": "36.6.1",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {