danoniplus 48.4.0 → 48.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.
Files changed (2) hide show
  1. package/js/danoni_main.js +73 -104
  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 : 2026/06/02
7
+ * Revised : 2026/06/05
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 48.4.0`;
12
- const g_revisedDate = `2026/06/02`;
11
+ const g_version = `Ver 48.4.1`;
12
+ const g_revisedDate = `2026/06/05`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -9341,30 +9341,67 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
9341
9341
  x: Math.round(_playW / 2 - 220), y: Math.round((_playH + (g_posObj?.stepYR ?? 0)) / 2 - 60), w: 440, h: 120,
9342
9342
  }));
9343
9343
  } else {
9344
- const jX0 = Math.round(_playW / 2 - 220) + (g_diffObj.arrowJdgX ?? 0);
9345
- const jY0 = Math.round((_playH + (g_posObj?.stepYR ?? 0)) / 2 - 60) + (g_diffObj.arrowJdgY ?? 0);
9346
- const fX0 = Math.round(_playW / 2 - 120) + (g_diffObj.frzJdgX ?? 0);
9347
- const fY0 = Math.round((_playH + (g_posObj?.stepYR ?? 0)) / 2 + 10) + (g_diffObj.frzJdgY ?? 0);
9348
-
9349
- const jdgInitX = g_previewPos.arrowJdg.x ?? jX0;
9350
- const jdgInitY = g_previewPos.arrowJdg.y ?? jY0;
9351
- const jdgFInitX = g_previewPos.frzJdg.x ?? fX0;
9352
- const jdgFInitY = g_previewPos.frzJdg.y ?? fY0;
9353
-
9354
- // 通常判定グループ
9355
- buildDraggableJudgGroup(_frame, `arrowJdg`, jdgInitX, jdgInitY, _playW, _playH, {
9356
- charaText: d.judgment === C_FLG_ON ? g_lblNameObj.j_ii : ``,
9357
- comboText: d.judgment === C_FLG_ON ? `5 Combo!!` : ``,
9358
- diffText: `Fast 3 Frames`,
9359
- charaColor: `#66ffff`,
9360
- });
9344
+ const opacity = g_stateObj.opacity / 100;
9345
+ const jdgCenterY = Math.round((_playH + (g_posObj?.stepYR ?? 0)) / 2);
9346
+ const groupW = 370;
9347
+ const groupH = 51;
9348
+
9349
+ const jdgSettings = [
9350
+ {
9351
+ key: `arrowJdg`,
9352
+ stdYOffset: -60,
9353
+ offsetX: g_diffObj.arrowJdgX ?? 0,
9354
+ offsetY: g_diffObj.arrowJdgY ?? 0,
9355
+ chara: d.judgment === C_FLG_ON ? g_lblNameObj.j_ii : ``,
9356
+ css: [g_cssObj.common_ii, g_cssObj.common_kita], // [chara, combo]
9357
+ toast: g_lblNameObj.arrowJdgUpdate,
9358
+ },
9359
+ {
9360
+ key: `frzJdg`,
9361
+ stdYOffset: 10,
9362
+ offsetX: g_diffObj.frzJdgX ?? 0,
9363
+ offsetY: g_diffObj.frzJdgY ?? 0,
9364
+ chara: d.judgment === C_FLG_ON ? g_lblNameObj.j_kita : ``,
9365
+ css: [g_cssObj.common_kita, g_cssObj.common_ii],
9366
+ toast: g_lblNameObj.frzJdgUpdate,
9367
+ }
9368
+ ];
9369
+
9370
+ jdgSettings.forEach(item => {
9361
9371
 
9362
- // フリーズ判定グループ
9363
- buildDraggableJudgGroup(_frame, `frzJdg`, jdgFInitX, jdgFInitY, _playW, _playH, {
9364
- charaText: d.judgment === C_FLG_ON ? g_lblNameObj.j_kita : ``,
9365
- comboText: d.judgment === C_FLG_ON ? `5 Combo!!` : ``,
9366
- diffText: `Fast 2 Frames`,
9367
- charaColor: `#ffff99`,
9372
+ const stdX = Math.round(_playW / 2 - (item.key === `arrowJdg` ? 220 : 120));
9373
+ const initX = g_previewPos[item.key].x ?? (stdX + item.offsetX);
9374
+ const initY = g_previewPos[item.key].y ?? (jdgCenterY + item.offsetY + item.stdYOffset);
9375
+
9376
+ // グループコンテナの生成
9377
+ const group = createEmptySprite(_frame, `previewGrp_${item.key}`, {
9378
+ x: initX, y: initY, w: groupW, h: groupH, pointerEvents: C_DIS_AUTO,
9379
+ });
9380
+
9381
+ // ラベル類の配置
9382
+ multiAppend(group,
9383
+ createDivCss2Label(`previewChara_${item.key}`, item.chara, {
9384
+ x: 0, y: 0, w: g_limitObj.jdgCharaWidth, h: g_limitObj.jdgCharaHeight,
9385
+ siz: g_limitObj.jdgCharaSiz, opacity,
9386
+ }, item.css[0]),
9387
+ createDivCss2Label(`previewCombo_${item.key}`, d.judgment === C_FLG_ON ? `5 Combo!!` : ``, {
9388
+ x: 170, y: 0, w: g_limitObj.jdgCharaWidth, h: g_limitObj.jdgCharaHeight,
9389
+ siz: g_limitObj.jdgCharaSiz, opacity,
9390
+ }, item.css[1]),
9391
+ createDivCss2Label(`previewDiff_${item.key}`, `Fast 3 Frames`, {
9392
+ x: 170, y: 25, w: g_limitObj.jdgCharaWidth, h: g_limitObj.jdgCharaHeight,
9393
+ siz: g_limitObj.mainSiz, color: `#ff9966`, opacity,
9394
+ }, g_cssObj.common_fast),
9395
+ );
9396
+
9397
+ // ドラッグ機能を付与
9398
+ makeElementDraggable(group, item.key, _playW, _playH, { w: groupW, h: groupH }, {
9399
+ toastTitle: item.toast,
9400
+ getStdPos: () => ({
9401
+ x: stdX,
9402
+ y: Math.round(jdgCenterY + item.stdYOffset),
9403
+ }),
9404
+ });
9368
9405
  });
9369
9406
  }
9370
9407
 
@@ -9467,8 +9504,10 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
9467
9504
  );
9468
9505
  const scConfig = {
9469
9506
  toastTitle: g_lblNameObj.shortcutUpdate,
9470
- getStdX: (pw) => g_sWidth + g_headerObj.scAreaWidth - 85,
9471
- getStdY: (ph, syr) => _playH - 65,
9507
+ getStdPos: () => ({
9508
+ x: g_sWidth + g_headerObj.scAreaWidth - 85,
9509
+ y: _playH - 65
9510
+ }),
9472
9511
  };
9473
9512
  makeElementDraggable(scGroup, `shortcut`, _playW, _playH, { w: 80, h: 65 }, scConfig);
9474
9513
 
@@ -9602,65 +9641,6 @@ const makeElementDraggable = (_target, _key, _playW, _playH, _bounds, _config) =
9602
9641
  _target.setAttribute(`lsnrkeyTE`, keyUp);
9603
9642
  };
9604
9643
 
9605
- /**
9606
- * ドラッグ可能な判定グループを生成する
9607
- * @param {HTMLElement} _parent 親要素
9608
- * @param {string} _groupId `arrowJdg` または `frzJdg`
9609
- * @param {number} _initX 初期X座標(frame相対)
9610
- * @param {number} _initY 初期Y座標(frame相対)
9611
- * @param {number} _playW プレイ幅
9612
- * @param {number} _playH プレイ高さ
9613
- * @param {object} _opts 表示テキスト・色オプション
9614
- */
9615
- const buildDraggableJudgGroup = (_parent, _groupId, _initX, _initY, _playW, _playH, _opts) => {
9616
- const groupW = 370;
9617
- const groupH = 51;
9618
-
9619
- const group = createEmptySprite(_parent, `previewGrp_${_groupId}`, {
9620
- x: _initX, y: _initY, w: groupW, h: groupH, pointerEvents: C_DIS_AUTO,
9621
- });
9622
- const opacity = g_stateObj.opacity / 100;
9623
-
9624
- // 内包要素の生成 (省略:元のコードの multiAppend 部分と同一)
9625
- multiAppend(
9626
- group,
9627
- // キャラクタ
9628
- createDivCss2Label(`previewChara_${_groupId}`, _opts.charaText, {
9629
- x: 0, y: 0, w: g_limitObj.jdgCharaWidth, h: g_limitObj.jdgCharaHeight,
9630
- siz: g_limitObj.jdgCharaSiz, opacity,
9631
- }, _groupId === `arrowJdg` ? g_cssObj.common_ii : g_cssObj.common_kita),
9632
- // コンボ
9633
- createDivCss2Label(`previewCombo_${_groupId}`, _opts.comboText, {
9634
- x: 170, y: 0, w: g_limitObj.jdgCharaWidth, h: g_limitObj.jdgCharaHeight,
9635
- siz: g_limitObj.jdgCharaSiz, opacity,
9636
- }, _groupId === `arrowJdg` ? g_cssObj.common_kita : g_cssObj.common_ii),
9637
- // Fast/Slow
9638
- createDivCss2Label(`previewDiff_${_groupId}`, _opts.diffText, {
9639
- x: 170, y: 25, w: g_limitObj.jdgCharaWidth, h: g_limitObj.jdgCharaHeight,
9640
- siz: g_limitObj.mainSiz, color: `#ff9966`, opacity,
9641
- }, g_cssObj.common_fast),
9642
- );
9643
-
9644
- // ============================================================
9645
- // 判定グループ固有の「座標反映ルール」を定義
9646
- // ============================================================
9647
- const configMap = {
9648
- arrowJdg: {
9649
- toastTitle: g_lblNameObj.arrowJdgUpdate,
9650
- getStdX: (pw) => Math.round(pw / 2 - 220),
9651
- getStdY: (ph, syr) => Math.round((ph + syr) / 2 - 60),
9652
- },
9653
- frzJdg: {
9654
- toastTitle: g_lblNameObj.frzJdgUpdate,
9655
- getStdX: (pw) => Math.round(pw / 2 - 120),
9656
- getStdY: (ph, syr) => Math.round((ph + syr) / 2 + 10),
9657
- }
9658
- };
9659
-
9660
- // 汎用ドラッグ及びドラッグ枠作成、差分適用処理
9661
- makeElementDraggable(group, _groupId, _playW, _playH, { w: groupW, h: groupH }, configMap[_groupId]);
9662
- };
9663
-
9664
9644
  /**
9665
9645
  * ドラッグ結果の座標をゲーム本体の設定に汎用的に反映する
9666
9646
  * @param {number} _x 確定したframe相対X
@@ -9669,17 +9649,13 @@ const buildDraggableJudgGroup = (_parent, _groupId, _initX, _initY, _playW, _pla
9669
9649
  * @param {string} _key 保存用キー(g_diffObjのプロパティ名の接頭辞)
9670
9650
  */
9671
9651
  const applyElementPositionToGame = (_x, _y, _config, _key) => {
9672
- const playW = g_headerObj.playingWidth || g_sWidth;
9673
- const playH = g_headerObj.playingHeight || g_sHeight;
9674
- const stepYR = g_posObj?.stepYR ?? 0;
9675
9652
 
9676
9653
  // 1. 各要素固有の「標準座標(基準点)」を計算
9677
- const stdX = _config.getStdX(playW);
9678
- const stdY = _config.getStdY(playH, stepYR);
9654
+ const std = _config.getStdPos();
9679
9655
 
9680
9656
  // 2. オフセット(差分)を計算
9681
- const diffX = _x - stdX;
9682
- const diffY = _y - stdY;
9657
+ const diffX = _x - std.x;
9658
+ const diffY = _y - std.y;
9683
9659
 
9684
9660
  // 3. 指定された保存先にオフセットを格納
9685
9661
  g_diffObj[`${_key}X`] = diffX;
@@ -9816,7 +9792,7 @@ const createSettingsDisplayWindow = _sprite => {
9816
9792
 
9817
9793
  // ---------------------------------------------------
9818
9794
  // 矢印の見え方 (Appearance)
9819
- // 縦位置: 7.4
9795
+ // 縦位置: 5.8
9820
9796
  createGeneralSetting(spriteList.appearance, `appearance`, {
9821
9797
  addRFunc: () => dispAppearanceSlider(),
9822
9798
  });
@@ -9856,14 +9832,14 @@ const createSettingsDisplayWindow = _sprite => {
9856
9832
 
9857
9833
  // ---------------------------------------------------
9858
9834
  // 判定表示系の不透明度 (Opacity)
9859
- // 縦位置: 9
9835
+ // 縦位置: 7.4
9860
9836
  g_headerObj.opacityUse = g_headerObj.judgmentUse || g_headerObj.judgmentSet === C_FLG_ON;
9861
9837
 
9862
9838
  createGeneralSetting(spriteList.opacity, `opacity`, { unitName: g_lblNameObj.percent });
9863
9839
 
9864
9840
  // ---------------------------------------------------
9865
9841
  // タイミング調整 (HitPosition)
9866
- // 縦位置: 10
9842
+ // 縦位置: 8.4
9867
9843
  createGeneralSetting(spriteList.hitPosition, `hitPosition`, {
9868
9844
  skipTerms: g_settings.hitPositionTerms, scLabel: g_lblNameObj.sc_hitPosition, roundNum: 5,
9869
9845
  unitName: g_lblNameObj.pixel,
@@ -11083,13 +11059,6 @@ const keyconfigKeyboardPreview = (() => {
11083
11059
  legendText: `#cccccc`, // 凡例テキスト
11084
11060
  };
11085
11061
 
11086
- // ボタン配置
11087
- // X・W は init() 内で動的計算(g_btnWidth() 依存)
11088
- // Y: KeyConfig テキスト上の余白に収まるよう小さく設定
11089
- const BTN_H = 18; // ボタン高さ
11090
- const BTN_Y = 3; // divRoot 内 Y 座標
11091
- const BTN_FS = 11; // ボタンのフォントサイズ(px)
11092
-
11093
11062
  // プレビューエリア
11094
11063
  // X: canvas を divRoot 内で水平センタリング(init で動的計算)
11095
11064
  // Y: g_sHeight に対して垂直センタリング(init で動的計算)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "48.4.0",
3
+ "version": "48.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",