danoniplus 30.6.0 → 31.0.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 +90 -71
- package/js/lib/danoni_constants.js +96 -54
- package/package.json +1 -1
- package/skin/danoni_skin_default.css +120 -38
- package/skin/danoni_skin_light.css +118 -36
- package/skin/danoni_skin_skyblue.css +118 -36
- package/skin/skin_css.zip +0 -0
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/03/
|
|
7
|
+
* Revised : 2023/03/20
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver
|
|
12
|
-
const g_revisedDate = `2023/03/
|
|
11
|
+
const g_version = `Ver 31.0.0`;
|
|
12
|
+
const g_revisedDate = `2023/03/20`;
|
|
13
13
|
const g_alphaVersion = ``;
|
|
14
14
|
|
|
15
15
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
@@ -2023,11 +2023,12 @@ const loadLocalStorage = _ => {
|
|
|
2023
2023
|
if (checkStorage) {
|
|
2024
2024
|
g_localStorage = JSON.parse(checkStorage);
|
|
2025
2025
|
|
|
2026
|
-
// Adjustment, Volume, Appearance, Opacity初期値設定
|
|
2027
|
-
checkLocalParam(`adjustment`, C_TYP_FLOAT,
|
|
2026
|
+
// Adjustment, Volume, Appearance, Opacity, hitPosition初期値設定
|
|
2027
|
+
checkLocalParam(`adjustment`, C_TYP_FLOAT, g_settings.adjustmentNum);
|
|
2028
2028
|
checkLocalParam(`volume`, C_TYP_NUMBER, g_settings.volumes.length - 1);
|
|
2029
2029
|
checkLocalParam(`appearance`);
|
|
2030
2030
|
checkLocalParam(`opacity`, C_TYP_NUMBER, g_settings.opacitys.length - 1);
|
|
2031
|
+
checkLocalParam(`hitPosition`, C_TYP_FLOAT, g_settings.hitPositionNum);
|
|
2031
2032
|
|
|
2032
2033
|
// ハイスコア取得準備
|
|
2033
2034
|
if (g_localStorage.highscores === undefined) {
|
|
@@ -2044,6 +2045,7 @@ const loadLocalStorage = _ => {
|
|
|
2044
2045
|
} else {
|
|
2045
2046
|
g_localStorage = {
|
|
2046
2047
|
adjustment: 0,
|
|
2048
|
+
hitPosition: 0,
|
|
2047
2049
|
volume: 100,
|
|
2048
2050
|
highscores: {},
|
|
2049
2051
|
};
|
|
@@ -2459,6 +2461,7 @@ const preheaderConvert = _dosObj => {
|
|
|
2459
2461
|
}
|
|
2460
2462
|
|
|
2461
2463
|
obj.jsData = [];
|
|
2464
|
+
obj.stepRtnUse = true;
|
|
2462
2465
|
|
|
2463
2466
|
const setJsFiles = (_files, _defaultDir, _type = `custom`) => {
|
|
2464
2467
|
_files.forEach(file => {
|
|
@@ -3502,9 +3505,9 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
|
|
|
3502
3505
|
}
|
|
3503
3506
|
const keyPtn = getKeyPtnName(tmpArray[k]);
|
|
3504
3507
|
g_keyObj[`${keyheader}_${k + dfPtn}`] = g_keyObj[`${_name}${keyPtn}`] !== undefined ?
|
|
3505
|
-
|
|
3508
|
+
structuredClone(g_keyObj[`${_name}${keyPtn}`]) : tmpArray[k].split(`,`).map(n => _convFunc(n));
|
|
3506
3509
|
if (baseCopyFlg) {
|
|
3507
|
-
g_keyObj[`${keyheader}_${k + dfPtn}d`] =
|
|
3510
|
+
g_keyObj[`${keyheader}_${k + dfPtn}d`] = structuredClone(g_keyObj[`${keyheader}_${k + dfPtn}`]);
|
|
3508
3511
|
}
|
|
3509
3512
|
loopFunc(k, keyheader);
|
|
3510
3513
|
}
|
|
@@ -3549,7 +3552,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
|
|
|
3549
3552
|
}
|
|
3550
3553
|
} else {
|
|
3551
3554
|
// 通常の指定方法 (例: |shuffle8i=1,1,1,2,0,0,0,0/1,1,1,1,0,0,0,0| )の場合の取り込み
|
|
3552
|
-
g_keyObj[`${keyheader}_${k + dfPtn}_${ptnCnt}`] = list.split(`,`).map(n => parseInt(n, 10));
|
|
3555
|
+
g_keyObj[`${keyheader}_${k + dfPtn}_${ptnCnt}`] = list.split(`,`).map(n => isNaN(Number(n)) ? n : parseInt(n, 10));
|
|
3553
3556
|
ptnCnt++;
|
|
3554
3557
|
}
|
|
3555
3558
|
});
|
|
@@ -3653,7 +3656,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList.split(`,`) }
|
|
|
3653
3656
|
newKeyTripleParam(newKey, `color`);
|
|
3654
3657
|
|
|
3655
3658
|
// 矢印の回転量指定、キャラクタパターン (stepRtnX_Y)
|
|
3656
|
-
|
|
3659
|
+
newKeyTripleParam(newKey, `stepRtn`);
|
|
3657
3660
|
|
|
3658
3661
|
// キーコンフィグ (keyCtrlX_Y)
|
|
3659
3662
|
newKeyMultiParam(newKey, `keyCtrl`, toKeyCtrlArray, { errCd: `E_0104`, baseCopyFlg: true });
|
|
@@ -4242,9 +4245,9 @@ const createOptionWindow = _sprite => {
|
|
|
4242
4245
|
[`shuffle`, 5.5, 0, 0, 0],
|
|
4243
4246
|
[`autoPlay`, 6.5, 0, 0, 0],
|
|
4244
4247
|
[`gauge`, 7.5, 0, 0, 0],
|
|
4245
|
-
[`adjustment`, 10, 0, 0, 0],
|
|
4246
|
-
[`fadein`, 11, 0, 0, 0],
|
|
4247
|
-
[`volume`, 12, 0, 0, 0],
|
|
4248
|
+
[`adjustment`, 10.5, 0, 0, 0],
|
|
4249
|
+
[`fadein`, 11.5, 0, 0, 0],
|
|
4250
|
+
[`volume`, 12.5, 0, 0, 0],
|
|
4248
4251
|
];
|
|
4249
4252
|
|
|
4250
4253
|
// 設定毎に個別のスプライトを作成し、その中にラベル・ボタン類を配置
|
|
@@ -4918,7 +4921,7 @@ const createOptionWindow = _sprite => {
|
|
|
4918
4921
|
g_gaugeType = (g_gaugeOptionObj.custom.length > 0 ? C_LFE_CUSTOM : g_stateObj.lifeMode);
|
|
4919
4922
|
|
|
4920
4923
|
g_stateObj.lifeVariable = g_gaugeOptionObj[`var${g_gaugeType}`][_gaugeNum];
|
|
4921
|
-
g_settings.gauges =
|
|
4924
|
+
g_settings.gauges = structuredClone(g_gaugeOptionObj[g_gaugeType.toLowerCase()]);
|
|
4922
4925
|
g_stateObj.gauge = g_settings.gauges[g_settings.gaugeNum];
|
|
4923
4926
|
}
|
|
4924
4927
|
setLifeCategory(g_headerObj);
|
|
@@ -5020,7 +5023,7 @@ const createOptionWindow = _sprite => {
|
|
|
5020
5023
|
|
|
5021
5024
|
// ---------------------------------------------------
|
|
5022
5025
|
// タイミング調整 (Adjustment)
|
|
5023
|
-
// 縦位置: 10 短縮ショートカットあり
|
|
5026
|
+
// 縦位置: 10.5 短縮ショートカットあり
|
|
5024
5027
|
createGeneralSetting(spriteList.adjustment, `adjustment`, {
|
|
5025
5028
|
skipTerms: g_settings.adjustmentTerms, hiddenBtn: true, scLabel: g_lblNameObj.sc_adjustment, roundNum: 5,
|
|
5026
5029
|
unitName: g_lblNameObj.frame,
|
|
@@ -5028,7 +5031,7 @@ const createOptionWindow = _sprite => {
|
|
|
5028
5031
|
|
|
5029
5032
|
// ---------------------------------------------------
|
|
5030
5033
|
// フェードイン (Fadein)
|
|
5031
|
-
// 縦位置: 11 スライダーあり
|
|
5034
|
+
// 縦位置: 11.5 スライダーあり
|
|
5032
5035
|
spriteList.fadein.appendChild(createLblSetting(`Fadein`));
|
|
5033
5036
|
|
|
5034
5037
|
const lnkFadein = createDivCss2Label(`lnkFadein`, `${g_stateObj.fadein}${g_lblNameObj.percent}`,
|
|
@@ -5059,7 +5062,7 @@ const createOptionWindow = _sprite => {
|
|
|
5059
5062
|
|
|
5060
5063
|
// ---------------------------------------------------
|
|
5061
5064
|
// ボリューム (Volume)
|
|
5062
|
-
// 縦位置: 12
|
|
5065
|
+
// 縦位置: 12.5
|
|
5063
5066
|
createGeneralSetting(spriteList.volume, `volume`, { unitName: g_lblNameObj.percent });
|
|
5064
5067
|
|
|
5065
5068
|
/**
|
|
@@ -5169,7 +5172,7 @@ const createOptionWindow = _sprite => {
|
|
|
5169
5172
|
}
|
|
5170
5173
|
|
|
5171
5174
|
// スクロール設定用の配列を入れ替え
|
|
5172
|
-
g_settings.scrolls =
|
|
5175
|
+
g_settings.scrolls = structuredClone(
|
|
5173
5176
|
typeof g_keyObj[`scrollDir${g_keyObj.currentKey}_${g_keyObj.currentPtn}`] === C_TYP_OBJECT ?
|
|
5174
5177
|
Object.keys(g_keyObj[`scrollDir${g_keyObj.currentKey}_${g_keyObj.currentPtn}`]) : g_keyObj.scrollName_def
|
|
5175
5178
|
);
|
|
@@ -5228,7 +5231,7 @@ const createOptionWindow = _sprite => {
|
|
|
5228
5231
|
setReverseView(document.querySelector(`#btnReverse`));
|
|
5229
5232
|
}
|
|
5230
5233
|
} else {
|
|
5231
|
-
g_settings.scrolls =
|
|
5234
|
+
g_settings.scrolls = structuredClone(g_keyObj.scrollName_def);
|
|
5232
5235
|
setSetting(0, `reverse`);
|
|
5233
5236
|
}
|
|
5234
5237
|
|
|
@@ -5265,12 +5268,12 @@ const createOptionWindow = _sprite => {
|
|
|
5265
5268
|
*/
|
|
5266
5269
|
const createGeneralSetting = (_obj, _settingName, { unitName = ``,
|
|
5267
5270
|
skipTerms = [...Array(3)].fill(1), hiddenBtn = false, addRFunc = _ => { }, addLFunc = _ => { },
|
|
5268
|
-
settingLabel = _settingName, displayName =
|
|
5271
|
+
settingLabel = _settingName, displayName = g_currentPage, scLabel = ``, roundNum = 0, adjY = 0 } = {}) => {
|
|
5269
5272
|
|
|
5270
5273
|
const settingUpper = toCapitalize(_settingName);
|
|
5271
5274
|
const linkId = `lnk${settingUpper}`;
|
|
5272
5275
|
const initName = `${getStgDetailName(g_stateObj[_settingName])}${unitName}`;
|
|
5273
|
-
_obj.appendChild(createLblSetting(settingUpper,
|
|
5276
|
+
_obj.appendChild(createLblSetting(settingUpper, adjY, toCapitalize(settingLabel)));
|
|
5274
5277
|
|
|
5275
5278
|
if (g_headerObj[`${_settingName}Use`] === undefined || g_headerObj[`${_settingName}Use`]) {
|
|
5276
5279
|
|
|
@@ -5445,7 +5448,7 @@ const getKeyCtrl = (_localStorage, _extraKeyName = ``) => {
|
|
|
5445
5448
|
const isUpdate = prevPtn !== -1 && g_keyObj.prevKey !== g_keyObj.currentKey;
|
|
5446
5449
|
g_keyCopyLists.multiple.forEach(header => {
|
|
5447
5450
|
if (g_keyObj[`${header}${basePtn}`] !== undefined && isUpdate) {
|
|
5448
|
-
g_keyObj[`${header}${copyPtn}`] =
|
|
5451
|
+
g_keyObj[`${header}${copyPtn}`] = structuredClone(g_keyObj[`${header}${basePtn}`]);
|
|
5449
5452
|
}
|
|
5450
5453
|
});
|
|
5451
5454
|
g_keyCopyLists.simple.forEach(header => {
|
|
@@ -5458,7 +5461,7 @@ const getKeyCtrl = (_localStorage, _extraKeyName = ``) => {
|
|
|
5458
5461
|
maxPtn++;
|
|
5459
5462
|
}
|
|
5460
5463
|
for (let j = 0; j < maxPtn; j++) {
|
|
5461
|
-
g_keyObj[`${type}${copyPtn}_${j}`] =
|
|
5464
|
+
g_keyObj[`${type}${copyPtn}_${j}`] = structuredClone(g_keyObj[`${type}${basePtn}_${j}`]);
|
|
5462
5465
|
}
|
|
5463
5466
|
g_keyObj[`${type}${copyPtn}_0d`] = structuredClone(g_keyObj[`${type}${copyPtn}_0`]);
|
|
5464
5467
|
});
|
|
@@ -5637,6 +5640,7 @@ const createSettingsDisplayWindow = _sprite => {
|
|
|
5637
5640
|
const settingList = [
|
|
5638
5641
|
[`appearance`, 7.4, 10, 0, 0],
|
|
5639
5642
|
[`opacity`, 9, 10, 0, 0],
|
|
5643
|
+
[`hitPosition`, 10, 10, 0, 0],
|
|
5640
5644
|
];
|
|
5641
5645
|
|
|
5642
5646
|
// 設定毎に個別のスプライトを作成し、その中にラベル・ボタン類を配置
|
|
@@ -5650,7 +5654,6 @@ const createSettingsDisplayWindow = _sprite => {
|
|
|
5650
5654
|
// 矢印の見え方 (Appearance)
|
|
5651
5655
|
// 縦位置: 7.4
|
|
5652
5656
|
createGeneralSetting(spriteList.appearance, `appearance`, {
|
|
5653
|
-
displayName: g_currentPage,
|
|
5654
5657
|
addRFunc: _ => dispAppearanceSlider(),
|
|
5655
5658
|
addLFunc: _ => dispAppearanceSlider(),
|
|
5656
5659
|
});
|
|
@@ -5694,8 +5697,16 @@ const createSettingsDisplayWindow = _sprite => {
|
|
|
5694
5697
|
opacityUse ||= g_headerObj[`${display}Use`] || g_headerObj[`${display}Set`] === C_FLG_ON);
|
|
5695
5698
|
|
|
5696
5699
|
if (opacityUse) {
|
|
5697
|
-
createGeneralSetting(spriteList.opacity, `opacity`, { unitName: g_lblNameObj.percent
|
|
5700
|
+
createGeneralSetting(spriteList.opacity, `opacity`, { unitName: g_lblNameObj.percent });
|
|
5698
5701
|
}
|
|
5702
|
+
|
|
5703
|
+
// ---------------------------------------------------
|
|
5704
|
+
// タイミング調整 (HitPosition)
|
|
5705
|
+
// 縦位置: 10
|
|
5706
|
+
createGeneralSetting(spriteList.hitPosition, `hitPosition`, {
|
|
5707
|
+
skipTerms: g_settings.hitPositionTerms, scLabel: g_lblNameObj.sc_hitPosition, roundNum: 5,
|
|
5708
|
+
unitName: g_lblNameObj.pixel,
|
|
5709
|
+
});
|
|
5699
5710
|
};
|
|
5700
5711
|
|
|
5701
5712
|
/**
|
|
@@ -5885,11 +5896,11 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
5885
5896
|
// 矢印の塗り部分
|
|
5886
5897
|
createColorObject2(`arrowShadow${j}`, {
|
|
5887
5898
|
x: keyconX, y: keyconY, background: hasVal(g_headerObj[`setShadowColor${g_colorType}`][colorPos]) ? getShadowColor(colorPos, arrowColor) : ``,
|
|
5888
|
-
rotate: g_keyObj[`stepRtn${keyCtrlPtn}`][j], styleName: `Shadow`, pointerEvents: `none`,
|
|
5899
|
+
rotate: g_keyObj[`stepRtn${keyCtrlPtn}_${g_keycons.stepRtnGroupNum}`][j], styleName: `Shadow`, pointerEvents: `none`,
|
|
5889
5900
|
}),
|
|
5890
5901
|
// 矢印本体
|
|
5891
5902
|
createColorObject2(`arrow${j}`, {
|
|
5892
|
-
x: keyconX, y: keyconY, background: arrowColor, rotate: g_keyObj[`stepRtn${keyCtrlPtn}`][j], pointerEvents: `none`,
|
|
5903
|
+
x: keyconX, y: keyconY, background: arrowColor, rotate: g_keyObj[`stepRtn${keyCtrlPtn}_${g_keycons.stepRtnGroupNum}`][j], pointerEvents: `none`,
|
|
5893
5904
|
}),
|
|
5894
5905
|
);
|
|
5895
5906
|
if (g_headerObj.shuffleUse && g_keyObj[`shuffle${keyCtrlPtn}`] !== undefined) {
|
|
@@ -5955,6 +5966,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
5955
5966
|
}
|
|
5956
5967
|
}
|
|
5957
5968
|
},
|
|
5969
|
+
stepRtn: (_type = ``) => { },
|
|
5958
5970
|
};
|
|
5959
5971
|
|
|
5960
5972
|
/**
|
|
@@ -5979,6 +5991,9 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
5979
5991
|
g_keycons[`${_type}GroupNum`] = g_keycons[`${_type}Groups`][getNextNum(_scrollNum, `${_type}Groups`, g_keycons[`${_type}GroupNum`])];
|
|
5980
5992
|
g_keyObj[`${_type}${keyCtrlPtn}`] = structuredClone(g_keyObj[`${_type}${keyCtrlPtn}_${g_keycons[`${_type}GroupNum`]}`]);
|
|
5981
5993
|
viewGroup(_type);
|
|
5994
|
+
if (_type === `stepRtn`) {
|
|
5995
|
+
keyConfigInit(g_kcType);
|
|
5996
|
+
}
|
|
5982
5997
|
};
|
|
5983
5998
|
|
|
5984
5999
|
/**
|
|
@@ -6028,16 +6043,16 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6028
6043
|
* @param {string} _type
|
|
6029
6044
|
* @param {object} obj (baseX)
|
|
6030
6045
|
*/
|
|
6031
|
-
const makeGroupButton = (_type, { baseX = g_sWidth * 5 / 6 - 20, cssName } = {}) => {
|
|
6046
|
+
const makeGroupButton = (_type, { baseX = g_sWidth * 5 / 6 - 20, baseY = 0, cssName } = {}) => {
|
|
6032
6047
|
if (g_headerObj[`${_type}Use`] && g_keycons[`${_type}Groups`].length > 1) {
|
|
6033
6048
|
const typeName = toCapitalize(_type);
|
|
6034
6049
|
multiAppend(divRoot,
|
|
6035
|
-
makeKCButtonHeader(`lbl${_type}Group`, `${typeName}Group`, { x: baseX - 10, y:
|
|
6050
|
+
makeKCButtonHeader(`lbl${_type}Group`, `${typeName}Group`, { x: baseX - 10, y: baseY }, cssName),
|
|
6036
6051
|
makeKCButton(`lnk${typeName}Group`, ``, _ => setGroup(_type), {
|
|
6037
|
-
x: baseX, y:
|
|
6052
|
+
x: baseX, y: baseY + 13, w: g_sWidth / 18, title: g_msgObj[`${_type}Group`], cxtFunc: _ => setGroup(_type, -1),
|
|
6038
6053
|
}),
|
|
6039
|
-
makeMiniKCButton(`lnk${typeName}Group`, `L`, _ => setGroup(_type, -1), { x: baseX - 10, y:
|
|
6040
|
-
makeMiniKCButton(`lnk${typeName}Group`, `R`, _ => setGroup(_type), { x: baseX + g_sWidth / 18, y:
|
|
6054
|
+
makeMiniKCButton(`lnk${typeName}Group`, `L`, _ => setGroup(_type, -1), { x: baseX - 10, y: baseY + 13 }),
|
|
6055
|
+
makeMiniKCButton(`lnk${typeName}Group`, `R`, _ => setGroup(_type), { x: baseX + g_sWidth / 18, y: baseY + 13 }),
|
|
6041
6056
|
);
|
|
6042
6057
|
} else {
|
|
6043
6058
|
g_keycons[`${_type}GroupNum`] = 0;
|
|
@@ -6058,19 +6073,13 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6058
6073
|
g_lblPosObj.kcMsg, g_cssObj.keyconfig_warning
|
|
6059
6074
|
),
|
|
6060
6075
|
|
|
6061
|
-
// キーコンフィグタイプ切替ボタン
|
|
6062
|
-
makeKCButtonHeader(`lblKcType`, `ConfigType`, { x: 10 }, g_cssObj.keyconfig_ConfigType),
|
|
6063
|
-
makeKCButton(`lnkKcType`, g_kcType, _ => setConfigType(), {
|
|
6064
|
-
x: 20, title: g_msgObj.configType, cxtFunc: _ => setConfigType(-1),
|
|
6065
|
-
}),
|
|
6066
|
-
|
|
6067
6076
|
// キーカラータイプ切替ボタン
|
|
6068
|
-
makeKCButtonHeader(`lblcolorType`, `ColorType`, {}, g_cssObj.keyconfig_ColorType),
|
|
6077
|
+
makeKCButtonHeader(`lblcolorType`, `ColorType`, { x: 10 }, g_cssObj.keyconfig_ColorType),
|
|
6069
6078
|
makeKCButton(`lnkColorType`, g_colorType, _ => setColorType(), {
|
|
6070
|
-
title: g_msgObj.colorType, cxtFunc: _ => setColorType(-1),
|
|
6079
|
+
x: 20, title: g_msgObj.colorType, cxtFunc: _ => setColorType(-1),
|
|
6071
6080
|
}),
|
|
6072
|
-
makeMiniKCButton(`lnkColorType`, `L`, _ => setColorType(-1)),
|
|
6073
|
-
makeMiniKCButton(`lnkColorType`, `R`, _ => setColorType(), { x: g_sWidth
|
|
6081
|
+
makeMiniKCButton(`lnkColorType`, `L`, _ => setColorType(-1), { x: 10 }),
|
|
6082
|
+
makeMiniKCButton(`lnkColorType`, `R`, _ => setColorType(), { x: 20 + g_sWidth / 6 }),
|
|
6074
6083
|
);
|
|
6075
6084
|
|
|
6076
6085
|
if (g_headerObj.imgType.length > 1) {
|
|
@@ -6089,6 +6098,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6089
6098
|
// カラー/シャッフルグループ切替ボタン(カラー/シャッフルパターンが複数ある場合のみ)
|
|
6090
6099
|
makeGroupButton(`color`, { cssName: g_cssObj.keyconfig_ColorType });
|
|
6091
6100
|
makeGroupButton(`shuffle`, { baseX: g_sWidth * 11 / 12 - 10, cssName: g_cssObj.settings_Shuffle });
|
|
6101
|
+
makeGroupButton(`stepRtn`, { baseY: 37, cssName: g_cssObj.settings_Adjustment });
|
|
6092
6102
|
|
|
6093
6103
|
/**
|
|
6094
6104
|
* カーソル位置の設定
|
|
@@ -6101,10 +6111,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6101
6111
|
cursor.style.left = `${nextLeft}px`;
|
|
6102
6112
|
const baseY = C_KYC_HEIGHT * Number(posj > divideCnt) + 57;
|
|
6103
6113
|
cursor.style.top = `${baseY + C_KYC_REPHEIGHT * g_currentk}px`;
|
|
6104
|
-
|
|
6105
|
-
g_kcType = (g_currentk === 0 ? `Main` : `Replaced`);
|
|
6106
|
-
lnkKcType.textContent = getStgDetailName(g_kcType);
|
|
6107
|
-
}
|
|
6114
|
+
g_kcType = (g_currentk === 0 ? `Main` : `Replaced`);
|
|
6108
6115
|
|
|
6109
6116
|
// 次の位置が見えなくなったらkeyconSpriteの位置を調整する
|
|
6110
6117
|
adjustScrollPoint(nextLeft);
|
|
@@ -6152,7 +6159,6 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6152
6159
|
const setConfigType = (_scrollNum = 1) => {
|
|
6153
6160
|
g_kcType = g_keycons.configTypes[getNextNum(_scrollNum, `configTypes`, g_kcType)];
|
|
6154
6161
|
changeConfigCursor(g_keycons.cursorNum);
|
|
6155
|
-
lnkKcType.textContent = getStgDetailName(g_kcType);
|
|
6156
6162
|
};
|
|
6157
6163
|
|
|
6158
6164
|
/**
|
|
@@ -6539,12 +6545,12 @@ const changeSetColor = _ => {
|
|
|
6539
6545
|
'Shadow': (isDefault ? defaultType : `${scoreIdHeader}Default`),
|
|
6540
6546
|
};
|
|
6541
6547
|
Object.keys(currentTypes).forEach(pattern => {
|
|
6542
|
-
g_headerObj[`set${pattern}Color`] =
|
|
6548
|
+
g_headerObj[`set${pattern}Color`] = structuredClone(g_headerObj[`set${pattern}Color${currentTypes[pattern]}`]);
|
|
6543
6549
|
for (let j = 0; j < g_headerObj.setColorInit.length; j++) {
|
|
6544
|
-
g_headerObj[`frz${pattern}Color`][j] =
|
|
6550
|
+
g_headerObj[`frz${pattern}Color`][j] = structuredClone(g_headerObj[`frz${pattern}Color${currentTypes[pattern]}`][j]);
|
|
6545
6551
|
}
|
|
6546
6552
|
if (!isDefault) {
|
|
6547
|
-
g_headerObj[`set${pattern}Color`] =
|
|
6553
|
+
g_headerObj[`set${pattern}Color`] = structuredClone(g_headerObj[`set${pattern}Color${g_colorType}`]);
|
|
6548
6554
|
}
|
|
6549
6555
|
});
|
|
6550
6556
|
|
|
@@ -6787,7 +6793,7 @@ const loadingScoreInit = async () => {
|
|
|
6787
6793
|
|
|
6788
6794
|
// Motionオプション適用時の矢印別の速度を取得(配列形式)
|
|
6789
6795
|
const motionOnFrame = setMotionOnFrame();
|
|
6790
|
-
g_workObj.motionOnFrames =
|
|
6796
|
+
g_workObj.motionOnFrames = structuredClone(motionOnFrame);
|
|
6791
6797
|
|
|
6792
6798
|
// 最初のフレームで出現する矢印が、ステップゾーンに到達するまでのフレーム数を取得
|
|
6793
6799
|
const firstFrame = (g_scoreObj.frameNum === 0 ? 0 : g_scoreObj.frameNum + g_headerObj.blankFrame);
|
|
@@ -6803,8 +6809,8 @@ const loadingScoreInit = async () => {
|
|
|
6803
6809
|
// フレーム・曲開始位置調整
|
|
6804
6810
|
let preblankFrame = 0;
|
|
6805
6811
|
if (g_scoreObj.frameNum === 0) {
|
|
6806
|
-
if (firstArrowFrame -
|
|
6807
|
-
preblankFrame = arrivalFrame - firstArrowFrame +
|
|
6812
|
+
if (firstArrowFrame - g_limitObj.adjustment < arrivalFrame) {
|
|
6813
|
+
preblankFrame = arrivalFrame - firstArrowFrame + g_limitObj.adjustment;
|
|
6808
6814
|
|
|
6809
6815
|
// 譜面データの再読み込み
|
|
6810
6816
|
const noteExistObj = {
|
|
@@ -6817,7 +6823,7 @@ const loadingScoreInit = async () => {
|
|
|
6817
6823
|
for (let j = 0; j < keyNum; j++) {
|
|
6818
6824
|
Object.keys(noteExistObj).forEach(name => {
|
|
6819
6825
|
if (tmpObj[`${name}Data`][j] !== undefined && noteExistObj[name]) {
|
|
6820
|
-
g_scoreObj[`${name}Data`][j] =
|
|
6826
|
+
g_scoreObj[`${name}Data`][j] = structuredClone(tmpObj[`${name}Data`][j]);
|
|
6821
6827
|
}
|
|
6822
6828
|
});
|
|
6823
6829
|
}
|
|
@@ -6936,7 +6942,7 @@ const applyShuffle = (_keyNum, _shuffleGroup, _style) => {
|
|
|
6936
6942
|
|
|
6937
6943
|
// indexに従って並べ替え
|
|
6938
6944
|
g_typeLists.arrow.forEach(type => {
|
|
6939
|
-
const tmpData =
|
|
6945
|
+
const tmpData = structuredClone(g_scoreObj[`${type}Data`]);
|
|
6940
6946
|
for (let i = 0; i < _keyNum; i++) {
|
|
6941
6947
|
g_scoreObj[`${type}Data`][i] = tmpData[index[i]] || [];
|
|
6942
6948
|
}
|
|
@@ -6950,7 +6956,7 @@ const applyShuffle = (_keyNum, _shuffleGroup, _style) => {
|
|
|
6950
6956
|
*/
|
|
6951
6957
|
const applyMirror = (_keyNum, _shuffleGroup, _asymFlg = false) => {
|
|
6952
6958
|
// シャッフルグループごとにミラー
|
|
6953
|
-
const style =
|
|
6959
|
+
const style = structuredClone(_shuffleGroup).map(_group => _group.reverse());
|
|
6954
6960
|
if (_asymFlg) {
|
|
6955
6961
|
// グループが4の倍数のとき、4n+1, 4n+2のみ入れ替える
|
|
6956
6962
|
style.forEach((group, i) => {
|
|
@@ -6971,7 +6977,7 @@ const applyMirror = (_keyNum, _shuffleGroup, _asymFlg = false) => {
|
|
|
6971
6977
|
*/
|
|
6972
6978
|
const applyRandom = (_keyNum, _shuffleGroup) => {
|
|
6973
6979
|
// シャッフルグループごとにシャッフル(Fisher-Yates)
|
|
6974
|
-
const style =
|
|
6980
|
+
const style = structuredClone(_shuffleGroup).map(_group => {
|
|
6975
6981
|
for (let i = _group.length - 1; i > 0; i--) {
|
|
6976
6982
|
const random = Math.floor(Math.random() * (i + 1));
|
|
6977
6983
|
const tmp = _group[i];
|
|
@@ -7559,7 +7565,7 @@ const getFirstArrowFrame = (_dataObj, _keyCtrlPtn = `${g_keyObj.currentKey}_${g_
|
|
|
7559
7565
|
|
|
7560
7566
|
data.filter(data => hasVal(data)).forEach(_objData => {
|
|
7561
7567
|
if (_objData[0] !== ``) {
|
|
7562
|
-
if (_objData[0] < tmpFirstNum && _objData[0] +
|
|
7568
|
+
if (_objData[0] < tmpFirstNum && _objData[0] + g_limitObj.adjustment > 0) {
|
|
7563
7569
|
tmpFirstNum = _objData[0];
|
|
7564
7570
|
}
|
|
7565
7571
|
}
|
|
@@ -7706,7 +7712,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
|
|
|
7706
7712
|
g_workObj[`mk${_header}Length`][_j][_k] = getFrzLength(_speedOnFrame, _data[_k], _data[_k + 1]);
|
|
7707
7713
|
}
|
|
7708
7714
|
} else if (_frzFlg && g_workObj[`mk${_header}Length`][_j] !== undefined) {
|
|
7709
|
-
g_workObj[`mk${_header}Length`][_j] =
|
|
7715
|
+
g_workObj[`mk${_header}Length`][_j] = structuredClone(g_workObj[`mk${_header}Length`][_j].slice(_k + 2));
|
|
7710
7716
|
}
|
|
7711
7717
|
};
|
|
7712
7718
|
|
|
@@ -7747,7 +7753,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
|
|
|
7747
7753
|
|
|
7748
7754
|
// 出現位置が開始前の場合は除外
|
|
7749
7755
|
if (_frzFlg && g_workObj[`mk${camelHeader}Length`][_j] !== undefined) {
|
|
7750
|
-
g_workObj[`mk${camelHeader}Length`][_j] =
|
|
7756
|
+
g_workObj[`mk${camelHeader}Length`][_j] = structuredClone(g_workObj[`mk${camelHeader}Length`][_j].slice(k + 2));
|
|
7751
7757
|
}
|
|
7752
7758
|
break;
|
|
7753
7759
|
|
|
@@ -7813,7 +7819,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
|
|
|
7813
7819
|
for (let k = 0; k < delIdx; k++) {
|
|
7814
7820
|
_data.shift();
|
|
7815
7821
|
}
|
|
7816
|
-
return
|
|
7822
|
+
return structuredClone(_data);
|
|
7817
7823
|
}
|
|
7818
7824
|
return [];
|
|
7819
7825
|
};
|
|
@@ -8229,10 +8235,10 @@ const getArrowSettings = _ => {
|
|
|
8229
8235
|
g_workObj.scrollDir = [];
|
|
8230
8236
|
g_workObj.scrollDirDefault = [];
|
|
8231
8237
|
g_workObj.dividePos = [];
|
|
8232
|
-
g_workObj.stepRtn =
|
|
8233
|
-
g_workObj.stepHitRtn =
|
|
8234
|
-
g_workObj.arrowRtn =
|
|
8235
|
-
g_workObj.keyCtrl =
|
|
8238
|
+
g_workObj.stepRtn = structuredClone(g_keyObj[`stepRtn${keyCtrlPtn}`]);
|
|
8239
|
+
g_workObj.stepHitRtn = structuredClone(g_keyObj[`stepRtn${keyCtrlPtn}`]);
|
|
8240
|
+
g_workObj.arrowRtn = structuredClone(g_keyObj[`stepRtn${keyCtrlPtn}`]);
|
|
8241
|
+
g_workObj.keyCtrl = structuredClone(g_keyObj[`keyCtrl${keyCtrlPtn}`]);
|
|
8236
8242
|
g_workObj.diffList = [];
|
|
8237
8243
|
g_workObj.mainEndTime = 0;
|
|
8238
8244
|
|
|
@@ -8275,6 +8281,7 @@ const getArrowSettings = _ => {
|
|
|
8275
8281
|
g_keyObj[`scrollDir${keyCtrlPtn}`][g_stateObj.scroll] : [...Array(keyNum)].fill(1));
|
|
8276
8282
|
|
|
8277
8283
|
g_stateObj.autoAll = (g_stateObj.autoPlay === C_FLG_ALL ? C_FLG_ON : C_FLG_OFF);
|
|
8284
|
+
g_workObj.hitPosition = (g_stateObj.autoAll ? 0 : g_stateObj.hitPosition);
|
|
8278
8285
|
changeSetColor();
|
|
8279
8286
|
|
|
8280
8287
|
for (let j = 0; j < keyNum; j++) {
|
|
@@ -8319,8 +8326,9 @@ const getArrowSettings = _ => {
|
|
|
8319
8326
|
// 次回キーコンフィグ画面へ戻ったとき、保存済みキーコンフィグ設定が表示されるようにする
|
|
8320
8327
|
g_keyObj.prevKey = `Dummy`;
|
|
8321
8328
|
|
|
8322
|
-
// ローカルストレージへAdjustment, Volume,
|
|
8329
|
+
// ローカルストレージへAdjustment, hitPosition, Volume, colorType設定を保存
|
|
8323
8330
|
g_localStorage.adjustment = g_stateObj.adjustment;
|
|
8331
|
+
g_localStorage.hitPosition = g_stateObj.hitPosition;
|
|
8324
8332
|
g_localStorage.volume = g_stateObj.volume;
|
|
8325
8333
|
g_localStorage.colorType = g_colorType;
|
|
8326
8334
|
|
|
@@ -8338,7 +8346,7 @@ const getArrowSettings = _ => {
|
|
|
8338
8346
|
storageObj[`keyCtrl${addKey}`] = setKeyCtrl(g_localKeyStorage, keyNum, keyCtrlPtn);
|
|
8339
8347
|
if (g_keyObj.currentPtn !== -1) {
|
|
8340
8348
|
storageObj[`keyCtrlPtn${addKey}`] = g_keyObj.currentPtn;
|
|
8341
|
-
g_keyObj[`keyCtrl${keyCtrlPtn}`] =
|
|
8349
|
+
g_keyObj[`keyCtrl${keyCtrlPtn}`] = structuredClone(g_keyObj[`keyCtrl${keyCtrlPtn}d`]);
|
|
8342
8350
|
}
|
|
8343
8351
|
|
|
8344
8352
|
// カラーセットの保存(キー別)
|
|
@@ -8543,8 +8551,8 @@ const mainInit = _ => {
|
|
|
8543
8551
|
|
|
8544
8552
|
// 矢印・フリーズアロー描画スプライト(ステップゾーンの上に配置)
|
|
8545
8553
|
const arrowSprite = [
|
|
8546
|
-
createEmptySprite(mainSprite, `arrowSprite0`, { w: g_headerObj.playingWidth, h: g_posObj.arrowHeight }),
|
|
8547
|
-
createEmptySprite(mainSprite, `arrowSprite1`, { w: g_headerObj.playingWidth, h: g_posObj.arrowHeight }),
|
|
8554
|
+
createEmptySprite(mainSprite, `arrowSprite0`, { y: g_workObj.hitPosition, w: g_headerObj.playingWidth, h: g_posObj.arrowHeight }),
|
|
8555
|
+
createEmptySprite(mainSprite, `arrowSprite1`, { y: -g_workObj.hitPosition, w: g_headerObj.playingWidth, h: g_posObj.arrowHeight }),
|
|
8548
8556
|
];
|
|
8549
8557
|
|
|
8550
8558
|
// Appearanceのオプション適用時は一部描画を隠す
|
|
@@ -9836,6 +9844,7 @@ const changeHitFrz = (_j, _k, _name) => {
|
|
|
9836
9844
|
|
|
9837
9845
|
const styfrzBar = $id(`${_name}Bar${frzNo}`);
|
|
9838
9846
|
const styfrzBtm = $id(`${_name}Btm${frzNo}`);
|
|
9847
|
+
const styfrzTopShadow = $id(`${_name}TopShadow${frzNo}`);
|
|
9839
9848
|
const styfrzBtmShadow = $id(`${_name}BtmShadow${frzNo}`);
|
|
9840
9849
|
const colorPos = g_keyObj[`color${g_keyObj.currentKey}_${g_keyObj.currentPtn}`][_j];
|
|
9841
9850
|
|
|
@@ -9846,9 +9855,12 @@ const changeHitFrz = (_j, _k, _name) => {
|
|
|
9846
9855
|
// 早押ししたboostCnt分のフリーズアロー終端位置の修正
|
|
9847
9856
|
const delFrzMotionLength = sumData(g_workObj.motionOnFrames.slice(0, currentFrz.boostCnt + 1));
|
|
9848
9857
|
|
|
9858
|
+
// 判定位置調整分の補正
|
|
9859
|
+
const hitPos = g_workObj.hitPosition * g_workObj.scrollDir[_j];
|
|
9860
|
+
|
|
9849
9861
|
currentFrz.frzBarLength -= (delFrzLength + delFrzMotionLength) * currentFrz.dir;
|
|
9850
|
-
currentFrz.barY -= (delFrzLength + delFrzMotionLength) * currentFrz.dividePos;
|
|
9851
|
-
currentFrz.btmY -= delFrzLength + delFrzMotionLength;
|
|
9862
|
+
currentFrz.barY -= (delFrzLength + delFrzMotionLength) * currentFrz.dividePos + hitPos;
|
|
9863
|
+
currentFrz.btmY -= delFrzLength + delFrzMotionLength + hitPos;
|
|
9852
9864
|
currentFrz.y += delFrzLength;
|
|
9853
9865
|
currentFrz.isMoving = false;
|
|
9854
9866
|
|
|
@@ -9857,6 +9869,7 @@ const changeHitFrz = (_j, _k, _name) => {
|
|
|
9857
9869
|
styfrzBar.background = g_workObj[`${_name}HitBarColors`][_j];
|
|
9858
9870
|
styfrzBtm.top = `${currentFrz.btmY}px`;
|
|
9859
9871
|
styfrzBtm.background = g_workObj[`${_name}HitColors`][_j];
|
|
9872
|
+
styfrzTopShadow.opacity = 0;
|
|
9860
9873
|
styfrzBtmShadow.top = styfrzBtm.top;
|
|
9861
9874
|
if (_name === `frz`) {
|
|
9862
9875
|
if (g_headerObj.frzShadowColor[colorPos][1] !== ``) {
|
|
@@ -9881,10 +9894,16 @@ const changeFailedFrz = (_j, _k) => {
|
|
|
9881
9894
|
$id(`frzHit${_j}`).opacity = 0;
|
|
9882
9895
|
$id(`frzTop${frzNo}`).display = C_DIS_INHERIT;
|
|
9883
9896
|
$id(`frzTop${frzNo}`).background = `#cccccc`;
|
|
9897
|
+
$id(`frzTopShadow${frzNo}`).opacity = 1;
|
|
9884
9898
|
$id(`frzBar${frzNo}`).background = `#999999`;
|
|
9885
9899
|
$id(`frzBar${frzNo}`).opacity = 1;
|
|
9886
9900
|
$id(`frzBtm${frzNo}`).background = `#cccccc`;
|
|
9887
9901
|
|
|
9902
|
+
// 判定位置調整分の補正
|
|
9903
|
+
const hitPos = g_workObj.hitPosition * g_workObj.scrollDir[_j];
|
|
9904
|
+
$id(`frzTop${frzNo}`).top = `${- hitPos}px`;
|
|
9905
|
+
$id(`frzTopShadow${frzNo}`).top = `${- hitPos}px`;
|
|
9906
|
+
|
|
9888
9907
|
const colorPos = g_keyObj[`color${g_keyObj.currentKey}_${g_keyObj.currentPtn}`][_j];
|
|
9889
9908
|
if (g_headerObj.frzShadowColor[colorPos][0] !== ``) {
|
|
9890
9909
|
$id(`frzTopShadow${frzNo}`).background = `#333333`;
|
|
@@ -9922,7 +9941,7 @@ const judgeArrow = _j => {
|
|
|
9922
9941
|
displayDiff(_difFrame);
|
|
9923
9942
|
|
|
9924
9943
|
const stepDivHit = document.querySelector(`#stepHit${_j}`);
|
|
9925
|
-
stepDivHit.style.top = `${currentArrow.prevY - parseFloat($id(`stepRoot${_j}`).top) - 15}px`;
|
|
9944
|
+
stepDivHit.style.top = `${currentArrow.prevY - parseFloat($id(`stepRoot${_j}`).top) - 15 + g_workObj.hitPosition * g_workObj.scrollDir[_j]}px`;
|
|
9926
9945
|
stepDivHit.style.opacity = 0.75;
|
|
9927
9946
|
stepDivHit.classList.value = ``;
|
|
9928
9947
|
stepDivHit.classList.add(g_cssObj[`main_step${resultJdg}`]);
|