danoniplus 48.4.2 → 48.5.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 : 2026/06/05
7
+ * Revised : 2026/06/14
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 48.4.2`;
12
- const g_revisedDate = `2026/06/06`;
11
+ const g_version = `Ver 48.5.0`;
12
+ const g_revisedDate = `2026/06/14`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -2763,6 +2763,10 @@ const initialControl = async () => {
2763
2763
  .sort((a, b) => parseInt(a) - parseInt(b));
2764
2764
  }
2765
2765
 
2766
+ // ラベルテキスト、オンマウステキスト、確認メッセージ定義の上書き設定
2767
+ Object.assign(g_lblNameObj, g_lang_lblNameObj[g_localeObj.val], g_presetObj.lblName?.[g_localeObj.val]);
2768
+ Object.assign(g_msgObj, g_lang_msgObj[g_localeObj.val], g_presetObj.msg?.[g_localeObj.val]);
2769
+
2766
2770
  // デフォルトのカラー・シャッフルグループ設定を退避
2767
2771
  g_keycons.groups.forEach(type =>
2768
2772
  Object.keys(g_keyObj).filter(val => val.startsWith(type))
@@ -3933,10 +3937,6 @@ const headerConvert = _dosObj => {
3933
3937
  g_imgObj.titleArrow = C_IMG_ARROW;
3934
3938
  }
3935
3939
 
3936
- // ラベルテキスト、オンマウステキスト、確認メッセージ定義の上書き設定
3937
- Object.assign(g_lblNameObj, g_lang_lblNameObj[g_localeObj.val], g_presetObj.lblName?.[g_localeObj.val]);
3938
- Object.assign(g_msgObj, g_lang_msgObj[g_localeObj.val], g_presetObj.msg?.[g_localeObj.val]);
3939
-
3940
3940
  // 自動横幅拡張設定
3941
3941
  obj.autoSpread = setBoolVal(_dosObj.autoSpread, g_presetObj.autoSpread ?? true);
3942
3942
 
@@ -5447,6 +5447,10 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
5447
5447
  // 位置マニュアル化 (initManualX)
5448
5448
  g_keyObj[`initManual${newKey}`] = setBoolVal(_dosObj[`initManual${newKey}`] ?? g_keyObj[`initManual${newKey}`], false);
5449
5449
 
5450
+ // カスタムキーの説明ページ(keyHelpJaX / keyHelpEnX)
5451
+ Object.keys(g_lang_lblNameObj).forEach(lang =>
5452
+ g_lang_lblNameObj[lang][`keyHelp${newKey}`] = _dosObj[`keyHelp${lang}${newKey}`] ?? _dosObj[`keyHelp${newKey}`] ?? ``);
5453
+
5450
5454
  // キーコンフィグ (keyCtrlX_Y)
5451
5455
  g_keyObj.minPatterns = newKeyMultiParam(newKey, `keyCtrl`, toKeyCtrlArray, {
5452
5456
  errCd: `E_0104`, baseCopyFlg: true,
@@ -8013,6 +8017,10 @@ const setDifficulty = (_initFlg) => {
8013
8017
  }
8014
8018
  // 特殊キーフラグ
8015
8019
  g_stateObj.extraKeyFlg = g_headerObj.keyExtraList.includes(g_keyObj.currentKey);
8020
+ btnKeymodeHelp.style.display = (
8021
+ g_keyObj.defaultKeyList.includes(g_keyObj.currentKey) || g_lblNameObj[`keyHelp${g_keyObj.currentKey}`]
8022
+ ? `` : C_DIS_NONE
8023
+ );
8016
8024
 
8017
8025
  // ---------------------------------------------------
8018
8026
  // 2. 初期化設定
@@ -8225,8 +8233,15 @@ const createOptionWindow = _sprite => {
8225
8233
  );
8226
8234
  createScText(spriteList.difficulty, `Difficulty`);
8227
8235
  if (g_headerObj.difSelectorUse) {
8228
- createScText(spriteList.difficulty, `DifficultyList`, { x: 147, y: -10, targetLabel: `lnkDifficulty` });
8236
+ createScText(spriteList.difficulty, `DifficultyList`, { x: 154, y: -10, targetLabel: `lnkDifficulty` });
8229
8237
  }
8238
+ multiAppend(difficultySprite,
8239
+ createCss2Button(`btnKeymodeHelp`, `?`, () => {
8240
+ openLink(g_keyObj.defaultKeyList.includes(g_keyObj.currentKey)
8241
+ ? g_lblNameObj.keymodeUrl + g_keyObj.currentKey
8242
+ : g_lblNameObj[`keyHelp${g_keyObj.currentKey}`]);
8243
+ }, g_lblPosObj.btnKeymodeHelp, g_cssObj.button_Setting),
8244
+ )
8230
8245
 
8231
8246
  // ---------------------------------------------------
8232
8247
  // ハイスコア機能実装時に使用予定のスペース
@@ -8462,13 +8477,19 @@ const createOptionWindow = _sprite => {
8462
8477
 
8463
8478
  const viewAdjustment = () => {
8464
8479
  if (g_headerObj.playbackRate !== 1) {
8465
- const adjustmentVal = isLocalMusicFile(g_stateObj.scoreId) ?
8466
- Math.round(g_stateObj.adjustment / g_headerObj.playbackRate) :
8467
- (g_stateObj.adjustment / g_headerObj.playbackRate).toFixed(1);
8468
- document.getElementById(`lnkAdjustment`).innerHTML = `${adjustmentVal}${g_lblNameObj.frame}`
8469
- + `<span style="font-size:${g_limitObj.adjustmentViewOrgSiz}px"> (${g_stateObj.adjustment.toFixed(1)}${g_localStorage.adjustment === g_stateObj.adjustment ? '*' : ''})</span>`;
8470
- document.getElementById(`lnkAdjustment`).style.fontSize = `${g_limitObj.adjustmentViewSiz}px`;
8471
- document.getElementById(`lnkAdjustment`).style.lineHeight = `${g_limitObj.adjustmentLineHeight}px`;
8480
+ const adjustmentVal = isLocalMusicFile(g_stateObj.scoreId)
8481
+ ? Math.round(g_stateObj.adjustment / g_headerObj.playbackRate)
8482
+ : (g_stateObj.adjustment / g_headerObj.playbackRate).toFixed(1);
8483
+ document.getElementById(`lnkAdjustment`).textContent = ``;
8484
+ if (document.getElementById(`lnkAdjustment1`) === null) {
8485
+ multiAppend(
8486
+ adjustmentSprite,
8487
+ createDivCss2Label(`lnkAdjustment1`, ``, g_lblPosObj.lnkAdjustment1),
8488
+ createDivCss2Label(`lnkAdjustment2`, ``, g_lblPosObj.lnkAdjustment2),
8489
+ );
8490
+ }
8491
+ document.getElementById(`lnkAdjustment1`).textContent = `${adjustmentVal}${g_lblNameObj.frame}`;
8492
+ document.getElementById(`lnkAdjustment2`).textContent = `(${g_stateObj.adjustment.toFixed(1)}${g_localStorage.adjustment === g_stateObj.adjustment ? '*' : ''})`;
8472
8493
  }
8473
8494
  };
8474
8495
  viewAdjustment();
@@ -10628,7 +10649,7 @@ const keyConfigInit = (_kcType = g_kcType, _initFlg = false) => {
10628
10649
  * ColorPicker(一式)の切替
10629
10650
  */
10630
10651
  const changeColorPickers = () => {
10631
- lnkColorR.innerHTML = `[${g_keycons.colorCursorNum + 1} /`;
10652
+ lnkColorR.textContent = `[${g_keycons.colorCursorNum + 1} /`;
10632
10653
  for (let j = 0; j < g_limitObj.kcColorPickerNum; j++) {
10633
10654
  const m = getGroupNum(j);
10634
10655
  changeColorPicker(j, `arrow`, g_headerObj.setColor[m]);
@@ -16282,23 +16303,41 @@ const judgeArrow = _j => {
16282
16303
  * @param {number} _justFrames Fast/Slowの表示条件フレーム数
16283
16304
  */
16284
16305
  const displayDiff = (_difFrame, _fjdg = ``, _justFrames = g_headerObj.justFrames) => {
16285
- let diffJDisp = ``;
16286
16306
  g_workObj.diffList.push(_difFrame);
16307
+
16287
16308
  const difCnt = Math.abs(_difFrame);
16309
+ const diffJ = document.getElementById(`diff${_fjdg}J`);
16310
+
16311
+ let text = ``;
16312
+ let activeClass = ``;
16313
+
16314
+ // 1. 各条件の処理
16288
16315
  if (_difFrame > g_judgObj.arrowJ[g_judgPosObj.shobon]) {
16289
- diffJDisp = `<span class="common_excessive">Excessive</span>`;
16316
+ text = `Excessive`;
16317
+ activeClass = g_cssObj.common_Excessive;
16290
16318
  g_resultObj.excessive++;
16291
16319
  lifeDamage(true);
16320
+
16292
16321
  } else if (_difFrame > _justFrames) {
16293
- diffJDisp = `<span class="common_diffFast">Fast ${difCnt} Frames</span>`;
16322
+ text = `Fast ${difCnt} Frames`;
16323
+ activeClass = g_cssObj.common_diffFast;
16294
16324
  g_resultObj.fast++;
16295
16325
  quickRetry(`Fast/Slow`);
16296
- } else if (_difFrame < _justFrames * (-1)) {
16297
- diffJDisp = `<span class="common_diffSlow">Slow ${difCnt} Frames</span>`;
16326
+
16327
+ } else if (_difFrame < _justFrames * -1) {
16328
+ text = `Slow ${difCnt} Frames`;
16329
+ activeClass = g_cssObj.common_diffSlow;
16298
16330
  g_resultObj.slow++;
16299
16331
  quickRetry(`Fast/Slow`);
16332
+
16333
+ }
16334
+
16335
+ // 2. DOMへの反映
16336
+ diffJ.textContent = text;
16337
+ diffJ.classList.value = ``;
16338
+ if (activeClass) {
16339
+ diffJ.classList.add(activeClass);
16300
16340
  }
16301
- document.getElementById(`diff${_fjdg}J`).innerHTML = diffJDisp;
16302
16341
  };
16303
16342
 
16304
16343
  /**
@@ -16368,8 +16407,11 @@ const lifeDamage = (_excessive = false) => {
16368
16407
  const changeJudgeCharacter = (_name, _character, _fjdg = ``) => {
16369
16408
  g_resultObj[_name]++;
16370
16409
  g_currentArrows++;
16371
- document.getElementById(`chara${_fjdg}J`).innerHTML = `<span class="common_${_name}">${_character}</span>`;
16372
- document.getElementById(`chara${_fjdg}J`).setAttribute(`cnt`, C_FRM_JDGMOTION);
16410
+ const jdgJ = document.getElementById(`chara${_fjdg}J`);
16411
+ jdgJ.classList.value = ``;
16412
+ jdgJ.classList.add(g_cssObj[`common_${_name}`]);
16413
+ jdgJ.textContent = _character;
16414
+ jdgJ.setAttribute(`cnt`, C_FRM_JDGMOTION);
16373
16415
  document.getElementById(`lbl${toCapitalize(_name)}`).textContent = g_resultObj[_name];
16374
16416
  };
16375
16417
 
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2026/06/02 (v48.4.0)
8
+ * Revised : 2026/06/14 (v48.5.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -424,6 +424,10 @@ const updateWindowSiz = () => {
424
424
  x: 70, y: 65, w: g_btnWidth() - 120, h: 20, siz: 12, align: C_ALIGN_LEFT,
425
425
  },
426
426
 
427
+ btnKeymodeHelp: {
428
+ x: 150, y: -10, w: 15, h: 30, siz: 16, title: g_msgObj.keymodeHelp,
429
+ border: `solid 1px #666666`, borderRadius: 5,
430
+ },
427
431
  lblMusicInfo: {
428
432
  x: g_btnX(1 / 4), y: 0, w: g_btnWidth(3 / 4), h: 20, align: C_ALIGN_RIGHT
429
433
  },
@@ -449,6 +453,14 @@ const updateWindowSiz = () => {
449
453
  lblFadeinBar: {
450
454
  x: g_limitObj.setLblLeft, y: 0, type: `range`,
451
455
  },
456
+ lnkAdjustment1: {
457
+ x: g_limitObj.setLblLeft, y: -3, w: g_limitObj.setLblWidth, h: g_limitObj.setLblHeight,
458
+ siz: g_limitObj.adjustmentViewSiz,
459
+ },
460
+ lnkAdjustment2: {
461
+ x: g_limitObj.setLblLeft, y: 10, w: g_limitObj.setLblWidth, h: g_limitObj.setLblHeight,
462
+ siz: g_limitObj.adjustmentViewOrgSiz,
463
+ },
452
464
 
453
465
  /** 設定: 譜面明細子画面 */
454
466
  lblTooldif: {
@@ -2717,6 +2729,8 @@ const g_shortcutObj = {
2717
2729
  ShiftLeft_KeyD: { id: `lnkDifficultyL` },
2718
2730
  ShiftRight_KeyD: { id: `lnkDifficultyL` },
2719
2731
  KeyD: { id: `lnkDifficultyR` },
2732
+ Slash: { id: `btnKeymodeHelp`, reset: true },
2733
+ F1: { id: `btnKeymodeHelp`, reset: true },
2720
2734
 
2721
2735
  ShiftLeft_ArrowRight: { id: `lnkSpeedR` },
2722
2736
  ShiftRight_ArrowRight: { id: `lnkSpeedR` },
@@ -4860,6 +4874,7 @@ const g_lang_lblNameObj = {
4860
4874
 
4861
4875
  helpUrl: `https://github.com/cwtickle/danoniplus/wiki/AboutGameSystem`,
4862
4876
  securityUrl: `https://github.com/cwtickle/danoniplus/security/policy`,
4877
+ keymodeUrl: `https://github.com/cwtickle/danoniplus/wiki/Keys-`,
4863
4878
  },
4864
4879
  En: {
4865
4880
  dataDeleteOFFDesc: `Select the type of data you wish to delete and press "Reset".`,
@@ -4922,6 +4937,7 @@ const g_lang_lblNameObj = {
4922
4937
 
4923
4938
  helpUrl: `https://github.com/cwtickle/danoniplus-docs/wiki/AboutGameSystem`,
4924
4939
  securityUrl: `https://github.com/cwtickle/danoniplus-docs/wiki/SecurityPolicy`,
4940
+ keymodeUrl: `https://github.com/cwtickle/danoniplus-docs/wiki/Keys-`,
4925
4941
  },
4926
4942
  };
4927
4943
 
@@ -4972,6 +4988,8 @@ const g_lang_msgObj = {
4972
4988
  fadein: `譜面を途中から再生します。\n途中から開始した場合はハイスコアを保存しません。`,
4973
4989
  volume: `ゲーム内の音量を設定します。`,
4974
4990
 
4991
+ keymodeHelp: `現在選択中の譜面のキータイプの説明ページへリンクします(外部リンク)`,
4992
+
4975
4993
  graph: `譜面密度や速度変化状況、\n譜面の難易度などの情報を表示します。`,
4976
4994
  dataSave: `ハイスコア、リバース設定、\nキーコンフィグの保存の有無を設定します。`,
4977
4995
  toDisplay: `プレイ画面上のオブジェクトの\n表示・非表示(一部透明度)を設定します。`,
@@ -5078,6 +5096,8 @@ const g_lang_msgObj = {
5078
5096
  fadein: `Plays the chart from the middle.\nIf you start in the middle, the high score will not be saved.`,
5079
5097
  volume: `Set the in-game volume.`,
5080
5098
 
5099
+ keymodeHelp: `Go to the explanation page for the key type of the currently selected chart (External Link).`,
5100
+
5081
5101
  graph: `Displays detailed information about the chart, such as chart's density status, sequences' velocity changes, and chart's difficulty.`,
5082
5102
  dataSave: `Set whether to save the high score, reverse setting, and key config.`,
5083
5103
  toDisplay: `Set the display or non-display (partial transparency) of objects on the play screen.`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "48.4.2",
3
+ "version": "48.5.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "./js/danoni_main.js",
6
6
  "jsdelivr": "./js/danoni_main.js",