@pkmn/engine 0.1.0-dev.c5fe6d07 → 0.1.0-dev.ce4c0b2a
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/LICENSE +1 -3
- package/README.md +46 -19
- package/build/pkg/addon/browser.d.ts +3 -0
- package/build/pkg/addon/browser.js +43 -0
- package/build/pkg/addon/browser.js.map +1 -0
- package/build/pkg/addon/node.d.ts +3 -0
- package/build/pkg/addon/node.js +96 -0
- package/build/pkg/addon/node.js.map +1 -0
- package/build/pkg/addon.d.ts +2 -0
- package/build/pkg/addon.js +35 -58
- package/build/pkg/addon.js.map +1 -1
- package/build/pkg/data/ids.json +12 -12
- package/build/pkg/data/layout.json +2 -2
- package/build/pkg/data/protocol.json +69 -12
- package/build/pkg/data.d.ts +27 -5
- package/build/pkg/data.js.map +1 -1
- package/build/pkg/gen1.js +3 -3
- package/build/pkg/gen1.js.map +1 -1
- package/build/pkg/index.d.ts +24 -10
- package/build/pkg/index.js +15 -10
- package/build/pkg/index.js.map +1 -1
- package/build/pkg/protocol.d.ts +20 -1
- package/build/pkg/protocol.js +123 -102
- package/build/pkg/protocol.js.map +1 -1
- package/build/tools/debug.js +36 -68
- package/build/tools/debug.js.map +1 -1
- package/build/tools/display/debug.jsx +128 -0
- package/build/tools/display/debug.jsx.map +1 -0
- package/build/tools/display/index.js +132 -0
- package/build/tools/display/index.js.map +1 -0
- package/build/tools/display/ui.jsx +349 -0
- package/build/tools/display/ui.jsx.map +1 -0
- package/build/tools/display/util.js +18 -0
- package/build/tools/display/util.js.map +1 -0
- package/build.zig +230 -99
- package/package.json +63 -30
- package/src/bin/install-pkmn-engine +29 -19
- package/src/bin/pkmn-debug +1 -1
- package/src/lib/common/array.zig +77 -0
- package/src/lib/common/data.zig +12 -24
- package/src/lib/common/debug.zig +11 -6
- package/src/lib/common/js.zig +4 -2
- package/src/lib/common/optional.zig +21 -10
- package/src/lib/common/options.zig +4 -0
- package/src/lib/common/protocol.zig +807 -327
- package/src/lib/common/rational.zig +125 -31
- package/src/lib/common/rng.zig +22 -13
- package/src/lib/common/util.zig +50 -1
- package/src/lib/gen1/calc.zig +660 -137
- package/src/lib/gen1/chance.zig +409 -284
- package/src/lib/gen1/data/moves.zig +192 -180
- package/src/lib/gen1/data/species.zig +3 -3
- package/src/lib/gen1/data/types.zig +7 -7
- package/src/lib/gen1/data.zig +48 -59
- package/src/lib/gen1/helpers.zig +94 -552
- package/src/lib/gen1/mechanics.zig +580 -518
- package/src/lib/gen2/calc.zig +161 -0
- package/src/lib/gen2/chance.zig +902 -0
- package/src/lib/gen2/data/items.zig +12 -18
- package/src/lib/gen2/data/moves.zig +663 -569
- package/src/lib/gen2/data/species.zig +1 -1
- package/src/lib/gen2/data/types.zig +134 -31
- package/src/lib/gen2/data.zig +107 -79
- package/src/lib/gen2/generated.zig +806 -0
- package/src/lib/gen2/helpers.zig +49 -25
- package/src/lib/gen2/mechanics.zig +3560 -12
- package/src/lib/{binding/node.zig → node.zig} +10 -13
- package/src/lib/pkmn.zig +32 -15
- package/src/lib/{binding/wasm.zig → wasm.zig} +2 -1
- package/src/tools/display/dom.ts +96 -0
- package/src/tools/display/ui.css +351 -0
- package/build/test/display.js +0 -400
- package/build/test/display.js.map +0 -1
- package/src/lib/gen1/README.md +0 -892
- package/src/lib/gen2/README.md +0 -308
- package/src/test/display/pkmn.html.tmpl +0 -368
package/LICENSE
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2021-2023 pkmn contributors
|
|
1
|
+
Copyright (c) 2021-2024 pkmn contributors
|
|
4
2
|
|
|
5
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
6
4
|
this software and associated documentation files (the "Software"), to deal in
|
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<br />
|
|
4
4
|
<br />
|
|
5
5
|
<a href="https://github.com/pkmn/engine/actions/workflows/test.yml">
|
|
6
|
-
<img alt="Test Status" src="https://github.com/pkmn/engine/workflows/
|
|
6
|
+
<img alt="Test Status" src="https://github.com/pkmn/engine/actions/workflows/test.yml/badge.svg" />
|
|
7
7
|
</a>
|
|
8
8
|
<a href="#status">
|
|
9
9
|
<img alt="WIP" src="https://img.shields.io/badge/status-WIP-red.svg" />
|
|
@@ -57,9 +57,11 @@ $ zig build --prefix /usr/local -Doptimize=ReleaseFast
|
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
The Zig website has [installation instructions](https://ziglang.org/learn/getting-started/) which
|
|
60
|
-
walk through how to install Zig on each platform - the engine code should work on Zig v0.11.0
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
walk through how to install Zig on each platform - the engine code should work on Zig v0.11.0,
|
|
61
|
+
though tracks Zig's master branch so this may change in the future if breaking language changes are
|
|
62
|
+
introduced. Note that **due to a [bug in the Zig
|
|
63
|
+
compiler](https://github.com/ziglang/zig/issues/17768), compiling with a version of Zig before
|
|
64
|
+
`0.12.0-dev.876+aaf46187a` is recommended for performance**.
|
|
63
65
|
|
|
64
66
|
`libpkmn` can be built with `-Dshowdown` to instead produce the Pokémon Showdown compatible
|
|
65
67
|
`libpkmn-showdown` library. Furthermore, protocol message logging can be enabled through `-Dlog`.
|
|
@@ -87,25 +89,50 @@ directly or build the addons manually and place the artifacts in the expected pa
|
|
|
87
89
|
|
|
88
90
|
### `pkmn`
|
|
89
91
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
92
|
+
To include `pkmn`, add it as a dependency in your project's
|
|
93
|
+
[`build.zig.zon`](https://github.com/ziglang/zig/blob/master/doc/build.zig.zon.md) using [Zig's
|
|
94
|
+
Package Management
|
|
95
|
+
system](https://ziglang.org/download/0.11.0/release-notes.html#Package-Management):
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
```zig
|
|
99
|
+
.dependencies = .{
|
|
100
|
+
.pkmn = .{
|
|
101
|
+
.url = "https://github.com/pkmn/engine/archive/RELEASE.tar.gz",
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Replace `RELEASE` with the tag for the [release](https://github.com/pkmn/engine/releases) you wish
|
|
107
|
+
to use (e.g. `0.1.0` or `nightly`) or the specific hash of any commit. Next, run `zig build` and
|
|
108
|
+
copy the expected hash from the error message into your `build.zig.zon` alongside the `.url`:
|
|
109
|
+
|
|
110
|
+
```sh
|
|
111
|
+
$ zig build
|
|
112
|
+
error: dependency is missing hash field
|
|
113
|
+
.url = "https://github.com/pkmn/engine/archive/nightly.tar.gz",
|
|
114
|
+
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
115
|
+
note: expected .hash = "122056b93b403033cb7d9bed96a02c2eb8cc1275515976167726ada6eb4207e8ef8a",
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Note that this hash is **not** going to be the same as the commit hash. After adding the hash to
|
|
119
|
+
your `build.zig.zon` you will be able to import the `pkmn` package's build helpers into your
|
|
120
|
+
`build.zig`:
|
|
94
121
|
|
|
95
122
|
```zig
|
|
96
123
|
const std = @import("std");
|
|
97
|
-
const pkmn = @import("lib/pkmn/build.zig");
|
|
98
124
|
|
|
99
125
|
pub fn build(b: *std.Build) void {
|
|
100
126
|
...
|
|
101
|
-
|
|
127
|
+
const pkmn = b.dependency("pkmn", .{ .showdown = true, .log = true });
|
|
128
|
+
exe.root_module.addImport("pkmn", pkmn.module("pkmn"));
|
|
102
129
|
...
|
|
103
130
|
}
|
|
104
131
|
```
|
|
105
132
|
|
|
106
|
-
The
|
|
107
|
-
|
|
108
|
-
|
|
133
|
+
The `pkmn` package can be configured with various options such as whether or not Pokémon Showdown
|
|
134
|
+
compatibility mode or protocol message logging should be enabled. Alternatively, you may set options
|
|
135
|
+
via a `pkmn_options` [root source file
|
|
109
136
|
declaration](https://ziglang.org/documentation/master/#Root-Source-File). There are several
|
|
110
137
|
undocumented internal options that can be tweaked as well via build or root options, though these
|
|
111
138
|
options aren't officially supported, affect correctness, and may change meaning or behavior without
|
|
@@ -142,7 +169,7 @@ documentation](docs/PROTOCOL.md) goes into greater detail on the specifics of up
|
|
|
142
169
|
potential logs that may result.
|
|
143
170
|
|
|
144
171
|
*The snippets below are meant to merely illustrate in broad strokes how the pkmn engine can be used
|
|
145
|
-
\- the [`examples`](
|
|
172
|
+
\- the [`examples`](examples) directory contains fully commented and runnable code.*
|
|
146
173
|
|
|
147
174
|
### C
|
|
148
175
|
|
|
@@ -167,7 +194,7 @@ while (!pkmn_result_type(result = pkmn_battle_update(&battle, c1, c2, &options))
|
|
|
167
194
|
if (pkmn_error(result)) exit(1);
|
|
168
195
|
```
|
|
169
196
|
|
|
170
|
-
[(full code)](
|
|
197
|
+
[(full code)](examples/c/example.c)
|
|
171
198
|
|
|
172
199
|
The C API doesn't export any helpers for creating or accessing the opaque battle objects - it's
|
|
173
200
|
instead intended to be used as the foundation for more ergonomic bindings in [other
|
|
@@ -202,7 +229,7 @@ while (!(result = battle.update(c1, c2)).type) {
|
|
|
202
229
|
console.log(result);
|
|
203
230
|
```
|
|
204
231
|
|
|
205
|
-
[(full code)](
|
|
232
|
+
[(full code)](examples/js/example.ts)
|
|
206
233
|
|
|
207
234
|
By default, the `@pkmn/engine` package compiles the engine with `-Dshowdown`, though by running
|
|
208
235
|
`install-pkmn-engine` directly and passing in `--options` you can override this default and build
|
|
@@ -214,7 +241,7 @@ library should be seamless.
|
|
|
214
241
|
|
|
215
242
|
Despite relying on the native engine code, the `@pkmn/engine` code is designed to also work in
|
|
216
243
|
browsers which support [WebAssembly](https://webassembly.org/). Running `npm run start:web` from the
|
|
217
|
-
[`examples`](
|
|
244
|
+
[`examples`](examples/js) directory starts a server that can be used to demonstrate the engine
|
|
218
245
|
running in the browser.
|
|
219
246
|
|
|
220
247
|
### Zig
|
|
@@ -226,7 +253,7 @@ be used when logging is enabled to allow for easily printing e.g. to standard ou
|
|
|
226
253
|
const std = @import("std");
|
|
227
254
|
const pkmn = @import("pkmn");
|
|
228
255
|
|
|
229
|
-
var random = std.
|
|
256
|
+
var random = std.Random.DefaultPrng.init(seed).random();
|
|
230
257
|
var choices: [pkmn.CHOICES_SIZE]pkmn.Choice = undefined;
|
|
231
258
|
|
|
232
259
|
var battle = ...
|
|
@@ -244,7 +271,7 @@ while (result.type == .None) : (result = try battle.update(c1, c2, &options)) {
|
|
|
244
271
|
std.debug.print("{}\n", .{result.type});
|
|
245
272
|
```
|
|
246
273
|
|
|
247
|
-
[(full code)](
|
|
274
|
+
[(full code)](examples/zig/example.zig)
|
|
248
275
|
|
|
249
276
|
The Zig package also supports some APIs which are difficult to expose elsewhere such as the
|
|
250
277
|
`FixedRNG` which allows you to fully specify the exact RNG frames (which can be useful for ensuring
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.load = load;
|
|
4
|
+
exports.loadSync = loadSync;
|
|
5
|
+
async function load(showdown, addon) {
|
|
6
|
+
if (typeof addon === 'string' && addon !== 'wasm') {
|
|
7
|
+
throw new Error('Unable to load native addons in the browser!');
|
|
8
|
+
}
|
|
9
|
+
let wasm;
|
|
10
|
+
if (addon instanceof WebAssembly.Module) {
|
|
11
|
+
try {
|
|
12
|
+
wasm = (await WebAssembly.instantiate(addon));
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
if (!(err instanceof Error))
|
|
16
|
+
throw err;
|
|
17
|
+
throw new Error(`Could not instantiate WASM module!\n${err.message}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
const name = `pkmn${showdown ? '-showdown' : ''}.wasm`;
|
|
22
|
+
try {
|
|
23
|
+
const response = !addon || addon === 'wasm' ? fetch(name)
|
|
24
|
+
: addon instanceof URL ? fetch(addon) : addon;
|
|
25
|
+
wasm = (await WebAssembly.instantiateStreaming(response)).instance;
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
if (!(err instanceof Error))
|
|
29
|
+
throw err;
|
|
30
|
+
const message = !addon || addon === 'wasm'
|
|
31
|
+
? `Could not find ${name} - did you run \`npx install-pkmn-engine\`?`
|
|
32
|
+
: addon instanceof URL
|
|
33
|
+
? `Could not fetch WASM module from '${addon.href}'!`
|
|
34
|
+
: 'Could not instantiate WASM module!';
|
|
35
|
+
throw new Error(`${message}\n${err.message}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return wasm.exports;
|
|
39
|
+
}
|
|
40
|
+
function loadSync() {
|
|
41
|
+
throw new Error('You must `initialize` the WASM addon before using the engine!');
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/pkg/addon/browser.ts"],"names":[],"mappings":";;AAGA,oBA+BC;AAED,4BAEC;AAnCM,KAAK,UAAU,IAAI,CAAC,QAAiB,EAAE,KAAgB;IAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,IAA0B,CAAC;IAC/B,IAAI,KAAK,YAAY,WAAW,CAAC,MAAM,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;gBAAE,MAAM,GAAG,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,OAAO,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;gBACvD,CAAC,CAAE,KAAiC,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC7E,IAAI,GAAG,CAAC,MAAM,WAAW,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;gBAAE,MAAM,GAAG,CAAC;YACvC,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,KAAK,KAAK,MAAM;gBACxC,CAAC,CAAC,kBAAkB,IAAI,6CAA6C;gBACrE,CAAC,CAAE,KAAiC,YAAY,GAAG;oBACjD,CAAC,CAAC,qCAAsC,KAAa,CAAC,IAAI,IAAI;oBAC9D,CAAC,CAAC,oCAAoC,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC;AAED,SAAgB,QAAQ;IACtB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;AACnF,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.load = load;
|
|
27
|
+
exports.loadSync = loadSync;
|
|
28
|
+
const fs = __importStar(require("fs"));
|
|
29
|
+
const path = __importStar(require("path"));
|
|
30
|
+
const ROOT = path.join(__dirname, '..', '..', '..');
|
|
31
|
+
const LIB = path.join(ROOT, 'build', 'lib');
|
|
32
|
+
const NODE = [path.join(LIB, 'pkmn.node'), path.join(LIB, 'pkmn-showdown.node')];
|
|
33
|
+
const WASM = [path.join(LIB, 'pkmn.wasm'), path.join(LIB, 'pkmn-showdown.wasm')];
|
|
34
|
+
async function load(showdown, addon) {
|
|
35
|
+
if (addon === undefined || typeof addon === 'string' && addon !== 'wasm') {
|
|
36
|
+
try {
|
|
37
|
+
return require(!addon || addon === 'node' ? NODE[+showdown] : addon).engine;
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
if (!(err instanceof Error))
|
|
41
|
+
return err;
|
|
42
|
+
if (addon && addon !== 'node') {
|
|
43
|
+
throw new Error(`Unable to load native addon: '${addon}'\n${err.message}`);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
throw error(NODE[+showdown], err);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
let wasm;
|
|
51
|
+
if (addon === 'wasm') {
|
|
52
|
+
try {
|
|
53
|
+
wasm = (await WebAssembly.instantiate(fs.readFileSync(WASM[+showdown]))).instance;
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
throw error(WASM[+showdown], err);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else if (addon instanceof WebAssembly.Module) {
|
|
60
|
+
try {
|
|
61
|
+
wasm = (await WebAssembly.instantiate(addon));
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
if (!(err instanceof Error))
|
|
65
|
+
throw err;
|
|
66
|
+
throw new Error(`Could not instantiate WASM module!\n${err.message}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
try {
|
|
71
|
+
const response = addon instanceof Promise ? addon : fetch(addon);
|
|
72
|
+
wasm = (await WebAssembly.instantiateStreaming(response)).instance;
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
if (!(err instanceof Error))
|
|
76
|
+
throw err;
|
|
77
|
+
throw new Error(`Could not instantiate WASM module!\n${err.message}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return wasm.exports;
|
|
81
|
+
}
|
|
82
|
+
function loadSync(showdown) {
|
|
83
|
+
try {
|
|
84
|
+
return require(NODE[+showdown]).engine;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function error(file, err) {
|
|
91
|
+
if (!(err instanceof Error))
|
|
92
|
+
return err;
|
|
93
|
+
const message = `Could not find ${path.basename(file)} addon`;
|
|
94
|
+
return new Error(`${message} - did you run \`npx install-pkmn-engine\`?\n${err.message}`);
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/pkg/addon/node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAYA,oBAuCC;AAED,4BAMC;AA1DD,uCAAyB;AACzB,2CAA6B;AAI7B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACpD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAE5C,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC,CAAC;AACjF,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC,CAAC;AAE1E,KAAK,UAAU,IAAI,CAAC,QAAiB,EAAE,KAAgB;IAC5D,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACzE,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,CAAC,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;gBAAE,OAAO,GAAG,CAAC;YACxC,IAAI,KAAK,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7E,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,IAA0B,CAAC;IAC/B,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACpF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;SAAM,IAAI,KAAK,YAAY,WAAW,CAAC,MAAM,EAAE,CAAC;QAC/C,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;gBAAE,MAAM,GAAG,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,MAAM,QAAQ,GAAI,KAAiC,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9F,IAAI,GAAG,CAAC,MAAM,WAAW,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;gBAAE,MAAM,GAAG,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC;AAED,SAAgB,QAAQ,CAAC,QAAiB;IACxC,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,IAAY,EAAE,GAAY;IACvC,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACxC,MAAM,OAAO,GAAG,kBAAkB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC9D,OAAO,IAAI,KAAK,CAAC,GAAG,OAAO,gDAAgD,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5F,CAAC"}
|
package/build/pkg/addon.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { Choice, Player, Result } from '.';
|
|
2
|
+
export type Argument = string | URL | WebAssembly.Module | Promise<Response>;
|
|
3
|
+
export declare function initialize(showdown: boolean, addon?: Argument): Promise<void | undefined>;
|
|
2
4
|
export declare function check(showdown: boolean): void;
|
|
3
5
|
export declare function supports(showdown: boolean, log?: boolean): boolean;
|
|
4
6
|
export declare function update(index: number, showdown: boolean, battle: ArrayBuffer, c1?: Choice, c2?: Choice, log?: ArrayBuffer): Result;
|
package/build/pkg/addon.js
CHANGED
|
@@ -1,78 +1,58 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.
|
|
27
|
-
|
|
3
|
+
exports.initialize = initialize;
|
|
4
|
+
exports.check = check;
|
|
5
|
+
exports.supports = supports;
|
|
6
|
+
exports.update = update;
|
|
7
|
+
exports.choices = choices;
|
|
8
|
+
exports.choose = choose;
|
|
9
|
+
exports.size = size;
|
|
10
|
+
const node_1 = require("./addon/node");
|
|
28
11
|
const _1 = require(".");
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
function
|
|
32
|
-
if (
|
|
33
|
-
|
|
34
|
-
let pkmn = undefined;
|
|
35
|
-
let showdown = undefined;
|
|
36
|
-
try {
|
|
37
|
-
pkmn = require(path.join(ROOT, 'build', 'lib', 'pkmn.node')).engine;
|
|
38
|
-
}
|
|
39
|
-
catch { }
|
|
40
|
-
try {
|
|
41
|
-
showdown =
|
|
42
|
-
require(path.join(ROOT, 'build', 'lib', 'pkmn-showdown.node')).engine;
|
|
12
|
+
const ADDONS = [];
|
|
13
|
+
const loading = [];
|
|
14
|
+
async function initialize(showdown, addon) {
|
|
15
|
+
if (loading[+showdown]) {
|
|
16
|
+
throw new Error(`Cannot call initialize more than once with showdown=${showdown}`);
|
|
43
17
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
|
|
18
|
+
loading[+showdown] = (0, node_1.load)(showdown, addon);
|
|
19
|
+
loading[+showdown].then(a => {
|
|
20
|
+
ADDONS[+showdown] = a;
|
|
21
|
+
}).catch(() => {
|
|
22
|
+
loading[+showdown] = undefined;
|
|
23
|
+
});
|
|
24
|
+
return loading[+showdown]?.then(() => { });
|
|
49
25
|
}
|
|
50
26
|
function check(showdown) {
|
|
51
|
-
if (!
|
|
52
|
-
const opts =
|
|
27
|
+
if (!addons(showdown)[+showdown]) {
|
|
28
|
+
const opts = ADDONS[+!showdown].options.log ? ['-log'] : [];
|
|
53
29
|
if (showdown)
|
|
54
30
|
opts.push('-Dshowdown');
|
|
55
31
|
throw new Error(`@pkmn/engine has ${showdown ? 'not' : 'only'} been configured to support Pokémon Showdown.` +
|
|
56
32
|
`\n(running \`npx install-pkmn-engine --options='${opts.join(' ')}'\` can fix this issue).`);
|
|
57
33
|
}
|
|
58
34
|
}
|
|
59
|
-
exports.check = check;
|
|
60
35
|
function supports(showdown, log) {
|
|
61
|
-
if (!
|
|
36
|
+
if (!addons(showdown)[+showdown])
|
|
62
37
|
return false;
|
|
63
38
|
if (log === undefined)
|
|
64
39
|
return true;
|
|
65
|
-
return
|
|
40
|
+
return ADDONS[+showdown].options.log === log;
|
|
41
|
+
}
|
|
42
|
+
function addons(showdown) {
|
|
43
|
+
if (ADDONS[+showdown])
|
|
44
|
+
return ADDONS;
|
|
45
|
+
// If we havem't been initialized attempt to autoload if we're on Node
|
|
46
|
+
ADDONS[+showdown] = (0, node_1.loadSync)(showdown);
|
|
47
|
+
return ADDONS;
|
|
66
48
|
}
|
|
67
|
-
exports.supports = supports;
|
|
68
49
|
function update(index, showdown, battle, c1, c2, log) {
|
|
69
|
-
return _1.Result.decode(
|
|
50
|
+
return _1.Result.decode(ADDONS[+showdown].bindings[index]
|
|
70
51
|
.update(battle, _1.Choice.encode(c1), _1.Choice.encode(c2), log));
|
|
71
52
|
}
|
|
72
|
-
exports.update = update;
|
|
73
53
|
function choices(index, showdown, battle, player, choice, buf) {
|
|
74
54
|
const request = choice[0] === 'p' ? 0 : choice[0] === 'm' ? 1 : 2;
|
|
75
|
-
const n =
|
|
55
|
+
const n = ADDONS[+showdown].bindings[index].choices(battle, +(player !== 'p1'), request, buf);
|
|
76
56
|
// The top-level API signature means our hands our tied with respect to
|
|
77
57
|
// writing really fast bindings here. The simplest approach would be to return
|
|
78
58
|
// the ArrayBuffer the bindings populate as well as its size and only decode a
|
|
@@ -96,17 +76,14 @@ function choices(index, showdown, battle, player, choice, buf) {
|
|
|
96
76
|
options[i] = _1.Choice.decode(data[i]);
|
|
97
77
|
return options;
|
|
98
78
|
}
|
|
99
|
-
exports.choices = choices;
|
|
100
79
|
function choose(index, showdown, battle, player, choice, buf, fn) {
|
|
101
80
|
const request = choice[0] === 'p' ? 0 : choice[0] === 'm' ? 1 : 2;
|
|
102
|
-
const n =
|
|
81
|
+
const n = ADDONS[+showdown].bindings[index].choices(battle, +(player !== 'p1'), request, buf);
|
|
103
82
|
const data = new Uint8Array(buf);
|
|
104
83
|
return _1.Choice.decode(data[fn(n)]);
|
|
105
84
|
}
|
|
106
|
-
exports.choose = choose;
|
|
107
85
|
function size(index, type) {
|
|
108
|
-
const bindings = (
|
|
86
|
+
const bindings = (ADDONS[1] ?? ADDONS[0]).bindings[index];
|
|
109
87
|
return type[0] === 'c' ? bindings.CHOICES_SIZE : bindings.LOGS_SIZE;
|
|
110
88
|
}
|
|
111
|
-
exports.size = size;
|
|
112
89
|
//# sourceMappingURL=addon.js.map
|
package/build/pkg/addon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addon.js","sourceRoot":"","sources":["../../src/pkg/addon.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"addon.js","sourceRoot":"","sources":["../../src/pkg/addon.ts"],"names":[],"mappings":"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"}
|
package/build/pkg/data/ids.json
CHANGED
|
@@ -20,15 +20,15 @@
|
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
"types": [
|
|
23
|
+
"Ground",
|
|
24
|
+
"Rock",
|
|
25
|
+
"Steel",
|
|
23
26
|
"Normal",
|
|
24
27
|
"Fighting",
|
|
25
28
|
"Flying",
|
|
26
29
|
"Poison",
|
|
27
|
-
"Ground",
|
|
28
|
-
"Rock",
|
|
29
30
|
"Bug",
|
|
30
31
|
"Ghost",
|
|
31
|
-
"Steel",
|
|
32
32
|
"???",
|
|
33
33
|
"Fire",
|
|
34
34
|
"Water",
|
|
@@ -40,15 +40,15 @@
|
|
|
40
40
|
"Dark"
|
|
41
41
|
],
|
|
42
42
|
"items": [
|
|
43
|
+
"softsand",
|
|
44
|
+
"hardstone",
|
|
45
|
+
"metalcoat",
|
|
43
46
|
"pinkbow",
|
|
44
47
|
"blackbelt",
|
|
45
48
|
"sharpbeak",
|
|
46
49
|
"poisonbarb",
|
|
47
|
-
"softsand",
|
|
48
|
-
"hardstone",
|
|
49
50
|
"silverpowder",
|
|
50
51
|
"spelltag",
|
|
51
|
-
"metalcoat",
|
|
52
52
|
"polkadotbow",
|
|
53
53
|
"charcoal",
|
|
54
54
|
"mysticwater",
|
|
@@ -65,21 +65,21 @@
|
|
|
65
65
|
"stick",
|
|
66
66
|
"thickclub",
|
|
67
67
|
"focusband",
|
|
68
|
-
"berryjuice",
|
|
69
68
|
"scopelens",
|
|
70
69
|
"leftovers",
|
|
71
70
|
"berserkgene",
|
|
72
71
|
"lightball",
|
|
72
|
+
"berry",
|
|
73
|
+
"berryjuice",
|
|
74
|
+
"goldberry",
|
|
75
|
+
"mintberry",
|
|
73
76
|
"psncureberry",
|
|
74
77
|
"przcureberry",
|
|
75
|
-
"burntberry",
|
|
76
78
|
"iceberry",
|
|
77
|
-
"
|
|
78
|
-
"mintberry",
|
|
79
|
+
"burntberry",
|
|
79
80
|
"miracleberry",
|
|
81
|
+
"bitterberry",
|
|
80
82
|
"mysteryberry",
|
|
81
|
-
"berry",
|
|
82
|
-
"goldberry",
|
|
83
83
|
"masterball",
|
|
84
84
|
"ultraball",
|
|
85
85
|
"greatball",
|