sonolus-next-rush-engine 1.0.6 → 1.0.8

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.
Binary file
Binary file
@@ -87,8 +87,6 @@ const guideKindMapping = {
87
87
  6: ConnectorKind.GUIDE_CYAN,
88
88
  7: ConnectorKind.GUIDE_BLACK,
89
89
  };
90
- const LEGACY_DEFAULT_NOTE_DURATION = 2;
91
- const LEGACY_MIN_HIDDEN_POP_WINDOW = 1 / 30;
92
90
  class ExtData {
93
91
  constructor(entities) {
94
92
  this.byArch = new Map();
@@ -336,28 +334,6 @@ export const extendedToLevelData = (data, offset = 0) => {
336
334
  }
337
335
  return scaledTime;
338
336
  }
339
- function createHideUntilTimescaleGroup(showBeat) {
340
- const group = new EntityBuilder('#TIMESCALE_GROUP');
341
- const hide = new EntityBuilder('#TIMESCALE_CHANGE');
342
- const show = new EntityBuilder('#TIMESCALE_CHANGE');
343
- const hideBeat = Math.min(0, showBeat - 1e-6);
344
- hide.set('#BEAT', hideBeat);
345
- hide.set('#TIMESCALE', 1);
346
- hide.set('#TIMESCALE_SKIP', 0);
347
- hide.set('#TIMESCALE_GROUP', group);
348
- hide.set('#TIMESCALE_EASE', 0);
349
- hide.set('hideNotes', 1);
350
- hide.set('next', show);
351
- show.set('#BEAT', showBeat);
352
- show.set('#TIMESCALE', 1);
353
- show.set('#TIMESCALE_SKIP', 0);
354
- show.set('#TIMESCALE_GROUP', group);
355
- show.set('#TIMESCALE_EASE', 0);
356
- show.set('hideNotes', 0);
357
- group.set('first', hide);
358
- finalEntities.push(group, hide, show);
359
- return group;
360
- }
361
337
  const notesByIndex = new Map();
362
338
  const notesByName = new Map();
363
339
  const connectorsByIndex = new Map();
@@ -469,11 +445,6 @@ export const extendedToLevelData = (data, offset = 0) => {
469
445
  return false;
470
446
  return getNum(tailOriginal, '#BEAT') < getNum(headOriginal, '#BEAT') - 1e-6;
471
447
  }
472
- function getLegacyHiddenPopWindow(headOriginal, tailOriginal) {
473
- const headTime = beatToTime(getNum(headOriginal, '#BEAT'));
474
- const tailTime = beatToTime(getNum(tailOriginal, '#BEAT'));
475
- return Math.max(LEGACY_MIN_HIDDEN_POP_WINDOW, LEGACY_DEFAULT_NOTE_DURATION - (headTime - tailTime));
476
- }
477
448
  for (const { idx, e } of ext.connectors) {
478
449
  const startRef = getField(e, 'start');
479
450
  const headRef = getField(e, 'head');
@@ -514,24 +485,24 @@ export const extendedToLevelData = (data, offset = 0) => {
514
485
  const ease = easeTypeMapping[getNum(e, 'ease')] ?? EaseType.LINEAR;
515
486
  const tsg = headOriginal ? getTSG(getField(headOriginal, 'timeScaleGroup')) : undefined;
516
487
  const reverseHiddenPopConnector = isReverseHiddenPopConnector(rawHeadOriginal, tailOriginal);
488
+ const hasActiveSlide = !reverseHiddenPopConnector;
517
489
  const splitAnchors = headOriginal && tailOriginal && !reverseHiddenPopConnector
518
490
  ? getConnectorSplitAnchors(headOriginal, tailOriginal, tsg, kind, ease)
519
491
  : [];
520
492
  const segmentEase = splitAnchors.length > 0 ? EaseType.LINEAR : ease;
521
493
  const segmentNotes = [head, ...splitAnchors, tail];
522
494
  if (reverseHiddenPopConnector && rawHeadOriginal && tailOriginal) {
523
- const popWindow = getLegacyHiddenPopWindow(rawHeadOriginal, tailOriginal);
524
- const showTime = beatToTime(getNum(tailOriginal, '#BEAT')) - popWindow;
525
- const showBeat = timeToBeat(showTime);
526
- const gateTsg = createHideUntilTimescaleGroup(showBeat);
527
- const segmentHead = createConnectorAnchor(getNum(rawHeadOriginal, '#BEAT'), getNum(rawHeadOriginal, 'lane'), getNum(rawHeadOriginal, 'size'), gateTsg, kind);
495
+ const segmentHead = createConnectorAnchor(getNum(rawHeadOriginal, '#BEAT'), getNum(rawHeadOriginal, 'lane'), getNum(rawHeadOriginal, 'size'), getTSG(getField(rawHeadOriginal, 'timeScaleGroup')) ?? tsg, kind);
528
496
  const connector = new EntityBuilder('Connector');
529
497
  connector.set('head', head);
530
498
  connector.set('tail', tail);
531
499
  connector.set('segmentHead', segmentHead);
532
500
  connector.set('segmentTail', tail);
533
- connector.set('activeHead', activeHead);
534
- connector.set('activeTail', activeTail);
501
+ connector.set('legacyHiddenPop', 1);
502
+ if (hasActiveSlide) {
503
+ connector.set('activeHead', activeHead);
504
+ connector.set('activeTail', activeTail);
505
+ }
535
506
  finalEntities.push(connector);
536
507
  }
537
508
  else {
@@ -543,16 +514,20 @@ export const extendedToLevelData = (data, offset = 0) => {
543
514
  connector.set('tail', segmentTail);
544
515
  connector.set('segmentHead', segmentHead);
545
516
  connector.set('segmentTail', segmentTail);
546
- connector.set('activeHead', activeHead);
547
- connector.set('activeTail', activeTail);
517
+ if (hasActiveSlide) {
518
+ connector.set('activeHead', activeHead);
519
+ connector.set('activeTail', activeTail);
520
+ }
548
521
  finalEntities.push(connector);
549
522
  }
550
523
  }
551
524
  const connectorLink = new EntityBuilder('Connector');
552
525
  connectorLink.set('head', head);
553
526
  connectorLink.set('tail', tail);
554
- connectorLink.set('activeHead', activeHead);
555
- connectorLink.set('activeTail', activeTail);
527
+ if (hasActiveSlide) {
528
+ connectorLink.set('activeHead', activeHead);
529
+ connectorLink.set('activeTail', activeTail);
530
+ }
556
531
  for (const segmentHead of segmentNotes.slice(0, -1)) {
557
532
  segmentHead.set('connectorEase', segmentEase);
558
533
  segmentHead.set('segmentKind', kind);
@@ -560,7 +535,9 @@ export const extendedToLevelData = (data, offset = 0) => {
560
535
  }
561
536
  tail.set('segmentKind', kind);
562
537
  tail.set('segmentAlpha', 1);
563
- activeHead.set('segmentKind', kind);
538
+ if (hasActiveSlide) {
539
+ activeHead.set('segmentKind', kind);
540
+ }
564
541
  connectorsByIndex.set(idx, connectorLink);
565
542
  if (e.name)
566
543
  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.8";
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.8';
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.8",
4
4
  "description": "Perspective-lane rhythm game for Sonolus",
5
5
  "author": "Hyeon2",
6
6
  "repository": {