danoniplus 48.5.4 → 48.5.5

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.
Files changed (2) hide show
  1. package/js/danoni_main.js +42 -5
  2. package/package.json +1 -1
package/js/danoni_main.js CHANGED
@@ -4,12 +4,12 @@
4
4
  *
5
5
  * Source by tickle
6
6
  * Created : 2018/10/08
7
- * Revised : 2026/07/18
7
+ * Revised : 2026/07/31
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 48.5.4`;
12
- const g_revisedDate = `2026/07/18`;
11
+ const g_version = `Ver 48.5.5`;
12
+ const g_revisedDate = `2026/07/31`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -12594,8 +12594,11 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
12594
12594
  const arrowNum = parseFloat(tmpScrollchData[1]);
12595
12595
  const scrollDir = parseFloat(tmpScrollchData[2] ?? `1`);
12596
12596
  const layerGroup = parseFloat(tmpScrollchData[3] ?? `-1`);
12597
- const layerTrans = tmpScrollchData[4] ?? ``;
12597
+ let layerTrans = tmpScrollchData[4] ?? ``;
12598
12598
  maxLayerGroup = Math.max(maxLayerGroup, layerGroup);
12599
+ if (g_stateObj.reverse === C_FLG_ON) {
12600
+ layerTrans = invertSpecificTransforms(layerTrans);
12601
+ }
12599
12602
 
12600
12603
  scrollchData.push([frame, arrowNum, frame, scrollDir, layerGroup, layerTrans]);
12601
12604
  });
@@ -13752,6 +13755,32 @@ const pushScrollchs = (_header, _frameArrow, _val, _frameStep, _scrollDir, _laye
13752
13755
  }
13753
13756
  };
13754
13757
 
13758
+ /**
13759
+ * ホワイトリストに登録されたCSS関数内の数値符号のみを反転する関数
13760
+ * @param {string} cssString
13761
+ * @returns {string}
13762
+ */
13763
+ const invertSpecificTransforms = (cssString) => {
13764
+ // 反転対象にしたいCSS関数名を指定(ホワイトリスト)
13765
+ const targetFunctions = [
13766
+ `rotate`, `rotateX`, `rotateY`, `rotateZ`, `rotate3d`,
13767
+ `translate`, `translateX`, `translateY`, `translateZ`, `translate3d`,
13768
+ `skew`, `skewX`, `skewY`
13769
+ ];
13770
+
13771
+ // RegExパターンを作成: /(rotate|translate...)\(([^)]+)\)/g
13772
+ const pattern = new RegExp(`\\b(${targetFunctions.join(`|`)})\\(([^)]+)\\)`, `g`);
13773
+
13774
+ return cssString.replace(pattern, (match, funcName, args) => {
13775
+ // 関数の中身(引数)に含まれる数値だけを符号反転
13776
+ const invertedArgs = args.replace(/(-?\d+(?:\.\d+)?)/g, (numStr) => {
13777
+ return numStr.startsWith(`-`) ? numStr.slice(1) : `-` + numStr;
13778
+ });
13779
+
13780
+ return `${funcName}(${invertedArgs})`;
13781
+ });
13782
+ }
13783
+
13755
13784
  /**
13756
13785
  * メイン画面前の初期化処理
13757
13786
  */
@@ -13786,6 +13815,7 @@ const getArrowSettings = () => {
13786
13815
  g_workObj.diffList = [];
13787
13816
  g_workObj.mainEndTime = 0;
13788
13817
  g_workObj.currentLifeState = ``;
13818
+ g_workObj.layerTrans = [];
13789
13819
  g_errorCache['g_customJsObj.mainEnterFrame'] = [];
13790
13820
 
13791
13821
  const rotateBy = (val, delta) => {
@@ -13825,6 +13855,13 @@ const getArrowSettings = () => {
13825
13855
  g_workObj.keyGroupMaps = tkObj.keyGroupMaps;
13826
13856
  g_workObj.keyGroupList = tkObj.keyGroupList;
13827
13857
 
13858
+ if (g_keyObj[`layerTrans${keyCtrlPtn}`]?.[0]) {
13859
+ g_workObj.layerTrans = structuredClone(g_keyObj[`layerTrans${keyCtrlPtn}`][0]);
13860
+ if (g_stateObj.reverse === C_FLG_ON) {
13861
+ g_workObj.layerTrans = g_workObj.layerTrans.map(val => invertSpecificTransforms(val));
13862
+ }
13863
+ }
13864
+
13828
13865
  const keyCtrlLen = g_workObj.keyCtrl.length;
13829
13866
  g_workObj.keyCtrlN = [...Array(keyCtrlLen)].map(() => []);
13830
13867
  g_workObj.keyHitFlg = [...Array(keyCtrlLen)].map(() => []);
@@ -14324,7 +14361,7 @@ const mainInit = () => {
14324
14361
  // StepAreaオプションにより、レイヤーが倍化される場合があるため基準レイヤー数ごとに設定
14325
14362
  const transj = j % g_stateObj.layerNumDf;
14326
14363
  addTransform(`mainSprite${j}`, `mainSprite${j}`,
14327
- g_keyObj[`layerTrans${keyCtrlPtn}`]?.[0]?.[Math.floor(transj / 2) * 2 + (transj + Number(g_stateObj.reverse === C_FLG_ON)) % 2], g_transPriority.layer);
14364
+ g_workObj.layerTrans[Math.floor(transj / 2) * 2 + (transj + Number(g_stateObj.reverse === C_FLG_ON)) % 2], g_transPriority.layer);
14328
14365
 
14329
14366
  stepSprite.push(createEmptySprite(mainSpriteJ, `stepSprite${j}`, mainCommonPos));
14330
14367
  arrowSprite.push(createEmptySprite(mainSpriteJ, `arrowSprite${j}`, { ...mainCommonPos, y: g_workObj.hitPosition * (j % 2 === 0 ? 1 : -1) }));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "48.5.4",
3
+ "version": "48.5.5",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "./js/danoni_main.js",
6
6
  "jsdelivr": "./js/danoni_main.js",