danoniplus 51.4.0 → 51.4.2

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 : 2026/10/12
7
+ * Revised : 2026/10/24
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 51.4.0`;
12
- const g_revisedDate = `2026/10/12`;
11
+ const g_version = `Ver 51.4.2`;
12
+ const g_revisedDate = `2026/10/24`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2026/10/12 (v51.4.0)
8
+ * Revised : 2026/10/24 (v51.4.2)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -207,7 +207,7 @@ const updateWindowSiz = () => {
207
207
  keyTitleSprite: { x: g_btnX(1 / 4), y: g_sHeight / 2 - 5, w: g_btnWidth(1 / 2), h: 16 },
208
208
  mSelectTitleSprite: { x: g_btnX(), y: 0, w: g_btnWidth(), h: g_sHeight, clipPath: `inset(12% 0 8% 0)` },
209
209
  settingSumSprite: { x: g_btnX() + 25, y: g_sHeight - 200, w: g_btnWidth() - 50, h: 100, pointerEvents: C_DIS_AUTO, overflow: C_DIS_AUTO },
210
- optionSprite: { x: (g_sWidth - 450) / 2, y: 65, w: 450, h: 325 },
210
+ optionSprite: { x: (g_sWidth - 450) / 2, y: 65, w: g_sWidth / 2 + 225, h: 325 },
211
211
  dataSprite: { x: g_btnX() + (g_sWidth - Math.max(g_sWidth - 100, 450)) / 2, y: 65, w: Math.max(g_sWidth - 100, 450), h: 325 },
212
212
  keyListSprite: { x: 0, y: g_limitObj.setLblHeight * 7.5 + 40, w: 150, h: g_sHeight - 380, overflow: C_DIS_AUTO },
213
213
  difList: { x: 165, y: 60, w: 280, h: 270 + g_sHeight - 500, overflow: C_DIS_AUTO, pointerEvents: C_DIS_AUTO },
@@ -1595,17 +1595,18 @@ const g_transPriority = {
1595
1595
  */
1596
1596
  const joinTransforms = _transformMap => {
1597
1597
  if (_transformMap.size === 1) {
1598
- return _transformMap.values().next().value.transform;
1598
+ return _transformMap.values().next().value.transform ?? ``;
1599
1599
  }
1600
1600
  if (_transformMap.size === 2) {
1601
1601
  const it = _transformMap.values();
1602
1602
  const a = it.next().value;
1603
1603
  const b = it.next().value;
1604
- return b.priority > a.priority ? `${b.transform} ${a.transform}` : `${a.transform} ${b.transform}`;
1604
+ const [ta, tb] = [a.transform ?? ``, b.transform ?? ``];
1605
+ return b.priority > a.priority ? `${tb} ${ta}` : `${ta} ${tb}`;
1605
1606
  }
1606
1607
  return Array.from(_transformMap.values())
1607
1608
  .sort((a, b) => b.priority - a.priority)
1608
- .map(v => v.transform)
1609
+ .map(v => v.transform ?? ``)
1609
1610
  .join(` `);
1610
1611
  };
1611
1612
 
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2026/09/13
8
- * Revised : 2026/10/10 (v51.3.0)
8
+ * Revised : 2026/10/20 (v51.4.1)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -2466,6 +2466,7 @@ const getArrowSettings = (_retryFlg = false) => {
2466
2466
 
2467
2467
  // FrzReturnの初期化
2468
2468
  g_workObj.frzReturnFlg = false;
2469
+ g_workObj.frzReturnPausedFlg = false;
2469
2470
  g_workObj.frzReturnSeq = g_frzReturnSeqFunc.get(g_stateObj.frzReturnType)();
2470
2471
  if (g_workObj.frzReturnTimerId) {
2471
2472
  g_timerHandler.clearTimeout(g_workObj.frzReturnTimerId);
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2026/09/13
8
- * Revised : 2026/10/07 (v51.2.2)
8
+ * Revised : 2026/10/24 (v51.4.2)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -106,8 +106,10 @@ const mainInit = () => {
106
106
  // レイヤーごとのTransition設定
107
107
  // StepAreaオプションにより、レイヤーが倍化される場合があるため基準レイヤー数ごとに設定
108
108
  const transj = j % g_stateObj.layerNumDf;
109
- addTransform(`mainSprite${j}`, `mainSprite${j}`,
110
- g_workObj.layerTrans[Math.floor(transj / 2) * 2 + (transj + Number(g_stateObj.reverse === C_FLG_ON)) % 2], g_transPriority.layer);
109
+ const layerTrans = g_workObj.layerTrans[Math.floor(transj / 2) * 2 + (transj + Number(g_stateObj.reverse === C_FLG_ON)) % 2];
110
+ if (layerTrans !== undefined) {
111
+ addTransform(`mainSprite${j}`, `mainSprite${j}`, layerTrans, g_transPriority.layer);
112
+ }
111
113
 
112
114
  stepSprite.push(createEmptySprite(mainSpriteJ, `stepSprite${j}`, mainCommonPos));
113
115
  arrowSprite.push(createEmptySprite(mainSpriteJ, `arrowSprite${j}`, { ...mainCommonPos, y: g_workObj.hitPosition * (j % 2 === 0 ? 1 : -1) }));
@@ -405,10 +407,12 @@ const mainInit = () => {
405
407
  };
406
408
  Object.keys(jdgMainScoreObj).forEach(jdgScore =>
407
409
  infoSprite.appendChild(
408
- makeCounterSymbol(`lbl${jdgScore}`,
409
- g_headerObj.playingWidth - 110 + (g_workObj.nonDefaultSc ? g_headerObj.scAreaWidth : 0),
410
- g_cssObj[`common_${jdgMainScoreObj[jdgScore][0]}`], jdgMainScoreObj[jdgScore][1] + 1, 0, g_workObj.scoreDisp
411
- )
410
+ createDivCss2Label(`lbl${jdgScore}`, 0, {
411
+ x: g_headerObj.playingWidth - 110 + (g_workObj.nonDefaultSc ? g_headerObj.scAreaWidth : 0),
412
+ y: g_limitObj.jdgCntsHeight * (jdgMainScoreObj[jdgScore][1] + 1),
413
+ w: g_limitObj.jdgCntsWidth, h: g_limitObj.jdgCntsHeight, siz: g_limitObj.jdgCntsSiz, align: C_ALIGN_RIGHT,
414
+ display: g_workObj.scoreDisp,
415
+ }, g_cssObj[`common_${jdgMainScoreObj[jdgScore][0]}`])
412
416
  )
413
417
  );
414
418
 
@@ -1116,8 +1120,9 @@ const mainInit = () => {
1116
1120
 
1117
1121
  // 移動
1118
1122
  updateArrowPos(arrowName, currentArrow);
1123
+ currentArrow.cnt--;
1119
1124
 
1120
- funcs.judgeMotion(_j, arrowName, --currentArrow.cnt);
1125
+ funcs.judgeMotion(_j, arrowName, currentArrow.cnt);
1121
1126
  funcs.judgeNext(_j, _k, currentArrow.cnt);
1122
1127
  };
1123
1128
 
@@ -1273,7 +1278,7 @@ const mainInit = () => {
1273
1278
  * @param {string} _frzName
1274
1279
  * @param {object} _frz g_attrObj[_frzName]
1275
1280
  */
1276
- const movFrzMoving = (_j, _k, _name, _frzName, _frz) => {
1281
+ const movFrz = (_j, _k, _name, _frzName, _frz) => {
1277
1282
 
1278
1283
  // 全体色変化 (通常時)
1279
1284
  changeColorOnFrame(_j, _k, _name, `Normal`);
@@ -1295,7 +1300,7 @@ const mainInit = () => {
1295
1300
  * @param {object} _frz g_attrObj[_frzName]
1296
1301
  * @param {number} _movY 1フレームあたりの移動量
1297
1302
  */
1298
- const movFrzHolding = (_j, _k, _name, _frzName, _frz, _movY) => {
1303
+ const holdFrz = (_j, _k, _name, _frzName, _frz, _movY) => {
1299
1304
  const funcs = objFuncs[_name];
1300
1305
 
1301
1306
  // 全体色変化 (ヒット時)
@@ -1332,7 +1337,7 @@ const mainInit = () => {
1332
1337
  * @param {object} _frz g_attrObj[_frzName]
1333
1338
  * @param {number} _movY 1フレームあたりの移動量
1334
1339
  */
1335
- const movFrzEnded = (_j, _name, _frzName, _frz, _movY) => {
1340
+ const endFrz = (_j, _name, _frzName, _frz, _movY) => {
1336
1341
  _frz.frzBarLength -= _movY * _frz.dir;
1337
1342
  if (_frz.frzBarLength > 0) {
1338
1343
  _frz.y -= _movY;
@@ -1354,14 +1359,14 @@ const mainInit = () => {
1354
1359
  const movY = g_workObj.currentSpeed * currentFrz.boostSpd * currentFrz.dir;
1355
1360
 
1356
1361
  if (currentFrz.judgEndFlg) {
1357
- movFrzEnded(_j, _name, frzName, currentFrz, movY);
1362
+ endFrz(_j, _name, frzName, currentFrz, movY);
1358
1363
  return;
1359
1364
  }
1360
1365
 
1361
1366
  if (currentFrz.isMoving) {
1362
- movFrzMoving(_j, _k, _name, frzName, currentFrz);
1367
+ movFrz(_j, _k, _name, frzName, currentFrz);
1363
1368
  } else {
1364
- movFrzHolding(_j, _k, _name, frzName, currentFrz, movY);
1369
+ holdFrz(_j, _k, _name, frzName, currentFrz, movY);
1365
1370
  }
1366
1371
 
1367
1372
  // フリーズアローが枠外に出たときの処理
@@ -1426,8 +1431,7 @@ const mainInit = () => {
1426
1431
  } else if (/\[fontSize=\d+\]/.test(wordDat)) {
1427
1432
 
1428
1433
  // フォントサイズ変更
1429
- const fontSize = setIntVal(wordDat.match(/\d+/)[0], g_limitObj.mainSiz);
1430
- styWord.fontSize = wUnit(fontSize);
1434
+ styWord.fontSize = wUnit(setIntVal(wordDat.match(/\d+/)[0], g_limitObj.mainSiz));
1431
1435
 
1432
1436
  } else {
1433
1437
 
@@ -1435,9 +1439,10 @@ const mainInit = () => {
1435
1439
  const fadeFinished = _currentFrame - g_workObj.lastFadeFrame[wordDepth] >= g_workObj.wordFadeFrame[wordDepth];
1436
1440
  if (fadeFinished) {
1437
1441
  [`Out`, `In`].forEach(type => {
1438
- if (g_wordObj[`fade${type}Flg${wordDepth}`]) {
1442
+ const key = `fade${type}Flg${wordDepth}`;
1443
+ if (g_wordObj[key]) {
1439
1444
  styWord.animationName = `none`;
1440
- g_wordObj[`fade${type}Flg${wordDepth}`] = false;
1445
+ g_wordObj[key] = false;
1441
1446
  }
1442
1447
  });
1443
1448
  }
@@ -1729,6 +1734,7 @@ const mainInit = () => {
1729
1734
  // FrzReturn演出はflowTimelineと独立したタイマーで動いているため、
1730
1735
  // 一時停止時点で早期終了させる(位置復元はせず、通常終了時と同じ後片付けを行う)
1731
1736
  resetFrzReturn();
1737
+ g_workObj.frzReturnPausedFlg = true;
1732
1738
  }
1733
1739
  g_timerHandler.clearTimeout(g_timeoutEvtId);
1734
1740
  g_audio.pause();
@@ -1805,6 +1811,11 @@ const mainInit = () => {
1805
1811
  pausedElapsedTime = null;
1806
1812
  pausedStartAdjustment = null;
1807
1813
  g_timeoutEvtId = g_timerHandler.setTimeout(flowTimeline, 1000 / g_fps);
1814
+
1815
+ if (g_workObj.frzReturnPausedFlg) {
1816
+ startFrzReturn();
1817
+ g_workObj.frzReturnPausedFlg = false;
1818
+ }
1808
1819
  };
1809
1820
 
1810
1821
  const tick = _remaining => {
@@ -2059,24 +2070,6 @@ const changeAppearanceFilter = (_num = 10) => {
2059
2070
  return doubleFilterFlg;
2060
2071
  };
2061
2072
 
2062
- /**
2063
- * 判定カウンタ表示作成
2064
- * @param {string} _id
2065
- * @param {number} _x
2066
- * @param {string} _class
2067
- * @param {number} _heightPos
2068
- * @param {string|number} _text
2069
- * @param {string} [_display='inherit'] 表示有無 (inherit: 表示 / none: 非表示)
2070
- * @returns {HTMLDivElement}
2071
- */
2072
- const makeCounterSymbol = (_id, _x, _class, _heightPos, _text, _display = C_DIS_INHERIT) => {
2073
- return createDivCss2Label(_id, _text, {
2074
- x: _x, y: g_limitObj.jdgCntsHeight * _heightPos,
2075
- w: g_limitObj.jdgCntsWidth, h: g_limitObj.jdgCntsHeight, siz: g_limitObj.jdgCntsSiz, align: C_ALIGN_RIGHT,
2076
- display: _display,
2077
- }, _class);
2078
- };
2079
-
2080
2073
  /**
2081
2074
  * ステップゾーンの表示・非表示切替
2082
2075
  * @param {number} _j
@@ -2156,6 +2149,7 @@ const executeFrzReturn = (_seq, _idx, _axis) => {
2156
2149
  // 画面がプレイ画面から移動した場合
2157
2150
  g_workObj.frzReturnFlg = false;
2158
2151
  g_workObj.frzReturnTimerId = null;
2152
+ g_workObj.frzReturnPausedFlg = false;
2159
2153
  return;
2160
2154
  }
2161
2155
 
@@ -2600,11 +2594,10 @@ const changeLifeColor = (_state = ``) => {
2600
2594
 
2601
2595
  if (_state !== `` && _state !== g_workObj.currentLifeState) {
2602
2596
  const lifeCss = g_cssObj[`life_${_state}`];
2603
- lblLife.classList.remove(g_cssObj.life_Max, g_cssObj.life_Cleared, g_cssObj.life_Failed);
2604
- lifeBar.classList.remove(g_cssObj.life_Max, g_cssObj.life_Cleared, g_cssObj.life_Failed);
2605
- lblLife.classList.add(lifeCss);
2606
- lifeBar.classList.add(lifeCss);
2607
-
2597
+ [lblLife, lifeBar].forEach(elm => {
2598
+ elm.classList.remove(g_cssObj.life_Max, g_cssObj.life_Cleared, g_cssObj.life_Failed);
2599
+ elm.classList.add(lifeCss);
2600
+ });
2608
2601
  g_workObj.currentLifeState = _state;
2609
2602
  }
2610
2603
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "51.4.0",
3
+ "version": "51.4.2",
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",