danoniplus 46.3.0 → 46.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 +192 -195
- package/js/lib/danoni_constants.js +10 -1
- package/package.json +2 -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/03/
|
|
7
|
+
* Revised : 2026/03/26
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 46.
|
|
12
|
-
const g_revisedDate = `2026/03/
|
|
11
|
+
const g_version = `Ver 46.4.0`;
|
|
12
|
+
const g_revisedDate = `2026/03/26`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -1461,9 +1461,10 @@ const getLongestStr = _array => {
|
|
|
1461
1461
|
* @returns {HTMLDivElement}
|
|
1462
1462
|
*/
|
|
1463
1463
|
const createDescDiv = (_id, _str, { altId = _id, siz = g_limitObj.mainSiz } = {}) =>
|
|
1464
|
-
createDivCss2Label(_id, _str,
|
|
1464
|
+
createDivCss2Label(_id, _str, {
|
|
1465
|
+
...g_lblPosObj[altId],
|
|
1465
1466
|
siz: getFontSize2(_str, g_lblPosObj[altId]?.w || g_sWidth, { maxSiz: siz }),
|
|
1466
|
-
})
|
|
1467
|
+
});
|
|
1467
1468
|
|
|
1468
1469
|
/*-----------------------------------------------------------*/
|
|
1469
1470
|
/* ラベル・ボタン・オブジェクトの作成 */
|
|
@@ -5282,9 +5283,7 @@ const titleInit = (_initFlg = false) => {
|
|
|
5282
5283
|
g_keyObj.prevKey = `Dummy${g_settings.musicIdxNum}`;
|
|
5283
5284
|
g_langStorage.bgmVolume = g_stateObj.bgmVolume;
|
|
5284
5285
|
localStorage.setItem(`danoni-locale`, JSON.stringify(g_langStorage));
|
|
5285
|
-
},
|
|
5286
|
-
resetFunc: () => optionInit(),
|
|
5287
|
-
}, g_lblPosObj.btnStart_music), g_cssObj.button_Tweet),
|
|
5286
|
+
}, { ...g_lblPosObj.btnStart_music, resetFunc: () => optionInit() }, g_cssObj.button_Tweet),
|
|
5288
5287
|
createCss2Button(`btnMusicSelectPrev`, `↑`, () => changeMSelect(-1),
|
|
5289
5288
|
g_lblPosObj.btnMusicSelectPrev, g_cssObj.button_Setting),
|
|
5290
5289
|
createCss2Button(`btnMusicSelectNext`, `↓`, () => changeMSelect(1),
|
|
@@ -5301,10 +5300,9 @@ const titleInit = (_initFlg = false) => {
|
|
|
5301
5300
|
g_stateObj.bgmMuteFlg ? pauseBGM() : playBGM(0);
|
|
5302
5301
|
evt.target.innerHTML = g_stateObj.bgmMuteFlg ? g_emojiObj.muted : g_emojiObj.speaker;
|
|
5303
5302
|
}, g_lblPosObj.btnBgmMute, g_cssObj.button_Default),
|
|
5304
|
-
createCss2Button(`btnBgmVolume`, `${g_stateObj.bgmVolume}${g_lblNameObj.percent}`, () => setBGMVolume(),
|
|
5305
|
-
|
|
5306
|
-
|
|
5307
|
-
}, g_lblPosObj.btnBgmVolume), g_cssObj.button_Default),
|
|
5303
|
+
createCss2Button(`btnBgmVolume`, `${g_stateObj.bgmVolume}${g_lblNameObj.percent}`, () => setBGMVolume(), {
|
|
5304
|
+
...g_lblPosObj.btnBgmVolume, cxtFunc: () => setBGMVolume(-1),
|
|
5305
|
+
}, g_cssObj.button_Default),
|
|
5308
5306
|
createCss2Button(`btnBgmVolumeL`, `<`, () => setBGMVolume(-1),
|
|
5309
5307
|
g_lblPosObj.btnBgmVolumeL, g_cssObj.button_Setting),
|
|
5310
5308
|
createCss2Button(`btnBgmVolumeR`, `>`, () => setBGMVolume(),
|
|
@@ -5421,7 +5419,7 @@ const titleInit = (_initFlg = false) => {
|
|
|
5421
5419
|
*/
|
|
5422
5420
|
const createCreditBtn = (_id, _text, _url) =>
|
|
5423
5421
|
createCss2Button(_id, _text, () => true,
|
|
5424
|
-
|
|
5422
|
+
{ ...g_lblPosObj[_id], siz: getLinkSiz(_text), whiteSpace: `normal`, resetFunc: () => openLink(_url) }, g_cssObj.button_Default);
|
|
5425
5423
|
|
|
5426
5424
|
if (g_headerObj.musicSelectUse && getQueryParamVal(`scoreId`) === null) {
|
|
5427
5425
|
// 選曲モードではクレジット表示は別で行われているため表示しない
|
|
@@ -5460,34 +5458,34 @@ const titleInit = (_initFlg = false) => {
|
|
|
5460
5458
|
}, g_lblPosObj.btnReset, g_cssObj.button_Reset),
|
|
5461
5459
|
|
|
5462
5460
|
// ロケール切替
|
|
5463
|
-
createCss2Button(`btnReload`, g_localeObj.val, () => true,
|
|
5464
|
-
|
|
5465
|
-
|
|
5466
|
-
|
|
5467
|
-
|
|
5468
|
-
|
|
5469
|
-
|
|
5470
|
-
|
|
5471
|
-
|
|
5461
|
+
createCss2Button(`btnReload`, g_localeObj.val, () => true, {
|
|
5462
|
+
...g_lblPosObj.btnReload,
|
|
5463
|
+
resetFunc: () => {
|
|
5464
|
+
g_localeObj.num = (++g_localeObj.num) % g_localeObj.list.length;
|
|
5465
|
+
g_langStorage.locale = g_localeObj.list[g_localeObj.num];
|
|
5466
|
+
localStorage.setItem(`danoni-locale`, JSON.stringify(g_langStorage));
|
|
5467
|
+
location.reload();
|
|
5468
|
+
},
|
|
5469
|
+
}, g_cssObj.button_Start),
|
|
5472
5470
|
|
|
5473
5471
|
// ヘルプ
|
|
5474
|
-
createCss2Button(`btnHelp`, `?`, () => true,
|
|
5475
|
-
|
|
5476
|
-
|
|
5477
|
-
|
|
5472
|
+
createCss2Button(`btnHelp`, `?`, () => true, {
|
|
5473
|
+
...g_lblPosObj.btnHelp,
|
|
5474
|
+
resetFunc: () => openLink(g_lblNameObj.helpUrl),
|
|
5475
|
+
}, g_cssObj.button_Setting),
|
|
5478
5476
|
|
|
5479
5477
|
// バージョン描画
|
|
5480
|
-
createCss2Button(`lnkVersion`, versionName, () => true,
|
|
5481
|
-
|
|
5482
|
-
|
|
5483
|
-
|
|
5484
|
-
|
|
5478
|
+
createCss2Button(`lnkVersion`, versionName, () => true, {
|
|
5479
|
+
...g_lblPosObj.lnkVersion,
|
|
5480
|
+
siz: getFontSize2(versionName, g_sWidth * 3 / 4 - 20, { maxSiz: 12 }),
|
|
5481
|
+
resetFunc: () => openLink(`https://github.com/cwtickle/danoniplus`),
|
|
5482
|
+
}, g_cssObj.button_Tweet),
|
|
5485
5483
|
|
|
5486
5484
|
// セキュリティリンク
|
|
5487
|
-
createCss2Button(`lnkComparison`, g_emojiObj.shield, () => true,
|
|
5488
|
-
|
|
5489
|
-
|
|
5490
|
-
|
|
5485
|
+
createCss2Button(`lnkComparison`, g_emojiObj.shield, () => true, {
|
|
5486
|
+
...g_lblPosObj.lnkComparison,
|
|
5487
|
+
resetFunc: () => openLink(g_lblNameObj.securityUrl),
|
|
5488
|
+
}, g_cssObj.button_Tweet),
|
|
5491
5489
|
);
|
|
5492
5490
|
|
|
5493
5491
|
// コメントエリア作成
|
|
@@ -6008,10 +6006,7 @@ const changeMSelect = (_num, _initFlg = false) => {
|
|
|
6008
6006
|
deleteChildspriteAll(`keyTitleSprite`);
|
|
6009
6007
|
makeDedupliArray(tmpKeyList).sort((a, b) => parseInt(a) - parseInt(b))
|
|
6010
6008
|
.forEach((val, j) => keyTitleSprite.appendChild(
|
|
6011
|
-
createDivCss2Label(`btnKeyTitle${val}`, val,
|
|
6012
|
-
Object.assign({ x: 10 + j * 40 }, g_lblPosObj.btnKeyTitle)
|
|
6013
|
-
)));
|
|
6014
|
-
|
|
6009
|
+
createDivCss2Label(`btnKeyTitle${val}`, val, { ...g_lblPosObj.btnKeyTitle, x: 10 + j * 40 })));
|
|
6015
6010
|
|
|
6016
6011
|
// 選択した楽曲の選択位置を表示
|
|
6017
6012
|
lblMusicCnt.innerHTML = `${g_settings.musicIdxNum + 1} / ${g_headerObj.musicIdxList.length}`;
|
|
@@ -6276,15 +6271,15 @@ const dataMgtInit = () => {
|
|
|
6276
6271
|
g_customJsObj.dataMgt.forEach(func => func());
|
|
6277
6272
|
|
|
6278
6273
|
multiAppend(divRoot,
|
|
6279
|
-
createCss2Button(`btnBack`, g_lblNameObj.b_back, () => true,
|
|
6280
|
-
|
|
6281
|
-
|
|
6282
|
-
|
|
6283
|
-
|
|
6284
|
-
createCss2Button(`btnPrecond`, g_lblNameObj.b_precond, () => true,
|
|
6285
|
-
|
|
6286
|
-
|
|
6287
|
-
|
|
6274
|
+
createCss2Button(`btnBack`, g_lblNameObj.b_back, () => true, {
|
|
6275
|
+
...g_lblPosObj.btnResetBack,
|
|
6276
|
+
resetFunc: () => [`title`, `precondition`].includes(prevPage) ? titleInit() : g_moveSettingWindow(false),
|
|
6277
|
+
}, g_cssObj.button_Back),
|
|
6278
|
+
|
|
6279
|
+
createCss2Button(`btnPrecond`, g_lblNameObj.b_precond, () => true, {
|
|
6280
|
+
...g_lblPosObj.btnPrecond,
|
|
6281
|
+
resetFunc: () => preconditionInit(),
|
|
6282
|
+
}, g_cssObj.button_Setting),
|
|
6288
6283
|
|
|
6289
6284
|
createCss2Button(`btnSafeMode`, g_lblNameObj.b_safeMode +
|
|
6290
6285
|
(g_langStorage.safeMode === C_FLG_ON ? C_FLG_OFF : C_FLG_ON), () => {
|
|
@@ -6328,14 +6323,15 @@ const dataMgtInit = () => {
|
|
|
6328
6323
|
reloadFlg = true;
|
|
6329
6324
|
sessionStorage.setItem(`resetBackup${g_settings.musicIdxNum}`, JSON.stringify(Array.from(backupData.entries())));
|
|
6330
6325
|
}
|
|
6331
|
-
},
|
|
6326
|
+
}, {
|
|
6327
|
+
...g_lblPosObj.btnResetN,
|
|
6332
6328
|
visibility: g_langStorage.safeMode === C_FLG_OFF ? C_DIS_INHERIT : `hidden`,
|
|
6333
6329
|
resetFunc: () => {
|
|
6334
6330
|
if (reloadFlg) {
|
|
6335
6331
|
location.reload();
|
|
6336
6332
|
}
|
|
6337
6333
|
},
|
|
6338
|
-
}
|
|
6334
|
+
}, g_cssObj.button_Reset),
|
|
6339
6335
|
|
|
6340
6336
|
// リカバリー用のボタン
|
|
6341
6337
|
createCss2Button(`btnUndo`, g_lblNameObj.b_undo, () => {
|
|
@@ -6451,13 +6447,13 @@ const preconditionInit = () => {
|
|
|
6451
6447
|
dataMgtInit();
|
|
6452
6448
|
}, g_lblPosObj.btnReset, g_cssObj.button_Reset),
|
|
6453
6449
|
|
|
6454
|
-
createCss2Button(`btnBack`, g_lblNameObj.b_back, () => true,
|
|
6455
|
-
|
|
6456
|
-
|
|
6457
|
-
|
|
6458
|
-
|
|
6459
|
-
|
|
6460
|
-
|
|
6450
|
+
createCss2Button(`btnBack`, g_lblNameObj.b_back, () => true, {
|
|
6451
|
+
...g_lblPosObj.btnPrecond,
|
|
6452
|
+
resetFunc: () => {
|
|
6453
|
+
viewKeyStorage.cache = new Map();
|
|
6454
|
+
prevPage === `dataMgt` ? dataMgtInit() : g_moveSettingWindow(false);
|
|
6455
|
+
},
|
|
6456
|
+
}, g_cssObj.button_Back),
|
|
6461
6457
|
);
|
|
6462
6458
|
// キー操作イベント(デフォルト)
|
|
6463
6459
|
setShortcutEvent(g_currentPage, () => true, { dfEvtFlg: true });
|
|
@@ -6486,33 +6482,33 @@ const commonSettingBtn = _labelName => {
|
|
|
6486
6482
|
multiAppend(divRoot,
|
|
6487
6483
|
|
|
6488
6484
|
// タイトル画面へ戻る
|
|
6489
|
-
createCss2Button(`btnBack`, g_lblNameObj.b_back, () => true,
|
|
6490
|
-
|
|
6491
|
-
|
|
6492
|
-
|
|
6485
|
+
createCss2Button(`btnBack`, g_lblNameObj.b_back, () => true, {
|
|
6486
|
+
...g_lblPosObj.btnBack,
|
|
6487
|
+
animationName: (g_initialFlg ? `` : `smallToNormalY`), resetFunc: () => titleInit(),
|
|
6488
|
+
}, g_cssObj.button_Back),
|
|
6493
6489
|
|
|
6494
6490
|
// キーコンフィグ画面へ移動
|
|
6495
|
-
createCss2Button(`btnKeyConfig`, g_lblNameObj.b_keyConfig, () => true,
|
|
6496
|
-
|
|
6497
|
-
|
|
6498
|
-
|
|
6491
|
+
createCss2Button(`btnKeyConfig`, g_lblNameObj.b_keyConfig, () => true, {
|
|
6492
|
+
...g_lblPosObj.btnKeyConfig,
|
|
6493
|
+
animationName: (g_initialFlg ? `` : `smallToNormalY`), resetFunc: () => keyConfigInit(`Main`),
|
|
6494
|
+
}, g_cssObj.button_Setting),
|
|
6499
6495
|
|
|
6500
6496
|
// プレイ開始
|
|
6501
6497
|
makePlayButton(() => loadMusic()),
|
|
6502
6498
|
|
|
6503
6499
|
// Display設定へ移動
|
|
6504
|
-
createCss2Button(`btn${_labelName}`, `>`, () => true,
|
|
6505
|
-
|
|
6506
|
-
|
|
6507
|
-
|
|
6508
|
-
|
|
6500
|
+
createCss2Button(`btn${_labelName}`, `>`, () => true, {
|
|
6501
|
+
...g_lblPosObj.btnSwitchSetting,
|
|
6502
|
+
title: g_msgObj[`to${_labelName}`], resetFunc: () => g_moveSettingWindow(),
|
|
6503
|
+
cxtFunc: () => g_moveSettingWindow(true, -1),
|
|
6504
|
+
}, g_cssObj.button_Mini),
|
|
6509
6505
|
|
|
6510
6506
|
// データセーブフラグの切替
|
|
6511
|
-
createCss2Button(`btnSave`, g_lblNameObj.dataSave, evt => switchSave(evt),
|
|
6512
|
-
|
|
6513
|
-
|
|
6514
|
-
|
|
6515
|
-
|
|
6507
|
+
createCss2Button(`btnSave`, g_lblNameObj.dataSave, evt => switchSave(evt), {
|
|
6508
|
+
...g_lblPosObj.btnSave,
|
|
6509
|
+
cxtFunc: evt => switchSave(evt),
|
|
6510
|
+
visibility: g_langStorage.safeMode === C_FLG_OFF ? C_DIS_INHERIT : `hidden`,
|
|
6511
|
+
}, g_cssObj.button_Default, (g_stateObj.dataSaveFlg ? g_cssObj.button_ON : g_cssObj.button_OFF)),
|
|
6516
6512
|
|
|
6517
6513
|
// データ管理画面へ移動
|
|
6518
6514
|
createCss2Button(`btnReset`, g_lblNameObj.dataReset, () => {
|
|
@@ -6520,19 +6516,19 @@ const commonSettingBtn = _labelName => {
|
|
|
6520
6516
|
}, g_lblPosObj.btnReset, g_cssObj.button_Reset),
|
|
6521
6517
|
|
|
6522
6518
|
// 前提条件表示用画面へ移動(debug=trueの場合のみ)
|
|
6523
|
-
createCss2Button(`btnPrecond`, g_lblNameObj.b_precond, () => true,
|
|
6524
|
-
|
|
6525
|
-
|
|
6526
|
-
|
|
6519
|
+
createCss2Button(`btnPrecond`, g_lblNameObj.b_precond, () => true, {
|
|
6520
|
+
...g_lblPosObj.btnPrecond,
|
|
6521
|
+
resetFunc: () => preconditionInit(),
|
|
6522
|
+
}, g_cssObj.button_Setting),
|
|
6527
6523
|
|
|
6528
6524
|
// 設定内容サマリを表示
|
|
6529
|
-
createCss2Button(`btnSettingSummary`, `>`, () => true,
|
|
6530
|
-
|
|
6531
|
-
|
|
6532
|
-
|
|
6533
|
-
|
|
6534
|
-
|
|
6535
|
-
|
|
6525
|
+
createCss2Button(`btnSettingSummary`, `>`, () => true, {
|
|
6526
|
+
...g_lblPosObj.btnSettingSummary,
|
|
6527
|
+
resetFunc: () => {
|
|
6528
|
+
g_stateObj.settingSummaryVisible = !g_stateObj.settingSummaryVisible;
|
|
6529
|
+
visibleSettingSummary(g_stateObj.settingSummaryVisible);
|
|
6530
|
+
},
|
|
6531
|
+
}, g_cssObj.button_Mini),
|
|
6536
6532
|
);
|
|
6537
6533
|
makeSettingSummary();
|
|
6538
6534
|
};
|
|
@@ -6592,10 +6588,9 @@ const updateSettingSummary = () => {
|
|
|
6592
6588
|
* @param {function} _func
|
|
6593
6589
|
* @returns {HTMLDivElement}
|
|
6594
6590
|
*/
|
|
6595
|
-
const makePlayButton = _func => createCss2Button(`btnPlay`, g_lblNameObj.b_play, () => true,
|
|
6596
|
-
|
|
6597
|
-
|
|
6598
|
-
}), g_cssObj.button_Next);
|
|
6591
|
+
const makePlayButton = _func => createCss2Button(`btnPlay`, g_lblNameObj.b_play, () => true, {
|
|
6592
|
+
...g_lblPosObj.btnPlay, animationName: (g_initialFlg ? `` : `smallToNormalY`), resetFunc: _func,
|
|
6593
|
+
}, g_cssObj.button_Next);
|
|
6599
6594
|
|
|
6600
6595
|
/**
|
|
6601
6596
|
* 設定・オプション画面初期化
|
|
@@ -6611,7 +6606,7 @@ const optionInit = () => {
|
|
|
6611
6606
|
// 楽曲データの表示
|
|
6612
6607
|
const text = getMusicInfoView();
|
|
6613
6608
|
divRoot.appendChild(createDivCss2Label(`lblMusicInfo`, text,
|
|
6614
|
-
|
|
6609
|
+
{ ...g_lblPosObj.lblMusicInfo, siz: getFontSize2(text, g_btnWidth(3 / 4), { maxSiz: 12 }) }));
|
|
6615
6610
|
|
|
6616
6611
|
// タイトル文字描画
|
|
6617
6612
|
divRoot.appendChild(getTitleDivLabel(`lblTitle`, g_lblNameObj.settings, 0, 15, `settings_Title`));
|
|
@@ -7343,10 +7338,11 @@ const makeHighScore = _scoreId => {
|
|
|
7343
7338
|
});
|
|
7344
7339
|
// ランク、クリアランプ、特殊設定条件
|
|
7345
7340
|
multiAppend(detailHighScore,
|
|
7346
|
-
createDivCss2Label(`lblHRank`, g_localStorage.highscores?.[scoreName]?.rankMark ?? `--`,
|
|
7341
|
+
createDivCss2Label(`lblHRank`, g_localStorage.highscores?.[scoreName]?.rankMark ?? `--`, {
|
|
7342
|
+
...g_lblPosObj.lblHRank,
|
|
7347
7343
|
color: g_localStorage.highscores?.[scoreName]?.rankColor ?? `#666666`,
|
|
7348
7344
|
fontFamily: getBasicFont(`"Bookman Old Style"`),
|
|
7349
|
-
})
|
|
7345
|
+
}),
|
|
7350
7346
|
createScoreLabel(`lblHDateTime`, g_localStorage.highscores?.[scoreName]?.dateTime ?? `----/--/-- --:--`, { yPos: 12 }),
|
|
7351
7347
|
createScoreLabel(`lblHMarks`,
|
|
7352
7348
|
`${g_localStorage.highscores?.[scoreName]?.fullCombo ?? '' ? '<span class="result_FullCombo">◆</span>' : ''}` +
|
|
@@ -7401,7 +7397,7 @@ const makeHighScore = _scoreId => {
|
|
|
7401
7397
|
delete g_localStorage.highscores[scoreName];
|
|
7402
7398
|
makeHighScore(_scoreId);
|
|
7403
7399
|
}
|
|
7404
|
-
},
|
|
7400
|
+
}, { ...g_lblPosObj.lnkHighScore, btnStyle: `Reset` }),
|
|
7405
7401
|
makeDifLblCssButton(`lnkHighScore`, g_lblNameObj.s_result, 8, () => {
|
|
7406
7402
|
copyTextToClipboard(keyIsShift() ? resultCommon : resultText, g_msgInfoObj.I_0001);
|
|
7407
7403
|
}, g_lblPosObj.lnkHighScore),
|
|
@@ -7796,10 +7792,10 @@ const createOptionWindow = _sprite => {
|
|
|
7796
7792
|
];
|
|
7797
7793
|
|
|
7798
7794
|
spriteList.scroll.appendChild(
|
|
7799
|
-
createCss2Button(`btnReverse`, `${g_lblNameObj.Reverse}:${getStgDetailName(g_stateObj.reverse)}`, evt => setReverse(evt.target),
|
|
7800
|
-
|
|
7801
|
-
|
|
7802
|
-
|
|
7795
|
+
createCss2Button(`btnReverse`, `${g_lblNameObj.Reverse}:${getStgDetailName(g_stateObj.reverse)}`, evt => setReverse(evt.target), {
|
|
7796
|
+
...g_lblPosObj.btnReverse,
|
|
7797
|
+
cxtFunc: evt => setReverse(evt.target),
|
|
7798
|
+
}, g_cssObj.button_Default, g_cssObj[`button_Rev${g_stateObj.reverse}`])
|
|
7803
7799
|
);
|
|
7804
7800
|
spriteList[g_settings.scrolls.length > 1 ? `reverse` : `scroll`].style.display = C_DIS_NONE;
|
|
7805
7801
|
} else {
|
|
@@ -7847,10 +7843,10 @@ const createOptionWindow = _sprite => {
|
|
|
7847
7843
|
)
|
|
7848
7844
|
);
|
|
7849
7845
|
spriteList.gauge.appendChild(
|
|
7850
|
-
createCss2Button(`lnkExcessive`, g_lblNameObj.Excessive, evt => setExcessive(evt.target),
|
|
7851
|
-
|
|
7852
|
-
|
|
7853
|
-
|
|
7846
|
+
createCss2Button(`lnkExcessive`, g_lblNameObj.Excessive, evt => setExcessive(evt.target), {
|
|
7847
|
+
...g_lblPosObj.btnExcessive,
|
|
7848
|
+
title: g_msgObj.excessive, cxtFunc: evt => setExcessive(evt.target),
|
|
7849
|
+
}, g_cssObj.button_Default, g_cssObj[`button_Rev${g_stateObj.excessive}`])
|
|
7854
7850
|
);
|
|
7855
7851
|
|
|
7856
7852
|
// ---------------------------------------------------
|
|
@@ -8619,10 +8615,9 @@ const createSettingsDisplayWindow = _sprite => {
|
|
|
8619
8615
|
createDivCss2Label(`lblAppearancePos`, `${g_hidSudObj.distH[g_stateObj.appearance](g_hidSudObj.filterPos)}`, g_lblPosObj.lblAppearancePos),
|
|
8620
8616
|
createDivCss2Label(`lblAppearanceBar`, `<input id="appearanceSlider" type="range" value="${g_hidSudObj.filterPos}" min="0" max="100" step="1">`,
|
|
8621
8617
|
g_lblPosObj.lblAppearanceBar),
|
|
8622
|
-
createCss2Button(`lnkLockBtn`, g_lblNameObj.filterLock, evt => setLockView(evt.target),
|
|
8623
|
-
|
|
8624
|
-
|
|
8625
|
-
}), g_cssObj.button_Default, g_cssObj[`button_Rev${g_stateObj.filterLock}`]),
|
|
8618
|
+
createCss2Button(`lnkLockBtn`, g_lblNameObj.filterLock, evt => setLockView(evt.target), {
|
|
8619
|
+
...g_lblPosObj.lnkLockBtn, cxtFunc: evt => setLockView(evt.target),
|
|
8620
|
+
}, g_cssObj.button_Default, g_cssObj[`button_Rev${g_stateObj.filterLock}`]),
|
|
8626
8621
|
);
|
|
8627
8622
|
|
|
8628
8623
|
const setLockView = (_btn) => {
|
|
@@ -8821,14 +8816,15 @@ const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF],
|
|
|
8821
8816
|
funcEx();
|
|
8822
8817
|
createExpandedScView(_name);
|
|
8823
8818
|
},
|
|
8824
|
-
|
|
8819
|
+
{
|
|
8820
|
+
...g_lblPosObj.btnReverse,
|
|
8825
8821
|
cxtFunc: () => {
|
|
8826
8822
|
setSetting(-1, `${_name}Type`, { maxSiz: g_limitObj.difSelectorSiz });
|
|
8827
8823
|
funcEx();
|
|
8828
8824
|
createExpandedScView(_name);
|
|
8829
8825
|
},
|
|
8830
8826
|
title: g_msgObj[`${_name}Type`] ?? ``,
|
|
8831
|
-
},
|
|
8827
|
+
}, g_cssObj.button_Default, g_cssObj.button_RevON);
|
|
8832
8828
|
|
|
8833
8829
|
/**
|
|
8834
8830
|
* 拡張ボタンのショートカット表示、拡張ボタンのCSS切り替え
|
|
@@ -8890,7 +8886,9 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
8890
8886
|
createDescDiv(`kcDesc`, g_lblNameObj.kcDesc.split(`{0}`).join(g_kCd[C_KEY_RETRY])
|
|
8891
8887
|
.split(`{1}:`).join(g_isMac ? `` : `Delete:`)),
|
|
8892
8888
|
|
|
8893
|
-
createDescDiv(`kcShuffleDesc`,
|
|
8889
|
+
createDescDiv(`kcShuffleDesc`,
|
|
8890
|
+
g_headerObj.shuffleUse && g_settings.shuffles.filter(val => val.endsWith(`+`)).length > 0
|
|
8891
|
+
? g_lblNameObj.kcShuffleDesc : g_lblNameObj.kcNoShuffleDesc),
|
|
8894
8892
|
);
|
|
8895
8893
|
|
|
8896
8894
|
// キーの一覧を表示
|
|
@@ -9438,7 +9436,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
9438
9436
|
keyConfigInit(g_kcType);
|
|
9439
9437
|
};
|
|
9440
9438
|
|
|
9441
|
-
const colorPickSprite = createEmptySprite(divRoot, `colorPickSprite`,
|
|
9439
|
+
const colorPickSprite = createEmptySprite(divRoot, `colorPickSprite`, { ...g_windowObj.colorPickSprite, title: g_msgObj.pickArrow });
|
|
9442
9440
|
if ([`Default`, `Type0`].includes(g_colorType)) {
|
|
9443
9441
|
colorPickSprite.style.display = C_DIS_NONE;
|
|
9444
9442
|
}
|
|
@@ -9465,8 +9463,8 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
9465
9463
|
}
|
|
9466
9464
|
}, g_lblPosObj.lnkColorCopy, g_cssObj.button_Start),
|
|
9467
9465
|
|
|
9468
|
-
createDivCss2Label(`lblPickArrow`, g_lblNameObj.s_arrow,
|
|
9469
|
-
createDivCss2Label(`lblPickFrz`, g_lblNameObj.s_frz,
|
|
9466
|
+
createDivCss2Label(`lblPickArrow`, g_lblNameObj.s_arrow, { ...g_lblPosObj.pickPos, y: 0 }),
|
|
9467
|
+
createDivCss2Label(`lblPickFrz`, g_lblNameObj.s_frz, { ...g_lblPosObj.pickPos, y: 140 }),
|
|
9470
9468
|
|
|
9471
9469
|
// ColorPickerの色を元に戻す
|
|
9472
9470
|
createCss2Button(`lnkColorReset`, g_lblNameObj.b_cReset, () => {
|
|
@@ -9605,7 +9603,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
9605
9603
|
configKeyGroupList.forEach((val, j) =>
|
|
9606
9604
|
divRoot.appendChild(
|
|
9607
9605
|
createCss2Button(`key${j}`, `${j + 1}`, () => appearConfigSteps(j),
|
|
9608
|
-
|
|
9606
|
+
{ ...g_lblPosObj.lnkKeySwitch, y: 110 + j * 20 }, g_cssObj.button_Mini),
|
|
9609
9607
|
));
|
|
9610
9608
|
}
|
|
9611
9609
|
|
|
@@ -9620,32 +9618,32 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
9620
9618
|
g_currentj = 0;
|
|
9621
9619
|
g_currentk = 0;
|
|
9622
9620
|
g_prevKey = 0;
|
|
9623
|
-
},
|
|
9624
|
-
resetFunc: () => g_moveSettingWindow(false),
|
|
9625
|
-
}
|
|
9621
|
+
}, {
|
|
9622
|
+
...g_lblPosObj.btnKcBack, resetFunc: () => g_moveSettingWindow(false),
|
|
9623
|
+
}, g_cssObj.button_Back),
|
|
9626
9624
|
|
|
9627
9625
|
createDivCss2Label(`lblPattern`, `${g_lblNameObj.KeyPattern}: ${g_keyObj.currentPtn === -1 ?
|
|
9628
9626
|
'Self' : g_keyObj.currentPtn + 1}${lblTransKey}`, g_lblPosObj.lblPattern),
|
|
9629
9627
|
|
|
9630
9628
|
// パターン変更ボタン描画(右回り)
|
|
9631
|
-
createCss2Button(`btnPtnChangeR`, `>`, () => true,
|
|
9632
|
-
resetFunc: () => changePattern(),
|
|
9633
|
-
}
|
|
9629
|
+
createCss2Button(`btnPtnChangeR`, `>`, () => true, {
|
|
9630
|
+
...g_lblPosObj.btnPtnChangeR, resetFunc: () => changePattern(),
|
|
9631
|
+
}, g_cssObj.button_Mini),
|
|
9634
9632
|
|
|
9635
9633
|
// パターン変更ボタン描画(左回り)
|
|
9636
|
-
createCss2Button(`btnPtnChangeL`, `<`, () => true,
|
|
9637
|
-
resetFunc: () => changePattern(-1),
|
|
9638
|
-
}
|
|
9634
|
+
createCss2Button(`btnPtnChangeL`, `<`, () => true, {
|
|
9635
|
+
...g_lblPosObj.btnPtnChangeL, resetFunc: () => changePattern(-1),
|
|
9636
|
+
}, g_cssObj.button_Mini),
|
|
9639
9637
|
|
|
9640
9638
|
// パターン変更ボタン描画(右回り/別キーモード間スキップ)
|
|
9641
|
-
createCss2Button(`btnPtnChangeRR`, `|>`, () => true,
|
|
9642
|
-
resetFunc: () => changePattern(1, true),
|
|
9643
|
-
}
|
|
9639
|
+
createCss2Button(`btnPtnChangeRR`, `|>`, () => true, {
|
|
9640
|
+
...g_lblPosObj.btnPtnChangeRR, resetFunc: () => changePattern(1, true),
|
|
9641
|
+
}, g_cssObj.button_Setting),
|
|
9644
9642
|
|
|
9645
9643
|
// パターン変更ボタン描画(左回り/別キーモード間スキップ)
|
|
9646
|
-
createCss2Button(`btnPtnChangeLL`, `<|`, () => true,
|
|
9647
|
-
resetFunc: () => changePattern(-1, true),
|
|
9648
|
-
}
|
|
9644
|
+
createCss2Button(`btnPtnChangeLL`, `<|`, () => true, {
|
|
9645
|
+
...g_lblPosObj.btnPtnChangeLL, resetFunc: () => changePattern(-1, true),
|
|
9646
|
+
}, g_cssObj.button_Setting),
|
|
9649
9647
|
|
|
9650
9648
|
// キーコンフィグリセットボタン描画
|
|
9651
9649
|
createCss2Button(`btnReset`, g_lblNameObj.b_reset, () => {
|
|
@@ -9677,12 +9675,17 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
9677
9675
|
// また、直前と同じキーを押した場合(BackSpaceを除く)はキー操作を無効にする
|
|
9678
9676
|
const disabledKeys = [240, 242, 243, 244, 91, 29, 28, 27, 259, g_prevKey];
|
|
9679
9677
|
|
|
9678
|
+
if (g_localeObj.val === `Ja`) {
|
|
9679
|
+
disabledKeys.unshift(229);
|
|
9680
|
+
}
|
|
9681
|
+
if (disabledKeys.includes(setKey) || g_kCdN[setKey] === undefined) {
|
|
9682
|
+
makeInfoWindow(g_msgInfoObj.I_0002, `fadeOut0`);
|
|
9683
|
+
return;
|
|
9684
|
+
} else if ((keyIsDown(g_kCdNameObj.metaLKey) || keyIsDown(g_kCdNameObj.metaRKey)) && keyIsShift()) {
|
|
9685
|
+
return;
|
|
9686
|
+
}
|
|
9680
9687
|
if (selectedKc === `TitleBack` || selectedKc === `Retry`) {
|
|
9681
9688
|
// プレイ中ショートカットキー変更
|
|
9682
|
-
if (disabledKeys.includes(setKey) || g_kCdN[setKey] === undefined) {
|
|
9683
|
-
makeInfoWindow(g_msgInfoObj.I_0002, `fadeOut0`);
|
|
9684
|
-
return;
|
|
9685
|
-
}
|
|
9686
9689
|
g_headerObj[`key${selectedKc}`] = setKey;
|
|
9687
9690
|
g_headerObj[`key${selectedKc}Def`] = setKey;
|
|
9688
9691
|
document.getElementById(`sc${selectedKc}`).textContent = getScMsg[selectedKc]();
|
|
@@ -9697,14 +9700,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
9697
9700
|
return;
|
|
9698
9701
|
}
|
|
9699
9702
|
|
|
9700
|
-
if (
|
|
9701
|
-
disabledKeys.unshift(229);
|
|
9702
|
-
}
|
|
9703
|
-
if (disabledKeys.includes(setKey) || g_kCdN[setKey] === undefined) {
|
|
9704
|
-
makeInfoWindow(g_msgInfoObj.I_0002, `fadeOut0`);
|
|
9705
|
-
return;
|
|
9706
|
-
} else if ((setKey === C_KEY_TITLEBACK && g_currentk === 0) ||
|
|
9707
|
-
((keyIsDown(g_kCdNameObj.metaLKey) || keyIsDown(g_kCdNameObj.metaRKey)) && keyIsShift())) {
|
|
9703
|
+
if (setKey === C_KEY_TITLEBACK && g_currentk === 0) {
|
|
9708
9704
|
return;
|
|
9709
9705
|
}
|
|
9710
9706
|
|
|
@@ -11823,6 +11819,7 @@ const getArrowSettings = () => {
|
|
|
11823
11819
|
g_workObj.keyCtrl = structuredClone(g_keyObj[`keyCtrl${keyCtrlPtn}`]);
|
|
11824
11820
|
g_workObj.diffList = [];
|
|
11825
11821
|
g_workObj.mainEndTime = 0;
|
|
11822
|
+
g_workObj.currentLifeState = ``;
|
|
11826
11823
|
|
|
11827
11824
|
const rotateBy = (val, delta) => {
|
|
11828
11825
|
// numeric
|
|
@@ -12359,7 +12356,7 @@ const mainInit = () => {
|
|
|
12359
12356
|
g_keyObj[`layerTrans${keyCtrlPtn}`]?.[0]?.[Math.floor(transj / 2) * 2 + (transj + Number(g_stateObj.reverse === C_FLG_ON)) % 2], g_transPriority.layer);
|
|
12360
12357
|
|
|
12361
12358
|
stepSprite.push(createEmptySprite(mainSpriteJ, `stepSprite${j}`, mainCommonPos));
|
|
12362
|
-
arrowSprite.push(createEmptySprite(mainSpriteJ, `arrowSprite${j}`,
|
|
12359
|
+
arrowSprite.push(createEmptySprite(mainSpriteJ, `arrowSprite${j}`, { ...mainCommonPos, y: g_workObj.hitPosition * (j % 2 === 0 ? 1 : -1) }));
|
|
12363
12360
|
frzHitSprite.push(createEmptySprite(mainSpriteJ, `frzHitSprite${j}`, mainCommonPos));
|
|
12364
12361
|
}
|
|
12365
12362
|
|
|
@@ -12473,7 +12470,7 @@ const mainInit = () => {
|
|
|
12473
12470
|
const fullTime = transFrameToTimer(fullFrame - g_stateObj.intAdjustment);
|
|
12474
12471
|
|
|
12475
12472
|
// フレーム数
|
|
12476
|
-
divRoot.appendChild(createDivCss2Label(`lblframe`, g_scoreObj.baseFrame,
|
|
12473
|
+
divRoot.appendChild(createDivCss2Label(`lblframe`, g_scoreObj.baseFrame, { ...g_lblPosObj.lblframe, display: g_workObj.lifegaugeDisp }));
|
|
12477
12474
|
|
|
12478
12475
|
// ライフ(数字)部作成
|
|
12479
12476
|
const intLifeVal = Math.floor(g_workObj.lifeVal);
|
|
@@ -12511,9 +12508,7 @@ const mainInit = () => {
|
|
|
12511
12508
|
}, lblInitColor),
|
|
12512
12509
|
|
|
12513
12510
|
// ライフ背景
|
|
12514
|
-
createColorObject2(`lifeBackObj`, {
|
|
12515
|
-
x: 5, y: 50, w: 15, h: g_headerObj.playingHeight - 100, styleName: `lifeBar`, display: g_workObj.lifegaugeDisp,
|
|
12516
|
-
}, g_cssObj.life_Background),
|
|
12511
|
+
createColorObject2(`lifeBackObj`, { ...g_lblPosObj.lifeBackObj, display: g_workObj.lifegaugeDisp }, g_cssObj.life_Background),
|
|
12517
12512
|
|
|
12518
12513
|
// ライフ本体
|
|
12519
12514
|
createColorObject2(`lifeBar`, {
|
|
@@ -12531,38 +12526,34 @@ const mainInit = () => {
|
|
|
12531
12526
|
}, g_cssObj.life_Border, g_cssObj.life_BorderColor),
|
|
12532
12527
|
|
|
12533
12528
|
// 曲名・アーティスト名表示
|
|
12534
|
-
createDivCss2Label(`lblCredit`, creditName,
|
|
12529
|
+
createDivCss2Label(`lblCredit`, creditName, { ...g_lblPosObj.lblCredit, siz: checkMusicSiz(creditName, g_limitObj.musicTitleSiz) }),
|
|
12535
12530
|
|
|
12536
12531
|
// 譜面名表示
|
|
12537
|
-
createDivCss2Label(`lblDifName`, difName,
|
|
12532
|
+
createDivCss2Label(`lblDifName`, difName, { ...g_lblPosObj.lblDifName, siz: checkMusicSiz(difName, 12) }),
|
|
12538
12533
|
|
|
12539
12534
|
// 曲時間表示:現在時間
|
|
12540
|
-
createDivCss2Label(`lblTime1`, `-:--`,
|
|
12535
|
+
createDivCss2Label(`lblTime1`, `-:--`, { ...g_lblPosObj.lblTime1, display: g_workObj.musicinfoDisp }),
|
|
12541
12536
|
|
|
12542
12537
|
// 曲時間表示:総時間
|
|
12543
|
-
createDivCss2Label(`lblTime2`, `/ ${fullTime}`,
|
|
12538
|
+
createDivCss2Label(`lblTime2`, `/ ${fullTime}`, { ...g_lblPosObj.lblTime2, display: g_workObj.musicinfoDisp }),
|
|
12544
12539
|
);
|
|
12545
12540
|
|
|
12546
12541
|
if (g_stateObj.frzReturn !== C_FLG_OFF) {
|
|
12547
12542
|
multiAppend(infoSprite,
|
|
12548
12543
|
// FrzReturnゲージ
|
|
12549
|
-
createColorObject2(`lifeBackFrzObj`, {
|
|
12550
|
-
|
|
12551
|
-
}, g_cssObj.life_Background),
|
|
12552
|
-
createColorObject2(`lifeBarFrz`, {
|
|
12553
|
-
x: 0, y: 50, w: 5, h: 0, styleName: `lifeBarFrz`, display: g_workObj.scoreDisp,
|
|
12554
|
-
}, g_cssObj.main_stepShobon),
|
|
12544
|
+
createColorObject2(`lifeBackFrzObj`, { ...g_lblPosObj.lifeBackFrzObj, display: g_workObj.scoreDisp }, g_cssObj.life_Background),
|
|
12545
|
+
createColorObject2(`lifeBarFrz`, { ...g_lblPosObj.lifeBarFrz, display: g_workObj.scoreDisp }, g_cssObj.main_stepShobon),
|
|
12555
12546
|
)
|
|
12556
12547
|
}
|
|
12557
12548
|
|
|
12558
12549
|
if (g_workObj.nonDefaultSc) {
|
|
12559
12550
|
multiAppend(infoSprite,
|
|
12560
|
-
createDivCss2Label(`lblRetry`, `[${g_lblNameObj.l_retry}]`,
|
|
12551
|
+
createDivCss2Label(`lblRetry`, `[${g_lblNameObj.l_retry}]`, { ...g_lblPosObj.lblMainScHeader, y: g_headerObj.playingHeight - 65 }),
|
|
12561
12552
|
createDivCss2Label(`lblRetrySc`, g_kCd[g_headerObj.keyRetry],
|
|
12562
|
-
|
|
12563
|
-
createDivCss2Label(`lblTitleBack`, `[${g_lblNameObj.l_titleBack}]`,
|
|
12553
|
+
{ ...g_lblPosObj.lblMainScKey, y: g_headerObj.playingHeight - 50, fontWeight: g_headerObj.keyRetry === C_KEY_RETRY ? `normal` : `bold` }),
|
|
12554
|
+
createDivCss2Label(`lblTitleBack`, `[${g_lblNameObj.l_titleBack}]`, { ...g_lblPosObj.lblMainScHeader, y: g_headerObj.playingHeight - 35 }),
|
|
12564
12555
|
createDivCss2Label(`lblTitleBackSc`, g_isMac ? `Shift+${g_kCd[g_headerObj.keyRetry]}` : g_kCd[g_headerObj.keyTitleBack],
|
|
12565
|
-
|
|
12556
|
+
{ ...g_lblPosObj.lblMainScKey, y: g_headerObj.playingHeight - 20, fontWeight: g_headerObj.keyTitleBack === C_KEY_TITLEBACK ? `normal` : `bold` }),
|
|
12566
12557
|
);
|
|
12567
12558
|
}
|
|
12568
12559
|
|
|
@@ -12576,7 +12567,7 @@ const mainInit = () => {
|
|
|
12576
12567
|
const wordSprite = createEmptySprite(judgeSprite, `wordSprite`, { w: g_headerObj.playingWidth });
|
|
12577
12568
|
for (let j = 0; j <= g_scoreObj.wordMaxDepth; j++) {
|
|
12578
12569
|
const wordY = (j % 2 === 0 ? 10 : (g_headerObj.bottomWordSetFlg ? g_posObj.distY + 10 : g_headerObj.playingHeight - 60));
|
|
12579
|
-
wordSprite.appendChild(createDivCss2Label(`lblword${j}`, ``,
|
|
12570
|
+
wordSprite.appendChild(createDivCss2Label(`lblword${j}`, ``, { ...g_lblPosObj.lblWord, y: wordY, fontFamily: getBasicFont() }));
|
|
12580
12571
|
}
|
|
12581
12572
|
|
|
12582
12573
|
const jdgGroups = [`J`, `FJ`];
|
|
@@ -13733,9 +13724,9 @@ const makeStepZone = (_j, _keyCtrlPtn) => {
|
|
|
13733
13724
|
}, g_cssObj.main_stepKeyDown),
|
|
13734
13725
|
|
|
13735
13726
|
// ヒット時モーション
|
|
13736
|
-
createColorObject2(`stepHit${_j}`,
|
|
13737
|
-
rotate: g_workObj.stepHitRtn[_j], styleName: `StepHit`, opacity: 0,
|
|
13738
|
-
}
|
|
13727
|
+
createColorObject2(`stepHit${_j}`, {
|
|
13728
|
+
...g_lblPosObj.stepHit, rotate: g_workObj.stepHitRtn[_j], styleName: `StepHit`, opacity: 0,
|
|
13729
|
+
}, g_cssObj.main_stepDefault),
|
|
13739
13730
|
|
|
13740
13731
|
);
|
|
13741
13732
|
|
|
@@ -13755,9 +13746,9 @@ const makeStepZone = (_j, _keyCtrlPtn) => {
|
|
|
13755
13746
|
);
|
|
13756
13747
|
} else {
|
|
13757
13748
|
frzHit.appendChild(
|
|
13758
|
-
createColorObject2(`frzHitTop${_j}`,
|
|
13759
|
-
rotate: g_workObj.arrowRtn[_j], styleName: `Shadow`,
|
|
13760
|
-
}
|
|
13749
|
+
createColorObject2(`frzHitTop${_j}`, {
|
|
13750
|
+
...g_lblPosObj.frzHitTop, rotate: g_workObj.arrowRtn[_j], styleName: `Shadow`,
|
|
13751
|
+
}, g_cssObj.main_frzHitTop)
|
|
13761
13752
|
);
|
|
13762
13753
|
}
|
|
13763
13754
|
};
|
|
@@ -14354,18 +14345,23 @@ const displayDiff = (_difFrame, _fjdg = ``, _justFrames = g_headerObj.justFrames
|
|
|
14354
14345
|
const changeLifeColor = (_state = ``) => {
|
|
14355
14346
|
const lblLife = document.getElementById(`lblLife`);
|
|
14356
14347
|
const lifeBar = document.getElementById(`lifeBar`);
|
|
14357
|
-
|
|
14348
|
+
|
|
14349
|
+
if (_state !== `` && _state !== g_workObj.currentLifeState) {
|
|
14358
14350
|
const lifeCss = g_cssObj[`life_${_state}`];
|
|
14359
14351
|
lblLife.classList.remove(g_cssObj.life_Max, g_cssObj.life_Cleared, g_cssObj.life_Failed);
|
|
14360
14352
|
lifeBar.classList.remove(g_cssObj.life_Max, g_cssObj.life_Cleared, g_cssObj.life_Failed);
|
|
14361
14353
|
lblLife.classList.add(lifeCss);
|
|
14362
14354
|
lifeBar.classList.add(lifeCss);
|
|
14355
|
+
|
|
14356
|
+
g_workObj.currentLifeState = _state;
|
|
14363
14357
|
}
|
|
14364
14358
|
|
|
14365
14359
|
const intLifeVal = Math.floor(g_workObj.lifeVal);
|
|
14366
14360
|
lblLife.textContent = intLifeVal;
|
|
14367
|
-
|
|
14368
|
-
|
|
14361
|
+
|
|
14362
|
+
const playableHeight = g_headerObj.playingHeight - 100;
|
|
14363
|
+
lifeBar.style.top = wUnit(50 + playableHeight * (g_headerObj.maxLifeVal - intLifeVal) / g_headerObj.maxLifeVal);
|
|
14364
|
+
lifeBar.style.height = wUnit(playableHeight * intLifeVal / g_headerObj.maxLifeVal);
|
|
14369
14365
|
};
|
|
14370
14366
|
|
|
14371
14367
|
/**
|
|
@@ -14438,8 +14434,9 @@ const judgeRecovery = (_name, _difFrame) => {
|
|
|
14438
14434
|
|
|
14439
14435
|
if (g_stateObj.frzReturn !== C_FLG_OFF) {
|
|
14440
14436
|
g_workObj.arrowReturnVal = (g_resultObj.ii + g_resultObj.shakin) % 100;
|
|
14441
|
-
|
|
14442
|
-
$id(`lifeBarFrz`).
|
|
14437
|
+
const playableHeight = g_headerObj.playingHeight - 100;
|
|
14438
|
+
$id(`lifeBarFrz`).top = wUnit(50 + playableHeight * (100 - g_workObj.arrowReturnVal) / 100);
|
|
14439
|
+
$id(`lifeBarFrz`).height = wUnit(playableHeight * g_workObj.arrowReturnVal / 100);
|
|
14443
14440
|
if (g_workObj.arrowReturnVal === 0) {
|
|
14444
14441
|
startFrzReturn();
|
|
14445
14442
|
}
|
|
@@ -14777,19 +14774,20 @@ const resultInit = () => {
|
|
|
14777
14774
|
|
|
14778
14775
|
// ランク描画
|
|
14779
14776
|
resultWindow.appendChild(
|
|
14780
|
-
createDivCss2Label(`lblRank`, rankMark,
|
|
14781
|
-
color: rankColor, fontFamily: getBasicFont(`"Bookman Old Style"`),
|
|
14782
|
-
})
|
|
14777
|
+
createDivCss2Label(`lblRank`, rankMark, {
|
|
14778
|
+
...g_lblPosObj.lblRank, color: rankColor, fontFamily: getBasicFont(`"Bookman Old Style"`),
|
|
14779
|
+
})
|
|
14783
14780
|
);
|
|
14784
14781
|
|
|
14785
14782
|
// Cleared & Failed表示
|
|
14786
14783
|
const lblResultPre = createDivCss2Label(
|
|
14787
14784
|
`lblResultPre`,
|
|
14788
14785
|
resultViewText(g_gameOverFlg ? `failed` : `cleared`),
|
|
14789
|
-
|
|
14786
|
+
{
|
|
14787
|
+
...g_lblPosObj.lblResultPre,
|
|
14790
14788
|
animationDuration: (g_gameOverFlg ? `3s` : `2.5s`),
|
|
14791
14789
|
animationName: (g_gameOverFlg ? `upToDownFade` : `leftToRightFade`)
|
|
14792
|
-
}
|
|
14790
|
+
}, g_cssObj.result_Cleared, g_cssObj.result_Window
|
|
14793
14791
|
);
|
|
14794
14792
|
divRoot.appendChild(lblResultPre);
|
|
14795
14793
|
|
|
@@ -15222,14 +15220,14 @@ const resultInit = () => {
|
|
|
15222
15220
|
if (document.getElementById(`tmpClose`) === null) {
|
|
15223
15221
|
divRoot.oncontextmenu = () => true;
|
|
15224
15222
|
makeLinkButton(tmpDiv, `Tmp`);
|
|
15225
|
-
tmpDiv.appendChild(createCss2Button(`tmpClose`, g_lblNameObj.b_close, () => true,
|
|
15226
|
-
|
|
15227
|
-
|
|
15228
|
-
|
|
15229
|
-
|
|
15230
|
-
|
|
15231
|
-
|
|
15232
|
-
|
|
15223
|
+
tmpDiv.appendChild(createCss2Button(`tmpClose`, g_lblNameObj.b_close, () => true, {
|
|
15224
|
+
...g_lblPosObj.btnRsCopyClose,
|
|
15225
|
+
resetFunc: () => {
|
|
15226
|
+
tmpDiv.removeChild(canvas);
|
|
15227
|
+
divRoot.removeChild(tmpDiv);
|
|
15228
|
+
divRoot.oncontextmenu = () => false;
|
|
15229
|
+
},
|
|
15230
|
+
}, g_cssObj.button_Back));
|
|
15233
15231
|
tmpDiv.appendChild(createDescDiv(`resultImageDesc`, g_lblNameObj.resultImageDesc));
|
|
15234
15232
|
}
|
|
15235
15233
|
};
|
|
@@ -15276,7 +15274,7 @@ const resultInit = () => {
|
|
|
15276
15274
|
}
|
|
15277
15275
|
clearTimeout(g_timeoutEvtId);
|
|
15278
15276
|
clearTimeout(g_timeoutEvtResultId);
|
|
15279
|
-
},
|
|
15277
|
+
}, { ..._posObj, resetFunc: () => _func() }, _cssClass);
|
|
15280
15278
|
|
|
15281
15279
|
/**
|
|
15282
15280
|
* 外部リンクボタンを作成
|
|
@@ -15286,14 +15284,14 @@ const resultInit = () => {
|
|
|
15286
15284
|
const makeLinkButton = (_div = divRoot, _param = ``) => {
|
|
15287
15285
|
multiAppend(_div,
|
|
15288
15286
|
// リザルトデータをX (Twitter)へ転送
|
|
15289
|
-
createCss2Button(`btnTweet${_param}`, g_lblNameObj.b_tweet, () => true,
|
|
15290
|
-
resetFunc: () => openLink(tweetResult),
|
|
15291
|
-
}
|
|
15287
|
+
createCss2Button(`btnTweet${_param}`, g_lblNameObj.b_tweet, () => true, {
|
|
15288
|
+
...g_lblPosObj.btnRsTweet, resetFunc: () => openLink(tweetResult),
|
|
15289
|
+
}, g_cssObj.button_Tweet),
|
|
15292
15290
|
|
|
15293
15291
|
// Discordへのリンク
|
|
15294
|
-
createCss2Button(`btnGitter${_param}`, g_lblNameObj.b_gitter, () => true,
|
|
15295
|
-
resetFunc: () => openLink(g_linkObj.discord),
|
|
15296
|
-
}
|
|
15292
|
+
createCss2Button(`btnGitter${_param}`, g_lblNameObj.b_gitter, () => true, {
|
|
15293
|
+
...g_lblPosObj.btnRsGitter, resetFunc: () => openLink(g_linkObj.discord),
|
|
15294
|
+
}, g_cssObj.button_Discord),
|
|
15297
15295
|
);
|
|
15298
15296
|
}
|
|
15299
15297
|
|
|
@@ -15314,10 +15312,9 @@ const resultInit = () => {
|
|
|
15314
15312
|
// リトライ
|
|
15315
15313
|
resetCommonBtn(`btnRetry`, g_lblNameObj.b_retry, g_lblPosObj.btnRsRetry, loadMusic, g_cssObj.button_Reset),
|
|
15316
15314
|
|
|
15317
|
-
createCss2Button(`btnCopyImage`, g_emojiObj.camera, () => true,
|
|
15318
|
-
|
|
15319
|
-
|
|
15320
|
-
}), g_cssObj.button_Default_NoColor),
|
|
15315
|
+
createCss2Button(`btnCopyImage`, g_emojiObj.camera, () => true, {
|
|
15316
|
+
...g_lblPosObj.btnRsCopyImage, resetFunc: () => copyResultImageData(g_msgInfoObj.I_0001),
|
|
15317
|
+
}, g_cssObj.button_Default_NoColor),
|
|
15321
15318
|
);
|
|
15322
15319
|
|
|
15323
15320
|
// マスクスプライトを作成
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2019/11/19
|
|
8
|
-
* Revised : 2026/03/
|
|
8
|
+
* Revised : 2026/03/26 (v46.4.0)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -617,6 +617,15 @@ const updateWindowSiz = () => {
|
|
|
617
617
|
lblTime2: {
|
|
618
618
|
x: 60, y: g_headerObj.playingHeight - 30, w: 60, h: 20, siz: g_limitObj.mainSiz,
|
|
619
619
|
},
|
|
620
|
+
lifeBackObj: {
|
|
621
|
+
x: 5, y: 50, w: 15, h: g_headerObj.playingHeight - 100, styleName: `lifeBar`,
|
|
622
|
+
},
|
|
623
|
+
lifeBackFrzObj: {
|
|
624
|
+
x: 0, y: 50, w: 3.5, h: g_headerObj.playingHeight - 100, styleName: `lifeBarFrz`,
|
|
625
|
+
},
|
|
626
|
+
lifeBarFrz: {
|
|
627
|
+
x: 0, y: 50, w: 4, h: 0, styleName: `lifeBarFrz`,
|
|
628
|
+
},
|
|
620
629
|
lblWord: {
|
|
621
630
|
x: 100, w: g_headerObj.playingWidth - 200, h: 50,
|
|
622
631
|
siz: g_limitObj.mainSiz, align: C_ALIGN_LEFT, display: `block`, margin: C_DIS_AUTO,
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "danoniplus",
|
|
3
|
-
"version": "46.
|
|
3
|
+
"version": "46.4.0",
|
|
4
4
|
"description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
|
|
5
5
|
"main": "./js/danoni_main.js",
|
|
6
|
+
"jsdelivr": "./js/danoni_main.js",
|
|
6
7
|
"scripts": {
|
|
7
8
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
9
|
},
|