@wasm-gaming/rsdkv5-wasm 0.1.0 → 0.1.2
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 +79 -6
- package/dist/rsdkv5/engine-specs.js +382 -0
- package/dist/rsdkv5/rsdkv5.js +1 -1
- package/dist/rsdkv5/rsdkv5.options.d.ts +61 -13
- package/dist/rsdkv5/rsdkv5.options.d.ts.map +1 -1
- package/dist/rsdkv5/rsdkv5.options.js +35 -21
- package/dist/rsdkv5/rsdkv5.options.js.map +1 -1
- package/dist/rsdkv5/rsdkv5.sdk.d.ts +80 -32
- package/dist/rsdkv5/rsdkv5.sdk.d.ts.map +1 -1
- package/dist/rsdkv5/rsdkv5.sdk.js +369 -181
- package/dist/rsdkv5/rsdkv5.sdk.js.map +1 -1
- package/dist/rsdkv5/rsdkv5.wasm +0 -0
- package/package.json +6 -16
- package/src/rsdkv5.options.ts +96 -43
- package/src/rsdkv5.sdk.ts +424 -208
- package/dist/manifest.json +0 -69
- package/dist/rsdkv5/rsdkv5.manifest.d.ts +0 -4
- package/dist/rsdkv5/rsdkv5.manifest.d.ts.map +0 -1
- package/dist/rsdkv5/rsdkv5.manifest.js +0 -39
- package/dist/rsdkv5/rsdkv5.manifest.js.map +0 -1
- package/src/rsdkv5.manifest.ts +0 -44
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wasm-gaming/rsdkv5-wasm",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.1.2",
|
|
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",
|
|
7
7
|
"url": "git+https://github.com/wasm-gaming/rsdkv5-wasm.git"
|
|
@@ -21,31 +21,21 @@
|
|
|
21
21
|
"./options": {
|
|
22
22
|
"types": "./dist/rsdkv5/rsdkv5.options.d.ts",
|
|
23
23
|
"import": "./dist/rsdkv5/rsdkv5.options.js"
|
|
24
|
-
}
|
|
25
|
-
"./manifest": "./dist/manifest.json"
|
|
24
|
+
}
|
|
26
25
|
},
|
|
27
26
|
"files": [
|
|
28
27
|
"dist/rsdkv5/",
|
|
29
|
-
"!dist/rsdkv5/*.data",
|
|
30
|
-
"!dist/rsdkv5/*.rsdk",
|
|
31
|
-
"dist/manifest.json",
|
|
32
|
-
"src/rsdkv5.manifest.ts",
|
|
33
28
|
"src/rsdkv5.options.ts",
|
|
34
29
|
"src/rsdkv5.sdk.ts",
|
|
35
30
|
"README.md"
|
|
36
31
|
],
|
|
37
32
|
"comment:scripts": "Build logic lives in the Makefile, not here (make build / build-sdk / build-wasm / preview).",
|
|
38
33
|
"scripts": {},
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
"peerDependenciesMeta": {
|
|
43
|
-
"@wasm-gaming/engine-specs": {
|
|
44
|
-
"optional": true
|
|
45
|
-
}
|
|
34
|
+
"comment:dependencies": "engine-specs is the one wasm-gaming package an engine depends on. Its runtime is also copied into dist/rsdkv5/ and imported relatively, so the built SDK loads without a bundler or an import map; the dependency carries the types.",
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@wasm-gaming/engine-specs": "^0.3.2"
|
|
46
37
|
},
|
|
47
38
|
"devDependencies": {
|
|
48
|
-
"@wasm-gaming/engine-specs": "^0.1.0",
|
|
49
39
|
"typescript": "^5.5.0"
|
|
50
40
|
},
|
|
51
41
|
"engineContract": "https://github.com/wasm-gaming/engine-specs",
|
package/src/rsdkv5.options.ts
CHANGED
|
@@ -1,58 +1,111 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* What RSDKv5 accepts, as types and as data.
|
|
3
|
+
*
|
|
4
|
+
* The four payloads of the wasm-gaming engine contract, closed for this engine, and
|
|
5
|
+
* {@link RSDKV5_SPEC} — the same thing as data the contract's base class reads:
|
|
6
|
+
* every default lives there and nowhere else.
|
|
7
|
+
*/
|
|
8
|
+
import type { EnginePayloads, EngineSpec } from '@wasm-gaming/engine-specs';
|
|
2
9
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
//
|
|
10
|
-
// At runtime these options are serialized into Sonic Mania's `Settings.ini`
|
|
11
|
-
// when the host does not pass an explicit `settings` asset.
|
|
10
|
+
/** Bytes, or a thunk that produces them only when the engine actually needs them. */
|
|
11
|
+
export type Rsdkv5Asset =
|
|
12
|
+
| Uint8Array
|
|
13
|
+
| ArrayBuffer
|
|
14
|
+
| null
|
|
15
|
+
| (() => Uint8Array | ArrayBuffer | null | Promise<Uint8Array | ArrayBuffer | null>);
|
|
12
16
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Sonic Mania's native dev menu. Kept off by default: the launcher owns its
|
|
18
|
-
* own overlay, and leaving this on can hijack boot flow.
|
|
19
|
-
*/
|
|
17
|
+
/** The engine, written into the generated `Settings.ini`. Fixed for the life of the wasm. */
|
|
18
|
+
export interface Rsdkv5Config {
|
|
19
|
+
/** Sonic Mania's native dev menu. A host draws its own from `play.devMenu`. */
|
|
20
20
|
devMenu?: boolean;
|
|
21
|
-
/** Enables the debug hooks exposed by the web build. */
|
|
22
|
-
engineDebugMode?: boolean;
|
|
23
|
-
/** VSync the engine's SDL window. */
|
|
24
21
|
vsync?: boolean;
|
|
25
|
-
/**
|
|
22
|
+
/** RSDKv5 language index (0 = English). */
|
|
26
23
|
language?: number;
|
|
27
|
-
/**
|
|
24
|
+
/** RSDKv5 region (-1 = auto). */
|
|
28
25
|
region?: number;
|
|
26
|
+
/** Emscripten glue URL. Defaults to `./rsdkv5.js` next to the SDK. */
|
|
27
|
+
jsUrl?: string;
|
|
28
|
+
/** WASM URL. Defaults to `./rsdkv5.wasm` next to the SDK. */
|
|
29
|
+
wasmUrl?: string;
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
/** The session. Nothing per-session yet. */
|
|
33
|
+
export type Rsdkv5Options = Record<string, never>;
|
|
34
|
+
|
|
35
|
+
export interface Rsdkv5Assets {
|
|
36
|
+
/** The game's `Data.rsdk` (Sonic Mania). Required to start. */
|
|
37
|
+
data?: Rsdkv5Asset;
|
|
38
|
+
/** A ready-made `Settings.ini`; omitted, one is generated from `config`. */
|
|
39
|
+
settings?: Rsdkv5Asset;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Where this engine's files live, and whether they outlive the page. */
|
|
43
|
+
export interface Rsdkv5Storage {
|
|
44
|
+
/**
|
|
45
|
+
* Per-game folder, relative to the engine's own: files land in `rsdkv5/<namespace>/`
|
|
46
|
+
* (WASMFS `/data/rsdkv5/<namespace>`, and the OPFS folder the save is mirrored to).
|
|
47
|
+
* Segments are cleaned (`.`/`..` dropped, odd characters → `_`); a leading
|
|
48
|
+
* `rsdkv5/` is stripped once. `play.storagePath` gives the result.
|
|
49
|
+
*
|
|
50
|
+
* @defaultValue `"default"`
|
|
51
|
+
*/
|
|
52
|
+
namespace?: string;
|
|
53
|
+
/** `null` keeps nothing; otherwise the game's user files are mirrored to OPFS. */
|
|
54
|
+
persist?: 'opfs' | null;
|
|
55
|
+
}
|
|
38
56
|
|
|
39
|
-
export
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
57
|
+
export interface Rsdkv5Events {
|
|
58
|
+
/** Save files changed and were written to `rsdkv5/<namespace>/`. */
|
|
59
|
+
saves: { files: string[] };
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface Rsdkv5Payloads extends EnginePayloads {
|
|
63
|
+
config: Rsdkv5Config;
|
|
64
|
+
options: Rsdkv5Options;
|
|
65
|
+
assets: Rsdkv5Assets;
|
|
66
|
+
storage: Rsdkv5Storage;
|
|
67
|
+
events: Rsdkv5Events;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** The native picture, which the SDK scales to fit its mount. */
|
|
71
|
+
export const RSDKV5_VIDEO = { width: 424, height: 240, aspect: '16:9' } as const;
|
|
72
|
+
|
|
73
|
+
export const RSDKV5_SPEC: EngineSpec<Rsdkv5Payloads> = {
|
|
74
|
+
config: {
|
|
43
75
|
devMenu: {
|
|
44
|
-
type: 'boolean',
|
|
45
76
|
default: false,
|
|
46
|
-
|
|
47
|
-
|
|
77
|
+
live: false,
|
|
78
|
+
description: "Sonic Mania's native dev menu; keep it off and draw your own from play.devMenu.",
|
|
79
|
+
},
|
|
80
|
+
vsync: { default: true, live: false, description: 'VSync in the generated Settings.ini.' },
|
|
81
|
+
language: { default: 0, live: false, description: 'RSDKv5 language index (0 = English).' },
|
|
82
|
+
region: { default: -1, live: false, description: 'RSDKv5 region (-1 = auto).' },
|
|
83
|
+
jsUrl: { live: false, description: 'Emscripten glue URL. Defaults to ./rsdkv5.js.' },
|
|
84
|
+
wasmUrl: { live: false, description: 'WASM URL. Defaults to ./rsdkv5.wasm.' },
|
|
85
|
+
},
|
|
86
|
+
options: {},
|
|
87
|
+
assets: {
|
|
88
|
+
data: {
|
|
89
|
+
allowedTypes: ['.rsdk'],
|
|
90
|
+
live: false,
|
|
91
|
+
description: 'The RSDKv5 game data pack (Sonic Mania). Required to start.',
|
|
92
|
+
},
|
|
93
|
+
settings: {
|
|
94
|
+
allowedTypes: ['.ini'],
|
|
95
|
+
live: false,
|
|
96
|
+
description: 'A ready-made Settings.ini. Omitted, one is generated from config.',
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
storage: {
|
|
100
|
+
namespace: {
|
|
101
|
+
default: 'default',
|
|
102
|
+
live: false,
|
|
103
|
+
description: "Folder for this game's saves, inside the engine's own rsdkv5/ folder (OPFS rsdkv5/<namespace>/).",
|
|
48
104
|
},
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
description:
|
|
105
|
+
persist: {
|
|
106
|
+
enum: ['opfs', null],
|
|
107
|
+
live: false,
|
|
108
|
+
description: "null keeps nothing; otherwise the game's user files are mirrored to OPFS.",
|
|
53
109
|
},
|
|
54
|
-
vsync: { type: 'boolean', default: true },
|
|
55
|
-
language: { type: 'integer', default: 0, minimum: 0 },
|
|
56
|
-
region: { type: 'integer', default: -1 },
|
|
57
110
|
},
|
|
58
111
|
};
|