@pkmn/engine 0.1.0-dev.a1fcc5d9 → 0.1.0-dev.a27b3ff3
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 -1
- package/README.md +51 -5
- package/build/pkg/addon/browser.d.ts +1 -1
- package/build/pkg/addon/browser.js +6 -2
- package/build/pkg/addon/browser.js.map +1 -1
- package/build/pkg/addon/node.js +22 -8
- package/build/pkg/addon/node.js.map +1 -1
- package/build/pkg/addon/wasm.d.ts +2 -0
- package/build/pkg/addon/wasm.js +53 -0
- package/build/pkg/addon/wasm.js.map +1 -0
- package/build/pkg/addon.d.ts +24 -4
- package/build/pkg/addon.js +8 -17
- package/build/pkg/addon.js.map +1 -1
- package/build/pkg/data/layout.json +15 -2
- package/build/pkg/data/protocol.json +23 -9
- package/build/pkg/gen1.d.ts +15 -18
- package/build/pkg/gen1.js +28 -19
- package/build/pkg/gen1.js.map +1 -1
- package/build/pkg/index.d.ts +37 -100
- package/build/pkg/index.js +23 -75
- package/build/pkg/index.js.map +1 -1
- package/build/tools/debug.js +18 -9
- package/build/tools/debug.js.map +1 -1
- package/build/tools/display/debug.jsx +18 -7
- package/build/tools/display/debug.jsx.map +1 -1
- package/build/tools/display/index.js +35 -15
- package/build/tools/display/index.js.map +1 -1
- package/build/tools/display/ui.jsx +17 -7
- package/build/tools/display/ui.jsx.map +1 -1
- package/build/tools/display/util.js +16 -1
- package/build/tools/display/util.js.map +1 -1
- package/build.zig +198 -85
- package/package.json +29 -125
- package/src/bin/install-pkmn-engine +3 -2
- package/src/lib/bindings/c.zig +255 -0
- package/src/lib/bindings/node.zig +117 -0
- package/src/lib/bindings/wasm.zig +59 -0
- package/src/lib/common/array.zig +1 -1
- package/src/lib/common/js.zig +1 -5
- package/src/lib/common/napi.zig +4 -0
- package/src/lib/common/optional.zig +1 -1
- package/src/lib/common/options.zig +2 -0
- package/src/lib/common/protocol.zig +4 -8
- package/src/lib/common/rational.zig +281 -270
- package/src/lib/common/rng.zig +1 -3
- package/src/lib/common/util.zig +17 -2
- package/src/lib/gen1/calc.zig +52 -69
- package/src/lib/gen1/chance.zig +34 -18
- package/src/lib/gen1/data/moves.zig +2 -4
- package/src/lib/gen1/data/species.zig +1 -3
- package/src/lib/gen1/data/types.zig +2 -3
- package/src/lib/gen1/data.zig +7 -11
- package/src/lib/gen1/helpers.zig +4 -10
- package/src/lib/gen1/mechanics.zig +76 -51
- package/src/lib/gen2/calc.zig +10 -18
- package/src/lib/gen2/data/items.zig +1 -3
- package/src/lib/gen2/data/moves.zig +2 -4
- package/src/lib/gen2/data/species.zig +1 -3
- package/src/lib/gen2/data/types.zig +7 -5
- package/src/lib/gen2/data.zig +14 -17
- package/src/lib/gen2/generated.zig +18 -23
- package/src/lib/gen2/helpers.zig +5 -12
- package/src/lib/gen2/mechanics.zig +42 -39
- package/src/lib/node.zig +4 -121
- package/src/lib/pkmn.zig +7 -2
- package/src/lib/wasm.zig +13 -9
- package/src/tools/display/dom.ts +5 -8
- package/src/tools/display/ui.css +0 -5
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -61,7 +61,10 @@ walk through how to install Zig on each platform - the engine code should work o
|
|
|
61
61
|
though tracks Zig's master branch so this may change in the future if breaking language changes are
|
|
62
62
|
introduced. Note that **due to a [bug in the Zig
|
|
63
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**.
|
|
64
|
+
`0.12.0-dev.876+aaf46187a` is recommended for performance**. Alternatively, building a version of
|
|
65
|
+
[Zig from source](https://github.com/ziglang/zig/wiki/Building-Zig-From-Source) after having applied
|
|
66
|
+
a [patch](zig.patch) to revert [ziglang/zig#17391](https://github.com/ziglang/zig/pull/17391) will
|
|
67
|
+
restore performance while allowing modern Zig features to be used.
|
|
65
68
|
|
|
66
69
|
`libpkmn` can be built with `-Dshowdown` to instead produce the Pokémon Showdown compatible
|
|
67
70
|
`libpkmn-showdown` library. Furthermore, protocol message logging can be enabled through `-Dlog`.
|
|
@@ -115,6 +118,48 @@ error: dependency is missing hash field
|
|
|
115
118
|
note: expected .hash = "122056b93b403033cb7d9bed96a02c2eb8cc1275515976167726ada6eb4207e8ef8a",
|
|
116
119
|
```
|
|
117
120
|
|
|
121
|
+
You must add `build.zig.zon` to the engine package to be able to import it in your `build.zig`:
|
|
122
|
+
|
|
123
|
+
<details><summary>Before v0.14.0</summary>
|
|
124
|
+
|
|
125
|
+
```zig
|
|
126
|
+
.{
|
|
127
|
+
.name = "pkmn",
|
|
128
|
+
.version = "0.1.0-dev",
|
|
129
|
+
.minimum_zig_version = "0.11.0",
|
|
130
|
+
.paths = .{
|
|
131
|
+
"build.zig",
|
|
132
|
+
"docs",
|
|
133
|
+
"LICENSE",
|
|
134
|
+
"README.md",
|
|
135
|
+
"src/include",
|
|
136
|
+
"src/lib",
|
|
137
|
+
},
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
</details>
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
<details><summary>After v0.14.0</summary>
|
|
144
|
+
|
|
145
|
+
```zig
|
|
146
|
+
.{
|
|
147
|
+
.name = .pkmn,
|
|
148
|
+
.version = "0.1.0-dev",
|
|
149
|
+
.minimum_zig_version = "0.14.0",
|
|
150
|
+
.paths = .{
|
|
151
|
+
"build.zig",
|
|
152
|
+
"docs",
|
|
153
|
+
"LICENSE",
|
|
154
|
+
"README.md",
|
|
155
|
+
"src/include",
|
|
156
|
+
"src/lib",
|
|
157
|
+
},
|
|
158
|
+
.fingerprint = 0x74a002f44f200a47,
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
</details>
|
|
162
|
+
|
|
118
163
|
Note that this hash is **not** going to be the same as the commit hash. After adding the hash to
|
|
119
164
|
your `build.zig.zon` you will be able to import the `pkmn` package's build helpers into your
|
|
120
165
|
`build.zig`:
|
|
@@ -212,18 +257,19 @@ protocol via `Log.parse`.
|
|
|
212
257
|
```ts
|
|
213
258
|
import {Dex} from '@pkmn/dex';
|
|
214
259
|
import {Generations} from '@pkmn/data';
|
|
215
|
-
import {Battle} from '@pkmn/engine';
|
|
260
|
+
import {Battle, Choice} from '@pkmn/engine';
|
|
216
261
|
|
|
217
262
|
const gens = new Generations(Dex);
|
|
218
263
|
const battle = Battle.create(...);
|
|
219
264
|
|
|
220
|
-
const choose = (
|
|
265
|
+
const choose = (choices: Choice[]) =>
|
|
266
|
+
choices[Math.floor(Math.random() * choices.length)];
|
|
221
267
|
|
|
222
268
|
let result: Result;
|
|
223
269
|
let c1: Choice, c2: Choice;
|
|
224
270
|
while (!(result = battle.update(c1, c2)).type) {
|
|
225
|
-
c1 = battle.
|
|
226
|
-
c2 = battle.
|
|
271
|
+
c1 = choose(battle.choices('p1', result));
|
|
272
|
+
c2 = choose(battle.choices('p2', result));
|
|
227
273
|
}
|
|
228
274
|
|
|
229
275
|
console.log(result);
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { Argument } from '../addon';
|
|
2
|
-
export declare function load(showdown: boolean, addon?: Argument): Promise<
|
|
2
|
+
export declare function load(showdown: boolean, addon?: Argument): Promise<import("../addon").Bindings<boolean>>;
|
|
3
3
|
export declare function loadSync(): void;
|
|
@@ -2,12 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.load = load;
|
|
4
4
|
exports.loadSync = loadSync;
|
|
5
|
+
const wasm_1 = require("./wasm");
|
|
5
6
|
async function load(showdown, addon) {
|
|
6
7
|
if (typeof addon === 'string' && addon !== 'wasm') {
|
|
7
8
|
throw new Error('Unable to load native addons in the browser!');
|
|
8
9
|
}
|
|
9
10
|
let wasm;
|
|
10
|
-
if (addon instanceof WebAssembly.
|
|
11
|
+
if (addon instanceof WebAssembly.Instance) {
|
|
12
|
+
wasm = addon;
|
|
13
|
+
}
|
|
14
|
+
else if (addon instanceof WebAssembly.Module) {
|
|
11
15
|
try {
|
|
12
16
|
wasm = (await WebAssembly.instantiate(addon));
|
|
13
17
|
}
|
|
@@ -35,7 +39,7 @@ async function load(showdown, addon) {
|
|
|
35
39
|
throw new Error(`${message}\n${err.message}`);
|
|
36
40
|
}
|
|
37
41
|
}
|
|
38
|
-
return wasm.exports;
|
|
42
|
+
return (0, wasm_1.toBindings)(wasm.exports);
|
|
39
43
|
}
|
|
40
44
|
function loadSync() {
|
|
41
45
|
throw new Error('You must `initialize` the WASM addon before using the engine!');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/pkg/addon/browser.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/pkg/addon/browser.ts"],"names":[],"mappings":";;AAKA,oBAiCC;AAED,4BAEC;AAvCD,iCAAkC;AAE3B,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,QAAQ,EAAE,CAAC;QAC1C,IAAI,GAAG,KAAK,CAAC;IACf,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,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,IAAA,iBAAU,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,QAAQ;IACtB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;AACnF,CAAC"}
|
package/build/pkg/addon/node.js
CHANGED
|
@@ -15,18 +15,29 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
36
|
exports.load = load;
|
|
27
37
|
exports.loadSync = loadSync;
|
|
28
38
|
const fs = __importStar(require("fs"));
|
|
29
39
|
const path = __importStar(require("path"));
|
|
40
|
+
const wasm_1 = require("./wasm");
|
|
30
41
|
const ROOT = path.join(__dirname, '..', '..', '..');
|
|
31
42
|
const LIB = path.join(ROOT, 'build', 'lib');
|
|
32
43
|
const NODE = [path.join(LIB, 'pkmn.node'), path.join(LIB, 'pkmn-showdown.node')];
|
|
@@ -56,6 +67,9 @@ async function load(showdown, addon) {
|
|
|
56
67
|
throw error(WASM[+showdown], err);
|
|
57
68
|
}
|
|
58
69
|
}
|
|
70
|
+
else if (addon instanceof WebAssembly.Instance) {
|
|
71
|
+
wasm = addon;
|
|
72
|
+
}
|
|
59
73
|
else if (addon instanceof WebAssembly.Module) {
|
|
60
74
|
try {
|
|
61
75
|
wasm = (await WebAssembly.instantiate(addon));
|
|
@@ -77,7 +91,7 @@ async function load(showdown, addon) {
|
|
|
77
91
|
throw new Error(`Could not instantiate WASM module!\n${err.message}`);
|
|
78
92
|
}
|
|
79
93
|
}
|
|
80
|
-
return wasm.exports;
|
|
94
|
+
return (0, wasm_1.toBindings)(wasm.exports);
|
|
81
95
|
}
|
|
82
96
|
function loadSync(showdown) {
|
|
83
97
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/pkg/addon/node.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/pkg/addon/node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toBindings = toBindings;
|
|
4
|
+
const data_1 = require("../data");
|
|
5
|
+
function toBindings(w) {
|
|
6
|
+
const memory = new Uint8Array(w.memory.buffer);
|
|
7
|
+
return {
|
|
8
|
+
options: {
|
|
9
|
+
showdown: !!memory[w.SHOWDOWN.valueOf()],
|
|
10
|
+
log: !!memory[w.LOG.valueOf()],
|
|
11
|
+
chance: !!memory[w.CHANCE.valueOf()],
|
|
12
|
+
calc: !!memory[w.CALC.valueOf()],
|
|
13
|
+
},
|
|
14
|
+
bindings: [toBinding(1, w)],
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function toBinding(gen, w) {
|
|
18
|
+
const prefix = `GEN${gen}`;
|
|
19
|
+
const buf = w.memory.buffer;
|
|
20
|
+
const constants = new Uint32Array(buf);
|
|
21
|
+
const CHOICES_SIZE = constants[w[`${prefix}_CHOICES_SIZE`].valueOf() / 4];
|
|
22
|
+
const LOGS_SIZE = constants[w[`${prefix}_LOGS_SIZE`].valueOf() / 4];
|
|
23
|
+
const size = data_1.LAYOUT[gen - 1].sizes.Battle;
|
|
24
|
+
const update = w[`${prefix}_update`];
|
|
25
|
+
const choices = w[`${prefix}_choices`];
|
|
26
|
+
const memory = new Uint8Array(buf);
|
|
27
|
+
return {
|
|
28
|
+
CHOICES_SIZE,
|
|
29
|
+
LOGS_SIZE,
|
|
30
|
+
update(battle, c1, c2, log) {
|
|
31
|
+
const bytes = new Uint8Array(battle);
|
|
32
|
+
memory.set(bytes, 0);
|
|
33
|
+
let result;
|
|
34
|
+
if (log) {
|
|
35
|
+
result = update(0, c1, c2, size);
|
|
36
|
+
new Uint8Array(log).set(memory.subarray(size, size + LOGS_SIZE));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
result = update(0, c1, c2, 0);
|
|
40
|
+
}
|
|
41
|
+
bytes.set(memory.subarray(0, size));
|
|
42
|
+
return result;
|
|
43
|
+
},
|
|
44
|
+
choices(battle, player, request, options) {
|
|
45
|
+
const opts = new Uint8Array(options);
|
|
46
|
+
memory.set(new Uint8Array(battle));
|
|
47
|
+
const n = choices(0, player, request, size);
|
|
48
|
+
opts.set(memory.subarray(size, size + n));
|
|
49
|
+
return n;
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=wasm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../../src/pkg/addon/wasm.ts"],"names":[],"mappings":"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"}
|
package/build/pkg/addon.d.ts
CHANGED
|
@@ -1,9 +1,29 @@
|
|
|
1
|
-
import { Choice, Player, Result } from '
|
|
2
|
-
export type Argument = string | URL | WebAssembly.Module | Promise<Response>;
|
|
1
|
+
import { Choice, Player, Result } from './common';
|
|
2
|
+
export type Argument = string | URL | WebAssembly.Module | WebAssembly.Instance | Promise<Response>;
|
|
3
|
+
export interface Bindings<T extends boolean> {
|
|
4
|
+
/**
|
|
5
|
+
* The compile-time options the bindings were built with. showdown is special
|
|
6
|
+
* cased because it changes the name of addon.
|
|
7
|
+
*/
|
|
8
|
+
options: {
|
|
9
|
+
showdown: T;
|
|
10
|
+
log: boolean;
|
|
11
|
+
chance: boolean;
|
|
12
|
+
calc: boolean;
|
|
13
|
+
};
|
|
14
|
+
/** Bindings are per-generation, Generation I is index 0. */
|
|
15
|
+
bindings: Binding[];
|
|
16
|
+
}
|
|
17
|
+
export interface Binding {
|
|
18
|
+
CHOICES_SIZE: number;
|
|
19
|
+
LOGS_SIZE: number;
|
|
20
|
+
update(battle: ArrayBuffer, c1: number, c2: number, log: ArrayBuffer | undefined): number;
|
|
21
|
+
choices(battle: ArrayBuffer, player: number, request: number, out: ArrayBuffer): number;
|
|
22
|
+
}
|
|
23
|
+
/** TODO */
|
|
3
24
|
export declare function initialize(showdown: boolean, addon?: Argument): Promise<void | undefined>;
|
|
4
25
|
export declare function check(showdown: boolean): void;
|
|
5
26
|
export declare function supports(showdown: boolean, log?: boolean): boolean;
|
|
6
27
|
export declare function update(index: number, showdown: boolean, battle: ArrayBuffer, c1?: Choice, c2?: Choice, log?: ArrayBuffer): Result;
|
|
7
|
-
export declare function choices(index: number, showdown: boolean, battle: ArrayBuffer, player: Player, choice: Choice['type'],
|
|
8
|
-
export declare function choose(index: number, showdown: boolean, battle: ArrayBuffer, player: Player, choice: Choice['type'], buf: ArrayBuffer, fn: (n: number) => number): Choice;
|
|
28
|
+
export declare function choices(index: number, showdown: boolean, battle: ArrayBuffer, player: Player, choice: Choice['type'], out: Uint8Array): Choice[];
|
|
9
29
|
export declare function size(index: number, type: 'choices' | 'log'): number;
|
package/build/pkg/addon.js
CHANGED
|
@@ -5,12 +5,12 @@ exports.check = check;
|
|
|
5
5
|
exports.supports = supports;
|
|
6
6
|
exports.update = update;
|
|
7
7
|
exports.choices = choices;
|
|
8
|
-
exports.choose = choose;
|
|
9
8
|
exports.size = size;
|
|
10
9
|
const node_1 = require("./addon/node");
|
|
11
|
-
const
|
|
10
|
+
const common_1 = require("./common");
|
|
12
11
|
const ADDONS = [];
|
|
13
12
|
const loading = [];
|
|
13
|
+
/** TODO */
|
|
14
14
|
async function initialize(showdown, addon) {
|
|
15
15
|
if (loading[+showdown]) {
|
|
16
16
|
throw new Error(`Cannot call initialize more than once with showdown=${showdown}`);
|
|
@@ -47,12 +47,12 @@ function addons(showdown) {
|
|
|
47
47
|
return ADDONS;
|
|
48
48
|
}
|
|
49
49
|
function update(index, showdown, battle, c1, c2, log) {
|
|
50
|
-
return
|
|
51
|
-
.update(battle,
|
|
50
|
+
return common_1.Result.decode(ADDONS[+showdown].bindings[index]
|
|
51
|
+
.update(battle, common_1.Choice.encode(c1), common_1.Choice.encode(c2), log));
|
|
52
52
|
}
|
|
53
|
-
function choices(index, showdown, battle, player, choice,
|
|
53
|
+
function choices(index, showdown, battle, player, choice, out) {
|
|
54
54
|
const request = choice[0] === 'p' ? 0 : choice[0] === 'm' ? 1 : 2;
|
|
55
|
-
const n = ADDONS[+showdown].bindings[index].choices(battle, +(player !== 'p1'), request,
|
|
55
|
+
const n = ADDONS[+showdown].bindings[index].choices(battle, +(player !== 'p1'), request, out.buffer);
|
|
56
56
|
// The top-level API signature means our hands our tied with respect to
|
|
57
57
|
// writing really fast bindings here. The simplest approach would be to return
|
|
58
58
|
// the ArrayBuffer the bindings populate as well as its size and only decode a
|
|
@@ -67,21 +67,12 @@ function choices(index, showdown, battle, player, choice, buf) {
|
|
|
67
67
|
// choices function for each generation within node.zig. We could do something
|
|
68
68
|
// really galaxy-brained and return some sort of frankenstein subclass of
|
|
69
69
|
// Array backed by ArrayBuffer which would lazily decode the Choice on access,
|
|
70
|
-
// but thats ultimately not worth the effort.
|
|
71
|
-
// idiomatic API and performance here, hence why the choose function below
|
|
72
|
-
// exists.
|
|
70
|
+
// but thats ultimately not worth the effort.
|
|
73
71
|
const options = new Array(n);
|
|
74
|
-
const data = new Uint8Array(buf);
|
|
75
72
|
for (let i = 0; i < n; i++)
|
|
76
|
-
options[i] =
|
|
73
|
+
options[i] = common_1.Choice.decode(out[i]);
|
|
77
74
|
return options;
|
|
78
75
|
}
|
|
79
|
-
function choose(index, showdown, battle, player, choice, buf, fn) {
|
|
80
|
-
const request = choice[0] === 'p' ? 0 : choice[0] === 'm' ? 1 : 2;
|
|
81
|
-
const n = ADDONS[+showdown].bindings[index].choices(battle, +(player !== 'p1'), request, buf);
|
|
82
|
-
const data = new Uint8Array(buf);
|
|
83
|
-
return _1.Choice.decode(data[fn(n)]);
|
|
84
|
-
}
|
|
85
76
|
function size(index, type) {
|
|
86
77
|
const bindings = (ADDONS[1] ?? ADDONS[0]).bindings[index];
|
|
87
78
|
return type[0] === 'c' ? bindings.CHOICES_SIZE : bindings.LOGS_SIZE;
|
package/build/pkg/addon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addon.js","sourceRoot":"","sources":["../../src/pkg/addon.ts"],"names":[],"mappings":";;AA0BA,gCAWC;AAED,sBASC;AAED,4BAIC;AASD,wBAUC;AAED,
|
|
1
|
+
{"version":3,"file":"addon.js","sourceRoot":"","sources":["../../src/pkg/addon.ts"],"names":[],"mappings":";;AA0BA,gCAWC;AAED,sBASC;AAED,4BAIC;AASD,wBAUC;AAED,0BA6BC;AAED,oBAGC;AA7GD,uCAA4C;AAC5C,qCAAgD;AAqBhD,MAAM,MAAM,GAAwC,EAAE,CAAC;AACvD,MAAM,OAAO,GAA0D,EAAE,CAAC;AAE1E,WAAW;AACJ,KAAK,UAAU,UAAU,CAAC,QAAiB,EAAE,KAAgB;IAClE,IAAI,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,uDAAuD,QAAQ,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3C,OAAO,CAAC,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QAC3B,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,KAAK,CAAC,QAAiB;IACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,IAAI,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,oBAAoB,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,+CAA+C;YAC5F,mDAAmD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAC5F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,QAAQ,CAAC,QAAiB,EAAE,GAAa;IACvD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,MAAM,CAAC,CAAC,QAAQ,CAAE,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,CAAC;AAChD,CAAC;AAED,SAAS,MAAM,CAAC,QAAiB;IAC/B,IAAI,MAAM,CAAC,CAAC,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAC;IACrC,sEAAsE;IACtE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAA,eAAQ,EAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,MAAM,CACpB,KAAa,EACb,QAAiB,EACjB,MAAmB,EACnB,EAAW,EACX,EAAW,EACX,GAAiB;IAEjB,OAAO,eAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;SACpD,MAAM,CAAC,MAAM,EAAE,eAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,eAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,SAAgB,OAAO,CACrB,KAAa,EACb,QAAiB,EACjB,MAAmB,EACnB,MAAc,EACd,MAAsB,EACtB,GAAe;IAEf,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,CAAC,GACL,MAAM,CAAC,CAAC,QAAQ,CAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9F,uEAAuE;IACvE,8EAA8E;IAC9E,8EAA8E;IAC9E,oEAAoE;IACpE,0EAA0E;IAC1E,2EAA2E;IAC3E,4EAA4E;IAC5E,8EAA8E;IAC9E,4EAA4E;IAC5E,2EAA2E;IAC3E,uEAAuE;IACvE,8EAA8E;IAC9E,yEAAyE;IACzE,8EAA8E;IAC9E,6CAA6C;IAC7C,MAAM,OAAO,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,OAAO,CAAC,CAAC,CAAC,GAAG,eAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,IAAI,CAAC,KAAa,EAAE,IAAuB;IACzD,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;AACtE,CAAC"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
"Pokemon": 24,
|
|
7
7
|
"ActivePokemon": 32,
|
|
8
8
|
"Actions": 16,
|
|
9
|
+
"Durations": 8,
|
|
9
10
|
"Summaries": 12
|
|
10
11
|
},
|
|
11
12
|
"offsets": {
|
|
@@ -92,12 +93,24 @@
|
|
|
92
93
|
"confused": 16,
|
|
93
94
|
"paralyzed": 18,
|
|
94
95
|
"duration": 20,
|
|
95
|
-
"
|
|
96
|
-
"
|
|
96
|
+
"sleep": 24,
|
|
97
|
+
"confusion": 26,
|
|
98
|
+
"disable": 29,
|
|
99
|
+
"attacking": 31,
|
|
100
|
+
"binding": 33,
|
|
101
|
+
"move_slot": 36,
|
|
102
|
+
"pp": 40,
|
|
97
103
|
"multi_hit": 44,
|
|
98
104
|
"psywave": 48,
|
|
99
105
|
"metronome": 56
|
|
100
106
|
},
|
|
107
|
+
"Duration": {
|
|
108
|
+
"sleeps": 0,
|
|
109
|
+
"confusion": 18,
|
|
110
|
+
"disable": 21,
|
|
111
|
+
"attacking": 25,
|
|
112
|
+
"binding": 28
|
|
113
|
+
},
|
|
101
114
|
"Damage": {
|
|
102
115
|
"base": 0,
|
|
103
116
|
"final": 2,
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"EndAbility",
|
|
49
49
|
"ClearNegativeBoost",
|
|
50
50
|
"FormeChange",
|
|
51
|
-
"
|
|
51
|
+
"LastNoTarget",
|
|
52
52
|
"SwapBoost",
|
|
53
53
|
"FieldStart",
|
|
54
54
|
"FieldEnd",
|
|
@@ -71,6 +71,7 @@
|
|
|
71
71
|
"ClearPositiveBoost",
|
|
72
72
|
"CanDynamax",
|
|
73
73
|
"SwapSideConditions",
|
|
74
|
+
"UpdatePoke",
|
|
74
75
|
"Terastallize"
|
|
75
76
|
],
|
|
76
77
|
"Move": [
|
|
@@ -92,7 +93,10 @@
|
|
|
92
93
|
"None",
|
|
93
94
|
"Silent",
|
|
94
95
|
"Drain",
|
|
95
|
-
"Leftovers"
|
|
96
|
+
"Leftovers",
|
|
97
|
+
"Berry",
|
|
98
|
+
"BerryJuice",
|
|
99
|
+
"GoldBerry"
|
|
96
100
|
],
|
|
97
101
|
"Damage": [
|
|
98
102
|
"None",
|
|
@@ -106,7 +110,10 @@
|
|
|
106
110
|
"FireSpin",
|
|
107
111
|
"Clamp",
|
|
108
112
|
"Whirlpool",
|
|
109
|
-
"Spikes"
|
|
113
|
+
"Spikes",
|
|
114
|
+
"Nightmare",
|
|
115
|
+
"Curse",
|
|
116
|
+
"Sandstorm"
|
|
110
117
|
],
|
|
111
118
|
"Status": [
|
|
112
119
|
"None",
|
|
@@ -146,6 +153,7 @@
|
|
|
146
153
|
"Struggle",
|
|
147
154
|
"Substitute",
|
|
148
155
|
"Splash",
|
|
156
|
+
"Rage",
|
|
149
157
|
"Attract",
|
|
150
158
|
"LockOn",
|
|
151
159
|
"Bind",
|
|
@@ -153,7 +161,11 @@
|
|
|
153
161
|
"FireSpin",
|
|
154
162
|
"Clamp",
|
|
155
163
|
"Whirlpool",
|
|
156
|
-
"
|
|
164
|
+
"SubstituteBlock",
|
|
165
|
+
"DestinyBond",
|
|
166
|
+
"BeatUp",
|
|
167
|
+
"Magnitude",
|
|
168
|
+
"Spite"
|
|
157
169
|
],
|
|
158
170
|
"Start": [
|
|
159
171
|
"Bide",
|
|
@@ -168,16 +180,17 @@
|
|
|
168
180
|
"TypeChange",
|
|
169
181
|
"Disable",
|
|
170
182
|
"Mimic",
|
|
183
|
+
"Attract",
|
|
171
184
|
"Nightmare",
|
|
172
185
|
"Curse",
|
|
173
186
|
"Foresight",
|
|
174
187
|
"Encore",
|
|
175
188
|
"FutureSight",
|
|
176
|
-
"
|
|
177
|
-
"PerishSong3",
|
|
178
|
-
"PerishSong2",
|
|
189
|
+
"PerishSong0",
|
|
179
190
|
"PerishSong1",
|
|
180
|
-
"
|
|
191
|
+
"PerishSong2",
|
|
192
|
+
"PerishSong3",
|
|
193
|
+
"PerishSong3Silent"
|
|
181
194
|
],
|
|
182
195
|
"End": [
|
|
183
196
|
"Disable",
|
|
@@ -203,7 +216,8 @@
|
|
|
203
216
|
"ToxicSilent",
|
|
204
217
|
"LightScreenSilent",
|
|
205
218
|
"ReflectSilent",
|
|
206
|
-
"BideSilent"
|
|
219
|
+
"BideSilent",
|
|
220
|
+
"LeechSeedFrom"
|
|
207
221
|
],
|
|
208
222
|
"Immune": [
|
|
209
223
|
"None",
|
package/build/pkg/gen1.d.ts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { BoostID, BoostsTable, Generation, ID, PokemonSet, StatID, StatsTable, StatusName, TypeName } from '@pkmn/data';
|
|
2
|
+
import { Choice, Player, Result } from './common';
|
|
2
3
|
import { Lookup } from './data';
|
|
3
|
-
import {
|
|
4
|
+
import { CreateOptions, Data, Gen1, RestoreOptions, Slot } from '.';
|
|
4
5
|
export declare class Battle implements Gen1.Battle {
|
|
5
6
|
readonly config: CreateOptions | RestoreOptions;
|
|
6
7
|
readonly log?: DataView;
|
|
8
|
+
readonly data: DataView;
|
|
7
9
|
private readonly lookup;
|
|
8
|
-
private readonly
|
|
9
|
-
private readonly options;
|
|
10
|
-
private readonly buf;
|
|
10
|
+
private readonly out;
|
|
11
11
|
private readonly cache;
|
|
12
12
|
constructor(lookup: Lookup, data: DataView, config: CreateOptions | RestoreOptions);
|
|
13
|
+
bytes(): DataView<ArrayBufferLike>;
|
|
13
14
|
update(c1?: Choice, c2?: Choice): Result;
|
|
14
15
|
choices(id: Player, result: Result): Choice[];
|
|
15
|
-
choose(id: Player, result: Result, fn: (n: number) => number): Choice;
|
|
16
16
|
get sides(): Generator<Side, void, unknown>;
|
|
17
|
-
_sides
|
|
17
|
+
private _sides;
|
|
18
18
|
side(id: Player): Side;
|
|
19
19
|
foe(side: Player): Side;
|
|
20
20
|
get turn(): number;
|
|
@@ -34,16 +34,16 @@ export declare class Side implements Gen1.Side {
|
|
|
34
34
|
constructor(battle: Battle, lookup: Lookup, data: DataView, id: 'p1' | 'p2');
|
|
35
35
|
get active(): Pokemon | undefined;
|
|
36
36
|
get pokemon(): Generator<Pokemon, void, unknown>;
|
|
37
|
-
_pokemon
|
|
37
|
+
private _pokemon;
|
|
38
38
|
slot(id: number): Slot | undefined;
|
|
39
39
|
get(slot: Slot): Pokemon | undefined;
|
|
40
40
|
get lastUsedMove(): ID | undefined;
|
|
41
41
|
get lastSelectedMove(): ID | undefined;
|
|
42
42
|
get lastMoveIndex(): 1 | 2 | 3 | 4 | undefined;
|
|
43
43
|
get lastMoveCounterable(): boolean;
|
|
44
|
-
toJSON(): Gen1.Side
|
|
44
|
+
toJSON(): Data<Gen1.Side>;
|
|
45
45
|
static init(gen: Generation, lookup: Lookup, team: Partial<PokemonSet>[], data: DataView, offset: number): void;
|
|
46
|
-
static encode(gen: Generation, showdown: boolean, lookup: Lookup, battle: Data<Gen1.Battle>, side: Gen1.Side
|
|
46
|
+
static encode(gen: Generation, showdown: boolean, lookup: Lookup, battle: Data<Gen1.Battle>, side: Data<Gen1.Side>, data: DataView, offset: number): void;
|
|
47
47
|
}
|
|
48
48
|
export declare class Pokemon implements Gen1.Pokemon {
|
|
49
49
|
static Volatiles: {
|
|
@@ -64,7 +64,7 @@ export declare class Pokemon implements Gen1.Pokemon {
|
|
|
64
64
|
get volatiles(): Gen1.Volatiles;
|
|
65
65
|
move(slot: 1 | 2 | 3 | 4): Gen1.MoveSlot | undefined;
|
|
66
66
|
get moves(): Iterable<Gen1.MoveSlot>;
|
|
67
|
-
_moves
|
|
67
|
+
private _moves;
|
|
68
68
|
boost(boost: BoostID): number;
|
|
69
69
|
get boosts(): BoostsTable;
|
|
70
70
|
get species(): ID;
|
|
@@ -80,10 +80,10 @@ export declare class Pokemon implements Gen1.Pokemon {
|
|
|
80
80
|
private get sleep();
|
|
81
81
|
private get ext();
|
|
82
82
|
private get toxic();
|
|
83
|
-
toJSON(): Gen1.Pokemon
|
|
83
|
+
toJSON(): Data<Gen1.Pokemon>;
|
|
84
84
|
static init(gen: Generation, lookup: Lookup, set: Partial<PokemonSet>, data: DataView, offset: number, index: number): void;
|
|
85
|
-
static encodeStored(gen: Generation, showdown: boolean, lookup: Lookup, pokemon: Gen1.Pokemon
|
|
86
|
-
static encodeActive(gen: Generation, lookup: Lookup, battle: Data<Gen1.Battle>, pokemon: Gen1.Pokemon | undefined, data: DataView, offset: number): void;
|
|
85
|
+
static encodeStored(gen: Generation, showdown: boolean, lookup: Lookup, pokemon: Data<Gen1.Pokemon>, data: DataView, offset: number): void;
|
|
86
|
+
static encodeActive(gen: Generation, lookup: Lookup, battle: Data<Gen1.Battle>, pokemon: Data<Gen1.Pokemon> | undefined, data: DataView, offset: number): void;
|
|
87
87
|
}
|
|
88
88
|
export declare class StoredPokemon {
|
|
89
89
|
private readonly lookup;
|
|
@@ -100,11 +100,8 @@ export declare class StoredPokemon {
|
|
|
100
100
|
id: ID;
|
|
101
101
|
pp: number;
|
|
102
102
|
}, void, unknown>;
|
|
103
|
-
_moves
|
|
104
|
-
id: ID;
|
|
105
|
-
pp: number;
|
|
106
|
-
}, void, unknown>;
|
|
103
|
+
private _moves;
|
|
107
104
|
get species(): ID;
|
|
108
105
|
get types(): readonly [TypeName, TypeName];
|
|
109
|
-
toJSON(): Gen1.Pokemon['stored']
|
|
106
|
+
toJSON(): Data<Gen1.Pokemon['stored']>;
|
|
110
107
|
}
|