danoniplus 32.3.0 → 32.5.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/css/danoni_main.css +5 -4
- package/js/danoni_main.js +147 -36
- package/js/lib/danoni_constants.js +39 -23
- package/js/template/danoni_setting.js +9 -2
- package/package.json +1 -1
- package/skin/danoni_skin_default.css +5 -1
- package/skin/danoni_skin_light.css +5 -1
- package/skin/danoni_skin_skyblue.css +5 -1
package/css/danoni_main.css
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
本体cssファイル
|
|
5
5
|
|
|
6
6
|
Created : 2018/10/08
|
|
7
|
-
Revised :
|
|
7
|
+
Revised : 2023/06/09 (v32.4.0)
|
|
8
8
|
|
|
9
9
|
https://github.com/cwtickle/danoniplus
|
|
10
10
|
------------------------------------------ */
|
|
@@ -295,12 +295,13 @@ input[type="color"] {
|
|
|
295
295
|
|
|
296
296
|
.settings_gaugeDivCover {
|
|
297
297
|
border: 1px #666666 solid;
|
|
298
|
-
width:
|
|
298
|
+
width: 305px;
|
|
299
|
+
line-height: 14px;
|
|
299
300
|
}
|
|
300
301
|
|
|
301
302
|
.settings_gaugeDivTable {
|
|
302
303
|
display: table;
|
|
303
|
-
width:
|
|
304
|
+
width: 304px;
|
|
304
305
|
}
|
|
305
306
|
|
|
306
307
|
.settings_gaugeDivTableCol {
|
|
@@ -313,7 +314,7 @@ input[type="color"] {
|
|
|
313
314
|
}
|
|
314
315
|
|
|
315
316
|
.settings_gaugeEtc {
|
|
316
|
-
width:
|
|
317
|
+
width: 55px;
|
|
317
318
|
}
|
|
318
319
|
|
|
319
320
|
/* ライフゲージボーダー */
|
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 : 2023/06/
|
|
7
|
+
* Revised : 2023/06/24
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 32.
|
|
12
|
-
const g_revisedDate = `2023/06/
|
|
11
|
+
const g_version = `Ver 32.5.0`;
|
|
12
|
+
const g_revisedDate = `2023/06/24`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -3012,6 +3012,11 @@ const headerConvert = _dosObj => {
|
|
|
3012
3012
|
// フリーズアローの始点で通常矢印の判定を行うか(dotさんソース方式)
|
|
3013
3013
|
obj.frzStartjdgUse = setBoolVal(_dosObj.frzStartjdgUse ?? g_presetObj.frzStartjdgUse);
|
|
3014
3014
|
|
|
3015
|
+
// 空押し判定を行うか
|
|
3016
|
+
obj.excessiveJdgUse = setBoolVal(_dosObj.excessiveJdgUse ?? g_presetObj.excessiveJdgUse);
|
|
3017
|
+
g_stateObj.excessive = obj.excessiveJdgUse ? C_FLG_ON : C_FLG_OFF;
|
|
3018
|
+
g_settings.excessiveNum = obj.excessiveJdgUse ? 1 : 0;
|
|
3019
|
+
|
|
3015
3020
|
// 譜面名に制作者名を付加するかどうかのフラグ
|
|
3016
3021
|
obj.makerView = setBoolVal(_dosObj.makerView);
|
|
3017
3022
|
|
|
@@ -3103,10 +3108,14 @@ const headerConvert = _dosObj => {
|
|
|
3103
3108
|
obj.resultMotionSet = setBoolVal(_dosObj.resultMotionSet, true);
|
|
3104
3109
|
|
|
3105
3110
|
// 譜面明細の使用可否
|
|
3106
|
-
|
|
3111
|
+
const tmpDetails = _dosObj.scoreDetailUse?.split(`,`).filter(val => hasVal(val) && val !== `false`)
|
|
3112
|
+
.map(val => replaceStr(val, g_settings.scoreDetailTrans));
|
|
3113
|
+
g_settings.scoreDetails = g_settings.scoreDetailDefs.filter(val => tmpDetails?.includes(val) || tmpDetails === undefined);
|
|
3114
|
+
|
|
3107
3115
|
g_stateObj.scoreDetail = g_settings.scoreDetails[0] || ``;
|
|
3108
3116
|
g_settings.scoreDetailCursors = g_settings.scoreDetails.map(val => `lnk${val}G`);
|
|
3109
|
-
g_settings.scoreDetailCursors.push(`
|
|
3117
|
+
g_settings.scoreDetailCursors.push(`btnGraphB`);
|
|
3118
|
+
[`option`, `difSelector`].forEach(page => g_shortcutObj[page].KeyQ.id = g_settings.scoreDetailCursors[0]);
|
|
3110
3119
|
|
|
3111
3120
|
// 判定位置をBackgroundのON/OFFと連動してリセットする設定
|
|
3112
3121
|
obj.jdgPosReset = setBoolVal(_dosObj.jdgPosReset, true);
|
|
@@ -4565,10 +4574,10 @@ const drawSpeedGraph = _scoreId => {
|
|
|
4565
4574
|
const lineX = (speedType === `speed`) ? 125 : 210;
|
|
4566
4575
|
context.beginPath();
|
|
4567
4576
|
context.moveTo(lineX, 215);
|
|
4568
|
-
context.lineTo(lineX +
|
|
4577
|
+
context.lineTo(lineX + 25, 215);
|
|
4569
4578
|
context.stroke();
|
|
4570
4579
|
context.font = `${g_limitObj.difSelectorSiz}px ${getBasicFont()}`;
|
|
4571
|
-
context.fillText(speedType, lineX +
|
|
4580
|
+
context.fillText(g_lblNameObj[`s_${speedType}`], lineX + 30, 218);
|
|
4572
4581
|
|
|
4573
4582
|
updateScoreDetailLabel(`Speed`, `${speedType}S`, speedObj[speedType].cnt, j, g_lblNameObj[`s_${speedType}`]);
|
|
4574
4583
|
updateScoreDetailLabel(`Speed`, `avgD${speedType}`, avgSubX[j] === 1 ? `----` : `${(avgSubX[j]).toFixed(2)}x`, j + 4, g_lblNameObj[`s_avgD${speedType}`]);
|
|
@@ -5031,7 +5040,10 @@ const createOptionWindow = _sprite => {
|
|
|
5031
5040
|
};
|
|
5032
5041
|
|
|
5033
5042
|
if (g_settings.scoreDetails.length > 0) {
|
|
5034
|
-
spriteList.speed
|
|
5043
|
+
multiAppend(spriteList.speed,
|
|
5044
|
+
createCss2Button(`btnGraphB`, ``, _ => true, {
|
|
5045
|
+
x: -25, y: -60, w: 0, h: 0, opacity: 0, resetFunc: _ => setScoreDetail(true),
|
|
5046
|
+
}, g_cssObj.button_Mini),
|
|
5035
5047
|
createCss2Button(`btnGraph`, `i`, _ => true, {
|
|
5036
5048
|
x: -25, y: -60, w: 30, h: 30, siz: g_limitObj.jdgCharaSiz, title: g_msgObj.graph,
|
|
5037
5049
|
resetFunc: _ => setScoreDetail(), cxtFunc: _ => setScoreDetail(),
|
|
@@ -5080,7 +5092,7 @@ const createOptionWindow = _sprite => {
|
|
|
5080
5092
|
/**
|
|
5081
5093
|
* 譜面明細表示/非表示ボタンの処理
|
|
5082
5094
|
*/
|
|
5083
|
-
const setScoreDetail =
|
|
5095
|
+
const setScoreDetail = (_resetFlg = false) => {
|
|
5084
5096
|
if (g_currentPage === `difSelector`) {
|
|
5085
5097
|
resetDifWindow();
|
|
5086
5098
|
g_stateObj.scoreDetailViewFlg = false;
|
|
@@ -5095,7 +5107,9 @@ const createOptionWindow = _sprite => {
|
|
|
5095
5107
|
detailObj.style.visibility = visibles[Number(g_stateObj.scoreDetailViewFlg)];
|
|
5096
5108
|
|
|
5097
5109
|
// Qキーを押したときのカーソル位置を先頭に初期化
|
|
5098
|
-
|
|
5110
|
+
if (_resetFlg) {
|
|
5111
|
+
g_shortcutObj.option.KeyQ.id = g_settings.scoreDetailCursors[0];
|
|
5112
|
+
}
|
|
5099
5113
|
};
|
|
5100
5114
|
|
|
5101
5115
|
// ---------------------------------------------------
|
|
@@ -5160,6 +5174,16 @@ const createOptionWindow = _sprite => {
|
|
|
5160
5174
|
spriteList.gauge.appendChild(makeDisabledLabel(`lnkGauge`, 0, getStgDetailName(g_stateObj.gauge)));
|
|
5161
5175
|
}
|
|
5162
5176
|
|
|
5177
|
+
// 空押し判定設定 (Excessive)
|
|
5178
|
+
if (g_headerObj.excessiveUse) {
|
|
5179
|
+
spriteList.gauge.appendChild(
|
|
5180
|
+
createCss2Button(`lnkExcessive`, g_lblNameObj.Excessive, evt => setExcessive(evt.target),
|
|
5181
|
+
Object.assign(g_lblPosObj.btnExcessive, {
|
|
5182
|
+
title: g_msgObj.excessive, cxtFunc: evt => setExcessive(evt.target),
|
|
5183
|
+
}), g_cssObj.button_Default, g_cssObj[`button_Rev${g_stateObj.excessive}`])
|
|
5184
|
+
);
|
|
5185
|
+
}
|
|
5186
|
+
|
|
5163
5187
|
// ---------------------------------------------------
|
|
5164
5188
|
// タイミング調整 (Adjustment)
|
|
5165
5189
|
// 縦位置: 10.5 短縮ショートカットあり
|
|
@@ -5503,22 +5527,42 @@ const gaugeChange = _gaugeNum => {
|
|
|
5503
5527
|
|
|
5504
5528
|
/**
|
|
5505
5529
|
* ゲージ設定の詳細表示を整形
|
|
5530
|
+
* @param {string} _mode
|
|
5531
|
+
* @param {number} _border
|
|
5532
|
+
* @param {number} _rcv
|
|
5533
|
+
* @param {number} _dmg
|
|
5534
|
+
* @param {number} _init
|
|
5535
|
+
* @param {string} _lifeValFlg
|
|
5536
|
+
* @returns
|
|
5506
5537
|
*/
|
|
5507
5538
|
const gaugeFormat = (_mode, _border, _rcv, _dmg, _init, _lifeValFlg) => {
|
|
5508
5539
|
const initVal = g_headerObj.maxLifeVal * _init / 100;
|
|
5509
|
-
const borderVal =
|
|
5510
|
-
|
|
5540
|
+
const borderVal = g_headerObj.maxLifeVal * _border / 100;
|
|
5541
|
+
|
|
5542
|
+
// 整形用にライフ初期値を整数、回復・ダメージ量を小数第1位で丸める
|
|
5543
|
+
const init = Math.round(initVal);
|
|
5544
|
+
const borderText = (_mode === C_LFE_BORDER && _border !== 0 ? Math.round(borderVal) : `-`);
|
|
5545
|
+
const toFixed2 = _val => Math.round(_val * 100) / 100;
|
|
5546
|
+
|
|
5547
|
+
let rcvText = toFixed2(_rcv), dmgText = toFixed2(_dmg);
|
|
5548
|
+
let realRcv = _rcv, realDmg = _dmg;
|
|
5549
|
+
const allCnt = sumData(g_detailObj.arrowCnt[g_stateObj.scoreId]) +
|
|
5550
|
+
(g_headerObj.frzStartjdgUse ? 2 : 1) * sumData(g_detailObj.frzCnt[g_stateObj.scoreId]);
|
|
5511
5551
|
|
|
5512
|
-
let lifeValCss = ``;
|
|
5513
5552
|
if (_lifeValFlg === C_FLG_ON) {
|
|
5514
|
-
|
|
5553
|
+
rcvText = ``, dmgText = ``;
|
|
5554
|
+
if (allCnt > 0) {
|
|
5555
|
+
realRcv = Math.min(calcLifeVal(_rcv, allCnt), g_headerObj.maxLifeVal);
|
|
5556
|
+
realDmg = Math.min(calcLifeVal(_dmg, allCnt), g_headerObj.maxLifeVal);
|
|
5557
|
+
rcvText = `${toFixed2(realRcv)}<br>`;
|
|
5558
|
+
dmgText = `${toFixed2(realDmg)}<br>`;
|
|
5559
|
+
}
|
|
5560
|
+
rcvText += `<span class="settings_lifeVal">(${toFixed2(_rcv)})</span>`;
|
|
5561
|
+
dmgText += `<span class="settings_lifeVal">(${toFixed2(_dmg)})</span>`;
|
|
5515
5562
|
}
|
|
5516
5563
|
|
|
5517
|
-
//
|
|
5518
|
-
const
|
|
5519
|
-
const border = (borderVal !== `-` ? borderVal : `-`);
|
|
5520
|
-
const rcv = Math.round(_rcv * 100) / 100;
|
|
5521
|
-
const dmg = Math.round(_dmg * 100) / 100;
|
|
5564
|
+
// 達成率(Accuracy)・許容ミス数の計算
|
|
5565
|
+
const [rateText, allowableCntsText] = getAccuracy(borderVal, realRcv, realDmg, initVal, allCnt);
|
|
5522
5566
|
|
|
5523
5567
|
return `<div id="gaugeDivCover" class="settings_gaugeDivCover">
|
|
5524
5568
|
<div id="lblGaugeDivTable" class="settings_gaugeDivTable">
|
|
@@ -5534,25 +5578,67 @@ const gaugeFormat = (_mode, _border, _rcv, _dmg, _init, _lifeValFlg) => {
|
|
|
5534
5578
|
<div id="lblGaugeDamage" class="settings_gaugeDivTableCol settings_gaugeEtc">
|
|
5535
5579
|
${g_lblNameObj.g_damage}
|
|
5536
5580
|
</div>
|
|
5581
|
+
<div id="lblGaugeRate" class="settings_gaugeDivTableCol settings_gaugeEtc">
|
|
5582
|
+
${g_lblNameObj.g_rate}
|
|
5583
|
+
</div>
|
|
5537
5584
|
</div>
|
|
5538
5585
|
<div id="dataGaugeDivTable" class="settings_gaugeDivTable">
|
|
5539
5586
|
<div id="dataGaugeStart" class="settings_gaugeDivTableCol settings_gaugeVal settings_gaugeStart">
|
|
5540
5587
|
${init}/${g_headerObj.maxLifeVal}
|
|
5541
5588
|
</div>
|
|
5542
5589
|
<div id="dataGaugeBorder" class="settings_gaugeDivTableCol settings_gaugeVal settings_gaugeEtc">
|
|
5543
|
-
${
|
|
5590
|
+
${borderText}
|
|
5544
5591
|
</div>
|
|
5545
|
-
<div id="dataGaugeRecovery" class="settings_gaugeDivTableCol settings_gaugeVal settings_gaugeEtc
|
|
5546
|
-
${
|
|
5592
|
+
<div id="dataGaugeRecovery" class="settings_gaugeDivTableCol settings_gaugeVal settings_gaugeEtc">
|
|
5593
|
+
${rcvText}
|
|
5547
5594
|
</div>
|
|
5548
|
-
<div id="dataGaugeDamage" class="settings_gaugeDivTableCol settings_gaugeVal settings_gaugeEtc
|
|
5549
|
-
${
|
|
5595
|
+
<div id="dataGaugeDamage" class="settings_gaugeDivTableCol settings_gaugeVal settings_gaugeEtc">
|
|
5596
|
+
${dmgText}
|
|
5597
|
+
</div>
|
|
5598
|
+
<div id="dataGaugeRate" class="settings_gaugeDivTableCol settings_gaugeVal settings_gaugeEtc" title="${allowableCntsText}">
|
|
5599
|
+
${rateText}
|
|
5550
5600
|
</div>
|
|
5551
5601
|
</div>
|
|
5552
5602
|
</div>
|
|
5553
5603
|
`;
|
|
5554
5604
|
};
|
|
5555
5605
|
|
|
5606
|
+
/**
|
|
5607
|
+
* 達成率、許容ミス数の取得
|
|
5608
|
+
* @param {number} _border
|
|
5609
|
+
* @param {number} _rcv
|
|
5610
|
+
* @param {number} _dmg
|
|
5611
|
+
* @param {number} _init
|
|
5612
|
+
* @param {number} _allCnt
|
|
5613
|
+
* @returns
|
|
5614
|
+
*/
|
|
5615
|
+
const getAccuracy = (_border, _rcv, _dmg, _init, _allCnt) => {
|
|
5616
|
+
const justPoint = _rcv + _dmg > 0 ? Math.max(_border - _init + _dmg * _allCnt, 0) / (_rcv + _dmg) : 0;
|
|
5617
|
+
const minRecovery = (_border === 0 ? Math.floor(justPoint + 1) : Math.ceil(justPoint));
|
|
5618
|
+
const rate = Math.max(minRecovery / _allCnt * 100, 0);
|
|
5619
|
+
let rateText = _allCnt > 0 ? (rate <= 100 ? `${rate.toFixed(2)}%` : `<span class="settings_lifeVal">${rate.toFixed(2)}%</span>`) : `----`;
|
|
5620
|
+
|
|
5621
|
+
// 許容ミス数の計算
|
|
5622
|
+
const allowableCnts = Math.min(_allCnt - minRecovery, _allCnt);
|
|
5623
|
+
let allowableCntsText = _allCnt > 0 ? (allowableCnts >= 0 ? `${allowableCnts}miss↓` : `Impossible (${allowableCnts}miss)`) : ``;
|
|
5624
|
+
|
|
5625
|
+
if ((_rcv === 0 && _dmg === 0) || _rcv < 0 || _dmg < 0) {
|
|
5626
|
+
rateText = `----`;
|
|
5627
|
+
allowableCntsText = ``;
|
|
5628
|
+
}
|
|
5629
|
+
return [rateText, allowableCntsText];
|
|
5630
|
+
};
|
|
5631
|
+
|
|
5632
|
+
/**
|
|
5633
|
+
* 空押し判定の設定
|
|
5634
|
+
*/
|
|
5635
|
+
const setExcessive = _btn => {
|
|
5636
|
+
g_settings.excessiveNum = (g_settings.excessiveNum + 1) % 2;
|
|
5637
|
+
g_stateObj.excessive = g_settings.excessives[g_settings.excessiveNum];
|
|
5638
|
+
_btn.classList.replace(g_cssObj[`button_Rev${g_settings.excessives[(g_settings.excessiveNum + 1) % 2]}`],
|
|
5639
|
+
g_cssObj[`button_Rev${g_settings.excessives[g_settings.excessiveNum]}`]);
|
|
5640
|
+
};
|
|
5641
|
+
|
|
5556
5642
|
/**
|
|
5557
5643
|
* 保存済みキーコンフィグ取得処理
|
|
5558
5644
|
* @param {object} _localStorage 保存先のローカルストレージ名
|
|
@@ -9184,7 +9270,7 @@ const mainInit = _ => {
|
|
|
9184
9270
|
|
|
9185
9271
|
// 矢印(枠外判定、AutoPlay: OFF)
|
|
9186
9272
|
arrowOFF: (_j, _arrowName, _cnt) => {
|
|
9187
|
-
if (_cnt < (-1) * g_judgObj.arrowJ[g_judgPosObj.
|
|
9273
|
+
if (_cnt < (-1) * g_judgObj.arrowJ[g_judgPosObj.shobon]) {
|
|
9188
9274
|
judgeUwan(_cnt);
|
|
9189
9275
|
judgeObjDelete.arrow(_j, _arrowName);
|
|
9190
9276
|
}
|
|
@@ -10103,18 +10189,27 @@ const judgeArrow = _j => {
|
|
|
10103
10189
|
|
|
10104
10190
|
const judgeTargetArrow = _difFrame => {
|
|
10105
10191
|
const _difCnt = Math.abs(_difFrame);
|
|
10106
|
-
|
|
10107
|
-
const [resultFunc, resultJdg] = checkJudgment(_difCnt);
|
|
10108
|
-
resultFunc(_difFrame);
|
|
10109
|
-
displayDiff(_difFrame);
|
|
10110
|
-
|
|
10192
|
+
const stepHitTargetArrow = _resultJdg => {
|
|
10111
10193
|
const stepDivHit = document.querySelector(`#stepHit${_j}`);
|
|
10112
10194
|
stepDivHit.style.top = `${currentArrow.prevY - parseFloat($id(`stepRoot${_j}`).top) - 15 + g_workObj.hitPosition * g_workObj.scrollDir[_j]}px`;
|
|
10113
10195
|
stepDivHit.style.opacity = 0.75;
|
|
10114
10196
|
stepDivHit.classList.value = ``;
|
|
10115
|
-
stepDivHit.classList.add(g_cssObj[`main_step${
|
|
10197
|
+
stepDivHit.classList.add(g_cssObj[`main_step${_resultJdg}`]);
|
|
10116
10198
|
stepDivHit.setAttribute(`cnt`, C_FRM_HITMOTION);
|
|
10199
|
+
}
|
|
10200
|
+
|
|
10201
|
+
if (g_stateObj.excessive === C_FLG_ON && _difFrame <= g_judgObj.arrowJ[g_judgPosObj.uwan] && _difFrame > g_judgObj.arrowJ[g_judgPosObj.shobon]) {
|
|
10202
|
+
// 空押し判定(有効かつ早押し時のみ)
|
|
10203
|
+
displayDiff(_difFrame);
|
|
10204
|
+
stepHitTargetArrow(`Excessive`);
|
|
10205
|
+
return true;
|
|
10117
10206
|
|
|
10207
|
+
} else if (_difCnt <= g_judgObj.arrowJ[g_judgPosObj.shobon]) {
|
|
10208
|
+
// 通常判定
|
|
10209
|
+
const [resultFunc, resultJdg] = checkJudgment(_difCnt);
|
|
10210
|
+
resultFunc(_difFrame);
|
|
10211
|
+
displayDiff(_difFrame);
|
|
10212
|
+
stepHitTargetArrow(resultJdg);
|
|
10118
10213
|
document.getElementById(arrowName).remove();
|
|
10119
10214
|
g_workObj.judgArrowCnt[_j]++;
|
|
10120
10215
|
return true;
|
|
@@ -10173,7 +10268,11 @@ const displayDiff = (_difFrame, _fjdg = ``, _justFrames = g_headerObj.justFrames
|
|
|
10173
10268
|
let diffJDisp = ``;
|
|
10174
10269
|
g_workObj.diffList.push(_difFrame);
|
|
10175
10270
|
const difCnt = Math.abs(_difFrame);
|
|
10176
|
-
if (_difFrame >
|
|
10271
|
+
if (_difFrame > g_judgObj.arrowJ[g_judgPosObj.shobon]) {
|
|
10272
|
+
diffJDisp = `<span class="common_kita">Excessive</span>`;
|
|
10273
|
+
g_resultObj.excessive++;
|
|
10274
|
+
lifeDamage(true);
|
|
10275
|
+
} else if (_difFrame > _justFrames) {
|
|
10177
10276
|
diffJDisp = `<span class="common_matari">Fast ${difCnt} Frames</span>`;
|
|
10178
10277
|
g_resultObj.fast++;
|
|
10179
10278
|
} else if (_difFrame < _justFrames * (-1)) {
|
|
@@ -10215,8 +10314,12 @@ const lifeRecovery = _ => {
|
|
|
10215
10314
|
}
|
|
10216
10315
|
};
|
|
10217
10316
|
|
|
10218
|
-
|
|
10219
|
-
|
|
10317
|
+
/**
|
|
10318
|
+
* ゲージダメージ処理
|
|
10319
|
+
* @param {boolean} _excessive
|
|
10320
|
+
*/
|
|
10321
|
+
const lifeDamage = (_excessive = false) => {
|
|
10322
|
+
g_workObj.lifeVal -= g_workObj.lifeDmg * (_excessive ? 0.25 : 1);
|
|
10220
10323
|
|
|
10221
10324
|
if (g_workObj.lifeVal <= 0) {
|
|
10222
10325
|
g_workObj.lifeVal = 0;
|
|
@@ -10475,7 +10578,7 @@ const resultInit = _ => {
|
|
|
10475
10578
|
rankMark = g_rankObj.rankMarkF;
|
|
10476
10579
|
rankColor = g_rankObj.rankColorF;
|
|
10477
10580
|
g_resultObj.spState = `failed`;
|
|
10478
|
-
} else if (playingArrows === g_fullArrows && g_stateObj.autoAll === C_FLG_OFF) {
|
|
10581
|
+
} else if (playingArrows === g_fullArrows && g_stateObj.autoAll === C_FLG_OFF && !(g_headerObj.excessiveJdgUse && g_stateObj.excessive === C_FLG_OFF)) {
|
|
10479
10582
|
if (g_resultObj.spState === ``) {
|
|
10480
10583
|
g_resultObj.spState = `cleared`;
|
|
10481
10584
|
}
|
|
@@ -10601,6 +10704,12 @@ const resultInit = _ => {
|
|
|
10601
10704
|
makeCssResultSymbol(`lblAdjS`, 260, g_cssObj.score, 5, `${getDiffFrame(estimatedAdj)}`, C_ALIGN_RIGHT),
|
|
10602
10705
|
);
|
|
10603
10706
|
}
|
|
10707
|
+
if (g_stateObj.excessive === C_FLG_ON) {
|
|
10708
|
+
multiAppend(resultWindow,
|
|
10709
|
+
makeCssResultSymbol(`lblExcessive`, 350, g_cssObj.common_kita, 6, g_lblNameObj.j_excessive),
|
|
10710
|
+
makeCssResultSymbol(`lblExcessiveS`, 260, g_cssObj.score, 7, g_resultObj.excessive, C_ALIGN_RIGHT),
|
|
10711
|
+
);
|
|
10712
|
+
}
|
|
10604
10713
|
}
|
|
10605
10714
|
|
|
10606
10715
|
// ランク描画
|
|
@@ -10727,6 +10836,8 @@ const resultInit = _ => {
|
|
|
10727
10836
|
const twiturl = new URL(g_localStorageUrl);
|
|
10728
10837
|
twiturl.searchParams.append(`scoreId`, g_stateObj.scoreId);
|
|
10729
10838
|
|
|
10839
|
+
const tweetExcessive = (g_stateObj.excessive === C_FLG_ON) ? `(+${g_resultObj.excessive})` : ``;
|
|
10840
|
+
|
|
10730
10841
|
let tweetFrzJdg = ``;
|
|
10731
10842
|
let tweetMaxCombo = `${g_resultObj.maxCombo}`;
|
|
10732
10843
|
if (g_allFrz > 0) {
|
|
@@ -10742,7 +10853,7 @@ const resultInit = _ => {
|
|
|
10742
10853
|
[`[rank]`, rankMark],
|
|
10743
10854
|
[`[score]`, g_resultObj.score],
|
|
10744
10855
|
[`[playStyle]`, playStyleData],
|
|
10745
|
-
[`[arrowJdg]`, `${g_resultObj.ii}-${g_resultObj.shakin}-${g_resultObj.matari}-${g_resultObj.shobon}-${g_resultObj.uwan}`],
|
|
10856
|
+
[`[arrowJdg]`, `${g_resultObj.ii}-${g_resultObj.shakin}-${g_resultObj.matari}-${g_resultObj.shobon}-${g_resultObj.uwan}${tweetExcessive}`],
|
|
10746
10857
|
[`[frzJdg]`, tweetFrzJdg],
|
|
10747
10858
|
[`[maxCombo]`, tweetMaxCombo],
|
|
10748
10859
|
[`[url]`, g_isLocal ? `` : `${twiturl.toString()}`.replace(/[\t\n]/g, ``)]
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2019/11/19
|
|
8
|
-
* Revised : 2023/06/
|
|
8
|
+
* Revised : 2023/06/09 (v32.5.0)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -255,8 +255,11 @@ const updateWindowSiz = _ => {
|
|
|
255
255
|
btnReverse: {
|
|
256
256
|
x: 160, y: 0, w: 90, h: 21, siz: g_limitObj.difSelectorSiz, borderStyle: `solid`,
|
|
257
257
|
},
|
|
258
|
+
btnExcessive: {
|
|
259
|
+
x: 5, y: 25, w: 90, h: 21, siz: g_limitObj.difSelectorSiz, borderStyle: `solid`,
|
|
260
|
+
},
|
|
258
261
|
lblGauge2: {
|
|
259
|
-
x: g_limitObj.setLblLeft -
|
|
262
|
+
x: g_limitObj.setLblLeft - 55, y: g_limitObj.setLblHeight,
|
|
260
263
|
w: g_limitObj.setLblWidth + 60, h: g_limitObj.setLblHeight * 2, siz: 11,
|
|
261
264
|
},
|
|
262
265
|
lnkFadein: {
|
|
@@ -700,7 +703,7 @@ const C_KEY_TITLEBACK = 46;
|
|
|
700
703
|
|
|
701
704
|
/** 判定系共通オブジェクト */
|
|
702
705
|
const g_judgObj = {
|
|
703
|
-
arrowJ: [2, 4, 6, 8,
|
|
706
|
+
arrowJ: [2, 4, 6, 8, 16],
|
|
704
707
|
frzJ: [2, 4, 8]
|
|
705
708
|
};
|
|
706
709
|
const g_judgPosObj = {
|
|
@@ -731,6 +734,7 @@ const g_resultObj = {
|
|
|
731
734
|
|
|
732
735
|
fast: 0,
|
|
733
736
|
slow: 0,
|
|
737
|
+
excessive: 0,
|
|
734
738
|
|
|
735
739
|
spState: ``,
|
|
736
740
|
};
|
|
@@ -890,6 +894,9 @@ const g_settings = {
|
|
|
890
894
|
gauges: [],
|
|
891
895
|
gaugeNum: 0,
|
|
892
896
|
|
|
897
|
+
excessives: [C_FLG_OFF, C_FLG_ON],
|
|
898
|
+
excessiveNum: 0,
|
|
899
|
+
|
|
893
900
|
autoPlays: [C_FLG_OFF, C_FLG_ALL],
|
|
894
901
|
autoPlayNum: 0,
|
|
895
902
|
|
|
@@ -911,9 +918,11 @@ const g_settings = {
|
|
|
911
918
|
|
|
912
919
|
opacitys: [10, 25, 50, 75, 100],
|
|
913
920
|
|
|
914
|
-
scoreDetailDefs: [`
|
|
921
|
+
scoreDetailDefs: [`Density`, `Speed`, `ToolDif`],
|
|
915
922
|
scoreDetails: [],
|
|
916
923
|
scoreDetailCursors: [],
|
|
924
|
+
|
|
925
|
+
scoreDetailTrans: [[`Velocity`, `Speed`], [`DifLevel`, `ToolDif`]],
|
|
917
926
|
};
|
|
918
927
|
|
|
919
928
|
g_settings.volumeNum = g_settings.volumes.length - 1;
|
|
@@ -1000,7 +1009,7 @@ let g_storeSettings = [`adjustment`, `volume`, `appearance`, `opacity`, `hitPosi
|
|
|
1000
1009
|
let g_storeSettingsEx = [`d_stepzone`, `d_judgment`, `d_fastslow`, `d_lifegauge`,
|
|
1001
1010
|
`d_score`, `d_musicinfo`, `d_filterline`];
|
|
1002
1011
|
|
|
1003
|
-
let g_canDisabledSettings = [`motion`, `scroll`, `shuffle`, `autoPlay`, `gauge`, `appearance`];
|
|
1012
|
+
let g_canDisabledSettings = [`motion`, `scroll`, `shuffle`, `autoPlay`, `gauge`, `excessive`, `appearance`];
|
|
1004
1013
|
|
|
1005
1014
|
const g_hidSudObj = {
|
|
1006
1015
|
filterPos: 10,
|
|
@@ -1395,13 +1404,13 @@ const g_shortcutObj = {
|
|
|
1395
1404
|
KeyV: { id: `lnkVolumeR` },
|
|
1396
1405
|
|
|
1397
1406
|
KeyI: { id: `btnGraph` },
|
|
1398
|
-
Digit1: { id: `
|
|
1399
|
-
Digit2: { id: `
|
|
1407
|
+
Digit1: { id: `lnkDensityG` },
|
|
1408
|
+
Digit2: { id: `lnkSpeedG` },
|
|
1400
1409
|
Digit3: { id: `lnkToolDifG` },
|
|
1401
|
-
Numpad1: { id: `
|
|
1402
|
-
Numpad2: { id: `
|
|
1410
|
+
Numpad1: { id: `lnkDensityG` },
|
|
1411
|
+
Numpad2: { id: `lnkSpeedG` },
|
|
1403
1412
|
Numpad3: { id: `lnkToolDifG` },
|
|
1404
|
-
KeyQ: { id: `
|
|
1413
|
+
KeyQ: { id: `lnkDensityG` },
|
|
1405
1414
|
KeyP: { id: `lnkDifInfo` },
|
|
1406
1415
|
KeyZ: { id: `btnSave` },
|
|
1407
1416
|
|
|
@@ -1423,13 +1432,13 @@ const g_shortcutObj = {
|
|
|
1423
1432
|
ArrowUp: { id: `btnDifU` },
|
|
1424
1433
|
|
|
1425
1434
|
KeyI: { id: `btnGraph` },
|
|
1426
|
-
Digit1: { id: `
|
|
1427
|
-
Digit2: { id: `
|
|
1435
|
+
Digit1: { id: `lnkDensityG` },
|
|
1436
|
+
Digit2: { id: `lnkSpeedG` },
|
|
1428
1437
|
Digit3: { id: `lnkToolDifG` },
|
|
1429
|
-
Numpad1: { id: `
|
|
1430
|
-
Numpad2: { id: `
|
|
1438
|
+
Numpad1: { id: `lnkDensityG` },
|
|
1439
|
+
Numpad2: { id: `lnkSpeedG` },
|
|
1431
1440
|
Numpad3: { id: `lnkToolDifG` },
|
|
1432
|
-
KeyQ: { id: `
|
|
1441
|
+
KeyQ: { id: `lnkDensityG` },
|
|
1433
1442
|
KeyP: { id: `lnkDifInfo` },
|
|
1434
1443
|
|
|
1435
1444
|
Escape: { id: `btnBack` },
|
|
@@ -1575,6 +1584,7 @@ const g_cssObj = {
|
|
|
1575
1584
|
main_stepShakin: `main_stepShakin`,
|
|
1576
1585
|
main_stepMatari: `main_stepMatari`,
|
|
1577
1586
|
main_stepShobon: `main_stepShobon`,
|
|
1587
|
+
main_stepExcessive: `main_stepExcessive`,
|
|
1578
1588
|
|
|
1579
1589
|
main_objStepShadow: `main_objStepShadow`,
|
|
1580
1590
|
main_objShadow: `main_objShadow`,
|
|
@@ -2612,6 +2622,7 @@ const g_lblNameObj = {
|
|
|
2612
2622
|
Shuffle: `Shuffle`,
|
|
2613
2623
|
AutoPlay: `AutoPlay`,
|
|
2614
2624
|
Gauge: `Gauge`,
|
|
2625
|
+
Excessive: `Excessive`,
|
|
2615
2626
|
Adjustment: `Adjustment`,
|
|
2616
2627
|
Fadein: `Fadein`,
|
|
2617
2628
|
Volume: `Volume`,
|
|
@@ -2632,11 +2643,12 @@ const g_lblNameObj = {
|
|
|
2632
2643
|
g_border: `Border`,
|
|
2633
2644
|
g_recovery: `Recovery`,
|
|
2634
2645
|
g_damage: `Damage`,
|
|
2646
|
+
g_rate: `Accuracy`,
|
|
2635
2647
|
|
|
2636
|
-
s_speed: `
|
|
2648
|
+
s_speed: `Overall`,
|
|
2637
2649
|
s_boost: `Boost`,
|
|
2638
2650
|
s_avg: `Avg.`,
|
|
2639
|
-
s_avgDspeed: `
|
|
2651
|
+
s_avgDspeed: `AvgO)`,
|
|
2640
2652
|
s_avgDboost: `AvgB)`,
|
|
2641
2653
|
|
|
2642
2654
|
s_apm: `APM`,
|
|
@@ -2714,9 +2726,9 @@ const g_lblNameObj = {
|
|
|
2714
2726
|
'u_Sudden+': `Sudden+`,
|
|
2715
2727
|
'u_Hid&Sud+': `Hid&Sud+`,
|
|
2716
2728
|
|
|
2717
|
-
'u_Speed': `
|
|
2729
|
+
'u_Speed': `Velocity`,
|
|
2718
2730
|
'u_Density': `Density`,
|
|
2719
|
-
'u_ToolDif': `
|
|
2731
|
+
'u_ToolDif': `DifLevel`,
|
|
2720
2732
|
|
|
2721
2733
|
'u_Main': `Main`,
|
|
2722
2734
|
'u_Replaced': `Replaced`,
|
|
@@ -2801,6 +2813,7 @@ const g_lang_lblNameObj = {
|
|
|
2801
2813
|
j_iknai: "(・A・)イクナイ",
|
|
2802
2814
|
|
|
2803
2815
|
j_adj: `推定Adj`,
|
|
2816
|
+
j_excessive: `Excessive`,
|
|
2804
2817
|
|
|
2805
2818
|
helpUrl: `https://github.com/cwtickle/danoniplus/wiki/AboutGameSystem`,
|
|
2806
2819
|
securityUrl: `https://github.com/cwtickle/danoniplus/security/policy`,
|
|
@@ -2833,6 +2846,7 @@ const g_lang_lblNameObj = {
|
|
|
2833
2846
|
j_iknai: ":( N.G.",
|
|
2834
2847
|
|
|
2835
2848
|
j_adj: `Est-Adj.`,
|
|
2849
|
+
j_excessive: `Excessive`,
|
|
2836
2850
|
|
|
2837
2851
|
helpUrl: `https://github.com/cwtickle/danoniplus-docs/wiki/AboutGameSystem`,
|
|
2838
2852
|
securityUrl: `https://github.com/cwtickle/danoniplus-docs/wiki/SecurityPolicy`,
|
|
@@ -2868,12 +2882,13 @@ const g_lang_msgObj = {
|
|
|
2868
2882
|
scroll: `各レーンのスクロール方向をパターンに沿って設定します。\nReverse:ONでスクロール方向を反転します。`,
|
|
2869
2883
|
shuffle: `譜面を左右反転したり、ランダムにします。\nランダムにした場合は別譜面扱いとなり、ハイスコアは保存されません。`,
|
|
2870
2884
|
autoPlay: `オートプレイや一部キーを自動で打たせる設定を行います。\nオートプレイ時はハイスコアを保存しません。`,
|
|
2871
|
-
gauge: `クリア条件を設定します。\n[Start] ゲージ初期値, [Border] クリア条件(ハイフン時は0),\n[Recovery] 回復量, [Damage]
|
|
2885
|
+
gauge: `クリア条件を設定します。\n[Start] ゲージ初期値, [Border] クリア条件(ハイフン時は0),\n[Recovery] 回復量, [Damage] ダメージ量, [Accuracy] クリアに必要な正確率(オンマウスで許容ミス数表示)`,
|
|
2886
|
+
excessive: `空押し判定を行うか設定します。`,
|
|
2872
2887
|
adjustment: `曲とのタイミングにズレを感じる場合、\n数値を変えることでフレーム単位のズレを直すことができます。\n外側のボタンは5f刻み、真ん中は1f刻み、内側は0.5f刻みで調整できます。`,
|
|
2873
2888
|
fadein: `譜面を途中から再生します。\n途中から開始した場合はハイスコアを保存しません。`,
|
|
2874
2889
|
volume: `ゲーム内の音量を設定します。`,
|
|
2875
2890
|
|
|
2876
|
-
graph:
|
|
2891
|
+
graph: `譜面密度や速度変化状況、\n譜面の難易度などの情報を表示します。`,
|
|
2877
2892
|
dataSave: `ハイスコア、リバース設定、\nキーコンフィグの保存の有無を設定します。`,
|
|
2878
2893
|
toDisplay: `プレイ画面上のオブジェクトの\n表示・非表示(一部透明度)を設定します。`,
|
|
2879
2894
|
toSettings: `SETTINGS画面へ戻ります。`,
|
|
@@ -2924,12 +2939,13 @@ const g_lang_msgObj = {
|
|
|
2924
2939
|
scroll: `Set the scroll direction for each lane according to the pattern.\nIf "Reverse:ON" sets, reverse the scroll direction.`,
|
|
2925
2940
|
shuffle: `Flip the chart left and right or make it random.\nIf you make it random, it will be treated as other charts and the high score will not be saved.`,
|
|
2926
2941
|
autoPlay: `Set to auto play and to hit some keys automatically.\nHigh score is not saved during auto play.`,
|
|
2927
|
-
gauge: `Set the clear condition.\n[Start] initial value, [Border] borderline value (hyphen means zero),\n[Recovery] recovery amount, [Damage] damage amount`,
|
|
2942
|
+
gauge: `Set the clear condition.\n[Start] initial value, [Border] borderline value (hyphen means zero),\n[Recovery] recovery amount, [Damage] damage amount,\n[Accuracy] accuracy required to clear (mouseover to see the number of allowed mistakes)`,
|
|
2943
|
+
excessive: `Set whether to use excessive miss judgment.`,
|
|
2928
2944
|
adjustment: `If you feel that the timing is out of sync with the music, \nyou can correct the shift in frame units by changing the value.\nThe outer button can be adjusted in 5 frame increments, the middle in 1 frame increments, \nand the inner button in 0.5 frame increments.`,
|
|
2929
2945
|
fadein: `Plays the chart from the middle.\nIf you start in the middle, the high score will not be saved.`,
|
|
2930
2946
|
volume: `Set the in-game volume.`,
|
|
2931
2947
|
|
|
2932
|
-
graph: `Displays detailed information about the chart, such as
|
|
2948
|
+
graph: `Displays detailed information about the chart, such as chart's density status, sequences' velocity changes, and chart's difficulty.`,
|
|
2933
2949
|
dataSave: `Set whether to save the high score, reverse setting, and key config.`,
|
|
2934
2950
|
toDisplay: `Set the display or non-display (partial transparency) of objects on the play screen.`,
|
|
2935
2951
|
toSettings: `Return to the SETTINGS screen.`,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
3
|
* Dancing☆Onigiri 設定用jsファイル
|
|
4
|
-
* Template Update: 2023/
|
|
4
|
+
* Template Update: 2023/06/24 (v32.5.0)
|
|
5
5
|
*
|
|
6
6
|
* このファイルでは、作品全体に対しての初期設定を行うことができます。
|
|
7
7
|
* 譜面データ側で個別に同様の項目が設定されている場合は、譜面データ側の設定が優先されます。
|
|
@@ -113,6 +113,13 @@ g_presetObj.gaugeList = {
|
|
|
113
113
|
};
|
|
114
114
|
*/
|
|
115
115
|
|
|
116
|
+
/**
|
|
117
|
+
空押し判定を行うか
|
|
118
|
+
判定させる場合は `true` を指定
|
|
119
|
+
*/
|
|
120
|
+
g_presetObj.excessiveJdgUse = `false`;
|
|
121
|
+
|
|
122
|
+
|
|
116
123
|
/*
|
|
117
124
|
------------------------------------------------------------------------
|
|
118
125
|
フリーズアロー設定
|
|
@@ -136,7 +143,6 @@ g_presetObj.frzColors = true;
|
|
|
136
143
|
*/
|
|
137
144
|
g_presetObj.frzStartjdgUse = `false`;
|
|
138
145
|
|
|
139
|
-
|
|
140
146
|
/*
|
|
141
147
|
------------------------------------------------------------------------
|
|
142
148
|
デフォルトデザイン・画像設定
|
|
@@ -213,6 +219,7 @@ g_presetObj.settingUse = {
|
|
|
213
219
|
shuffle: `true`,
|
|
214
220
|
autoPlay: `true`,
|
|
215
221
|
gauge: `true`,
|
|
222
|
+
excessive: `true`,
|
|
216
223
|
appearance: `true`,
|
|
217
224
|
|
|
218
225
|
// stepZone: `true`,
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
スキンcssファイル (default)
|
|
6
6
|
|
|
7
7
|
Created : 2019/11/04
|
|
8
|
-
Revised : 2023/
|
|
8
|
+
Revised : 2023/06/24 (v32.5.0)
|
|
9
9
|
|
|
10
10
|
https://github.com/cwtickle/danoniplus
|
|
11
11
|
------------------------------------------ */
|
|
@@ -167,6 +167,10 @@
|
|
|
167
167
|
background-color: #ccccff;
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
+
.main_stepExcessive {
|
|
171
|
+
background-color: #ffff99;
|
|
172
|
+
}
|
|
173
|
+
|
|
170
174
|
.main_objStepShadow {
|
|
171
175
|
background-color: #000000;
|
|
172
176
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
スキンcssファイル (light)
|
|
6
6
|
|
|
7
7
|
Created : 2019/11/04
|
|
8
|
-
Revised : 2023/
|
|
8
|
+
Revised : 2023/06/24 (v32.5.0)
|
|
9
9
|
|
|
10
10
|
https://github.com/cwtickle/danoniplus
|
|
11
11
|
------------------------------------------ */
|
|
@@ -167,6 +167,10 @@
|
|
|
167
167
|
background-color: #0000cc;
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
+
.main_stepExcessive {
|
|
171
|
+
background-color: #999900;
|
|
172
|
+
}
|
|
173
|
+
|
|
170
174
|
.main_objStepShadow {
|
|
171
175
|
background-color: #eeeeee;
|
|
172
176
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
スキンcssファイル (skyblue)
|
|
6
6
|
|
|
7
7
|
Created : 2019/11/04
|
|
8
|
-
Revised : 2023/
|
|
8
|
+
Revised : 2023/06/24 (v32.5.0)
|
|
9
9
|
|
|
10
10
|
https://github.com/cwtickle/danoniplus
|
|
11
11
|
------------------------------------------ */
|
|
@@ -167,6 +167,10 @@
|
|
|
167
167
|
background-color: #0000cc;
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
+
.main_stepExcessive {
|
|
171
|
+
background-color: #999900;
|
|
172
|
+
}
|
|
173
|
+
|
|
170
174
|
.main_objStepShadow {
|
|
171
175
|
background-color: #eeeeee;
|
|
172
176
|
}
|