sonolus-next-rush-engine 1.0.7 → 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_HIDDEN_POP_NOTE_SPEED = 10;
91
- const LEGACY_MIN_HIDDEN_POP_WINDOW = 1 / 30;
92
90
  class ExtData {
93
91
  constructor(entities) {
94
92
  this.byArch = new Map();
@@ -157,9 +155,6 @@ function unlerp(a, b, x) {
157
155
  function clamp01(x) {
158
156
  return Math.min(1, Math.max(0, x));
159
157
  }
160
- function legacyNoteDuration(noteSpeed) {
161
- return lerp(0.35, 4, unlerp(12, 1, noteSpeed) ** 1.31);
162
- }
163
158
  function applyEase(type, x) {
164
159
  const t = clamp01(x);
165
160
  switch (type) {
@@ -339,28 +334,6 @@ export const extendedToLevelData = (data, offset = 0) => {
339
334
  }
340
335
  return scaledTime;
341
336
  }
342
- function createHideUntilTimescaleGroup(showBeat) {
343
- const group = new EntityBuilder('#TIMESCALE_GROUP');
344
- const hide = new EntityBuilder('#TIMESCALE_CHANGE');
345
- const show = new EntityBuilder('#TIMESCALE_CHANGE');
346
- const hideBeat = Math.min(0, showBeat - 1e-6);
347
- hide.set('#BEAT', hideBeat);
348
- hide.set('#TIMESCALE', 1);
349
- hide.set('#TIMESCALE_SKIP', 0);
350
- hide.set('#TIMESCALE_GROUP', group);
351
- hide.set('#TIMESCALE_EASE', 0);
352
- hide.set('hideNotes', 1);
353
- hide.set('next', show);
354
- show.set('#BEAT', showBeat);
355
- show.set('#TIMESCALE', 1);
356
- show.set('#TIMESCALE_SKIP', 0);
357
- show.set('#TIMESCALE_GROUP', group);
358
- show.set('#TIMESCALE_EASE', 0);
359
- show.set('hideNotes', 0);
360
- group.set('first', hide);
361
- finalEntities.push(group, hide, show);
362
- return group;
363
- }
364
337
  const notesByIndex = new Map();
365
338
  const notesByName = new Map();
366
339
  const connectorsByIndex = new Map();
@@ -472,12 +445,6 @@ export const extendedToLevelData = (data, offset = 0) => {
472
445
  return false;
473
446
  return getNum(tailOriginal, '#BEAT') < getNum(headOriginal, '#BEAT') - 1e-6;
474
447
  }
475
- function getLegacyHiddenPopWindow(headOriginal, tailOriginal) {
476
- const headTime = beatToTime(getNum(headOriginal, '#BEAT'));
477
- const tailTime = beatToTime(getNum(tailOriginal, '#BEAT'));
478
- const noteDuration = legacyNoteDuration(LEGACY_HIDDEN_POP_NOTE_SPEED);
479
- return Math.max(LEGACY_MIN_HIDDEN_POP_WINDOW, noteDuration - (headTime - tailTime));
480
- }
481
448
  for (const { idx, e } of ext.connectors) {
482
449
  const startRef = getField(e, 'start');
483
450
  const headRef = getField(e, 'head');
@@ -525,16 +492,13 @@ export const extendedToLevelData = (data, offset = 0) => {
525
492
  const segmentEase = splitAnchors.length > 0 ? EaseType.LINEAR : ease;
526
493
  const segmentNotes = [head, ...splitAnchors, tail];
527
494
  if (reverseHiddenPopConnector && rawHeadOriginal && tailOriginal) {
528
- const popWindow = getLegacyHiddenPopWindow(rawHeadOriginal, tailOriginal);
529
- const showTime = beatToTime(getNum(tailOriginal, '#BEAT')) - popWindow;
530
- const showBeat = timeToBeat(showTime);
531
- const gateTsg = createHideUntilTimescaleGroup(showBeat);
532
- 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);
533
496
  const connector = new EntityBuilder('Connector');
534
497
  connector.set('head', head);
535
498
  connector.set('tail', tail);
536
499
  connector.set('segmentHead', segmentHead);
537
500
  connector.set('segmentTail', tail);
501
+ connector.set('legacyHiddenPop', 1);
538
502
  if (hasActiveSlide) {
539
503
  connector.set('activeHead', activeHead);
540
504
  connector.set('activeTail', activeTail);
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.7";
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.7';
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.7",
3
+ "version": "1.0.8",
4
4
  "description": "Perspective-lane rhythm game for Sonolus",
5
5
  "author": "Hyeon2",
6
6
  "repository": {