@wasm-gaming/rsdkv5-wasm 0.1.2 → 0.2.1
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/README.md +27 -0
- package/dist/rsdkv5/app/app.css +192 -0
- package/dist/rsdkv5/app/app.js +533 -0
- package/dist/rsdkv5/app/assets/player-knuckles.svg +757 -0
- package/dist/rsdkv5/app/assets/player-sonic.svg +720 -0
- package/dist/rsdkv5/app/assets/player-sonictails.svg +1414 -0
- package/dist/rsdkv5/app/assets/player-tails.svg +979 -0
- package/dist/rsdkv5/rsdkv5.js +1 -1
- package/dist/rsdkv5/rsdkv5.sdk.d.ts +77 -1
- package/dist/rsdkv5/rsdkv5.sdk.d.ts.map +1 -1
- package/dist/rsdkv5/rsdkv5.sdk.js +131 -2
- package/dist/rsdkv5/rsdkv5.sdk.js.map +1 -1
- package/dist/rsdkv5/rsdkv5.wasm +0 -0
- package/package.json +5 -1
- package/src/app/app.css +192 -0
- package/src/app/app.js +533 -0
- package/src/app/assets/player-knuckles.svg +757 -0
- package/src/app/assets/player-sonic.svg +720 -0
- package/src/app/assets/player-sonictails.svg +1414 -0
- package/src/app/assets/player-tails.svg +979 -0
- package/src/rsdkv5.sdk.ts +170 -2
|
@@ -36,6 +36,54 @@ export interface RsdkDevMenuBridge {
|
|
|
36
36
|
}>;
|
|
37
37
|
loadStage(category: number, stage: number): void;
|
|
38
38
|
}
|
|
39
|
+
/** Mania's characters, by the `characterID` its save slots store. */
|
|
40
|
+
export declare const MANIA_CHARACTERS: readonly ["Sonic & Tails", "Sonic", "Tails", "Knuckles", "Mighty", "Ray"];
|
|
41
|
+
/** Mania Mode's zones, by the `zoneID` its save slots store. */
|
|
42
|
+
export declare const MANIA_ZONES: readonly ["Green Hill", "Chemical Plant", "Studiopolis", "Flying Battery", "Press Garden", "Stardust Speedway", "Hydrocity", "Mirage Saloon", "Oil Ocean", "Lava Reef", "Metallic Madness", "Titanic Monarch", "Egg Reverie"];
|
|
43
|
+
/** One Mania Mode save slot, as `SaveData.bin` has it. */
|
|
44
|
+
export interface ManiaSaveSlot {
|
|
45
|
+
/** 0-7, the slot Mania numbers 1-8. */
|
|
46
|
+
slot: number;
|
|
47
|
+
state: 'empty' | 'progress' | 'complete';
|
|
48
|
+
/** Index into {@link MANIA_CHARACTERS}. */
|
|
49
|
+
character: number;
|
|
50
|
+
/** Index into {@link MANIA_ZONES}; meaningful while in progress. */
|
|
51
|
+
zone: number;
|
|
52
|
+
zoneName: string;
|
|
53
|
+
lives: number;
|
|
54
|
+
score: number;
|
|
55
|
+
/** How many of the seven Chaos Emeralds (the save keeps a bit mask). */
|
|
56
|
+
emeralds: number;
|
|
57
|
+
continues: number;
|
|
58
|
+
}
|
|
59
|
+
/** Mania Plus's eight regular save slots in `SaveData.bin` (Encore slots are elsewhere). */
|
|
60
|
+
export declare const MANIA_SAVE_SLOTS = 8;
|
|
61
|
+
/**
|
|
62
|
+
* Mania Mode's save slots from `SaveData.bin` (`globals->saveRAM`, int32 LE): slot `s`
|
|
63
|
+
* is the 0x400-byte block at `0x400 * s`, fields from +0x58. A missing or short file
|
|
64
|
+
* reads as empty slots.
|
|
65
|
+
*/
|
|
66
|
+
export declare function parseManiaSaves(bytes: Uint8Array | null): ManiaSaveSlot[];
|
|
67
|
+
/** Mania Mode's save slots, read and started the way Mania's own save select does. */
|
|
68
|
+
export interface ManiaSaves {
|
|
69
|
+
/** True when this build has the bridge (older wasm builds don't). */
|
|
70
|
+
readonly available: boolean;
|
|
71
|
+
/** How many characters a new game can pick: 6 with Plus (Mighty, Ray), else 4. */
|
|
72
|
+
readonly characters: number;
|
|
73
|
+
/** The eight slots, from the save file as it is now. */
|
|
74
|
+
list(): ManiaSaveSlot[];
|
|
75
|
+
/**
|
|
76
|
+
* Resolves true once Mania has its save file loaded (it asks Mania to load it), false
|
|
77
|
+
* if that failed or took longer than `timeoutMs`.
|
|
78
|
+
*/
|
|
79
|
+
ready(timeoutMs?: number): Promise<boolean>;
|
|
80
|
+
/**
|
|
81
|
+
* Start a slot: an empty one is a new game with `character` (an index into
|
|
82
|
+
* {@link MANIA_CHARACTERS}), a saved one continues with its own. Mania writes the
|
|
83
|
+
* save and loads the stage; the pause is lifted. False when the save isn't ready.
|
|
84
|
+
*/
|
|
85
|
+
start(slot: number, character?: number): boolean;
|
|
86
|
+
}
|
|
39
87
|
/**
|
|
40
88
|
* Where an engine keeps one namespace: `<engineId>/<namespace>`, relative to the OPFS
|
|
41
89
|
* root. Identical in every wasm-gaming engine, written to move verbatim into
|
|
@@ -48,6 +96,25 @@ export declare function storagePath(engineId: string, namespace: unknown): {
|
|
|
48
96
|
path: string;
|
|
49
97
|
prefixed: boolean;
|
|
50
98
|
};
|
|
99
|
+
/**
|
|
100
|
+
* Player 1's keyboard in the generated `Settings.ini` (`[Keyboard Map 1]`): arrows, A/S/D
|
|
101
|
+
* for buttons A/B/C, Z/X/C for X/Y/Z, Enter = Start, Tab = Select. Windows virtual-key
|
|
102
|
+
* codes, which is what RSDKv5's input layer maps from.
|
|
103
|
+
*/
|
|
104
|
+
export declare const KEYBOARD_MAP_1: {
|
|
105
|
+
readonly up: 38;
|
|
106
|
+
readonly down: 40;
|
|
107
|
+
readonly left: 37;
|
|
108
|
+
readonly right: 39;
|
|
109
|
+
readonly buttonA: 65;
|
|
110
|
+
readonly buttonB: 83;
|
|
111
|
+
readonly buttonC: 68;
|
|
112
|
+
readonly buttonX: 90;
|
|
113
|
+
readonly buttonY: 88;
|
|
114
|
+
readonly buttonZ: 67;
|
|
115
|
+
readonly start: 13;
|
|
116
|
+
readonly select: 9;
|
|
117
|
+
};
|
|
51
118
|
/**
|
|
52
119
|
* Serialise the engine config into RSDKv5U's `Settings.ini` (capital S — the engine
|
|
53
120
|
* opens exactly that name, and the Emscripten FS is case-sensitive). The v5 dialect:
|
|
@@ -62,6 +129,8 @@ export declare class Rsdkv5Play extends EnginePlayBase<Rsdkv5Payloads> {
|
|
|
62
129
|
/** Where this session's files live, relative to the OPFS root: `rsdkv5/<namespace>`. */
|
|
63
130
|
get storagePath(): string;
|
|
64
131
|
get pausedBy(): string | null;
|
|
132
|
+
/** Mania Mode's save slots — see {@link ManiaSaves}. */
|
|
133
|
+
get saves(): ManiaSaves;
|
|
65
134
|
/** RSDKv5's stage list, for a host that draws its own stage select. */
|
|
66
135
|
get devMenu(): RsdkDevMenuBridge;
|
|
67
136
|
/**
|
|
@@ -70,6 +139,13 @@ export declare class Rsdkv5Play extends EnginePlayBase<Rsdkv5Payloads> {
|
|
|
70
139
|
*/
|
|
71
140
|
pause(owner?: string): void;
|
|
72
141
|
resume(owner?: string): void;
|
|
142
|
+
/**
|
|
143
|
+
* Silence the game without stopping it (the frames keep running). A host uses it to
|
|
144
|
+
* let Mania get somewhere — load its save file — behind its own screen. Independent
|
|
145
|
+
* of {@link pause}: a paused game stays silent either way.
|
|
146
|
+
*/
|
|
147
|
+
mute(muted?: boolean): void;
|
|
148
|
+
get muted(): boolean;
|
|
73
149
|
/** Copy the game's changed user files to OPFS `rsdkv5/<namespace>/`; emits `saves`. */
|
|
74
150
|
flushSaves(): Promise<void>;
|
|
75
151
|
protected mounted(target: HTMLElement): void;
|
|
@@ -81,7 +157,7 @@ export declare class Rsdkv5Play extends EnginePlayBase<Rsdkv5Payloads> {
|
|
|
81
157
|
export declare class Rsdkv5SDK extends EngineSDKBase<Rsdkv5Payloads> {
|
|
82
158
|
static readonly id = "rsdkv5";
|
|
83
159
|
/** Kept in step with package.json by `node scripts/sync-version.mjs`. */
|
|
84
|
-
static readonly version = "0.1
|
|
160
|
+
static readonly version = "0.2.1";
|
|
85
161
|
static readonly name = "Retro Software Development Kit v3";
|
|
86
162
|
static readonly description = "RSDKv5U (Sonic Mania decompilation) compiled to WebAssembly. Ships none of the game: the player provides Data.rsdk, and it never leaves their browser.";
|
|
87
163
|
protected createPlay(init: EngineInit<Rsdkv5Payloads>, events: EventEmitter<EventsOf<Rsdkv5Payloads>>): Rsdkv5Play;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsdkv5.sdk.d.ts","sourceRoot":"","sources":["../../src/rsdkv5.sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,WAAW,EACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,aAAa,GACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"rsdkv5.sdk.d.ts","sourceRoot":"","sources":["../../src/rsdkv5.sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,46 @@ const WORK_ROOT = '/data';
|
|
|
31
31
|
/** Inputs the SDK writes itself; everything else in the working dir is the game's. */
|
|
32
32
|
const NOT_SAVES = new Set(['Data.rsdk', 'Settings.ini', 'log.txt']);
|
|
33
33
|
const SAVE_INTERVAL_MS = 10_000;
|
|
34
|
+
/** Mania's characters, by the `characterID` its save slots store. */
|
|
35
|
+
export const MANIA_CHARACTERS = ['Sonic & Tails', 'Sonic', 'Tails', 'Knuckles', 'Mighty', 'Ray'];
|
|
36
|
+
/** Mania Mode's zones, by the `zoneID` its save slots store. */
|
|
37
|
+
export const MANIA_ZONES = [
|
|
38
|
+
'Green Hill', 'Chemical Plant', 'Studiopolis', 'Flying Battery', 'Press Garden', 'Stardust Speedway',
|
|
39
|
+
'Hydrocity', 'Mirage Saloon', 'Oil Ocean', 'Lava Reef', 'Metallic Madness', 'Titanic Monarch', 'Egg Reverie',
|
|
40
|
+
];
|
|
41
|
+
/** Mania Plus's eight regular save slots in `SaveData.bin` (Encore slots are elsewhere). */
|
|
42
|
+
export const MANIA_SAVE_SLOTS = 8;
|
|
43
|
+
const SLOT_BYTES = 0x400;
|
|
44
|
+
const SLOT_FIELDS = 0x58; // SaveRAM: the entity header Mania keeps before the fields
|
|
45
|
+
/**
|
|
46
|
+
* Mania Mode's save slots from `SaveData.bin` (`globals->saveRAM`, int32 LE): slot `s`
|
|
47
|
+
* is the 0x400-byte block at `0x400 * s`, fields from +0x58. A missing or short file
|
|
48
|
+
* reads as empty slots.
|
|
49
|
+
*/
|
|
50
|
+
export function parseManiaSaves(bytes) {
|
|
51
|
+
const view = bytes ? new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength) : null;
|
|
52
|
+
return Array.from({ length: MANIA_SAVE_SLOTS }, (_, slot) => {
|
|
53
|
+
const base = slot * SLOT_BYTES + SLOT_FIELDS;
|
|
54
|
+
const field = (i) => (view && base + i * 4 + 4 <= view.byteLength ? view.getInt32(base + i * 4, true) : 0);
|
|
55
|
+
const state = field(0) === 1 ? 'progress' : field(0) === 2 ? 'complete' : 'empty';
|
|
56
|
+
const character = Math.max(0, Math.min(MANIA_CHARACTERS.length - 1, field(1)));
|
|
57
|
+
const zone = field(2);
|
|
58
|
+
let emeralds = 0;
|
|
59
|
+
for (let mask = field(6) & 0x7f; mask; mask >>= 1)
|
|
60
|
+
emeralds += mask & 1;
|
|
61
|
+
return {
|
|
62
|
+
slot,
|
|
63
|
+
state,
|
|
64
|
+
character: state === 'empty' ? 0 : character,
|
|
65
|
+
zone: state === 'empty' ? 0 : zone,
|
|
66
|
+
zoneName: state === 'complete' ? 'Complete' : state === 'empty' ? '' : (MANIA_ZONES[zone] ?? 'Unknown zone'),
|
|
67
|
+
lives: state === 'empty' ? 3 : field(3),
|
|
68
|
+
score: state === 'empty' ? 0 : field(4),
|
|
69
|
+
emeralds: state === 'empty' ? 0 : emeralds,
|
|
70
|
+
continues: state === 'empty' ? 0 : field(7),
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
}
|
|
34
74
|
/**
|
|
35
75
|
* Where an engine keeps one namespace: `<engineId>/<namespace>`, relative to the OPFS
|
|
36
76
|
* root. Identical in every wasm-gaming engine, written to move verbatim into
|
|
@@ -52,6 +92,25 @@ export function storagePath(engineId, namespace) {
|
|
|
52
92
|
const cleaned = segments.join('/') || DEFAULT_STORAGE_NAMESPACE;
|
|
53
93
|
return { namespace: cleaned, path: `${engineId}/${cleaned}`, prefixed };
|
|
54
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Player 1's keyboard in the generated `Settings.ini` (`[Keyboard Map 1]`): arrows, A/S/D
|
|
97
|
+
* for buttons A/B/C, Z/X/C for X/Y/Z, Enter = Start, Tab = Select. Windows virtual-key
|
|
98
|
+
* codes, which is what RSDKv5's input layer maps from.
|
|
99
|
+
*/
|
|
100
|
+
export const KEYBOARD_MAP_1 = {
|
|
101
|
+
up: 0x26,
|
|
102
|
+
down: 0x28,
|
|
103
|
+
left: 0x25,
|
|
104
|
+
right: 0x27,
|
|
105
|
+
buttonA: 0x41, // A
|
|
106
|
+
buttonB: 0x53, // S
|
|
107
|
+
buttonC: 0x44, // D
|
|
108
|
+
buttonX: 0x5a, // Z
|
|
109
|
+
buttonY: 0x58, // X
|
|
110
|
+
buttonZ: 0x43, // C
|
|
111
|
+
start: 0x0d, // Enter
|
|
112
|
+
select: 0x09, // Tab
|
|
113
|
+
};
|
|
55
114
|
/**
|
|
56
115
|
* Serialise the engine config into RSDKv5U's `Settings.ini` (capital S — the engine
|
|
57
116
|
* opens exactly that name, and the Emscripten FS is case-sensitive). The v5 dialect:
|
|
@@ -86,6 +145,11 @@ export function buildSettingsIni(config) {
|
|
|
86
145
|
'streamVolume=0.8',
|
|
87
146
|
'sfxVolume=1.0',
|
|
88
147
|
'',
|
|
148
|
+
// Player 1's keys, the same in the three Sonics: A/S/D = A/B/C (RSDKv5's own default),
|
|
149
|
+
// Z/X/C = X/Y/Z (instead of Q/W/E). Values are the Windows virtual-key codes RSDKv5 reads.
|
|
150
|
+
'[Keyboard Map 1]',
|
|
151
|
+
...Object.entries(KEYBOARD_MAP_1).map(([key, vk]) => `${key}=0x${vk.toString(16)}`),
|
|
152
|
+
'',
|
|
89
153
|
].join('\n');
|
|
90
154
|
}
|
|
91
155
|
async function opfsDir(path, create) {
|
|
@@ -137,6 +201,7 @@ export class Rsdkv5Play extends EnginePlayBase {
|
|
|
137
201
|
#module = null;
|
|
138
202
|
#destroyed = false;
|
|
139
203
|
#pauseOwner = null;
|
|
204
|
+
#muted = false;
|
|
140
205
|
#canvas = null;
|
|
141
206
|
#ownsCanvas = false;
|
|
142
207
|
#box = null;
|
|
@@ -165,6 +230,49 @@ export class Rsdkv5Play extends EnginePlayBase {
|
|
|
165
230
|
get pausedBy() {
|
|
166
231
|
return this.#pauseOwner;
|
|
167
232
|
}
|
|
233
|
+
/** Mania Mode's save slots — see {@link ManiaSaves}. */
|
|
234
|
+
get saves() {
|
|
235
|
+
const Module = this.#module;
|
|
236
|
+
const workDir = this.#workDir;
|
|
237
|
+
const available = !!Module?._web_mania_save_status && !!Module._web_mania_start_slot;
|
|
238
|
+
return {
|
|
239
|
+
available,
|
|
240
|
+
characters: available && Module?._web_mania_characters ? Module._web_mania_characters() : 4,
|
|
241
|
+
list: () => {
|
|
242
|
+
let bytes = null;
|
|
243
|
+
try {
|
|
244
|
+
bytes = Module ? new Uint8Array(Module.FS.readFile(`${workDir}/SaveData.bin`)) : null;
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
bytes = null; // no save file yet: eight empty slots
|
|
248
|
+
}
|
|
249
|
+
return parseManiaSaves(bytes);
|
|
250
|
+
},
|
|
251
|
+
ready: async (timeoutMs = 5000) => {
|
|
252
|
+
if (!available || !Module)
|
|
253
|
+
return false;
|
|
254
|
+
const deadline = performance.now() + timeoutMs;
|
|
255
|
+
for (;;) {
|
|
256
|
+
const status = Module._web_mania_save_status();
|
|
257
|
+
if (status === 200)
|
|
258
|
+
return true;
|
|
259
|
+
if ((status !== 0 && status !== 100) || performance.now() > deadline)
|
|
260
|
+
return false;
|
|
261
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
start: (slot, character = 0) => {
|
|
265
|
+
if (!available || !Module)
|
|
266
|
+
return false;
|
|
267
|
+
if (!Module._web_mania_start_slot(slot | 0, character | 0))
|
|
268
|
+
return false;
|
|
269
|
+
// Whatever drove this is done with the engine: hand it back running.
|
|
270
|
+
if (this.#pauseOwner)
|
|
271
|
+
this.resume(this.#pauseOwner);
|
|
272
|
+
return true;
|
|
273
|
+
},
|
|
274
|
+
};
|
|
275
|
+
}
|
|
168
276
|
/** RSDKv5's stage list, for a host that draws its own stage select. */
|
|
169
277
|
get devMenu() {
|
|
170
278
|
const Module = () => this.#module;
|
|
@@ -192,6 +300,9 @@ export class Rsdkv5Play extends EnginePlayBase {
|
|
|
192
300
|
return;
|
|
193
301
|
this.#pauseOwner = owner;
|
|
194
302
|
Module.web_devmenu_set_paused?.(true);
|
|
303
|
+
// This build has no native pause hook (web_devmenu_* are not compiled in), so the
|
|
304
|
+
// game is frozen by stopping emscripten's main loop: no frame runs until resume().
|
|
305
|
+
Module.pauseMainLoop?.();
|
|
195
306
|
void Module.SDL2?.audioContext?.suspend();
|
|
196
307
|
void this.flushSaves();
|
|
197
308
|
this.emit('pause', { owner });
|
|
@@ -201,10 +312,28 @@ export class Rsdkv5Play extends EnginePlayBase {
|
|
|
201
312
|
if (!Module || this.#pauseOwner !== owner)
|
|
202
313
|
return;
|
|
203
314
|
this.#pauseOwner = null;
|
|
204
|
-
|
|
315
|
+
if (!this.#muted)
|
|
316
|
+
void Module.SDL2?.audioContext?.resume();
|
|
205
317
|
Module.web_devmenu_set_paused?.(false);
|
|
318
|
+
Module.resumeMainLoop?.();
|
|
206
319
|
this.emit('resume', { owner });
|
|
207
320
|
}
|
|
321
|
+
/**
|
|
322
|
+
* Silence the game without stopping it (the frames keep running). A host uses it to
|
|
323
|
+
* let Mania get somewhere — load its save file — behind its own screen. Independent
|
|
324
|
+
* of {@link pause}: a paused game stays silent either way.
|
|
325
|
+
*/
|
|
326
|
+
mute(muted = true) {
|
|
327
|
+
this.#muted = muted;
|
|
328
|
+
const context = this.#module?.SDL2?.audioContext;
|
|
329
|
+
if (muted)
|
|
330
|
+
void context?.suspend();
|
|
331
|
+
else if (!this.#pauseOwner)
|
|
332
|
+
void context?.resume();
|
|
333
|
+
}
|
|
334
|
+
get muted() {
|
|
335
|
+
return this.#muted;
|
|
336
|
+
}
|
|
208
337
|
/** Copy the game's changed user files to OPFS `rsdkv5/<namespace>/`; emits `saves`. */
|
|
209
338
|
flushSaves() {
|
|
210
339
|
this.#flushing ??= this.#flush().finally(() => {
|
|
@@ -409,7 +538,7 @@ export class Rsdkv5Play extends EnginePlayBase {
|
|
|
409
538
|
export class Rsdkv5SDK extends EngineSDKBase {
|
|
410
539
|
static id = ENGINE_ID;
|
|
411
540
|
/** Kept in step with package.json by `node scripts/sync-version.mjs`. */
|
|
412
|
-
static version = '0.1
|
|
541
|
+
static version = '0.2.1';
|
|
413
542
|
static name = 'Retro Software Development Kit v3';
|
|
414
543
|
static description = 'RSDKv5U (Sonic Mania decompilation) compiled to WebAssembly. Ships none of the game: the player provides Data.rsdk, and it never leaves their browser.';
|
|
415
544
|
createPlay(init, events) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsdkv5.sdk.js","sourceRoot":"","sources":["../../src/rsdkv5.sdk.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rsdkv5.sdk.js","sourceRoot":"","sources":["../../src/rsdkv5.sdk.ts"],"names":[],"mappings":"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"}
|
package/dist/rsdkv5/rsdkv5.wasm
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wasm-gaming/rsdkv5-wasm",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "RSDKv5U (Sonic Mania decompilation) compiled to WebAssembly, with a self-contained JS SDK implementing the wasm-gaming engine contract. Data.rsdk is loaded at runtime.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -21,10 +21,14 @@
|
|
|
21
21
|
"./options": {
|
|
22
22
|
"types": "./dist/rsdkv5/rsdkv5.options.d.ts",
|
|
23
23
|
"import": "./dist/rsdkv5/rsdkv5.options.js"
|
|
24
|
+
},
|
|
25
|
+
"./app": {
|
|
26
|
+
"import": "./dist/rsdkv5/app/app.js"
|
|
24
27
|
}
|
|
25
28
|
},
|
|
26
29
|
"files": [
|
|
27
30
|
"dist/rsdkv5/",
|
|
31
|
+
"src/app/",
|
|
28
32
|
"src/rsdkv5.options.ts",
|
|
29
33
|
"src/rsdkv5.sdk.ts",
|
|
30
34
|
"README.md"
|
package/src/app/app.css
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/* rsdkv5 app — load-game screen (craft's cards, as rsdkv4's app), boot screen and pause menu.
|
|
2
|
+
Tokens come from engine-specs (UI_TOKENS, `--wg-*`) when the host sets them; the
|
|
3
|
+
fallbacks are the same values, so the app looks right on a bare page too. */
|
|
4
|
+
|
|
5
|
+
.rsdk-app {
|
|
6
|
+
--ring: var(--wg-focus-ring, 0 0 0 3px #fff);
|
|
7
|
+
--surface: var(--wg-surface, rgb(18 20 28 / 0.78));
|
|
8
|
+
--line: var(--wg-line, rgb(255 255 255 / 0.12));
|
|
9
|
+
--text: var(--wg-text, #f4f6fb);
|
|
10
|
+
--muted: var(--wg-muted, #8e97a9);
|
|
11
|
+
--danger: var(--wg-danger, #f87171);
|
|
12
|
+
--ui: var(--wg-font-ui, 'Inter Variable', 'Inter', system-ui, sans-serif);
|
|
13
|
+
--display: var(--wg-font-display, 'Unbounded Variable', 'Unbounded', system-ui, sans-serif);
|
|
14
|
+
--ease: var(--wg-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
|
|
15
|
+
position: absolute;
|
|
16
|
+
inset: 0;
|
|
17
|
+
overflow: hidden;
|
|
18
|
+
background: #000;
|
|
19
|
+
color: var(--text);
|
|
20
|
+
font-family: var(--ui);
|
|
21
|
+
user-select: none;
|
|
22
|
+
-webkit-tap-highlight-color: transparent;
|
|
23
|
+
}
|
|
24
|
+
.rsdk-app * { box-sizing: border-box; }
|
|
25
|
+
.rsdk-stage { position: absolute; inset: 0; display: grid; place-items: center; }
|
|
26
|
+
.rsdk-stage canvas { outline: none; }
|
|
27
|
+
.rsdk-overlay { position: absolute; inset: 0; display: grid; place-items: center; pointer-events: none; }
|
|
28
|
+
.rsdk-overlay > * { pointer-events: auto; }
|
|
29
|
+
.rsdk-app[data-screen='game'] .rsdk-overlay { display: none; }
|
|
30
|
+
|
|
31
|
+
/* Everything but the game sits on a backdrop that keeps the game visible underneath. */
|
|
32
|
+
.rsdk-app:not([data-screen='game']) .rsdk-overlay {
|
|
33
|
+
background:
|
|
34
|
+
radial-gradient(120% 80% at 50% 0%, color-mix(in srgb, var(--accent) 38%, transparent), transparent 70%),
|
|
35
|
+
rgb(4 6 12 / 0.72);
|
|
36
|
+
backdrop-filter: blur(14px) saturate(1.2);
|
|
37
|
+
-webkit-backdrop-filter: blur(14px) saturate(1.2);
|
|
38
|
+
}
|
|
39
|
+
.rsdk-app[data-screen='boot'] .rsdk-overlay { background-color: rgb(4 6 12 / 0.9); }
|
|
40
|
+
|
|
41
|
+
.kicker { margin: 0; font: 600 0.72rem var(--ui); letter-spacing: 0.22em; text-transform: uppercase; color: var(--muted); }
|
|
42
|
+
.rsdk-app h2 { margin: 0; font: 700 clamp(1.4rem, 3vw, 2.1rem) var(--display); letter-spacing: -0.02em; }
|
|
43
|
+
|
|
44
|
+
/* ---- boot ---- */
|
|
45
|
+
.rsdk-boot { display: grid; justify-items: center; gap: 22px; }
|
|
46
|
+
.rsdk-boot img { width: min(260px, 50vw); border-radius: 22px; box-shadow: 0 30px 80px -30px #000; animation: rsdk-breathe 2.4s var(--ease) infinite alternate; }
|
|
47
|
+
.rsdk-boot p { margin: 0; color: var(--muted); font-weight: 500; }
|
|
48
|
+
@keyframes rsdk-breathe { from { opacity: 0.55; transform: scale(0.98); } to { opacity: 1; transform: none; } }
|
|
49
|
+
|
|
50
|
+
/* ---- load game: craft's slot cards (src/craft/views/GameLauncher.html) ---- */
|
|
51
|
+
.rsdk-slots { width: min(1120px, 100%); padding: 0 clamp(16px, 4vw, 48px); display: grid; gap: clamp(22px, 4vh, 40px); }
|
|
52
|
+
.rsdk-slots header { display: grid; gap: 6px; }
|
|
53
|
+
.slot-cards { isolation: isolate; /* the art's z-index stays inside the row */
|
|
54
|
+
--w: clamp(150px, 13vw, 190px);
|
|
55
|
+
display: flex; justify-content: center; align-items: flex-start; gap: clamp(12px, 1.6vw, 24px);
|
|
56
|
+
}
|
|
57
|
+
.slot-card {
|
|
58
|
+
flex: none; width: var(--w); height: calc(var(--w) * 220 / 170);
|
|
59
|
+
display: flex; flex-direction: column; justify-content: space-between; gap: 0.4rem;
|
|
60
|
+
padding: 0.75rem; border-radius: 0.5rem; border: 2px solid #000; background: #333; color: #fff;
|
|
61
|
+
font-family: system-ui, sans-serif;
|
|
62
|
+
transition: transform 0.2s var(--ease), box-shadow 0.2s var(--ease);
|
|
63
|
+
}
|
|
64
|
+
.slot-card.is-focused { box-shadow: var(--ring), 0 24px 50px -20px #000; transform: translateY(-4px); }
|
|
65
|
+
.slot-card.is-nosave {
|
|
66
|
+
height: calc(var(--w) * 130 / 170); justify-content: center; align-items: center;
|
|
67
|
+
font-weight: 700; cursor: pointer;
|
|
68
|
+
}
|
|
69
|
+
.slot-card.is-nosave:hover:not(:active) { background: #222; }
|
|
70
|
+
.slot-card img { display: block; }
|
|
71
|
+
|
|
72
|
+
.slot-play {
|
|
73
|
+
all: unset; box-sizing: border-box; flex-shrink: 0; width: 100%; height: 34px; text-align: center;
|
|
74
|
+
border-radius: 4px; background: royalblue; color: #fff; font-weight: 700; text-shadow: 0 0 2px #000; cursor: pointer;
|
|
75
|
+
}
|
|
76
|
+
.slot-play:hover:not(:active), .slot-card.is-focused .slot-play { background: blue; }
|
|
77
|
+
|
|
78
|
+
/* the character picker: white square, the character over two drifting colour bands */
|
|
79
|
+
.player-choose {
|
|
80
|
+
all: unset; box-sizing: border-box; position: relative; width: 100%; aspect-ratio: 1; padding: 1rem 0.5rem 0;
|
|
81
|
+
display: flex; align-items: center; justify-content: center; overflow: hidden;
|
|
82
|
+
background: #fff; cursor: pointer; transition: padding 0.05s linear;
|
|
83
|
+
}
|
|
84
|
+
.player-choose::before, .player-choose::after { content: ''; position: absolute; inset: 0 1rem 0 3rem; background: rgb(180 180 180 / 0.2); }
|
|
85
|
+
.player-choose[data-player='sonic']::after { background: rgb(13 122 233 / 0.2); left: 30%; right: 20%; }
|
|
86
|
+
.player-choose[data-player='tails']::after { background: rgb(241 176 0 / 0.2); left: 40%; right: 10%; animation-delay: -5s; }
|
|
87
|
+
.player-choose[data-player='knuckles']::after { background: rgb(255 20 0 / 0.2); left: 20%; right: 30%; animation-delay: -10s; }
|
|
88
|
+
.player-choose[data-player='sonictails']::after { background: rgb(160 32 240 / 0.2); left: 20%; right: 70%; animation-delay: -15s; }
|
|
89
|
+
.slot-card:hover .player-choose, .slot-card.is-focused .player-choose { padding: 0; }
|
|
90
|
+
.player-choose:hover::before, .slot-card.is-focused .player-choose::before { animation: rsdk-player-bg 20s linear infinite; }
|
|
91
|
+
.player-choose:hover::after, .slot-card.is-focused .player-choose::after { animation: rsdk-player-bg 30s linear reverse infinite; }
|
|
92
|
+
.player-choose img { position: relative; z-index: 1; max-width: 100%; max-height: 100%; }
|
|
93
|
+
@keyframes rsdk-player-bg {
|
|
94
|
+
0% { left: 30%; right: 20%; } 10% { left: 50%; right: 50%; } 20% { left: 10%; right: 20%; }
|
|
95
|
+
30% { left: 60%; right: 40%; } 40% { left: 70%; right: 10%; } 50% { left: 20%; right: 80%; }
|
|
96
|
+
60% { left: 0; right: 60%; } 70% { left: 40%; right: 10%; } 80% { left: 10%; right: 70%; }
|
|
97
|
+
90% { left: 80%; right: 0; } 100% { left: 30%; right: 20%; }
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* a saved slot */
|
|
101
|
+
.slot-card.is-saved { gap: 0.25rem; }
|
|
102
|
+
.stage-shot { position: relative; width: 100%; flex-shrink: 0; }
|
|
103
|
+
.stage-badge {
|
|
104
|
+
width: 100%; aspect-ratio: 16 / 9; border-radius: 4px; overflow: hidden;
|
|
105
|
+
border: 1px solid rgb(255 255 255 / 0.2); background: linear-gradient(160deg, #1b2a4a, #080d1c);
|
|
106
|
+
}
|
|
107
|
+
.stage-badge img { width: 100%; height: 100%; object-fit: cover; filter: brightness(0.9); image-rendering: pixelated; }
|
|
108
|
+
.zone-tag {
|
|
109
|
+
position: absolute; top: 4px; left: 4px; padding: 1px 4px; border-radius: 3px; background: rgb(0 0 0 / 0.72);
|
|
110
|
+
color: #fbbf24; font-size: 0.5rem; font-weight: 800; letter-spacing: 0.06em; line-height: 1.4;
|
|
111
|
+
}
|
|
112
|
+
.player-icon { position: absolute; right: 0; bottom: -1rem; pointer-events: none; }
|
|
113
|
+
.player-icon img { height: calc(var(--w) * 64 / 170); width: auto; filter: drop-shadow(0 2px 4px rgb(0 0 0 / 0.85)); }
|
|
114
|
+
.zone-title {
|
|
115
|
+
height: 2.3em; padding-right: 26%; font-weight: 800; font-size: 0.72rem; color: #fbbf24; text-transform: uppercase;
|
|
116
|
+
letter-spacing: 0.4px; text-shadow: 0 1px 3px rgb(0 0 0 / 0.9); line-height: 1.15;
|
|
117
|
+
}
|
|
118
|
+
.emeralds { display: flex; justify-content: center; gap: 3px; flex-shrink: 0; }
|
|
119
|
+
.emeralds i { width: 11px; height: 11px; background: var(--gem); clip-path: polygon(50% 0, 100% 38%, 50% 100%, 0 38%); opacity: 0.2; }
|
|
120
|
+
.emeralds i.on { opacity: 1; filter: drop-shadow(0 0 3px rgb(255 255 255 / 0.4)); }
|
|
121
|
+
.stats-grid { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.2rem 0.4rem; font-size: 0.68rem; color: #e2e8f0; }
|
|
122
|
+
.stats-grid span {
|
|
123
|
+
display: inline-flex; align-items: center; gap: 0.25rem; padding: 0.1rem 0.3rem; border-radius: 3px;
|
|
124
|
+
background: rgb(0 0 0 / 0.4); border: 1px solid rgb(255 255 255 / 0.1); font-variant-numeric: tabular-nums;
|
|
125
|
+
}
|
|
126
|
+
.stats-grid svg { width: 10px; height: 10px; }
|
|
127
|
+
|
|
128
|
+
/* Mania: no zone portraits here — the zone's name on a gradient; Mighty and Ray as badges */
|
|
129
|
+
.slot-cards { --w: clamp(140px, 12vw, 190px); justify-content: flex-start; overflow-x: auto; padding: 16px 8px 18px; scrollbar-width: none; scroll-behavior: smooth; }
|
|
130
|
+
.slot-cards::-webkit-scrollbar { display: none; }
|
|
131
|
+
.stage-badge.is-mania { display: grid; place-items: end start; padding: 6px 10px; background: linear-gradient(160deg, color-mix(in srgb, var(--accent) 70%, #0b1a3a), #080d1c); }
|
|
132
|
+
.stage-badge.is-mania span { font: 900 clamp(1.1rem, 1.6vw, 1.5rem)/1 system-ui, sans-serif; letter-spacing: 0.06em; color: #fff; text-shadow: 0 2px 3px #000; }
|
|
133
|
+
.slot-card .zone-title { padding-right: 34%; }
|
|
134
|
+
.player-badge {
|
|
135
|
+
display: grid; place-items: center; width: 64%; aspect-ratio: 1; border-radius: 50%;
|
|
136
|
+
font: 900 2.4rem system-ui, sans-serif; color: #fff; text-shadow: 0 2px 4px rgb(0 0 0 / 0.6);
|
|
137
|
+
background: radial-gradient(circle at 35% 30%, #fff6, transparent 60%), var(--badge, #6b7280);
|
|
138
|
+
}
|
|
139
|
+
.player-badge[data-char='4'] { --badge: #dc2626; }
|
|
140
|
+
.player-badge[data-char='5'] { --badge: #ca8a04; }
|
|
141
|
+
.player-icon .player-badge { width: calc(var(--w) * 46 / 170); font-size: 1rem; }
|
|
142
|
+
.player-choose[data-player='badge']::after { background: rgb(220 38 38 / 0.2); left: 25%; right: 25%; }
|
|
143
|
+
.rsdk-app[data-screen='slots'] .rsdk-overlay { background-color: rgb(4 6 12 / 0.9); }
|
|
144
|
+
|
|
145
|
+
/* ---- pause & confirm ---- */
|
|
146
|
+
.rsdk-panel {
|
|
147
|
+
width: min(440px, 92vw); display: grid; gap: 10px; padding: 26px; border-radius: 28px;
|
|
148
|
+
background: rgb(20 22 31 / 0.9); border: 1px solid var(--line); box-shadow: 0 40px 100px -30px #000;
|
|
149
|
+
}
|
|
150
|
+
.rsdk-panel h2 { margin-bottom: 8px; }
|
|
151
|
+
.rsdk-panel .text { margin: 0 0 8px; color: var(--muted); line-height: 1.5; }
|
|
152
|
+
.item {
|
|
153
|
+
all: unset; box-sizing: border-box; display: grid; gap: 2px; padding: 13px 16px; border-radius: 14px;
|
|
154
|
+
background: rgb(255 255 255 / 0.05); font-weight: 600; cursor: pointer; transition: background 0.15s, box-shadow 0.15s;
|
|
155
|
+
}
|
|
156
|
+
.item small { font-weight: 500; font-size: 0.78rem; color: var(--muted); }
|
|
157
|
+
.item.is-focused { background: #fff; color: #0b0d12; box-shadow: var(--ring); }
|
|
158
|
+
.item.is-focused small { color: #4b5563; }
|
|
159
|
+
.item.is-danger.is-focused { background: var(--danger); color: #1a0505; box-shadow: 0 0 0 3px var(--danger); }
|
|
160
|
+
.rsdk-panel .row { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
|
|
161
|
+
.rsdk-panel .row .item { text-align: center; }
|
|
162
|
+
/* A dialog sits on its own layer, above anything the screen under it positions (the
|
|
163
|
+
character art on the slot cards is z-index 1), on a backdrop that hides that screen. */
|
|
164
|
+
.rsdk-confirm {
|
|
165
|
+
position: absolute; inset: 0; z-index: 10; display: grid; place-items: center;
|
|
166
|
+
background: rgb(4 6 12 / 0.78);
|
|
167
|
+
backdrop-filter: blur(10px) saturate(0.8);
|
|
168
|
+
-webkit-backdrop-filter: blur(10px) saturate(0.8);
|
|
169
|
+
}
|
|
170
|
+
.rsdk-confirm h2 { font-size: clamp(1.15rem, 2.2vw, 1.55rem); line-height: 1.2; }
|
|
171
|
+
.rsdk-confirm .rsdk-panel {
|
|
172
|
+
width: min(500px, 92vw);
|
|
173
|
+
background:
|
|
174
|
+
radial-gradient(120% 90% at 0% 0%, color-mix(in srgb, var(--accent) 22%, transparent), transparent 60%),
|
|
175
|
+
#151821;
|
|
176
|
+
border-color: rgb(255 255 255 / 0.14);
|
|
177
|
+
box-shadow: 0 40px 120px -20px #000, 0 0 0 1px rgb(0 0 0 / 0.4);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* ---- hints ---- */
|
|
181
|
+
.rsdk-hints { display: flex; flex-wrap: wrap; gap: 8px 18px; justify-content: center; color: var(--muted); font-size: 0.78rem; font-weight: 500; }
|
|
182
|
+
.rsdk-hints span { display: inline-flex; align-items: center; gap: 7px; }
|
|
183
|
+
.rsdk-hints kbd { display: inline-grid; place-items: center; min-width: 22px; height: 22px; padding: 0 6px; border-radius: 11px; background: rgb(255 255 255 / 0.12); color: var(--text); font: 700 0.68rem var(--ui); }
|
|
184
|
+
.rsdk-panel .rsdk-hints { justify-content: flex-start; margin-top: 6px; }
|
|
185
|
+
|
|
186
|
+
@media (max-width: 960px) {
|
|
187
|
+
.slot-cards { justify-content: flex-start; overflow-x: auto; padding: 16px 6px 18px; margin: 0 -6px; scrollbar-width: none; scroll-snap-type: x mandatory; }
|
|
188
|
+
.slot-card { scroll-snap-align: center; }
|
|
189
|
+
}
|
|
190
|
+
@media (prefers-reduced-motion: reduce) {
|
|
191
|
+
.slot-card, .player-choose, .player-choose::before, .player-choose::after, .rsdk-boot img { transition: none; animation: none; }
|
|
192
|
+
}
|