danoniplus 45.2.1 → 45.3.1

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/02/28
7
+ * Revised : 2026/03/02
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 45.2.1`;
12
- const g_revisedDate = `2026/02/28`;
11
+ const g_version = `Ver 45.3.1`;
12
+ const g_revisedDate = `2026/03/02`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -2786,7 +2786,10 @@ const initialControl = async () => {
2786
2786
  titleInit(true);
2787
2787
 
2788
2788
  // 未使用のg_keyObjプロパティを削除
2789
- const keyProp = g_keyCopyLists.simple.concat(g_keyCopyLists.multiple, `keyCtrl`, `keyName`, `minWidth`, `ptchara`);
2789
+ const keyProp = g_keyCopyLists.simple.concat(
2790
+ g_keyCopyLists.multiple,
2791
+ `keyCtrl`, `keyName`, `minWidth`, `movLock`, `initManual`, `ptchara`
2792
+ );
2790
2793
  const delKeyPropList = [`ptchara7`, `dfPtnNum`, `minKeyCtrlNum`, `minPatterns`];
2791
2794
  Object.keys(g_keyObj).forEach(key => {
2792
2795
  const type = keyProp.find(prop => key.startsWith(prop)) || ``;
@@ -10491,8 +10494,10 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
10491
10494
  const arrowNum = parseFloat(tmpcssMotionData[1]);
10492
10495
  const styleUp = (tmpcssMotionData[2] === `none` ? `` : tmpcssMotionData[2]);
10493
10496
  const styleDown = (tmpcssMotionData[3] === `none` ? `` : setVal(tmpcssMotionData[3], styleUp));
10497
+ const movLock = setBoolVal(tmpcssMotionData[4] === `movLock`, false);
10498
+ const initManual = setBoolVal(tmpcssMotionData[5] === `initManual`, false);
10494
10499
 
10495
- cssMotionData.push([frame, arrowNum, styleUp, styleDown]);
10500
+ cssMotionData.push([frame, arrowNum, styleUp, styleDown, movLock, initManual]);
10496
10501
  });
10497
10502
 
10498
10503
  // 個別のモーションデータが存在する場合、Effect設定を自動リセット
@@ -11220,13 +11225,13 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
11220
11225
  * @param {string} _type
11221
11226
  * @param {string} _header
11222
11227
  * @param {function} _setFunc 後続実行関数
11223
- * @param {number} object._term 1セット当たりのデータ数
11228
+ * @param {number} object._term 1セット当たりのデータ数(デフォルトは後続実行関数の引数の数-1, デフォルト引数・オブジェクト引数除く)
11224
11229
  * @param {boolean} object._colorFlg 個別色変化フラグ
11225
11230
  * @param {boolean} object._calcFrameFlg 逆算を無条件で行うかどうかの可否
11226
11231
  * @param {string} object._propName 色変化種類 (Arrow, ArrowShadow, FrzNormal, FrzNormalBar, ...)
11227
11232
  */
11228
11233
  const calcDataTiming = (_type, _header, _setFunc = () => true,
11229
- { _term = 4, _colorFlg = false, _calcFrameFlg = false, _propName = `` } = {}) => {
11234
+ { _term = _setFunc.length - 1, _colorFlg = false, _calcFrameFlg = false, _propName = `` } = {}) => {
11230
11235
 
11231
11236
  const camelHeader = _header === `` ? _type : `${_header}${toCapitalize(_type)}`;
11232
11237
  const baseData = hasVal(_propName) ? _dataObj[`${camelHeader}Data`][_propName] : _dataObj[`${camelHeader}Data`];
@@ -11327,7 +11332,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
11327
11332
 
11328
11333
  // 個別・全体色変化、モーションデータ・スクロール反転データのタイミング更新
11329
11334
  [``, `dummy`].forEach(type => {
11330
- calcDataTiming(`color`, type, pushColors, { _colorFlg: true });
11335
+ calcDataTiming(`color`, type, pushColors, { _term: 4, _colorFlg: true });
11331
11336
  if (_dataObj[`ncolor${type}Data`] !== undefined) {
11332
11337
  Object.keys(_dataObj[`ncolor${type}Data`]).forEach(pattern =>
11333
11338
  calcDataTiming(`ncolor`, type, pushColors, { _term: 5, _colorFlg: true, _propName: pattern }));
@@ -11337,7 +11342,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
11337
11342
  g_typeLists.arrow.forEach(header =>
11338
11343
  calcDataTiming(`cssMotion`, header, pushCssMotions, { _calcFrameFlg: true }));
11339
11344
 
11340
- calcDataTiming(`scrollch`, ``, pushScrollchs, { _term: 6, _calcFrameFlg: true });
11345
+ calcDataTiming(`scrollch`, ``, pushScrollchs, { _calcFrameFlg: true });
11341
11346
 
11342
11347
  g_fadeinStockList.forEach(type =>
11343
11348
  _dataObj[`${type}Data`] = calcAnimationData(type, _dataObj[`${type}Data`]));
@@ -11567,8 +11572,10 @@ const pushColors = (_header, _frame, _val, _colorCd, _allFlg, _pattern = ``) =>
11567
11572
  * @param {number} _val
11568
11573
  * @param {string} _styleName
11569
11574
  * @param {string} _styleNameRev
11575
+ * @param {boolean|undefined} _movLock
11576
+ * @param {boolean|undefined} _initManual
11570
11577
  */
11571
- const pushCssMotions = (_header, _frame, _val, _styleName, _styleNameRev) => {
11578
+ const pushCssMotions = (_header, _frame, _val, _styleName, _styleNameRev, _movLock, _initManual) => {
11572
11579
 
11573
11580
  const camelHeader = toCapitalize(_header);
11574
11581
  const tkObj = getKeyInfo();
@@ -11577,11 +11584,15 @@ const pushCssMotions = (_header, _frame, _val, _styleName, _styleNameRev) => {
11577
11584
  if (g_workObj[`mk${camelHeader}CssMotion`][_frame] === undefined) {
11578
11585
  g_workObj[`mk${camelHeader}CssMotion`][_frame] = [];
11579
11586
  g_workObj[`mk${camelHeader}CssMotionName`][_frame] = [];
11587
+ g_workObj[`mk${camelHeader}MovLock`][_frame] = [];
11588
+ g_workObj[`mk${camelHeader}InitManual`][_frame] = [];
11580
11589
  }
11581
11590
  if (_val < 20 || _val >= 1000) {
11582
11591
  const realVal = g_workObj.replaceNums[_val % 1000];
11583
11592
  g_workObj[`mk${camelHeader}CssMotion`][_frame].push(realVal);
11584
11593
  g_workObj[`mk${camelHeader}CssMotionName`][_frame].push(_styleName, _styleNameRev);
11594
+ g_workObj[`mk${camelHeader}MovLock`][_frame].push(_movLock);
11595
+ g_workObj[`mk${camelHeader}InitManual`][_frame].push(_initManual);
11585
11596
 
11586
11597
  } else {
11587
11598
  const colorNum = _val - 20;
@@ -11589,6 +11600,8 @@ const pushCssMotions = (_header, _frame, _val, _styleName, _styleNameRev) => {
11589
11600
  if (g_keyObj[`color${tkObj.keyCtrlPtn}`][j] === colorNum) {
11590
11601
  g_workObj[`mk${camelHeader}CssMotion`][_frame].push(j);
11591
11602
  g_workObj[`mk${camelHeader}CssMotionName`][_frame].push(_styleName, _styleNameRev);
11603
+ g_workObj[`mk${camelHeader}MovLock`][_frame].push(_movLock);
11604
+ g_workObj[`mk${camelHeader}InitManual`][_frame].push(_initManual);
11592
11605
  }
11593
11606
  }
11594
11607
  }
@@ -11723,7 +11736,11 @@ const getArrowSettings = () => {
11723
11736
  });
11724
11737
 
11725
11738
  // モーション管理
11726
- g_typeLists.arrow.forEach(type => g_workObj[`${type}CssMotions`] = fillArray(keyNum, ``));
11739
+ g_typeLists.arrow.forEach(type => {
11740
+ g_workObj[`${type}CssMotions`] = fillArray(keyNum, ``);
11741
+ g_workObj[`${type}MovLock`] = fillArray(keyNum, ``);
11742
+ g_workObj[`${type}InitManual`] = fillArray(keyNum, ``);
11743
+ });
11727
11744
  g_workObj.frzArrowCssMotions = fillArray(keyNum, ``);
11728
11745
  g_workObj.dummyFrzArrowCssMotions = fillArray(keyNum, ``);
11729
11746
 
@@ -11960,12 +11977,10 @@ const getArrowSettings = () => {
11960
11977
  // AppearanceFilterの可視範囲設定
11961
11978
  g_workObj.aprFilterCnt = 0;
11962
11979
 
11963
- // 位置をマニュアルで設定する際は矢印の初期位置をゼロにする
11964
- if (g_keyObj[`initManual${g_keyObj.currentKey}`] !== undefined && g_keyObj[`initManual${g_keyObj.currentKey}`]) {
11965
- g_workObj.stepX = fillArray(g_workObj.stepX.length, 0);
11966
- }
11967
- g_workObj.movLockEnabled = g_keyObj[`movLock${g_keyObj.currentKey}`] === true ? `movLock` : `default`;
11968
- g_workObj.initManualEnabled = g_keyObj[`initManual${g_keyObj.currentKey}`] === true ? `manual` : `auto`;
11980
+ // キー別の移動ロック制御、初期位置のマニュアル可否設定の初期値
11981
+ // 矢印・フリーズアローモーションよりも優先される
11982
+ g_workObj.movLockEnabled = g_keyObj[`movLock${g_keyObj.currentKey}`] === true;
11983
+ g_workObj.initManualEnabled = g_keyObj[`initManual${g_keyObj.currentKey}`] === true;
11969
11984
 
11970
11985
  if (g_stateObj.dataSaveFlg) {
11971
11986
  // ローカルストレージへAdjustment, HitPosition, Volume設定を保存
@@ -12899,7 +12914,7 @@ const mainInit = () => {
12899
12914
  _attrs.initBoostY * g_workObj.boostDir) * g_workObj.scrollDir[_j];
12900
12915
 
12901
12916
  const arrowRoot = createEmptySprite(arrowSprite[g_workObj.dividePos[_j]], arrowName, {
12902
- x: g_workObj.stepX[_j], y: 0, w: C_ARW_WIDTH, h: C_ARW_WIDTH,
12917
+ x: 0, y: 0, w: C_ARW_WIDTH, h: C_ARW_WIDTH,
12903
12918
  });
12904
12919
  /**
12905
12920
  * 矢印毎の属性情報
@@ -12921,8 +12936,9 @@ const mainInit = () => {
12921
12936
  prevY: firstPosY,
12922
12937
  // 現フレーム時の位置
12923
12938
  y: firstPosY,
12939
+ // 移動ロックフラグ(矢印モーション設定後に再設定)
12940
+ movLockFlg: false,
12924
12941
  };
12925
- setArrowY.get(`${g_workObj.movLockEnabled}_${g_workObj.initManualEnabled}`)(arrowName, firstPosY, stepY);
12926
12942
 
12927
12943
  // 矢印色の設定
12928
12944
  // - 枠/塗りつぶし色: g_attrObj[arrowName].Arrow / ArrowShadow
@@ -12934,6 +12950,13 @@ const mainInit = () => {
12934
12950
  arrowSubRoot.classList.add(g_workObj[`${_name}CssMotions`][_j]);
12935
12951
  arrowSubRoot.style.animationDuration = `${_attrs.arrivalFrame / g_fps}s`;
12936
12952
  }
12953
+ g_attrObj[arrowName].movLockFlg = g_workObj[`${_name}MovLock`][_j] || g_workObj.movLockEnabled;
12954
+ const initManualFlg = g_workObj[`${_name}InitManual`][_j] || g_workObj.initManualEnabled;
12955
+ const setArrowYCondition = `${String(g_attrObj[arrowName].movLockFlg)}_${String(initManualFlg)}`;
12956
+ setArrowY.get(setArrowYCondition)(arrowName, firstPosY, stepY);
12957
+ if (!initManualFlg) {
12958
+ addTransform(arrowName, `rootX`, `translateX(${g_workObj.stepX[_j]}px)`);
12959
+ }
12937
12960
 
12938
12961
  /**
12939
12962
  * 矢印オブジェクトの生成
@@ -12978,7 +13001,7 @@ const mainInit = () => {
12978
13001
  currentArrow.prevY = currentArrow.y;
12979
13002
  currentArrow.y -= (g_workObj.currentSpeed * currentArrow.boostSpd +
12980
13003
  (g_workObj.motionOnFrames[boostCnt] || 0) * currentArrow.boostDir) * currentArrow.dir;
12981
- movArrowY.get(g_workObj.movLockEnabled)(arrowName, currentArrow.y);
13004
+ movArrowY.get(currentArrow.movLockFlg)(arrowName, currentArrow.y);
12982
13005
  g_motionAlphaFunc.get(g_stateObj.motion)(arrowName, currentArrow);
12983
13006
  currentArrow.boostCnt--;
12984
13007
  }
@@ -13008,7 +13031,7 @@ const mainInit = () => {
13008
13031
  const firstBarLength = g_workObj[`mk${toCapitalize(_name)}Length`][_j][(_arrowCnt - 1) * 2] * g_workObj.boostSpd;
13009
13032
 
13010
13033
  const frzRoot = createEmptySprite(arrowSprite[g_workObj.dividePos[_j]], frzName, {
13011
- x: g_workObj.stepX[_j], y: 0, w: C_ARW_WIDTH, h: C_ARW_WIDTH + firstBarLength,
13034
+ x: 0, y: 0, w: C_ARW_WIDTH, h: C_ARW_WIDTH + firstBarLength,
13012
13035
  });
13013
13036
  /**
13014
13037
  * フリーズアロー毎の属性情報
@@ -13040,8 +13063,9 @@ const mainInit = () => {
13040
13063
  barY: C_ARW_WIDTH / 2 - firstBarLength * dividePos,
13041
13064
  // フリーズアロー(対矢印)の相対位置
13042
13065
  btmY: firstBarLength * g_workObj.scrollDir[_j],
13066
+ // 移動ロックフラグ(矢印モーション設定後に再設定)
13067
+ movLockFlg: false,
13043
13068
  };
13044
- setArrowY.get(`${g_workObj.movLockEnabled}_${g_workObj.initManualEnabled}`)(frzName, firstPosY, stepY);
13045
13069
 
13046
13070
  // フリーズアロー色の設定
13047
13071
  // - 通常時 (矢印枠/矢印塗りつぶし/帯): g_attrObj[frzName].Normal / NormalShadow / NormalBar
@@ -13110,6 +13134,14 @@ const mainInit = () => {
13110
13134
  obj.style.animationDuration = `${_attrs.arrivalFrame / g_fps}s`;
13111
13135
  });
13112
13136
  }
13137
+ g_attrObj[frzName].movLockFlg = g_workObj[`${_name}MovLock`][_j] || g_workObj.movLockEnabled;
13138
+ const initManualFlg = g_workObj[`${_name}InitManual`][_j] || g_workObj.initManualEnabled;
13139
+ const setArrowYCondition = `${String(g_attrObj[frzName].movLockFlg)}_${String(initManualFlg)}`;
13140
+ setArrowY.get(setArrowYCondition)(frzName, firstPosY, stepY);
13141
+ if (!initManualFlg) {
13142
+ addTransform(frzName, `rootX`, `translateX(${g_workObj.stepX[_j]}px)`);
13143
+ }
13144
+
13113
13145
  g_customJsObj.makeFrzArrow.forEach(func => func(_attrs, frzName, _name, _arrowCnt));
13114
13146
  };
13115
13147
 
@@ -13135,7 +13167,7 @@ const mainInit = () => {
13135
13167
  if (g_workObj.currentSpeed !== 0) {
13136
13168
  currentFrz.prevY = currentFrz.y;
13137
13169
  currentFrz.y -= movY + (g_workObj.motionOnFrames[currentFrz.boostCnt] || 0) * currentFrz.dir * currentFrz.boostDir;
13138
- movArrowY.get(g_workObj.movLockEnabled)(frzName, currentFrz.y);
13170
+ movArrowY.get(currentFrz.movLockFlg)(frzName, currentFrz.y);
13139
13171
  g_motionAlphaFunc.get(g_stateObj.motion)(frzName, currentFrz);
13140
13172
  currentFrz.boostCnt--;
13141
13173
  }
@@ -13175,7 +13207,7 @@ const mainInit = () => {
13175
13207
  currentFrz.frzBarLength -= movY * currentFrz.dir;
13176
13208
  if (currentFrz.frzBarLength > 0) {
13177
13209
  currentFrz.y -= movY;
13178
- movArrowY.get(g_workObj.movLockEnabled)(frzName, currentFrz.y);
13210
+ movArrowY.get(currentFrz.movLockFlg)(frzName, currentFrz.y);
13179
13211
  } else {
13180
13212
  judgeObjDelete[_name](_j, frzName);
13181
13213
  }
@@ -13442,24 +13474,24 @@ const mainInit = () => {
13442
13474
 
13443
13475
  /**
13444
13476
  * 矢印・フリーズアローの初期位置
13445
- * - movLock_manual: スクロールなし/初期位置マニュアル
13446
- * - movLock_auto: スクロールなし/初期位置自動
13447
- * - default_manual: スクロールあり/初期位置マニュアル(設定上ありえないがdefault_autoと同じにしておく)
13448
- * - default_auto: スクロールあり/初期位置自動
13477
+ * - true_true: スクロールなし/初期位置マニュアル
13478
+ * - true_false: スクロールなし/初期位置自動
13479
+ * - false_true: スクロールあり/初期位置マニュアル
13480
+ * - false_false: スクロールあり/初期位置自動
13449
13481
  */
13450
13482
  const setArrowY = new Map([
13451
- [`movLock_manual`, (_name, _startY, _stepY) => { }],
13452
- [`movLock_auto`, (_name, _startY, _stepY) => addTransform(_name, `root`, `translateY(${wUnit(_stepY)})`)],
13453
- [`default_manual`, (_name, _startY, _stepY) => addTransform(_name, `root`, `translateY(${wUnit(_startY)})`)],
13454
- [`default_auto`, (_name, _startY, _stepY) => addTransform(_name, `root`, `translateY(${wUnit(_startY)})`)],
13483
+ [`true_true`, (_name, _startY, _stepY) => { }],
13484
+ [`true_false`, (_name, _startY, _stepY) => addTransform(_name, `root`, `translateY(${wUnit(_stepY)})`)],
13485
+ [`false_true`, (_name, _startY, _stepY) => addTransform(_name, `root`, `translateY(${wUnit(_startY)})`)],
13486
+ [`false_false`, (_name, _startY, _stepY) => addTransform(_name, `root`, `translateY(${wUnit(_startY)})`)],
13455
13487
  ]);
13456
13488
 
13457
13489
  /**
13458
13490
  * 矢印・フリーズアローの移動処理
13459
13491
  */
13460
13492
  const movArrowY = new Map([
13461
- [`movLock`, (_name, _y) => { }],
13462
- [`default`, (_name, _y) => addTransform(_name, `root`, `translateY(${wUnit(_y)})`)],
13493
+ [true, (_name, _y) => { }],
13494
+ [false, (_name, _y) => addTransform(_name, `root`, `translateY(${wUnit(_y)})`)],
13463
13495
  ]);
13464
13496
 
13465
13497
  /**
@@ -13777,9 +13809,12 @@ const changeColors = (_mkColor, _mkColorCd, _header, _name) => {
13777
13809
  */
13778
13810
  const changeCssMotions = (_header, _name, _frameNum) => {
13779
13811
  const camelHeader = _header === `` ? _name : `${_header}${toCapitalize(_name)}`;
13780
- g_workObj[`mk${toCapitalize(camelHeader)}CssMotion`]?.[_frameNum]?.forEach((targetj, j) =>
13812
+ g_workObj[`mk${toCapitalize(camelHeader)}CssMotion`]?.[_frameNum]?.forEach((targetj, j) => {
13781
13813
  g_workObj[`${camelHeader}CssMotions`][targetj] =
13782
- g_workObj[`mk${toCapitalize(camelHeader)}CssMotionName`][_frameNum][2 * j + (g_workObj.dividePos[targetj] % 2)]);
13814
+ g_workObj[`mk${toCapitalize(camelHeader)}CssMotionName`][_frameNum][2 * j + (g_workObj.dividePos[targetj] % 2)]
13815
+ g_workObj[`${camelHeader}MovLock`][targetj] = g_workObj[`mk${toCapitalize(camelHeader)}MovLock`][_frameNum][j];
13816
+ g_workObj[`${camelHeader}InitManual`][targetj] = g_workObj[`mk${toCapitalize(camelHeader)}InitManual`][_frameNum][j];
13817
+ });
13783
13818
  };
13784
13819
 
13785
13820
  /**
@@ -13878,7 +13913,7 @@ const changeHitFrz = (_j, _k, _name, _difFrame = 0) => {
13878
13913
  currentFrz.btmY -= delFrzLength + delFrzMotionLength + hitPos;
13879
13914
  currentFrz.y += delFrzLength;
13880
13915
  currentFrz.isMoving = false;
13881
- movArrowY.get(g_workObj.movLockEnabled)(frzName, currentFrz.y);
13916
+ movArrowY.get(currentFrz.movLockFlg)(frzName, currentFrz.y);
13882
13917
 
13883
13918
  /**
13884
13919
  * フリーズアロー(ヒット時)の色変更
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2026/02/28 (v45.2.1)
8
+ * Revised : 2026/03/02 (v45.3.1)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -847,8 +847,8 @@ const g_typeLists = {
847
847
  `FColorNormalShadow`, `FColorNormalShadowCd`,
848
848
  `FColorHit`, `FColorHitCd`, `FColorHitBar`, `FColorHitBarCd`,
849
849
  `FColorHitShadow`, `FColorHitShadowCd`,
850
- `ArrowCssMotion`, `ArrowCssMotionName`,
851
- `FrzCssMotion`, `FrzCssMotionName`,
850
+ `ArrowCssMotion`, `ArrowCssMotionName`, `ArrowMovLock`, `ArrowInitManual`,
851
+ `FrzCssMotion`, `FrzCssMotionName`, `FrzMovLock`, `FrzInitManual`,
852
852
  `ArrowColorChangeAll`, `FrzColorChangeAll`,
853
853
  ],
854
854
  };
@@ -1781,46 +1781,58 @@ const g_stepAreaFunc = new Map([
1781
1781
  const getShakingDist = () => (Math.abs((g_scoreObj.baseFrame / 2) % 100 - 50) - 25);
1782
1782
  const g_shakingFunc = new Map([
1783
1783
  ['OFF', () => true],
1784
- ['Horizontal', () => addTransform(`mainSprite`, `shakingX`, `translateX(${getShakingDist()}px)`, g_transPriority.shaking)],
1785
- ['Vertical', () => addTransform(`mainSprite`, `shakingY`, `translateY(${getShakingDist() / 2}px)`, g_transPriority.shaking)],
1784
+ ['Horizontal', () => {
1785
+ if (g_scoreObj.baseFrame % 2 === 0)
1786
+ addTransform(`mainSprite`, `shakingX`, `translateX(${getShakingDist()}px)`, g_transPriority.shaking)
1787
+ }],
1788
+ ['Vertical', () => {
1789
+ if (g_scoreObj.baseFrame % 2 === 0)
1790
+ addTransform(`mainSprite`, `shakingY`, `translateY(${getShakingDist() / 2}px)`, g_transPriority.shaking)
1791
+ }],
1786
1792
  ['X-Horizontal', () => {
1787
- for (let j = 0; j < g_stateObj.layerNum; j++) {
1788
- addTransform(`mainSprite${j}`, `shakingX`, `translateX(${getDirFromLayer(j) * (4 / 3) * getShakingDist()}px)`, g_transPriority.shaking);
1789
- }
1793
+ if (g_scoreObj.baseFrame % 2 === 0)
1794
+ for (let j = 0; j < g_stateObj.layerNum; j++) {
1795
+ addTransform(`mainSprite${j}`, `shakingX`, `translateX(${getDirFromLayer(j) * (4 / 3) * getShakingDist()}px)`, g_transPriority.shaking);
1796
+ }
1790
1797
  }],
1791
1798
  ['X-Vertical', () => {
1792
- for (let j = 0; j < g_stateObj.layerNum; j++) {
1793
- addTransform(`mainSprite${j}`, `shakingY`, `translateY(${getDirFromLayer(j) * getShakingDist()}px)`, g_transPriority.shaking);
1794
- }
1799
+ if (g_scoreObj.baseFrame % 2 === 0)
1800
+ for (let j = 0; j < g_stateObj.layerNum; j++) {
1801
+ addTransform(`mainSprite${j}`, `shakingY`, `translateY(${getDirFromLayer(j) * getShakingDist()}px)`, g_transPriority.shaking);
1802
+ }
1795
1803
  }],
1796
1804
  ['Drunk', () => {
1797
- // Drunkは揺れの軸が途中で変わるため、基準位置取得のためにmainSpriteのみaddX, addYを使用
1798
- const shakeX = g_posXs.mainSprite?.get(`shakingX`) ?? 0;
1799
- const shakeY = g_posYs.mainSprite?.get(`shakingY`) ?? 0;
1800
- if (shakeX === 0 && shakeY === 0) {
1801
- g_workObj.drunkXFlg = Math.random() < 0.5;
1802
- g_workObj.drunkYFlg = Math.random() < 0.5;
1803
- }
1804
- if (g_workObj.drunkXFlg) {
1805
- const deltaX = getShakingDist();
1806
- addX(`mainSprite`, `shakingX`, deltaX, { priority: g_transPriority.shaking });
1807
- addTransform(`infoSprite`, `shakingX`, `translateX(${deltaX}px)`, g_transPriority.shaking);
1808
- addTransform(`judgeSprite`, `shakingX`, `translateX(${deltaX}px)`, g_transPriority.shaking);
1809
- }
1810
- if (g_workObj.drunkYFlg) {
1811
- const deltaY = getShakingDist() / 2;
1812
- addY(`mainSprite`, `shakingY`, deltaY, { priority: g_transPriority.shaking });
1813
- addTransform(`infoSprite`, `shakingY`, `translateY(${deltaY}px)`, g_transPriority.shaking);
1814
- addTransform(`judgeSprite`, `shakingY`, `translateY(${deltaY}px)`, g_transPriority.shaking);
1805
+ if (g_scoreObj.baseFrame % 2 === 0) {
1806
+ // Drunkは揺れの軸が途中で変わるため、基準位置取得のためにmainSpriteのみaddX, addYを使用
1807
+ const shakeX = g_posXs.mainSprite?.get(`shakingX`) ?? 0;
1808
+ const shakeY = g_posYs.mainSprite?.get(`shakingY`) ?? 0;
1809
+ if (shakeX === 0 && shakeY === 0) {
1810
+ g_workObj.drunkXFlg = Math.random() < 0.5;
1811
+ g_workObj.drunkYFlg = Math.random() < 0.5;
1812
+ }
1813
+ if (g_workObj.drunkXFlg) {
1814
+ const deltaX = getShakingDist();
1815
+ addX(`mainSprite`, `shakingX`, deltaX, { priority: g_transPriority.shaking });
1816
+ addTransform(`infoSprite`, `shakingX`, `translateX(${deltaX}px)`, g_transPriority.shaking);
1817
+ addTransform(`judgeSprite`, `shakingX`, `translateX(${deltaX}px)`, g_transPriority.shaking);
1818
+ }
1819
+ if (g_workObj.drunkYFlg) {
1820
+ const deltaY = getShakingDist() / 2;
1821
+ addY(`mainSprite`, `shakingY`, deltaY, { priority: g_transPriority.shaking });
1822
+ addTransform(`infoSprite`, `shakingY`, `translateY(${deltaY}px)`, g_transPriority.shaking);
1823
+ addTransform(`judgeSprite`, `shakingY`, `translateY(${deltaY}px)`, g_transPriority.shaking);
1824
+ }
1815
1825
  }
1816
1826
  }],
1817
1827
  ['S-Drunk', () => {
1818
- g_shakingFunc.get(`Drunk`)();
1819
- if (g_workObj.drunkXFlg) {
1820
- g_shakingFunc.get(`X-Vertical`)();
1821
- }
1822
- if (g_workObj.drunkYFlg) {
1823
- g_shakingFunc.get(`X-Horizontal`)();
1828
+ if (g_scoreObj.baseFrame % 2 === 0) {
1829
+ g_shakingFunc.get(`Drunk`)();
1830
+ if (g_workObj.drunkXFlg) {
1831
+ g_shakingFunc.get(`X-Vertical`)();
1832
+ }
1833
+ if (g_workObj.drunkYFlg) {
1834
+ g_shakingFunc.get(`X-Horizontal`)();
1835
+ }
1824
1836
  }
1825
1837
  }],
1826
1838
  ]);
@@ -3799,9 +3811,10 @@ const g_dataMinObj = {
3799
3811
  */
3800
3812
  const g_dataSetObj = {
3801
3813
  2: [`speedData`, `boostData`],
3802
- 4: [`colorData`, `arrowCssMotionData`, `frzCssMotionData`,
3803
- `dummyArrowCssMotionData`, `dummyFrzCssMotionData`],
3814
+ 4: [`colorData`],
3804
3815
  5: [`ncolorData`, `scrollchData`],
3816
+ 6: [`arrowCssMotionData`, `frzCssMotionData`,
3817
+ `dummyArrowCssMotionData`, `dummyFrzCssMotionData`],
3805
3818
  }
3806
3819
 
3807
3820
  const g_dfColorObj = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "45.2.1",
3
+ "version": "45.3.1",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "./js/danoni_main.js",
6
6
  "scripts": {