danoniplus 48.5.3 → 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 +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 48.5.3`;
12
- const g_revisedDate = `2026/07/04`;
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 = ``;
@@ -10014,7 +10014,8 @@ const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF],
10014
10014
  */
10015
10015
  const setExpandedBtnSiz = () => {
10016
10016
  const camelH = toCapitalize(_name);
10017
- if (defaultList.includes(g_stateObj[_name])) {
10017
+ const isDefault = defaultList.includes(g_stateObj[_name]);
10018
+ if (isDefault) {
10018
10019
  $id(`lnk${camelH}Type`).display = C_DIS_NONE;
10019
10020
  $id(`lnk${camelH}`).left = wUnit(g_limitObj.setLblLeft);
10020
10021
  $id(`lnk${camelH}`).width = wUnit(g_limitObj.setLblWidth);
@@ -10023,7 +10024,8 @@ const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF],
10023
10024
  $id(`lnk${camelH}`).left = wUnit(g_limitObj.setLblLeftShort);
10024
10025
  $id(`lnk${camelH}`).width = wUnit(g_limitObj.setLblWidthShort);
10025
10026
  }
10026
- $id(`lnk${camelH}`).fontSize = wUnit(getFontSize2(getStgDetailName(g_stateObj[_name]), g_limitObj.setLblWidthShort, { maxSiz: g_limitObj.setLblSiz }));
10027
+ const labelWidth = isDefault ? g_limitObj.setLblWidth : g_limitObj.setLblWidthShort - 10;
10028
+ $id(`lnk${camelH}`).fontSize = wUnit(getFontSize2(getStgDetailName(g_stateObj[_name]), labelWidth, { maxSiz: g_limitObj.setLblSiz }));
10027
10029
  };
10028
10030
 
10029
10031
  /**
@@ -12592,8 +12594,11 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
12592
12594
  const arrowNum = parseFloat(tmpScrollchData[1]);
12593
12595
  const scrollDir = parseFloat(tmpScrollchData[2] ?? `1`);
12594
12596
  const layerGroup = parseFloat(tmpScrollchData[3] ?? `-1`);
12595
- const layerTrans = tmpScrollchData[4] ?? ``;
12597
+ let layerTrans = tmpScrollchData[4] ?? ``;
12596
12598
  maxLayerGroup = Math.max(maxLayerGroup, layerGroup);
12599
+ if (g_stateObj.reverse === C_FLG_ON) {
12600
+ layerTrans = invertSpecificTransforms(layerTrans);
12601
+ }
12597
12602
 
12598
12603
  scrollchData.push([frame, arrowNum, frame, scrollDir, layerGroup, layerTrans]);
12599
12604
  });
@@ -13750,6 +13755,32 @@ const pushScrollchs = (_header, _frameArrow, _val, _frameStep, _scrollDir, _laye
13750
13755
  }
13751
13756
  };
13752
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
+
13753
13784
  /**
13754
13785
  * メイン画面前の初期化処理
13755
13786
  */
@@ -13784,6 +13815,7 @@ const getArrowSettings = () => {
13784
13815
  g_workObj.diffList = [];
13785
13816
  g_workObj.mainEndTime = 0;
13786
13817
  g_workObj.currentLifeState = ``;
13818
+ g_workObj.layerTrans = [];
13787
13819
  g_errorCache['g_customJsObj.mainEnterFrame'] = [];
13788
13820
 
13789
13821
  const rotateBy = (val, delta) => {
@@ -13823,6 +13855,13 @@ const getArrowSettings = () => {
13823
13855
  g_workObj.keyGroupMaps = tkObj.keyGroupMaps;
13824
13856
  g_workObj.keyGroupList = tkObj.keyGroupList;
13825
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
+
13826
13865
  const keyCtrlLen = g_workObj.keyCtrl.length;
13827
13866
  g_workObj.keyCtrlN = [...Array(keyCtrlLen)].map(() => []);
13828
13867
  g_workObj.keyHitFlg = [...Array(keyCtrlLen)].map(() => []);
@@ -14322,7 +14361,7 @@ const mainInit = () => {
14322
14361
  // StepAreaオプションにより、レイヤーが倍化される場合があるため基準レイヤー数ごとに設定
14323
14362
  const transj = j % g_stateObj.layerNumDf;
14324
14363
  addTransform(`mainSprite${j}`, `mainSprite${j}`,
14325
- 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);
14326
14365
 
14327
14366
  stepSprite.push(createEmptySprite(mainSpriteJ, `stepSprite${j}`, mainCommonPos));
14328
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.3",
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",