danoniplus 47.4.0 → 47.4.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 : 2026/04/26
7
+ * Revised : 2026/04/29
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 47.4.0`;
12
- const g_revisedDate = `2026/04/26`;
11
+ const g_version = `Ver 47.4.1`;
12
+ const g_revisedDate = `2026/04/29`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -3385,17 +3385,15 @@ const storeBaseData = (_scoreId, _scoreObj, _keyCtrlPtn) => {
3385
3385
  mmWidthBase: (g_sWidth - 500) / 2 + 290,
3386
3386
  mmMarginY: 2,
3387
3387
  get laneWidth() {
3388
- return Math.min(Math.floor((this.mmWidthBase - this.timeMargin) / keyNum), 40);
3388
+ return Math.min((this.mmWidthBase - this.timeMargin) / keyNum, 40);
3389
3389
  },
3390
3390
  get logicalWidth() {
3391
- return this.timeMargin + (this.laneWidth * keyNum);
3391
+ const logicalWidth = this.timeMargin + (this.laneWidth * keyNum);
3392
+ return Math.ceil(logicalWidth * this.dpr) / this.dpr;
3392
3393
  }
3393
3394
  },
3394
3395
  };
3395
3396
 
3396
- // ヘッダー生成
3397
- g_detailObj.scoreMinimapHeader[_scoreId] = createMinimapHeader(g_detailObj.miniMapParams[_scoreId].config, _keyCtrlPtn, keyNum);
3398
-
3399
3397
  // Canvas保存用配列を空で初期化
3400
3398
  g_detailObj.scoreMinimap[_scoreId] = null;
3401
3399
  g_detailObj.scoreMinimapReverse[_scoreId] = null;
@@ -3510,7 +3508,7 @@ const createMinimapHeader = (_config, _keyCtrlPtn, _keyNum) => {
3510
3508
  for (let j = 0; j < _keyNum; j++) {
3511
3509
  // config.laneWidth を使って中央座標を計算
3512
3510
  const x = timeMargin + j * laneWidth + laneWidth / 2;
3513
- const keyText = g_kCd[g_keyObj[`keyCtrl${_keyCtrlPtn}`][j][0]];
3511
+ const keyText = g_kCd[g_keyObj[`keyCtrl${_keyCtrlPtn}`][j][0]].split(` `).join(``);
3514
3512
 
3515
3513
  ctx.fillText(keyText, x, headerHeight / 2 + 2); // 視覚的な中央調整で +2px
3516
3514
  }
@@ -7290,7 +7288,6 @@ const drawSpeedGraph = _scoreId => {
7290
7288
  speed: { frame: [0], speed: [1], cnt: 0, strokeColor: g_graphColorObj.speed },
7291
7289
  boost: { frame: [0], speed: [1], cnt: 0, strokeColor: g_graphColorObj.boost }
7292
7290
  };
7293
- const dpr = window.devicePixelRatio || 1;
7294
7291
 
7295
7292
  const tmpSpeedPoint = [0];
7296
7293
  Object.keys(speedObj).forEach(speedType => {
@@ -7509,7 +7506,7 @@ const updateScoreDetailLabel = (_name, _label, _value, _pos = 0, _labelname = _l
7509
7506
  const baseLabel = (_bLabel, _bLabelname, _bAlign) =>
7510
7507
  document.getElementById(`detail${_name}`).appendChild(
7511
7508
  createDivCss2Label(_bLabel, _bLabelname, {
7512
- x: 10, y: 110 + _pos * 20, w: 100, h: 20, siz: g_limitObj.difSelectorSiz, align: _bAlign,
7509
+ x: 10, y: 130 + _pos * 16, w: 100, h: 16, siz: g_limitObj.difSelectorSiz, align: _bAlign,
7513
7510
  })
7514
7511
  );
7515
7512
  if (document.getElementById(`data${_label}`) === null) {
@@ -7880,9 +7877,14 @@ const drawMinimap = (_scoreId, { _initFlg = false, _fadeinFlg = false } = {}) =>
7880
7877
  ? g_detailObj.scoreMinimapReverse[_scoreId]
7881
7878
  : g_detailObj.scoreMinimap[_scoreId];
7882
7879
 
7880
+ const params = g_detailObj.miniMapParams[_scoreId];
7881
+ const kPtn = params._keyCtrlPtn;
7882
+ if (!g_detailObj.scoreMinimapHeader[kPtn]) {
7883
+ // ヘッダーはキー種ごとに共通なので、未作成の場合のみ生成してキャッシュ
7884
+ g_detailObj.scoreMinimapHeader[kPtn] = createMinimapHeader(params.config, kPtn, params._keyNum);
7885
+ }
7883
7886
  if (!savedCanvases) {
7884
7887
  // 未作成の場合のみミニマップを生成(Lazy Generation)
7885
- const params = g_detailObj.miniMapParams[_scoreId];
7886
7888
  savedCanvases = generateMinimapData(params, isRev);
7887
7889
 
7888
7890
  // 生成したものをキャッシュに保存
@@ -7896,7 +7898,7 @@ const drawMinimap = (_scoreId, { _initFlg = false, _fadeinFlg = false } = {}) =>
7896
7898
  // --- ヘッダー部分 ---
7897
7899
  const detailMiniMapHeader = createEmptySprite(detailMiniMap, `detailMiniMapHeader`, g_windowObj.detailMiniMapHeader);
7898
7900
  $id(`detailMiniMapHeader`).top = (g_stateObj.miniMapRevFlg ? 230 + g_sHeight - 500 : 0) + `px`;
7899
- detailMiniMapHeader.appendChild(g_detailObj.scoreMinimapHeader[_scoreId]);
7901
+ detailMiniMapHeader.appendChild(g_detailObj.scoreMinimapHeader[kPtn]);
7900
7902
 
7901
7903
  // --- メイン(譜面)部分 ---
7902
7904
  const detailMiniMapSub = createEmptySprite(detailMiniMap, `detailMiniMapSub`, g_windowObj.detailMiniMapSub);
@@ -8243,7 +8245,6 @@ const createOptionWindow = _sprite => {
8243
8245
  graphObj.style.top = wUnit(0);
8244
8246
  graphObj.style.position = `absolute`;
8245
8247
  graphObj.style.background = j === 0 ? bkColor : `#ffffff00`;
