danoniplus 37.2.1 → 37.3.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 +63 -30
  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 : 2024/06/30
7
+ * Revised : 2024/07/07
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 37.2.1`;
12
- const g_revisedDate = `2024/06/30`;
11
+ const g_version = `Ver 37.3.1`;
12
+ const g_revisedDate = `2024/07/07`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -2406,7 +2406,7 @@ const storeBaseData = (_scoreId, _scoreObj, _keyCtrlPtn) => {
2406
2406
  g_detailObj.maxDensity[_scoreId] = getMaxValIdxs(densityData, g_limitObj.densityMaxVals).flat();
2407
2407
 
2408
2408
  g_detailObj.arrowCnt[_scoreId] = noteCnt.arrow.concat();
2409
- g_detailObj.frzCnt[_scoreId] = noteCnt.frz.concat();
2409
+ g_detailObj.frzCnt[_scoreId] = noteCnt.frz.map((val, k) => _scoreObj.frzData[k].length % 2 === 0 ? val : val - 0.5);
2410
2410
  g_detailObj.startFrame[_scoreId] = startFrame;
2411
2411
  g_detailObj.playingFrame[_scoreId] = playingFrame;
2412
2412
  g_detailObj.playingFrameWithBlank[_scoreId] = lastFrame - startFrame;
@@ -4977,7 +4977,7 @@ const makeDifInfoLabels = _scoreId => {
4977
4977
  const makeDifInfo = _scoreId => {
4978
4978
 
4979
4979
  const arrowCnts = sumData(g_detailObj.arrowCnt[_scoreId]);
4980
- const frzCnts = sumData(g_detailObj.frzCnt[_scoreId]);
4980
+ const frzCnts = sumData(g_detailObj.frzCnt[_scoreId].map(val => Math.floor(val)));
4981
4981
  const push3CntStr = (g_detailObj.toolDif[_scoreId].push3.length === 0 ? `None` : `(${g_detailObj.toolDif[_scoreId].push3.join(', ')})`);
4982
4982
 
4983
4983
  if (document.getElementById(`lblTooldif`) === null) {
@@ -5011,6 +5011,9 @@ const makeDifInfo = _scoreId => {
5011
5011
  array[j] = (val === minVal ? `<span class="settings_minArrowCnts">${val}</span>` :
5012
5012
  (val === maxVal ? `<span class="settings_maxArrowCnts common_bold">${val}</span>` : val));
5013
5013
  }
5014
+ if (val - Math.floor(val) > 0) {
5015
+ array[j] = `<span class="keyconfig_warning">${val}</span>`;
5016
+ }
5014
5017
  });
5015
5018
  cntlistStr += array.join(`, `) + ` ]`;
5016
5019
  });
@@ -7513,7 +7516,7 @@ const loadingScoreInit = async () => {
7513
7516
  g_allArrow = 0;
7514
7517
  g_allFrz = 0;
7515
7518
  g_scoreObj.arrowData.forEach(data => g_allArrow += data.length);
7516
- g_scoreObj.frzData.forEach(data => g_allFrz += data.length);
7519
+ g_scoreObj.frzData.forEach(data => g_allFrz += Math.floor(data.length / 2) * 2);
7517
7520
 
7518
7521
  // ライフ回復・ダメージ量の計算
7519
7522
  // フリーズ始点でも通常判定させる場合は総矢印数を水増しする
@@ -8463,9 +8466,24 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
8463
8466
  /** Motionの適用フレーム数 */
8464
8467
  g_workObj.motionFrame = [];
8465
8468
 
8466
- const setNotes = (_j, _k, _data, _startPoint, _header, _frzFlg = false) => {
8469
+ const setNotes = (_j, _k, _data, _startPoint, _header, _frzFlg = false, { initY, initBoostY, arrivalFrame, motionFrame } = {}) => {
8467
8470
  if (_startPoint >= 0) {
8468
- g_workObj[`mk${_header}Arrow`][_startPoint]?.push(_j) || (g_workObj[`mk${_header}Arrow`][_startPoint] = [_j]);
8471
+ const arrowAttrs = { pos: _j, initY, initBoostY, arrivalFrame, motionFrame };
8472
+ if (g_workObj[`mk${_header}Arrow`][_startPoint] === undefined) {
8473
+ g_workObj[`mk${_header}Arrow`][_startPoint] = [arrowAttrs];
8474
+ } else {
8475
+ let insertFlg = false;
8476
+ for (let m = 0; m < g_workObj[`mk${_header}Arrow`][_startPoint].length; m++) {
8477
+ if (arrowAttrs.arrivalFrame < g_workObj[`mk${_header}Arrow`][_startPoint][m].arrivalFrame) {
8478
+ g_workObj[`mk${_header}Arrow`][_startPoint].splice(m, 0, arrowAttrs);
8479
+ insertFlg = true;
8480
+ break;
8481
+ }
8482
+ }
8483
+ if (!insertFlg) {
8484
+ g_workObj[`mk${_header}Arrow`][_startPoint].push(arrowAttrs);
8485
+ }
8486
+ }
8469
8487
  if (_frzFlg) {
8470
8488
  g_workObj[`mk${_header}Length`][_j][_k] = getFrzLength(_speedOnFrame, _data[_k], _data[_k + 1]);
8471
8489
  }
@@ -8481,6 +8499,9 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
8481
8499
 
8482
8500
  const camelHeader = toCapitalize(_header);
8483
8501
  const setcnt = (_frzFlg ? 2 : 1);
8502
+ if (_frzFlg && _data.length % 2 !== 0) {
8503
+ _data.pop();
8504
+ }
8484
8505
 
8485
8506
  const startPoint = [];
8486
8507
  let spdNext = Infinity;
@@ -8502,7 +8523,8 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
8502
8523
  if (_frzFlg) {
8503
8524
  g_workObj[`mk${camelHeader}Length`][_j] = [];
8504
8525
  }
8505
- setNotes(_j, lastk, _data, startPoint[lastk], camelHeader, _frzFlg);
8526
+ setNotes(_j, lastk, _data, startPoint[lastk], camelHeader, _frzFlg,
8527
+ { initY: tmpObj.startY, initBoostY: g_workObj.initBoostY[frmPrev], arrivalFrame: tmpObj.arrivalFrm, motionFrame: tmpObj.motionFrm });
8506
8528
 
8507
8529
  // 矢印は1つずつ、フリーズアローは2つで1セット
8508
8530
  for (let k = lastk - setcnt; k >= 0; k -= setcnt) {
@@ -8546,7 +8568,9 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
8546
8568
  }
8547
8569
 
8548
8570
  // 出現タイミングを保存
8549
- setNotes(_j, k, _data, startPoint[k], camelHeader, _frzFlg);
8571
+ setNotes(_j, k, _data, startPoint[k], camelHeader, _frzFlg,
8572
+ { initY: tmpObj.startY, initBoostY: g_workObj.initBoostY[frmPrev], arrivalFrame: tmpObj.arrivalFrm, motionFrame: tmpObj.motionFrm }
8573
+ );
8550
8574
  }
8551
8575
  };
8552
8576
 
@@ -8994,6 +9018,11 @@ const getArrowSettings = _ => {
8994
9018
  g_keyCopyLists.simpleDef.forEach(header => updateKeyInfo(header, keyCtrlPtn));
8995
9019
  g_headerObj.tuning = g_headerObj.creatorNames[g_stateObj.scoreId];
8996
9020
 
9021
+ delete g_workObj.initY;
9022
+ delete g_workObj.initBoostY;
9023
+ delete g_workObj.arrivalFrame;
9024
+ delete g_workObj.motionFrame;
9025
+
8997
9026
  g_workObj.stepX = [];
8998
9027
  g_workObj.scrollDir = [];
8999
9028
  g_workObj.scrollDirDefault = [];
@@ -10002,27 +10031,30 @@ const mainInit = _ => {
10002
10031
 
10003
10032
  /**
10004
10033
  * 矢印生成
10005
- * @param {number} _j 矢印の位置
10034
+ * @param {number} _attrs 矢印個別の属性
10035
+ * (pos: 矢印種類, arrivalFrame: 到達フレーム数, initY: 初期表示位置,
10036
+ * initBoostY: Motion有効時の初期表示位置加算, motionFrame: アニメーション有効フレーム数)
10006
10037
  * @param {number} _arrowCnt 現在の判定矢印順
10007
10038
  * @param {string} _name 矢印名
10008
10039
  * @param {string} _color 矢印色
10009
10040
  * @param {string} _shadowColor 矢印塗りつぶし部分の色
10010
10041
  */
10011
- const makeArrow = (_j, _arrowCnt, _name, _color, _shadowColor) => {
10042
+ const makeArrow = (_attrs, _arrowCnt, _name, _color, _shadowColor) => {
10043
+ const _j = _attrs.pos;
10012
10044
  const dividePos = g_workObj.dividePos[_j];
10013
10045
  const colorPos = g_keyObj[`color${keyCtrlPtn}`][_j];
10014
10046
 
10015
10047
  const arrowName = `${_name}${_j}_${_arrowCnt}`;
10016
10048
  const firstPosY = C_STEP_Y + g_posObj.reverseStepY * dividePos +
10017
- (g_workObj.initY[g_scoreObj.frameNum] * g_workObj.boostSpd +
10018
- g_workObj.initBoostY[g_scoreObj.frameNum] * g_workObj.boostDir) * g_workObj.scrollDir[_j];
10049
+ (_attrs.initY * g_workObj.boostSpd +
10050
+ _attrs.initBoostY * g_workObj.boostDir) * g_workObj.scrollDir[_j];
10019
10051
 
10020
10052
  const stepRoot = createEmptySprite(arrowSprite[dividePos], arrowName, {
10021
10053
  x: g_workObj.stepX[_j], y: firstPosY, w: C_ARW_WIDTH, h: C_ARW_WIDTH,
10022
10054
  });
10023
10055
  g_attrObj[arrowName] = {
10024
- cnt: g_workObj.arrivalFrame[g_scoreObj.frameNum] + 1,
10025
- boostCnt: g_workObj.motionFrame[g_scoreObj.frameNum],
10056
+ cnt: _attrs.arrivalFrame + 1,
10057
+ boostCnt: _attrs.motionFrame,
10026
10058
  boostSpd: g_workObj.boostSpd, dividePos: dividePos,
10027
10059
  dir: g_workObj.scrollDir[_j], boostDir: g_workObj.boostDir,
10028
10060
  prevY: firstPosY, y: firstPosY,
@@ -10032,7 +10064,7 @@ const mainInit = _ => {
10032
10064
 
10033
10065
  if (g_workObj[`${_name}CssMotions`][_j] !== ``) {
10034
10066
  stepRoot.classList.add(g_workObj[`${_name}CssMotions`][_j]);
10035
- stepRoot.style.animationDuration = `${g_workObj.arrivalFrame[g_scoreObj.frameNum] / g_fps}s`;
10067
+ stepRoot.style.animationDuration = `${_attrs.arrivalFrame / g_fps}s`;
10036
10068
  }
10037
10069
 
10038
10070
  // 内側塗りつぶし矢印は、下記の順で作成する。
@@ -10084,28 +10116,29 @@ const mainInit = _ => {
10084
10116
 
10085
10117
  /**
10086
10118
  * フリーズアロー生成
10087
- * @param {number} _j
10119
+ * @param {number} _attrs
10088
10120
  * @param {number} _arrowCnt
10089
10121
  * @param {string} _name
10090
10122
  * @param {string} _normalColor
10091
10123
  * @param {string} _barColor
10092
10124
  * @param {string} _shadowColor
10093
10125
  */
10094
- const makeFrzArrow = (_j, _arrowCnt, _name, _normalColor, _barColor, _shadowColor) => {
10126
+ const makeFrzArrow = (_attrs, _arrowCnt, _name, _normalColor, _barColor, _shadowColor) => {
10127
+ const _j = _attrs.pos;
10095
10128
  const dividePos = g_workObj.dividePos[_j];
10096
10129
  const frzNo = `${_j}_${_arrowCnt}`;
10097
10130
  const frzName = `${_name}${frzNo}`;
10098
10131
  const firstPosY = C_STEP_Y + g_posObj.reverseStepY * dividePos +
10099
- (g_workObj.initY[g_scoreObj.frameNum] * g_workObj.boostSpd +
10100
- g_workObj.initBoostY[g_scoreObj.frameNum] * g_workObj.boostDir) * g_workObj.scrollDir[_j];
10132
+ (_attrs.initY * g_workObj.boostSpd +
10133
+ _attrs.initBoostY * g_workObj.boostDir) * g_workObj.scrollDir[_j];
10101
10134
  const firstBarLength = g_workObj[`mk${toCapitalize(_name)}Length`][_j][(_arrowCnt - 1) * 2] * g_workObj.boostSpd;
10102
10135
 
10103
10136
  const frzRoot = createEmptySprite(arrowSprite[dividePos], frzName, {
10104
10137
  x: g_workObj.stepX[_j], y: firstPosY, w: C_ARW_WIDTH, h: C_ARW_WIDTH + firstBarLength,
10105
10138
  });
10106
10139
  g_attrObj[frzName] = {
10107
- cnt: g_workObj.arrivalFrame[g_scoreObj.frameNum] + 1,
10108
- boostCnt: g_workObj.motionFrame[g_scoreObj.frameNum],
10140
+ cnt: _attrs.arrivalFrame + 1,
10141
+ boostCnt: _attrs.motionFrame,
10109
10142
  judgEndFlg: false, isMoving: true, frzBarLength: firstBarLength, keyUpFrame: 0,
10110
10143
  boostSpd: g_workObj.boostSpd, dividePos: dividePos, dir: g_workObj.scrollDir[_j], boostDir: g_workObj.boostDir,
10111
10144
  y: firstPosY, barY: C_ARW_WIDTH / 2 - firstBarLength * dividePos, btmY: firstBarLength * g_workObj.scrollDir[_j],
@@ -10115,7 +10148,7 @@ const mainInit = _ => {
10115
10148
 
10116
10149
  if (g_workObj[`${_name}CssMotions`][_j] !== ``) {
10117
10150
  frzRoot.classList.add(g_workObj[`${_name}CssMotions`][_j]);
10118
- frzRoot.style.animationDuration = `${g_workObj.arrivalFrame[g_scoreObj.frameNum] / g_fps}s`;
10151
+ frzRoot.style.animationDuration = `${_attrs.arrivalFrame / g_fps}s`;
10119
10152
  }
10120
10153
  let shadowColor = _shadowColor === `Default` ? _normalColor : _shadowColor;
10121
10154
 
@@ -10312,21 +10345,21 @@ const mainInit = _ => {
10312
10345
 
10313
10346
  // ダミー矢印生成(背面に表示するため先に処理)
10314
10347
  g_workObj.mkDummyArrow[currentFrame]?.forEach(data =>
10315
- makeArrow(data, ++dummyArrowCnts[data], `dummyArrow`, g_workObj.dummyArrowColors[data], g_workObj.dummyArrowShadowColors[data]));
10348
+ makeArrow(data, ++dummyArrowCnts[data.pos], `dummyArrow`, g_workObj.dummyArrowColors[data.pos], g_workObj.dummyArrowShadowColors[data.pos]));
10316
10349
 
10317
10350
  // 矢印生成
10318
10351
  g_workObj.mkArrow[currentFrame]?.forEach(data =>
10319
- makeArrow(data, ++arrowCnts[data], `arrow`, g_workObj.arrowColors[data], g_workObj.arrowShadowColors[data]));
10352
+ makeArrow(data, ++arrowCnts[data.pos], `arrow`, g_workObj.arrowColors[data.pos], g_workObj.arrowShadowColors[data.pos]));
10320
10353
 
10321
10354
  // ダミーフリーズアロー生成
10322
10355
  g_workObj.mkDummyFrzArrow[currentFrame]?.forEach(data =>
10323
- makeFrzArrow(data, ++dummyFrzCnts[data], `dummyFrz`, g_workObj.dummyFrzNormalColors[data],
10324
- g_workObj.dummyFrzNormalBarColors[data], g_workObj.dummyFrzNormalShadowColors[data]));
10356
+ makeFrzArrow(data, ++dummyFrzCnts[data.pos], `dummyFrz`, g_workObj.dummyFrzNormalColors[data.pos],
10357
+ g_workObj.dummyFrzNormalBarColors[data.pos], g_workObj.dummyFrzNormalShadowColors[data.pos]));
10325
10358
 
10326
10359
  // フリーズアロー生成
10327
10360
  g_workObj.mkFrzArrow[currentFrame]?.forEach(data =>
10328
- makeFrzArrow(data, ++frzCnts[data], `frz`, g_workObj.frzNormalColors[data],
10329
- g_workObj.frzNormalBarColors[data], g_workObj.frzNormalShadowColors[data]));
10361
+ makeFrzArrow(data, ++frzCnts[data.pos], `frz`, g_workObj.frzNormalColors[data.pos],
10362
+ g_workObj.frzNormalBarColors[data.pos], g_workObj.frzNormalShadowColors[data.pos]));
10330
10363
 
10331
10364
  // 矢印・フリーズアロー移動&消去
10332
10365
  for (let j = 0; j < keyNum; j++) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "37.2.1",
3
+ "version": "37.3.1",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {