danoniplus 43.4.0 → 43.6.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
@@ -4,12 +4,12 @@
4
4
  *
5
5
  * Source by tickle
6
6
  * Created : 2018/10/08
7
- * Revised : 2026/01/04
7
+ * Revised : 2026/01/23
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 43.4.0`;
12
- const g_revisedDate = `2026/01/04`;
11
+ const g_version = `Ver 43.6.0`;
12
+ const g_revisedDate = `2026/01/23`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -3551,10 +3551,6 @@ const headerConvert = _dosObj => {
3551
3551
  setIntVal(getQueryParamVal(`h`), g_sHeight), g_sHeight);
3552
3552
  $id(`canvas-frame`).height = wUnit(g_sHeight);
3553
3553
  }
3554
- if (!(_dosObj.heightVariable || g_presetObj.heightVariable || false)) {
3555
- obj.heightLockFlg = true;
3556
- g_settings.playWindows = g_settings.playWindows.filter(val => !val.endsWith(`Slope`) && !val.endsWith(`SideScroll`));
3557
- }
3558
3554
 
3559
3555
  // 曲名
3560
3556
  obj.musicTitles = [`musicName`];
@@ -6658,6 +6654,7 @@ const drawSpeedGraph = _scoreId => {
6658
6654
  boost: { frame: [0], speed: [1], cnt: 0, strokeColor: g_graphColorObj.boost }
6659
6655
  };
6660
6656
 
6657
+ const tmpSpeedPoint = [0];
6661
6658
  Object.keys(speedObj).forEach(speedType => {
6662
6659
  const frame = speedObj[speedType].frame;
6663
6660
  const speed = speedObj[speedType].speed;
@@ -6667,22 +6664,28 @@ const drawSpeedGraph = _scoreId => {
6667
6664
  if (speedData[i] >= startFrame) {
6668
6665
  frame.push(speedData[i] - startFrame);
6669
6666
  speed.push(speedData[i + 1]);
6667
+ tmpSpeedPoint.push(speedData[i] - startFrame);
6670
6668
  }
6671
6669
  speedObj[speedType].cnt++;
6672
6670
  }
6673
6671
  frame.push(playingFrame);
6674
6672
  speed.push(speed.at(-1));
6673
+ tmpSpeedPoint.push(playingFrame);
6675
6674
  });
6675
+ const speedPoints = makeDedupliArray(tmpSpeedPoint).sort((a, b) => a - b);
6676
+ let speedPointIdx = 0;
6676
6677
 
6677
6678
  const canvas = document.getElementById(`graphSpeed`);
6678
6679
  const context = canvas.getContext(`2d`);
6679
6680
  const [_a, _b] = [-75, 100];
6680
6681
  const [_min, _max] = [-0.2, 2.2];
6681
- drawBaseLine(context, { _fixed: 1, _mark: `x`, _a, _b, _min, _max });
6682
+ const lineX = [0, 150], lineY = 208;
6682
6683
 
6683
6684
  const avgX = [0, 0];
6684
6685
  const avgSubX = [0, 0];
6685
- const lineX = [0, 150], lineY = 208;
6686
+ context.clearRect(0, 0, canvas.width, canvas.height);
6687
+ drawBaseLine(context, { _fixed: 1, _mark: `x`, _a, _b, _min, _max });
6688
+
6686
6689
  Object.keys(speedObj).forEach((speedType, j) => {
6687
6690
  const frame = speedObj[speedType].frame;
6688
6691
  const speed = speedObj[speedType].speed;
@@ -6699,11 +6702,13 @@ const drawSpeedGraph = _scoreId => {
6699
6702
  context.lineTo(x, y);
6700
6703
  preY = y;
6701
6704
 
6702
- const deltaFrame = frame[i] - (frame[i - 1] ?? startFrame);
6703
- avgX[j] += deltaFrame * (speed[i - 1] ?? 1);
6704
- if ((speed[i - 1] ?? 1) !== 1) {
6705
+ const prevFrame = (i > 0 ? frame[i - 1] : 0); // frame[] は startFrame 相対。初回は 0 起点
6706
+ const deltaFrame = frame[i] - prevFrame;
6707
+ const prevSpeed = (i > 0 ? speed[i - 1] : 1);
6708
+ avgX[j] += deltaFrame * prevSpeed;
6709
+ if (prevSpeed !== 1) {
6705
6710
  avgSubFrame += deltaFrame;
6706
- avgSubX[j] += deltaFrame * (speed[i - 1]);
6711
+ avgSubX[j] += deltaFrame * prevSpeed;
6707
6712
  }
6708
6713
  }
6709
6714
  avgX[j] /= playingFrame;
@@ -6728,6 +6733,91 @@ const drawSpeedGraph = _scoreId => {
6728
6733
  updateScoreDetailLabel(`Speed`, `${speedType}S`, speedObj[speedType].cnt, j, g_lblNameObj[`s_${speedType}`]);
6729
6734
  });
6730
6735
  updateScoreDetailLabel(`Speed`, `avgS`, `${(avgX[0] * avgX[1]).toFixed(2)}x`, 2, g_lblNameObj.s_avg);
6736
+
6737
+ /**
6738
+ * 速度ポインタ位置の変更
6739
+ * @param {number} _num
6740
+ */
6741
+ const changeSpdCursor = (_num = 1) => {
6742
+ speedPointIdx = nextPos(speedPointIdx, _num, speedPoints.length);
6743
+ movePointer(speedPoints[speedPointIdx]);
6744
+ }
6745
+
6746
+ /**
6747
+ * 速度ポインタの移動
6748
+ * @param {number} _frame
6749
+ */
6750
+ const movePointer = _frame => {
6751
+ const canvasP = document.getElementById(`graphSpeed2`);
6752
+ const contextP = canvasP.getContext(`2d`);
6753
+ contextP.clearRect(0, 0, canvas.width, canvas.height);
6754
+
6755
+ const offsetX = _frame * (g_limitObj.graphWidth - 30) / playingFrame + 30;
6756
+ const speed = { speed: 0, boost: 0 };
6757
+
6758
+ Object.keys(speedObj).forEach(speedType => {
6759
+ const speedFrames = speedObj[speedType].frame.concat(Infinity);
6760
+ const speedIndex = speedObj[speedType].frame.findIndex((frame, i) => frame <= _frame && _frame < speedFrames[i + 1]);
6761
+ speed[speedType] = speedObj[speedType].speed[speedIndex];
6762
+ const y = (Math.min(Math.max(speed[speedType], _min - 0.05), _max + 0.05) - 1) * _a + _b;
6763
+
6764
+ contextP.beginPath();
6765
+ contextP.fillStyle = g_graphColorObj[speedType];
6766
+ contextP.arc(offsetX, y, 5, 0, 360);
6767
+ contextP.closePath();
6768
+ contextP.fill();
6769
+ });
6770
+ calculateTotalSpeed(speed.speed, speed.boost, _frame);
6771
+ };
6772
+
6773
+ // 速度計算用ラベルの再作成
6774
+ deleteDiv(detailSpeed, `lblSpdHeader`);
6775
+ deleteDiv(detailSpeed, `lblSpdBase`);
6776
+ deleteDiv(detailSpeed, `lblSpdOverall`);
6777
+ deleteDiv(detailSpeed, `lblSpdBoost`);
6778
+ deleteDiv(detailSpeed, `lblSpdTotal`);
6779
+ deleteDiv(detailSpeed, `lblSpdFrame`);
6780
+ deleteDiv(detailSpeed, `btnSpdCursorL`);
6781
+ deleteDiv(detailSpeed, `btnSpdCursorR`);
6782
+
6783
+ multiAppend(detailSpeed,
6784
+ createDivCss2Label(`lblSpdHeader`, `TotalSpeed`, g_lblPosObj.lblSpdHeader),
6785
+ createDivCss2Label(`lblSpdBase`, ``, g_lblPosObj.lblSpdBase),
6786
+ createDivCss2Label(`lblSpdOverall`, ``, g_lblPosObj.lblSpdOverall),
6787
+ createDivCss2Label(`lblSpdBoost`, ``, g_lblPosObj.lblSpdBoost),
6788
+ createDivCss2Label(`lblSpdTotal`, ``, g_lblPosObj.lblSpdTotal),
6789
+ createDivCss2Label(`lblSpdFrame`, ``, g_lblPosObj.lblSpdFrame),
6790
+ createCss2Button(`btnSpdCursorL`, `<`, () => changeSpdCursor(-1),
6791
+ g_lblPosObj.btnSpdCursorL, g_cssObj.button_Mini),
6792
+ createCss2Button(`btnSpdCursorR`, `>`, () => changeSpdCursor(),
6793
+ g_lblPosObj.btnSpdCursorR, g_cssObj.button_Mini),
6794
+ );
6795
+ movePointer(0);
6796
+ };
6797
+
6798
+ /**
6799
+ * 合計速度の表示更新
6800
+ * @param {number} _speed
6801
+ * @param {number} _boost
6802
+ * @param {number} _frame
6803
+ */
6804
+ const calculateTotalSpeed = (_speed = null, _boost = null, _frame = 0) => {
6805
+ if (document.getElementById(`lblSpdOverall`) === null) {
6806
+ return;
6807
+ }
6808
+ let speed, boost;
6809
+ if (_speed !== null && _boost !== null) {
6810
+ speed = _speed;
6811
+ boost = _boost;
6812
+ lblSpdOverall.textContent = `x${_speed.toFixed(2)}`;
6813
+ lblSpdBoost.textContent = `x${_boost.toFixed(2)}`;
6814
+ } else {
6815
+ speed = Number(lblSpdOverall.textContent.slice(1));
6816
+ boost = Number(lblSpdBoost.textContent.slice(1));
6817
+ }
6818
+ lblSpdBase.textContent = `${g_stateObj.speed.toFixed(2)}`;
6819
+ lblSpdTotal.textContent = `=${(g_stateObj.speed * speed * boost).toFixed(2)}`;
6820
+ lblSpdFrame.textContent = `[${transFrameToTimer(_frame + g_detailObj.startFrame[g_stateObj.scoreId])}]`;
6731
6821
  };
6732
6822
 
6733
6823
  /**
@@ -7357,7 +7447,7 @@ const createOptionWindow = _sprite => {
7357
7447
  // 縦位置: 2 短縮ショートカットあり
7358
7448
  createGeneralSetting(spriteList.speed, `speed`, {
7359
7449
  skipTerms: g_settings.speedTerms, hiddenBtn: true, scLabel: g_lblNameObj.sc_speed, roundNum: 5,
7360
- unitName: ` ${g_lblNameObj.multi}`,
7450
+ unitName: ` ${g_lblNameObj.multi}`, addRFunc: () => calculateTotalSpeed(),
7361
7451
  });
7362
7452
  if (g_headerObj.baseSpeed !== 1) {
7363
7453
  divRoot.appendChild(
@@ -7371,24 +7461,26 @@ const createOptionWindow = _sprite => {
7371
7461
  * @param {boolean} _graphUseFlg
7372
7462
  * @returns {HTMLDivElement}
7373
7463
  */
7374
- const createScoreDetail = (_name, _graphUseFlg = true) => {
7464
+ const createScoreDetail = (_name, _graphUseFlg = true, _graphNum = 1) => {
7375
7465
  const detailObj = createEmptySprite(scoreDetail, `detail${_name}`, g_windowObj.detailObj);
7376
7466
 
7377
7467
  if (_graphUseFlg) {
7378
- const graphObj = document.createElement(`canvas`);
7379
- const textBaseObj = document.getElementById(`lnkDifficulty`);
7380
- const bkColor = window.getComputedStyle(textBaseObj, ``).backgroundColor;
7468
+ for (let j = 0; j < _graphNum; j++) {
7469
+ const graphObj = document.createElement(`canvas`);
7470
+ const textBaseObj = document.getElementById(`lnkDifficulty`);
7471
+ const bkColor = window.getComputedStyle(textBaseObj, ``).backgroundColor;
7381
7472
 
7382
- graphObj.id = `graph${_name}`;
7383
- graphObj.width = g_limitObj.graphWidth;
7384
- graphObj.height = g_limitObj.graphHeight;
7385
- graphObj.style.left = wUnit(125);
7386
- graphObj.style.top = wUnit(0);
7387
- graphObj.style.position = `absolute`;
7388
- graphObj.style.background = bkColor;
7389
- graphObj.style.border = `dotted ${wUnit(2)}`;
7473
+ graphObj.id = `graph${_name}${j > 0 ? j + 1 : ``}`;
7474
+ graphObj.width = g_limitObj.graphWidth;
7475
+ graphObj.height = g_limitObj.graphHeight;
7476
+ graphObj.style.left = wUnit(125);
7477
+ graphObj.style.top = wUnit(0);
7478
+ graphObj.style.position = `absolute`;
7479
+ graphObj.style.background = j === 0 ? bkColor : `#ffffff00`;
7480
+ graphObj.style.border = `dotted ${wUnit(2)}`;
7390
7481
 
7391
- detailObj.appendChild(graphObj);
7482
+ detailObj.appendChild(graphObj);
7483
+ }
7392
7484
  }
7393
7485
 
7394
7486
  return detailObj;
@@ -7432,7 +7524,7 @@ const createOptionWindow = _sprite => {
7432
7524
  };
7433
7525
 
7434
7526
  multiAppend(scoreDetail,
7435
- createScoreDetail(`Speed`),
7527
+ createScoreDetail(`Speed`, true, 2),
7436
7528
  createScoreDetail(`Density`),
7437
7529
  createScoreDetail(`ToolDif`, false),
7438
7530
  createScoreDetail(`HighScore`, false),
@@ -8408,8 +8500,6 @@ const exSettingInit = () => {
8408
8500
  const spriteList = setSpriteList(g_settingPos.exSetting);
8409
8501
 
8410
8502
  createGeneralSetting(spriteList.playWindow, `playWindow`);
8411
- lblPlayWindow.title += g_headerObj.heightLockFlg ? g_msgObj.sideScrollDisable : g_msgObj.sideScrollMsg;
8412
-
8413
8503
  createGeneralSetting(spriteList.stepArea, `stepArea`);
8414
8504
  createGeneralSetting(spriteList.frzReturn, `frzReturn`);
8415
8505
  createGeneralSetting(spriteList.shaking, `shaking`);
@@ -11337,6 +11427,7 @@ const getArrowSettings = () => {
11337
11427
  g_workObj.scrollDir = [];
11338
11428
  g_workObj.scrollDirDefault = [];
11339
11429
  g_workObj.dividePos = [];
11430
+ g_workObj.scale = g_keyObj.scale;
11340
11431
  g_workObj.stepRtn = structuredClone(g_keyObj[`stepRtn${keyCtrlPtn}`]);
11341
11432
  g_workObj.stepHitRtn = structuredClone(g_keyObj[`stepRtn${keyCtrlPtn}`]);
11342
11433
  g_workObj.arrowRtn = structuredClone(g_keyObj[`stepRtn${keyCtrlPtn}`]);
@@ -11344,6 +11435,34 @@ const getArrowSettings = () => {
11344
11435
  g_workObj.diffList = [];
11345
11436
  g_workObj.mainEndTime = 0;
11346
11437
 
11438
+ const rotateBy = (val, delta) => {
11439
+ // numeric
11440
+ const n = Number(val);
11441
+ if (Number.isFinite(n)) return n + delta;
11442
+
11443
+ // "type:deg"
11444
+ const [type, degStr = `0`] = String(val).split(`:`);
11445
+ const deg = Number(degStr);
11446
+ return Number.isFinite(deg) ? `${type}:${deg + delta}` : val;
11447
+ };
11448
+ const changeStepRtn = (_name, _angle) =>
11449
+ g_workObj[_name] = g_workObj[_name].map(v => rotateBy(v, _angle));
11450
+
11451
+ if (g_stateObj.playWindow.endsWith(`SideScroll`)) {
11452
+ if (g_stateObj.rotateEnabled) {
11453
+ const sign = g_stateObj.playWindow === `SideScroll` ? 1 : -1;
11454
+ changeStepRtn(`stepRtn`, 90 * sign);
11455
+ changeStepRtn(`stepHitRtn`, 90 * sign);
11456
+ changeStepRtn(`arrowRtn`, 90 * sign);
11457
+ }
11458
+ const div = g_keyObj[`div${keyCtrlPtn}`];
11459
+ const divMax = g_keyObj[`divMax${keyCtrlPtn}`] ?? posMax;
11460
+ const denom = (Math.max(div, divMax - div) + 1) * g_keyObj.blank;
11461
+ if (Number.isFinite(denom) && denom > 0) {
11462
+ g_workObj.scale *= Math.min(g_sHeight / denom, 1);
11463
+ }
11464
+ }
11465
+
11347
11466
  g_workObj.keyGroupMaps = tkObj.keyGroupMaps;
11348
11467
  g_workObj.keyGroupList = tkObj.keyGroupList;
11349
11468
 
@@ -11733,7 +11852,7 @@ const mainInit = () => {
11733
11852
 
11734
11853
  // ステップゾーン、矢印のメインスプライトを作成
11735
11854
  const mainSprite = createEmptySprite(divRoot, `mainSprite`, mainCommonPos);
11736
- addTransform(`mainSprite`, `root`, `scale(${g_keyObj.scale})`);
11855
+ addTransform(`mainSprite`, `root`, `scale(${g_workObj.scale})`);
11737
11856
  addXY(`mainSprite`, `root`, g_workObj.playingX, g_posObj.stepY - C_STEP_Y + g_headerObj.playingY);
11738
11857
 
11739
11858
  // 曲情報・判定カウント用スプライトを作成(メインスプライトより上位)
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2026/01/04 (v43.4.0)
8
+ * Revised : 2026/01/23 (v43.6.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -165,6 +165,10 @@ $id(`canvas-frame`).margin = C_DIS_AUTO;
165
165
 
166
166
  const g_btnWidth = (_multi = 1) => Math.min(g_sWidth, g_limitObj.btnBaseWidth) * _multi;
167
167
  const g_btnX = (_multi = 0) => g_btnWidth(_multi) + Math.max((g_sWidth - g_limitObj.btnBaseWidth) / 2, 0);
168
+ const g_slopeAngle = () => (Math.atan2(
169
+ g_sHeight,
170
+ g_keyObj[`minWidth${g_headerObj.keyLabels[g_stateObj.scoreId]}`] || g_keyObj.minWidthDefault
171
+ ) * 180) / Math.PI * 2 - 40;
168
172
 
169
173
  // 固定ウィンドウサイズ
170
174
  const g_windowObj = {
@@ -436,6 +440,33 @@ const updateWindowSiz = () => {
436
440
  lblHRank: {
437
441
  x: 290, y: 145, w: 120, h: 20, siz: 50, align: C_ALIGN_CENTER,
438
442
  },
443
+ lblSpdHeader: {
444
+ x: 5, y: 180, w: 100, h: 20, siz: g_limitObj.difSelectorSiz, align: C_ALIGN_LEFT,
445
+ },
446
+ lblSpdBase: {
447
+ x: 0, y: 200, w: 40, h: 20, siz: 11.5, fontWeight: `bold`,
448
+ },
449
+ lblSpdOverall: {
450
+ x: 40, y: 200, w: 40, h: 20, siz: 11.5,
451
+ color: g_graphColorObj.speedChara, fontWeight: `bold`,
452
+ },
453
+ lblSpdBoost: {
454
+ x: 80, y: 200, w: 40, h: 20, siz: 11.5,
455
+ color: g_graphColorObj.boostChara, fontWeight: `bold`,
456
+ },
457
+ lblSpdTotal: {
458
+ x: 5, y: 215, w: 100, h: 20, siz: g_limitObj.difSelectorSiz,
459
+ align: C_ALIGN_LEFT, fontWeight: `bold`,
460
+ },
461
+ lblSpdFrame: {
462
+ x: 70, y: 218, w: 50, h: 20, siz: 12, fontWeight: `bold`,
463
+ },
464
+ btnSpdCursorL: {
465
+ x: 85, y: 180, w: 15, h: 20, siz: 12,
466
+ },
467
+ btnSpdCursorR: {
468
+ x: 100, y: 180, w: 15, h: 20, siz: 12,
469
+ },
439
470
 
440
471
  /** ディスプレイ画面 */
441
472
  scMsg: {
@@ -906,7 +937,9 @@ const g_graphColorObj = {
906
937
  default3Push: `#555555cc`,
907
938
 
908
939
  speed: `#cc3333`,
940
+ speedChara: `#cc6666`,
909
941
  boost: `#999900`,
942
+ boostChara: `#999966`,
910
943
 
911
944
  clear: `#33cc33`,
912
945
  failed: `#cc3333`,
@@ -1543,8 +1576,8 @@ const g_playWindowFunc = new Map([
1543
1576
  ['Default', () => ``],
1544
1577
  ['Stairs', () => g_changeStairs(-8)],
1545
1578
  ['R-Stairs', () => g_changeStairs(8)],
1546
- ['Slope', () => g_changeStairs(-45)],
1547
- ['R-Slope', () => g_changeStairs(45)],
1579
+ ['Slope', () => g_changeStairs(-g_slopeAngle())],
1580
+ ['R-Slope', () => g_changeStairs(g_slopeAngle())],
1548
1581
  ['Distorted', () => g_changeSkew(-15)],
1549
1582
  ['R-Distorted', () => g_changeSkew(15)],
1550
1583
  ['SideScroll', () => g_changeStairs(-90)],
@@ -2289,6 +2322,8 @@ const g_shortcutObj = {
2289
2322
  ControlLeft_KeyC: { id: `` },
2290
2323
  ControlRight_KeyC: { id: `` },
2291
2324
  KeyC: { id: `lnkHighScore`, reset: true },
2325
+ Comma: { id: `btnSpdCursorL` },
2326
+ Period: { id: `btnSpdCursorR` },
2292
2327
 
2293
2328
  Escape: { id: `btnBack` },
2294
2329
  Space: { id: `btnKeyConfig` },
@@ -4288,9 +4323,8 @@ const g_lang_msgObj = {
4288
4323
  d_arroweffect: `矢印・フリーズアローモーションの有効化設定`,
4289
4324
  d_special: `作品固有の特殊演出の有効化設定`,
4290
4325
 
4291
- playWindow: `ステップゾーン及び矢印の位置を全体的に回転する等の設定です。\n[Stairs/Slope] ステップゾーンを階段状にします\n[Distorted] 画面を歪ませます`,
4292
- sideScrollMsg: `\n[SideScroll] 横スクロールモードになります\n\nSlope, SideScrollを設定する場合は高さが足りているかを確認してください\nクエリパラメータ ?h=600 などで設定できます`,
4293
- sideScrollDisable: `\n\nウィンドウの高さの自動拡張が無効のため、Slope, SideScrollは使用できません`,
4326
+ playWindow: `ステップゾーン及び矢印の位置を全体的に回転する等の設定です。\n[Stairs/Slope] ステップゾーンを階段状にします\n[Distorted] 画面を歪ませます\n` +
4327
+ `[SideScroll] 横スクロールモードになります`,
4294
4328
  stepArea: `ステップゾーンの位置を変更します。\n[Halfway] ステップゾーンが中央に表示されます\n[2Step] ステップゾーンが2段に分かれて流れてきます\n` +
4295
4329
  `[Mismatched/R-Mismatched] スクロールの向きが上下で異なる方向に流れます\n` +
4296
4330
  `[X-Flower] レーンが花びらのように広がります\n[Alt-Crossing] レーンが交互に違う方向から流れます`,
@@ -4382,9 +4416,8 @@ const g_lang_msgObj = {
4382
4416
  d_arroweffect: `Enable sequences' animations`,
4383
4417
  d_special: `Enable setting of special effects to the work`,
4384
4418
 
4385
- playWindow: `This is the setting for overall rotation of the step zone and arrow position, etc.\n[Stairs/Slope] The step zone is in a staircase shape.\n[Distorted] Distorts the screen.`,
4386
- sideScrollMsg: `\n[SideScroll] It becomes a side scroll mode.\n\nWhen setting Slope or SideScroll, please make sure that the height is\nsufficient. Can be set with query parameter ?h=600, etc.`,
4387
- sideScrollDisable: `\n\nSlope, SideScroll cannot be used because \nautomatic window height expansion is disabled.`,
4419
+ playWindow: `This is the setting for overall rotation of the step zone and arrow position, etc.\n[Stairs/Slope] The step zone is in a staircase shape.\n[Distorted] Distorts the screen.\n` +
4420
+ `[SideScroll] It becomes a side scroll mode.`,
4388
4421
  stepArea: `Change the position of the step zone.\n[Halfway] Step zones are centered.\n[2Step] Step zones are divided into two layers.\n` +
4389
4422
  `[Mismatched/R-Mismatched] Scroll direction flows in different directions up and down.\n` +
4390
4423
  `[X-Flower] Lanes spread out like flower petals.\n[Alt-Crossing] Lanes flow from different directions alternately.`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "43.4.0",
3
+ "version": "43.6.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "./js/danoni_main.js",
6
6
  "scripts": {