@pkmn/engine 0.1.0-dev.deda8593 → 0.1.0-dev.e0a786f8

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.
Files changed (79) hide show
  1. package/README.md +9 -6
  2. package/build/pkg/addon/browser.d.ts +3 -0
  3. package/build/pkg/addon/browser.js +47 -0
  4. package/build/pkg/addon/browser.js.map +1 -0
  5. package/build/pkg/addon/node.d.ts +3 -0
  6. package/build/pkg/addon/node.js +110 -0
  7. package/build/pkg/addon/node.js.map +1 -0
  8. package/build/pkg/addon/wasm.d.ts +2 -0
  9. package/build/pkg/addon/wasm.js +53 -0
  10. package/build/pkg/addon/wasm.js.map +1 -0
  11. package/build/pkg/addon.d.ts +25 -3
  12. package/build/pkg/addon.js +34 -65
  13. package/build/pkg/addon.js.map +1 -1
  14. package/build/pkg/data/layout.json +15 -2
  15. package/build/pkg/data/protocol.json +23 -9
  16. package/build/pkg/data.d.ts +23 -1
  17. package/build/pkg/data.js.map +1 -1
  18. package/build/pkg/gen1.d.ts +15 -18
  19. package/build/pkg/gen1.js +28 -19
  20. package/build/pkg/gen1.js.map +1 -1
  21. package/build/pkg/index.d.ts +40 -90
  22. package/build/pkg/index.js +23 -70
  23. package/build/pkg/index.js.map +1 -1
  24. package/build/pkg/protocol.d.ts +20 -1
  25. package/build/pkg/protocol.js +105 -103
  26. package/build/pkg/protocol.js.map +1 -1
  27. package/build/tools/debug.js +52 -76
  28. package/build/tools/debug.js.map +1 -1
  29. package/build/tools/display/debug.jsx +152 -0
  30. package/build/tools/display/debug.jsx.map +1 -0
  31. package/build/tools/display/index.js +152 -0
  32. package/build/tools/display/index.js.map +1 -0
  33. package/build/tools/display/ui.jsx +359 -0
  34. package/build/tools/display/ui.jsx.map +1 -0
  35. package/build/tools/display/util.js +33 -0
  36. package/build/tools/display/util.js.map +1 -0
  37. package/build.zig +330 -85
  38. package/package.json +54 -135
  39. package/src/bin/install-pkmn-engine +10 -7
  40. package/src/bin/pkmn-debug +1 -1
  41. package/src/lib/bindings/c.zig +255 -0
  42. package/src/lib/bindings/node.zig +121 -0
  43. package/src/lib/bindings/wasm.zig +59 -0
  44. package/src/lib/common/array.zig +77 -0
  45. package/src/lib/common/data.zig +8 -8
  46. package/src/lib/common/debug.zig +39 -8
  47. package/src/lib/common/js.zig +4 -2
  48. package/src/lib/common/optional.zig +13 -9
  49. package/src/lib/common/options.zig +4 -0
  50. package/src/lib/common/protocol.zig +45 -44
  51. package/src/lib/common/rational.zig +323 -157
  52. package/src/lib/common/rng.zig +5 -7
  53. package/src/lib/common/util.zig +60 -1
  54. package/src/lib/gen1/calc.zig +527 -161
  55. package/src/lib/gen1/chance.zig +366 -240
  56. package/src/lib/gen1/data/moves.zig +2 -4
  57. package/src/lib/gen1/data/species.zig +1 -3
  58. package/src/lib/gen1/data/types.zig +1 -2
  59. package/src/lib/gen1/data.zig +35 -38
  60. package/src/lib/gen1/helpers.zig +17 -554
  61. package/src/lib/gen1/mechanics.zig +280 -193
  62. package/src/lib/gen2/calc.zig +37 -27
  63. package/src/lib/gen2/chance.zig +90 -503
  64. package/src/lib/gen2/data/items.zig +1 -3
  65. package/src/lib/gen2/data/moves.zig +2 -4
  66. package/src/lib/gen2/data/species.zig +1 -3
  67. package/src/lib/gen2/data/types.zig +1 -2
  68. package/src/lib/gen2/data.zig +26 -29
  69. package/src/lib/gen2/generated.zig +18 -23
  70. package/src/lib/gen2/helpers.zig +9 -18
  71. package/src/lib/gen2/mechanics.zig +88 -115
  72. package/src/lib/node.zig +3 -116
  73. package/src/lib/pkmn.zig +14 -7
  74. package/src/lib/wasm.zig +13 -9
  75. package/src/tools/display/dom.ts +93 -0
  76. package/src/tools/display/ui.css +354 -0
  77. package/build/test/display.js +0 -400
  78. package/build/test/display.js.map +0 -1
  79. package/src/test/display/pkmn.html.tmpl +0 -368
@@ -15,94 +15,71 @@ 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 (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
- };
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
- exports.display = display;
36
+ exports.error = error;
37
+ exports.render = render;
27
38
  exports.run = run;
39
+ const child_process_1 = require("child_process");
28
40
  const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
29
42
  const data_1 = require("@pkmn/data");
30
- const pkg_1 = require("../pkg");
31
- const addon = __importStar(require("../pkg/addon"));
32
- const data_2 = require("../pkg/data");
43
+ const data = __importStar(require("../pkg/data"));
33
44
  const gen1 = __importStar(require("../pkg/gen1"));
34
- const display_1 = require("../test/display");
35
- class SpeciesNames {
36
- gen;
37
- battle;
38
- constructor(gen, battle) {
39
- this.gen = gen;
40
- this.battle = battle;
41
- }
42
- get p1() {
43
- const [p1] = Array.from(this.battle.sides);
44
- const team = Array.from(p1.pokemon)
45
- .sort((a, b) => a.position - b.position)
46
- .map(p => ({ species: p.stored.species }));
47
- return new pkg_1.SideInfo(this.gen, { name: 'Player 1', team });
48
- }
49
- get p2() {
50
- const [, p2] = Array.from(this.battle.sides);
51
- const team = Array.from(p2.pokemon)
52
- .sort((a, b) => a.position - b.position)
53
- .map(p => ({ species: p.stored.species }));
54
- return new pkg_1.SideInfo(this.gen, { name: 'Player 2', team });
55
- }
45
+ const display = __importStar(require("./display"));
46
+ const ROOT = path.resolve(__dirname, '..', '..');
47
+ const ZIG = path.dirname(JSON.parse((0, child_process_1.execFileSync)('zig', ['env'], { encoding: 'utf8' })).lib_dir);
48
+ function error(err) {
49
+ return (err
50
+ .replaceAll(ROOT + path.sep, '')
51
+ .replaceAll(ZIG, '$ZIG')
52
+ .split('\n').slice(0, -3).join('\n'));
56
53
  }
57
- function display(gens, data, error, seed) {
58
- if (!data.length)
54
+ function render(gens, buffer, err, seed) {
55
+ if (!buffer.length)
59
56
  throw new Error('Invalid input');
60
- const view = data_2.Data.view(data);
57
+ // Peek at the start of the data buffer just to figure out whether showdown is enabled, what
58
+ // generation it is, and the intial state of the Battle
59
+ const view = data.Data.view(buffer);
61
60
  let offset = 0;
62
61
  const showdown = !!view.getUint8(offset++);
63
- const gen = gens.get(view.getUint8(offset++));
64
- const N = view.getUint16(offset, data_2.LE);
65
- offset += 2;
66
- const lookup = data_2.Lookup.get(gen);
67
- const size = data_2.LAYOUT[gen.num - 1].sizes.Battle;
62
+ const num = view.getUint8(offset++);
63
+ const gen = 'get' in gens ? gens.get(num) : gens;
64
+ if (gen.num !== num) {
65
+ throw new Error(`Require generation ${num} but was passed generation ${gen.num}`);
66
+ }
67
+ offset += 6;
68
+ const lookup = data.Lookup.get(gen);
69
+ const size = data.LAYOUT[gen.num - 1].sizes.Battle;
68
70
  const deserialize = (buf) => {
69
- // We don't care about the native addon, we just need to load it so other checks don't fail
70
- void addon.supports(true);
71
71
  switch (gen.num) {
72
- case 1: return new gen1.Battle(lookup, data_2.Data.view(buf), { showdown });
72
+ case 1: return new gen1.Battle(lookup, data.Data.view(buf), { inert: true, showdown });
73
73
  default: throw new Error(`Unsupported gen: ${gen.num}`);
74
74
  }
75
75
  };
76
- const battle = deserialize(data.subarray(offset, offset += size));
77
- const names = new SpeciesNames(gen, battle);
78
- const log = new pkg_1.Log(gen, lookup, names);
79
- let partial = undefined;
80
- const frames = [];
81
- while (offset < view.byteLength) {
82
- partial = { parsed: [] };
83
- const it = log.parse(data_2.Data.view(data.subarray(offset)))[Symbol.iterator]();
84
- let r = it.next();
85
- while (!r.done) {
86
- partial.parsed.push(r.value);
87
- r = it.next();
88
- }
89
- offset += N || r.value;
90
- if (offset >= view.byteLength)
91
- break;
92
- partial.battle = deserialize(data.subarray(offset, offset += size));
93
- if (offset >= view.byteLength)
94
- break;
95
- partial.result = pkg_1.Result.decode(data[offset++]);
96
- if (offset >= view.byteLength)
97
- break;
98
- partial.c1 = pkg_1.Choice.decode(data[offset++]);
99
- if (offset >= view.byteLength)
100
- break;
101
- partial.c2 = pkg_1.Choice.decode(data[offset++]);
102
- frames.push(partial);
103
- partial = undefined;
104
- }
105
- return (0, display_1.render)(gen, showdown, error, seed, frames, partial);
76
+ const battle = deserialize(buffer.subarray(offset, offset += size));
77
+ return display.render(path.join(ROOT, 'build', 'tools', 'display', 'debug.jsx'), {
78
+ gen: display.prune(gen, battle),
79
+ buf: buffer.toString('base64'),
80
+ error: err && error(err),
81
+ seed: seed?.toString(),
82
+ }, { styles: [path.join(ROOT, 'src', 'tools', 'display', 'debug.css')] });
106
83
  }
107
84
  async function run(gens) {
108
85
  let input;
@@ -122,10 +99,9 @@ async function run(gens) {
122
99
  }
123
100
  input = Buffer.concat(result, length);
124
101
  }
125
- process.stdout.write(display(gens, input));
102
+ process.stdout.write(render(gens, input));
126
103
  }
127
104
  if (require.main === module) {
128
- // eslint-disable-next-line @typescript-eslint/no-var-requires
129
105
  run(new data_1.Generations(require('@pkmn/sim').Dex)).catch(err => {
130
106
  console.error(err.message);
131
107
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/tools/debug.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/tools/debug.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,152 @@
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 () {
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
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const engine = __importStar(require("../../pkg"));
37
+ const data_1 = require("../../pkg/data");
38
+ const gen1 = __importStar(require("../../pkg/gen1"));
39
+ const dom_1 = require("./dom");
40
+ const ui_1 = require("./ui");
41
+ const util = __importStar(require("./util"));
42
+ class SpeciesNames {
43
+ gen;
44
+ battle;
45
+ constructor(gen, battle) {
46
+ this.gen = gen;
47
+ this.battle = battle;
48
+ }
49
+ get p1() {
50
+ const [p1] = Array.from(this.battle.sides);
51
+ const team = Array.from(p1.pokemon)
52
+ .sort((a, b) => a.position - b.position)
53
+ .map(p => ({ species: p.stored.species }));
54
+ return new engine.SideInfo(this.gen, { name: 'Player 1', team });
55
+ }
56
+ get p2() {
57
+ const [, p2] = Array.from(this.battle.sides);
58
+ const team = Array.from(p2.pokemon)
59
+ .sort((a, b) => a.position - b.position)
60
+ .map(p => ({ species: p.stored.species }));
61
+ return new engine.SideInfo(this.gen, { name: 'Player 2', team });
62
+ }
63
+ }
64
+ const App = ({ gen, data, error, seed }) => {
65
+ let offset = 0;
66
+ const showdown = !!data.getUint8(offset);
67
+ offset += 2;
68
+ const N = data.getInt16(offset, data_1.LE);
69
+ offset += 2;
70
+ const X = data.getInt32(offset, data_1.LE);
71
+ offset += 4;
72
+ const lookup = engine.Lookup.get(gen);
73
+ const size = data_1.LAYOUT[gen.num - 1].sizes.Battle;
74
+ const deserialize = (d) => {
75
+ switch (gen.num) {
76
+ case 1: return new gen1.Battle(lookup, d, { inert: true, showdown });
77
+ default: throw new Error(`Unsupported gen: ${gen.num}`);
78
+ }
79
+ };
80
+ const battle = deserialize(windowed(data, offset, offset += size));
81
+ const names = new SpeciesNames(gen, battle);
82
+ const log = new engine.Log(gen, lookup, names);
83
+ let partial = undefined;
84
+ let last = battle;
85
+ const frames = [];
86
+ while (offset < data.byteLength) {
87
+ partial = { parsed: [] };
88
+ if (N !== 0) {
89
+ const it = log.parse(windowed(data, offset))[Symbol.iterator]();
90
+ let r = it.next();
91
+ while (!r.done) {
92
+ partial.parsed.push(r.value);
93
+ r = it.next();
94
+ }
95
+ offset += N > 0 ? N : r.value;
96
+ if (offset >= data.byteLength)
97
+ break;
98
+ }
99
+ if (X < 0) {
100
+ while (offset < data.byteLength && data.getUint8(offset++))
101
+ ;
102
+ }
103
+ else {
104
+ offset += X;
105
+ }
106
+ if (offset >= data.byteLength)
107
+ break;
108
+ partial.battle = deserialize(windowed(data, offset, offset += size));
109
+ if (offset >= data.byteLength)
110
+ break;
111
+ partial.result = engine.Result.decode(data.getUint8(offset++));
112
+ if (offset >= data.byteLength)
113
+ break;
114
+ partial.c1 = engine.Choice.decode(data.getUint8(offset++));
115
+ if (offset >= data.byteLength)
116
+ break;
117
+ partial.c2 = engine.Choice.decode(data.getUint8(offset++));
118
+ frames.push(<Frame frame={partial} gen={gen} showdown={showdown} last={last}/>);
119
+ last = partial.battle;
120
+ partial = undefined;
121
+ }
122
+ frames.push(<Frame frame={partial || {}} gen={gen} showdown={showdown} last={last}/>);
123
+ return <>
124
+ {!!seed && <h1>0x{seed.toString(16).toUpperCase()}</h1>}
125
+ {frames}
126
+ {error && <pre className='error'><code>{error}</code></pre>}
127
+ </>;
128
+ };
129
+ const Frame = ({ frame, gen, showdown, last }) => <div className='frame'>
130
+ {frame.parsed && <div className='log'>
131
+ <pre><code>{util.toText(frame.parsed)}</code></pre>
132
+ </div>}
133
+ {frame.battle && <ui_1.Battle battle={frame.battle} gen={gen} showdown={showdown} last={last}/>}
134
+ {frame.result && <div className='sides' style={{ textAlign: 'center' }}>
135
+ <pre className='side'><code>{frame.result.p1} -&gt; {util.pretty(frame.c1)}</code></pre>
136
+ <pre className='side'><code>{frame.result.p2} -&gt; {util.pretty(frame.c2)}</code></pre>
137
+ </div>}
138
+ </div>;
139
+ function windowed(data, byteOffset, byteLength) {
140
+ const length = byteLength ? byteLength - byteOffset : undefined;
141
+ return new DataView(data.buffer, data.byteOffset + byteOffset, length);
142
+ }
143
+ // Data is inlined in the same script tag to save bytes - it would be more proper embed the data in
144
+ // a <script type="application/json" id="data">...</script>, however this would force us all of the
145
+ // keys to be quoted which wastes space (not to mention parsing the object would then add latency)
146
+ const json = window.DATA;
147
+ const GEN = (0, ui_1.adapt)(new ui_1.Gen(json.gen));
148
+ // NB: "The Unicode Problem" is not relevant here - we know this isn't Unicode text
149
+ // https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem
150
+ const buf = Uint8Array.from(atob(json.buf), c => c.charCodeAt(0));
151
+ document.getElementById('content').appendChild(<App gen={GEN} data={new DataView(buf.buffer, buf.byteOffset, buf.byteLength)} error={json.error} seed={json.seed && BigInt(json.seed)}/>);
152
+ //# sourceMappingURL=debug.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.jsx","sourceRoot":"","sources":["../../../src/tools/display/debug.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,152 @@
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 () {
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
+ })();
35
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
36
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.render = render;
40
+ exports.prune = prune;
41
+ exports.pruneSpecies = pruneSpecies;
42
+ exports.pruneMove = pruneMove;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const esbuild = __importStar(require("esbuild"));
46
+ const html_minifier_1 = require("html-minifier");
47
+ __exportStar(require("./util"), exports);
48
+ const ROOT = path.resolve(__dirname, '..', '..', '..');
49
+ function render(entryPoint, json, options = {}) {
50
+ const result = esbuild.buildSync({
51
+ jsx: 'transform',
52
+ jsxFactory: 'h',
53
+ jsxFragment: 'Fragment',
54
+ // NB: trying to include the .js built version of this doesn't work, it must be the .ts version
55
+ inject: [path.join(ROOT, 'src', 'tools', 'display', 'dom.ts')],
56
+ entryPoints: [entryPoint],
57
+ // esbuild is insanely annoying and refuses to look in NODE_MODULES to find globally installed
58
+ // packages unless we explicitly tell it to do so. require.resolve.paths will return the full
59
+ // lookup path Node uses... which is what a sane person would expect esbuild to do to begin with
60
+ nodePaths: require.resolve.paths('') ?? [],
61
+ bundle: true,
62
+ write: false,
63
+ });
64
+ const styles = options.styles?.map(style => fs.readFileSync(style, 'utf8')) ?? [];
65
+ return (0, html_minifier_1.minify)(`<!DOCTYPE html>
66
+ <html lang="en">
67
+ <head>
68
+ <meta charset="utf-8">
69
+ <meta name="viewport" content="width=device-width, initial-scale=1">
70
+ <link rel="icon" href="https://pkmn.cc/favicon.ico">
71
+ <title>@pkmn/engine</title>
72
+ <style>
73
+ ${fs.readFileSync(path.join(ROOT, 'src', 'tools', 'display', 'ui.css'), 'utf8')}
74
+ ${styles.join('')}
75
+ </style>
76
+ </head>
77
+ <body>
78
+ <noscript>You need to enable JavaScript to run this app.</noscript>
79
+ <div id="content"></div>
80
+ <script>
81
+ window.DATA = ${JSON.stringify(json)};
82
+ ${options.wasm ? `window.WASM = '${options.wasm}';` : ''}
83
+
84
+ ${result.outputFiles[0].text}
85
+
86
+ for (const details of document.getElementsByTagName('details')) {
87
+ details.addEventListener('toggle', e => {
88
+ for (const d of details.parentElement.parentElement.getElementsByTagName('details')) {
89
+ if (d.open !== details.open) d.open = details.open;
90
+ }
91
+ });
92
+ }
93
+ </script>
94
+ </body>
95
+ </html>`, { minifyCSS: true, minifyJS: true });
96
+ }
97
+ function prune(gen, battle) {
98
+ // In order to avoid requiring the full @pkmn/data Generation (more importantly, the @pkmn/dex Dex
99
+ // data backing it), we need to figure out the minimum amount of data actually required to render
100
+ // the battle. We only need data for the game objects that occur in the battle, though without
101
+ // reading through all of the frames here we can't know for sure what is required. We error on the
102
+ // side of overincluding information to save having to parse the entire buffer twice
103
+ const pruned = { num: gen.num, species: {}, moves: {} };
104
+ let metronome = false;
105
+ for (const side of battle.sides) {
106
+ for (const pokemon of side.pokemon) {
107
+ const s = gen.species.get(pokemon.species);
108
+ // Certain Pokémon can change formes in battle (eg. Shaymin-Sky -> Shaymin) so
109
+ // we just greedily include all formes of a species just to be safe
110
+ for (const forme of [s.id, ...(s.formes ?? [])]) {
111
+ const species = gen.species.get(forme);
112
+ pruned.species[species.id] = pruneSpecies(gen, species);
113
+ }
114
+ // Similarly - Metronome can proc pretty much any other move. If any Pokémon
115
+ // has Metronome we just give up and include the whole set of moves
116
+ if (!metronome) {
117
+ for (const ms of pokemon.moves) {
118
+ if (ms.id === 'metronome') {
119
+ metronome = true;
120
+ break;
121
+ }
122
+ const move = gen.moves.get(ms.id);
123
+ pruned.moves[move.id] = pruneMove(gen, move);
124
+ }
125
+ }
126
+ }
127
+ }
128
+ if (metronome) {
129
+ for (const move of gen.moves) {
130
+ pruned.moves[move.id] = pruneMove(gen, move);
131
+ }
132
+ }
133
+ return pruned;
134
+ }
135
+ function pruneSpecies(gen, species) {
136
+ return {
137
+ name: species.name,
138
+ num: species.num,
139
+ genderRatio: species.genderRatio,
140
+ gender: species.gender,
141
+ };
142
+ }
143
+ function pruneMove(gen, move) {
144
+ return {
145
+ name: move.name,
146
+ num: move.num,
147
+ maxpp: Math.min(move.pp / 5 * 8, gen.num === 1 ? 61 : 64),
148
+ basePower: move.basePower,
149
+ type: move.type,
150
+ };
151
+ }
152
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/display/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,wBAoDC;AAED,sBA2CC;AAED,oCAOC;AAED,8BAQC;AAnID,uCAAyB;AACzB,2CAA6B;AAG7B,iDAAmC;AACnC,iDAAqC;AAMrC,yCAAuB;AAEvB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEvD,SAAgB,MAAM,CAAC,UAAkB,EAAE,IAAS,EAAE,UAGlD,EAAE;IACJ,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;QAC/B,GAAG,EAAE,WAAW;QAChB,UAAU,EAAE,GAAG;QACf,WAAW,EAAE,UAAU;QACvB,+FAA+F;QAC/F,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC9D,WAAW,EAAE,CAAC,UAAU,CAAC;QACzB,8FAA8F;QAC9F,6FAA6F;QAC7F,gGAAgG;QAChG,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;QAC1C,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAElF,OAAO,IAAA,sBAAM,EAAC;;;;;;;;MAQV,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;MAC7E,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;;;;;;;qBAOA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;OAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE;;IAEzD,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;;;;;;;;;;;QAWtB,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,KAAK,CAAC,GAAoB,EAAE,MAAoB;IAC9D,kGAAkG;IAClG,iGAAiG;IACjG,8FAA8F;IAC9F,kGAAkG;IAClG,oFAAoF;IACpF,MAAM,MAAM,GAIR,EAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAC,CAAC;IAE3C,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAE,CAAC;YAC5C,8EAA8E;YAC9E,mEAAmE;YACnE,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBAChD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;gBACxC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC1D,CAAC;YACD,4EAA4E;YAC5E,mEAAmE;YACnE,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAC/B,IAAI,EAAE,CAAC,EAAE,KAAK,WAAW,EAAE,CAAC;wBAC1B,SAAS,GAAG,IAAI,CAAC;wBACjB,MAAM;oBACR,CAAC;oBACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAE,CAAC;oBACnC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC7B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,YAAY,CAAC,GAAoB,EAAE,OAAoB;IACrE,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC;AACJ,CAAC;AAED,SAAgB,SAAS,CAAC,GAAoB,EAAE,IAAe;IAC7D,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC;AACJ,CAAC"}