danoniplus 48.2.0 → 48.4.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 +245 -91
- package/js/lib/danoni_constants.js +46 -12
- 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/
|
|
7
|
+
* Revised : 2026/06/02
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 48.
|
|
12
|
-
const g_revisedDate = `2026/
|
|
11
|
+
const g_version = `Ver 48.4.0`;
|
|
12
|
+
const g_revisedDate = `2026/06/02`;
|
|
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
|
/**
|
|
@@ -9152,7 +9171,7 @@ const openDisplayPreview = () => {
|
|
|
9152
9171
|
// オーバーレイ本体
|
|
9153
9172
|
// ============================================================
|
|
9154
9173
|
const overlay = createEmptySprite(divRoot, `displayPreviewOverlay`, {
|
|
9155
|
-
w: g_sWidth, h: g_sHeight, background: g_headerObj.baseBrightFlg ? `#
|
|
9174
|
+
w: g_sWidth, h: g_sHeight, background: g_headerObj.baseBrightFlg ? `#eeeeeeee` : `#111111dd`, pointerEvents: C_DIS_AUTO,
|
|
9156
9175
|
});
|
|
9157
9176
|
g_previewRoot = overlay;
|
|
9158
9177
|
multiAppend(overlay,
|
|
@@ -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
|
// プレイ画面フレーム(白枠)
|
|
@@ -9175,9 +9209,8 @@ const openDisplayPreview = () => {
|
|
|
9175
9209
|
|
|
9176
9210
|
const frame = createEmptySprite(overlay, `previewFrame`, {
|
|
9177
9211
|
x: frameX, y: frameY, w: playW, h: playH,
|
|
9178
|
-
background: `#111111`,
|
|
9212
|
+
background: g_headerObj.baseBrightFlg ? `#eeeeee` : `#111111`,
|
|
9179
9213
|
border: `1px solid #444444`,
|
|
9180
|
-
overflow: `hidden`,
|
|
9181
9214
|
boxSizing: `border-box`,
|
|
9182
9215
|
transform: `scale(${rate})`,
|
|
9183
9216
|
});
|
|
@@ -9233,6 +9266,13 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
|
|
|
9233
9266
|
// ============================================================
|
|
9234
9267
|
const stepY = g_posObj.stepY ?? C_STEP_Y;
|
|
9235
9268
|
const revStepY = g_posObj.reverseStepY;
|
|
9269
|
+
const hitPos = g_stateObj.hitPosition ?? 0;
|
|
9270
|
+
|
|
9271
|
+
// 簡易ステップゾーン(7レーン分)
|
|
9272
|
+
const laneCount = 7;
|
|
9273
|
+
const laneW = 50;
|
|
9274
|
+
const totalW = laneCount * laneW;
|
|
9275
|
+
const startX = Math.round((_playW - totalW) / 2);
|
|
9236
9276
|
|
|
9237
9277
|
if (d.stepzone === C_FLG_OFF) {
|
|
9238
9278
|
multiAppend(_frame,
|
|
@@ -9240,12 +9280,6 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
|
|
|
9240
9280
|
disableBox(`StepZone_Rev`, { x: Math.round(_playW / 2 - 200), y: C_STEP_Y + revStepY, w: 400, h: 50 }),
|
|
9241
9281
|
);
|
|
9242
9282
|
} else {
|
|
9243
|
-
// 簡易ステップゾーン(7レーン分)
|
|
9244
|
-
const laneCount = 7;
|
|
9245
|
-
const laneW = 50;
|
|
9246
|
-
const totalW = laneCount * laneW;
|
|
9247
|
-
const startX = Math.round((_playW - totalW) / 2);
|
|
9248
|
-
|
|
9249
9283
|
for (let j = 0; j < laneCount; j++) {
|
|
9250
9284
|
createEmptySprite(_frame, `previewStep${j}`, {
|
|
9251
9285
|
x: startX + j * laneW + 2, y: stepY + 2, w: laneW - 4, h: laneW - 4,
|
|
@@ -9260,6 +9294,45 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
|
|
|
9260
9294
|
}
|
|
9261
9295
|
}
|
|
9262
9296
|
|
|
9297
|
+
// ============================================================
|
|
9298
|
+
// HitPosition を視覚化する判定基準ライン
|
|
9299
|
+
// ============================================================
|
|
9300
|
+
// 通常譜面用の判定ライン(赤または目立つ色で、レーン幅全体をカバー)
|
|
9301
|
+
// 上から下に流れる場合、hitPosがプラスなら「ステップゾーンより下」にラインが来る
|
|
9302
|
+
const lineNormal = createEmptySprite(_frame, `previewHitPosLine`, {
|
|
9303
|
+
x: startX,
|
|
9304
|
+
y: stepY + Math.round(laneW / 2) + hitPos, // ステップゾーンの中心 + hitPos
|
|
9305
|
+
w: totalW,
|
|
9306
|
+
h: 2, // 2pxの横線
|
|
9307
|
+
background: `#33aaff`,
|
|
9308
|
+
boxShadow: `0 0 4px #33aaff`, // ネオンっぽく光らせて目立たせる
|
|
9309
|
+
});
|
|
9310
|
+
|
|
9311
|
+
// 青いラインの右端(totalW から10pxほど外側)に数値を表示
|
|
9312
|
+
multiAppend(
|
|
9313
|
+
lineNormal,
|
|
9314
|
+
createDivCss2Label(`previewHitPosTitle`, `Hit`, {
|
|
9315
|
+
...g_lblPosObj.previewHitPosText, x: -60, y: -14, align: C_ALIGN_RIGHT,
|
|
9316
|
+
}),
|
|
9317
|
+
createDivCss2Label(`previewHitPosTitle2`, `Position`, {
|
|
9318
|
+
...g_lblPosObj.previewHitPosText, x: -60, y: -2, align: C_ALIGN_RIGHT,
|
|
9319
|
+
}),
|
|
9320
|
+
createDivCss2Label(`previewHitPosText`, `${hitPos > 0 ? '+' : ''}${hitPos}px↑↓`, {
|
|
9321
|
+
...g_lblPosObj.previewHitPosText, x: totalW + 5, y: -8, align: C_ALIGN_LEFT,
|
|
9322
|
+
}),
|
|
9323
|
+
);
|
|
9324
|
+
|
|
9325
|
+
// リバース譜面用の判定ライン
|
|
9326
|
+
// 下から上に流れる場合、hitPosがプラスなら「ステップゾーンより上(座標としてはマイナス)」に来る
|
|
9327
|
+
createEmptySprite(_frame, `previewHitPosLineRev`, {
|
|
9328
|
+
x: startX,
|
|
9329
|
+
y: (C_STEP_Y + revStepY) + Math.round(laneW / 2) - hitPos, // ステップゾーンの中心 - hitPos
|
|
9330
|
+
w: totalW,
|
|
9331
|
+
h: 2,
|
|
9332
|
+
background: `#ffaa00`,
|
|
9333
|
+
boxShadow: `0 0 4px #ffaa00`,
|
|
9334
|
+
});
|
|
9335
|
+
|
|
9263
9336
|
// ============================================================
|
|
9264
9337
|
// 判定エリア(ドラッグ可能)
|
|
9265
9338
|
// ============================================================
|
|
@@ -9273,13 +9346,13 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
|
|
|
9273
9346
|
const fX0 = Math.round(_playW / 2 - 120) + (g_diffObj.frzJdgX ?? 0);
|
|
9274
9347
|
const fY0 = Math.round((_playH + (g_posObj?.stepYR ?? 0)) / 2 + 10) + (g_diffObj.frzJdgY ?? 0);
|
|
9275
9348
|
|
|
9276
|
-
const jdgInitX = g_previewPos.
|
|
9277
|
-
const jdgInitY = g_previewPos.
|
|
9278
|
-
const jdgFInitX = g_previewPos.
|
|
9279
|
-
const jdgFInitY = g_previewPos.
|
|
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;
|
|
9280
9353
|
|
|
9281
9354
|
// 通常判定グループ
|
|
9282
|
-
buildDraggableJudgGroup(_frame, `
|
|
9355
|
+
buildDraggableJudgGroup(_frame, `arrowJdg`, jdgInitX, jdgInitY, _playW, _playH, {
|
|
9283
9356
|
charaText: d.judgment === C_FLG_ON ? g_lblNameObj.j_ii : ``,
|
|
9284
9357
|
comboText: d.judgment === C_FLG_ON ? `5 Combo!!` : ``,
|
|
9285
9358
|
diffText: `Fast 3 Frames`,
|
|
@@ -9287,7 +9360,7 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
|
|
|
9287
9360
|
});
|
|
9288
9361
|
|
|
9289
9362
|
// フリーズ判定グループ
|
|
9290
|
-
buildDraggableJudgGroup(_frame, `
|
|
9363
|
+
buildDraggableJudgGroup(_frame, `frzJdg`, jdgFInitX, jdgFInitY, _playW, _playH, {
|
|
9291
9364
|
charaText: d.judgment === C_FLG_ON ? g_lblNameObj.j_kita : ``,
|
|
9292
9365
|
comboText: d.judgment === C_FLG_ON ? `5 Combo!!` : ``,
|
|
9293
9366
|
diffText: `Fast 2 Frames`,
|
|
@@ -9302,9 +9375,9 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
|
|
|
9302
9375
|
_frame.appendChild(disableBox(`LifeGauge`, g_lblPosObj.previewLifeDisabled));
|
|
9303
9376
|
} else {
|
|
9304
9377
|
multiAppend(_frame,
|
|
9305
|
-
createDivCss2Label(`previewLifeBack`, ``, g_lblPosObj.previewLifeBack),
|
|
9306
|
-
createDivCss2Label(`previewLifeBar`, ``, g_lblPosObj.previewLifeBar),
|
|
9307
|
-
createDivCss2Label(`previewLifeNum`, `700`, g_lblPosObj.previewLifeNum),
|
|
9378
|
+
createDivCss2Label(`previewLifeBack`, ``, g_lblPosObj.previewLifeBack, g_cssObj.life_Background),
|
|
9379
|
+
createDivCss2Label(`previewLifeBar`, ``, g_lblPosObj.previewLifeBar, g_cssObj.life_Cleared),
|
|
9380
|
+
createDivCss2Label(`previewLifeNum`, `700`, g_lblPosObj.previewLifeNum, g_cssObj.life_Cleared),
|
|
9308
9381
|
);
|
|
9309
9382
|
}
|
|
9310
9383
|
|
|
@@ -9319,31 +9392,31 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
|
|
|
9319
9392
|
}
|
|
9320
9393
|
} else {
|
|
9321
9394
|
const scoreItems = [
|
|
9322
|
-
{
|
|
9323
|
-
{
|
|
9324
|
-
{
|
|
9325
|
-
{
|
|
9326
|
-
{
|
|
9327
|
-
{
|
|
9395
|
+
{ name: `ii`, cnt: `5` },
|
|
9396
|
+
{ name: `shakin`, cnt: `0` },
|
|
9397
|
+
{ name: `matari`, cnt: `0` },
|
|
9398
|
+
{ name: `shobon`, cnt: `0` },
|
|
9399
|
+
{ name: `uwan`, cnt: `0` },
|
|
9400
|
+
{ name: `combo`, cnt: `5` },
|
|
9328
9401
|
{},
|
|
9329
|
-
{
|
|
9330
|
-
{
|
|
9331
|
-
{
|
|
9402
|
+
{ name: `kita`, cnt: `5` },
|
|
9403
|
+
{ name: `iknai`, cnt: `0` },
|
|
9404
|
+
{ name: `combo`, cnt: `5` },
|
|
9332
9405
|
];
|
|
9333
|
-
const sx = _playW - 110;
|
|
9406
|
+
const sx = _playW - 110 + g_headerObj.scAreaWidth;
|
|
9334
9407
|
scoreItems.forEach((item, i) => {
|
|
9335
9408
|
_frame.appendChild(
|
|
9336
9409
|
createDivCss2Label(`previewScore${i}`, item.cnt || ``, {
|
|
9337
9410
|
x: sx + 50, y: 20 * (i + 1), w: 50, h: 20,
|
|
9338
|
-
siz: 16,
|
|
9339
|
-
}),
|
|
9411
|
+
siz: 16, align: `right`,
|
|
9412
|
+
}, g_cssObj[`common_${item.name}`]),
|
|
9340
9413
|
);
|
|
9341
9414
|
});
|
|
9342
9415
|
|
|
9343
9416
|
// FrzReturn用ゲージ
|
|
9344
9417
|
if (g_stateObj.frzReturn !== C_FLG_OFF) {
|
|
9345
9418
|
multiAppend(_frame,
|
|
9346
|
-
createDivCss2Label(`previewFrzLifeBack`, ``, g_lblPosObj.previewFrzLifeBack),
|
|
9419
|
+
createDivCss2Label(`previewFrzLifeBack`, ``, g_lblPosObj.previewFrzLifeBack, g_cssObj.life_Background),
|
|
9347
9420
|
createDivCss2Label(`previewFrzLifeBar`, ``, g_lblPosObj.previewFrzLifeBar, g_cssObj.life_frzNormal),
|
|
9348
9421
|
);
|
|
9349
9422
|
}
|
|
@@ -9377,25 +9450,96 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
|
|
|
9377
9450
|
)
|
|
9378
9451
|
}
|
|
9379
9452
|
|
|
9453
|
+
// ============================================================
|
|
9454
|
+
// ショートカット表示
|
|
9455
|
+
// ============================================================
|
|
9456
|
+
const scGroup = createEmptySprite(_frame, `previewScGroup`, {
|
|
9457
|
+
x: g_sWidth + g_headerObj.scAreaWidth - 85 + g_diffObj.shortcutX,
|
|
9458
|
+
y: _playH - 65 + g_diffObj.shortcutY, w: 80, h: 65, pointerEvents: C_DIS_AUTO,
|
|
9459
|
+
});
|
|
9460
|
+
multiAppend(scGroup,
|
|
9461
|
+
createDivCss2Label(`lblRetry`, `[${g_lblNameObj.l_retry}]`, { ...g_lblPosObj.lblMainScHeader, x: 0, y: 0 }),
|
|
9462
|
+
createDivCss2Label(`lblRetrySc`, g_kCd[g_headerObj.keyRetry],
|
|
9463
|
+
{ ...g_lblPosObj.lblMainScKey, x: 0, y: 15, fontWeight: g_headerObj.keyRetry === C_KEY_RETRY ? `normal` : `bold` }),
|
|
9464
|
+
createDivCss2Label(`lblTitleBack`, `[${g_lblNameObj.l_titleBack}]`, { ...g_lblPosObj.lblMainScHeader, x: 0, y: 35 }),
|
|
9465
|
+
createDivCss2Label(`lblTitleBackSc`, g_isMac ? `Shift+${g_kCd[g_headerObj.keyRetry]}` : g_kCd[g_headerObj.keyTitleBack],
|
|
9466
|
+
{ ...g_lblPosObj.lblMainScKey, x: 0, y: 50, fontWeight: g_headerObj.keyTitleBack === C_KEY_TITLEBACK ? `normal` : `bold` }),
|
|
9467
|
+
);
|
|
9468
|
+
const scConfig = {
|
|
9469
|
+
toastTitle: g_lblNameObj.shortcutUpdate,
|
|
9470
|
+
getStdX: (pw) => g_sWidth + g_headerObj.scAreaWidth - 85,
|
|
9471
|
+
getStdY: (ph, syr) => _playH - 65,
|
|
9472
|
+
};
|
|
9473
|
+
makeElementDraggable(scGroup, `shortcut`, _playW, _playH, { w: 80, h: 65 }, scConfig);
|
|
9474
|
+
|
|
9380
9475
|
// ユーザカスタムイベント(プレビュー表示用)
|
|
9381
9476
|
safeExecuteCustomHooks(`g_customJsObj.displayPreview`, g_customJsObj.displayPreview, _frame, _playW, _playH);
|
|
9382
9477
|
};
|
|
9383
9478
|
|
|
9479
|
+
/**
|
|
9480
|
+
* プレビューが表示されたまま、HitPositionのラインだけを動かす
|
|
9481
|
+
* @param {number} _newHitPos 新しい g_stateObj.hitPosition の値
|
|
9482
|
+
*/
|
|
9483
|
+
const updatePreviewHitPositionLine = (_newHitPos) => {
|
|
9484
|
+
|
|
9485
|
+
// 表示用の文字列を作成(例: "+15px", "-8px", "0px")
|
|
9486
|
+
const sign = _newHitPos > 0 ? `+` : ``;
|
|
9487
|
+
const textValue = `${sign}${_newHitPos}px↑↓`;
|
|
9488
|
+
|
|
9489
|
+
// 1. 各種基準座標を再取得(buildPreviewUI 内の計算ロジックと同期)
|
|
9490
|
+
const stepY = g_posObj.stepY ?? C_STEP_Y;
|
|
9491
|
+
const revStepY = g_posObj.reverseStepY;
|
|
9492
|
+
const laneW = 50;
|
|
9493
|
+
|
|
9494
|
+
// 2. DOM要素を直接取得
|
|
9495
|
+
const lineNormal = document.getElementById(`previewHitPosLine`);
|
|
9496
|
+
const lineReverse = document.getElementById(`previewHitPosLineRev`);
|
|
9497
|
+
const textNormal = document.getElementById(`previewHitPosText`);
|
|
9498
|
+
|
|
9499
|
+
// 3. プレビューが表示されている場合のみ、style.top を直接書き換える
|
|
9500
|
+
if (lineNormal) {
|
|
9501
|
+
const newY = stepY + Math.round(laneW / 2) + _newHitPos;
|
|
9502
|
+
lineNormal.style.top = wUnit(newY);
|
|
9503
|
+
}
|
|
9504
|
+
if (textNormal) {
|
|
9505
|
+
textNormal.textContent = textValue;
|
|
9506
|
+
}
|
|
9507
|
+
|
|
9508
|
+
if (lineReverse) {
|
|
9509
|
+
const newY = (C_STEP_Y + revStepY) + Math.round(laneW / 2) - _newHitPos;
|
|
9510
|
+
lineReverse.style.top = wUnit(newY);
|
|
9511
|
+
}
|
|
9512
|
+
};
|
|
9513
|
+
|
|
9384
9514
|
/**
|
|
9385
9515
|
* 要素をドラッグ可能にする(汎用ユーティリティ)
|
|
9386
9516
|
* @param {HTMLElement} _target ドラッグ対象の要素
|
|
9517
|
+
* @param {string} _key 座標保存用のキー(g_previewPosオブジェクトのプロパティ名)
|
|
9387
9518
|
* @param {number} _playW 制限範囲の幅
|
|
9388
9519
|
* @param {number} _playH 制限範囲の高さ
|
|
9389
|
-
* @param {object} _bounds 要素自体のサイズ { w, h } (はみ出し防止用)
|
|
9390
|
-
* @param {
|
|
9520
|
+
* @param {object} _bounds 要素自体のサイズ { w, h, scale } (はみ出し防止用)
|
|
9521
|
+
* @param {object} _config 座標反映ルールオブジェクト
|
|
9391
9522
|
*/
|
|
9392
|
-
const makeElementDraggable = (_target, _playW, _playH, _bounds,
|
|
9523
|
+
const makeElementDraggable = (_target, _key, _playW, _playH, _bounds, _config) => {
|
|
9393
9524
|
let dragging = false;
|
|
9394
9525
|
let dragStartX = 0, dragStartY = 0;
|
|
9395
9526
|
let elemStartX = 0, elemStartY = 0;
|
|
9396
9527
|
|
|
9397
9528
|
const boundsW = _bounds?.w ?? _target.offsetWidth ?? 0;
|
|
9398
9529
|
const boundsH = _bounds?.h ?? _target.offsetHeight ?? 0;
|
|
9530
|
+
const scale = _bounds?.scale ?? 0.8;
|
|
9531
|
+
|
|
9532
|
+
// ドラッグハンドル(薄い枠)を作成
|
|
9533
|
+
const handleId = _target.id ? `handle_${_target.id}` : `dragHandle_${Math.random().toString(36).slice(2, 9)}`;
|
|
9534
|
+
_target.style.cursor = `grab`;
|
|
9535
|
+
|
|
9536
|
+
const bgColor = g_headerObj.baseBrightFlg ? `0,0,0` : `255,255,255`;
|
|
9537
|
+
createEmptySprite(_target, handleId, {
|
|
9538
|
+
x: 0, y: 0, w: boundsW, h: boundsH,
|
|
9539
|
+
border: `1px dashed rgba(${bgColor},0.3)`,
|
|
9540
|
+
boxSizing: `border-box`, borderRadius: `2px`,
|
|
9541
|
+
background: `rgba(${bgColor},0.04)`,
|
|
9542
|
+
});
|
|
9399
9543
|
|
|
9400
9544
|
const keyDown = addPreviewListener(_target, `pointerdown`, _evt => {
|
|
9401
9545
|
dragging = true;
|
|
@@ -9410,11 +9554,18 @@ const makeElementDraggable = (_target, _playW, _playH, _bounds, _onDragEnd) => {
|
|
|
9410
9554
|
|
|
9411
9555
|
const keyMove = addPreviewListener(_target, `pointermove`, _evt => {
|
|
9412
9556
|
if (!dragging) return;
|
|
9413
|
-
const dx = _evt.clientX - dragStartX;
|
|
9414
|
-
const dy = _evt.clientY - dragStartY;
|
|
9415
9557
|
|
|
9416
|
-
//
|
|
9417
|
-
const
|
|
9558
|
+
// 1. マウスの実際の移動量を計算
|
|
9559
|
+
const mouseDx = _evt.clientX - dragStartX;
|
|
9560
|
+
const mouseDy = _evt.clientY - dragStartY;
|
|
9561
|
+
|
|
9562
|
+
// 2. 【最重要】スケール逆算して、縮小空間内の移動量に変換
|
|
9563
|
+
const dx = mouseDx / scale;
|
|
9564
|
+
const dy = mouseDy / scale;
|
|
9565
|
+
|
|
9566
|
+
// 3. 境界値制限
|
|
9567
|
+
const minX = g_headerObj.playingLayout ? -g_headerObj.scAreaWidth : 0;
|
|
9568
|
+
const newX = Math.max(minX, Math.min(_playW + g_headerObj.scAreaWidth - boundsW, elemStartX + dx));
|
|
9418
9569
|
const newY = Math.max(0, Math.min(_playH - boundsH, elemStartY + dy));
|
|
9419
9570
|
|
|
9420
9571
|
_target.style.left = wUnit(newX);
|
|
@@ -9430,11 +9581,13 @@ const makeElementDraggable = (_target, _playW, _playH, _bounds, _onDragEnd) => {
|
|
|
9430
9581
|
const finalX = parseInt(_target.style.left, 10) || 0;
|
|
9431
9582
|
const finalY = parseInt(_target.style.top, 10) || 0;
|
|
9432
9583
|
|
|
9433
|
-
|
|
9434
|
-
|
|
9435
|
-
|
|
9584
|
+
if (g_previewPos[_key]) {
|
|
9585
|
+
g_previewPos[_key].x = finalX;
|
|
9586
|
+
g_previewPos[_key].y = finalY;
|
|
9587
|
+
}
|
|
9588
|
+
if (_config) {
|
|
9589
|
+
applyElementPositionToGame(finalX, finalY, _config, _key);
|
|
9436
9590
|
}
|
|
9437
|
-
|
|
9438
9591
|
_evt.stopPropagation();
|
|
9439
9592
|
});
|
|
9440
9593
|
|
|
@@ -9452,7 +9605,7 @@ const makeElementDraggable = (_target, _playW, _playH, _bounds, _onDragEnd) => {
|
|
|
9452
9605
|
/**
|
|
9453
9606
|
* ドラッグ可能な判定グループを生成する
|
|
9454
9607
|
* @param {HTMLElement} _parent 親要素
|
|
9455
|
-
* @param {string} _groupId `
|
|
9608
|
+
* @param {string} _groupId `arrowJdg` または `frzJdg`
|
|
9456
9609
|
* @param {number} _initX 初期X座標(frame相対)
|
|
9457
9610
|
* @param {number} _initY 初期Y座標(frame相対)
|
|
9458
9611
|
* @param {number} _playW プレイ幅
|
|
@@ -9464,8 +9617,9 @@ const buildDraggableJudgGroup = (_parent, _groupId, _initX, _initY, _playW, _pla
|
|
|
9464
9617
|
const groupH = 51;
|
|
9465
9618
|
|
|
9466
9619
|
const group = createEmptySprite(_parent, `previewGrp_${_groupId}`, {
|
|
9467
|
-
x: _initX, y: _initY, w: groupW, h: groupH,
|
|
9620
|
+
x: _initX, y: _initY, w: groupW, h: groupH, pointerEvents: C_DIS_AUTO,
|
|
9468
9621
|
});
|
|
9622
|
+
const opacity = g_stateObj.opacity / 100;
|
|
9469
9623
|
|
|
9470
9624
|
// 内包要素の生成 (省略:元のコードの multiAppend 部分と同一)
|
|
9471
9625
|
multiAppend(
|
|
@@ -9473,62 +9627,38 @@ const buildDraggableJudgGroup = (_parent, _groupId, _initX, _initY, _playW, _pla
|
|
|
9473
9627
|
// キャラクタ
|
|
9474
9628
|
createDivCss2Label(`previewChara_${_groupId}`, _opts.charaText, {
|
|
9475
9629
|
x: 0, y: 0, w: g_limitObj.jdgCharaWidth, h: g_limitObj.jdgCharaHeight,
|
|
9476
|
-
siz: g_limitObj.jdgCharaSiz,
|
|
9477
|
-
}),
|
|
9630
|
+
siz: g_limitObj.jdgCharaSiz, opacity,
|
|
9631
|
+
}, _groupId === `arrowJdg` ? g_cssObj.common_ii : g_cssObj.common_kita),
|
|
9478
9632
|
// コンボ
|
|
9479
9633
|
createDivCss2Label(`previewCombo_${_groupId}`, _opts.comboText, {
|
|
9480
9634
|
x: 170, y: 0, w: g_limitObj.jdgCharaWidth, h: g_limitObj.jdgCharaHeight,
|
|
9481
|
-
siz: g_limitObj.jdgCharaSiz,
|
|
9482
|
-
}),
|
|
9635
|
+
siz: g_limitObj.jdgCharaSiz, opacity,
|
|
9636
|
+
}, _groupId === `arrowJdg` ? g_cssObj.common_kita : g_cssObj.common_ii),
|
|
9483
9637
|
// Fast/Slow
|
|
9484
9638
|
createDivCss2Label(`previewDiff_${_groupId}`, _opts.diffText, {
|
|
9485
9639
|
x: 170, y: 25, w: g_limitObj.jdgCharaWidth, h: g_limitObj.jdgCharaHeight,
|
|
9486
|
-
siz: g_limitObj.mainSiz, color: `#ff9966`,
|
|
9487
|
-
}),
|
|
9640
|
+
siz: g_limitObj.mainSiz, color: `#ff9966`, opacity,
|
|
9641
|
+
}, g_cssObj.common_fast),
|
|
9488
9642
|
);
|
|
9489
9643
|
|
|
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
9644
|
// ============================================================
|
|
9497
9645
|
// 判定グループ固有の「座標反映ルール」を定義
|
|
9498
9646
|
// ============================================================
|
|
9499
9647
|
const configMap = {
|
|
9500
|
-
|
|
9648
|
+
arrowJdg: {
|
|
9501
9649
|
toastTitle: g_lblNameObj.arrowJdgUpdate,
|
|
9502
9650
|
getStdX: (pw) => Math.round(pw / 2 - 220),
|
|
9503
9651
|
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
9652
|
},
|
|
9509
|
-
|
|
9653
|
+
frzJdg: {
|
|
9510
9654
|
toastTitle: g_lblNameObj.frzJdgUpdate,
|
|
9511
9655
|
getStdX: (pw) => Math.round(pw / 2 - 120),
|
|
9512
9656
|
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
9657
|
}
|
|
9518
9658
|
};
|
|
9519
9659
|
|
|
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
|
-
});
|
|
9660
|
+
// 汎用ドラッグ及びドラッグ枠作成、差分適用処理
|
|
9661
|
+
makeElementDraggable(group, _groupId, _playW, _playH, { w: groupW, h: groupH }, configMap[_groupId]);
|
|
9532
9662
|
};
|
|
9533
9663
|
|
|
9534
9664
|
/**
|
|
@@ -9536,8 +9666,9 @@ const buildDraggableJudgGroup = (_parent, _groupId, _initX, _initY, _playW, _pla
|
|
|
9536
9666
|
* @param {number} _x 確定したframe相対X
|
|
9537
9667
|
* @param {number} _y 確定したframe相対Y
|
|
9538
9668
|
* @param {object} _config 反映用の設定オブジェクト
|
|
9669
|
+
* @param {string} _key 保存用キー(g_diffObjのプロパティ名の接頭辞)
|
|
9539
9670
|
*/
|
|
9540
|
-
const applyElementPositionToGame = (_x, _y, _config) => {
|
|
9671
|
+
const applyElementPositionToGame = (_x, _y, _config, _key) => {
|
|
9541
9672
|
const playW = g_headerObj.playingWidth || g_sWidth;
|
|
9542
9673
|
const playH = g_headerObj.playingHeight || g_sHeight;
|
|
9543
9674
|
const stepYR = g_posObj?.stepYR ?? 0;
|
|
@@ -9551,7 +9682,10 @@ const applyElementPositionToGame = (_x, _y, _config) => {
|
|
|
9551
9682
|
const diffY = _y - stdY;
|
|
9552
9683
|
|
|
9553
9684
|
// 3. 指定された保存先にオフセットを格納
|
|
9554
|
-
|
|
9685
|
+
g_diffObj[`${_key}X`] = diffX;
|
|
9686
|
+
g_diffObj[`${_key}Y`] = diffY;
|
|
9687
|
+
g_localStorage[`${_key}X`] = diffX;
|
|
9688
|
+
g_localStorage[`${_key}Y`] = diffY;
|
|
9555
9689
|
|
|
9556
9690
|
// 4. トースト表示 (通知が不要な要素なら省略可能にする)
|
|
9557
9691
|
if (_config.toastTitle) {
|
|
@@ -9733,6 +9867,7 @@ const createSettingsDisplayWindow = _sprite => {
|
|
|
9733
9867
|
createGeneralSetting(spriteList.hitPosition, `hitPosition`, {
|
|
9734
9868
|
skipTerms: g_settings.hitPositionTerms, scLabel: g_lblNameObj.sc_hitPosition, roundNum: 5,
|
|
9735
9869
|
unitName: g_lblNameObj.pixel,
|
|
9870
|
+
addRFunc: () => updatePreviewHitPositionLine(g_stateObj.hitPosition),
|
|
9736
9871
|
});
|
|
9737
9872
|
};
|
|
9738
9873
|
|
|
@@ -13897,6 +14032,9 @@ const getArrowSettings = () => {
|
|
|
13897
14032
|
if (g_headerObj.scAreaWidth === 0 && (g_headerObj.keyRetry !== g_headerObj.keyRetryDef2 || g_headerObj.keyTitleBack !== g_headerObj.keyTitleBackDef2)) {
|
|
13898
14033
|
g_workObj.nonDefaultSc = false;
|
|
13899
14034
|
}
|
|
14035
|
+
if (g_diffObj.shortcutX !== 0 || g_diffObj.shortcutY !== 0) {
|
|
14036
|
+
g_workObj.nonDefaultSc = true;
|
|
14037
|
+
}
|
|
13900
14038
|
|
|
13901
14039
|
g_workObj.backX = (g_workObj.nonDefaultSc && g_headerObj.playingLayout ? g_headerObj.scAreaWidth : 0);
|
|
13902
14040
|
g_workObj.playingX = g_headerObj.playingX + g_workObj.backX;
|
|
@@ -14372,12 +14510,28 @@ const mainInit = () => {
|
|
|
14372
14510
|
|
|
14373
14511
|
if (g_workObj.nonDefaultSc) {
|
|
14374
14512
|
multiAppend(infoSprite,
|
|
14375
|
-
createDivCss2Label(`lblRetry`, `[${g_lblNameObj.l_retry}]`, {
|
|
14376
|
-
|
|
14377
|
-
|
|
14378
|
-
|
|
14379
|
-
|
|
14380
|
-
|
|
14513
|
+
createDivCss2Label(`lblRetry`, `[${g_lblNameObj.l_retry}]`, {
|
|
14514
|
+
...g_lblPosObj.lblMainScHeader,
|
|
14515
|
+
x: g_sWidth + g_headerObj.scAreaWidth - 85 + g_diffObj.shortcutX,
|
|
14516
|
+
y: g_headerObj.playingHeight - 65 + g_diffObj.shortcutY,
|
|
14517
|
+
}),
|
|
14518
|
+
createDivCss2Label(`lblRetrySc`, g_kCd[g_headerObj.keyRetry], {
|
|
14519
|
+
...g_lblPosObj.lblMainScKey,
|
|
14520
|
+
x: g_sWidth + g_headerObj.scAreaWidth - 85 + g_diffObj.shortcutX,
|
|
14521
|
+
y: g_headerObj.playingHeight - 50 + g_diffObj.shortcutY,
|
|
14522
|
+
fontWeight: g_headerObj.keyRetry === C_KEY_RETRY ? `normal` : `bold`,
|
|
14523
|
+
}),
|
|
14524
|
+
createDivCss2Label(`lblTitleBack`, `[${g_lblNameObj.l_titleBack}]`, {
|
|
14525
|
+
...g_lblPosObj.lblMainScHeader,
|
|
14526
|
+
x: g_sWidth + g_headerObj.scAreaWidth - 85 + g_diffObj.shortcutX,
|
|
14527
|
+
y: g_headerObj.playingHeight - 35 + g_diffObj.shortcutY,
|
|
14528
|
+
}),
|
|
14529
|
+
createDivCss2Label(`lblTitleBackSc`, g_isMac ? `Shift+${g_kCd[g_headerObj.keyRetry]}` : g_kCd[g_headerObj.keyTitleBack], {
|
|
14530
|
+
...g_lblPosObj.lblMainScKey,
|
|
14531
|
+
x: g_sWidth + g_headerObj.scAreaWidth - 85 + g_diffObj.shortcutX,
|
|
14532
|
+
y: g_headerObj.playingHeight - 20 + g_diffObj.shortcutY,
|
|
14533
|
+
fontWeight: g_headerObj.keyTitleBack === C_KEY_TITLEBACK ? `normal` : `bold`,
|
|
14534
|
+
}),
|
|
14381
14535
|
);
|
|
14382
14536
|
}
|
|
14383
14537
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2019/11/19
|
|
8
|
-
* Revised : 2026/
|
|
8
|
+
* Revised : 2026/06/02 (v48.4.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
|
},
|
|
@@ -563,23 +569,25 @@ const updateWindowSiz = () => {
|
|
|
563
569
|
},
|
|
564
570
|
previewLifeBack: {
|
|
565
571
|
x: 5, y: 50, w: 15, h: g_headerObj.playingHeight - 100,
|
|
566
|
-
background: `#333333`, border: `1px solid #555555`,
|
|
567
572
|
},
|
|
568
573
|
previewLifeBar: {
|
|
569
574
|
x: 5, y: 50 + (g_headerObj.playingHeight - 100) * 0.3,
|
|
570
|
-
w: 15, h: (g_headerObj.playingHeight - 100) * 0.7,
|
|
575
|
+
w: 15, h: (g_headerObj.playingHeight - 100) * 0.7,
|
|
571
576
|
},
|
|
572
577
|
previewLifeNum: {
|
|
573
578
|
x: 0, y: 30, w: 70, h: 20,
|
|
574
|
-
siz: g_limitObj.jdgCntsSiz,
|
|
579
|
+
siz: g_limitObj.jdgCntsSiz, align: C_ALIGN_CENTER,
|
|
575
580
|
},
|
|
576
581
|
previewFrzLifeBack: {
|
|
577
|
-
x: 0, y: 50, w:
|
|
578
|
-
background: `#333333`, border: `1px solid #555555`,
|
|
582
|
+
x: 0, y: 50, w: 4, h: g_headerObj.playingHeight - 100,
|
|
579
583
|
},
|
|
580
584
|
previewFrzLifeBar: {
|
|
581
585
|
x: 0, y: 50 + (g_headerObj.playingHeight - 100) * 0.7,
|
|
582
|
-
w:
|
|
586
|
+
w: 4, h: (g_headerObj.playingHeight - 100) * 0.3,
|
|
587
|
+
},
|
|
588
|
+
previewHitPosText: {
|
|
589
|
+
w: 60, h: 16, siz: 14, color: `#33aaff`,
|
|
590
|
+
fontFamily: `monospace`, fontWeight: `bold`,
|
|
583
591
|
},
|
|
584
592
|
|
|
585
593
|
/** キーコンフィグ画面 */
|
|
@@ -1328,7 +1336,8 @@ const g_settings = {
|
|
|
1328
1336
|
customKey: 0,
|
|
1329
1337
|
others: 0,
|
|
1330
1338
|
},
|
|
1331
|
-
environments: [`adjustment`, `volume`, `colorType`, `appearance`, `opacity`, `hitPosition
|
|
1339
|
+
environments: [`adjustment`, `volume`, `colorType`, `appearance`, `opacity`, `hitPosition`,
|
|
1340
|
+
`arrowJdgX`, `arrowJdgY`, `frzJdgX`, `frzJdgY`, `shortcutX`, `shortcutY`],
|
|
1332
1341
|
keyStorages: [`reverse`, `keyCtrl`, `keyCtrlPtn`, `shuffle`, `color`, `stepRtn`],
|
|
1333
1342
|
colorStorages: [`setColor`, `setShadowColor`, `frzColor`, `frzShadowColor`],
|
|
1334
1343
|
|
|
@@ -2331,6 +2340,17 @@ const g_diffObj = {
|
|
|
2331
2340
|
frzJdgX: 0,
|
|
2332
2341
|
arrowJdgY: 0,
|
|
2333
2342
|
frzJdgY: 0,
|
|
2343
|
+
shortcutX: 0,
|
|
2344
|
+
shortcutY: 0,
|
|
2345
|
+
};
|
|
2346
|
+
|
|
2347
|
+
const g_diffInitObj = {
|
|
2348
|
+
arrowJdgX: 0,
|
|
2349
|
+
frzJdgX: 0,
|
|
2350
|
+
arrowJdgY: 0,
|
|
2351
|
+
frzJdgY: 0,
|
|
2352
|
+
shortcutX: 0,
|
|
2353
|
+
shortcutY: 0,
|
|
2334
2354
|
};
|
|
2335
2355
|
|
|
2336
2356
|
// キーコンフィグカーソル
|
|
@@ -2982,6 +3002,14 @@ const g_shortcutObj = {
|
|
|
2982
3002
|
},
|
|
2983
3003
|
displayPreview: {
|
|
2984
3004
|
KeyP: { id: `btnDisplayPreview2` },
|
|
3005
|
+
KeyR: { id: `btnDisplayReset` },
|
|
3006
|
+
ShiftLeft_ArrowDown: { id: `lnkHitPositionR` },
|
|
3007
|
+
ShiftRight_ArrowDown: { id: `lnkHitPositionR` },
|
|
3008
|
+
ArrowDown: { id: `lnkHitPositionRR` },
|
|
3009
|
+
ShiftLeft_ArrowUp: { id: `lnkHitPositionL` },
|
|
3010
|
+
ShiftRight_ArrowUp: { id: `lnkHitPositionL` },
|
|
3011
|
+
ArrowUp: { id: `lnkHitPositionLL` },
|
|
3012
|
+
|
|
2985
3013
|
Escape: { id: `btnBack` },
|
|
2986
3014
|
Space: { id: `btnKeyConfig` },
|
|
2987
3015
|
Enter: { id: `btnPlay` },
|
|
@@ -4785,9 +4813,11 @@ const g_lang_lblNameObj = {
|
|
|
4785
4813
|
transKeyDesc: `別キーモードではキーコンフィグ、ColorType等は保存されません`,
|
|
4786
4814
|
colorTypeDesc: `現在のColorTypeの設定では、色変化(Display:Color)は自動的にOFFになります`,
|
|
4787
4815
|
sdShortcutDesc: `Hid+/Sud+時ショートカット:「pageUp」カバーを上へ / 「pageDown」下へ`,
|
|
4788
|
-
displayPreviewDesc:
|
|
4816
|
+
displayPreviewDesc: `判定キャラクタ部分、ショートカット表示はドラッグで移動するとその位置に補正されます`,
|
|
4817
|
+
displayPreviewDesc2: `枠外への移動はショートカットがデフォルトと異なるか、位置が通常と異なる場合のみ有効です`,
|
|
4789
4818
|
arrowJdgUpdate: `矢印判定の座標を更新`,
|
|
4790
4819
|
frzJdgUpdate: `フリーズアロー判定の座標を更新`,
|
|
4820
|
+
shortcutUpdate: `ショートカット表示の座標を更新`,
|
|
4791
4821
|
resultImageDesc: `画像を右クリックしてコピーできます`,
|
|
4792
4822
|
|
|
4793
4823
|
s_level: `Level`,
|
|
@@ -4845,9 +4875,11 @@ const g_lang_lblNameObj = {
|
|
|
4845
4875
|
transKeyDesc: `Key config, Color type, etc. are not saved in another key mode`,
|
|
4846
4876
|
colorTypeDesc: `With the current ColorType setting, color change (Display:Color) will be automatically turned OFF.`,
|
|
4847
4877
|
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.`,
|
|
4878
|
+
displayPreviewDesc: `If you drag the judgment character section or shortcut display, it will be adjusted to that position.`,
|
|
4879
|
+
displayPreviewDesc2: `Moving outside the frame is only effective when the shortcut display position differs from the default.`,
|
|
4849
4880
|
arrowJdgUpdate: `Update the coordinates (arrow)`,
|
|
4850
4881
|
frzJdgUpdate: `Update the coordinates (freeze)`,
|
|
4882
|
+
shortcutUpdate: `Update the coordinates (shortcut)`,
|
|
4851
4883
|
resultImageDesc: `You can copy the image by right-clicking on it.`,
|
|
4852
4884
|
|
|
4853
4885
|
s_level: `Level`,
|
|
@@ -4911,7 +4943,7 @@ const g_lang_msgObj = {
|
|
|
4911
4943
|
github: `Dancing☆Onigiri (CW Edition)のGitHubページへ移動します。`,
|
|
4912
4944
|
security: `Dancing☆Onigiri (CW Edition)のサポート情報ページへ移動します。`,
|
|
4913
4945
|
|
|
4914
|
-
environment:
|
|
4946
|
+
environment: `以下の設定を初期化します。\n - Adjustment, Volume, ColorType, Appearance, Opacity, HitPosition, 判定キャラクタ位置, ショートカット表示位置`,
|
|
4915
4947
|
highscores: `全譜面のハイスコアを初期化します。\n個別に初期化したい場合はSettings画面より行ってください。`,
|
|
4916
4948
|
customKey: `カスタムキーに関する全ての保存データを消去します。\n下記のKeyDataから個別に消去可能できないときに使用してください。`,
|
|
4917
4949
|
others: `標準以外に関する保存データを消去します。`,
|
|
@@ -4993,6 +5025,7 @@ const g_lang_msgObj = {
|
|
|
4993
5025
|
opacity: `判定キャラクタ、コンボ数、Fast/Slowの透明度を設定します。`,
|
|
4994
5026
|
hitPosition: `判定位置にズレを感じる場合、\n数値を変えることで判定の中央位置を1px単位(プラス:手前, マイナス:奥側)で調整することができます。\n早押し・遅押し傾向にある場合に使用します。`,
|
|
4995
5027
|
displayPreview: `プレイ画面上のオブジェクトの表示状態をプレビューします。\n判定キャラクタ部分をドラッグで移動するとその位置に補正されます。`,
|
|
5028
|
+
displayPreviewResetConfirm: `プレイ画面上のオブジェクトの位置を初期状態に戻します。よろしいですか?`,
|
|
4996
5029
|
|
|
4997
5030
|
colorType: `矢印・フリーズアローの配色セットをあらかじめ定義されたリストから選択できます。\nType1~4選択時は色変化が自動でOFFになり、カラーピッカーから好きな色に変更できます。\n[Type0] グラデーション切替, [Type1~4] デフォルトパターン`,
|
|
4998
5031
|
imgType: `矢印・フリーズアローなどのオブジェクトの見た目を変更します。`,
|
|
@@ -5016,7 +5049,7 @@ const g_lang_msgObj = {
|
|
|
5016
5049
|
github: `Go to the GitHub page of Dancing Onigiri "CW Edition".`,
|
|
5017
5050
|
security: `Go to the support information page for Dancing Onigiri "CW Edition".`,
|
|
5018
5051
|
|
|
5019
|
-
environment: `Initialize
|
|
5052
|
+
environment: `Initialize settings below:\n - Adjustment, Volume, ColorType, Appearance, Opacity, HitPosition, judgment character positions and shortcut display position.`,
|
|
5020
5053
|
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
5054
|
customKey: `Delete stored data related to all custom keymodes. \nUse this option when you cannot delete individual KeyData from the following KeyData.`,
|
|
5022
5055
|
others: `Delete non-standard stored data.`,
|
|
@@ -5097,6 +5130,7 @@ const g_lang_msgObj = {
|
|
|
5097
5130
|
opacity: `Set the transparency of some objects such as judgment, combo counts, fast and slow`,
|
|
5098
5131
|
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
5132
|
displayPreview: `Preview the display status of objects on the play screen.\nDragging the judgment character section will adjust it to that position.`,
|
|
5133
|
+
displayPreviewResetConfirm: `Reset the position of objects on the play screen to the initial state. Is it OK?`,
|
|
5100
5134
|
|
|
5101
5135
|
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
5136
|
imgType: `Change the appearance of sequences.`,
|