danoniplus 49.3.1 → 49.3.2

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 49.3.1`;
12
- const g_revisedDate = `2026/07/18`;
11
+ const g_version = `Ver 49.3.2`;
12
+ const g_revisedDate = `2026/07/31`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -12903,8 +12903,11 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
12903
12903
  const arrowNum = parseFloat(tmpScrollchData[1]);
12904
12904
  const scrollDir = parseFloat(tmpScrollchData[2] ?? `1`);
12905
12905
  const layerGroup = parseFloat(tmpScrollchData[3] ?? `-1`);
12906
- const layerTrans = tmpScrollchData[4] ?? ``;
12906
+ let layerTrans = tmpScrollchData[4] ?? ``;
12907
12907
  maxLayerGroup = Math.max(maxLayerGroup, layerGroup);
12908
+ if (g_stateObj.reverse === C_FLG_ON) {
12909
+ layerTrans = invertSpecificTransforms(layerTrans);
12910
+ }
12908
12911
 
12909
12912
  scrollchData.push([frame, arrowNum, frame, scrollDir, layerGroup, layerTrans]);
12910
12913
  });
@@ -14061,6 +14064,32 @@ const pushScrollchs = (_header, _frameArrow, _val, _frameStep, _scrollDir, _laye
14061
14064
  }
14062
14065
  };
14063
14066
 
14067
+ /**
14068
+ * ホワイトリストに登録されたCSS関数内の数値符号のみを反転する関数
14069
+ * @param {string} cssString
14070
+ * @returns {string}
14071
+ */
14072
+ const invertSpecificTransforms = (cssString) => {
14073
+ // 反転対象にしたいCSS関数名を指定(ホワイトリスト)
14074
+ const targetFunctions = [
14075
+ `rotate`, `rotateX`, `rotateY`, `rotateZ`, `rotate3d`,
14076
+ `translate`, `translateX`, `translateY`, `translateZ`, `translate3d`,
14077
+ `skew`, `skewX`, `skewY`
14078
+ ];
14079
+
14080
+ // RegExパターンを作成: /(rotate|translate...)\(([^)]+)\)/g
14081
+ const pattern = new RegExp(`\\b(${targetFunctions.join(`|`)})\\(([^)]+)\\)`, `g`);
14082
+
14083
+ return cssString.replace(pattern, (match, funcName, args) => {
14084
+ // 関数の中身(引数)に含まれる数値だけを符号反転
14085
+ const invertedArgs = args.replace(/(-?\d+(?:\.\d+)?)/g, (numStr) => {
14086
+ return numStr.startsWith(`-`) ? numStr.slice(1) : `-` + numStr;
14087
+ });
14088
+
14089
+ return `${funcName}(${invertedArgs})`;
14090
+ });
14091
+ }
14092
+
14064
14093
  /**
14065
14094
  * メイン画面前の初期化処理
14066
14095
  */
@@ -14095,6 +14124,7 @@ const getArrowSettings = () => {
14095
14124
  g_workObj.diffList = [];
14096
14125
  g_workObj.mainEndTime = 0;
14097
14126
  g_workObj.currentLifeState = ``;
14127
+ g_workObj.layerTrans = [];
14098
14128
  g_errorCache['g_customJsObj.mainEnterFrame'] = [];
14099
14129
 
14100
14130
  const rotateBy = (val, delta) => {
@@ -14134,6 +14164,13 @@ const getArrowSettings = () => {
14134
14164
  g_workObj.keyGroupMaps = tkObj.keyGroupMaps;
14135
14165
  g_workObj.keyGroupList = tkObj.keyGroupList;
14136
14166
 
14167
+ if (g_keyObj[`layerTrans${keyCtrlPtn}`]?.[0]) {
14168
+ g_workObj.layerTrans = structuredClone(g_keyObj[`layerTrans${keyCtrlPtn}`][0]);
14169
+ if (g_stateObj.reverse === C_FLG_ON) {
14170
+ g_workObj.layerTrans = g_workObj.layerTrans.map(val => invertSpecificTransforms(val));
14171
+ }
14172
+ }
14173
+
14137
14174
  const keyCtrlLen = g_workObj.keyCtrl.length;
14138
14175
  g_workObj.keyCtrlN = [...Array(keyCtrlLen)].map(() => []);
14139
14176
  g_workObj.keyHitFlg = [...Array(keyCtrlLen)].map(() => []);
@@ -14630,7 +14667,7 @@ const mainInit = () => {
14630
14667
  // StepAreaオプションにより、レイヤーが倍化される場合があるため基準レイヤー数ごとに設定
14631
14668
  const transj = j % g_stateObj.layerNumDf;
14632
14669
  addTransform(`mainSprite${j}`, `mainSprite${j}`,
14633
- g_keyObj[`layerTrans${keyCtrlPtn}`]?.[0]?.[Math.floor(transj / 2) * 2 + (transj + Number(g_stateObj.reverse === C_FLG_ON)) % 2], g_transPriority.layer);
14670
+ g_workObj.layerTrans[Math.floor(transj / 2) * 2 + (transj + Number(g_stateObj.reverse === C_FLG_ON)) % 2], g_transPriority.layer);
14634
14671
 
14635
14672
  stepSprite.push(createEmptySprite(mainSpriteJ, `stepSprite${j}`, mainCommonPos));
14636
14673
  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": "49.3.1",
3
+ "version": "49.3.2",
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",