sonolus-next-rush-plus-engine 1.5.6 → 1.5.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.
- package/dist/EnginePlayData +0 -0
- package/dist/EnginePreviewData +0 -0
- package/dist/EngineRom +0 -0
- package/dist/EngineTutorialData +0 -0
- package/dist/EngineWatchData +0 -0
- package/dist/extended/convert.d.ts +11 -0
- package/dist/extended/convert.js +358 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/package.json +4 -4
package/dist/EnginePlayData
CHANGED
|
Binary file
|
package/dist/EnginePreviewData
CHANGED
|
Binary file
|
package/dist/EngineRom
CHANGED
|
Binary file
|
package/dist/EngineTutorialData
CHANGED
|
Binary file
|
package/dist/EngineWatchData
CHANGED
|
Binary file
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type LevelData } from '@sonolus/core';
|
|
2
|
+
export type ExtendedEntityData = {
|
|
3
|
+
archetype: string;
|
|
4
|
+
data: Record<string, number | string>;
|
|
5
|
+
};
|
|
6
|
+
export type ExtendedLevelData = {
|
|
7
|
+
bgmOffset: number;
|
|
8
|
+
entities: ExtendedEntityData[];
|
|
9
|
+
};
|
|
10
|
+
/** Convert a PJSekaiExtendedLevelData to a Level Data (Next Sekai) */
|
|
11
|
+
export declare const extendedToLevelData: (data: ExtendedLevelData, offset?: number) => LevelData;
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
const ConnectorKind = {
|
|
2
|
+
ACTIVE_NORMAL: 1,
|
|
3
|
+
ACTIVE_CRITICAL: 2,
|
|
4
|
+
GUIDE_NEUTRAL: 101,
|
|
5
|
+
GUIDE_RED: 102,
|
|
6
|
+
GUIDE_GREEN: 103,
|
|
7
|
+
GUIDE_BLUE: 104,
|
|
8
|
+
GUIDE_YELLOW: 105,
|
|
9
|
+
GUIDE_PURPLE: 106,
|
|
10
|
+
GUIDE_CYAN: 107,
|
|
11
|
+
GUIDE_BLACK: 108,
|
|
12
|
+
};
|
|
13
|
+
const FlickDirection = {
|
|
14
|
+
UP_OMNI: 0,
|
|
15
|
+
UP_LEFT: 1,
|
|
16
|
+
UP_RIGHT: 2,
|
|
17
|
+
};
|
|
18
|
+
const EaseType = {
|
|
19
|
+
LINEAR: 1,
|
|
20
|
+
IN_QUAD: 2,
|
|
21
|
+
OUT_QUAD: 3,
|
|
22
|
+
IN_OUT_QUAD: 4,
|
|
23
|
+
OUT_IN_QUAD: 5,
|
|
24
|
+
};
|
|
25
|
+
const noteTypeMapping = {
|
|
26
|
+
NormalTapNote: 'NormalTapNote',
|
|
27
|
+
CriticalTapNote: 'CriticalTapNote',
|
|
28
|
+
NormalFlickNote: 'NormalFlickNote',
|
|
29
|
+
CriticalFlickNote: 'CriticalFlickNote',
|
|
30
|
+
NormalSlideStartNote: 'NormalHeadTapNote',
|
|
31
|
+
CriticalSlideStartNote: 'CriticalHeadTapNote',
|
|
32
|
+
NormalSlideEndNote: 'NormalTailReleaseNote',
|
|
33
|
+
CriticalSlideEndNote: 'CriticalTailReleaseNote',
|
|
34
|
+
NormalSlideEndFlickNote: 'NormalTailFlickNote',
|
|
35
|
+
CriticalSlideEndFlickNote: 'CriticalTailFlickNote',
|
|
36
|
+
IgnoredSlideTickNote: 'TransientHiddenTickNote',
|
|
37
|
+
NormalSlideTickNote: 'NormalTickNote',
|
|
38
|
+
CriticalSlideTickNote: 'CriticalTickNote',
|
|
39
|
+
HiddenSlideTickNote: 'AnchorNote',
|
|
40
|
+
NormalAttachedSlideTickNote: 'NormalTickNote',
|
|
41
|
+
CriticalAttachedSlideTickNote: 'CriticalTickNote',
|
|
42
|
+
NormalTraceNote: 'NormalTraceNote',
|
|
43
|
+
CriticalTraceNote: 'CriticalTraceNote',
|
|
44
|
+
DamageNote: 'DamageNote',
|
|
45
|
+
NormalTraceFlickNote: 'NormalTraceFlickNote',
|
|
46
|
+
CriticalTraceFlickNote: 'CriticalTraceFlickNote',
|
|
47
|
+
NonDirectionalTraceFlickNote: 'NormalTraceFlickNote',
|
|
48
|
+
HiddenSlideStartNote: 'AnchorNote',
|
|
49
|
+
NormalTraceSlideStartNote: 'NormalHeadTraceNote',
|
|
50
|
+
CriticalTraceSlideStartNote: 'CriticalHeadTraceNote',
|
|
51
|
+
NormalTraceSlideEndNote: 'NormalTailTraceNote',
|
|
52
|
+
CriticalTraceSlideEndNote: 'CriticalTailTraceNote',
|
|
53
|
+
};
|
|
54
|
+
const activeConnectorKindMapping = {
|
|
55
|
+
NormalSlideConnector: ConnectorKind.ACTIVE_NORMAL,
|
|
56
|
+
CriticalSlideConnector: ConnectorKind.ACTIVE_CRITICAL,
|
|
57
|
+
};
|
|
58
|
+
const flickDirectionMapping = {
|
|
59
|
+
[-1]: FlickDirection.UP_LEFT,
|
|
60
|
+
0: FlickDirection.UP_OMNI,
|
|
61
|
+
1: FlickDirection.UP_RIGHT,
|
|
62
|
+
};
|
|
63
|
+
const easeTypeMapping = {
|
|
64
|
+
[-2]: EaseType.OUT_IN_QUAD,
|
|
65
|
+
[-1]: EaseType.OUT_QUAD,
|
|
66
|
+
0: EaseType.LINEAR,
|
|
67
|
+
1: EaseType.IN_QUAD,
|
|
68
|
+
2: EaseType.IN_OUT_QUAD,
|
|
69
|
+
};
|
|
70
|
+
const fadeAlphaMapping = {
|
|
71
|
+
0: [1.0, 0.0],
|
|
72
|
+
1: [1.0, 1.0],
|
|
73
|
+
2: [0.0, 1.0],
|
|
74
|
+
};
|
|
75
|
+
const guideKindMapping = {
|
|
76
|
+
0: ConnectorKind.GUIDE_NEUTRAL,
|
|
77
|
+
1: ConnectorKind.GUIDE_RED,
|
|
78
|
+
2: ConnectorKind.GUIDE_GREEN,
|
|
79
|
+
3: ConnectorKind.GUIDE_BLUE,
|
|
80
|
+
4: ConnectorKind.GUIDE_YELLOW,
|
|
81
|
+
5: ConnectorKind.GUIDE_PURPLE,
|
|
82
|
+
6: ConnectorKind.GUIDE_CYAN,
|
|
83
|
+
7: ConnectorKind.GUIDE_BLACK,
|
|
84
|
+
};
|
|
85
|
+
/** Convert a PJSekaiExtendedLevelData to a Level Data (Next Sekai) */
|
|
86
|
+
export const extendedToLevelData = (data, offset = 0) => {
|
|
87
|
+
const allIntermediateEntities = [];
|
|
88
|
+
const createIntermediate = (archetype, entityData) => {
|
|
89
|
+
const intermediateEntity = { archetype, data: entityData };
|
|
90
|
+
allIntermediateEntities.push(intermediateEntity);
|
|
91
|
+
return intermediateEntity;
|
|
92
|
+
};
|
|
93
|
+
createIntermediate('Initialization', {});
|
|
94
|
+
for (const entity of data.entities) {
|
|
95
|
+
if (entity.archetype === '#BPM_CHANGE') {
|
|
96
|
+
createIntermediate('#BPM_CHANGE', {
|
|
97
|
+
'#BEAT': entity.data['#BEAT'],
|
|
98
|
+
'#BPM': entity.data['#BPM'],
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const timescaleGroupsByIndex = new Map();
|
|
103
|
+
for (let i = 0; i < data.entities.length; i++) {
|
|
104
|
+
const entity = data.entities[i];
|
|
105
|
+
if (entity.archetype === 'TimeScaleGroup') {
|
|
106
|
+
const groupIntermediate = createIntermediate('TimeScaleGroup', {});
|
|
107
|
+
timescaleGroupsByIndex.set(i, groupIntermediate);
|
|
108
|
+
let rawChangeIdx = entity.data['first'];
|
|
109
|
+
let lastChangeIntermediate = null;
|
|
110
|
+
while (rawChangeIdx !== undefined && rawChangeIdx > 0) {
|
|
111
|
+
const rawChange = data.entities[rawChangeIdx];
|
|
112
|
+
const changeIntermediate = createIntermediate('TimeScaleChange', {
|
|
113
|
+
'#BEAT': rawChange.data['#BEAT'],
|
|
114
|
+
timeScale: rawChange.data['timeScale'],
|
|
115
|
+
timeScaleSkip: 0.0,
|
|
116
|
+
timeScaleGroup: groupIntermediate,
|
|
117
|
+
timeScaleEase: 0,
|
|
118
|
+
});
|
|
119
|
+
if (lastChangeIntermediate) {
|
|
120
|
+
lastChangeIntermediate.data['next'] = changeIntermediate;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
groupIntermediate.data['first'] = changeIntermediate;
|
|
124
|
+
}
|
|
125
|
+
lastChangeIntermediate = changeIntermediate;
|
|
126
|
+
const nextIdx = rawChange.data['next'];
|
|
127
|
+
if (nextIdx !== undefined && nextIdx > 0) {
|
|
128
|
+
rawChangeIdx = nextIdx;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const notesByOriginalIndex = new Map();
|
|
137
|
+
for (let i = 0; i < data.entities.length; i++) {
|
|
138
|
+
const entity = data.entities[i];
|
|
139
|
+
if (noteTypeMapping[entity.archetype]) {
|
|
140
|
+
const mappedArchetype = noteTypeMapping[entity.archetype];
|
|
141
|
+
const directionData = entity.data['direction'] ?? 0;
|
|
142
|
+
const noteIntermediate = createIntermediate(mappedArchetype, {
|
|
143
|
+
'#BEAT': entity.data['#BEAT'],
|
|
144
|
+
lane: entity.data['lane'] ?? 0.0,
|
|
145
|
+
size: entity.data['size'] ?? 0.0,
|
|
146
|
+
direction: flickDirectionMapping[directionData],
|
|
147
|
+
segmentKind: ConnectorKind.ACTIVE_NORMAL,
|
|
148
|
+
});
|
|
149
|
+
notesByOriginalIndex.set(i, noteIntermediate);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const connectorsByOriginalIndex = new Map();
|
|
153
|
+
for (let i = 0; i < data.entities.length; i++) {
|
|
154
|
+
const entity = data.entities[i];
|
|
155
|
+
if (activeConnectorKindMapping[entity.archetype]) {
|
|
156
|
+
const connectorKind = activeConnectorKindMapping[entity.archetype];
|
|
157
|
+
const head = notesByOriginalIndex.get(entity.data['head']);
|
|
158
|
+
const tail = notesByOriginalIndex.get(entity.data['tail']);
|
|
159
|
+
const segmentHead = notesByOriginalIndex.get(entity.data['start']);
|
|
160
|
+
const segmentTail = notesByOriginalIndex.get(entity.data['end']);
|
|
161
|
+
if (!head || !tail || !segmentHead || !segmentTail)
|
|
162
|
+
continue;
|
|
163
|
+
const connectorIntermediate = createIntermediate('Connector', {
|
|
164
|
+
head,
|
|
165
|
+
tail,
|
|
166
|
+
segmentHead,
|
|
167
|
+
segmentTail,
|
|
168
|
+
activeHead: segmentHead,
|
|
169
|
+
activeTail: segmentTail,
|
|
170
|
+
});
|
|
171
|
+
head.data['connectorEase'] = easeTypeMapping[entity.data['ease'] ?? 0];
|
|
172
|
+
head.data['segmentKind'] = connectorKind;
|
|
173
|
+
tail.data['segmentKind'] = connectorKind;
|
|
174
|
+
segmentHead.data['segmentKind'] = connectorKind;
|
|
175
|
+
connectorsByOriginalIndex.set(i, connectorIntermediate);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
for (const [i, note] of notesByOriginalIndex.entries()) {
|
|
179
|
+
const entity = data.entities[i];
|
|
180
|
+
const timescaleGroupIndex = entity.data['timeScaleGroup'] ?? -1;
|
|
181
|
+
if (timescaleGroupIndex >= 0 && timescaleGroupsByIndex.has(timescaleGroupIndex)) {
|
|
182
|
+
note.data['#TIMESCALE_GROUP'] = timescaleGroupsByIndex.get(timescaleGroupIndex);
|
|
183
|
+
}
|
|
184
|
+
const attachIndex = entity.data['attach'] ?? -1;
|
|
185
|
+
if (attachIndex > 0) {
|
|
186
|
+
const attachConnector = connectorsByOriginalIndex.get(attachIndex);
|
|
187
|
+
if (attachConnector) {
|
|
188
|
+
note.data['attachHead'] = attachConnector.data['head'];
|
|
189
|
+
note.data['attachTail'] = attachConnector.data['tail'];
|
|
190
|
+
note.data['isAttached'] = 1;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const slideIndex = entity.data['slide'] ?? -1;
|
|
194
|
+
if (slideIndex > 0) {
|
|
195
|
+
const slideConnector = connectorsByOriginalIndex.get(slideIndex);
|
|
196
|
+
if (slideConnector) {
|
|
197
|
+
note.data['activeHead'] = slideConnector.data['activeHead'];
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
for (let i = 0; i < data.entities.length; i++) {
|
|
202
|
+
const entity = data.entities[i];
|
|
203
|
+
if (entity.archetype === 'SimLine') {
|
|
204
|
+
const left = notesByOriginalIndex.get(entity.data['a']);
|
|
205
|
+
const right = notesByOriginalIndex.get(entity.data['b']);
|
|
206
|
+
if (left && right) {
|
|
207
|
+
createIntermediate('SimLine', { left, right });
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
const anchorsByBeat = new Map();
|
|
212
|
+
const anchorPositions = new Map();
|
|
213
|
+
const getAnchor = (beat, lane, size, timescaleGroup, pos, segmentKind = -1, segmentAlpha = -1, connectorEase = -1) => {
|
|
214
|
+
let anchors = anchorsByBeat.get(beat);
|
|
215
|
+
if (anchors) {
|
|
216
|
+
for (const anchor of anchors) {
|
|
217
|
+
if (anchorPositions.get(anchor)?.has(pos))
|
|
218
|
+
continue;
|
|
219
|
+
if (anchor.data['lane'] === lane &&
|
|
220
|
+
anchor.data['size'] === size &&
|
|
221
|
+
anchor.data['#TIMESCALE_GROUP'] === timescaleGroup &&
|
|
222
|
+
(segmentKind === -1 ||
|
|
223
|
+
anchor.data['segmentKind'] === segmentKind ||
|
|
224
|
+
anchor.data['segmentKind'] === -1) &&
|
|
225
|
+
(segmentAlpha === -1 ||
|
|
226
|
+
anchor.data['segmentAlpha'] === segmentAlpha ||
|
|
227
|
+
anchor.data['segmentAlpha'] === -1) &&
|
|
228
|
+
(connectorEase === -1 ||
|
|
229
|
+
anchor.data['connectorEase'] === connectorEase ||
|
|
230
|
+
anchor.data['connectorEase'] === -1)) {
|
|
231
|
+
if (segmentKind !== -1 && anchor.data['segmentKind'] === -1) {
|
|
232
|
+
anchor.data['segmentKind'] = segmentKind;
|
|
233
|
+
}
|
|
234
|
+
if (segmentAlpha !== -1 && anchor.data['segmentAlpha'] === -1) {
|
|
235
|
+
anchor.data['segmentAlpha'] = segmentAlpha;
|
|
236
|
+
}
|
|
237
|
+
if (connectorEase !== -1 && anchor.data['connectorEase'] === -1) {
|
|
238
|
+
anchor.data['connectorEase'] = connectorEase;
|
|
239
|
+
}
|
|
240
|
+
anchorPositions.get(anchor).add(pos);
|
|
241
|
+
return anchor;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
const anchor = createIntermediate('AnchorNote', {
|
|
246
|
+
'#BEAT': beat,
|
|
247
|
+
lane,
|
|
248
|
+
size,
|
|
249
|
+
'#TIMESCALE_GROUP': timescaleGroup,
|
|
250
|
+
segmentKind,
|
|
251
|
+
segmentAlpha,
|
|
252
|
+
connectorEase,
|
|
253
|
+
});
|
|
254
|
+
if (!anchorsByBeat.has(beat)) {
|
|
255
|
+
anchorsByBeat.set(beat, []);
|
|
256
|
+
}
|
|
257
|
+
anchorsByBeat.get(beat).push(anchor);
|
|
258
|
+
anchorPositions.set(anchor, new Set([pos]));
|
|
259
|
+
return anchor;
|
|
260
|
+
};
|
|
261
|
+
for (let i = 0; i < data.entities.length; i++) {
|
|
262
|
+
const entity = data.entities[i];
|
|
263
|
+
if (entity.archetype === 'Guide') {
|
|
264
|
+
const startBeat = entity.data['startBeat'];
|
|
265
|
+
const startLane = entity.data['startLane'];
|
|
266
|
+
const startSize = entity.data['startSize'];
|
|
267
|
+
const startTimeScaleGroup = timescaleGroupsByIndex.get(entity.data['startTimeScaleGroup']);
|
|
268
|
+
const headBeat = entity.data['headBeat'];
|
|
269
|
+
const headLane = entity.data['headLane'];
|
|
270
|
+
const headSize = entity.data['headSize'];
|
|
271
|
+
const headTimeScaleGroup = timescaleGroupsByIndex.get(entity.data['headTimeScaleGroup']);
|
|
272
|
+
const tailBeat = entity.data['tailBeat'];
|
|
273
|
+
const tailLane = entity.data['tailLane'];
|
|
274
|
+
const tailSize = entity.data['tailSize'];
|
|
275
|
+
const tailTimeScaleGroup = timescaleGroupsByIndex.get(entity.data['tailTimeScaleGroup']);
|
|
276
|
+
const endBeat = entity.data['endBeat'];
|
|
277
|
+
const endLane = entity.data['endLane'];
|
|
278
|
+
const endSize = entity.data['endSize'];
|
|
279
|
+
const endTimeScaleGroup = timescaleGroupsByIndex.get(entity.data['endTimeScaleGroup']);
|
|
280
|
+
const ease = easeTypeMapping[entity.data['ease'] ?? 0];
|
|
281
|
+
const fade = entity.data['fade'] ?? 1;
|
|
282
|
+
const [startAlpha, endAlpha] = fadeAlphaMapping[fade];
|
|
283
|
+
const kind = guideKindMapping[entity.data['color'] ?? 0];
|
|
284
|
+
const start = getAnchor(startBeat, startLane, startSize, startTimeScaleGroup, 'segmentHead', kind, startAlpha);
|
|
285
|
+
const end = getAnchor(endBeat, endLane, endSize, endTimeScaleGroup, 'segmentTail', kind, endAlpha);
|
|
286
|
+
const head = getAnchor(headBeat, headLane, headSize, headTimeScaleGroup, 'head', kind, -1, ease);
|
|
287
|
+
const tail = getAnchor(tailBeat, tailLane, tailSize, tailTimeScaleGroup, 'tail', kind);
|
|
288
|
+
createIntermediate('Connector', {
|
|
289
|
+
head,
|
|
290
|
+
tail,
|
|
291
|
+
segmentHead: start,
|
|
292
|
+
segmentTail: end,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
for (const anchorList of anchorsByBeat.values()) {
|
|
297
|
+
for (const anchor of anchorList) {
|
|
298
|
+
if (anchor.data['segmentKind'] === -1) {
|
|
299
|
+
anchor.data['segmentKind'] = ConnectorKind.GUIDE_NEUTRAL;
|
|
300
|
+
}
|
|
301
|
+
if (anchor.data['segmentAlpha'] === -1) {
|
|
302
|
+
anchor.data['segmentAlpha'] = 1.0;
|
|
303
|
+
}
|
|
304
|
+
if (anchor.data['connectorEase'] === -1) {
|
|
305
|
+
anchor.data['connectorEase'] = EaseType.LINEAR;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
for (const entity of allIntermediateEntities) {
|
|
310
|
+
if (entity.archetype === 'Connector') {
|
|
311
|
+
const head = entity.data['head'];
|
|
312
|
+
const tail = entity.data['tail'];
|
|
313
|
+
if (head && tail) {
|
|
314
|
+
head.data['next'] = tail;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
allIntermediateEntities.sort((a, b) => {
|
|
319
|
+
const isInitA = a.archetype === 'Initialization' ? 0 : 1;
|
|
320
|
+
const isInitB = b.archetype === 'Initialization' ? 0 : 1;
|
|
321
|
+
if (isInitA !== isInitB)
|
|
322
|
+
return isInitA - isInitB;
|
|
323
|
+
const beatA = typeof a.data['#BEAT'] === 'number' ? a.data['#BEAT'] : -1;
|
|
324
|
+
const beatB = typeof b.data['#BEAT'] === 'number' ? b.data['#BEAT'] : -1;
|
|
325
|
+
return beatA - beatB;
|
|
326
|
+
});
|
|
327
|
+
const entities = [];
|
|
328
|
+
const intermediateToRef = new Map();
|
|
329
|
+
let entityRefCounter = 0;
|
|
330
|
+
const getRef = (intermediateEntity) => {
|
|
331
|
+
let ref = intermediateToRef.get(intermediateEntity);
|
|
332
|
+
if (ref)
|
|
333
|
+
return ref;
|
|
334
|
+
ref = (entityRefCounter++).toString(16);
|
|
335
|
+
intermediateToRef.set(intermediateEntity, ref);
|
|
336
|
+
return ref;
|
|
337
|
+
};
|
|
338
|
+
for (const intermediateEntity of allIntermediateEntities) {
|
|
339
|
+
const entity = {
|
|
340
|
+
archetype: intermediateEntity.archetype,
|
|
341
|
+
name: getRef(intermediateEntity),
|
|
342
|
+
data: [],
|
|
343
|
+
};
|
|
344
|
+
for (const [dataName, dataValue] of Object.entries(intermediateEntity.data)) {
|
|
345
|
+
if (typeof dataValue === 'number') {
|
|
346
|
+
entity.data.push({ name: dataName, value: dataValue });
|
|
347
|
+
}
|
|
348
|
+
else if (dataValue !== undefined && dataValue !== null) {
|
|
349
|
+
entity.data.push({ name: dataName, ref: getRef(dataValue) });
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
entities.push(entity);
|
|
353
|
+
}
|
|
354
|
+
return {
|
|
355
|
+
bgmOffset: data.bgmOffset + offset,
|
|
356
|
+
entities,
|
|
357
|
+
};
|
|
358
|
+
};
|
package/dist/index.d.ts
CHANGED
|
@@ -4,10 +4,11 @@ import { ucmmwsToLevelData } from './mmw/convert.js';
|
|
|
4
4
|
import { susToUSC } from './sus/convert.js';
|
|
5
5
|
import { uscToLevelData } from './usc/convert.js';
|
|
6
6
|
import { USC } from './usc/index.js';
|
|
7
|
-
|
|
7
|
+
import { extendedToLevelData } from './extended/convert.js';
|
|
8
|
+
export { susToUSC, mmwsToUSC, uscToLevelData, ucmmwsToLevelData, extendedToLevelData };
|
|
8
9
|
export * from './usc/index.js';
|
|
9
10
|
export declare const convertToLevelData: (input: string | Uint8Array | USC | LevelData, offset?: number) => LevelData;
|
|
10
|
-
export declare const version = "1.5.
|
|
11
|
+
export declare const version = "1.5.7";
|
|
11
12
|
export declare const databaseEngineItem: {
|
|
12
13
|
readonly name: "next-rush-plus";
|
|
13
14
|
readonly version: 13;
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,8 @@ import { isUSC } from './usc/analyze.js';
|
|
|
7
7
|
import { isLevelData } from './LevelData/analyze.js';
|
|
8
8
|
import { isPJSK } from './pjsk/analyze.js';
|
|
9
9
|
import { pjskToUSC } from './pjsk/convert.js';
|
|
10
|
-
|
|
10
|
+
import { extendedToLevelData } from './extended/convert.js';
|
|
11
|
+
export { susToUSC, mmwsToUSC, uscToLevelData, ucmmwsToLevelData, extendedToLevelData };
|
|
11
12
|
export * from './usc/index.js';
|
|
12
13
|
export const convertToLevelData = (input, offset = 0) => {
|
|
13
14
|
if (isLevelData(input)) {
|
|
@@ -59,7 +60,7 @@ export const convertToLevelData = (input, offset = 0) => {
|
|
|
59
60
|
}
|
|
60
61
|
return uscToLevelData(usc, offset, true, true);
|
|
61
62
|
};
|
|
62
|
-
export const version = '1.5.
|
|
63
|
+
export const version = '1.5.7';
|
|
63
64
|
export const databaseEngineItem = {
|
|
64
65
|
name: 'next-rush-plus',
|
|
65
66
|
version: 13,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sonolus-next-rush-plus-engine",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.7",
|
|
4
4
|
"description": "A new Project Sekai inspired engine for Sonolus",
|
|
5
5
|
"author": "Hyeon2",
|
|
6
6
|
"repository": {
|
|
@@ -36,10 +36,10 @@
|
|
|
36
36
|
"@sonolus/core": "~7.15.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@biomejs/biome": "2.4.
|
|
39
|
+
"@biomejs/biome": "~2.4.4",
|
|
40
40
|
"@sonolus/sonolus.js": "~9.7.0",
|
|
41
|
-
"@types/node": "^25.3.
|
|
41
|
+
"@types/node": "^25.3.3",
|
|
42
42
|
"typescript": "~5.9.3",
|
|
43
|
-
"typescript-eslint": "^8.56.
|
|
43
|
+
"typescript-eslint": "^8.56.1"
|
|
44
44
|
}
|
|
45
45
|
}
|