danoniplus 33.2.0 → 33.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 +124 -74
- package/js/lib/danoni_constants.js +13 -1
- package/js/template/danoni_setting.js +34 -12
- 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 : 2023/08/
|
|
7
|
+
* Revised : 2023/08/27
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 33.
|
|
12
|
-
const g_revisedDate = `2023/08/
|
|
11
|
+
const g_version = `Ver 33.4.0`;
|
|
12
|
+
const g_revisedDate = `2023/08/27`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -162,6 +162,7 @@ const g_workObj = {
|
|
|
162
162
|
keyHitFlg: [],
|
|
163
163
|
scrollDir: [],
|
|
164
164
|
dividePos: [],
|
|
165
|
+
nonDefaultSc: false,
|
|
165
166
|
};
|
|
166
167
|
|
|
167
168
|
// 歌詞制御
|
|
@@ -1379,21 +1380,27 @@ const resetKeyControl = _ => {
|
|
|
1379
1380
|
const clearWindow = (_redrawFlg = false, _customDisplayName = ``) => {
|
|
1380
1381
|
resetKeyControl();
|
|
1381
1382
|
|
|
1383
|
+
// ボタン、オブジェクトをクリア (divRoot配下のもの)
|
|
1384
|
+
deleteChildspriteAll(`divRoot`);
|
|
1385
|
+
|
|
1386
|
+
// 拡張範囲を取得
|
|
1387
|
+
const diffX = (_customDisplayName === `Main` && g_workObj.nonDefaultSc ?
|
|
1388
|
+
g_headerObj.scAreaWidth * (g_headerObj.playingLayout ? 2 : 1) : 0);
|
|
1389
|
+
|
|
1390
|
+
const getLayerWithClear = (_name) => {
|
|
1391
|
+
const layer = document.getElementById(_name);
|
|
1392
|
+
const ctx = layer.getContext(`2d`);
|
|
1393
|
+
ctx.clearRect(0, 0, layer.width, g_sHeight);
|
|
1394
|
+
return ctx;
|
|
1395
|
+
};
|
|
1396
|
+
|
|
1382
1397
|
if (document.querySelector(`#layer0`) !== null) {
|
|
1383
1398
|
|
|
1384
1399
|
// レイヤー情報取得
|
|
1385
|
-
const
|
|
1386
|
-
const l0ctx = layer0.getContext(`2d`);
|
|
1387
|
-
layer0.width = g_sWidth;
|
|
1388
|
-
|
|
1389
|
-
// 線画、図形をクリア
|
|
1390
|
-
l0ctx.clearRect(0, 0, g_sWidth, g_sHeight);
|
|
1400
|
+
const l0ctx = getLayerWithClear(`layer0`);
|
|
1391
1401
|
|
|
1392
1402
|
if (document.querySelector(`#layer1`) !== null) {
|
|
1393
|
-
const
|
|
1394
|
-
const l1ctx = layer1.getContext(`2d`);
|
|
1395
|
-
layer1.width = g_sWidth;
|
|
1396
|
-
l1ctx.clearRect(0, 0, g_sWidth, g_sHeight);
|
|
1403
|
+
const l1ctx = getLayerWithClear(`layer1`);
|
|
1397
1404
|
|
|
1398
1405
|
// 線画 (title-line)
|
|
1399
1406
|
l1ctx.beginPath();
|
|
@@ -1409,61 +1416,45 @@ const clearWindow = (_redrawFlg = false, _customDisplayName = ``) => {
|
|
|
1409
1416
|
l1ctx.stroke();
|
|
1410
1417
|
}
|
|
1411
1418
|
if (document.querySelector(`#layer2`) !== null) {
|
|
1412
|
-
|
|
1413
|
-
const l2ctx = layer2.getContext(`2d`);
|
|
1414
|
-
layer2.width = g_sWidth;
|
|
1415
|
-
l2ctx.clearRect(0, 0, g_sWidth, g_sHeight);
|
|
1419
|
+
getLayerWithClear(`layer2`);
|
|
1416
1420
|
}
|
|
1417
|
-
}
|
|
1418
1421
|
|
|
1419
|
-
|
|
1420
|
-
|
|
1422
|
+
if (_redrawFlg) {
|
|
1423
|
+
// 画面背景を指定 (background-color)
|
|
1424
|
+
$id(`canvas-frame`).width = `${g_sWidth + diffX}px`;
|
|
1425
|
+
layer0.width = g_sWidth + diffX;
|
|
1426
|
+
const grd = l0ctx.createLinearGradient(0, 0, 0, g_sHeight);
|
|
1427
|
+
if (!g_headerObj[`customBack${_customDisplayName}Use`]) {
|
|
1428
|
+
grd.addColorStop(0, `#000000`);
|
|
1429
|
+
grd.addColorStop(1, `#222222`);
|
|
1430
|
+
l0ctx.fillStyle = grd;
|
|
1431
|
+
l0ctx.fillRect(0, 0, g_sWidth + diffX, g_sHeight);
|
|
1432
|
+
}
|
|
1433
|
+
}
|
|
1434
|
+
}
|
|
1421
1435
|
|
|
1422
1436
|
// 背景を再描画
|
|
1423
1437
|
if (_redrawFlg) {
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
};
|
|
1427
|
-
|
|
1428
|
-
/**
|
|
1429
|
-
* デフォルト背景画像の描画処理
|
|
1430
|
-
* @param {string} _key メイン画面かどうか。Main:メイン画面、(空白):それ以外
|
|
1431
|
-
*/
|
|
1432
|
-
const drawDefaultBackImage = _key => {
|
|
1433
|
-
|
|
1434
|
-
g_btnAddFunc = {};
|
|
1435
|
-
g_btnDeleteFlg = {};
|
|
1436
|
-
g_cxtAddFunc = {};
|
|
1437
|
-
g_cxtDeleteFlg = {};
|
|
1438
|
+
g_btnAddFunc = {};
|
|
1439
|
+
g_btnDeleteFlg = {};
|
|
1440
|
+
g_cxtAddFunc = {};
|
|
1441
|
+
g_cxtDeleteFlg = {};
|
|
1438
1442
|
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
const layer0 = document.querySelector(`#layer0`);
|
|
1442
|
-
const l0ctx = layer0.getContext(`2d`);
|
|
1443
|
+
if (document.querySelector(`#layer0`) === null ||
|
|
1444
|
+
(!g_headerObj[`customBack${_customDisplayName}Use`] && !g_headerObj.defaultSkinFlg)) {
|
|
1443
1445
|
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
if (!g_headerObj[`customBack${_key}Use`]) {
|
|
1447
|
-
grd.addColorStop(0, `#000000`);
|
|
1448
|
-
grd.addColorStop(1, `#222222`);
|
|
1449
|
-
l0ctx.fillStyle = grd;
|
|
1450
|
-
l0ctx.fillRect(0, 0, g_sWidth, g_sHeight);
|
|
1451
|
-
|
|
1452
|
-
if (!g_headerObj.defaultSkinFlg) {
|
|
1453
|
-
createEmptySprite(divRoot, `divBack`);
|
|
1454
|
-
}
|
|
1446
|
+
$id(`canvas-frame`).width = `${g_sWidth + diffX}px`;
|
|
1447
|
+
createEmptySprite(divRoot, `divBack`, { w: g_sWidth + diffX });
|
|
1455
1448
|
}
|
|
1456
|
-
} else {
|
|
1457
|
-
createEmptySprite(divRoot, `divBack`);
|
|
1458
|
-
}
|
|
1459
1449
|
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1450
|
+
// CSSスタイルの初期化
|
|
1451
|
+
Object.keys(g_cssBkProperties).forEach(prop =>
|
|
1452
|
+
document.documentElement.style.setProperty(prop, g_cssBkProperties[prop]));
|
|
1463
1453
|
|
|
1464
|
-
|
|
1465
|
-
|
|
1454
|
+
Object.keys(g_headerObj).filter(val => val.startsWith(`--`) && hasVal(g_headerObj[val])).forEach(prop =>
|
|
1455
|
+
document.documentElement.style.setProperty(prop, getCssCustomProperty(prop, g_headerObj[prop])));
|
|
1466
1456
|
|
|
1457
|
+
}
|
|
1467
1458
|
};
|
|
1468
1459
|
|
|
1469
1460
|
/**
|
|
@@ -2649,7 +2640,7 @@ const preheaderConvert = _dosObj => {
|
|
|
2649
2640
|
// 外部スキンファイルの指定
|
|
2650
2641
|
const tmpSkinType = _dosObj.skinType ?? g_presetObj.skinType ?? `default`;
|
|
2651
2642
|
const tmpSkinTypes = tmpSkinType.split(`,`);
|
|
2652
|
-
obj.defaultSkinFlg = tmpSkinTypes.includes(`default`);
|
|
2643
|
+
obj.defaultSkinFlg = tmpSkinTypes.includes(`default`) && setBoolVal(_dosObj.bgCanvasUse ?? g_presetObj.bgCanvasUse, true);
|
|
2653
2644
|
setJsFiles(tmpSkinTypes, C_DIR_SKIN, `skin`);
|
|
2654
2645
|
|
|
2655
2646
|
// 外部jsファイルの指定
|
|
@@ -3267,6 +3258,16 @@ const headerConvert = _dosObj => {
|
|
|
3267
3258
|
// プレイ中クレジットを表示しないエリアのサイズ(X方向)
|
|
3268
3259
|
obj.customViewWidth = setVal(_dosObj.customViewWidth ?? _dosObj.customCreditWidth, 0, C_TYP_FLOAT);
|
|
3269
3260
|
|
|
3261
|
+
// ショートカットキーが既定値ではない場合の左右の拡張エリアのサイズ
|
|
3262
|
+
if (hasVal(_dosObj.scArea)) {
|
|
3263
|
+
const tmp = _dosObj.scArea.split(`,`);
|
|
3264
|
+
obj.scAreaWidth = setVal(tmp[0], 0, C_TYP_FLOAT);
|
|
3265
|
+
obj.playingLayout = tmp[1] !== `left`;
|
|
3266
|
+
} else {
|
|
3267
|
+
obj.scAreaWidth = g_presetObj.scAreaWidth ?? 0;
|
|
3268
|
+
obj.playingLayout = g_presetObj.playingLayout ?? true;
|
|
3269
|
+
}
|
|
3270
|
+
|
|
3270
3271
|
// ジャストフレームの設定 (ローカル: 0フレーム, リモートサーバ上: 1フレーム以内)
|
|
3271
3272
|
obj.justFrames = (g_isLocal) ? 0 : 1;
|
|
3272
3273
|
|
|
@@ -3274,6 +3275,9 @@ const headerConvert = _dosObj => {
|
|
|
3274
3275
|
const resultFormatDefault = `【#danoni[hashTag]】[musicTitle]([keyLabel]) /[maker] /Rank:[rank]/Score:[score]/Playstyle:[playStyle]/[arrowJdg]/[frzJdg]/[maxCombo] [url]`;
|
|
3275
3276
|
obj.resultFormat = escapeHtmlForEnabledTag(_dosObj.resultFormat ?? g_presetObj.resultFormat ?? resultFormatDefault);
|
|
3276
3277
|
|
|
3278
|
+
// リザルト画像データのカスタム設定
|
|
3279
|
+
obj.resultValsView = _dosObj.resultValsView?.split(`,`) ?? g_presetObj.resultValsView ?? Array.from(Object.keys(g_presetObj.resultVals ?? {}));
|
|
3280
|
+
|
|
3277
3281
|
// フェードイン時にそれ以前のデータを蓄積しない種別(word, back, mask)を指定
|
|
3278
3282
|
obj.unStockCategories = (_dosObj.unStockCategory ?? ``).split(`,`);
|
|
3279
3283
|
if (g_presetObj.unStockCategories !== undefined) {
|
|
@@ -3693,6 +3697,22 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
|
|
|
3693
3697
|
return _str;
|
|
3694
3698
|
};
|
|
3695
3699
|
|
|
3700
|
+
/**
|
|
3701
|
+
* divMaxX, posXの下段補完処理
|
|
3702
|
+
* ・divXの1番目の指定があるとき、その値を元に下段の位置を補完
|
|
3703
|
+
* 例) |div11x=7,b6|pos11x=0,1,2,3,4,5,6,b0,b1,b5,b6|
|
|
3704
|
+
* -> |div11x=7,13|pos11x=0,1,2,3,4,5,6,7,8,12,13|
|
|
3705
|
+
* @param {number} _num
|
|
3706
|
+
* @param {number} _divNum
|
|
3707
|
+
* @returns
|
|
3708
|
+
*/
|
|
3709
|
+
const getKeyPosNum = (_num, _divNum = 0) => {
|
|
3710
|
+
if (!hasVal(_num) || (!_num.startsWith(`b`) && isNaN(parseFloat(_num)))) {
|
|
3711
|
+
return _num;
|
|
3712
|
+
}
|
|
3713
|
+
return _num.startsWith(`b`) ? parseFloat(_num.slice(1)) + _divNum : parseFloat(_num);
|
|
3714
|
+
}
|
|
3715
|
+
|
|
3696
3716
|
/**
|
|
3697
3717
|
* 新キー用複合パラメータ
|
|
3698
3718
|
* @param {string} _key キー数
|
|
@@ -3888,9 +3908,6 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
|
|
|
3888
3908
|
// 矢印の回転量指定、キャラクタパターン (stepRtnX_Y)
|
|
3889
3909
|
newKeyTripleParam(newKey, `stepRtn`);
|
|
3890
3910
|
|
|
3891
|
-
// ステップゾーン位置 (posX_Y)
|
|
3892
|
-
newKeyMultiParam(newKey, `pos`, toFloat);
|
|
3893
|
-
|
|
3894
3911
|
// 各キーの区切り位置 (divX_Y)
|
|
3895
3912
|
_dosObj[`div${newKey}`]?.split(`$`).forEach((tmpDiv, k) => {
|
|
3896
3913
|
const tmpDivPtn = tmpDiv.split(`,`);
|
|
@@ -3906,10 +3923,19 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
|
|
|
3906
3923
|
} else {
|
|
3907
3924
|
// それ以外の場合は指定された値を適用(未指定時はその後で指定)
|
|
3908
3925
|
g_keyObj[`div${ptnName}`] = setVal(tmpDivPtn[0], undefined, C_TYP_NUMBER);
|
|
3909
|
-
g_keyObj[`divMax${ptnName}`] = setVal(tmpDivPtn[1], undefined, C_TYP_FLOAT);
|
|
3926
|
+
g_keyObj[`divMax${ptnName}`] = setVal(getKeyPosNum(tmpDivPtn[1], g_keyObj[`div${ptnName}`]), undefined, C_TYP_FLOAT);
|
|
3910
3927
|
}
|
|
3911
3928
|
});
|
|
3912
3929
|
|
|
3930
|
+
// ステップゾーン位置 (posX_Y)
|
|
3931
|
+
newKeyMultiParam(newKey, `pos`, toFloat, {
|
|
3932
|
+
loopFunc: (k, keyheader) => {
|
|
3933
|
+
g_keyObj[`${keyheader}_${k + dfPtnNum}`].forEach((val, j) => {
|
|
3934
|
+
g_keyObj[`${keyheader}_${k + dfPtnNum}`][j] = getKeyPosNum(String(val), g_keyObj[`div${newKey}_${k + dfPtnNum}`]);
|
|
3935
|
+
});
|
|
3936
|
+
},
|
|
3937
|
+
});
|
|
3938
|
+
|
|
3913
3939
|
// charaX_Y, posX_Y, keyGroupX_Y, divX_Y, divMaxX_Yが未指定の場合はkeyCtrlX_Yを元に適用
|
|
3914
3940
|
for (let k = 0; k < g_keyObj.minPatterns; k++) {
|
|
3915
3941
|
setKeyDfVal(`${newKey}_${k + dfPtnNum}`);
|
|
@@ -4285,8 +4311,8 @@ const makeWarningWindow = (_text = ``, { resetFlg = false, backBtnUse = false }
|
|
|
4285
4311
|
* お知らせウィンドウ(汎用)を表示
|
|
4286
4312
|
* @param {string} _text
|
|
4287
4313
|
*/
|
|
4288
|
-
const makeInfoWindow = (_text, _animationName = ``, _backColor = `#ccccff
|
|
4289
|
-
const lblWarning = setWindowStyle(`<p>${_text}</p>`, _backColor, `#000066`, C_ALIGN_CENTER);
|
|
4314
|
+
const makeInfoWindow = (_text, _animationName = ``, { _backColor = `#ccccff`, _x = 0 } = {}) => {
|
|
4315
|
+
const lblWarning = setWindowStyle(`<p>${_text}</p>`, _backColor, `#000066`, C_ALIGN_CENTER, { _x: _x });
|
|
4290
4316
|
lblWarning.style.pointerEvents = C_DIS_NONE;
|
|
4291
4317
|
|
|
4292
4318
|
if (_animationName !== ``) {
|
|
@@ -4305,7 +4331,7 @@ const makeInfoWindow = (_text, _animationName = ``, _backColor = `#ccccff`) => {
|
|
|
4305
4331
|
* @param {string} _textColor
|
|
4306
4332
|
* @param {string} _align
|
|
4307
4333
|
*/
|
|
4308
|
-
const setWindowStyle = (_text, _bkColor, _textColor, _align = C_ALIGN_LEFT) => {
|
|
4334
|
+
const setWindowStyle = (_text, _bkColor, _textColor, _align = C_ALIGN_LEFT, { _x = 0 } = {}) => {
|
|
4309
4335
|
|
|
4310
4336
|
deleteDiv(divRoot, `lblWarning`);
|
|
4311
4337
|
|
|
@@ -4322,7 +4348,7 @@ const setWindowStyle = (_text, _bkColor, _textColor, _align = C_ALIGN_LEFT) => {
|
|
|
4322
4348
|
const warnHeight = Math.min(150, Math.max(range.getClientRects().length,
|
|
4323
4349
|
_text.split(`<br>`).length + _text.split(`<p>`).length - 1) * 21);
|
|
4324
4350
|
const lbl = createDivCss2Label(`lblWarning`, _text, {
|
|
4325
|
-
x:
|
|
4351
|
+
x: _x, y: 70, w: g_sWidth, h: warnHeight, siz: g_limitObj.mainSiz, backgroundColor: _bkColor,
|
|
4326
4352
|
opacity: 0.9, lineHeight: `15px`, color: _textColor, align: _align, fontFamily: getBasicFont(),
|
|
4327
4353
|
whiteSpace: `normal`,
|
|
4328
4354
|
});
|
|
@@ -6926,7 +6952,7 @@ const loadMusic = _ => {
|
|
|
6926
6952
|
lblLoading.textContent = g_lblNameObj.pleaseWait;
|
|
6927
6953
|
setAudio(blobUrl);
|
|
6928
6954
|
} else {
|
|
6929
|
-
makeWarningWindow(`${g_msgInfoObj.E_0041.split('{0}').join(getFullPath(
|
|
6955
|
+
makeWarningWindow(`${g_msgInfoObj.E_0041.split('{0}').join(getFullPath(url))}<br>(${request.status} ${request.statusText})`, { backBtnUse: true });
|
|
6930
6956
|
}
|
|
6931
6957
|
});
|
|
6932
6958
|
|
|
@@ -8599,6 +8625,8 @@ const getArrowSettings = _ => {
|
|
|
8599
8625
|
g_workObj.lifeVal = Math.floor(g_workObj.lifeInit * 100) / 100;
|
|
8600
8626
|
g_gameOverFlg = false;
|
|
8601
8627
|
g_finishFlg = true;
|
|
8628
|
+
g_workObj.nonDefaultSc = g_headerObj.keyRetry !== C_KEY_RETRY || g_headerObj.keyTitleBack !== C_KEY_TITLEBACK;
|
|
8629
|
+
g_workObj.playingX = g_headerObj.playingX + (g_workObj.nonDefaultSc && g_headerObj.playingLayout ? g_headerObj.scAreaWidth : 0);
|
|
8602
8630
|
|
|
8603
8631
|
if (g_stateObj.dataSaveFlg) {
|
|
8604
8632
|
// ローカルストレージへAdjustment, HitPosition, Volume設定を保存
|
|
@@ -8717,14 +8745,14 @@ const mainInit = _ => {
|
|
|
8717
8745
|
|
|
8718
8746
|
// ステップゾーン、矢印のメインスプライトを作成
|
|
8719
8747
|
const mainSprite = createEmptySprite(divRoot, `mainSprite`, {
|
|
8720
|
-
x:
|
|
8748
|
+
x: g_workObj.playingX, y: g_posObj.stepY - C_STEP_Y, w: g_headerObj.playingWidth, transform: `scale(${g_keyObj.scale})`,
|
|
8721
8749
|
});
|
|
8722
8750
|
|
|
8723
8751
|
// 曲情報・判定カウント用スプライトを作成(メインスプライトより上位)
|
|
8724
|
-
const infoSprite = createEmptySprite(divRoot, `infoSprite`, { x:
|
|
8752
|
+
const infoSprite = createEmptySprite(divRoot, `infoSprite`, { x: g_workObj.playingX, w: g_headerObj.playingWidth });
|
|
8725
8753
|
|
|
8726
8754
|
// 判定系スプライトを作成(メインスプライトより上位)
|
|
8727
|
-
const judgeSprite = createEmptySprite(divRoot, `judgeSprite`, { x:
|
|
8755
|
+
const judgeSprite = createEmptySprite(divRoot, `judgeSprite`, { x: g_workObj.playingX, w: g_headerObj.playingWidth });
|
|
8728
8756
|
|
|
8729
8757
|
const tkObj = getKeyInfo();
|
|
8730
8758
|
const [keyCtrlPtn, keyNum] = [tkObj.keyCtrlPtn, tkObj.keyNum];
|
|
@@ -8997,6 +9025,23 @@ const mainInit = _ => {
|
|
|
8997
9025
|
createDivCss2Label(`lblTime2`, `/ ${fullTime}`, Object.assign(g_lblPosObj.lblTime2, { display: g_workObj.musicinfoDisp })),
|
|
8998
9026
|
);
|
|
8999
9027
|
|
|
9028
|
+
if (g_workObj.nonDefaultSc) {
|
|
9029
|
+
multiAppend(infoSprite,
|
|
9030
|
+
createDivCss2Label(`lblRetry`, `[${g_lblNameObj.l_retry}]`, Object.assign(g_lblPosObj.lblMainScHeader, { y: g_sHeight - 65 })),
|
|
9031
|
+
);
|
|
9032
|
+
multiAppend(infoSprite,
|
|
9033
|
+
createDivCss2Label(`lblRetrySc`, g_kCd[g_headerObj.keyRetry],
|
|
9034
|
+
Object.assign(g_lblPosObj.lblMainScKey, { y: g_sHeight - 50, fontWeight: g_headerObj.keyRetry === C_KEY_RETRY ? `normal` : `bold` })),
|
|
9035
|
+
);
|
|
9036
|
+
multiAppend(infoSprite,
|
|
9037
|
+
createDivCss2Label(`lblTitleBack`, `[${g_lblNameObj.l_titleBack}]`, Object.assign(g_lblPosObj.lblMainScHeader, { y: g_sHeight - 35 })),
|
|
9038
|
+
);
|
|
9039
|
+
multiAppend(infoSprite,
|
|
9040
|
+
createDivCss2Label(`lblTitleBackSc`, g_isMac ? `Shift+${g_kCd[g_headerObj.keyRetry]}` : g_kCd[g_headerObj.keyTitleBack],
|
|
9041
|
+
Object.assign(g_lblPosObj.lblMainScKey, { y: g_sHeight - 20, fontWeight: g_headerObj.keyTitleBack === C_KEY_TITLEBACK ? `normal` : `bold` })),
|
|
9042
|
+
);
|
|
9043
|
+
}
|
|
9044
|
+
|
|
9000
9045
|
// ボーダーライン表示
|
|
9001
9046
|
lifeBorderObj.textContent = g_workObj.lifeBorder;
|
|
9002
9047
|
if (g_stateObj.lifeBorder === 0 || g_workObj.lifeVal === g_headerObj.maxLifeVal) {
|
|
@@ -9018,7 +9063,6 @@ const mainInit = _ => {
|
|
|
9018
9063
|
jdgY[0] += g_diffObj.arrowJdgY;
|
|
9019
9064
|
jdgY[1] += g_diffObj.frzJdgY;
|
|
9020
9065
|
}
|
|
9021
|
-
const jdgCombos = [`kita`, `ii`];
|
|
9022
9066
|
|
|
9023
9067
|
jdgGroups.forEach((jdg, j) => {
|
|
9024
9068
|
// キャラクタ表示
|
|
@@ -9057,7 +9101,7 @@ const mainInit = _ => {
|
|
|
9057
9101
|
MCombo: [`combo`, 5], Kita: [`kita`, 7], Iknai: [`iknai`, 8], FCombo: [`combo`, 9],
|
|
9058
9102
|
};
|
|
9059
9103
|
Object.keys(jdgMainScoreObj).forEach(jdgScore =>
|
|
9060
|
-
infoSprite.appendChild(makeCounterSymbol(`lbl${jdgScore}`, g_headerObj.playingWidth - 110,
|
|
9104
|
+
infoSprite.appendChild(makeCounterSymbol(`lbl${jdgScore}`, g_headerObj.playingWidth - 110 + (g_workObj.nonDefaultSc ? g_headerObj.scAreaWidth : 0),
|
|
9061
9105
|
g_cssObj[`common_${jdgMainScoreObj[jdgScore][0]}`], jdgMainScoreObj[jdgScore][1] + 1, 0, g_workObj.scoreDisp)));
|
|
9062
9106
|
|
|
9063
9107
|
// パーフェクト演出
|
|
@@ -9086,7 +9130,7 @@ const mainInit = _ => {
|
|
|
9086
9130
|
|
|
9087
9131
|
divRoot.appendChild(
|
|
9088
9132
|
createDivCss2Label(`lblReady`, readyHtml, {
|
|
9089
|
-
x:
|
|
9133
|
+
x: g_workObj.playingX + (g_headerObj.playingWidth - g_sWidth) / 2,
|
|
9090
9134
|
y: (g_sHeight + g_posObj.stepYR) / 2 - 75,
|
|
9091
9135
|
w: g_sWidth, h: 50, siz: 40,
|
|
9092
9136
|
animationDuration: `${g_headerObj.readyAnimationFrame / g_fps}s`,
|
|
@@ -9097,7 +9141,7 @@ const mainInit = _ => {
|
|
|
9097
9141
|
}
|
|
9098
9142
|
|
|
9099
9143
|
if (getMusicUrl(g_stateObj.scoreId) === `nosound.mp3`) {
|
|
9100
|
-
makeInfoWindow(g_msgInfoObj.I_0004, `leftToRightFade
|
|
9144
|
+
makeInfoWindow(g_msgInfoObj.I_0004, `leftToRightFade`, { _x: g_workObj.playingX });
|
|
9101
9145
|
}
|
|
9102
9146
|
|
|
9103
9147
|
// ユーザカスタムイベント(初期)
|
|
@@ -10931,6 +10975,12 @@ const resultInit = _ => {
|
|
|
10931
10975
|
drawText(g_lblNameObj.j_excessive, { x: 240, hy: 10, color: `#ffff99` });
|
|
10932
10976
|
drawText(g_resultObj.excessive, { x: 360, hy: 10, align: C_ALIGN_RIGHT });
|
|
10933
10977
|
}
|
|
10978
|
+
g_headerObj.resultValsView
|
|
10979
|
+
.filter(key => hasVal(g_resultObj[g_presetObj.resultVals[key]]))
|
|
10980
|
+
.forEach((key, j) => {
|
|
10981
|
+
drawText(g_presetObj.resultVals[key], { x: 240, hy: j + 12, color: `#ffffff` });
|
|
10982
|
+
drawText(g_resultObj[g_presetObj.resultVals[key]], { x: 360, hy: j + 12, align: C_ALIGN_RIGHT });
|
|
10983
|
+
});
|
|
10934
10984
|
}
|
|
10935
10985
|
drawText(rankMark, { x: 240, hy: 18, siz: 50, color: rankColor, font: `"Bookman Old Style"` });
|
|
10936
10986
|
drawText(baseTwitUrl, { hy: 19, siz: 8 });
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2019/11/19
|
|
8
|
-
* Revised : 2023/08/
|
|
8
|
+
* Revised : 2023/08/27 (v33.4.0)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -400,6 +400,12 @@ const updateWindowSiz = _ => {
|
|
|
400
400
|
musicInfoOFF: {
|
|
401
401
|
x: 20, animationDuration: `4.0s`, animationName: `leftToRightFade`, animationFillMode: `both`,
|
|
402
402
|
},
|
|
403
|
+
lblMainScHeader: {
|
|
404
|
+
x: g_sWidth + g_headerObj.scAreaWidth - 85, w: 80, h: 20, siz: 12, align: C_ALIGN_RIGHT,
|
|
405
|
+
},
|
|
406
|
+
lblMainScKey: {
|
|
407
|
+
x: g_sWidth + g_headerObj.scAreaWidth - 85, w: 80, h: 20, siz: 12, align: C_ALIGN_RIGHT,
|
|
408
|
+
},
|
|
403
409
|
|
|
404
410
|
/** 結果画面 */
|
|
405
411
|
lblRank: {
|
|
@@ -2853,6 +2859,9 @@ const g_lang_lblNameObj = {
|
|
|
2853
2859
|
j_adj: `推定Adj`,
|
|
2854
2860
|
j_excessive: `Excessive`,
|
|
2855
2861
|
|
|
2862
|
+
l_retry: `リトライ`,
|
|
2863
|
+
l_titleBack: `タイトルバック`,
|
|
2864
|
+
|
|
2856
2865
|
helpUrl: `https://github.com/cwtickle/danoniplus/wiki/AboutGameSystem`,
|
|
2857
2866
|
securityUrl: `https://github.com/cwtickle/danoniplus/security/policy`,
|
|
2858
2867
|
},
|
|
@@ -2887,6 +2896,9 @@ const g_lang_lblNameObj = {
|
|
|
2887
2896
|
j_adj: `Est-Adj.`,
|
|
2888
2897
|
j_excessive: `Excessive`,
|
|
2889
2898
|
|
|
2899
|
+
l_retry: `Retry`,
|
|
2900
|
+
l_titleBack: `Go to title`,
|
|
2901
|
+
|
|
2890
2902
|
helpUrl: `https://github.com/cwtickle/danoniplus-docs/wiki/AboutGameSystem`,
|
|
2891
2903
|
securityUrl: `https://github.com/cwtickle/danoniplus-docs/wiki/SecurityPolicy`,
|
|
2892
2904
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
3
|
* Dancing☆Onigiri 設定用jsファイル
|
|
4
|
-
* Template Update: 2023/
|
|
4
|
+
* Template Update: 2023/08/27 (v33.4.0)
|
|
5
5
|
*
|
|
6
6
|
* このファイルでは、作品全体に対しての初期設定を行うことができます。
|
|
7
7
|
* 譜面データ側で個別に同様の項目が設定されている場合は、譜面データ側の設定が優先されます。
|
|
@@ -42,6 +42,9 @@ g_presetObj.tuningUrl = `https://www.google.co.jp/`;
|
|
|
42
42
|
/** 既定スキン (デフォルトは default) */
|
|
43
43
|
g_presetObj.skinType = `default`;
|
|
44
44
|
|
|
45
|
+
/** skinTypeがdefaultのとき、Canvas背景を有効にするかどうかのフラグ (デフォルトは有効(true)。falseで無効化) */
|
|
46
|
+
//g_presetObj.bgCanvasUse = false;
|
|
47
|
+
|
|
45
48
|
/** 既定カスタムJs (デフォルトは danoni_custom.js) */
|
|
46
49
|
//g_presetObj.customJs = `danoni_custom.js,danoni_init.js`;
|
|
47
50
|
|
|
@@ -115,9 +118,9 @@ g_presetObj.gaugeList = {
|
|
|
115
118
|
|
|
116
119
|
/**
|
|
117
120
|
空押し判定を行うか
|
|
118
|
-
判定させる場合は
|
|
121
|
+
判定させる場合は true を指定
|
|
119
122
|
*/
|
|
120
|
-
g_presetObj.excessiveJdgUse =
|
|
123
|
+
g_presetObj.excessiveJdgUse = false;
|
|
121
124
|
|
|
122
125
|
|
|
123
126
|
/*
|
|
@@ -139,9 +142,9 @@ g_presetObj.frzColors = true;
|
|
|
139
142
|
|
|
140
143
|
/**
|
|
141
144
|
フリーズアローの始点で通常矢印の判定を行うか(dotさんソース方式)
|
|
142
|
-
判定させる場合は
|
|
145
|
+
判定させる場合は true を指定
|
|
143
146
|
*/
|
|
144
|
-
g_presetObj.frzStartjdgUse =
|
|
147
|
+
g_presetObj.frzStartjdgUse = false;
|
|
145
148
|
|
|
146
149
|
/*
|
|
147
150
|
------------------------------------------------------------------------
|
|
@@ -151,14 +154,14 @@ g_presetObj.frzStartjdgUse = `false`;
|
|
|
151
154
|
*/
|
|
152
155
|
|
|
153
156
|
// デフォルトのデザインを使用せず、独自のデザインを使用するかを指定
|
|
154
|
-
// カスタムデザインにする場合は
|
|
157
|
+
// カスタムデザインにする場合は true を指定
|
|
155
158
|
g_presetObj.customDesignUse = {
|
|
156
|
-
title:
|
|
157
|
-
titleArrow:
|
|
158
|
-
titleAnimation:
|
|
159
|
-
back:
|
|
160
|
-
backMain:
|
|
161
|
-
ready:
|
|
159
|
+
title: false,
|
|
160
|
+
titleArrow: false,
|
|
161
|
+
titleAnimation: false,
|
|
162
|
+
back: false,
|
|
163
|
+
backMain: false,
|
|
164
|
+
ready: false,
|
|
162
165
|
};
|
|
163
166
|
|
|
164
167
|
/**
|
|
@@ -212,6 +215,7 @@ g_presetObj.customDesignUse = {
|
|
|
212
215
|
/**
|
|
213
216
|
オプション利用設定(デフォルト)
|
|
214
217
|
一律使用させたくない場合は `false` を指定(デフォルトは `true`)
|
|
218
|
+
Display設定の場合は `true,OFF`(設定は有効だが初期値はOFF)といったことができる
|
|
215
219
|
*/
|
|
216
220
|
g_presetObj.settingUse = {
|
|
217
221
|
motion: `true`,
|
|
@@ -274,6 +278,19 @@ g_presetObj.stockForceDelList = {
|
|
|
274
278
|
mask: [],
|
|
275
279
|
};
|
|
276
280
|
|
|
281
|
+
/**
|
|
282
|
+
* ショートカットキーが既定と異なる場合に表示する
|
|
283
|
+
* ショートカットキーエリア用に、プレイ時のみ左右に拡張するサイズの設定
|
|
284
|
+
* - 表示内容が収まるサイズは80px
|
|
285
|
+
* - 下記のplayingLayoutの設定により拡張幅が変わる (center: 左右両方拡張, left: 右のみ拡張)
|
|
286
|
+
*/
|
|
287
|
+
//g_presetObj.scAreaWidth = 80;
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* プレイ画面の表示レイアウト (既定: center)
|
|
291
|
+
* - 現状影響する範囲は「scAreaWidth」の設定のみ
|
|
292
|
+
*/
|
|
293
|
+
//g_presetObj.playingLayout = `left`;
|
|
277
294
|
|
|
278
295
|
/*
|
|
279
296
|
------------------------------------------------------------------------
|
|
@@ -313,6 +330,11 @@ g_presetObj.resultVals = {
|
|
|
313
330
|
// exScore: `exScore`,
|
|
314
331
|
};
|
|
315
332
|
|
|
333
|
+
/*
|
|
334
|
+
リザルトカスタムデータの表示設定
|
|
335
|
+
g_presetObj.resultVals から、リザルト画像データに表示したい項目を列挙します。
|
|
336
|
+
*/
|
|
337
|
+
//g_presetObj.resultValsView = [`exScore`];
|
|
316
338
|
|
|
317
339
|
/*
|
|
318
340
|
------------------------------------------------------------------------
|