sonolus-next-rush-engine 1.0.6 → 1.0.7

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.
@@ -87,7 +87,7 @@ const guideKindMapping = {
87
87
  6: ConnectorKind.GUIDE_CYAN,
88
88
  7: ConnectorKind.GUIDE_BLACK,
89
89
  };
90
- const LEGACY_DEFAULT_NOTE_DURATION = 2;
90
+ const LEGACY_HIDDEN_POP_NOTE_SPEED = 10;
91
91
  const LEGACY_MIN_HIDDEN_POP_WINDOW = 1 / 30;
92
92
  class ExtData {
93
93
  constructor(entities) {
@@ -157,6 +157,9 @@ function unlerp(a, b, x) {
157
157
  function clamp01(x) {
158
158
  return Math.min(1, Math.max(0, x));
159
159
  }
160
+ function legacyNoteDuration(noteSpeed) {
161
+ return lerp(0.35, 4, unlerp(12, 1, noteSpeed) ** 1.31);
162
+ }
160
163
  function applyEase(type, x) {
161
164
  const t = clamp01(x);
162
165
  switch (type) {
@@ -472,7 +475,8 @@ export const extendedToLevelData = (data, offset = 0) => {
472
475
  function getLegacyHiddenPopWindow(headOriginal, tailOriginal) {
473
476
  const headTime = beatToTime(getNum(headOriginal, '#BEAT'));
474
477
  const tailTime = beatToTime(getNum(tailOriginal, '#BEAT'));
475
- return Math.max(LEGACY_MIN_HIDDEN_POP_WINDOW, LEGACY_DEFAULT_NOTE_DURATION - (headTime - tailTime));
478
+ const noteDuration = legacyNoteDuration(LEGACY_HIDDEN_POP_NOTE_SPEED);
479
+ return Math.max(LEGACY_MIN_HIDDEN_POP_WINDOW, noteDuration - (headTime - tailTime));
476
480
  }
477
481
  for (const { idx, e } of ext.connectors) {
478
482
  const startRef = getField(e, 'start');
@@ -514,6 +518,7 @@ export const extendedToLevelData = (data, offset = 0) => {
514
518
  const ease = easeTypeMapping[getNum(e, 'ease')] ?? EaseType.LINEAR;
515
519
  const tsg = headOriginal ? getTSG(getField(headOriginal, 'timeScaleGroup')) : undefined;
516
520
  const reverseHiddenPopConnector = isReverseHiddenPopConnector(rawHeadOriginal, tailOriginal);
521
+ const hasActiveSlide = !reverseHiddenPopConnector;
517
522
  const splitAnchors = headOriginal && tailOriginal && !reverseHiddenPopConnector
518
523
  ? getConnectorSplitAnchors(headOriginal, tailOriginal, tsg, kind, ease)
519
524
  : [];
@@ -530,8 +535,10 @@ export const extendedToLevelData = (data, offset = 0) => {
530
535
  connector.set('tail', tail);
531
536
  connector.set('segmentHead', segmentHead);
532
537
  connector.set('segmentTail', tail);
533
- connector.set('activeHead', activeHead);
534
- connector.set('activeTail', activeTail);
538
+ if (hasActiveSlide) {
539
+ connector.set('activeHead', activeHead);
540
+ connector.set('activeTail', activeTail);
541
+ }
535
542
  finalEntities.push(connector);
536
543
  }
537
544
  else {
@@ -543,16 +550,20 @@ export const extendedToLevelData = (data, offset = 0) => {
543
550
  connector.set('tail', segmentTail);
544
551
  connector.set('segmentHead', segmentHead);
545
552
  connector.set('segmentTail', segmentTail);
546
- connector.set('activeHead', activeHead);
547
- connector.set('activeTail', activeTail);
553
+ if (hasActiveSlide) {
554
+ connector.set('activeHead', activeHead);
555
+ connector.set('activeTail', activeTail);
556
+ }
548
557
  finalEntities.push(connector);
549
558
  }
550
559
  }
551
560
  const connectorLink = new EntityBuilder('Connector');
552
561
  connectorLink.set('head', head);
553
562
  connectorLink.set('tail', tail);
554
- connectorLink.set('activeHead', activeHead);
555
- connectorLink.set('activeTail', activeTail);
563
+ if (hasActiveSlide) {
564
+ connectorLink.set('activeHead', activeHead);
565
+ connectorLink.set('activeTail', activeTail);
566
+ }
556
567
  for (const segmentHead of segmentNotes.slice(0, -1)) {
557
568
  segmentHead.set('connectorEase', segmentEase);
558
569
  segmentHead.set('segmentKind', kind);
@@ -560,7 +571,9 @@ export const extendedToLevelData = (data, offset = 0) => {
560
571
  }
561
572
  tail.set('segmentKind', kind);
562
573
  tail.set('segmentAlpha', 1);
563
- activeHead.set('segmentKind', kind);
574
+ if (hasActiveSlide) {
575
+ activeHead.set('segmentKind', kind);
576
+ }
564
577
  connectorsByIndex.set(idx, connectorLink);
565
578
  if (e.name)
566
579
  connectorsByName.set(e.name, connectorLink);
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@ import { USC } from './usc/index.js';
7
7
  export * from './usc/index.js';
8
8
  export { type ExtendedEntityData, type ExtendedEntityDataField, extendedToLevelData, mmwsToUSC, susToUSC, ucmmwsToLevelData, uscToLevelData, };
9
9
  export declare const convertToLevelData: (input: string | Uint8Array | USC | LevelData, offset?: number) => LevelData;
10
- export declare const version = "1.0.6";
10
+ export declare const version = "1.0.7";
11
11
  export declare const databaseEngineItem: {
12
12
  readonly name: "next-rush";
13
13
  readonly version: 13;
package/dist/index.js CHANGED
@@ -65,7 +65,7 @@ export const convertToLevelData = (input, offset = 0) => {
65
65
  }
66
66
  return uscToLevelData(usc, offset, true, true);
67
67
  };
68
- export const version = '1.0.6';
68
+ export const version = '1.0.7';
69
69
  export const databaseEngineItem = {
70
70
  name: 'next-rush',
71
71
  version: 13,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sonolus-next-rush-engine",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "Perspective-lane rhythm game for Sonolus",
5
5
  "author": "Hyeon2",
6
6
  "repository": {