danoniplus 44.5.18 → 44.5.19

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/04
7
+ * Revised : 2026/07/31
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 44.5.18`;
12
- const g_revisedDate = `2026/07/04`;
11
+ const g_version = `Ver 44.5.19`;
12
+ const g_revisedDate = `2026/07/31`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -10525,8 +10525,11 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
10525
10525
  const arrowNum = parseFloat(tmpScrollchData[1]);
10526
10526
  const scrollDir = parseFloat(tmpScrollchData[2] ?? `1`);
10527
10527
  const layerGroup = parseFloat(tmpScrollchData[3] ?? `-1`);
10528
- const layerTrans = tmpScrollchData[4] ?? ``;
10528
+ let layerTrans = tmpScrollchData[4] ?? ``;
10529
10529
  maxLayerGroup = Math.max(maxLayerGroup, layerGroup);
10530
+ if (g_stateObj.reverse === C_FLG_ON) {
10531
+ layerTrans = invertSpecificTransforms(layerTrans);
10532
+ }
10530
10533
 
10531
10534
  scrollchData.push([frame, arrowNum, frame, scrollDir, layerGroup, layerTrans]);
10532
10535
  });
@@ -11637,6 +11640,32 @@ const pushScrollchs = (_header, _frameArrow, _val, _frameStep, _scrollDir, _laye
11637
11640
  }
11638
11641
  };
11639
11642
 
11643
+ /**
11644
+ * ホワイトリストに登録されたCSS関数内の数値符号のみを反転する関数
11645
+ * @param {string} cssString
11646
+ * @returns {string}
11647
+ */
11648
+ const invertSpecificTransforms = (cssString) => {
11649
+ // 反転対象にしたいCSS関数名を指定(ホワイトリスト)
11650
+ const targetFunctions = [
11651
+ `rotate`, `rotateX`, `rotateY`, `rotateZ`, `rotate3d`,
11652
+ `translate`, `translateX`, `translateY`, `translateZ`, `translate3d`,
11653
+ `skew`, `skewX`, `skewY`
11654
+ ];
11655
+
11656
+ // RegExパターンを作成: /(rotate|translate...)\(([^)]+)\)/g
11657
+ const pattern = new RegExp(`\\b(${targetFunctions.join(`|`)})\\(([^)]+)\\)`, `g`);
11658
+
11659
+ return cssString.replace(pattern, (match, funcName, args) => {
11660
+ // 関数の中身(引数)に含まれる数値だけを符号反転
11661
+ const invertedArgs = args.replace(/(-?\d+(?:\.\d+)?)/g, (numStr) => {
11662
+ return numStr.startsWith(`-`) ? numStr.slice(1) : `-` + numStr;
11663
+ });
11664
+
11665
+ return `${funcName}(${invertedArgs})`;
11666
+ });
11667
+ }
11668
+
11640
11669
  /**
11641
11670
  * メイン画面前の初期化処理
11642
11671
  */
@@ -11666,6 +11695,7 @@ const getArrowSettings = () => {
11666
11695
  g_workObj.keyCtrl = structuredClone(g_keyObj[`keyCtrl${keyCtrlPtn}`]);
11667
11696
  g_workObj.diffList = [];
11668
11697
  g_workObj.mainEndTime = 0;
11698
+ g_workObj.layerTrans = [];
11669
11699
 
11670
11700
  const rotateBy = (val, delta) => {
11671
11701
  // numeric
@@ -11698,6 +11728,13 @@ const getArrowSettings = () => {
11698
11728
  g_workObj.keyGroupMaps = tkObj.keyGroupMaps;
11699
11729
  g_workObj.keyGroupList = tkObj.keyGroupList;
11700
11730
 
11731
+ if (g_keyObj[`layerTrans${keyCtrlPtn}`]?.[0]) {
11732
+ g_workObj.layerTrans = structuredClone(g_keyObj[`layerTrans${keyCtrlPtn}`][0]);
11733
+ if (g_stateObj.reverse === C_FLG_ON) {
11734
+ g_workObj.layerTrans = g_workObj.layerTrans.map(val => invertSpecificTransforms(val));
11735
+ }
11736
+ }
11737
+
11701
11738
  const keyCtrlLen = g_workObj.keyCtrl.length;
11702
11739
  g_workObj.keyCtrlN = [...Array(keyCtrlLen)].map(() => []);
11703
11740
  g_workObj.keyHitFlg = [...Array(keyCtrlLen)].map(() => []);
@@ -12173,7 +12210,7 @@ const mainInit = () => {
12173
12210
  // StepAreaオプションにより、レイヤーが倍化される場合があるため基準レイヤー数ごとに設定
12174
12211
  const transj = j % g_stateObj.layerNumDf;
12175
12212
  addTransform(`mainSprite${j}`, `mainSprite${j}`,
12176
- g_keyObj[`layerTrans${keyCtrlPtn}`]?.[0]?.[Math.floor(transj / 2) * 2 + (transj + Number(g_stateObj.reverse === C_FLG_ON)) % 2]);
12213
+ g_workObj.layerTrans[Math.floor(transj / 2) * 2 + (transj + Number(g_stateObj.reverse === C_FLG_ON)) % 2]);
12177
12214
 
12178
12215
  stepSprite.push(createEmptySprite(mainSpriteJ, `stepSprite${j}`, mainCommonPos));
12179
12216
  arrowSprite.push(createEmptySprite(mainSpriteJ, `arrowSprite${j}`, Object.assign({ y: g_workObj.hitPosition * (j % 2 === 0 ? 1 : -1) }, mainCommonPos)));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "44.5.18",
3
+ "version": "44.5.19",
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",