danoniplus 41.2.1 → 41.3.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.
Files changed (2) hide show
  1. package/js/danoni_main.js +54 -44
  2. package/package.json +1 -1
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/09
7
+ * Revised : 2025/05/15
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 41.2.1`;
12
- const g_revisedDate = `2025/05/09`;
11
+ const g_version = `Ver 41.3.1`;
12
+ const g_revisedDate = `2025/05/15`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -2824,6 +2824,11 @@ const loadLocalStorage = (_musicId = ``) => {
2824
2824
  if (g_langStorage.safeMode === undefined) {
2825
2825
  g_langStorage.safeMode = C_FLG_OFF;
2826
2826
  }
2827
+ if (g_langStorage.bgmVolume === undefined) {
2828
+ g_langStorage.bgmVolume = 50;
2829
+ }
2830
+ g_stateObj.bgmVolume = g_langStorage.bgmVolume;
2831
+ g_settings.bgmVolumeNum = g_settings.volumes.findIndex(val => val === g_stateObj.bgmVolume);
2827
2832
  Object.assign(g_msgInfoObj, g_lang_msgInfoObj[g_localeObj.val]);
2828
2833
  Object.assign(g_kCd, g_lang_kCd[g_localeObj.val]);
2829
2834
 
@@ -3443,55 +3448,60 @@ const headerConvert = _dosObj => {
3443
3448
  }
3444
3449
 
3445
3450
  // 曲名
3446
- obj.musicTitles = [];
3447
- obj.musicTitlesForView = [];
3448
- obj.artistNames = [];
3449
- obj.artistUrls = [];
3450
- obj.musicNos = [];
3451
- obj.bpms = [];
3451
+ obj.musicTitles = [`musicName`];
3452
+ obj.musicTitlesForView = [[`musicName`]];
3453
+ obj.artistNames = [``];
3454
+ obj.artistUrls = [``];
3455
+ obj.bpms = [`----`];
3456
+ obj.musicNos = hasVal(_dosObj.musicNo)
3457
+ ? splitLF2(_dosObj.musicNo).map(Number).map(val => isNaN(val) ? 0 : val)
3458
+ : fillArray(_dosObj.difData?.split(`$`).length ?? 1);
3452
3459
 
3453
3460
  const dosMusicTitle = getHeader(_dosObj, `musicTitle`);
3461
+ let alternativeTitle;
3454
3462
  if (hasVal(dosMusicTitle)) {
3455
3463
  const musicData = splitLF2(dosMusicTitle);
3456
3464
 
3457
- if (hasVal(_dosObj.musicNo)) {
3458
- obj.musicNos = splitLF2(_dosObj.musicNo).map(val => Number(val));
3459
- }
3460
-
3461
- for (let j = 0; j < musicData.length; j++) {
3465
+ const lastIdx = Math.max(...obj.musicNos, musicData.length - 1);
3466
+ for (let j = 0; j <= lastIdx; j++) {
3462
3467
  const musics = splitComma(musicData[j]);
3463
3468
 
3464
- if (obj.musicNos.length >= j) {
3465
- obj.musicTitles[j] = escapeHtml(getMusicNameSimple(musics[0]));
3466
- obj.musicTitlesForView[j] = escapeHtmlForArray(getMusicNameMultiLine(musics[0]));
3467
- obj.artistNames[j] = escapeHtml(musics[1] || obj.artistNames[0] || ``);
3468
- obj.artistUrls[j] = musics[2] || obj.artistUrls[0] || ``;
3469
- obj.bpms[j] = musics[4] || obj.bpms[0] || `----`;
3470
- }
3471
-
3472
- // 選曲ではなく、単一作品用の項目としての管理変数を定義
3469
+ obj.musicTitles[j] = hasVal(musics[0])
3470
+ ? escapeHtml(getMusicNameSimple(musics[0]))
3471
+ : obj.musicTitles[0];
3472
+ obj.musicTitlesForView[j] = hasVal(musics[0])
3473
+ ? escapeHtmlForArray(getMusicNameMultiLine(musics[0]))
3474
+ : obj.musicTitlesForView[0];
3475
+ obj.artistNames[j] = hasVal(musics[1])
3476
+ ? escapeHtml(musics[1])
3477
+ : obj.artistNames[0];
3478
+ obj.artistUrls[j] = musics[2] || obj.artistUrls[0];
3479
+ obj.bpms[j] = musics[4] || obj.bpms[0];
3480
+
3481
+ // 代替タイトル名
3473
3482
  if (j === 0) {
3474
- obj.musicTitle = obj.musicTitles[0];
3475
- obj.musicTitleForView = obj.musicTitlesForView[0];
3476
- obj.artistName = obj.artistNames[0];
3477
- if (obj.artistName === ``) {
3478
- makeWarningWindow(g_msgInfoObj.E_0011);
3479
- obj.artistName = `artistName`;
3480
- }
3481
- obj.artistUrl = obj.artistUrls[0];
3482
- if (hasVal(musics[3])) {
3483
- obj.musicTitles[0] = escapeHtml(getMusicNameSimple(musics[3]));
3484
- obj.musicTitlesForView[0] = escapeHtmlForArray(getMusicNameMultiLine(musics[3]));
3485
- }
3483
+ alternativeTitle = musics[3];
3486
3484
  }
3487
3485
  }
3488
3486
 
3489
3487
  } else {
3490
3488
  makeWarningWindow(g_msgInfoObj.E_0012);
3491
- obj.musicTitle = `musicName`;
3492
- obj.musicTitleForView = [`musicName`];
3489
+ }
3490
+
3491
+ // 単一作品用の項目としての管理変数
3492
+ obj.musicTitle = obj.musicTitles[0];
3493
+ obj.musicTitleForView = obj.musicTitlesForView[0];
3494
+ obj.artistName = obj.artistNames[0];
3495
+ if (obj.artistName === ``) {
3496
+ makeWarningWindow(g_msgInfoObj.E_0011);
3493
3497
  obj.artistName = `artistName`;
3494
- obj.artistUrl = ``;
3498
+ }
3499
+ obj.artistUrl = obj.artistUrls[0];
3500
+
3501
+ // 代替タイトル名は曲名定義の後に設定する(複数曲を束ねる名前であり、曲名ではないため)
3502
+ if (hasVal(alternativeTitle)) {
3503
+ obj.musicTitles[0] = escapeHtml(getMusicNameSimple(alternativeTitle));
3504
+ obj.musicTitlesForView[0] = escapeHtmlForArray(getMusicNameMultiLine(alternativeTitle));
3495
3505
  }
3496
3506
 
3497
3507
  // 選曲機能の利用有無
@@ -3614,9 +3624,6 @@ const headerConvert = _dosObj => {
3614
3624
  obj.viewLists = [...Array(obj.keyLabels.length).keys()];
3615
3625
  obj.keyLists = keyLists.sort((a, b) => parseInt(a) - parseInt(b));
3616
3626
  obj.undefinedKeyLists = obj.keyLists.filter(key => g_keyObj[`${g_keyObj.defaultProp}${key}_0`] === undefined);
3617
- if (obj.musicNos.length === 0) {
3618
- obj.musicNos = fillArray(obj.keyLabels.length);
3619
- }
3620
3627
 
3621
3628
  // 楽曲別のグループ化設定(選曲モードのみ)
3622
3629
  if (hasVal(_dosObj.musicGroup)) {
@@ -4997,6 +5004,8 @@ const titleInit = (_initFlg = false) => {
4997
5004
  pauseBGM();
4998
5005
  g_handler.removeListener(wheelHandler);
4999
5006
  g_keyObj.prevKey = `Dummy${g_settings.musicIdxNum}`;
5007
+ g_langStorage.bgmVolume = g_stateObj.bgmVolume;
5008
+ localStorage.setItem(`danoni-locale`, JSON.stringify(g_langStorage));
5000
5009
  }, Object.assign({
5001
5010
  resetFunc: () => optionInit(),
5002
5011
  }, g_lblPosObj.btnStart_music), g_cssObj.button_Tweet),
@@ -5478,19 +5487,20 @@ const playBGM = async (_num, _currentLoopNum = g_settings.musicLoopNum) => {
5478
5487
  }
5479
5488
  };
5480
5489
 
5490
+ const musicPlayCheck = () => _currentLoopNum !== g_settings.musicLoopNum || g_currentPage !== `title`;
5481
5491
  if (encodeFlg) {
5482
5492
  try {
5483
5493
  // base64エンコードは読込に時間が掛かるため、曲変更時のみ読込
5484
5494
  if (!hasVal(g_musicdata) || Math.abs(_num) % g_headerObj.musicIdxList.length !== 0) {
5485
5495
  await loadScript2(url);
5486
5496
  musicInit();
5487
- if (_currentLoopNum !== g_settings.musicLoopNum) {
5497
+ if (musicPlayCheck()) {
5488
5498
  return;
5489
5499
  }
5490
5500
  const tmpAudio = new AudioPlayer();
5491
5501
  const array = Uint8Array.from(atob(g_musicdata), v => v.charCodeAt(0));
5492
5502
  await tmpAudio.init(array.buffer);
5493
- if (_currentLoopNum !== g_settings.musicLoopNum) {
5503
+ if (musicPlayCheck()) {
5494
5504
  tmpAudio.close();
5495
5505
  return;
5496
5506
  }
@@ -5513,7 +5523,7 @@ const playBGM = async (_num, _currentLoopNum = g_settings.musicLoopNum) => {
5513
5523
  g_audio.volume = g_stateObj.bgmVolume / 100;
5514
5524
  const loadedMeta = g_handler.addListener(g_audio, `loadedmetadata`, () => {
5515
5525
  g_handler.removeListener(loadedMeta);
5516
- if (_currentLoopNum !== g_settings.musicLoopNum) {
5526
+ if (musicPlayCheck()) {
5517
5527
  return;
5518
5528
  }
5519
5529
  g_audio.currentTime = musicStart;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "41.2.1",
3
+ "version": "41.3.1",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "./js/danoni_main.js",
6
6
  "scripts": {