danoniplus 47.3.2 → 47.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/js/danoni_main.js +73 -71
- package/js/lib/danoni_constants.js +11 -9
- 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/29
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 47.
|
|
12
|
-
const g_revisedDate = `2026/04/
|
|
11
|
+
const g_version = `Ver 47.4.1`;
|
|
12
|
+
const g_revisedDate = `2026/04/29`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -3385,17 +3385,15 @@ const storeBaseData = (_scoreId, _scoreObj, _keyCtrlPtn) => {
|
|
|
3385
3385
|
mmWidthBase: (g_sWidth - 500) / 2 + 290,
|
|
3386
3386
|
mmMarginY: 2,
|
|
3387
3387
|
get laneWidth() {
|
|
3388
|
-
return Math.min(
|
|
3388
|
+
return Math.min((this.mmWidthBase - this.timeMargin) / keyNum, 40);
|
|
3389
3389
|
},
|
|
3390
3390
|
get logicalWidth() {
|
|
3391
|
-
|
|
3391
|
+
const logicalWidth = this.timeMargin + (this.laneWidth * keyNum);
|
|
3392
|
+
return Math.ceil(logicalWidth * this.dpr) / this.dpr;
|
|
3392
3393
|
}
|
|
3393
3394
|
},
|
|
3394
3395
|
};
|
|
3395
3396
|
|
|
3396
|
-
// ヘッダー生成
|
|
3397
|
-
g_detailObj.scoreMinimapHeader[_scoreId] = createMinimapHeader(g_detailObj.miniMapParams[_scoreId].config, _keyCtrlPtn, keyNum);
|
|
3398
|
-
|
|
3399
3397
|
// Canvas保存用配列を空で初期化
|
|
3400
3398
|
g_detailObj.scoreMinimap[_scoreId] = null;
|
|
3401
3399
|
g_detailObj.scoreMinimapReverse[_scoreId] = null;
|
|
@@ -3510,7 +3508,7 @@ const createMinimapHeader = (_config, _keyCtrlPtn, _keyNum) => {
|
|
|
3510
3508
|
for (let j = 0; j < _keyNum; j++) {
|
|
3511
3509
|
// config.laneWidth を使って中央座標を計算
|
|
3512
3510
|
const x = timeMargin + j * laneWidth + laneWidth / 2;
|
|
3513
|
-
const keyText = g_kCd[g_keyObj[`keyCtrl${_keyCtrlPtn}`][j][0]];
|
|
3511
|
+
const keyText = g_kCd[g_keyObj[`keyCtrl${_keyCtrlPtn}`][j][0]].split(` `).join(``);
|
|
3514
3512
|
|
|
3515
3513
|
ctx.fillText(keyText, x, headerHeight / 2 + 2); // 視覚的な中央調整で +2px
|
|
3516
3514
|
}
|
|
@@ -7290,7 +7288,6 @@ const drawSpeedGraph = _scoreId => {
|
|
|
7290
7288
|
speed: { frame: [0], speed: [1], cnt: 0, strokeColor: g_graphColorObj.speed },
|
|
7291
7289
|
boost: { frame: [0], speed: [1], cnt: 0, strokeColor: g_graphColorObj.boost }
|
|
7292
7290
|
};
|
|
7293
|
-
const dpr = window.devicePixelRatio || 1;
|
|
7294
7291
|
|
|
7295
7292
|
const tmpSpeedPoint = [0];
|
|
7296
7293
|
Object.keys(speedObj).forEach(speedType => {
|
|
@@ -7509,7 +7506,7 @@ const updateScoreDetailLabel = (_name, _label, _value, _pos = 0, _labelname = _l
|
|
|
7509
7506
|
const baseLabel = (_bLabel, _bLabelname, _bAlign) =>
|
|
7510
7507
|
document.getElementById(`detail${_name}`).appendChild(
|
|
7511
7508
|
createDivCss2Label(_bLabel, _bLabelname, {
|
|
7512
|
-
x: 10, y:
|
|
7509
|
+
x: 10, y: 130 + _pos * 16, w: 100, h: 16, siz: g_limitObj.difSelectorSiz, align: _bAlign,
|
|
7513
7510
|
})
|
|
7514
7511
|
);
|
|
7515
7512
|
if (document.getElementById(`data${_label}`) === null) {
|
|
@@ -7880,9 +7877,14 @@ const drawMinimap = (_scoreId, { _initFlg = false, _fadeinFlg = false } = {}) =>
|
|
|
7880
7877
|
? g_detailObj.scoreMinimapReverse[_scoreId]
|
|
7881
7878
|
: g_detailObj.scoreMinimap[_scoreId];
|
|
7882
7879
|
|
|
7880
|
+
const params = g_detailObj.miniMapParams[_scoreId];
|
|
7881
|
+
const kPtn = params._keyCtrlPtn;
|
|
7882
|
+
if (!g_detailObj.scoreMinimapHeader[kPtn]) {
|
|
7883
|
+
// ヘッダーはキー種ごとに共通なので、未作成の場合のみ生成してキャッシュ
|
|
7884
|
+
g_detailObj.scoreMinimapHeader[kPtn] = createMinimapHeader(params.config, kPtn, params._keyNum);
|
|
7885
|
+
}
|
|
7883
7886
|
if (!savedCanvases) {
|
|
7884
7887
|
// 未作成の場合のみミニマップを生成(Lazy Generation)
|
|
7885
|
-
const params = g_detailObj.miniMapParams[_scoreId];
|
|
7886
7888
|
savedCanvases = generateMinimapData(params, isRev);
|
|
7887
7889
|
|
|
7888
7890
|
// 生成したものをキャッシュに保存
|
|
@@ -7896,7 +7898,7 @@ const drawMinimap = (_scoreId, { _initFlg = false, _fadeinFlg = false } = {}) =>
|
|
|
7896
7898
|
// --- ヘッダー部分 ---
|
|
7897
7899
|
const detailMiniMapHeader = createEmptySprite(detailMiniMap, `detailMiniMapHeader`, g_windowObj.detailMiniMapHeader);
|
|
7898
7900
|
$id(`detailMiniMapHeader`).top = (g_stateObj.miniMapRevFlg ? 230 + g_sHeight - 500 : 0) + `px`;
|
|
7899
|
-
detailMiniMapHeader.appendChild(g_detailObj.scoreMinimapHeader[
|
|
7901
|
+
detailMiniMapHeader.appendChild(g_detailObj.scoreMinimapHeader[kPtn]);
|
|
7900
7902
|
|
|
7901
7903
|
// --- メイン(譜面)部分 ---
|
|
7902
7904
|
const detailMiniMapSub = createEmptySprite(detailMiniMap, `detailMiniMapSub`, g_windowObj.detailMiniMapSub);
|
|
@@ -8243,7 +8245,6 @@ const createOptionWindow = _sprite => {
|
|
|
8243
8245
|
graphObj.style.top = wUnit(0);
|
|
8244
8246
|
graphObj.style.position = `absolute`;
|
|
8245
8247
|
graphObj.style.background = j === 0 ? bkColor : `#ffffff00`;
|
|
8246
|
-
graphObj.style.border = `dotted ${wUnit(2)}`;
|
|
8247
8248
|
const ctx = graphObj.getContext(`2d`);
|
|
8248
8249
|
ctx.scale(dpr, dpr);
|
|
8249
8250
|
|
|
@@ -11784,6 +11785,24 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
11784
11785
|
/** Motionの適用フレーム数 */
|
|
11785
11786
|
g_workObj.motionFrame = [];
|
|
11786
11787
|
|
|
11788
|
+
const boostData = [];
|
|
11789
|
+
if (hasArrayList(_dataObj.boostData, 2)) {
|
|
11790
|
+
const _data = _dataObj.boostData.concat();
|
|
11791
|
+
for (let k = 0; k < _data.length; k += 2) {
|
|
11792
|
+
boostData.push({ frame: _data[k], spd: getSpeedFactor(_data[k + 1]) });
|
|
11793
|
+
}
|
|
11794
|
+
if (boostData.length > 0 && boostData[0].frame > 0) {
|
|
11795
|
+
boostData.unshift({ frame: 0, spd: 1 });
|
|
11796
|
+
}
|
|
11797
|
+
}
|
|
11798
|
+
const getSpdByFrame = _targetFrame => {
|
|
11799
|
+
// targetFrame 以下の frame を持つ要素の中で、最後(最新)のものを見つける
|
|
11800
|
+
const result = boostData.findLast((item) => _targetFrame >= item.frame);
|
|
11801
|
+
|
|
11802
|
+
// 該当するものがない場合(frame: 0 未満など)のフォールバック
|
|
11803
|
+
return result ? result.spd : 1;
|
|
11804
|
+
};
|
|
11805
|
+
|
|
11787
11806
|
/**
|
|
11788
11807
|
* 矢印・フリーズアローのデータ格納処理
|
|
11789
11808
|
* @param {number} _j
|
|
@@ -11797,9 +11816,14 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
11797
11816
|
* @param {number} object.arrivalFrame
|
|
11798
11817
|
* @param {number} object.motionFrame
|
|
11799
11818
|
*/
|
|
11800
|
-
const setNotes = (_j, _k, _data, _startPoint, _header, _frzFlg = false, { initY, initBoostY, arrivalFrame, motionFrame } = {}) => {
|
|
11819
|
+
const setNotes = (_j, _k, _data, _startPoint, _header, _frzFlg = false, { initY, initBoostY, arrivalFrame, motionFrame, boostSpd } = {}) => {
|
|
11801
11820
|
if (_startPoint >= 0) {
|
|
11802
|
-
const arrowAttrs = {
|
|
11821
|
+
const arrowAttrs = {
|
|
11822
|
+
pos: _j, initY, initBoostY, arrivalFrame, motionFrame, boostSpd,
|
|
11823
|
+
get boostDir() {
|
|
11824
|
+
return Math.sign(this.boostSpd);
|
|
11825
|
+
}
|
|
11826
|
+
};
|
|
11803
11827
|
if (g_workObj[`mk${_header}Arrow`][_startPoint] === undefined) {
|
|
11804
11828
|
g_workObj[`mk${_header}Arrow`][_startPoint] = [arrowAttrs];
|
|
11805
11829
|
} else {
|
|
@@ -11863,8 +11887,10 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
11863
11887
|
if (_frzFlg) {
|
|
11864
11888
|
g_workObj[`mk${camelHeader}Length`][_j] = [];
|
|
11865
11889
|
}
|
|
11866
|
-
setNotes(_j, lastk, _data, startPoint[lastk], camelHeader, _frzFlg,
|
|
11867
|
-
|
|
11890
|
+
setNotes(_j, lastk, _data, startPoint[lastk], camelHeader, _frzFlg, {
|
|
11891
|
+
initY: tmpObj.startY, initBoostY: g_workObj.initBoostY[frmPrev],
|
|
11892
|
+
arrivalFrame: tmpObj.arrivalFrm, motionFrame: tmpObj.motionFrm, boostSpd: getSpdByFrame(arrowArrivalFrm)
|
|
11893
|
+
});
|
|
11868
11894
|
|
|
11869
11895
|
// 矢印は1つずつ、フリーズアローは2つで1セット
|
|
11870
11896
|
for (let k = lastk - setcnt; k >= 0; k -= setcnt) {
|
|
@@ -11943,9 +11969,10 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
11943
11969
|
}
|
|
11944
11970
|
|
|
11945
11971
|
// 出現タイミングを保存
|
|
11946
|
-
setNotes(_j, k, _data, startPoint[k], camelHeader, _frzFlg,
|
|
11947
|
-
|
|
11948
|
-
|
|
11972
|
+
setNotes(_j, k, _data, startPoint[k], camelHeader, _frzFlg, {
|
|
11973
|
+
initY: tmpObj.startY, initBoostY: g_workObj.initBoostY[frmPrev],
|
|
11974
|
+
arrivalFrame: tmpObj.arrivalFrm, motionFrame: tmpObj.motionFrm, boostSpd: getSpdByFrame(arrowArrivalFrm)
|
|
11975
|
+
});
|
|
11949
11976
|
}
|
|
11950
11977
|
};
|
|
11951
11978
|
|
|
@@ -11960,30 +11987,6 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
|
|
|
11960
11987
|
calcNotes(j, _dataObj.dummyFrzData[j], `dummyFrz`, true);
|
|
11961
11988
|
}
|
|
11962
11989
|
|
|
11963
|
-
// 個別加速のタイミング更新
|
|
11964
|
-
const calcBoostData = _data => {
|
|
11965
|
-
if (hasArrayList(_data, 2)) {
|
|
11966
|
-
let delIdx = 0;
|
|
11967
|
-
for (let k = _data.length - 2; k >= 0; k -= 2) {
|
|
11968
|
-
const tmpObj = getArrowStartFrame(_data[k], _speedOnFrame);
|
|
11969
|
-
if (tmpObj.frm < g_scoreObj.frameNum) {
|
|
11970
|
-
_data[k] = g_scoreObj.frameNum;
|
|
11971
|
-
delIdx = k;
|
|
11972
|
-
break;
|
|
11973
|
-
} else {
|
|
11974
|
-
_data[k] = tmpObj.frm;
|
|
11975
|
-
}
|
|
11976
|
-
_data[k + 1] = getSpeedFactor(_data[k + 1]);
|
|
11977
|
-
}
|
|
11978
|
-
for (let k = 0; k < delIdx; k++) {
|
|
11979
|
-
_data.shift();
|
|
11980
|
-
}
|
|
11981
|
-
return _data;
|
|
11982
|
-
}
|
|
11983
|
-
return [];
|
|
11984
|
-
};
|
|
11985
|
-
g_workObj.boostData = calcBoostData(_dataObj.boostData);
|
|
11986
|
-
|
|
11987
11990
|
/**
|
|
11988
11991
|
* 色変化・モーションデータ・スクロール反転データのタイミング更新
|
|
11989
11992
|
* - この関数を使用する場合、配列グループの先頭2つが「フレーム数、矢印番号」となっていないと動作しない
|
|
@@ -12954,7 +12957,6 @@ const mainInit = () => {
|
|
|
12954
12957
|
const dummyArrowCnts = fillArray(keyNum);
|
|
12955
12958
|
const dummyFrzCnts = fillArray(keyNum);
|
|
12956
12959
|
let speedCnts = 0;
|
|
12957
|
-
let boostCnts = 0;
|
|
12958
12960
|
let keychCnts = 0;
|
|
12959
12961
|
|
|
12960
12962
|
g_workObj.flatMode = g_stateObj.d_stepzone === `FlatBar` ||
|
|
@@ -13044,10 +13046,8 @@ const mainInit = () => {
|
|
|
13044
13046
|
// EffectのArrowEffect追加処理
|
|
13045
13047
|
g_effectFunc.get(g_stateObj.effect)();
|
|
13046
13048
|
|
|
13047
|
-
//
|
|
13049
|
+
// 現在の矢印・フリーズアローの速度の初期化 (速度変化時に直す)
|
|
13048
13050
|
g_workObj.currentSpeed = 2;
|
|
13049
|
-
g_workObj.boostSpd = 1;
|
|
13050
|
-
g_workObj.boostDir = 1;
|
|
13051
13051
|
|
|
13052
13052
|
// 開始位置、楽曲再生位置の設定
|
|
13053
13053
|
const firstFrame = g_scoreObj.frameNum;
|
|
@@ -13557,6 +13557,10 @@ const mainInit = () => {
|
|
|
13557
13557
|
}
|
|
13558
13558
|
},
|
|
13559
13559
|
|
|
13560
|
+
get dummyArrowON() {
|
|
13561
|
+
return this.dummyArrowOFF;
|
|
13562
|
+
},
|
|
13563
|
+
|
|
13560
13564
|
// フリーズアロー(成功時)
|
|
13561
13565
|
frzOK: (_j, _k, _frzName, _cnt) => {
|
|
13562
13566
|
judgeKita(_cnt);
|
|
@@ -13600,10 +13604,11 @@ const mainInit = () => {
|
|
|
13600
13604
|
|
|
13601
13605
|
// ダミーフリーズアロー(キーを離したときの処理)
|
|
13602
13606
|
// ※処理上通ることはないが、統一のために定義
|
|
13603
|
-
dummyFrzKeyUp
|
|
13607
|
+
get dummyFrzKeyUp() {
|
|
13608
|
+
return this.dummyFrzNG;
|
|
13609
|
+
}
|
|
13604
13610
|
|
|
13605
13611
|
};
|
|
13606
|
-
judgeMotionFunc.dummyArrowON = (_j, _arrowName, _cnt) => judgeMotionFunc.dummyArrowOFF(_j, _arrowName, _cnt);
|
|
13607
13612
|
|
|
13608
13613
|
/**
|
|
13609
13614
|
* 次矢印・フリーズアローへ判定を移すかチェック
|
|
@@ -13641,8 +13646,12 @@ const mainInit = () => {
|
|
|
13641
13646
|
},
|
|
13642
13647
|
|
|
13643
13648
|
arrowON: (_j, _k, _cnt) => true,
|
|
13644
|
-
dummyArrowOFF
|
|
13645
|
-
|
|
13649
|
+
get dummyArrowOFF() {
|
|
13650
|
+
return this.arrowON;
|
|
13651
|
+
},
|
|
13652
|
+
get dummyArrowON() {
|
|
13653
|
+
return this.arrowON;
|
|
13654
|
+
},
|
|
13646
13655
|
|
|
13647
13656
|
frzOFF: (_j, _k, _cnt) => {
|
|
13648
13657
|
|
|
@@ -13682,10 +13691,8 @@ const mainInit = () => {
|
|
|
13682
13691
|
changeHitFrz(_j, _k, `dummyFrz`);
|
|
13683
13692
|
}
|
|
13684
13693
|
},
|
|
13685
|
-
dummyFrzON
|
|
13686
|
-
|
|
13687
|
-
changeHitFrz(_j, _k, `dummyFrz`);
|
|
13688
|
-
}
|
|
13694
|
+
get dummyFrzON() {
|
|
13695
|
+
return this.dummyFrzOFF;
|
|
13689
13696
|
},
|
|
13690
13697
|
};
|
|
13691
13698
|
|
|
@@ -13718,8 +13725,8 @@ const mainInit = () => {
|
|
|
13718
13725
|
|
|
13719
13726
|
const arrowName = `${_name}${_j}_${_arrowCnt}`;
|
|
13720
13727
|
const stepY = C_STEP_Y + g_posObj.reverseStepY * dividePos;
|
|
13721
|
-
const firstPosY = stepY + (_attrs.initY *
|
|
13722
|
-
_attrs.initBoostY *
|
|
13728
|
+
const firstPosY = stepY + (_attrs.initY * _attrs.boostSpd +
|
|
13729
|
+
_attrs.initBoostY * _attrs.boostDir) * g_workObj.scrollDir[_j];
|
|
13723
13730
|
|
|
13724
13731
|
const arrowRoot = createEmptySprite(arrowSprite[g_workObj.dividePos[_j]], arrowName, {
|
|
13725
13732
|
x: 0, y: 0, w: C_ARW_WIDTH, h: C_ARW_WIDTH,
|
|
@@ -13733,13 +13740,13 @@ const mainInit = () => {
|
|
|
13733
13740
|
// 生存フレーム数 (ストップ分除去、個別加速/Motionオプション用)
|
|
13734
13741
|
boostCnt: _attrs.motionFrame,
|
|
13735
13742
|
// 個別加速量
|
|
13736
|
-
boostSpd:
|
|
13743
|
+
boostSpd: _attrs.boostSpd,
|
|
13737
13744
|
// ステップゾーン位置 (0: デフォルト, 1: リバース)
|
|
13738
13745
|
dividePos: dividePos,
|
|
13739
13746
|
// スクロール方向 (1: デフォルト, -1: リバース)
|
|
13740
13747
|
dir: g_workObj.scrollDir[_j],
|
|
13741
13748
|
// 個別加速方向 (1: 順方向加速, -1: 逆方向加速)
|
|
13742
|
-
boostDir:
|
|
13749
|
+
boostDir: _attrs.boostDir,
|
|
13743
13750
|
// 前フレーム時の位置 (判定で使用)
|
|
13744
13751
|
prevY: firstPosY,
|
|
13745
13752
|
// 現フレーム時の位置
|
|
@@ -13834,9 +13841,9 @@ const mainInit = () => {
|
|
|
13834
13841
|
const frzNo = `${_j}_${_arrowCnt}`;
|
|
13835
13842
|
const frzName = `${_name}${frzNo}`;
|
|
13836
13843
|
const stepY = C_STEP_Y + g_posObj.reverseStepY * dividePos;
|
|
13837
|
-
const firstPosY = stepY + (_attrs.initY *
|
|
13838
|
-
_attrs.initBoostY *
|
|
13839
|
-
const firstBarLength = g_workObj[`mk${toCapitalize(_name)}Length`][_j][(_arrowCnt - 1) * 2] *
|
|
13844
|
+
const firstPosY = stepY + (_attrs.initY * _attrs.boostSpd +
|
|
13845
|
+
_attrs.initBoostY * _attrs.boostDir) * g_workObj.scrollDir[_j];
|
|
13846
|
+
const firstBarLength = g_workObj[`mk${toCapitalize(_name)}Length`][_j][(_arrowCnt - 1) * 2] * _attrs.boostSpd;
|
|
13840
13847
|
|
|
13841
13848
|
const frzRoot = createEmptySprite(arrowSprite[g_workObj.dividePos[_j]], frzName, {
|
|
13842
13849
|
x: 0, y: 0, w: C_ARW_WIDTH, h: C_ARW_WIDTH + firstBarLength,
|
|
@@ -13864,13 +13871,13 @@ const mainInit = () => {
|
|
|
13864
13871
|
// キーを離していたフレーム数 (基準値超えでNG判定)
|
|
13865
13872
|
keyUpFrame: 0,
|
|
13866
13873
|
// 個別加速量
|
|
13867
|
-
boostSpd:
|
|
13874
|
+
boostSpd: _attrs.boostSpd,
|
|
13868
13875
|
// ステップゾーン位置 (0: デフォルト, 1: リバース)
|
|
13869
13876
|
dividePos: dividePos,
|
|
13870
13877
|
// スクロール方向 (1: デフォルト, -1: リバース)
|
|
13871
13878
|
dir: g_workObj.scrollDir[_j],
|
|
13872
13879
|
// 個別加速方向 (1: 順方向加速, -1: 逆方向加速)
|
|
13873
|
-
boostDir:
|
|
13880
|
+
boostDir: _attrs.boostDir,
|
|
13874
13881
|
// 現フレーム時のフリーズアロー本体の位置
|
|
13875
13882
|
y: firstPosY,
|
|
13876
13883
|
// フリーズアロー(帯)の相対位置
|
|
@@ -14082,11 +14089,6 @@ const mainInit = () => {
|
|
|
14082
14089
|
g_workObj.currentSpeed = g_workObj.speedData[speedCnts + 1];
|
|
14083
14090
|
speedCnts += 2;
|
|
14084
14091
|
}
|
|
14085
|
-
while (currentFrame >= g_workObj.boostData?.[boostCnts]) {
|
|
14086
|
-
g_workObj.boostSpd = g_workObj.boostData[boostCnts + 1];
|
|
14087
|
-
g_workObj.boostDir = (g_workObj.boostSpd > 0 ? 1 : -1);
|
|
14088
|
-
boostCnts += 2;
|
|
14089
|
-
}
|
|
14090
14092
|
|
|
14091
14093
|
objList.forEach(header => {
|
|
14092
14094
|
const headerU = toCapitalize(header);
|
|
@@ -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/29 (v47.4.1)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -489,31 +489,31 @@ const updateWindowSiz = () => {
|
|
|
489
489
|
x: 290, y: 145, w: 120, h: 20, siz: 50, align: C_ALIGN_CENTER,
|
|
490
490
|
},
|
|
491
491
|
lblSpdHeader: {
|
|
492
|
-
x: 5, y:
|
|
492
|
+
x: 5, y: 190, w: 100, h: 20, siz: g_limitObj.difSelectorSiz, align: C_ALIGN_LEFT,
|
|
493
493
|
},
|
|
494
494
|
lblSpdBase: {
|
|
495
|
-
x: 0, y:
|
|
495
|
+
x: 0, y: 210, w: 40, h: 20, siz: 11.5, fontWeight: `bold`,
|
|
496
496
|
},
|
|
497
497
|
lblSpdOverall: {
|
|
498
|
-
x: 40, y:
|
|
498
|
+
x: 40, y: 210, w: 40, h: 20, siz: 11.5,
|
|
499
499
|
color: g_graphColorObj.speedChara, fontWeight: `bold`,
|
|
500
500
|
},
|
|
501
501
|
lblSpdBoost: {
|
|
502
|
-
x: 80, y:
|
|
502
|
+
x: 80, y: 210, w: 40, h: 20, siz: 11.5,
|
|
503
503
|
color: g_graphColorObj.boostChara, fontWeight: `bold`,
|
|
504
504
|
},
|
|
505
505
|
lblSpdTotal: {
|
|
506
|
-
x: 5, y:
|
|
506
|
+
x: 5, y: 225, w: 100, h: 20, siz: g_limitObj.difSelectorSiz,
|
|
507
507
|
align: C_ALIGN_LEFT, fontWeight: `bold`,
|
|
508
508
|
},
|
|
509
509
|
lblSpdFrame: {
|
|
510
|
-
x: 70, y:
|
|
510
|
+
x: 70, y: 228, w: 50, h: 20, siz: 12, fontWeight: `bold`,
|
|
511
511
|
},
|
|
512
512
|
btnSpdCursorL: {
|
|
513
|
-
x: 85, y:
|
|
513
|
+
x: 85, y: 190, w: 15, h: 20, siz: 12,
|
|
514
514
|
},
|
|
515
515
|
btnSpdCursorR: {
|
|
516
|
-
x: 100, y:
|
|
516
|
+
x: 100, y: 190, w: 15, h: 20, siz: 12,
|
|
517
517
|
},
|
|
518
518
|
lnkMiniMapRev: {
|
|
519
519
|
w: g_limitObj.difCoverWidth, h: 20, borderStyle: `solid`,
|
|
@@ -4844,6 +4844,7 @@ const g_lang_msgObj = {
|
|
|
4844
4844
|
lnkDensityG: `譜面の密度状況を表示`,
|
|
4845
4845
|
lnkToolDifG: `譜面の難易度、矢印・フリーズアローの分布状況を表示`,
|
|
4846
4846
|
lnkHighScoreG: `譜面のハイスコアを表示`,
|
|
4847
|
+
lnkMiniMapG: `譜面内容をミニマップで表示`,
|
|
4847
4848
|
lnkDifInfo: `譜面の難易度、矢印・フリーズアローの分布状況をクリップボードへコピー`,
|
|
4848
4849
|
lnkResetHighScore: `譜面のハイスコア情報を消去`,
|
|
4849
4850
|
lnkHighScore: `譜面のハイスコアをクリップボードへコピー`,
|
|
@@ -4944,6 +4945,7 @@ const g_lang_msgObj = {
|
|
|
4944
4945
|
lnkDensityG: `Displays the density status of the chart.`,
|
|
4945
4946
|
lnkToolDifG: `Displays the difficulty level of the chart and the distribution of arrows and freeze arrows.`,
|
|
4946
4947
|
lnkHighScoreG: `Displays the high score of the chart.`,
|
|
4948
|
+
lnkMiniMapG: `Display chart on the minimap.`,
|
|
4947
4949
|
lnkDifInfo: `Copy the difficulty of the chart and the distribution of arrows and freeze arrows to the clipboard.`,
|
|
4948
4950
|
lnkResetHighScore: `Erase the high score information in the chart.`,
|
|
4949
4951
|
lnkHighScore: `Copies the high score of the chart to the clipboard.`,
|