8246
- graphObj.style.border = `dotted ${wUnit(2)}`;
8247
8248
  const ctx = graphObj.getContext(`2d`);
8248
8249
  ctx.scale(dpr, dpr);
8249
8250
 
@@ -12956,7 +12957,6 @@ const mainInit = () => {
12956
12957
  const dummyArrowCnts = fillArray(keyNum);
12957
12958
  const dummyFrzCnts = fillArray(keyNum);
12958
12959
  let speedCnts = 0;
12959
- let boostCnts = 0;
12960
12960
  let keychCnts = 0;
12961
12961
 
12962
12962
  g_workObj.flatMode = g_stateObj.d_stepzone === `FlatBar` ||
@@ -13557,6 +13557,10 @@ const mainInit = () => {
13557
13557
  }
13558
13558
  },
13559
13559
 
13560
+ get dummyArrowON() {
13561
+ return this.dummyArrowOFF;
13562
+ },
13563
+
13560
13564
  // フリーズアロー(成功時)
13561
13565
  frzOK: (_j, _k, _frzName, _cnt) => {
13562
13566
  judgeKita(_cnt);
@@ -13600,10 +13604,11 @@ const mainInit = () => {
13600
13604
 
13601
13605
  // ダミーフリーズアロー(キーを離したときの処理)
13602
13606
  // ※処理上通ることはないが、統一のために定義
13603
- dummyFrzKeyUp: (_j, _k, _frzName, _cnt) => { },
13607
+ get dummyFrzKeyUp() {
13608
+ return this.dummyFrzNG;
13609
+ }
13604
13610
 
13605
13611
  };
13606
- judgeMotionFunc.dummyArrowON = (_j, _arrowName, _cnt) => judgeMotionFunc.dummyArrowOFF(_j, _arrowName, _cnt);
13607
13612
 
13608
13613
  /**
13609
13614
  * 次矢印・フリーズアローへ判定を移すかチェック
@@ -13641,8 +13646,12 @@ const mainInit = () => {
13641
13646
  },
13642
13647
 
13643
13648
  arrowON: (_j, _k, _cnt) => true,
13644
- dummyArrowOFF: (_j, _k, _cnt) => true,
13645
- dummyArrowON: (_j, _k, _cnt) => true,
13649
+ get dummyArrowOFF() {
13650
+ return this.arrowON;
13651
+ },
13652
+ get dummyArrowON() {
13653
+ return this.arrowON;
13654
+ },
13646
13655
 
13647
13656
  frzOFF: (_j, _k, _cnt) => {
13648
13657
 
@@ -13682,10 +13691,8 @@ const mainInit = () => {
13682
13691
  changeHitFrz(_j, _k, `dummyFrz`);
13683
13692
  }
13684
13693
  },
13685
- dummyFrzON: (_j, _k, _cnt) => {
13686
- if (_cnt === 0) {
13687
- changeHitFrz(_j, _k, `dummyFrz`);
13688
- }
13694
+ get dummyFrzON() {
13695
+ return this.dummyFrzOFF;
13689
13696
  },
13690
13697
  };
13691
13698
 
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2026/04/25 (v47.3.2)
8
+ * Revised : 2026/04/29 (v47.4.1)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -489,31 +489,31 @@ const updateWindowSiz = () => {
489
489
  x: 290, y: 145, w: 120, h: 20, siz: 50, align: C_ALIGN_CENTER,
490
490
  },
491
491
  lblSpdHeader: {
492
- x: 5, y: 180, w: 100, h: 20, siz: g_limitObj.difSelectorSiz, align: C_ALIGN_LEFT,
492
+ x: 5, y: 190, w: 100, h: 20, siz: g_limitObj.difSelectorSiz, align: C_ALIGN_LEFT,
493
493
  },
494
494
  lblSpdBase: {
495
- x: 0, y: 200, w: 40, h: 20, siz: 11.5, fontWeight: `bold`,
495
+ x: 0, y: 210, w: 40, h: 20, siz: 11.5, fontWeight: `bold`,
496
496
  },
497
497
  lblSpdOverall: {
498
- x: 40, y: 200, w: 40, h: 20, siz: 11.5,
498
+ x: 40, y: 210, w: 40, h: 20, siz: 11.5,
499
499
  color: g_graphColorObj.speedChara, fontWeight: `bold`,
500
500
  },
501
501
  lblSpdBoost: {
502
- x: 80, y: 200, w: 40, h: 20, siz: 11.5,
502
+ x: 80, y: 210, w: 40, h: 20, siz: 11.5,
503
503
  color: g_graphColorObj.boostChara, fontWeight: `bold`,
504
504
  },
505
505
  lblSpdTotal: {
506
- x: 5, y: 215, w: 100, h: 20, siz: g_limitObj.difSelectorSiz,
506
+ x: 5, y: 225, w: 100, h: 20, siz: g_limitObj.difSelectorSiz,
507
507
  align: C_ALIGN_LEFT, fontWeight: `bold`,
508
508
  },
509
509
  lblSpdFrame: {
510
- x: 70, y: 218, w: 50, h: 20, siz: 12, fontWeight: `bold`,
510
+ x: 70, y: 228, w: 50, h: 20, siz: 12, fontWeight: `bold`,
511
511
  },
512
512
  btnSpdCursorL: {
513
- x: 85, y: 180, w: 15, h: 20, siz: 12,
513
+ x: 85, y: 190, w: 15, h: 20, siz: 12,
514
514
  },
515
515
  btnSpdCursorR: {
516
- x: 100, y: 180, w: 15, h: 20, siz: 12,
516
+ x: 100, y: 190, w: 15, h: 20, siz: 12,
517
517
  },
518
518
  lnkMiniMapRev: {
519
519
  w: g_limitObj.difCoverWidth, h: 20, borderStyle: `solid`,
@@ -4844,6 +4844,7 @@ const g_lang_msgObj = {
4844
4844
  lnkDensityG: `譜面の密度状況を表示`,
4845
4845
  lnkToolDifG: `譜面の難易度、矢印・フリーズアローの分布状況を表示`,
4846
4846
  lnkHighScoreG: `譜面のハイスコアを表示`,
4847
+ lnkMiniMapG: `譜面内容をミニマップで表示`,
4847
4848
  lnkDifInfo: `譜面の難易度、矢印・フリーズアローの分布状況をクリップボードへコピー`,
4848
4849
  lnkResetHighScore: `譜面のハイスコア情報を消去`,
4849
4850
  lnkHighScore: `譜面のハイスコアをクリップボードへコピー`,
@@ -4944,6 +4945,7 @@ const g_lang_msgObj = {
4944
4945
  lnkDensityG: `Displays the density status of the chart.`,
4945
4946
  lnkToolDifG: `Displays the difficulty level of the chart and the distribution of arrows and freeze arrows.`,
4946
4947
  lnkHighScoreG: `Displays the high score of the chart.`,
4948
+ lnkMiniMapG: `Display chart on the minimap.`,
4947
4949
  lnkDifInfo: `Copy the difficulty of the chart and the distribution of arrows and freeze arrows to the clipboard.`,
4948
4950
  lnkResetHighScore: `Erase the high score information in the chart.`,
4949
4951
  lnkHighScore: `Copies the high score of the chart to the clipboard.`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "47.4.0",
3
+ "version": "47.4.1",
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",