danoniplus 48.4.2 → 48.5.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 +80 -25
- package/js/lib/danoni_constants.js +21 -1
- 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/06/
|
|
7
|
+
* Revised : 2026/06/15
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 48.
|
|
12
|
-
const g_revisedDate = `2026/06/
|
|
11
|
+
const g_version = `Ver 48.5.1`;
|
|
12
|
+
const g_revisedDate = `2026/06/15`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -2763,6 +2763,10 @@ const initialControl = async () => {
|
|
|
2763
2763
|
.sort((a, b) => parseInt(a) - parseInt(b));
|
|
2764
2764
|
}
|
|
2765
2765
|
|
|
2766
|
+
// ラベルテキスト、オンマウステキスト、確認メッセージ定義の上書き設定
|
|
2767
|
+
Object.assign(g_lblNameObj, g_lang_lblNameObj[g_localeObj.val], g_presetObj.lblName?.[g_localeObj.val]);
|
|
2768
|
+
Object.assign(g_msgObj, g_lang_msgObj[g_localeObj.val], g_presetObj.msg?.[g_localeObj.val]);
|
|
2769
|
+
|
|
2766
2770
|
// デフォルトのカラー・シャッフルグループ設定を退避
|
|
2767
2771
|
g_keycons.groups.forEach(type =>
|
|
2768
2772
|
Object.keys(g_keyObj).filter(val => val.startsWith(type))
|
|
@@ -3933,10 +3937,6 @@ const headerConvert = _dosObj => {
|
|
|
3933
3937
|
g_imgObj.titleArrow = C_IMG_ARROW;
|
|
3934
3938
|
}
|
|
3935
3939
|
|
|
3936
|
-
// ラベルテキスト、オンマウステキスト、確認メッセージ定義の上書き設定
|
|
3937
|
-
Object.assign(g_lblNameObj, g_lang_lblNameObj[g_localeObj.val], g_presetObj.lblName?.[g_localeObj.val]);
|
|
3938
|
-
Object.assign(g_msgObj, g_lang_msgObj[g_localeObj.val], g_presetObj.msg?.[g_localeObj.val]);
|
|
3939
|
-
|
|
3940
3940
|
// 自動横幅拡張設定
|
|
3941
3941
|
obj.autoSpread = setBoolVal(_dosObj.autoSpread, g_presetObj.autoSpread ?? true);
|
|
3942
3942
|
|
|
@@ -5447,6 +5447,10 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
|
|
|
5447
5447
|
// 位置マニュアル化 (initManualX)
|
|
5448
5448
|
g_keyObj[`initManual${newKey}`] = setBoolVal(_dosObj[`initManual${newKey}`] ?? g_keyObj[`initManual${newKey}`], false);
|
|
5449
5449
|
|
|
5450
|
+
// カスタムキーの説明ページ(keyHelpJaX / keyHelpEnX)
|
|
5451
|
+
Object.keys(g_lang_lblNameObj).forEach(lang =>
|
|
5452
|
+
g_lang_lblNameObj[lang][`keyHelp${newKey}`] = _dosObj[`keyHelp${lang}${newKey}`] ?? _dosObj[`keyHelp${newKey}`] ?? ``);
|
|
5453
|
+
|
|
5450
5454
|
// キーコンフィグ (keyCtrlX_Y)
|
|
5451
5455
|
g_keyObj.minPatterns = newKeyMultiParam(newKey, `keyCtrl`, toKeyCtrlArray, {
|
|
5452
5456
|
errCd: `E_0104`, baseCopyFlg: true,
|
|
@@ -8111,6 +8115,20 @@ const setDifficulty = (_initFlg) => {
|
|
|
8111
8115
|
g_settings.scrollNum = getCurrentNo(g_settings.scrolls, g_stateObj.scroll);
|
|
8112
8116
|
g_settings.autoPlayNum = getCurrentNo(g_settings.autoPlays, g_stateObj.autoPlay);
|
|
8113
8117
|
|
|
8118
|
+
|
|
8119
|
+
// 選択中のキーのヘルプ表示
|
|
8120
|
+
const targetKeymode = hasVal(g_keyObj[`transKey${g_keyObj.currentKey}_${g_keyObj.currentPtn}`])
|
|
8121
|
+
? g_keyObj[`transKey${g_keyObj.currentKey}_${g_keyObj.currentPtn}`] : g_keyObj.currentKey;
|
|
8122
|
+
btnKeymodeHelp.classList.remove(g_cssObj.button_Setting, g_cssObj.button_Tweet);
|
|
8123
|
+
btnKeymodeHelp.classList.add(
|
|
8124
|
+
g_cssObj[`button_${targetKeymode !== g_keyObj.currentKey
|
|
8125
|
+
&& (g_keyObj.defaultKeyList.includes(targetKeymode) || g_lblNameObj[`keyHelp${targetKeymode}`]) ? `Tweet` : `Setting`}`]
|
|
8126
|
+
);
|
|
8127
|
+
btnKeymodeHelp.style.display = (
|
|
8128
|
+
g_keyObj.defaultKeyList.includes(targetKeymode) || g_lblNameObj[`keyHelp${targetKeymode}`]
|
|
8129
|
+
? `` : C_DIS_NONE
|
|
8130
|
+
);
|
|
8131
|
+
|
|
8114
8132
|
// ---------------------------------------------------
|
|
8115
8133
|
// 3. 名称の設定
|
|
8116
8134
|
|
|
@@ -8225,8 +8243,18 @@ const createOptionWindow = _sprite => {
|
|
|
8225
8243
|
);
|
|
8226
8244
|
createScText(spriteList.difficulty, `Difficulty`);
|
|
8227
8245
|
if (g_headerObj.difSelectorUse) {
|
|
8228
|
-
createScText(spriteList.difficulty, `DifficultyList`, { x:
|
|
8229
|
-
}
|
|
8246
|
+
createScText(spriteList.difficulty, `DifficultyList`, { x: 154, y: -10, targetLabel: `lnkDifficulty` });
|
|
8247
|
+
}
|
|
8248
|
+
multiAppend(difficultySprite,
|
|
8249
|
+
createCss2Button(`btnKeymodeHelp`, `?`, () => {
|
|
8250
|
+
const targetKeymode = hasVal(g_keyObj[`transKey${g_keyObj.currentKey}_${g_keyObj.currentPtn}`])
|
|
8251
|
+
? g_keyObj[`transKey${g_keyObj.currentKey}_${g_keyObj.currentPtn}`] : g_keyObj.currentKey;
|
|
8252
|
+
openLink(
|
|
8253
|
+
g_keyObj.defaultKeyList.includes(targetKeymode)
|
|
8254
|
+
? g_lblNameObj.keymodeUrl + targetKeymode
|
|
8255
|
+
: g_lblNameObj[`keyHelp${targetKeymode}`]);
|
|
8256
|
+
}, g_lblPosObj.btnKeymodeHelp, g_cssObj.button_Setting),
|
|
8257
|
+
)
|
|
8230
8258
|
|
|
8231
8259
|
// ---------------------------------------------------
|
|
8232
8260
|
// ハイスコア機能実装時に使用予定のスペース
|
|
@@ -8462,13 +8490,19 @@ const createOptionWindow = _sprite => {
|
|
|
8462
8490
|
|
|
8463
8491
|
const viewAdjustment = () => {
|
|
8464
8492
|
if (g_headerObj.playbackRate !== 1) {
|
|
8465
|
-
const adjustmentVal = isLocalMusicFile(g_stateObj.scoreId)
|
|
8466
|
-
Math.round(g_stateObj.adjustment / g_headerObj.playbackRate)
|
|
8467
|
-
(g_stateObj.adjustment / g_headerObj.playbackRate).toFixed(1);
|
|
8468
|
-
document.getElementById(`lnkAdjustment`).
|
|
8469
|
-
|
|
8470
|
-
|
|
8471
|
-
|
|
8493
|
+
const adjustmentVal = isLocalMusicFile(g_stateObj.scoreId)
|
|
8494
|
+
? Math.round(g_stateObj.adjustment / g_headerObj.playbackRate)
|
|
8495
|
+
: (g_stateObj.adjustment / g_headerObj.playbackRate).toFixed(1);
|
|
8496
|
+
document.getElementById(`lnkAdjustment`).textContent = ``;
|
|
8497
|
+
if (document.getElementById(`lnkAdjustment1`) === null) {
|
|
8498
|
+
multiAppend(
|
|
8499
|
+
adjustmentSprite,
|
|
8500
|
+
createDivCss2Label(`lnkAdjustment1`, ``, g_lblPosObj.lnkAdjustment1),
|
|
8501
|
+
createDivCss2Label(`lnkAdjustment2`, ``, g_lblPosObj.lnkAdjustment2),
|
|
8502
|
+
);
|
|
8503
|
+
}
|
|
8504
|
+
document.getElementById(`lnkAdjustment1`).textContent = `${adjustmentVal}${g_lblNameObj.frame}`;
|
|
8505
|
+
document.getElementById(`lnkAdjustment2`).textContent = `(${g_stateObj.adjustment.toFixed(1)}${g_localStorage.adjustment === g_stateObj.adjustment ? '*' : ''})`;
|
|
8472
8506
|
}
|
|
8473
8507
|
};
|
|
8474
8508
|
viewAdjustment();
|
|
@@ -10628,7 +10662,7 @@ const keyConfigInit = (_kcType = g_kcType, _initFlg = false) => {
|
|
|
10628
10662
|
* ColorPicker(一式)の切替
|
|
10629
10663
|
*/
|
|
10630
10664
|
const changeColorPickers = () => {
|
|
10631
|
-
lnkColorR.
|
|
10665
|
+
lnkColorR.textContent = `[${g_keycons.colorCursorNum + 1} /`;
|
|
10632
10666
|
for (let j = 0; j < g_limitObj.kcColorPickerNum; j++) {
|
|
10633
10667
|
const m = getGroupNum(j);
|
|
10634
10668
|
changeColorPicker(j, `arrow`, g_headerObj.setColor[m]);
|
|
@@ -16282,23 +16316,41 @@ const judgeArrow = _j => {
|
|
|
16282
16316
|
* @param {number} _justFrames Fast/Slowの表示条件フレーム数
|
|
16283
16317
|
*/
|
|
16284
16318
|
const displayDiff = (_difFrame, _fjdg = ``, _justFrames = g_headerObj.justFrames) => {
|
|
16285
|
-
let diffJDisp = ``;
|
|
16286
16319
|
g_workObj.diffList.push(_difFrame);
|
|
16320
|
+
|
|
16287
16321
|
const difCnt = Math.abs(_difFrame);
|
|
16322
|
+
const diffJ = document.getElementById(`diff${_fjdg}J`);
|
|
16323
|
+
|
|
16324
|
+
let text = ``;
|
|
16325
|
+
let activeClass = ``;
|
|
16326
|
+
|
|
16327
|
+
// 1. 各条件の処理
|
|
16288
16328
|
if (_difFrame > g_judgObj.arrowJ[g_judgPosObj.shobon]) {
|
|
16289
|
-
|
|
16329
|
+
text = `Excessive`;
|
|
16330
|
+
activeClass = g_cssObj.common_Excessive;
|
|
16290
16331
|
g_resultObj.excessive++;
|
|
16291
16332
|
lifeDamage(true);
|
|
16333
|
+
|
|
16292
16334
|
} else if (_difFrame > _justFrames) {
|
|
16293
|
-
|
|
16335
|
+
text = `Fast ${difCnt} Frames`;
|
|
16336
|
+
activeClass = g_cssObj.common_diffFast;
|
|
16294
16337
|
g_resultObj.fast++;
|
|
16295
16338
|
quickRetry(`Fast/Slow`);
|
|
16296
|
-
|
|
16297
|
-
|
|
16339
|
+
|
|
16340
|
+
} else if (_difFrame < _justFrames * -1) {
|
|
16341
|
+
text = `Slow ${difCnt} Frames`;
|
|
16342
|
+
activeClass = g_cssObj.common_diffSlow;
|
|
16298
16343
|
g_resultObj.slow++;
|
|
16299
16344
|
quickRetry(`Fast/Slow`);
|
|
16345
|
+
|
|
16346
|
+
}
|
|
16347
|
+
|
|
16348
|
+
// 2. DOMへの反映
|
|
16349
|
+
diffJ.textContent = text;
|
|
16350
|
+
diffJ.classList.value = ``;
|
|
16351
|
+
if (activeClass) {
|
|
16352
|
+
diffJ.classList.add(activeClass);
|
|
16300
16353
|
}
|
|
16301
|
-
document.getElementById(`diff${_fjdg}J`).innerHTML = diffJDisp;
|
|
16302
16354
|
};
|
|
16303
16355
|
|
|
16304
16356
|
/**
|
|
@@ -16368,8 +16420,11 @@ const lifeDamage = (_excessive = false) => {
|
|
|
16368
16420
|
const changeJudgeCharacter = (_name, _character, _fjdg = ``) => {
|
|
16369
16421
|
g_resultObj[_name]++;
|
|
16370
16422
|
g_currentArrows++;
|
|
16371
|
-
document.getElementById(`chara${_fjdg}J`)
|
|
16372
|
-
|
|
16423
|
+
const jdgJ = document.getElementById(`chara${_fjdg}J`);
|
|
16424
|
+
jdgJ.classList.value = ``;
|
|
16425
|
+
jdgJ.classList.add(g_cssObj[`common_${_name}`]);
|
|
16426
|
+
jdgJ.textContent = _character;
|
|
16427
|
+
jdgJ.setAttribute(`cnt`, C_FRM_JDGMOTION);
|
|
16373
16428
|
document.getElementById(`lbl${toCapitalize(_name)}`).textContent = g_resultObj[_name];
|
|
16374
16429
|
};
|
|
16375
16430
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2019/11/19
|
|
8
|
-
* Revised : 2026/06/
|
|
8
|
+
* Revised : 2026/06/14 (v48.5.0)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -424,6 +424,10 @@ const updateWindowSiz = () => {
|
|
|
424
424
|
x: 70, y: 65, w: g_btnWidth() - 120, h: 20, siz: 12, align: C_ALIGN_LEFT,
|
|
425
425
|
},
|
|
426
426
|
|
|
427
|
+
btnKeymodeHelp: {
|
|
428
|
+
x: 150, y: -10, w: 15, h: 30, siz: 16, title: g_msgObj.keymodeHelp,
|
|
429
|
+
border: `solid 1px #666666`, borderRadius: 5,
|
|
430
|
+
},
|
|
427
431
|
lblMusicInfo: {
|
|
428
432
|
x: g_btnX(1 / 4), y: 0, w: g_btnWidth(3 / 4), h: 20, align: C_ALIGN_RIGHT
|
|
429
433
|
},
|
|
@@ -449,6 +453,14 @@ const updateWindowSiz = () => {
|
|
|
449
453
|
lblFadeinBar: {
|
|
450
454
|
x: g_limitObj.setLblLeft, y: 0, type: `range`,
|
|
451
455
|
},
|
|
456
|
+
lnkAdjustment1: {
|
|
457
|
+
x: g_limitObj.setLblLeft, y: -3, w: g_limitObj.setLblWidth, h: g_limitObj.setLblHeight,
|
|
458
|
+
siz: g_limitObj.adjustmentViewSiz,
|
|
459
|
+
},
|
|
460
|
+
lnkAdjustment2: {
|
|
461
|
+
x: g_limitObj.setLblLeft, y: 10, w: g_limitObj.setLblWidth, h: g_limitObj.setLblHeight,
|
|
462
|
+
siz: g_limitObj.adjustmentViewOrgSiz,
|
|
463
|
+
},
|
|
452
464
|
|
|
453
465
|
/** 設定: 譜面明細子画面 */
|
|
454
466
|
lblTooldif: {
|
|
@@ -2717,6 +2729,8 @@ const g_shortcutObj = {
|
|
|
2717
2729
|
ShiftLeft_KeyD: { id: `lnkDifficultyL` },
|
|
2718
2730
|
ShiftRight_KeyD: { id: `lnkDifficultyL` },
|
|
2719
2731
|
KeyD: { id: `lnkDifficultyR` },
|
|
2732
|
+
Slash: { id: `btnKeymodeHelp`, reset: true },
|
|
2733
|
+
F1: { id: `btnKeymodeHelp`, reset: true },
|
|
2720
2734
|
|
|
2721
2735
|
ShiftLeft_ArrowRight: { id: `lnkSpeedR` },
|
|
2722
2736
|
ShiftRight_ArrowRight: { id: `lnkSpeedR` },
|
|
@@ -4860,6 +4874,7 @@ const g_lang_lblNameObj = {
|
|
|
4860
4874
|
|
|
4861
4875
|
helpUrl: `https://github.com/cwtickle/danoniplus/wiki/AboutGameSystem`,
|
|
4862
4876
|
securityUrl: `https://github.com/cwtickle/danoniplus/security/policy`,
|
|
4877
|
+
keymodeUrl: `https://github.com/cwtickle/danoniplus/wiki/Keys-`,
|
|
4863
4878
|
},
|
|
4864
4879
|
En: {
|
|
4865
4880
|
dataDeleteOFFDesc: `Select the type of data you wish to delete and press "Reset".`,
|
|
@@ -4922,6 +4937,7 @@ const g_lang_lblNameObj = {
|
|
|
4922
4937
|
|
|
4923
4938
|
helpUrl: `https://github.com/cwtickle/danoniplus-docs/wiki/AboutGameSystem`,
|
|
4924
4939
|
securityUrl: `https://github.com/cwtickle/danoniplus-docs/wiki/SecurityPolicy`,
|
|
4940
|
+
keymodeUrl: `https://github.com/cwtickle/danoniplus-docs/wiki/Keys-`,
|
|
4925
4941
|
},
|
|
4926
4942
|
};
|
|
4927
4943
|
|
|
@@ -4972,6 +4988,8 @@ const g_lang_msgObj = {
|
|
|
4972
4988
|
fadein: `譜面を途中から再生します。\n途中から開始した場合はハイスコアを保存しません。`,
|
|
4973
4989
|
volume: `ゲーム内の音量を設定します。`,
|
|
4974
4990
|
|
|
4991
|
+
keymodeHelp: `現在選択中の譜面のキータイプの説明ページへリンクします(外部リンク)`,
|
|
4992
|
+
|
|
4975
4993
|
graph: `譜面密度や速度変化状況、\n譜面の難易度などの情報を表示します。`,
|
|
4976
4994
|
dataSave: `ハイスコア、リバース設定、\nキーコンフィグの保存の有無を設定します。`,
|
|
4977
4995
|
toDisplay: `プレイ画面上のオブジェクトの\n表示・非表示(一部透明度)を設定します。`,
|
|
@@ -5078,6 +5096,8 @@ const g_lang_msgObj = {
|
|
|
5078
5096
|
fadein: `Plays the chart from the middle.\nIf you start in the middle, the high score will not be saved.`,
|
|
5079
5097
|
volume: `Set the in-game volume.`,
|
|
5080
5098
|
|
|
5099
|
+
keymodeHelp: `Go to the explanation page for the key type of the currently selected chart (External Link).`,
|
|
5100
|
+
|
|
5081
5101
|
graph: `Displays detailed information about the chart, such as chart's density status, sequences' velocity changes, and chart's difficulty.`,
|
|
5082
5102
|
dataSave: `Set whether to save the high score, reverse setting, and key config.`,
|
|
5083
5103
|
toDisplay: `Set the display or non-display (partial transparency) of objects on the play screen.`,
|