danoniplus 47.6.7 → 47.6.8

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 47.6.7`;
12
- const g_revisedDate = `2026/07/18`;
11
+ const g_version = `Ver 47.6.8`;
12
+ const g_revisedDate = `2026/07/31`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -11907,8 +11907,11 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
11907
11907
  const arrowNum = parseFloat(tmpScrollchData[1]);
11908
11908
  const scrollDir = parseFloat(tmpScrollchData[2] ?? `1`);
11909
11909
  const layerGroup = parseFloat(tmpScrollchData[3] ?? `-1`);
11910
- const layerTrans = tmpScrollchData[4] ?? ``;
11910
+ let layerTrans = tmpScrollchData[4] ?? ``;
11911
11911
  maxLayerGroup = Math.max(maxLayerGroup, layerGroup);
11912
+ if (g_stateObj.reverse === C_FLG_ON) {
11913
+ layerTrans = invertSpecificTransforms(layerTrans);
11914
+ }
11912
11915
 
11913
11916
  scrollchData.push([frame, arrowNum, frame, scrollDir, layerGroup, layerTrans]);
11914
11917
  });
@@ -13065,6 +13068,32 @@ const pushScrollchs = (_header, _frameArrow, _val, _frameStep, _scrollDir, _laye
13065
13068
  }
13066
13069
  };
13067
13070
 
13071
+ /**
13072
+ * ホワイトリストに登録されたCSS関数内の数値符号のみを反転する関数
13073
+ * @param {string} cssString
13074
+ * @returns {string}
13075
+ */
13076
+ const invertSpecificTransforms = (cssString) => {
13077
+ // 反転対象にしたいCSS関数名を指定(ホワイトリスト)
13078
+ const targetFunctions = [
13079
+ `rotate`, `rotateX`, `rotateY`, `rotateZ`, `rotate3d`,
13080
+ `translate`, `translateX`, `translateY`, `translateZ`, `translate3d`,
13081
+ `skew`, `skewX`, `skewY`
13082
+ ];
13083
+
13084
+ // RegExパターンを作成: /(rotate|translate...)\(([^)]+)\)/g
13085
+ const pattern = new RegExp(`\\b(${targetFunctions.join(`|`)})\\(([^)]+)\\)`, `g`);
13086
+
13087
+ return cssString.replace(pattern, (match, funcName, args) => {
13088
+ // 関数の中身(引数)に含まれる数値だけを符号反転
13089
+ const invertedArgs = args.replace(/(-?\d+(?:\.\d+)?)/g, (numStr) => {
13090
+ return numStr.startsWith(`-`) ? numStr.slice(1) : `-` + numStr;
13091
+ });
13092
+
13093
+ return `${funcName}(${invertedArgs})`;
13094
+ });
13095
+ }
13096
+
13068
13097
  /**
13069
13098
  * メイン画面前の初期化処理
13070
13099
  */
@@ -13099,6 +13128,7 @@ const getArrowSettings = () => {
13099
13128
  g_workObj.diffList = [];
13100
13129
  g_workObj.mainEndTime = 0;
13101
13130
  g_workObj.currentLifeState = ``;
13131
+ g_workObj.layerTrans = [];
13102
13132
  g_errorCache['g_customJsObj.mainEnterFrame'] = [];
13103
13133
 
13104
13134
  const rotateBy = (val, delta) => {
@@ -13138,6 +13168,13 @@ const getArrowSettings = () => {
13138
13168
  g_workObj.keyGroupMaps = tkObj.keyGroupMaps;
13139
13169
  g_workObj.keyGroupList = tkObj.keyGroupList;
13140
13170
 
13171
+ if (g_keyObj[`layerTrans${keyCtrlPtn}`]?.[0]) {
13172
+ g_workObj.layerTrans = structuredClone(g_keyObj[`layerTrans${keyCtrlPtn}`][0]);
13173
+ if (g_stateObj.reverse === C_FLG_ON) {
13174
+ g_workObj.layerTrans = g_workObj.layerTrans.map(val => invertSpecificTransforms(val));
13175
+ }
13176
+ }
13177
+
13141
13178
  const keyCtrlLen = g_workObj.keyCtrl.length;
13142
13179
  g_workObj.keyCtrlN = [...Array(keyCtrlLen)].map(() => []);
13143
13180
  g_workObj.keyHitFlg = [...Array(keyCtrlLen)].map(() => []);
@@ -13632,7 +13669,7 @@ const mainInit = () => {
13632
13669
  // StepAreaオプションにより、レイヤーが倍化される場合があるため基準レイヤー数ごとに設定
13633
13670
  const transj = j % g_stateObj.layerNumDf;
13634
13671
  addTransform(`mainSprite${j}`, `mainSprite${j}`,
13635
- g_keyObj[`layerTrans${keyCtrlPtn}`]?.[0]?.[Math.floor(transj / 2) * 2 + (transj + Number(g_stateObj.reverse === C_FLG_ON)) % 2], g_transPriority.layer);
13672
+ g_workObj.layerTrans[Math.floor(transj / 2) * 2 + (transj + Number(g_stateObj.reverse === C_FLG_ON)) % 2], g_transPriority.layer);
13636
13673
 
13637
13674
  stepSprite.push(createEmptySprite(mainSpriteJ, `stepSprite${j}`, mainCommonPos));
13638
13675
  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": "47.6.7",
3
+ "version": "47.6.8",
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",