danoniplus 44.5.4 → 45.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 CHANGED
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 44.5.4`;
11
+ const g_version = `Ver 45.0.0`;
12
12
  const g_revisedDate = `2026/02/26`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
@@ -1687,12 +1687,12 @@ const createEmptySprite = (_parentObj, _newObjId, { x = 0, y = 0, w = g_sWidth,
1687
1687
  * @param {number} [object.x=0]
1688
1688
  * @returns {HTMLDivElement}
1689
1689
  */
1690
- const createMultipleSprite = (_baseName, _num, { x = 0 } = {}) => {
1690
+ const createMultipleSprite = (_baseName, _num, { x = 0, priority = g_transPriority.layer } = {}) => {
1691
1691
  const sprite = createEmptySprite(divRoot, _baseName);
1692
1692
  for (let j = 0; j <= _num; j++) {
1693
1693
  createEmptySprite(sprite, `${_baseName}${j}`);
1694
1694
  }
1695
- addX(_baseName, `root`, x);
1695
+ addX(_baseName, `root`, x, { priority });
1696
1696
  return sprite;
1697
1697
  };
1698
1698
 
@@ -7908,9 +7908,7 @@ const createGeneralSetting = (_obj, _settingName, { unitName = ``,
7908
7908
  const initName = `${getStgDetailName(g_stateObj[_settingName])}${unitName}`;
7909
7909
  _obj.appendChild(createLblSetting(settingUpper, adjY, toCapitalize(settingLabel)));
7910
7910
 
7911
- if (_settingName === `speed` || (
7912
- g_headerObj[`${_settingName}Use`] === undefined || g_headerObj[`${_settingName}Use`]
7913
- )) {
7911
+ if (g_headerObj[`${_settingName}Use`] === undefined || g_headerObj[`${_settingName}Use`]) {
7914
7912
 
7915
7913
  multiAppend(_obj,
7916
7914
  makeSettingLblCssButton(linkId, `${initName}${g_localStorage[_settingName] === g_stateObj[_settingName] ? ' *' : ''}`, 0,
@@ -8775,7 +8773,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
8775
8773
  [tkObj.keyCtrlPtn, tkObj.keyNum, tkObj.posMax, tkObj.divideCnt];
8776
8774
 
8777
8775
  g_keyCopyLists.simpleDef.forEach(header => updateKeyInfo(header, keyCtrlPtn));
8778
- addTransform(`keyconSprite`, `root`, `scale(${g_keyObj.scale})`)
8776
+ addTransform(`keyconSprite`, `root`, `scale(${g_keyObj.scale})`, g_transPriority.scale);
8779
8777
  keyconSprite.style.height = `${parseFloat(keyconSprite.style.height) / ((1 + g_keyObj.scale) / 2)}px`;
8780
8778
  const kWidth = parseInt(keyconSprite.style.width);
8781
8779
  changeSetColor();
@@ -10337,7 +10335,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
10337
10335
  const dosSpeedData = getRefData(_header, `${_scoreNo}${_footer}`);
10338
10336
  const speedData = [];
10339
10337
 
10340
- if (hasVal(dosSpeedData) && g_stateObj.d_speed !== C_FLG_OFF) {
10338
+ if (hasVal(dosSpeedData) && g_stateObj.d_velocity !== C_FLG_OFF) {
10341
10339
  const tmpArrayData = splitLF(dosSpeedData);
10342
10340
 
10343
10341
  tmpArrayData.filter(data => hasVal(data)).forEach(tmpData => {
@@ -10919,11 +10917,11 @@ const getSpeedFactor = _speed => {
10919
10917
  // ±1 はそのまま返して符号を保持
10920
10918
  return _speed;
10921
10919
  }
10922
- if (g_stateObj.d_speed === `Extreme`) {
10920
+ if (g_stateObj.d_velocity === `Extreme`) {
10923
10921
  // |speed|>1 を強めに、<1 を弱めに
10924
10922
  return _speed * (Math.abs(_speed) > 1 ? 1.5 : 0.75);
10925
10923
  }
10926
- if (g_stateObj.d_speed === `Soft`) {
10924
+ if (g_stateObj.d_velocity === `Soft`) {
10927
10925
  // 変化幅を緩和(符号は維持)
10928
10926
  return (1 + Math.abs(_speed)) / 2 * Math.sign(_speed);
10929
10927
  }
@@ -12086,17 +12084,16 @@ const mainInit = () => {
12086
12084
  mainSprite.style.transformOrigin = `center 55%`;
12087
12085
  }
12088
12086
 
12089
- addTransform(`mainSprite`, `root`, `scale(${g_workObj.scale})`);
12090
- addXY(`mainSprite`, `root`, g_workObj.playingX, g_posObj.stepY - C_STEP_Y + g_headerObj.playingY);
12087
+ addTransform(`mainSprite`, `root`, `scale(${g_workObj.scale})`, g_transPriority.scale);
12088
+ addXY(`mainSprite`, `root`, g_workObj.playingX, g_posObj.stepY - C_STEP_Y + g_headerObj.playingY, { priority: g_transPriority.base });
12091
12089
 
12092
12090
  // 曲情報・判定カウント用スプライトを作成(メインスプライトより上位)
12093
12091
  const infoSprite = createEmptySprite(divRoot, `infoSprite`, mainCommonPos);
12094
- addXY(`infoSprite`, `root`, g_workObj.playingX, g_headerObj.playingY);
12092
+ addXY(`infoSprite`, `root`, g_workObj.playingX, g_headerObj.playingY, { priority: g_transPriority.base });
12095
12093
 
12096
12094
  // 判定系スプライトを作成(メインスプライトより上位)
12097
12095
  const judgeSprite = createEmptySprite(divRoot, `judgeSprite`, mainCommonPos);
12098
- addXY(`judgeSprite`, `root`, g_workObj.playingX, g_headerObj.playingY);
12099
-
12096
+ addXY(`judgeSprite`, `root`, g_workObj.playingX, g_headerObj.playingY, { priority: g_transPriority.base });
12100
12097
  const tkObj = getKeyInfo();
12101
12098
  const [keyCtrlPtn, keyNum] = [tkObj.keyCtrlPtn, tkObj.keyNum];
12102
12099
 
@@ -12150,7 +12147,7 @@ const mainInit = () => {
12150
12147
  // StepAreaオプションにより、レイヤーが倍化される場合があるため基準レイヤー数ごとに設定
12151
12148
  const transj = j % g_stateObj.layerNumDf;
12152
12149
  addTransform(`mainSprite${j}`, `mainSprite${j}`,
12153
- g_keyObj[`layerTrans${keyCtrlPtn}`]?.[0]?.[Math.floor(transj / 2) * 2 + (transj + Number(g_stateObj.reverse === C_FLG_ON)) % 2]);
12150
+ g_keyObj[`layerTrans${keyCtrlPtn}`]?.[0]?.[Math.floor(transj / 2) * 2 + (transj + Number(g_stateObj.reverse === C_FLG_ON)) % 2], g_transPriority.layer);
12154
12151
 
12155
12152
  stepSprite.push(createEmptySprite(mainSpriteJ, `stepSprite${j}`, mainCommonPos));
12156
12153
  arrowSprite.push(createEmptySprite(mainSpriteJ, `arrowSprite${j}`, Object.assign({ y: g_workObj.hitPosition * (j % 2 === 0 ? 1 : -1) }, mainCommonPos)));
@@ -12202,7 +12199,7 @@ const mainInit = () => {
12202
12199
  g_stepAreaFunc.get(g_stateObj.stepArea)();
12203
12200
 
12204
12201
  // mainSpriteのtransform追加処理
12205
- addTransform(`mainSprite`, `playWindow`, g_playWindowFunc.get(g_stateObj.playWindow)());
12202
+ addTransform(`mainSprite`, `playWindow`, g_playWindowFunc.get(g_stateObj.playWindow)(), g_transPriority.playWindow);
12206
12203
 
12207
12204
  // EffectのArrowEffect追加処理
12208
12205
  g_effectFunc.get(g_stateObj.effect)();
@@ -12213,7 +12210,7 @@ const mainInit = () => {
12213
12210
 
12214
12211
  // Shaking初期化
12215
12212
  if (g_stateObj.shaking !== C_FLG_OFF) {
12216
- addXY(`mainSprite`, `shaking`, 0, 0);
12213
+ addXY(`mainSprite`, `shaking`, 0, 0, { priority: g_transPriority.shaking });
12217
12214
  }
12218
12215
 
12219
12216
  // 現在の矢印・フリーズアローの速度、個別加算速度の初期化 (速度変化時に直す)
@@ -12916,6 +12913,7 @@ const mainInit = () => {
12916
12913
  // 現フレーム時の位置
12917
12914
  y: firstPosY,
12918
12915
  };
12916
+
12919
12917
  // 矢印色の設定
12920
12918
  // - 枠/塗りつぶし色: g_attrObj[arrowName].Arrow / ArrowShadow
12921
12919
  g_typeLists.arrowColor.forEach(val => g_attrObj[arrowName][`Arrow${val}`] = g_workObj[`${_name}${val}Colors`][_j]);
@@ -13576,19 +13574,20 @@ const changeAppearanceFilter = (_num = 10) => {
13576
13574
  $id(`arrowSprite${topNum + j}`).clipPath = topShape;
13577
13575
  $id(`arrowSprite${bottomNum + j}`).clipPath = bottomShape;
13578
13576
 
13579
- addY(`filterBar${topNum + j}`, `appearance`, parseFloat($id(`arrowSprite${j}`).top) + topDist);
13580
- addY(`filterBar${bottomNum + j}`, `appearance`, parseFloat($id(`arrowSprite${j + 1}`).top) + bottomDist);
13577
+ addY(`filterBar${topNum + j}`, `appearance`, parseFloat($id(`arrowSprite${j}`).top) + topDist, { priority: g_transPriority.layer });
13578
+ addY(`filterBar${bottomNum + j}`, `appearance`, parseFloat($id(`arrowSprite${j + 1}`).top) + bottomDist, { priority: g_transPriority.layer });
13581
13579
 
13582
13580
  if (![`Default`, `Halfway`].includes(g_stateObj.stepArea)) {
13583
- addY(`filterBar${bottomNum + j}_HS`, `appearance`, parseFloat($id(`arrowSprite${j}`).top) + bottomDist);
13584
- addY(`filterBar${topNum + j}_HS`, `appearance`, parseFloat($id(`arrowSprite${j + 1}`).top) + topDist);
13581
+ addY(`filterBar${bottomNum + j}_HS`, `appearance`, parseFloat($id(`arrowSprite${j}`).top) + bottomDist, { priority: g_transPriority.layer });
13582
+ addY(`filterBar${topNum + j}_HS`, `appearance`, parseFloat($id(`arrowSprite${j + 1}`).top) + topDist, { priority: g_transPriority.layer });
13585
13583
  }
13586
13584
  }
13587
13585
 
13588
13586
  // フィルターバーのパーセント表示(フィルターバーが複数表示されるなど複雑なため、最初の階層グループの位置に追従)
13589
13587
  if (g_appearanceRanges.includes(g_stateObj.appearance)) {
13590
13588
  const currentBarNum = g_hidSudObj.std[g_stateObj.appearance][g_stateObj.reverse];
13591
- $id(`filterView`).top = $id(`filterBar${currentBarNum % 2}`).top;
13589
+ addY(`filterView`, `appearance`, parseFloat($id(`arrowSprite${currentBarNum % 2}`).top) +
13590
+ (currentBarNum % 2 === 0 ? bottomDist : topDist), { priority: g_transPriority.layer });
13592
13591
  filterView.textContent = `${_num}%`;
13593
13592
  g_hidSudObj.filterPos = _num;
13594
13593
  }
@@ -13678,12 +13677,12 @@ const changeReturn = (_rad, _axis) => {
13678
13677
  }
13679
13678
  sprite.style.opacity = isBack ? 0.7 : 1;
13680
13679
 
13681
- addTransform(`mainSprite`, `frzReturn`, _transform);
13680
+ addTransform(`mainSprite`, `frzReturn`, _transform, g_transPriority.frzReturn);
13682
13681
 
13683
13682
  if (_rad < 360 && g_workObj.frzReturnFlg) {
13684
13683
  setTimeout(() => changeReturn(_rad + 4, _axis), 20);
13685
13684
  } else {
13686
- addTransform(`mainSprite`, `frzReturn`, ``);
13685
+ delTransform(`mainSprite`, `frzReturn`);
13687
13686
  g_workObj.frzReturnFlg = false;
13688
13687
  }
13689
13688
  }
@@ -13781,7 +13780,7 @@ const changeScrollArrowDirs = (_frameNum) => {
13781
13780
  tmpObj.set(g_workObj.dividePos[targetj], g_workObj.mkScrollchArrowLayerTrans[_frameNum][j]);
13782
13781
  }
13783
13782
  });
13784
- tmpObj.forEach((val, key, map) => addTransform(`mainSprite${key}`, `scrollch`, val));
13783
+ tmpObj.forEach((val, key, map) => addTransform(`mainSprite${key}`, `scrollch`, val, g_transPriority.layer));
13785
13784
  };
13786
13785
 
13787
13786
  /**
@@ -15132,7 +15131,7 @@ const getSelectedSettingList = (_shuffleName) => {
15132
15131
  }
15133
15132
 
15134
15133
  let display2Data = [
15135
- withDisplays(g_stateObj.d_speed, C_FLG_ON, g_lblNameObj.rd_Speed),
15134
+ withDisplays(g_stateObj.d_velocity, C_FLG_ON, g_lblNameObj.rd_Velocity),
15136
15135
  withDisplays(g_stateObj.d_color, C_FLG_ON, g_lblNameObj.rd_Color),
15137
15136
  withDisplays(g_stateObj.d_lyrics, C_FLG_ON, g_lblNameObj.rd_Lyrics),
15138
15137
  withDisplays(g_stateObj.d_background, C_FLG_ON, g_lblNameObj.rd_Background),
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2026/02/23 (v44.5.2)
8
+ * Revised : 2026/02/26 (v45.0.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -1154,7 +1154,7 @@ const g_stateObj = {
1154
1154
  d_filterline: C_FLG_ON,
1155
1155
 
1156
1156
  d_color: C_FLG_ON,
1157
- d_speed: C_FLG_ON,
1157
+ d_velocity: C_FLG_ON,
1158
1158
  d_arroweffect: C_FLG_ON,
1159
1159
  d_lyrics: C_FLG_ON,
1160
1160
  d_background: C_FLG_ON,
@@ -1313,7 +1313,7 @@ const g_settings = {
1313
1313
 
1314
1314
  // Display設定の拡張リスト
1315
1315
  d_stepZones: [`FlatBar`],
1316
- d_speeds: [`Extreme`, `Soft`],
1316
+ d_velocitys: [`Extreme`, `Soft`],
1317
1317
 
1318
1318
  displayNum: {
1319
1319
  stepZone: 0,
@@ -1322,7 +1322,7 @@ const g_settings = {
1322
1322
  lifeGauge: 0,
1323
1323
  score: 0,
1324
1324
  musicInfo: 0,
1325
- speed: 0,
1325
+ velocity: 0,
1326
1326
  color: 0,
1327
1327
  lyrics: 0,
1328
1328
  background: 0,
@@ -1388,6 +1388,15 @@ const g_moveSettingWindow = (_changePageFlg = true, _direction = 1) => {
1388
1388
  const g_transforms = {};
1389
1389
  const g_posXs = {};
1390
1390
  const g_posYs = {};
1391
+ const g_transPriority = {
1392
+ base: 0,
1393
+ layer: 10,
1394
+ playWindow: 100,
1395
+ stepArea: 110,
1396
+ frzReturn: 120,
1397
+ shaking: 130,
1398
+ scale: 200,
1399
+ };
1391
1400
 
1392
1401
  /**
1393
1402
  * idごとのtransformを追加・変更
@@ -1395,13 +1404,32 @@ const g_posYs = {};
1395
1404
  * @param {string} _id
1396
1405
  * @param {string} _transformId
1397
1406
  * @param {string} _transform
1407
+ * @param {number} [_priority=1000] transformの優先度(数値が小さいほど優先される。デフォルトは1000)
1398
1408
  */
1399
- const addTransform = (_id, _transformId, _transform) => {
1409
+ const addTransform = (_id, _transformId, _transform, _priority = 1000) => {
1400
1410
  if (g_transforms[_id] === undefined) {
1401
1411
  g_transforms[_id] = new Map();
1402
1412
  }
1403
- g_transforms[_id].set(_transformId, _transform);
1404
- $id(_id).transform = Array.from(g_transforms[_id].values()).join(` `);
1413
+ g_transforms[_id].set(_transformId, { transform: _transform, priority: _priority });
1414
+ $id(_id).transform = Array.from(g_transforms[_id].values())
1415
+ .sort((a, b) => b.priority - a.priority)
1416
+ .map(v => v.transform)
1417
+ .join(` `);
1418
+ };
1419
+
1420
+ /**
1421
+ * id, transformIdに合致するtransformの削除
1422
+ * @param {string} _id
1423
+ * @param {string} _transformId
1424
+ */
1425
+ const delTransform = (_id, _transformId) => {
1426
+ if (g_transforms[_id]) {
1427
+ g_transforms[_id].delete(_transformId);
1428
+ $id(_id).transform = Array.from(g_transforms[_id].values())
1429
+ .sort((a, b) => b.priority - a.priority)
1430
+ .map(v => v.transform)
1431
+ .join(` `);
1432
+ }
1405
1433
  };
1406
1434
 
1407
1435
  /**
@@ -1427,7 +1455,7 @@ const resetTransform = () => {
1427
1455
  * @returns {string}
1428
1456
  */
1429
1457
  const getTransform = (_id, _transformId) => {
1430
- return g_transforms[_id]?.[_transformId] || ``;
1458
+ return g_transforms[_id]?.get(_transformId)?.transform || ``;
1431
1459
  };
1432
1460
 
1433
1461
  /**
@@ -1435,10 +1463,11 @@ const getTransform = (_id, _transformId) => {
1435
1463
  * @param {string} _id
1436
1464
  * @param {string} _typeId
1437
1465
  * @param {number} [_x=0]
1438
- * @param {boolean} [_overwrite=false]
1466
+ * @param {boolean} [overwrite=false]
1467
+ * @param {number} [priority=1000] transformの優先度(数値が小さいほど優先される。デフォルトは1000)
1439
1468
  */
1440
- const addX = (_id, _typeId, _x = 0, _overwrite = false) => {
1441
- if (_overwrite) {
1469
+ const addX = (_id, _typeId, _x = 0, { overwrite = false, priority = 1000 } = {}) => {
1470
+ if (overwrite) {
1442
1471
  delete g_posXs?.[_id];
1443
1472
  }
1444
1473
  if (g_posXs[_id] === undefined) {
@@ -1446,7 +1475,7 @@ const addX = (_id, _typeId, _x = 0, _overwrite = false) => {
1446
1475
  }
1447
1476
  if (g_posXs[_id].get(_typeId) !== _x) {
1448
1477
  g_posXs[_id].set(_typeId, _x);
1449
- $id(_id).left = `${sumData(Array.from(g_posXs[_id].values()))}px`;
1478
+ addTransform(_id, `posX`, `translateX(${sumData(Array.from(g_posXs[_id].values()))}px)`, priority);
1450
1479
  }
1451
1480
  };
1452
1481
 
@@ -1455,10 +1484,11 @@ const addX = (_id, _typeId, _x = 0, _overwrite = false) => {
1455
1484
  * @param {string} _id
1456
1485
  * @param {string} _typeId
1457
1486
  * @param {number} [_y=0]
1458
- * @param {boolean} [_overwrite=false]
1487
+ * @param {boolean} [overwrite=false]
1488
+ * @param {number} [priority=1000] transformの優先度(数値が小さいほど優先される。デフォルトは1000)
1459
1489
  */
1460
- const addY = (_id, _typeId, _y = 0, _overwrite = false) => {
1461
- if (_overwrite) {
1490
+ const addY = (_id, _typeId, _y = 0, { overwrite = false, priority = 1000 } = {}) => {
1491
+ if (overwrite) {
1462
1492
  delete g_posYs?.[_id];
1463
1493
  }
1464
1494
  if (g_posYs[_id] === undefined) {
@@ -1466,7 +1496,7 @@ const addY = (_id, _typeId, _y = 0, _overwrite = false) => {
1466
1496
  }
1467
1497
  if (g_posYs[_id].get(_typeId) !== _y) {
1468
1498
  g_posYs[_id].set(_typeId, _y);
1469
- $id(_id).top = `${sumData(Array.from(g_posYs[_id].values()))}px`;
1499
+ addTransform(_id, `posY`, `translateY(${sumData(Array.from(g_posYs[_id].values()))}px)`, priority);
1470
1500
  }
1471
1501
  };
1472
1502
 
@@ -1476,8 +1506,14 @@ const addY = (_id, _typeId, _y = 0, _overwrite = false) => {
1476
1506
  * @param {string} _typeId
1477
1507
  */
1478
1508
  const delX = (_id, _typeId) => {
1509
+ if (g_posXs[_id] === undefined) return;
1479
1510
  g_posXs[_id]?.delete(_typeId);
1480
- $id(_id).left = `${sumData(Array.from(g_posXs[_id].values()))}px`;
1511
+ if (g_posXs[_id].size === 0) {
1512
+ delTransform(_id, `posX`);
1513
+ return;
1514
+ }
1515
+ const priority = g_transforms[_id]?.get(`posX`)?.priority ?? 1000;
1516
+ addTransform(_id, `posX`, `translateX(${sumData(Array.from(g_posXs[_id].values()))}px)`, priority);
1481
1517
  };
1482
1518
 
1483
1519
  /**
@@ -1486,8 +1522,14 @@ const delX = (_id, _typeId) => {
1486
1522
  * @param {string} _typeId
1487
1523
  */
1488
1524
  const delY = (_id, _typeId) => {
1525
+ if (g_posYs[_id] === undefined) return;
1489
1526
  g_posYs[_id]?.delete(_typeId);
1490
- $id(_id).top = `${sumData(Array.from(g_posYs[_id].values()))}px`;
1527
+ if (g_posYs[_id].size === 0) {
1528
+ delTransform(_id, `posY`);
1529
+ return;
1530
+ }
1531
+ const priority = g_transforms[_id]?.get(`posY`)?.priority ?? 1000;
1532
+ addTransform(_id, `posY`, `translateY(${sumData(Array.from(g_posYs[_id].values()))}px)`, priority);
1491
1533
  };
1492
1534
 
1493
1535
  /**
@@ -1496,11 +1538,30 @@ const delY = (_id, _typeId) => {
1496
1538
  * @param {string} _typeId
1497
1539
  * @param {number} _x
1498
1540
  * @param {number} _y
1499
- * @param {boolean} [_overwrite=false]
1541
+ * @param {boolean} [overwrite=false]
1542
+ * @param {number} [priority=1000] transformの優先度(数値が小さいほど優先される。デフォルトは1000)
1500
1543
  */
1501
- const addXY = (_id, _typeId, _x = 0, _y = 0, _overwrite = false) => {
1502
- addX(_id, _typeId, _x, _overwrite);
1503
- addY(_id, _typeId, _y, _overwrite);
1544
+ const addXY = (_id, _typeId, _x = 0, _y = 0, { overwrite = false, priority = 1000 } = {}) => {
1545
+ addX(_id, _typeId, _x, { overwrite, priority });
1546
+ addY(_id, _typeId, _y, { overwrite, priority });
1547
+ };
1548
+
1549
+ /**
1550
+ * 座標を回転させた場合の変換処理
1551
+ * @param {number} _x
1552
+ * @param {number} _y
1553
+ * @param {number} _angleDeg
1554
+ * @returns {object} {x: number, y: number}
1555
+ */
1556
+ const rotateXY = (_x, _y, _angleDeg) => {
1557
+ const rad = _angleDeg * Math.PI / 180;
1558
+ const cos = Math.cos(rad);
1559
+ const sin = Math.sin(rad);
1560
+
1561
+ const rx = _x * cos - _y * sin;
1562
+ const ry = _x * sin + _y * cos;
1563
+
1564
+ return { x: rx, y: ry };
1504
1565
  };
1505
1566
 
1506
1567
  /**
@@ -1667,7 +1728,7 @@ const g_stepAreaFunc = new Map([
1667
1728
  }],
1668
1729
  ['Mismatched', () => {
1669
1730
  for (let j = 0; j < g_stateObj.layerNum; j++) {
1670
- addTransform(`mainSprite${j}`, `stepArea`, `rotate(${getDirFromLayer(j) * -15}deg)`);
1731
+ addTransform(`mainSprite${j}`, `stepArea`, `rotate(${getDirFromLayer(j) * -15}deg)`, g_transPriority.stepArea);
1671
1732
  }
1672
1733
  if (g_workObj.orgFlatFlg) {
1673
1734
  g_arrowGroupSprite.forEach(sprite => {
@@ -1679,7 +1740,7 @@ const g_stepAreaFunc = new Map([
1679
1740
  }],
1680
1741
  ['R-Mismatched', () => {
1681
1742
  for (let j = 0; j < g_stateObj.layerNum; j++) {
1682
- addTransform(`mainSprite${j}`, `stepArea`, `rotate(${getDirFromLayer(j) * 15}deg)`);
1743
+ addTransform(`mainSprite${j}`, `stepArea`, `rotate(${getDirFromLayer(j) * 15}deg)`, g_transPriority.stepArea);
1683
1744
  }
1684
1745
  if (g_workObj.orgFlatFlg) {
1685
1746
  g_arrowGroupSprite.forEach(sprite => {
@@ -1698,13 +1759,13 @@ const g_stepAreaFunc = new Map([
1698
1759
  }],
1699
1760
  ['X-Flower', () => {
1700
1761
  for (let j = 0; j < g_stateObj.layerNum; j++) {
1701
- addTransform(`mainSprite${j}`, `stepArea`, `rotate(${getDirFromLayer(j) * -15}deg)`);
1762
+ addTransform(`mainSprite${j}`, `stepArea`, `rotate(${getDirFromLayer(j) * -15}deg)`, g_transPriority.stepArea);
1702
1763
  }
1703
1764
  }],
1704
1765
  ['Alt-Crossing', () => {
1705
1766
  for (let j = 0; j < g_stateObj.layerNum; j++) {
1706
1767
  addTransform(`mainSprite${j}`, `stepArea`, `rotate(${getDirFromLayer(j) * -10}deg) ` +
1707
- `translateX(${getDirFromLayer(j) * 20}px)`);
1768
+ `translateX(${getDirFromLayer(j) * 20}px)`, g_transPriority.stepArea);
1708
1769
  }
1709
1770
  }],
1710
1771
  ]);
@@ -1861,7 +1922,7 @@ const g_keycons = {
1861
1922
  };
1862
1923
 
1863
1924
  let g_displays = [`stepZone`, `judgment`, `fastSlow`, `lifeGauge`, `score`, `musicInfo`, `filterLine`,
1864
- `speed`, `color`, `lyrics`, `background`, `arrowEffect`, `special`];
1925
+ `velocity`, `color`, `lyrics`, `background`, `arrowEffect`, `special`];
1865
1926
 
1866
1927
  // ローカルストレージ保存対象
1867
1928
  let g_storeSettings = [`adjustment`, `volume`, `appearance`, `opacity`, `hitPosition`];
@@ -1870,7 +1931,7 @@ let g_storeSettings = [`adjustment`, `volume`, `appearance`, `opacity`, `hitPosi
1870
1931
  let g_storeSettingsEx = [`d_stepzone`, `d_judgment`, `d_fastslow`, `d_lifegauge`,
1871
1932
  `d_score`, `d_musicinfo`, `d_filterline`];
1872
1933
 
1873
- let g_canDisabledSettings = [`motion`, `scroll`, `reverse`, `shuffle`, `autoPlay`, `gauge`,
1934
+ let g_canDisabledSettings = [`speed`, `motion`, `scroll`, `reverse`, `shuffle`, `autoPlay`, `gauge`,
1874
1935
  `excessive`, `appearance`, `playWindow`, `stepArea`, `frzReturn`, `shaking`, `effect`, `camoufrage`,
1875
1936
  `swapping`, `judgRange`, `autoRetry`];
1876
1937
 
@@ -2463,8 +2524,8 @@ const g_shortcutObj = {
2463
2524
  ShiftRight_Digit6: { id: `lnkmusicInfoR` },
2464
2525
  ShiftLeft_Digit7: { id: `lnkfilterLineR` },
2465
2526
  ShiftRight_Digit7: { id: `lnkfilterLineR` },
2466
- ShiftLeft_Digit8: { id: `lnkspeedR` },
2467
- ShiftRight_Digit8: { id: `lnkspeedR` },
2527
+ ShiftLeft_Digit8: { id: `lnkvelocityR` },
2528
+ ShiftRight_Digit8: { id: `lnkvelocityR` },
2468
2529
  ShiftLeft_Digit9: { id: `lnkcolorR` },
2469
2530
  ShiftRight_Digit9: { id: `lnkcolorR` },
2470
2531
  ShiftLeft_Digit0: { id: `lnklyricsR` },
@@ -2483,7 +2544,7 @@ const g_shortcutObj = {
2483
2544
  Digit5: { id: `lnkscore` },
2484
2545
  Digit6: { id: `lnkmusicInfo` },
2485
2546
  Digit7: { id: `lnkfilterLine` },
2486
- Digit8: { id: `lnkspeed` },
2547
+ Digit8: { id: `lnkvelocity` },
2487
2548
  Digit9: { id: `lnkcolor` },
2488
2549
  Digit0: { id: `lnklyrics` },
2489
2550
  Semicolon: { id: `lnkbackground` },
@@ -2504,8 +2565,8 @@ const g_shortcutObj = {
2504
2565
  ShiftRight_Numpad6: { id: `lnkmusicInfoR` },
2505
2566
  ShiftLeft_Numpad7: { id: `lnkfilterLineR` },
2506
2567
  ShiftRight_Numpad7: { id: `lnkfilterLineR` },
2507
- ShiftLeft_Numpad8: { id: `lnkspeedR` },
2508
- ShiftRight_Numpad8: { id: `lnkspeedR` },
2568
+ ShiftLeft_Numpad8: { id: `lnkvelocityR` },
2569
+ ShiftRight_Numpad8: { id: `lnkvelocityR` },
2509
2570
  ShiftLeft_Numpad9: { id: `lnkcolorR` },
2510
2571
  ShiftRight_Numpad9: { id: `lnkcolorR` },
2511
2572
  ShiftLeft_Numpad0: { id: `lnklyricsR` },
@@ -2524,7 +2585,7 @@ const g_shortcutObj = {
2524
2585
  Numpad5: { id: `lnkscore` },
2525
2586
  Numpad6: { id: `lnkmusicInfo` },
2526
2587
  Numpad7: { id: `lnkfilterLine` },
2527
- Numpad8: { id: `lnkspeed` },
2588
+ Numpad8: { id: `lnkvelocity` },
2528
2589
  Numpad9: { id: `lnkcolor` },
2529
2590
  Numpad0: { id: `lnklyrics` },
2530
2591
  NumpadAdd: { id: `lnkbackground` },
@@ -4091,7 +4152,7 @@ const g_lblNameObj = {
4091
4152
  d_Score: `Score`,
4092
4153
  d_MusicInfo: `MusicInfo`,
4093
4154
  d_FilterLine: `FilterLine`,
4094
- d_Speed: `Velocity`,
4155
+ d_Velocity: `Velocity`,
4095
4156
  d_Color: `Color`,
4096
4157
  d_Lyrics: `Lyrics`,
4097
4158
  d_Background: `Background`,
@@ -4218,7 +4279,7 @@ const g_lblNameObj = {
4218
4279
  'u_Shakin(Great)': `Shakin(Great)`,
4219
4280
  'u_Fast/Slow': `Fast/Slow`,
4220
4281
 
4221
- 'u_Speed': `Velocity`,
4282
+ 'u_Velocity': `Velocity`,
4222
4283
  'u_Density': `Density`,
4223
4284
  'u_ToolDif': `DifLevel`,
4224
4285
  'u_HighScore': `HighScore`,
@@ -4264,7 +4325,7 @@ const g_lblNameObj = {
4264
4325
  rd_Score: `Score`,
4265
4326
  rd_MusicInfo: `MusicInfo`,
4266
4327
  rd_FilterLine: `Filter`,
4267
- rd_Speed: `Speed`,
4328
+ rd_Velocity: `Velocity`,
4268
4329
  rd_Color: `Color`,
4269
4330
  rd_Lyrics: `Lyrics`,
4270
4331
  rd_Background: `Back`,
@@ -4432,7 +4493,7 @@ const g_lang_msgObj = {
4432
4493
  d_score: `現時点の判定数を表示`,
4433
4494
  d_musicinfo: `音楽情報(時間表示含む)`,
4434
4495
  d_filterline: `Hidden+, Sudden+使用時のフィルターの境界線表示`,
4435
- d_speed: `途中変速、個別加速の有効化設定`,
4496
+ d_velocity: `途中変速、個別加速の有効化設定`,
4436
4497
  d_color: `色変化の有効化設定`,
4437
4498
  d_lyrics: `歌詞表示の有効化設定`,
4438
4499
  d_background: `背景・マスクモーションの有効化設定`,
@@ -4525,7 +4586,7 @@ const g_lang_msgObj = {
4525
4586
  d_score: `Display the current number of judgments`,
4526
4587
  d_musicinfo: `Display the music credits and current time`,
4527
4588
  d_filterline: `Filter border display when using "Hidden+" or "Sudden+"`,
4528
- d_speed: `Enable speed change settings`,
4589
+ d_velocity: `Enable velocity change settings`,
4529
4590
  d_color: `Enable color change settings`,
4530
4591
  d_lyrics: `Enable lyrics display`,
4531
4592
  d_background: `Enable background images and animations`,
@@ -4548,7 +4609,7 @@ const g_lang_msgObj = {
4548
4609
  judgRange: `Set the allowable range of judgment.\n[Normal] Normal judgment, [Narrow/Hard] Hard judgment, [ExHard] Very hard judgment`,
4549
4610
  autoRetry: `Set the conditions for automatic retry.\n[Miss] When missed, [Matari] When good, [Shakin] When great, [FS] When Fast/Slow occurs`,
4550
4611
 
4551
- lnkSpeedG: `Displays the speed change status by progression of the chart.`,
4612
+ lnkSpeedG: `Displays the velocity change status by progression of the chart.`,
4552
4613
  lnkDensityG: `Displays the density status of the chart.`,
4553
4614
  lnkToolDifG: `Displays the difficulty level of the chart and the distribution of arrows and freeze arrows.`,
4554
4615
  lnkHighScoreG: `Displays the high score of the chart.`,
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
  /**
3
3
  * Dancing☆Onigiri 設定用jsファイル
4
- * Template Update: 2025/03/16 (v40.6.0)
4
+ * Template Update: 2026/02/26 (v45.0.0)
5
5
  *
6
6
  * このファイルでは、作品全体に対しての初期設定を行うことができます。
7
7
  * 譜面データ側で個別に同様の項目が設定されている場合は、譜面データ側の設定が優先されます。
@@ -185,7 +185,7 @@ g_presetObj.customDesignUse = {
185
185
  Flat時ステップ間隔:50(px) ※矢印サイズ
186
186
  リモート時のディレクトリ:`` (指定なし。自サーバーの画像を使用する)
187
187
  */
188
- //g_presetObj.imageSets = [``, `classic,png`, `classic-thin,png`, `note,svg,false,0`];
188
+ g_presetObj.imageSets = [``, `classic,png`, `classic-thin,png`, `note,svg,false,0`];
189
189
 
190
190
  /**
191
191
  デフォルト画像セット (C_IMG_XXXX, 厳密にはg_imgObj) に対して拡張子の上書きを行うか設定
@@ -226,6 +226,7 @@ g_presetObj.customDesignUse = {
226
226
  Display設定の場合は `true,OFF`(設定は有効だが初期値はOFF)といったことができる
227
227
  */
228
228
  g_presetObj.settingUse = {
229
+ // speed : `true`,
229
230
  motion: `true`,
230
231
  scroll: `true`,
231
232
  // reverse: `true`,
@@ -242,7 +243,7 @@ g_presetObj.settingUse = {
242
243
  // score: `true`,
243
244
  // musicInfo: `true`,
244
245
  // filterLine: `true`,
245
- // speed: `true`,
246
+ // velocity: `true`,
246
247
  // color: `true`,
247
248
  // lyrics: `true`,
248
249
  // background: `true`,
@@ -403,10 +404,17 @@ g_presetObj.msg = {
403
404
  * 設定名の上書き可否設定
404
405
  */
405
406
  g_presetObj.lblRenames = {
407
+ // title: true,
408
+ // dataMgt: true,
409
+ // precondition: true,
406
410
  option: true,
411
+ difSelector: true,
407
412
  settingsDisplay: true,
408
- main: true,
413
+ exSetting: true,
409
414
  keyConfig: true,
415
+ // loading: true,
416
+ // loadingIos: true,
417
+ main: true,
410
418
  result: true,
411
419
  };
412
420
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "44.5.4",
3
+ "version": "45.0.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "./js/danoni_main.js",
6
6
  "scripts": {