danoniplus 48.2.0 → 48.3.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 +138 -62
- package/js/lib/danoni_constants.js +31 -6
- 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/05/
|
|
7
|
+
* Revised : 2026/05/31
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 48.
|
|
12
|
-
const g_revisedDate = `2026/05/
|
|
11
|
+
const g_version = `Ver 48.3.0`;
|
|
12
|
+
const g_revisedDate = `2026/05/31`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -4359,8 +4359,26 @@ const headerConvert = _dosObj => {
|
|
|
4359
4359
|
obj.baseSpeed = 1 + ((g_posObj.distY - (g_posObj.stepY - C_STEP_Y) * 2) / (500 - C_STEP_Y) - 1) * 0.85;
|
|
4360
4360
|
|
|
4361
4361
|
// 矢印・フリーズアロー判定位置補正
|
|
4362
|
+
g_diffObj.arrowJdgX = (isNaN(parseFloat(_dosObj.arrowJdgX)) ? 0 : parseFloat(_dosObj.arrowJdgX));
|
|
4362
4363
|
g_diffObj.arrowJdgY = (isNaN(parseFloat(_dosObj.arrowJdgY)) ? 0 : parseFloat(_dosObj.arrowJdgY));
|
|
4364
|
+
g_diffObj.frzJdgX = (isNaN(parseFloat(_dosObj.frzJdgX)) ? 0 : parseFloat(_dosObj.frzJdgX));
|
|
4363
4365
|
g_diffObj.frzJdgY = (isNaN(parseFloat(_dosObj.frzJdgY)) ? 0 : parseFloat(_dosObj.frzJdgY));
|
|
4366
|
+
g_diffInitObj.arrowJdgX = g_diffObj.arrowJdgX;
|
|
4367
|
+
g_diffInitObj.arrowJdgY = g_diffObj.arrowJdgY;
|
|
4368
|
+
g_diffInitObj.frzJdgX = g_diffObj.frzJdgX;
|
|
4369
|
+
g_diffInitObj.frzJdgY = g_diffObj.frzJdgY;
|
|
4370
|
+
|
|
4371
|
+
// ショートカット表示位置補正
|
|
4372
|
+
g_diffObj.shortcutX = (isNaN(parseFloat(_dosObj.shortcutX)) ? 0 : parseFloat(_dosObj.shortcutX));
|
|
4373
|
+
g_diffObj.shortcutY = (isNaN(parseFloat(_dosObj.shortcutY)) ? 0 : parseFloat(_dosObj.shortcutY));
|
|
4374
|
+
g_diffInitObj.shortcutX = g_diffObj.shortcutX;
|
|
4375
|
+
g_diffInitObj.shortcutY = g_diffObj.shortcutY;
|
|
4376
|
+
|
|
4377
|
+
if (Object.keys(g_diffObj).some(key => g_localStorage[key] !== undefined)) {
|
|
4378
|
+
Object.keys(g_diffObj).forEach(key =>
|
|
4379
|
+
g_diffObj[key] = setIntVal(g_localStorage[key], g_diffObj[key])
|
|
4380
|
+
);
|
|
4381
|
+
}
|
|
4364
4382
|
|
|
4365
4383
|
// musicフォルダ設定
|
|
4366
4384
|
obj.musicFolder = _dosObj.musicFolder ?? (g_remoteFlg ? `${C_MRK_CURRENT_DIRECTORY}../music` : `music`);
|
|
@@ -9111,8 +9129,9 @@ let g_previewLsnrKeys = new Set();
|
|
|
9111
9129
|
|
|
9112
9130
|
/** プレビュー内の各UIオブジェクトの現在座標 */
|
|
9113
9131
|
const g_previewPos = {
|
|
9114
|
-
|
|
9115
|
-
|
|
9132
|
+
arrowJdg: { x: null, y: null }, // 通常判定キャラクタ・コンボ
|
|
9133
|
+
frzJdg: { x: null, y: null }, // フリーズ判定キャラクタ・コンボ
|
|
9134
|
+
shortcut: { x: null, y: null },
|
|
9116
9135
|
};
|
|
9117
9136
|
|
|
9118
9137
|
/**
|
|
@@ -9161,8 +9180,23 @@ const openDisplayPreview = () => {
|
|
|
9161
9180
|
createCss2Button(`btnDisplayPreview2`, `↑ Preview`, _evt => {
|
|
9162
9181
|
toggleDisplayPreview();
|
|
9163
9182
|
}, g_lblPosObj.btnDisplayPreview, g_cssObj.button_Setting),
|
|
9183
|
+
createCss2Button(`btnDisplayReset`, `Reset`, _evt => {
|
|
9184
|
+
if (window.confirm(g_msgObj.displayPreviewResetConfirm)) {
|
|
9185
|
+
Object.assign(g_diffObj, g_diffInitObj);
|
|
9186
|
+
Object.keys(g_diffInitObj).forEach(key => {
|
|
9187
|
+
g_localStorage[key] = g_diffInitObj[key];
|
|
9188
|
+
});
|
|
9189
|
+
Object.keys(g_previewPos).forEach(key => g_previewPos[key] = { x: null, y: null });
|
|
9190
|
+
closeDisplayPreview();
|
|
9191
|
+
openDisplayPreview();
|
|
9192
|
+
}
|
|
9193
|
+
}, g_lblPosObj.btnDisplayReset, g_cssObj.button_Reset),
|
|
9164
9194
|
createDescDiv(`lblDisplayPreviewMsg`, g_lblNameObj.displayPreviewDesc),
|
|
9165
9195
|
);
|
|
9196
|
+
if (g_headerObj.scAreaWidth > 0) {
|
|
9197
|
+
overlay.appendChild(createDescDiv(`lblDisplayPreviewMsg2`, g_lblNameObj.displayPreviewDesc2));
|
|
9198
|
+
}
|
|
9199
|
+
createScText(btnDisplayReset, `DisplayPreviewReset`, { displayName: `displayPreview`, targetLabel: `btnDisplayReset`, x: -15 });
|
|
9166
9200
|
|
|
9167
9201
|
// ============================================================
|
|
9168
9202
|
// プレイ画面フレーム(白枠)
|
|
@@ -9177,7 +9211,6 @@ const openDisplayPreview = () => {
|
|
|
9177
9211
|
x: frameX, y: frameY, w: playW, h: playH,
|
|
9178
9212
|
background: `#111111`,
|
|
9179
9213
|
border: `1px solid #444444`,
|
|
9180
|
-
overflow: `hidden`,
|
|
9181
9214
|
boxSizing: `border-box`,
|
|
9182
9215
|
transform: `scale(${rate})`,
|
|
9183
9216
|
});
|
|
@@ -9273,13 +9306,13 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
|
|
|
9273
9306
|
const fX0 = Math.round(_playW / 2 - 120) + (g_diffObj.frzJdgX ?? 0);
|
|
9274
9307
|
const fY0 = Math.round((_playH + (g_posObj?.stepYR ?? 0)) / 2 + 10) + (g_diffObj.frzJdgY ?? 0);
|
|
9275
9308
|
|
|
9276
|
-
const jdgInitX = g_previewPos.
|
|
9277
|
-
const jdgInitY = g_previewPos.
|
|
9278
|
-
const jdgFInitX = g_previewPos.
|
|
9279
|
-
const jdgFInitY = g_previewPos.
|
|
9309
|
+
const jdgInitX = g_previewPos.arrowJdg.x ?? jX0;
|
|
9310
|
+
const jdgInitY = g_previewPos.arrowJdg.y ?? jY0;
|
|
9311
|
+
const jdgFInitX = g_previewPos.frzJdg.x ?? fX0;
|
|
9312
|
+
const jdgFInitY = g_previewPos.frzJdg.y ?? fY0;
|
|
9280
9313
|
|
|
9281
9314
|
// 通常判定グループ
|
|
9282
|
-
buildDraggableJudgGroup(_frame, `
|
|
9315
|
+
buildDraggableJudgGroup(_frame, `arrowJdg`, jdgInitX, jdgInitY, _playW, _playH, {
|
|
9283
9316
|
charaText: d.judgment === C_FLG_ON ? g_lblNameObj.j_ii : ``,
|
|
9284
9317
|
comboText: d.judgment === C_FLG_ON ? `5 Combo!!` : ``,
|
|
9285
9318
|
diffText: `Fast 3 Frames`,
|
|
@@ -9287,7 +9320,7 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
|
|
|
9287
9320
|
});
|
|
9288
9321
|
|
|
9289
9322
|
// フリーズ判定グループ
|
|
9290
|
-
buildDraggableJudgGroup(_frame, `
|
|
9323
|
+
buildDraggableJudgGroup(_frame, `frzJdg`, jdgFInitX, jdgFInitY, _playW, _playH, {
|
|
9291
9324
|
charaText: d.judgment === C_FLG_ON ? g_lblNameObj.j_kita : ``,
|
|
9292
9325
|
comboText: d.judgment === C_FLG_ON ? `5 Combo!!` : ``,
|
|
9293
9326
|
diffText: `Fast 2 Frames`,
|
|
@@ -9330,7 +9363,7 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
|
|
|
9330
9363
|
{ color: `#99ff66`, cnt: `0` },
|
|
9331
9364
|
{ color: `#ffffff`, cnt: `5` },
|
|
9332
9365
|
];
|
|
9333
|
-
const sx = _playW - 110;
|
|
9366
|
+
const sx = _playW - 110 + g_headerObj.scAreaWidth;
|
|
9334
9367
|
scoreItems.forEach((item, i) => {
|
|
9335
9368
|
_frame.appendChild(
|
|
9336
9369
|
createDivCss2Label(`previewScore${i}`, item.cnt || ``, {
|
|
@@ -9377,6 +9410,28 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
|
|
|
9377
9410
|
)
|
|
9378
9411
|
}
|
|
9379
9412
|
|
|
9413
|
+
// ============================================================
|
|
9414
|
+
// ショートカット表示
|
|
9415
|
+
// ============================================================
|
|
9416
|
+
const scGroup = createEmptySprite(_frame, `previewScGroup`, {
|
|
9417
|
+
x: g_sWidth + g_headerObj.scAreaWidth - 85 + g_diffObj.shortcutX,
|
|
9418
|
+
y: _playH - 65 + g_diffObj.shortcutY, w: 80, h: 65, pointerEvents: C_DIS_AUTO,
|
|
9419
|
+
});
|
|
9420
|
+
multiAppend(scGroup,
|
|
9421
|
+
createDivCss2Label(`lblRetry`, `[${g_lblNameObj.l_retry}]`, { ...g_lblPosObj.lblMainScHeader, x: 0, y: 0 }),
|
|
9422
|
+
createDivCss2Label(`lblRetrySc`, g_kCd[g_headerObj.keyRetry],
|
|
9423
|
+
{ ...g_lblPosObj.lblMainScKey, x: 0, y: 15, fontWeight: g_headerObj.keyRetry === C_KEY_RETRY ? `normal` : `bold` }),
|
|
9424
|
+
createDivCss2Label(`lblTitleBack`, `[${g_lblNameObj.l_titleBack}]`, { ...g_lblPosObj.lblMainScHeader, x: 0, y: 35 }),
|
|
9425
|
+
createDivCss2Label(`lblTitleBackSc`, g_isMac ? `Shift+${g_kCd[g_headerObj.keyRetry]}` : g_kCd[g_headerObj.keyTitleBack],
|
|
9426
|
+
{ ...g_lblPosObj.lblMainScKey, x: 0, y: 50, fontWeight: g_headerObj.keyTitleBack === C_KEY_TITLEBACK ? `normal` : `bold` }),
|
|
9427
|
+
);
|
|
9428
|
+
const scConfig = {
|
|
9429
|
+
toastTitle: g_lblNameObj.shortcutUpdate,
|
|
9430
|
+
getStdX: (pw) => g_sWidth + g_headerObj.scAreaWidth - 85,
|
|
9431
|
+
getStdY: (ph, syr) => _playH - 65,
|
|
9432
|
+
};
|
|
9433
|
+
makeElementDraggable(scGroup, `shortcut`, _playW, _playH, { w: 80, h: 65 }, scConfig);
|
|
9434
|
+
|
|
9380
9435
|
// ユーザカスタムイベント(プレビュー表示用)
|
|
9381
9436
|
safeExecuteCustomHooks(`g_customJsObj.displayPreview`, g_customJsObj.displayPreview, _frame, _playW, _playH);
|
|
9382
9437
|
};
|
|
@@ -9384,18 +9439,31 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
|
|
|
9384
9439
|
/**
|
|
9385
9440
|
* 要素をドラッグ可能にする(汎用ユーティリティ)
|
|
9386
9441
|
* @param {HTMLElement} _target ドラッグ対象の要素
|
|
9442
|
+
* @param {string} _key 座標保存用のキー(g_previewPosオブジェクトのプロパティ名)
|
|
9387
9443
|
* @param {number} _playW 制限範囲の幅
|
|
9388
9444
|
* @param {number} _playH 制限範囲の高さ
|
|
9389
|
-
* @param {object} _bounds 要素自体のサイズ { w, h } (はみ出し防止用)
|
|
9390
|
-
* @param {
|
|
9445
|
+
* @param {object} _bounds 要素自体のサイズ { w, h, scale } (はみ出し防止用)
|
|
9446
|
+
* @param {object} _config 座標反映ルールオブジェクト
|
|
9391
9447
|
*/
|
|
9392
|
-
const makeElementDraggable = (_target, _playW, _playH, _bounds,
|
|
9448
|
+
const makeElementDraggable = (_target, _key, _playW, _playH, _bounds, _config) => {
|
|
9393
9449
|
let dragging = false;
|
|
9394
9450
|
let dragStartX = 0, dragStartY = 0;
|
|
9395
9451
|
let elemStartX = 0, elemStartY = 0;
|
|
9396
9452
|
|
|
9397
9453
|
const boundsW = _bounds?.w ?? _target.offsetWidth ?? 0;
|
|
9398
9454
|
const boundsH = _bounds?.h ?? _target.offsetHeight ?? 0;
|
|
9455
|
+
const scale = _bounds?.scale ?? 0.8;
|
|
9456
|
+
|
|
9457
|
+
// ドラッグハンドル(薄い枠)を作成
|
|
9458
|
+
const handleId = _target.id ? `handle_${_target.id}` : `dragHandle_${Math.random().toString(36).slice(2, 9)}`;
|
|
9459
|
+
_target.style.cursor = `grab`;
|
|
9460
|
+
|
|
9461
|
+
createEmptySprite(_target, handleId, {
|
|
9462
|
+
x: 0, y: 0, w: boundsW, h: boundsH,
|
|
9463
|
+
border: `1px dashed rgba(255,255,255,0.3)`,
|
|
9464
|
+
boxSizing: `border-box`, borderRadius: `2px`,
|
|
9465
|
+
background: `rgba(255,255,255,0.04)`,
|
|
9466
|
+
});
|
|
9399
9467
|
|
|
9400
9468
|
const keyDown = addPreviewListener(_target, `pointerdown`, _evt => {
|
|
9401
9469
|
dragging = true;
|
|
@@ -9410,11 +9478,18 @@ const makeElementDraggable = (_target, _playW, _playH, _bounds, _onDragEnd) => {
|
|
|
9410
9478
|
|
|
9411
9479
|
const keyMove = addPreviewListener(_target, `pointermove`, _evt => {
|
|
9412
9480
|
if (!dragging) return;
|
|
9413
|
-
const dx = _evt.clientX - dragStartX;
|
|
9414
|
-
const dy = _evt.clientY - dragStartY;
|
|
9415
9481
|
|
|
9416
|
-
//
|
|
9417
|
-
const
|
|
9482
|
+
// 1. マウスの実際の移動量を計算
|
|
9483
|
+
const mouseDx = _evt.clientX - dragStartX;
|
|
9484
|
+
const mouseDy = _evt.clientY - dragStartY;
|
|
9485
|
+
|
|
9486
|
+
// 2. 【最重要】スケール逆算して、縮小空間内の移動量に変換
|
|
9487
|
+
const dx = mouseDx / scale;
|
|
9488
|
+
const dy = mouseDy / scale;
|
|
9489
|
+
|
|
9490
|
+
// 3. 境界値制限
|
|
9491
|
+
const minX = g_headerObj.playingLayout ? -g_headerObj.scAreaWidth : 0;
|
|
9492
|
+
const newX = Math.max(minX, Math.min(_playW + g_headerObj.scAreaWidth - boundsW, elemStartX + dx));
|
|
9418
9493
|
const newY = Math.max(0, Math.min(_playH - boundsH, elemStartY + dy));
|
|
9419
9494
|
|
|
9420
9495
|
_target.style.left = wUnit(newX);
|
|
@@ -9430,11 +9505,13 @@ const makeElementDraggable = (_target, _playW, _playH, _bounds, _onDragEnd) => {
|
|
|
9430
9505
|
const finalX = parseInt(_target.style.left, 10) || 0;
|
|
9431
9506
|
const finalY = parseInt(_target.style.top, 10) || 0;
|
|
9432
9507
|
|
|
9433
|
-
|
|
9434
|
-
|
|
9435
|
-
|
|
9508
|
+
if (g_previewPos[_key]) {
|
|
9509
|
+
g_previewPos[_key].x = finalX;
|
|
9510
|
+
g_previewPos[_key].y = finalY;
|
|
9511
|
+
}
|
|
9512
|
+
if (_config) {
|
|
9513
|
+
applyElementPositionToGame(finalX, finalY, _config, _key);
|
|
9436
9514
|
}
|
|
9437
|
-
|
|
9438
9515
|
_evt.stopPropagation();
|
|
9439
9516
|
});
|
|
9440
9517
|
|
|
@@ -9452,7 +9529,7 @@ const makeElementDraggable = (_target, _playW, _playH, _bounds, _onDragEnd) => {
|
|
|
9452
9529
|
/**
|
|
9453
9530
|
* ドラッグ可能な判定グループを生成する
|
|
9454
9531
|
* @param {HTMLElement} _parent 親要素
|
|
9455
|
-
* @param {string} _groupId `
|
|
9532
|
+
* @param {string} _groupId `arrowJdg` または `frzJdg`
|
|
9456
9533
|
* @param {number} _initX 初期X座標(frame相対)
|
|
9457
9534
|
* @param {number} _initY 初期Y座標(frame相対)
|
|
9458
9535
|
* @param {number} _playW プレイ幅
|
|
@@ -9464,7 +9541,7 @@ const buildDraggableJudgGroup = (_parent, _groupId, _initX, _initY, _playW, _pla
|
|
|
9464
9541
|
const groupH = 51;
|
|
9465
9542
|
|
|
9466
9543
|
const group = createEmptySprite(_parent, `previewGrp_${_groupId}`, {
|
|
9467
|
-
x: _initX, y: _initY, w: groupW, h: groupH,
|
|
9544
|
+
x: _initX, y: _initY, w: groupW, h: groupH, pointerEvents: C_DIS_AUTO,
|
|
9468
9545
|
});
|
|
9469
9546
|
|
|
9470
9547
|
// 内包要素の生成 (省略:元のコードの multiAppend 部分と同一)
|
|
@@ -9487,48 +9564,24 @@ const buildDraggableJudgGroup = (_parent, _groupId, _initX, _initY, _playW, _pla
|
|
|
9487
9564
|
}),
|
|
9488
9565
|
);
|
|
9489
9566
|
|
|
9490
|
-
// ドラッグハンドル(薄い枠)
|
|
9491
|
-
createEmptySprite(group, `lblHandle_${_groupId}`, {
|
|
9492
|
-
x: 0, y: 0, w: groupW, h: groupH, border: `1px dashed rgba(255,255,255,0.3)`,
|
|
9493
|
-
boxSizing: `border-box`, borderRadius: `2px`, background: `rgba(255,255,255,0.04)`,
|
|
9494
|
-
});
|
|
9495
|
-
|
|
9496
9567
|
// ============================================================
|
|
9497
9568
|
// 判定グループ固有の「座標反映ルール」を定義
|
|
9498
9569
|
// ============================================================
|
|
9499
9570
|
const configMap = {
|
|
9500
|
-
|
|
9571
|
+
arrowJdg: {
|
|
9501
9572
|
toastTitle: g_lblNameObj.arrowJdgUpdate,
|
|
9502
9573
|
getStdX: (pw) => Math.round(pw / 2 - 220),
|
|
9503
9574
|
getStdY: (ph, syr) => Math.round((ph + syr) / 2 - 60),
|
|
9504
|
-
saveCallback: (dx, dy) => {
|
|
9505
|
-
g_diffObj.arrowJdgX = dx;
|
|
9506
|
-
g_diffObj.arrowJdgY = dy;
|
|
9507
|
-
}
|
|
9508
9575
|
},
|
|
9509
|
-
|
|
9576
|
+
frzJdg: {
|
|
9510
9577
|
toastTitle: g_lblNameObj.frzJdgUpdate,
|
|
9511
9578
|
getStdX: (pw) => Math.round(pw / 2 - 120),
|
|
9512
9579
|
getStdY: (ph, syr) => Math.round((ph + syr) / 2 + 10),
|
|
9513
|
-
saveCallback: (dx, dy) => {
|
|
9514
|
-
g_diffObj.frzJdgX = dx;
|
|
9515
|
-
g_diffObj.frzJdgY = dy;
|
|
9516
|
-
}
|
|
9517
9580
|
}
|
|
9518
9581
|
};
|
|
9519
9582
|
|
|
9520
|
-
//
|
|
9521
|
-
makeElementDraggable(group, _playW, _playH, { w: groupW, h: groupH },
|
|
9522
|
-
// グローバルなプレビュー座標を更新
|
|
9523
|
-
g_previewPos[_groupId].x = finalX;
|
|
9524
|
-
g_previewPos[_groupId].y = finalY;
|
|
9525
|
-
|
|
9526
|
-
// 設定マップから該当するルールを適用して保存
|
|
9527
|
-
const currentConfig = configMap[_groupId];
|
|
9528
|
-
if (currentConfig) {
|
|
9529
|
-
applyElementPositionToGame(finalX, finalY, currentConfig);
|
|
9530
|
-
}
|
|
9531
|
-
});
|
|
9583
|
+
// 汎用ドラッグ及びドラッグ枠作成、差分適用処理
|
|
9584
|
+
makeElementDraggable(group, _groupId, _playW, _playH, { w: groupW, h: groupH }, configMap[_groupId]);
|
|
9532
9585
|
};
|
|
9533
9586
|
|
|
9534
9587
|
/**
|
|
@@ -9536,8 +9589,9 @@ const buildDraggableJudgGroup = (_parent, _groupId, _initX, _initY, _playW, _pla
|
|
|
9536
9589
|
* @param {number} _x 確定したframe相対X
|
|
9537
9590
|
* @param {number} _y 確定したframe相対Y
|
|
9538
9591
|
* @param {object} _config 反映用の設定オブジェクト
|
|
9592
|
+
* @param {string} _key 保存用キー(g_diffObjのプロパティ名の接頭辞)
|
|
9539
9593
|
*/
|
|
9540
|
-
const applyElementPositionToGame = (_x, _y, _config) => {
|
|
9594
|
+
const applyElementPositionToGame = (_x, _y, _config, _key) => {
|
|
9541
9595
|
const playW = g_headerObj.playingWidth || g_sWidth;
|
|
9542
9596
|
const playH = g_headerObj.playingHeight || g_sHeight;
|
|
9543
9597
|
const stepYR = g_posObj?.stepYR ?? 0;
|
|
@@ -9551,7 +9605,10 @@ const applyElementPositionToGame = (_x, _y, _config) => {
|
|
|
9551
9605
|
const diffY = _y - stdY;
|
|
9552
9606
|
|
|
9553
9607
|
// 3. 指定された保存先にオフセットを格納
|
|
9554
|
-
|
|
9608
|
+
g_diffObj[`${_key}X`] = diffX;
|
|
9609
|
+
g_diffObj[`${_key}Y`] = diffY;
|
|
9610
|
+
g_localStorage[`${_key}X`] = diffX;
|
|
9611
|
+
g_localStorage[`${_key}Y`] = diffY;
|
|
9555
9612
|
|
|
9556
9613
|
// 4. トースト表示 (通知が不要な要素なら省略可能にする)
|
|
9557
9614
|
if (_config.toastTitle) {
|
|
@@ -13897,6 +13954,9 @@ const getArrowSettings = () => {
|
|
|
13897
13954
|
if (g_headerObj.scAreaWidth === 0 && (g_headerObj.keyRetry !== g_headerObj.keyRetryDef2 || g_headerObj.keyTitleBack !== g_headerObj.keyTitleBackDef2)) {
|
|
13898
13955
|
g_workObj.nonDefaultSc = false;
|
|
13899
13956
|
}
|
|
13957
|
+
if (g_diffObj.shortcutX !== 0 || g_diffObj.shortcutY !== 0) {
|
|
13958
|
+
g_workObj.nonDefaultSc = true;
|
|
13959
|
+
}
|
|
13900
13960
|
|
|
13901
13961
|
g_workObj.backX = (g_workObj.nonDefaultSc && g_headerObj.playingLayout ? g_headerObj.scAreaWidth : 0);
|
|
13902
13962
|
g_workObj.playingX = g_headerObj.playingX + g_workObj.backX;
|
|
@@ -14372,12 +14432,28 @@ const mainInit = () => {
|
|
|
14372
14432
|
|
|
14373
14433
|
if (g_workObj.nonDefaultSc) {
|
|
14374
14434
|
multiAppend(infoSprite,
|
|
14375
|
-
createDivCss2Label(`lblRetry`, `[${g_lblNameObj.l_retry}]`, {
|
|
14376
|
-
|
|
14377
|
-
|
|
14378
|
-
|
|
14379
|
-
|
|
14380
|
-
|
|
14435
|
+
createDivCss2Label(`lblRetry`, `[${g_lblNameObj.l_retry}]`, {
|
|
14436
|
+
...g_lblPosObj.lblMainScHeader,
|
|
14437
|
+
x: g_sWidth + g_headerObj.scAreaWidth - 85 + g_diffObj.shortcutX,
|
|
14438
|
+
y: g_headerObj.playingHeight - 65 + g_diffObj.shortcutY,
|
|
14439
|
+
}),
|
|
14440
|
+
createDivCss2Label(`lblRetrySc`, g_kCd[g_headerObj.keyRetry], {
|
|
14441
|
+
...g_lblPosObj.lblMainScKey,
|
|
14442
|
+
x: g_sWidth + g_headerObj.scAreaWidth - 85 + g_diffObj.shortcutX,
|
|
14443
|
+
y: g_headerObj.playingHeight - 50 + g_diffObj.shortcutY,
|
|
14444
|
+
fontWeight: g_headerObj.keyRetry === C_KEY_RETRY ? `normal` : `bold`,
|
|
14445
|
+
}),
|
|
14446
|
+
createDivCss2Label(`lblTitleBack`, `[${g_lblNameObj.l_titleBack}]`, {
|
|
14447
|
+
...g_lblPosObj.lblMainScHeader,
|
|
14448
|
+
x: g_sWidth + g_headerObj.scAreaWidth - 85 + g_diffObj.shortcutX,
|
|
14449
|
+
y: g_headerObj.playingHeight - 35 + g_diffObj.shortcutY,
|
|
14450
|
+
}),
|
|
14451
|
+
createDivCss2Label(`lblTitleBackSc`, g_isMac ? `Shift+${g_kCd[g_headerObj.keyRetry]}` : g_kCd[g_headerObj.keyTitleBack], {
|
|
14452
|
+
...g_lblPosObj.lblMainScKey,
|
|
14453
|
+
x: g_sWidth + g_headerObj.scAreaWidth - 85 + g_diffObj.shortcutX,
|
|
14454
|
+
y: g_headerObj.playingHeight - 20 + g_diffObj.shortcutY,
|
|
14455
|
+
fontWeight: g_headerObj.keyTitleBack === C_KEY_TITLEBACK ? `normal` : `bold`,
|
|
14456
|
+
}),
|
|
14381
14457
|
);
|
|
14382
14458
|
}
|
|
14383
14459
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2019/11/19
|
|
8
|
-
* Revised : 2026/05/
|
|
8
|
+
* Revised : 2026/05/31 (v48.3.0)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -543,9 +543,15 @@ const updateWindowSiz = () => {
|
|
|
543
543
|
x: g_btnX() + Math.floor((g_btnWidth() - 80) / 2), y: 3, w: 80, h: 18, siz: 11,
|
|
544
544
|
title: g_msgObj.displayPreview,
|
|
545
545
|
},
|
|
546
|
+
btnDisplayReset: {
|
|
547
|
+
x: g_btnX() + g_btnWidth() - 80, y: 3, w: 80, h: 18, siz: 11,
|
|
548
|
+
},
|
|
546
549
|
lblDisplayPreviewMsg: {
|
|
547
550
|
x: g_btnX(), y: g_sHeight - 40, w: g_btnWidth(), h: 20, siz: 14,
|
|
548
551
|
},
|
|
552
|
+
lblDisplayPreviewMsg2: {
|
|
553
|
+
x: g_btnX(), y: g_sHeight - 25, w: g_btnWidth(), h: 20, siz: 14,
|
|
554
|
+
},
|
|
549
555
|
previewScoreDisabled: {
|
|
550
556
|
x: g_headerObj.playingWidth - 80, y: 20, w: 70, h: 200,
|
|
551
557
|
},
|
|
@@ -1328,7 +1334,8 @@ const g_settings = {
|
|
|
1328
1334
|
customKey: 0,
|
|
1329
1335
|
others: 0,
|
|
1330
1336
|
},
|
|
1331
|
-
environments: [`adjustment`, `volume`, `colorType`, `appearance`, `opacity`, `hitPosition
|
|
1337
|
+
environments: [`adjustment`, `volume`, `colorType`, `appearance`, `opacity`, `hitPosition`,
|
|
1338
|
+
`arrowJdgX`, `arrowJdgY`, `frzJdgX`, `frzJdgY`, `shortcutX`, `shortcutY`],
|
|
1332
1339
|
keyStorages: [`reverse`, `keyCtrl`, `keyCtrlPtn`, `shuffle`, `color`, `stepRtn`],
|
|
1333
1340
|
colorStorages: [`setColor`, `setShadowColor`, `frzColor`, `frzShadowColor`],
|
|
1334
1341
|
|
|
@@ -2331,6 +2338,17 @@ const g_diffObj = {
|
|
|
2331
2338
|
frzJdgX: 0,
|
|
2332
2339
|
arrowJdgY: 0,
|
|
2333
2340
|
frzJdgY: 0,
|
|
2341
|
+
shortcutX: 0,
|
|
2342
|
+
shortcutY: 0,
|
|
2343
|
+
};
|
|
2344
|
+
|
|
2345
|
+
const g_diffInitObj = {
|
|
2346
|
+
arrowJdgX: 0,
|
|
2347
|
+
frzJdgX: 0,
|
|
2348
|
+
arrowJdgY: 0,
|
|
2349
|
+
frzJdgY: 0,
|
|
2350
|
+
shortcutX: 0,
|
|
2351
|
+
shortcutY: 0,
|
|
2334
2352
|
};
|
|
2335
2353
|
|
|
2336
2354
|
// キーコンフィグカーソル
|
|
@@ -2982,6 +3000,7 @@ const g_shortcutObj = {
|
|
|
2982
3000
|
},
|
|
2983
3001
|
displayPreview: {
|
|
2984
3002
|
KeyP: { id: `btnDisplayPreview2` },
|
|
3003
|
+
KeyR: { id: `btnDisplayReset` },
|
|
2985
3004
|
Escape: { id: `btnBack` },
|
|
2986
3005
|
Space: { id: `btnKeyConfig` },
|
|
2987
3006
|
Enter: { id: `btnPlay` },
|
|
@@ -4785,9 +4804,11 @@ const g_lang_lblNameObj = {
|
|
|
4785
4804
|
transKeyDesc: `別キーモードではキーコンフィグ、ColorType等は保存されません`,
|
|
4786
4805
|
colorTypeDesc: `現在のColorTypeの設定では、色変化(Display:Color)は自動的にOFFになります`,
|
|
4787
4806
|
sdShortcutDesc: `Hid+/Sud+時ショートカット:「pageUp」カバーを上へ / 「pageDown」下へ`,
|
|
4788
|
-
displayPreviewDesc:
|
|
4807
|
+
displayPreviewDesc: `判定キャラクタ部分、ショートカット表示はドラッグで移動するとその位置に補正されます`,
|
|
4808
|
+
displayPreviewDesc2: `枠外への移動はショートカットがデフォルトと異なるか、位置が通常と異なる場合のみ有効です`,
|
|
4789
4809
|
arrowJdgUpdate: `矢印判定の座標を更新`,
|
|
4790
4810
|
frzJdgUpdate: `フリーズアロー判定の座標を更新`,
|
|
4811
|
+
shortcutUpdate: `ショートカット表示の座標を更新`,
|
|
4791
4812
|
resultImageDesc: `画像を右クリックしてコピーできます`,
|
|
4792
4813
|
|
|
4793
4814
|
s_level: `Level`,
|
|
@@ -4845,9 +4866,11 @@ const g_lang_lblNameObj = {
|
|
|
4845
4866
|
transKeyDesc: `Key config, Color type, etc. are not saved in another key mode`,
|
|
4846
4867
|
colorTypeDesc: `With the current ColorType setting, color change (Display:Color) will be automatically turned OFF.`,
|
|
4847
4868
|
sdShortcutDesc: `When "Hidden+" or "Sudden+" select, "pageUp" cover up / "pageDown" cover down`,
|
|
4848
|
-
displayPreviewDesc: `If you drag the judgment character section, it will be adjusted to that position.`,
|
|
4869
|
+
displayPreviewDesc: `If you drag the judgment character section or shortcut display, it will be adjusted to that position.`,
|
|
4870
|
+
displayPreviewDesc2: `Moving outside the frame is only effective when the shortcut display position differs from the default.`,
|
|
4849
4871
|
arrowJdgUpdate: `Update the coordinates (arrow)`,
|
|
4850
4872
|
frzJdgUpdate: `Update the coordinates (freeze)`,
|
|
4873
|
+
shortcutUpdate: `Update the coordinates (shortcut)`,
|
|
4851
4874
|
resultImageDesc: `You can copy the image by right-clicking on it.`,
|
|
4852
4875
|
|
|
4853
4876
|
s_level: `Level`,
|
|
@@ -4911,7 +4934,7 @@ const g_lang_msgObj = {
|
|
|
4911
4934
|
github: `Dancing☆Onigiri (CW Edition)のGitHubページへ移動します。`,
|
|
4912
4935
|
security: `Dancing☆Onigiri (CW Edition)のサポート情報ページへ移動します。`,
|
|
4913
4936
|
|
|
4914
|
-
environment:
|
|
4937
|
+
environment: `以下の設定を初期化します。\n - Adjustment, Volume, ColorType, Appearance, Opacity, HitPosition, 判定キャラクタ位置, ショートカット表示位置`,
|
|
4915
4938
|
highscores: `全譜面のハイスコアを初期化します。\n個別に初期化したい場合はSettings画面より行ってください。`,
|
|
4916
4939
|
customKey: `カスタムキーに関する全ての保存データを消去します。\n下記のKeyDataから個別に消去可能できないときに使用してください。`,
|
|
4917
4940
|
others: `標準以外に関する保存データを消去します。`,
|
|
@@ -4993,6 +5016,7 @@ const g_lang_msgObj = {
|
|
|
4993
5016
|
opacity: `判定キャラクタ、コンボ数、Fast/Slowの透明度を設定します。`,
|
|
4994
5017
|
hitPosition: `判定位置にズレを感じる場合、\n数値を変えることで判定の中央位置を1px単位(プラス:手前, マイナス:奥側)で調整することができます。\n早押し・遅押し傾向にある場合に使用します。`,
|
|
4995
5018
|
displayPreview: `プレイ画面上のオブジェクトの表示状態をプレビューします。\n判定キャラクタ部分をドラッグで移動するとその位置に補正されます。`,
|
|
5019
|
+
displayPreviewResetConfirm: `プレイ画面上のオブジェクトの位置を初期状態に戻します。よろしいですか?`,
|
|
4996
5020
|
|
|
4997
5021
|
colorType: `矢印・フリーズアローの配色セットをあらかじめ定義されたリストから選択できます。\nType1~4選択時は色変化が自動でOFFになり、カラーピッカーから好きな色に変更できます。\n[Type0] グラデーション切替, [Type1~4] デフォルトパターン`,
|
|
4998
5022
|
imgType: `矢印・フリーズアローなどのオブジェクトの見た目を変更します。`,
|
|
@@ -5016,7 +5040,7 @@ const g_lang_msgObj = {
|
|
|
5016
5040
|
github: `Go to the GitHub page of Dancing Onigiri "CW Edition".`,
|
|
5017
5041
|
security: `Go to the support information page for Dancing Onigiri "CW Edition".`,
|
|
5018
5042
|
|
|
5019
|
-
environment: `Initialize
|
|
5043
|
+
environment: `Initialize settings below:\n - Adjustment, Volume, ColorType, Appearance, Opacity, HitPosition, judgment character positions and shortcut display position.`,
|
|
5020
5044
|
highscores: `Initializes the high score of all charts. \nIf you want to initialize each chart individually, \nplease do so from the Highscore view in the Settings screen.`,
|
|
5021
5045
|
customKey: `Delete stored data related to all custom keymodes. \nUse this option when you cannot delete individual KeyData from the following KeyData.`,
|
|
5022
5046
|
others: `Delete non-standard stored data.`,
|
|
@@ -5097,6 +5121,7 @@ const g_lang_msgObj = {
|
|
|
5097
5121
|
opacity: `Set the transparency of some objects such as judgment, combo counts, fast and slow`,
|
|
5098
5122
|
hitPosition: `If you feel a discrepancy in the judgment position, \nyou can adjust the center position of the judgment in 1px increments \n (plus: in front, minus: at the back) by changing the numerical value. \nUse this function when there is a tendency to push too fast or too slow.`,
|
|
5099
5123
|
displayPreview: `Preview the display status of objects on the play screen.\nDragging the judgment character section will adjust it to that position.`,
|
|
5124
|
+
displayPreviewResetConfirm: `Reset the position of objects on the play screen to the initial state. Is it OK?`,
|
|
5100
5125
|
|
|
5101
5126
|
colorType: `Change the color scheme set for arrows and freeze-arrows from the predefined set.\nWhen Type1 to 4 is selected, color change is automatically turned off and can be changed to any color from the color picker.\n[Type0] Switch the sequences color gradations, [Type1~4] default color scheme`,
|
|
5102
5127
|
imgType: `Change the appearance of sequences.`,
|