danoniplus 47.6.6 → 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 +46 -7
  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.6`;
12
- const g_revisedDate = `2026/07/04`;
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 = ``;
@@ -9373,7 +9373,8 @@ const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF],
9373
9373
  */
9374
9374
  const setExpandedBtnSiz = () => {
9375
9375
  const camelH = toCapitalize(_name);
9376
- if (defaultList.includes(g_stateObj[_name])) {
9376
+ const isDefault = defaultList.includes(g_stateObj[_name]);
9377
+ if (isDefault) {
9377
9378
  $id(`lnk${camelH}Type`).display = C_DIS_NONE;
9378
9379
  $id(`lnk${camelH}`).left = wUnit(g_limitObj.setLblLeft);
9379
9380
  $id(`lnk${camelH}`).width = wUnit(g_limitObj.setLblWidth);
@@ -9382,7 +9383,8 @@ const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF],
9382
9383
  $id(`lnk${camelH}`).left = wUnit(g_limitObj.setLblLeftShort);
9383
9384
  $id(`lnk${camelH}`).width = wUnit(g_limitObj.setLblWidthShort);
9384
9385
  }
9385
- $id(`lnk${camelH}`).fontSize = wUnit(getFontSize2(getStgDetailName(g_stateObj[_name]), g_limitObj.setLblWidthShort, { maxSiz: g_limitObj.setLblSiz }));
9386
+ const labelWidth = isDefault ? g_limitObj.setLblWidth : g_limitObj.setLblWidthShort - 10;
9387
+ $id(`lnk${camelH}`).fontSize = wUnit(getFontSize2(getStgDetailName(g_stateObj[_name]), labelWidth, { maxSiz: g_limitObj.setLblSiz }));
9386
9388
  };
9387
9389
 
9388
9390
  /**
@@ -11905,8 +11907,11 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
11905
11907
  const arrowNum = parseFloat(tmpScrollchData[1]);
11906
11908
  const scrollDir = parseFloat(tmpScrollchData[2] ?? `1`);
11907
11909
  const layerGroup = parseFloat(tmpScrollchData[3] ?? `-1`);
11908
- const layerTrans = tmpScrollchData[4] ?? ``;
11910
+ let layerTrans = tmpScrollchData[4] ?? ``;
11909
11911
  maxLayerGroup = Math.max(maxLayerGroup, layerGroup);
11912
+ if (g_stateObj.reverse === C_FLG_ON) {
11913
+ layerTrans = invertSpecificTransforms(layerTrans);
11914
+ }
11910
11915
 
11911
11916
  scrollchData.push([frame, arrowNum, frame, scrollDir, layerGroup, layerTrans]);
11912
11917
  });
@@ -13063,6 +13068,32 @@ const pushScrollchs = (_header, _frameArrow, _val, _frameStep, _scrollDir, _laye
13063
13068
  }
13064
13069
  };
13065
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
+
13066
13097
  /**
13067
13098
  * メイン画面前の初期化処理
13068
13099
  */
@@ -13097,6 +13128,7 @@ const getArrowSettings = () => {
13097
13128
  g_workObj.diffList = [];
13098
13129
  g_workObj.mainEndTime = 0;
13099
13130
  g_workObj.currentLifeState = ``;
13131
+ g_workObj.layerTrans = [];
13100
13132
  g_errorCache['g_customJsObj.mainEnterFrame'] = [];
13101
13133
 
13102
13134
  const rotateBy = (val, delta) => {
@@ -13136,6 +13168,13 @@ const getArrowSettings = () => {
13136
13168
  g_workObj.keyGroupMaps = tkObj.keyGroupMaps;
13137
13169
  g_workObj.keyGroupList = tkObj.keyGroupList;
13138
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
+
13139
13178
  const keyCtrlLen = g_workObj.keyCtrl.length;
13140
13179
  g_workObj.keyCtrlN = [...Array(keyCtrlLen)].map(() => []);
13141
13180
  g_workObj.keyHitFlg = [...Array(keyCtrlLen)].map(() => []);
@@ -13630,7 +13669,7 @@ const mainInit = () => {
13630
13669
  // StepAreaオプションにより、レイヤーが倍化される場合があるため基準レイヤー数ごとに設定
13631
13670
  const transj = j % g_stateObj.layerNumDf;
13632
13671
  addTransform(`mainSprite${j}`, `mainSprite${j}`,
13633
- 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);
13634
13673
 
13635
13674
  stepSprite.push(createEmptySprite(mainSpriteJ, `stepSprite${j}`, mainCommonPos));
13636
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.6",
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",