danoniplus 46.1.0 → 46.2.1

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.
package/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # Dancing☆Onigiri (CW Edition)
2
2
 
3
3
  [![CodeQL](https://github.com/cwtickle/danoniplus/workflows/CodeQL/badge.svg)](https://github.com/cwtickle/danoniplus/actions?query=workflow%3ACodeQL)
4
- ![CodeRabbit Pull Request Reviews](https://img.shields.io/coderabbit/prs/github/cwtickle/danoniplus?utm_source=oss&utm_medium=github&utm_campaign=cwtickle%2Fdanoniplus&labelColor=171717&color=FF570A&link=https%3A%2F%2Fcoderabbit.ai&label=CodeRabbit+Reviews)
5
- [![Discord](https://img.shields.io/discord/698460971231870977?style=flat&logo=discord&logoColor=%23ffffff&label=Discord&labelColor=%236666ff&color=%23000066)](https://discord.gg/YVWUdUGyMy)
4
+ ![CodeRabbit Pull Request Reviews](https://img.shields.io/coderabbit/prs/github/cwtickle/danoniplus?utm_source=oss&utm_medium=github&utm_campaign=cwtickle%2Fdanoniplus&labelColor=171717&color=FF570A&link=https%3A%2F%2Fcoderabbit.ai&label=CodeRabbit+Reviews&logo=coderabbit)
5
+ [![Discord](https://img.shields.io/discord/698460971231870977?style=flat&logo=discord&logoColor=%23ffffff&label=Discord&labelColor=%236666ff&color=%23000066)](https://discord.gg/YVWUdUGyMy)
6
+ [![DeepWiki](https://img.shields.io/badge/DeepWiki-cwtickle%2Fdanoniplus-blue.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAAAXNSR0IArs4c6QAAA05JREFUaEPtmUtyEzEQhtWTQyQLHNak2AB7ZnyXZMEjXMGeK/AIi+QuHrMnbChYY7MIh8g01fJoopFb0uhhEqqcbWTp06/uv1saEDv4O3n3dV60RfP947Mm9/SQc0ICFQgzfc4CYZoTPAswgSJCCUJUnAAoRHOAUOcATwbmVLWdGoH//PB8mnKqScAhsD0kYP3j/Yt5LPQe2KvcXmGvRHcDnpxfL2zOYJ1mFwrryWTz0advv1Ut4CJgf5uhDuDj5eUcAUoahrdY/56ebRWeraTjMt/00Sh3UDtjgHtQNHwcRGOC98BJEAEymycmYcWwOprTgcB6VZ5JK5TAJ+fXGLBm3FDAmn6oPPjR4rKCAoJCal2eAiQp2x0vxTPB3ALO2CRkwmDy5WohzBDwSEFKRwPbknEggCPB/imwrycgxX2NzoMCHhPkDwqYMr9tRcP5qNrMZHkVnOjRMWwLCcr8ohBVb1OMjxLwGCvjTikrsBOiA6fNyCrm8V1rP93iVPpwaE+gO0SsWmPiXB+jikdf6SizrT5qKasx5j8ABbHpFTx+vFXp9EnYQmLx02h1QTTrl6eDqxLnGjporxl3NL3agEvXdT0WmEost648sQOYAeJS9Q7bfUVoMGnjo4AZdUMQku50McDcMWcBPvr0SzbTAFDfvJqwLzgxwATnCgnp4wDl6Aa+Ax283gghmj+vj7feE2KBBRMW3FzOpLOADl0Isb5587h/U4gGvkt5v60Z1VLG8BhYjbzRwyQZemwAd6cCR5/XFWLYZRIMpX39AR0tjaGGiGzLVyhse5C9RKC6ai42ppWPKiBagOvaYk8lO7DajerabOZP46Lby5wKjw1HCRx7p9sVMOWGzb/vA1hwiWc6jm3MvQDTogQkiqIhJV0nBQBTU+3okKCFDy9WwferkHjtxib7t3xIUQtHxnIwtx4mpg26/HfwVNVDb4oI9RHmx5WGelRVlrtiw43zboCLaxv46AZeB3IlTkwouebTr1y2NjSpHz68WNFjHvupy3q8TFn3Hos2IAk4Ju5dCo8B3wP7VPr/FGaKiG+T+v+TQqIrOqMTL1VdWV1DdmcbO8KXBz6esmYWYKPwDL5b5FA1a0hwapHiom0r/cKaoqr+27/XcrS5UwSMbQAAAABJRU5ErkJggg==)](https://deepwiki.com/cwtickle/danoniplus)
6
7
  [![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/cwtickle/danoniplus?sort=semver)](https://github.com/cwtickle/danoniplus/security/policy)
7
8
  [![GitHub All Releases](https://img.shields.io/github/downloads/cwtickle/danoniplus/total?color=%23ff3399&label=downloads%20%28recently%29)](https://github.com/cwtickle/danoniplus/releases)
8
9
  [![GitHub](https://img.shields.io/github/license/cwtickle/danoniplus)](https://github.com/cwtickle/danoniplus/blob/develop/LICENSE)
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/03/15
7
+ * Revised : 2026/03/20
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 46.1.0`;
12
- const g_revisedDate = `2026/03/15`;
11
+ const g_version = `Ver 46.2.1`;
12
+ const g_revisedDate = `2026/03/20`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -8783,11 +8783,14 @@ const exSettingInit = () => {
8783
8783
  * 拡張設定込みの標準設定
8784
8784
  * @param {any[]} _spriteList
8785
8785
  * @param {string} _name
8786
- * @param {{ defaultList?: string[], displayName?: string }} [options={}]
8786
+ * @param {{ defaultList?: string[], displayName?: string, func?: function, funcEx?: function }} [options={}]
8787
8787
  * @param {string[]} [options.defaultList=[C_FLG_OFF]] 拡張設定未使用の設定リスト
8788
8788
  * @param {string} [options.displayName='exSetting']
8789
+ * @param {function} [options.func=()=>true] 通常ボタン用追加関数
8790
+ * @param {function} [options.funcEx=()=>true] 拡張ボタン用追加関数
8789
8791
  */
8790
- const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF], displayName = `exSetting` } = {}) => {
8792
+ const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF], displayName = `exSetting`,
8793
+ func = () => true, funcEx = () => true } = {}) => {
8791
8794
  if (_spriteList?.[_name] === undefined) return;
8792
8795
 
8793
8796
  /**
@@ -8815,11 +8818,13 @@ const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF],
8815
8818
  createCss2Button(`lnk${toCapitalize(_name)}Type`, getStgDetailName(g_stateObj[`${_name}Type`]),
8816
8819
  () => {
8817
8820
  setSetting(1, `${_name}Type`, { maxSiz: g_limitObj.difSelectorSiz });
8821
+ funcEx();
8818
8822
  createExpandedScView(_name);
8819
8823
  },
8820
8824
  Object.assign({
8821
8825
  cxtFunc: () => {
8822
8826
  setSetting(-1, `${_name}Type`, { maxSiz: g_limitObj.difSelectorSiz });
8827
+ funcEx();
8823
8828
  createExpandedScView(_name);
8824
8829
  },
8825
8830
  title: g_msgObj[`${_name}Type`] ?? ``,
@@ -8846,6 +8851,7 @@ const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF],
8846
8851
  if (typeEnabled) {
8847
8852
  setExpandedBtnSiz();
8848
8853
  }
8854
+ func();
8849
8855
  },
8850
8856
  });
8851
8857
  if (typeEnabled) {
@@ -10262,7 +10268,11 @@ const applyMirror = (_keyNum, _shuffleGroup, _swapFlg = false) => {
10262
10268
  const mirStyle = structuredClone(style);
10263
10269
 
10264
10270
  if (_swapFlg) {
10265
- style.forEach((group, i) => g_settings.swapPattern.forEach(val => swapGroupNums(style, group, i, val)));
10271
+ style.forEach((group, i) => {
10272
+ g_settings.swapPattern.forEach(val => {
10273
+ swapGroupNums(style, group, i, val);
10274
+ });
10275
+ });
10266
10276
  let swapUseFlg = false;
10267
10277
  style.forEach((_group, j) => {
10268
10278
  _group.forEach((val, k) => {
@@ -11937,6 +11947,56 @@ const getArrowSettings = () => {
11937
11947
  g_workObj.orgFlatFlg = g_workObj.dividePos.every(v => v % 2 === g_workObj.dividePos[0] % 2);
11938
11948
  g_stateObj.layerNumDf = Math.max(g_stateObj.layerNumDf, Math.ceil((Math.max(...g_workObj.dividePos) + 1) / 2) * 2);
11939
11949
 
11950
+ // Swapping設定に応じたステップゾーンの入れ替え
11951
+ // Mirror+のみ事前にオリジナルの位置を設定済みのためスキップする
11952
+ if (g_workObj.stepX_df.length === 0) {
11953
+ g_workObj.stepX_df = structuredClone(g_workObj.stepX);
11954
+ }
11955
+ if (g_stateObj.swapping.endsWith(`Mirror`)) {
11956
+
11957
+ // Swappingにおけるグループ単位での入れ替えでは、上下でステップゾーンが分かれている場合は分離してシャッフルする
11958
+ let _style = structuredClone(Object.values(g_workObj.shuffleGroupMap));
11959
+ const _styleTrans = _style.flatMap(arr => {
11960
+ // g_workObj.devidePosの値ごとにグループ化する
11961
+ const groups = {};
11962
+
11963
+ arr.forEach(n => {
11964
+ const div = g_workObj.dividePos[n];
11965
+ if (!groups[div]) groups[div] = [];
11966
+ groups[div].push(n);
11967
+ });
11968
+
11969
+ // groups は {0:[...], 1:[...], 2:[...]} のような形になるので
11970
+ // これを配列に変換して返す
11971
+ return Object.values(groups);
11972
+ });
11973
+ const _styleTransDf = structuredClone(Object.values(_styleTrans));
11974
+
11975
+ if (g_stateObj.swapping === `Mirror`) {
11976
+ _styleTrans.map(_group => _group.reverse());
11977
+
11978
+ } else if (g_stateObj.swapping === `X-Mirror`) {
11979
+ // X-Mirrorの場合、グループの内側だけ入れ替える
11980
+ _styleTrans.forEach((group, i) => {
11981
+ g_settings.swapPattern.forEach(val => {
11982
+ swapGroupNums(_styleTrans, group, i, val);
11983
+ });
11984
+ });
11985
+ }
11986
+ // オリジナルと同一の場合、設定をOFFに戻す
11987
+ if (JSON.stringify(_styleTransDf) === JSON.stringify(_styleTrans)) {
11988
+ g_stateObj.swapping = C_FLG_OFF;
11989
+ g_settings.swappingNum = 0;
11990
+ }
11991
+
11992
+ // 入れ替えた結果に合わせてX座標位置を入れ替える
11993
+ _styleTrans.forEach((_group, _i) => {
11994
+ _group.forEach((_val, _j) => {
11995
+ g_workObj.stepX[_group[_j]] = g_workObj.stepX_df[_styleTransDf[_i][_j]];
11996
+ });
11997
+ });
11998
+ }
11999
+
11940
12000
  // StepArea(Default, Halfway以外)によるレイヤー移動
11941
12001
  // ずらした位置に表示するため、レイヤーを倍化して倍化した先に割り当てる
11942
12002
  const assignLayer = _func => {
@@ -12020,30 +12080,6 @@ const getArrowSettings = () => {
12020
12080
  g_workObj.backX = (g_workObj.nonDefaultSc && g_headerObj.playingLayout ? g_headerObj.scAreaWidth : 0);
12021
12081
  g_workObj.playingX = g_headerObj.playingX + g_workObj.backX;
12022
12082
 
12023
- // Swapping設定に応じたステップゾーンの入れ替え
12024
- // Mirror+のみ事前にオリジナルの位置を設定済みのためスキップする
12025
- if (g_workObj.stepX_df.length === 0) {
12026
- g_workObj.stepX_df = structuredClone(g_workObj.stepX);
12027
- }
12028
- if (g_stateObj.swapping.endsWith(`Mirror`)) {
12029
-
12030
- let _style = structuredClone(Object.values(g_workObj.shuffleGroupMap));
12031
- if (g_stateObj.swapping === `Mirror`) {
12032
- _style.map(_group => _group.reverse());
12033
-
12034
- } else if (g_stateObj.swapping === `X-Mirror`) {
12035
- // X-Mirrorの場合、グループの内側だけ入れ替える
12036
- _style.forEach((group, i) => g_settings.swapPattern.forEach(val => swapGroupNums(_style, group, i, val)));
12037
- }
12038
-
12039
- // 入れ替えた結果に合わせてX座標位置を入れ替える
12040
- _style.forEach((_group, _i) => {
12041
- _group.forEach((_val, _j) => {
12042
- g_workObj.stepX[_group[_j]] = g_workObj.stepX_df[g_workObj.shuffleGroupMap[_i][_j]];
12043
- });
12044
- });
12045
- }
12046
-
12047
12083
  // FrzReturnの初期化
12048
12084
  g_workObj.frzReturnFlg = false;
12049
12085
  g_workObj.frzReturnSeq = g_frzReturnSeqFunc.get(g_stateObj.frzReturnType)();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "46.1.0",
3
+ "version": "46.2.1",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "./js/danoni_main.js",
6
6
  "scripts": {