danoniplus 39.1.0 → 39.2.0

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/js/danoni_main.js CHANGED
@@ -4,12 +4,12 @@
4
4
  *
5
5
  * Source by tickle
6
6
  * Created : 2018/10/08
7
- * Revised : 2025/02/04
7
+ * Revised : 2025/02/08
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 39.1.0`;
12
- const g_revisedDate = `2025/02/04`;
11
+ const g_version = `Ver 39.2.0`;
12
+ const g_revisedDate = `2025/02/08`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -9814,6 +9814,9 @@ const getArrowSettings = () => {
9814
9814
  g_workObj.drunkXFlg = false;
9815
9815
  g_workObj.drunkYFlg = false;
9816
9816
 
9817
+ // AppearanceFilterの可視範囲設定
9818
+ g_workObj.aprFilterCnt = 0;
9819
+
9817
9820
  if (g_stateObj.dataSaveFlg) {
9818
9821
  // ローカルストレージへAdjustment, HitPosition, Volume設定を保存
9819
9822
  g_storeSettings.forEach(setting => g_localStorage[setting] = g_stateObj[setting]);
@@ -9977,35 +9980,42 @@ const mainInit = () => {
9977
9980
  g_keyObj[`div${keyCtrlPtn}`] < g_keyObj[`${g_keyObj.defaultProp}${keyCtrlPtn}`].length);
9978
9981
  g_workObj.stepZoneDisp = (g_stateObj.d_stepzone === C_FLG_OFF || g_workObj.flatMode) ? C_DIS_NONE : C_DIS_INHERIT;
9979
9982
 
9980
- // Hidden+, Sudden+用のライン、パーセント表示
9981
- const filterCss = g_stateObj.filterLock === C_FLG_OFF ? g_cssObj.life_Failed : g_cssObj.life_Cleared;
9982
- [`filterBar0`, `filterBar1`, `borderBar0`, `borderBar1`].forEach(obj =>
9983
- mainSprite.appendChild(createColorObject2(obj, g_lblPosObj.filterBar, filterCss)));
9984
- borderBar0.style.top = wUnit(g_posObj.stepDiffY + g_stateObj.hitPosition);
9985
- borderBar1.style.top = wUnit(g_posObj.stepDiffY + g_posObj.arrowHeight - g_stateObj.hitPosition);
9986
-
9987
- if (g_appearanceRanges.includes(g_stateObj.appearance)) {
9988
- mainSprite.appendChild(createDivCss2Label(`filterView`, ``, g_lblPosObj.filterView));
9989
- if (g_stateObj.d_filterline === C_FLG_ON) {
9990
- $id(`filterView`).opacity = g_stateObj.opacity / 100;
9991
- $id(`filterBar0`).opacity = g_stateObj.opacity / 100;
9992
- $id(`filterBar1`).opacity = g_stateObj.opacity / 100;
9993
- }
9994
- }
9995
-
9996
9983
  // mainSprite配下に層別のスプライトを作成し、ステップゾーン・矢印本体・フリーズアローヒット部分に分ける
9997
9984
  const mainSpriteN = [], stepSprite = [], arrowSprite = [], frzHitSprite = [];
9998
9985
  const mainCommonPos = { w: g_headerObj.playingWidth, h: g_posObj.arrowHeight };
9986
+
9987
+ // Hidden+, Sudden+用のライン、パーセント表示
9988
+ const filterCss = g_stateObj.filterLock === C_FLG_OFF ? g_cssObj.life_Failed : g_cssObj.life_Cleared;
9989
+ const doubleFilterFlg = ![`Default`, `Halfway`].includes(g_stateObj.stepArea);
9990
+
9999
9991
  for (let j = 0; j < g_stateObj.layerNum; j++) {
10000
9992
  const mainSpriteJ = createEmptySprite(mainSprite, `mainSprite${j}`, mainCommonPos);
10001
9993
  mainSpriteN.push(mainSpriteJ);
9994
+ mainSpriteJ.appendChild(createColorObject2(`filterBar${j}`, g_lblPosObj.filterBar, filterCss));
9995
+ if (doubleFilterFlg) {
9996
+ mainSpriteJ.appendChild(createColorObject2(`filterBar${j % 2 == 0 ? j + 1 : j - 1}_HS`, g_lblPosObj.filterBar, filterCss));
9997
+ }
10002
9998
  addTransform(`mainSprite${j}`, `mainSprite${j}`,
10003
9999
  g_keyObj[`layerTrans${keyCtrlPtn}`]?.[0]?.[Math.floor(j / 2) + (j + Number(g_stateObj.reverse === C_FLG_ON)) % 2]);
10000
+
10004
10001
  stepSprite.push(createEmptySprite(mainSpriteJ, `stepSprite${j}`, mainCommonPos));
10005
10002
  arrowSprite.push(createEmptySprite(mainSpriteJ, `arrowSprite${j}`, Object.assign({ y: g_workObj.hitPosition * (j % 2 === 0 ? 1 : -1) }, mainCommonPos)));
10006
10003
  frzHitSprite.push(createEmptySprite(mainSpriteJ, `frzHitSprite${j}`, mainCommonPos));
10007
10004
  }
10008
10005
 
10006
+ if (g_appearanceRanges.includes(g_stateObj.appearance)) {
10007
+ mainSprite.appendChild(createDivCss2Label(`filterView`, ``, g_lblPosObj.filterView));
10008
+ if (g_stateObj.d_filterline === C_FLG_ON) {
10009
+ $id(`filterView`).opacity = g_stateObj.opacity / 100;
10010
+ for (let j = 0; j < g_stateObj.layerNum; j++) {
10011
+ $id(`filterBar${j}`).opacity = g_stateObj.opacity / 100;
10012
+ if (doubleFilterFlg) {
10013
+ $id(`filterBar${j}_HS`).opacity = g_stateObj.opacity / 100;
10014
+ }
10015
+ }
10016
+ }
10017
+ }
10018
+
10009
10019
  // ステップゾーン、フリーズアローヒット部分の生成
10010
10020
  for (let j = 0; j < keyNum; j++) {
10011
10021
  makeStepZone(j, keyCtrlPtn);
@@ -10039,7 +10049,7 @@ const mainInit = () => {
10039
10049
 
10040
10050
  // Appearanceのオプション適用時は一部描画を隠す
10041
10051
  changeAppearanceFilter(g_appearanceRanges.includes(g_stateObj.appearance) ?
10042
- g_hidSudObj.filterPos : g_hidSudObj.filterPosDefault[g_stateObj.appearance]);
10052
+ g_hidSudObj.filterPos : g_hidSudObj.filterPosDefault[g_stateObj.appearance], true);
10043
10053
 
10044
10054
  // 現在の矢印・フリーズアローの速度、個別加算速度の初期化 (速度変化時に直す)
10045
10055
  g_workObj.currentSpeed = 2;
@@ -11319,8 +11329,9 @@ const makeStepZone = (_j, _keyCtrlPtn) => {
11319
11329
  /**
11320
11330
  * アルファマスクの再描画 (Appearance: Hidden+, Sudden+ 用)
11321
11331
  * @param {number} _num
11332
+ * @param {boolean} _shiftFlg シフトキーを押したかどうかのフラグ
11322
11333
  */
11323
- const changeAppearanceFilter = (_num = 10) => {
11334
+ const changeAppearanceFilter = (_num = 10, _shiftFlg = keyIsShift()) => {
11324
11335
  const MAX_FILTER_POS = 100;
11325
11336
  const topNum = g_hidSudObj[g_stateObj.appearance];
11326
11337
  const bottomNum = (g_hidSudObj[g_stateObj.appearance] + 1) % 2;
@@ -11331,16 +11342,39 @@ const changeAppearanceFilter = (_num = 10) => {
11331
11342
  const numPlus = (g_stateObj.appearance === `Hid&Sud+` ? _num : 0);
11332
11343
  const topShape = `inset(${_num}% 0% ${numPlus}% 0%)`;
11333
11344
  const bottomShape = `inset(${numPlus}% 0% ${_num}% 0%)`;
11345
+ const appearPers = [_num, MAX_FILTER_POS - _num];
11334
11346
 
11335
11347
  for (let j = 0; j < g_stateObj.layerNum; j += 2) {
11336
11348
  $id(`arrowSprite${topNum + j}`).clipPath = topShape;
11337
11349
  $id(`arrowSprite${bottomNum + j}`).clipPath = bottomShape;
11350
+
11351
+ $id(`filterBar${topNum + j}`).top = wUnit(parseFloat($id(`arrowSprite${j}`).top) + g_posObj.arrowHeight * appearPers[topNum] / MAX_FILTER_POS);
11352
+ $id(`filterBar${bottomNum + j}`).top = wUnit(parseFloat($id(`arrowSprite${j + 1}`).top) + g_posObj.arrowHeight * appearPers[bottomNum] / MAX_FILTER_POS);
11353
+
11354
+ if (![`Default`, `Halfway`].includes(g_stateObj.stepArea)) {
11355
+ $id(`filterBar${bottomNum + j}_HS`).top = wUnit(parseFloat($id(`arrowSprite${j}`).top) + g_posObj.arrowHeight * appearPers[bottomNum] / MAX_FILTER_POS);
11356
+ $id(`filterBar${topNum + j}_HS`).top = wUnit(parseFloat($id(`arrowSprite${j + 1}`).top) + g_posObj.arrowHeight * appearPers[topNum] / MAX_FILTER_POS);
11357
+ }
11358
+
11359
+ // 階層が多い場合はShift+pgUp/pgDownで表示する階層グループを切り替え
11360
+ if (_shiftFlg && g_stateObj.d_filterline === C_FLG_ON) {
11361
+ [`${topNum + j}`, `${bottomNum + j}`].forEach(type => {
11362
+ $id(`filterBar${type}`).display = (j === g_workObj.aprFilterCnt ? C_DIS_INHERIT : C_DIS_NONE);
11363
+
11364
+ if (![`Default`, `Halfway`].includes(g_stateObj.stepArea)) {
11365
+ $id(`filterBar${type}_HS`).display = (j === g_workObj.aprFilterCnt ? C_DIS_INHERIT : C_DIS_NONE);
11366
+ }
11367
+ });
11368
+ }
11369
+ }
11370
+
11371
+ if (_shiftFlg) {
11372
+ g_workObj.aprFilterCnt = nextPos(g_workObj.aprFilterCnt, 2, g_stateObj.layerNum);
11338
11373
  }
11339
- $id(`filterBar0`).top = wUnit(parseFloat($id(`arrowSprite${topNum}`).top) + g_posObj.arrowHeight * _num / MAX_FILTER_POS);
11340
- $id(`filterBar1`).top = wUnit(parseFloat($id(`arrowSprite${bottomNum}`).top) + g_posObj.arrowHeight * (MAX_FILTER_POS - _num) / MAX_FILTER_POS);
11374
+
11341
11375
  if (g_appearanceRanges.includes(g_stateObj.appearance)) {
11342
11376
  $id(`filterView`).top =
11343
- $id(`filterBar${g_hidSudObj.std[g_stateObj.appearance][g_stateObj.reverse]}`).top;
11377
+ $id(`filterBar${(g_hidSudObj.std[g_stateObj.appearance][g_stateObj.reverse]) % 2}`).top;
11344
11378
  filterView.textContent = `${_num}%`;
11345
11379
 
11346
11380
  if (g_stateObj.appearance !== `Hid&Sud+` && g_workObj.dividePos.every(v => v === g_workObj.dividePos[0])) {
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2025/02/04 (v39.1.0)
8
+ * Revised : 2025/02/08 (v39.2.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -1228,25 +1228,19 @@ const g_stepAreaFunc = {
1228
1228
  });
1229
1229
  },
1230
1230
  'Mismatched': () => {
1231
- [`stepSprite`, `arrowSprite`, `frzHitSprite`].forEach(sprite => {
1232
- for (let j = 0; j < g_stateObj.layerNum; j++) {
1233
- addTransform(`${sprite}${j}`, `stepArea`, `rotate(${(j % 2 === 0 ? 1 : -1) * -15}deg)`);
1234
- }
1235
- });
1231
+ for (let j = 0; j < g_stateObj.layerNum; j++) {
1232
+ addTransform(`mainSprite${j}`, `stepArea`, `rotate(${(j % 2 === 0 ? 1 : -1) * -15}deg)`);
1233
+ }
1236
1234
  },
1237
1235
  'R-Mismatched': () => {
1238
- [`stepSprite`, `arrowSprite`, `frzHitSprite`].forEach(sprite => {
1239
- for (let j = 0; j < g_stateObj.layerNum; j++) {
1240
- addTransform(`${sprite}${j}`, `stepArea`, `rotate(${(j % 2 === 0 ? 1 : -1) * 15}deg)`);
1241
- }
1242
- });
1236
+ for (let j = 0; j < g_stateObj.layerNum; j++) {
1237
+ addTransform(`mainSprite${j}`, `stepArea`, `rotate(${(j % 2 === 0 ? 1 : -1) * 15}deg)`);
1238
+ }
1243
1239
  },
1244
1240
  'X-Flower': () => {
1245
- [`stepSprite`, `arrowSprite`, `frzHitSprite`].forEach(sprite => {
1246
- for (let j = 0; j < Math.min(g_stateObj.layerNum, 4); j++) {
1247
- addTransform(`${sprite}${j}`, `stepArea`, `rotate(${(j % 2 === 0 ? 1 : -1) * (j % 4 < 2 ? 1 : -1) * -15}deg)`);
1248
- }
1249
- });
1241
+ for (let j = 0; j < Math.min(g_stateObj.layerNum, 4); j++) {
1242
+ addTransform(`mainSprite${j}`, `stepArea`, `rotate(${(j % 2 === 0 ? 1 : -1) * (j % 4 < 2 ? 1 : -1) * -15}deg)`);
1243
+ }
1250
1244
  },
1251
1245
  };
1252
1246
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "39.1.0",
3
+ "version": "39.2.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {