danoniplus 28.4.0 → 28.5.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.
Files changed (2) hide show
  1. package/js/danoni_main.js +42 -14
  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 : 2022/10/20
7
+ * Revised : 2022/10/30
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 28.4.0`;
12
- const g_revisedDate = `2022/10/20`;
11
+ const g_version = `Ver 28.5.1`;
12
+ const g_revisedDate = `2022/10/30`;
13
13
  const g_alphaVersion = ``;
14
14
 
15
15
  // カスタム用バージョン (danoni_custom.js 等で指定可)
@@ -7420,6 +7420,8 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
7420
7420
 
7421
7421
  /** 矢印の移動距離 */
7422
7422
  g_workObj.initY = [];
7423
+ /** 矢印の移動距離 (Motion加算分) */
7424
+ g_workObj.initBoostY = [];
7423
7425
  /** 矢印がステップゾーンに到達するまでのフレーム数 */
7424
7426
  g_workObj.arrivalFrame = [];
7425
7427
  /** Motionの適用フレーム数 */
@@ -7473,6 +7475,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
7473
7475
  g_workObj.initY[frmPrev] = tmpObj.startY;
7474
7476
  g_workObj.arrivalFrame[frmPrev] = tmpObj.arrivalFrm;
7475
7477
  g_workObj.motionFrame[frmPrev] = tmpObj.motionFrm;
7478
+ g_workObj.initBoostY[frmPrev] = sumData(g_workObj.motionOnFrames.filter((val, j) => j < g_workObj.motionFrame[frmPrev]));
7476
7479
 
7477
7480
  if (_frzFlg) {
7478
7481
  g_workObj[`mk${camelHeader}Length`][_j] = [];
@@ -7500,6 +7503,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
7500
7503
  g_workObj.initY[tmpFrame] = g_workObj.initY[frmPrev];
7501
7504
  g_workObj.arrivalFrame[tmpFrame] = g_workObj.arrivalFrame[frmPrev];
7502
7505
  g_workObj.motionFrame[tmpFrame] = g_workObj.motionFrame[frmPrev];
7506
+ g_workObj.initBoostY[tmpFrame] = sumData(g_workObj.motionOnFrames.filter((val, j) => j < g_workObj.motionFrame[frmPrev]));
7503
7507
 
7504
7508
  } else {
7505
7509
 
@@ -7516,6 +7520,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
7516
7520
  g_workObj.initY[frmPrev] = tmpObj.startY;
7517
7521
  g_workObj.arrivalFrame[frmPrev] = tmpObj.arrivalFrm;
7518
7522
  g_workObj.motionFrame[frmPrev] = tmpObj.motionFrm;
7523
+ g_workObj.initBoostY[frmPrev] = sumData(g_workObj.motionOnFrames.filter((val, j) => j < g_workObj.motionFrame[frmPrev]));
7519
7524
  }
7520
7525
 
7521
7526
  // 出現タイミングを保存
@@ -8320,7 +8325,7 @@ const mainInit = _ => {
8320
8325
 
8321
8326
  // フレーム数
8322
8327
  divRoot.appendChild(
8323
- createDivCss2Label(`lblframe`, g_scoreObj.nominalFrameNum, { x: 0, y: 0, w: 100, h: 30, siz: 20, display: g_workObj.lifegaugeDisp, })
8328
+ createDivCss2Label(`lblframe`, g_scoreObj.baseFrame, { x: 0, y: 0, w: 100, h: 30, siz: 20, display: g_workObj.lifegaugeDisp, })
8324
8329
  );
8325
8330
 
8326
8331
  // ライフ(数字)部作成
@@ -8773,7 +8778,12 @@ const mainInit = _ => {
8773
8778
  judgeMotionFunc.dummyArrowON = (_j, _arrowName, _cnt) => judgeMotionFunc.dummyArrowOFF(_j, _arrowName, _cnt);
8774
8779
 
8775
8780
  /**
8776
- * 次フリーズアローへ判定を移すかチェック
8781
+ * 次矢印・フリーズアローへ判定を移すかチェック
8782
+ *
8783
+ * - 判定対象の矢印/フリーズアローが未判定の状態で、現在の矢印/フリーズアローの判定領域が回復判定内に入った場合、
8784
+ * 自身より前の判定をNG判定とした上で、判定対象の矢印/フリーズアローを強制的に削除
8785
+ * - ただし、判定対象の矢印/フリーズアローがジャスト付近の場合は判定対象を優先する
8786
+ * (フリーズアローの場合、ヒット中の場合も判定対象が優先される)
8777
8787
  *
8778
8788
  * @param _j 矢印の位置
8779
8789
  * @param _k 矢印の表示順
@@ -8781,22 +8791,39 @@ const mainInit = _ => {
8781
8791
  */
8782
8792
  const judgeNextFunc = {
8783
8793
 
8794
+ arrowOFF: (_j, _k, _cnt) => {
8795
+
8796
+ if (g_workObj.judgArrowCnt[_j] === _k - 1 && _cnt <= g_judgObj.arrowJ[g_judgPosObj.shakin]) {
8797
+ const prevArrowName = `arrow${_j}_${g_workObj.judgArrowCnt[_j]}`;
8798
+
8799
+ if (g_attrObj[prevArrowName].cnt < (-1) * g_judgObj.arrowJ[g_judgPosObj.ii]) {
8800
+
8801
+ // 自身より前の矢印が未判定の場合、強制的に枠外判定を行い矢印を削除
8802
+ if (g_attrObj[prevArrowName].cnt >= (-1) * g_judgObj.arrowJ[g_judgPosObj.uwan]) {
8803
+ judgeUwan(g_attrObj[prevArrowName].cnt);
8804
+ judgeObjDelete.arrow(_j, prevArrowName);
8805
+ }
8806
+ }
8807
+ }
8808
+ },
8809
+
8810
+ arrowON: (_j, _k, _cnt) => true,
8811
+ dummyArrowOFF: (_j, _k, _cnt) => true,
8812
+ dummyArrowON: (_j, _k, _cnt) => true,
8813
+
8784
8814
  frzOFF: (_j, _k, _cnt) => {
8785
8815
 
8786
- // フリーズアローの判定領域に入った場合、前のフリーズアローを強制的に削除
8787
- // ただし、前のフリーズアローが押下中または判定領域がジャスト付近(キター領域)の場合は削除しない
8788
- // 削除する場合、前のフリーズアローの判定はイクナイ(&ウワァン)扱い
8789
- if (g_workObj.judgFrzCnt[_j] !== _k && _cnt <= g_judgObj.frzJ[g_judgPosObj.sfsf] + 1) {
8816
+ if (g_workObj.judgFrzCnt[_j] === _k - 1 && _cnt <= g_judgObj.frzJ[g_judgPosObj.sfsf]) {
8790
8817
  const prevFrzName = `frz${_j}_${g_workObj.judgFrzCnt[_j]}`;
8791
8818
 
8792
8819
  if (g_attrObj[prevFrzName].isMoving &&
8793
8820
  g_attrObj[prevFrzName].cnt < (-1) * g_judgObj.frzJ[g_judgPosObj.kita]) {
8794
8821
 
8795
- // 枠外判定前の場合、このタイミングで枠外判定を行う
8822
+ // 自身より前のフリーズアローが未判定の場合、強制的に枠外判定を行いフリーズアローを削除
8796
8823
  if (g_attrObj[prevFrzName].cnt >= (-1) * g_judgObj.frzJ[g_judgPosObj.iknai]) {
8797
- judgeIknai(_cnt);
8824
+ judgeIknai(g_attrObj[prevFrzName].cnt);
8798
8825
  if (g_headerObj.frzStartjdgUse) {
8799
- judgeUwan(_cnt);
8826
+ judgeUwan(g_attrObj[prevFrzName].cnt);
8800
8827
  }
8801
8828
  }
8802
8829
  judgeObjDelete.frz(_j, prevFrzName);
@@ -8852,7 +8879,7 @@ const mainInit = _ => {
8852
8879
  const arrowName = `${_name}${_j}_${_arrowCnt}`;
8853
8880
  const firstPosY = C_STEP_Y + g_posObj.reverseStepY * dividePos +
8854
8881
  (g_workObj.initY[g_scoreObj.frameNum] * g_workObj.boostSpd +
8855
- sumData(g_workObj.motionOnFrames.filter((val, j) => j < g_workObj.motionFrame[g_scoreObj.frameNum])) * g_workObj.boostDir) * g_workObj.scrollDir[_j];
8882
+ g_workObj.initBoostY[g_scoreObj.frameNum] * g_workObj.boostDir) * g_workObj.scrollDir[_j];
8856
8883
 
8857
8884
  const stepRoot = createEmptySprite(arrowSprite[dividePos], arrowName, {
8858
8885
  x: g_workObj.stepX[_j], y: firstPosY, w: C_ARW_WIDTH, h: C_ARW_WIDTH,
@@ -8913,6 +8940,7 @@ const mainInit = _ => {
8913
8940
  g_attrObj[arrowName].boostCnt--;
8914
8941
  }
8915
8942
  judgeMotionFunc[`${_name}${g_stateObj.autoAll}`](_j, arrowName, --g_attrObj[arrowName].cnt);
8943
+ judgeNextFunc[`${_name}${g_stateObj.autoAll}`](_j, _k, g_attrObj[arrowName].cnt);
8916
8944
  };
8917
8945
 
8918
8946
  /**
@@ -8929,7 +8957,7 @@ const mainInit = _ => {
8929
8957
  const frzName = `${_name}${frzNo}`;
8930
8958
  const firstPosY = C_STEP_Y + g_posObj.reverseStepY * dividePos +
8931
8959
  (g_workObj.initY[g_scoreObj.frameNum] * g_workObj.boostSpd +
8932
- sumData(g_workObj.motionOnFrames.filter((val, j) => j < g_workObj.motionFrame[g_scoreObj.frameNum])) * g_workObj.boostDir) * g_workObj.scrollDir[_j];
8960
+ g_workObj.initBoostY[g_scoreObj.frameNum] * g_workObj.boostDir) * g_workObj.scrollDir[_j];
8933
8961
  const firstBarLength = g_workObj[`mk${toCapitalize(_name)}Length`][_j][(_arrowCnt - 1) * 2] * g_workObj.boostSpd;
8934
8962
 
8935
8963
  const frzRoot = createEmptySprite(arrowSprite[dividePos], frzName, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "28.4.0",
3
+ "version": "28.5.1",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {