danoniplus 46.7.0 → 47.0.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 +230 -5
- package/js/lib/danoni_constants.js +16 -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/04/
|
|
7
|
+
* Revised : 2026/04/19
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver
|
|
12
|
-
const g_revisedDate = `2026/04/
|
|
11
|
+
const g_version = `Ver 47.0.0`;
|
|
12
|
+
const g_revisedDate = `2026/04/19`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -213,6 +213,9 @@ const g_detailObj = {
|
|
|
213
213
|
speedData: [],
|
|
214
214
|
boostData: [],
|
|
215
215
|
toolDif: [],
|
|
216
|
+
scoreMinimap: {},
|
|
217
|
+
scoreMinimapReverse: {},
|
|
218
|
+
scoreMinimapHeader: {},
|
|
216
219
|
};
|
|
217
220
|
|
|
218
221
|
const g_workObj = {
|
|
@@ -3352,6 +3355,154 @@ const storeBaseData = (_scoreId, _scoreObj, _keyCtrlPtn) => {
|
|
|
3352
3355
|
g_detailObj.startFrame[_scoreId] = startFrame;
|
|
3353
3356
|
g_detailObj.playingFrame[_scoreId] = playingFrame;
|
|
3354
3357
|
g_detailObj.playingFrameWithBlank[_scoreId] = lastFrame - startFrame;
|
|
3358
|
+
|
|
3359
|
+
const generateMinimap = (_scoreId, _scoreObj, _keyNum, _playingFrame, _firstArrowFrame, _isReverse = false) => {
|
|
3360
|
+
// 高さを演奏時間に比例させる (例: 1フレーム = 0.5px)
|
|
3361
|
+
const scale = 1.5;
|
|
3362
|
+
const dpr = window.devicePixelRatio || 1; // デバイスのピクセル比を取得(通常 2〜3)
|
|
3363
|
+
|
|
3364
|
+
const timeMargin = 35; // 時間表示用の左マージン
|
|
3365
|
+
const mmWidth = (g_sWidth - 500) / 2 + 290; // 基準となるコマの横幅(親divより少し短くする)
|
|
3366
|
+
const mmHeightTotal = _playingFrame * scale;
|
|
3367
|
+
const mmMarginY = 2;
|
|
3368
|
+
const laneWidth = Math.min(Math.floor((mmWidth - timeMargin) / _keyNum), 40);
|
|
3369
|
+
const logicalWidth = timeMargin + (laneWidth * _keyNum);
|
|
3370
|
+
|
|
3371
|
+
// ヘッダー用キャンバスの作成
|
|
3372
|
+
const canvasHeader = document.createElement(`canvas`);
|
|
3373
|
+
const ctxHeader = canvasHeader.getContext(`2d`);
|
|
3374
|
+
canvasHeader.width = logicalWidth * dpr;
|
|
3375
|
+
canvasHeader.height = 15 * dpr;
|
|
3376
|
+
canvasHeader.style.width = `${logicalWidth}px`;
|
|
3377
|
+
canvasHeader.style.height = `15px`;
|
|
3378
|
+
ctxHeader.scale(dpr, dpr);
|
|
3379
|
+
ctxHeader.fillStyle = '#999';
|
|
3380
|
+
ctxHeader.font = `10px ${getBasicFont()}`;
|
|
3381
|
+
ctxHeader.textAlign = 'center';
|
|
3382
|
+
|
|
3383
|
+
for (let j = 0; j < _keyNum; j++) {
|
|
3384
|
+
const x = timeMargin + j * laneWidth + laneWidth / 2;
|
|
3385
|
+
ctxHeader.fillText(g_kCd[g_keyObj[`keyCtrl${_keyCtrlPtn}`][j][0]], x, 10);
|
|
3386
|
+
ctxHeader.strokeStyle = '#444';
|
|
3387
|
+
}
|
|
3388
|
+
|
|
3389
|
+
g_detailObj.scoreMinimapHeader[_scoreId] = canvasHeader;
|
|
3390
|
+
|
|
3391
|
+
// 譜面全体のキャンバスの作成
|
|
3392
|
+
const MAX_CANVAS_HEIGHT = 10000; // 1枚あたりの高さ制限(安全圏)
|
|
3393
|
+
const canvasCount = Math.ceil((mmHeightTotal + mmMarginY * 2) / MAX_CANVAS_HEIGHT);
|
|
3394
|
+
const canvases = [];
|
|
3395
|
+
|
|
3396
|
+
for (let i = 0; i < canvasCount; i++) {
|
|
3397
|
+
const cvs = document.createElement('canvas');
|
|
3398
|
+
const h = (i === canvasCount - 1)
|
|
3399
|
+
? (mmHeightTotal + mmMarginY * 2) - (MAX_CANVAS_HEIGHT * i)
|
|
3400
|
+
: MAX_CANVAS_HEIGHT;
|
|
3401
|
+
|
|
3402
|
+
cvs.width = logicalWidth * dpr;
|
|
3403
|
+
cvs.height = h * dpr;
|
|
3404
|
+
cvs.style.width = `${logicalWidth}px`;
|
|
3405
|
+
cvs.style.height = `${h}px`;
|
|
3406
|
+
cvs.style.display = 'block'; // 隙間防止
|
|
3407
|
+
const ctx = cvs.getContext('2d');
|
|
3408
|
+
ctx.scale(dpr, dpr);
|
|
3409
|
+
canvases.push({ canvas: cvs, ctx: ctx, offsetTop: i * MAX_CANVAS_HEIGHT });
|
|
3410
|
+
}
|
|
3411
|
+
|
|
3412
|
+
// --- 描画先を振り分けるヘルパー関数 ---
|
|
3413
|
+
const drawOnTarget = (y, height, drawFunc) => {
|
|
3414
|
+
canvases.forEach(item => {
|
|
3415
|
+
// 描画要素がCanvasの範囲内に入っているか判定
|
|
3416
|
+
if (y + height >= item.offsetTop && y <= item.offsetTop + (item.canvas.height / dpr)) {
|
|
3417
|
+
item.ctx.save();
|
|
3418
|
+
item.ctx.translate(0, -item.offsetTop);
|
|
3419
|
+
drawFunc(item.ctx);
|
|
3420
|
+
item.ctx.restore();
|
|
3421
|
+
}
|
|
3422
|
+
});
|
|
3423
|
+
};
|
|
3424
|
+
|
|
3425
|
+
// --- Y座標計算用の関数 ---
|
|
3426
|
+
// 通常:上(0)から下へ増える
|
|
3427
|
+
// リバース:最大値(mmHeight)から上へ向かって減る
|
|
3428
|
+
const getY = (frame) => {
|
|
3429
|
+
const relativeFrame = frame - _firstArrowFrame;
|
|
3430
|
+
const rawY = relativeFrame * scale;
|
|
3431
|
+
return _isReverse ? (mmHeightTotal - rawY + mmMarginY) : (rawY + mmMarginY);
|
|
3432
|
+
};
|
|
3433
|
+
|
|
3434
|
+
// 時間表記用のフォーマット関数
|
|
3435
|
+
const formatTime = (frame) => {
|
|
3436
|
+
const [m, s] = transFrameToTimer(frame).split(`:`);
|
|
3437
|
+
return `${m.padStart(2, `0`)}:${s}`;
|
|
3438
|
+
};
|
|
3439
|
+
|
|
3440
|
+
// --- 1. 時間軸・ガイドライン ---
|
|
3441
|
+
const interval = g_fps;
|
|
3442
|
+
let startPoint = Math.ceil(_firstArrowFrame / interval) * interval;
|
|
3443
|
+
for (let currentFrame = startPoint; currentFrame <= _firstArrowFrame + _playingFrame; currentFrame += interval) {
|
|
3444
|
+
const y = getY(currentFrame);
|
|
3445
|
+
drawOnTarget(y - 5, 10, (ctx) => {
|
|
3446
|
+
ctx.strokeStyle = '#444';
|
|
3447
|
+
ctx.fillStyle = '#999';
|
|
3448
|
+
ctx.font = `10px ${getBasicFont()}`;
|
|
3449
|
+
ctx.textAlign = 'right';
|
|
3450
|
+
ctx.textBaseline = 'middle';
|
|
3451
|
+
ctx.beginPath();
|
|
3452
|
+
ctx.moveTo(timeMargin, y);
|
|
3453
|
+
ctx.lineTo(timeMargin + laneWidth * _keyNum, y);
|
|
3454
|
+
ctx.stroke();
|
|
3455
|
+
ctx.fillText(formatTime(currentFrame), timeMargin, y);
|
|
3456
|
+
});
|
|
3457
|
+
}
|
|
3458
|
+
|
|
3459
|
+
// --- 2. フリーズノート ---
|
|
3460
|
+
for (let j = 0; j < _keyNum; j++) {
|
|
3461
|
+
const frz = _scoreObj.frzData[j];
|
|
3462
|
+
for (let k = 0; k < frz.length; k += 2) {
|
|
3463
|
+
const start = frz[k], end = frz[k + 1];
|
|
3464
|
+
if (isNaN(start) || isNaN(end)) continue;
|
|
3465
|
+
const y1 = getY(start), y2 = getY(end);
|
|
3466
|
+
const x = timeMargin + j * laneWidth;
|
|
3467
|
+
const top = Math.min(y1, y2), h = Math.abs(y2 - y1);
|
|
3468
|
+
|
|
3469
|
+
drawOnTarget(top, h, (ctx) => {
|
|
3470
|
+
ctx.fillStyle = 'rgba(0, 200, 255, 0.4)';
|
|
3471
|
+
ctx.fillRect(x + 2, top, laneWidth - 3, h);
|
|
3472
|
+
ctx.strokeStyle = 'rgba(0, 200, 255, 0.8)';
|
|
3473
|
+
ctx.strokeRect(x + 2, top, laneWidth - 3, h);
|
|
3474
|
+
});
|
|
3475
|
+
}
|
|
3476
|
+
}
|
|
3477
|
+
|
|
3478
|
+
// --- 3. 通常ノート ---
|
|
3479
|
+
for (let j = 0; j < _keyNum; j++) {
|
|
3480
|
+
const color = g_dfColorObj.setColorType2[g_keyObj[`color${_keyCtrlPtn}_0`][j]] || '#ffffff';
|
|
3481
|
+
_scoreObj.arrowData[j].forEach(note => {
|
|
3482
|
+
const val = parseFloat(note);
|
|
3483
|
+
if (isNaN(val)) return;
|
|
3484
|
+
const y = getY(val), x = timeMargin + j * laneWidth;
|
|
3485
|
+
drawOnTarget(y - 1.5, 3, (ctx) => {
|
|
3486
|
+
ctx.fillStyle = color;
|
|
3487
|
+
ctx.fillRect(x + 1, y - 1.5, laneWidth - 1, 3);
|
|
3488
|
+
});
|
|
3489
|
+
});
|
|
3490
|
+
}
|
|
3491
|
+
|
|
3492
|
+
// 保存(Canvasの配列を保存する)
|
|
3493
|
+
const result = canvases.map(item => item.canvas);
|
|
3494
|
+
if (_isReverse) {
|
|
3495
|
+
g_detailObj.scoreMinimapReverse[_scoreId] = result;
|
|
3496
|
+
} else {
|
|
3497
|
+
g_detailObj.scoreMinimap[_scoreId] = result;
|
|
3498
|
+
}
|
|
3499
|
+
};
|
|
3500
|
+
|
|
3501
|
+
// storeBaseData の中で呼び出す
|
|
3502
|
+
// 通常版を生成
|
|
3503
|
+
generateMinimap(_scoreId, _scoreObj, keyNum, playingFrame, firstArrowFrame, false);
|
|
3504
|
+
// リバース版を生成
|
|
3505
|
+
generateMinimap(_scoreId, _scoreObj, keyNum, playingFrame, firstArrowFrame, true);
|
|
3355
3506
|
};
|
|
3356
3507
|
|
|
3357
3508
|
/**
|
|
@@ -4393,8 +4544,8 @@ const headerConvert = _dosObj => {
|
|
|
4393
4544
|
obj.playingLayout = g_presetObj.playingLayout ?? true;
|
|
4394
4545
|
}
|
|
4395
4546
|
|
|
4396
|
-
// ジャストフレームの設定 (
|
|
4397
|
-
obj.justFrames =
|
|
4547
|
+
// ジャストフレームの設定 (ローカル/デバッグ時: 0フレーム, 通常時: 1フレーム以内)
|
|
4548
|
+
obj.justFrames = g_isDebug ? 0 : 1;
|
|
4398
4549
|
|
|
4399
4550
|
// リザルトデータのカスタマイズ
|
|
4400
4551
|
obj.resultFormat = escapeHtmlForEnabledTag(_dosObj.resultFormat ?? g_presetObj.resultFormat ?? g_templateObj.resultFormatDf);
|
|
@@ -7580,6 +7731,71 @@ const makeHighScore = _scoreId => {
|
|
|
7580
7731
|
}
|
|
7581
7732
|
};
|
|
7582
7733
|
|
|
7734
|
+
const drawMinimap = (_scoreId, _initFlg = false) => {
|
|
7735
|
+
const detailMiniMap = document.getElementById(`detailMiniMap`);
|
|
7736
|
+
if (detailMiniMap === null) return; // scoreDetailUse=false 等で未生成の場合は何もしない
|
|
7737
|
+
|
|
7738
|
+
const currentScrollTop = document.getElementById(`detailMiniMapSub`)
|
|
7739
|
+
? document.getElementById(`detailMiniMapSub`).scrollTop : 0;
|
|
7740
|
+
|
|
7741
|
+
// 再描画のため一度クリア
|
|
7742
|
+
deleteChildspriteAll(`detailMiniMap`);
|
|
7743
|
+
|
|
7744
|
+
// drawMinimap 内の Canvas 追加部分
|
|
7745
|
+
const savedCanvases = g_stateObj.miniMapRevFlg
|
|
7746
|
+
? g_detailObj.scoreMinimapReverse[_scoreId]
|
|
7747
|
+
: g_detailObj.scoreMinimap[_scoreId];
|
|
7748
|
+
|
|
7749
|
+
// --- ヘッダー部分 ---
|
|
7750
|
+
const detailMiniMapHeader = createEmptySprite(detailMiniMap, `detailMiniMapHeader`, g_windowObj.detailMiniMapHeader);
|
|
7751
|
+
$id(`detailMiniMapHeader`).top = (g_stateObj.miniMapRevFlg ? 230 : 0) + `px`;
|
|
7752
|
+
detailMiniMapHeader.appendChild(g_detailObj.scoreMinimapHeader[_scoreId]);
|
|
7753
|
+
|
|
7754
|
+
// --- メイン(譜面)部分 ---
|
|
7755
|
+
const detailMiniMapSub = createEmptySprite(detailMiniMap, `detailMiniMapSub`, g_windowObj.detailMiniMapSub);
|
|
7756
|
+
$id(`detailMiniMapSub`).top = (g_stateObj.miniMapRevFlg ? 0 : 15) + `px`;
|
|
7757
|
+
|
|
7758
|
+
detailMiniMapSub.style.overflowX = 'hidden';
|
|
7759
|
+
detailMiniMapSub.style.overflowY = 'auto';
|
|
7760
|
+
detailMiniMapSub.style.pointerEvents = 'auto';
|
|
7761
|
+
|
|
7762
|
+
if (savedCanvases && Array.isArray(savedCanvases)) {
|
|
7763
|
+
// 退避したCanvasそのものをDOMに追加(再描画不要で高速)
|
|
7764
|
+
detailMiniMapSub.style.overflow = C_DIS_AUTO;
|
|
7765
|
+
detailMiniMapSub.style.pointerEvents = C_DIS_AUTO;
|
|
7766
|
+
savedCanvases.forEach(canvas => {
|
|
7767
|
+
canvas.style.position = 'static';
|
|
7768
|
+
canvas.style.display = 'block';
|
|
7769
|
+
canvas.style.height = 'auto';
|
|
7770
|
+
detailMiniMapSub.appendChild(canvas);
|
|
7771
|
+
});
|
|
7772
|
+
}
|
|
7773
|
+
const scrollHeight = Math.max(detailMiniMapSub.scrollHeight - detailMiniMapSub.clientHeight, 0);
|
|
7774
|
+
const playingFrame = Math.max(g_detailObj.playingFrame[_scoreId], 1);
|
|
7775
|
+
const lastFrame = g_detailObj.startFrame[_scoreId] + g_detailObj.playingFrameWithBlank[_scoreId];
|
|
7776
|
+
const firstArrowFrame = lastFrame - g_detailObj.playingFrame[_scoreId];
|
|
7777
|
+
const fadeinFrameOffset = Math.max(0, Math.min(
|
|
7778
|
+
playingFrame,
|
|
7779
|
+
getStartFrame(lastFrame, g_stateObj.fadein, _scoreId) - firstArrowFrame
|
|
7780
|
+
));
|
|
7781
|
+
const fadeinScrollTop = scrollHeight * fadeinFrameOffset / playingFrame;
|
|
7782
|
+
detailMiniMapSub.scrollTop = g_stateObj.miniMapRevFlg
|
|
7783
|
+
? (_initFlg ? scrollHeight - currentScrollTop : scrollHeight - fadeinScrollTop)
|
|
7784
|
+
: (_initFlg ? scrollHeight - currentScrollTop : fadeinScrollTop);
|
|
7785
|
+
|
|
7786
|
+
if (document.getElementById(`lnkMiniMapRev`) === null) {
|
|
7787
|
+
scoreDetail.appendChild(
|
|
7788
|
+
makeDifLblCssButton(`lnkMiniMapRev`, g_lblNameObj.s_rev + `${g_stateObj.miniMapRevFlg ? `↑` : `↓`}`, 8, () => {
|
|
7789
|
+
g_stateObj.miniMapRevFlg = !g_stateObj.miniMapRevFlg;
|
|
7790
|
+
lnkMiniMapRev.textContent = g_lblNameObj.s_rev + `${g_stateObj.miniMapRevFlg ? `↑` : `↓`}`;
|
|
7791
|
+
drawMinimap(g_stateObj.scoreId, true);
|
|
7792
|
+
createScText(lnkMiniMapRev, `MiniMapRev`, { targetLabel: `lnkMiniMapRev`, x: -12 });
|
|
7793
|
+
}, g_lblPosObj.lnkMiniMapRev)
|
|
7794
|
+
);
|
|
7795
|
+
createScText(lnkMiniMapRev, `MiniMapRev`, { targetLabel: `lnkMiniMapRev`, x: -12 });
|
|
7796
|
+
}
|
|
7797
|
+
};
|
|
7798
|
+
|
|
7583
7799
|
/**
|
|
7584
7800
|
* 譜面初期化処理
|
|
7585
7801
|
* - 譜面の基本設定(キー数、初期速度、リバース、ゲージ設定)をここで行う
|
|
@@ -7768,6 +7984,7 @@ const setDifficulty = (_initFlg) => {
|
|
|
7768
7984
|
drawDensityGraph(g_stateObj.scoreId);
|
|
7769
7985
|
makeDifInfo(g_stateObj.scoreId);
|
|
7770
7986
|
makeHighScore(g_stateObj.scoreId);
|
|
7987
|
+
drawMinimap(g_stateObj.scoreId);
|
|
7771
7988
|
}
|
|
7772
7989
|
|
|
7773
7990
|
// 楽曲データの表示
|
|
@@ -7901,6 +8118,9 @@ const createOptionWindow = _sprite => {
|
|
|
7901
8118
|
|
|
7902
8119
|
$id(`detail${g_stateObj.scoreDetail}`).visibility = `visible`;
|
|
7903
8120
|
document.getElementById(`lnk${g_stateObj.scoreDetail}G`).classList.replace(g_cssObj.button_Default, g_cssObj.button_Setting);
|
|
8121
|
+
|
|
8122
|
+
document.getElementById(`lnkMiniMapRev`).style.display =
|
|
8123
|
+
g_stateObj.scoreDetail === `MiniMap` && g_stateObj.scoreDetailViewFlg ? C_DIS_INHERIT : C_DIS_NONE;
|
|
7904
8124
|
};
|
|
7905
8125
|
|
|
7906
8126
|
multiAppend(scoreDetail,
|
|
@@ -7908,6 +8128,7 @@ const createOptionWindow = _sprite => {
|
|
|
7908
8128
|
createScoreDetail(`Density`),
|
|
7909
8129
|
createScoreDetail(`ToolDif`, false),
|
|
7910
8130
|
createScoreDetail(`HighScore`, false),
|
|
8131
|
+
createScoreDetail(`MiniMap`, false),
|
|
7911
8132
|
);
|
|
7912
8133
|
g_settings.scoreDetails.forEach((sd, j) => {
|
|
7913
8134
|
scoreDetail.appendChild(
|
|
@@ -7943,6 +8164,8 @@ const createOptionWindow = _sprite => {
|
|
|
7943
8164
|
if (_resetFlg) {
|
|
7944
8165
|
g_shortcutObj.option.KeyQ.id = g_settings.scoreDetailCursors[0];
|
|
7945
8166
|
}
|
|
8167
|
+
document.getElementById(`lnkMiniMapRev`).style.display =
|
|
8168
|
+
g_stateObj.scoreDetail === `MiniMap` && g_stateObj.scoreDetailViewFlg ? C_DIS_INHERIT : C_DIS_NONE;
|
|
7946
8169
|
};
|
|
7947
8170
|
|
|
7948
8171
|
// ---------------------------------------------------
|
|
@@ -8059,6 +8282,7 @@ const createOptionWindow = _sprite => {
|
|
|
8059
8282
|
fadeinSlider.value = g_stateObj.fadein;
|
|
8060
8283
|
lnkFadein.textContent = `${g_stateObj.fadein}${g_lblNameObj.percent}`;
|
|
8061
8284
|
updateSettingSummary();
|
|
8285
|
+
drawMinimap(g_stateObj.scoreId);
|
|
8062
8286
|
};
|
|
8063
8287
|
|
|
8064
8288
|
multiAppend(spriteList.fadein,
|
|
@@ -8077,6 +8301,7 @@ const createOptionWindow = _sprite => {
|
|
|
8077
8301
|
fadeinSlider.addEventListener(`input`, () => {
|
|
8078
8302
|
g_stateObj.fadein = inputSlider(fadeinSlider, lnkFadein, `fadein`);
|
|
8079
8303
|
updateSettingSummary();
|
|
8304
|
+
drawMinimap(g_stateObj.scoreId);
|
|
8080
8305
|
}, false);
|
|
8081
8306
|
|
|
8082
8307
|
// ---------------------------------------------------
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2019/11/19
|
|
8
|
-
* Revised : 2026/04/
|
|
8
|
+
* Revised : 2026/04/19 (v47.0.0)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -213,6 +213,8 @@ const updateWindowSiz = () => {
|
|
|
213
213
|
difFilter: { x: 0, y: 66, w: 140, h: 204 + g_sHeight - 500, overflow: C_DIS_AUTO, pointerEvents: C_DIS_AUTO },
|
|
214
214
|
displaySprite: { x: 25, y: 30, w: (g_sWidth - 450) / 2, h: g_limitObj.setLblHeight * 5 },
|
|
215
215
|
scoreDetail: { x: 20, y: 85, w: (g_sWidth - 500) / 2 + 420, h: 245, visibility: `hidden`, pointerEvents: C_DIS_AUTO },
|
|
216
|
+
detailMiniMapHeader: { x: 110, y: 0, w: (g_sWidth - 500) / 2 + 310, h: 15 },
|
|
217
|
+
detailMiniMapSub: { x: 110, y: 15, w: (g_sWidth - 500) / 2 + 310, h: 230, overflow: C_DIS_AUTO, pointerEvents: C_DIS_AUTO },
|
|
216
218
|
detailObj: { w: (g_sWidth - 500) / 2 + 420, h: 230, visibility: `hidden` },
|
|
217
219
|
keyconSprite: { y: 105, h: g_sHeight - 105, overflow: C_DIS_AUTO },
|
|
218
220
|
loader: { y: g_sHeight - 10, h: 10, backgroundColor: `#333333` },
|
|
@@ -513,6 +515,9 @@ const updateWindowSiz = () => {
|
|
|
513
515
|
btnSpdCursorR: {
|
|
514
516
|
x: 100, y: 180, w: 15, h: 20, siz: 12,
|
|
515
517
|
},
|
|
518
|
+
lnkMiniMapRev: {
|
|
519
|
+
w: g_limitObj.difCoverWidth, h: 20, borderStyle: `solid`,
|
|
520
|
+
},
|
|
516
521
|
|
|
517
522
|
/** ディスプレイ画面 */
|
|
518
523
|
scMsg: {
|
|
@@ -1170,6 +1175,7 @@ const g_stateObj = {
|
|
|
1170
1175
|
scoreDetailViewFlg: false,
|
|
1171
1176
|
scoreDetail: `Speed`,
|
|
1172
1177
|
settingSummaryVisible: false,
|
|
1178
|
+
miniMapRevFlg: false,
|
|
1173
1179
|
|
|
1174
1180
|
d_stepzone: C_FLG_ON,
|
|
1175
1181
|
d_judgment: C_FLG_ON,
|
|
@@ -1329,7 +1335,7 @@ const g_settings = {
|
|
|
1329
1335
|
opacitys: [10, 25, 50, 75, 100],
|
|
1330
1336
|
opacityNum: 0,
|
|
1331
1337
|
|
|
1332
|
-
scoreDetailDefs: [`Density`, `Speed`, `ToolDif`, `HighScore`],
|
|
1338
|
+
scoreDetailDefs: [`Density`, `Speed`, `ToolDif`, `HighScore`, `MiniMap`],
|
|
1333
1339
|
scoreDetails: [],
|
|
1334
1340
|
scoreDetailCursors: [],
|
|
1335
1341
|
|
|
@@ -2709,12 +2715,15 @@ const g_shortcutObj = {
|
|
|
2709
2715
|
Digit2: { id: `lnkSpeedG` },
|
|
2710
2716
|
Digit3: { id: `lnkToolDifG` },
|
|
2711
2717
|
Digit4: { id: `lnkHighScoreG` },
|
|
2718
|
+
Digit5: { id: `lnkMiniMapG` },
|
|
2712
2719
|
Numpad1: { id: `lnkDensityG` },
|
|
2713
2720
|
Numpad2: { id: `lnkSpeedG` },
|
|
2714
2721
|
Numpad3: { id: `lnkToolDifG` },
|
|
2715
2722
|
Numpad4: { id: `lnkHighScoreG` },
|
|
2723
|
+
Numpad5: { id: `lnkMiniMapG` },
|
|
2716
2724
|
KeyQ: { id: `lnkDensityG` },
|
|
2717
2725
|
KeyP: { id: `lnkDifInfo` },
|
|
2726
|
+
KeyX: { id: `lnkMiniMapRev` },
|
|
2718
2727
|
KeyZ: { id: `btnSave` },
|
|
2719
2728
|
ControlLeft_KeyC: { id: `` },
|
|
2720
2729
|
ControlRight_KeyC: { id: `` },
|
|
@@ -2745,12 +2754,15 @@ const g_shortcutObj = {
|
|
|
2745
2754
|
Digit2: { id: `lnkSpeedG` },
|
|
2746
2755
|
Digit3: { id: `lnkToolDifG` },
|
|
2747
2756
|
Digit4: { id: `lnkHighScoreG` },
|
|
2757
|
+
Digit5: { id: `lnkMiniMapG` },
|
|
2748
2758
|
Numpad1: { id: `lnkDensityG` },
|
|
2749
2759
|
Numpad2: { id: `lnkSpeedG` },
|
|
2750
2760
|
Numpad3: { id: `lnkToolDifG` },
|
|
2751
2761
|
Numpad4: { id: `lnkHighScoreG` },
|
|
2762
|
+
Numpad5: { id: `lnkMiniMapG` },
|
|
2752
2763
|
KeyQ: { id: `lnkDensityG` },
|
|
2753
2764
|
KeyP: { id: `lnkDifInfo` },
|
|
2765
|
+
KeyX: { id: `lnkMiniMapRev` },
|
|
2754
2766
|
ControlLeft_KeyC: { id: `` },
|
|
2755
2767
|
ControlRight_KeyC: { id: `` },
|
|
2756
2768
|
KeyC: { id: `lnkHighScore`, reset: true },
|
|
@@ -4433,6 +4445,8 @@ const g_lblNameObj = {
|
|
|
4433
4445
|
s_arrow: `Arrow`,
|
|
4434
4446
|
s_frz: `Frz`,
|
|
4435
4447
|
|
|
4448
|
+
s_rev: `MapScroll`,
|
|
4449
|
+
|
|
4436
4450
|
d_StepZone: `StepZone`,
|
|
4437
4451
|
d_Judgment: `Judgment`,
|
|
4438
4452
|
d_FastSlow: `FastSlow`,
|