@pkmn/engine 0.1.0-dev.f3aab252 → 0.1.0-dev.f3b63b86

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 (80) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +35 -8
  3. package/build/pkg/addon/browser.d.ts +3 -0
  4. package/build/pkg/addon/browser.js +47 -0
  5. package/build/pkg/addon/browser.js.map +1 -0
  6. package/build/pkg/addon/node.d.ts +3 -0
  7. package/build/pkg/addon/node.js +110 -0
  8. package/build/pkg/addon/node.js.map +1 -0
  9. package/build/pkg/addon/wasm.d.ts +2 -0
  10. package/build/pkg/addon/wasm.js +53 -0
  11. package/build/pkg/addon/wasm.js.map +1 -0
  12. package/build/pkg/addon.d.ts +26 -4
  13. package/build/pkg/addon.js +34 -65
  14. package/build/pkg/addon.js.map +1 -1
  15. package/build/pkg/data/layout.json +15 -2
  16. package/build/pkg/data/protocol.json +23 -9
  17. package/build/pkg/data.d.ts +23 -1
  18. package/build/pkg/data.js.map +1 -1
  19. package/build/pkg/gen1.d.ts +15 -18
  20. package/build/pkg/gen1.js +28 -19
  21. package/build/pkg/gen1.js.map +1 -1
  22. package/build/pkg/index.d.ts +39 -89
  23. package/build/pkg/index.js +23 -70
  24. package/build/pkg/index.js.map +1 -1
  25. package/build/pkg/protocol.d.ts +20 -1
  26. package/build/pkg/protocol.js +105 -103
  27. package/build/pkg/protocol.js.map +1 -1
  28. package/build/tools/debug.js +68 -74
  29. package/build/tools/debug.js.map +1 -1
  30. package/build/tools/display/debug.jsx +152 -0
  31. package/build/tools/display/debug.jsx.map +1 -0
  32. package/build/tools/display/index.js +152 -0
  33. package/build/tools/display/index.js.map +1 -0
  34. package/build/tools/display/ui.jsx +359 -0
  35. package/build/tools/display/ui.jsx.map +1 -0
  36. package/build/tools/display/util.js +33 -0
  37. package/build/tools/display/util.js.map +1 -0
  38. package/build.zig +235 -213
  39. package/package.json +59 -141
  40. package/src/bin/install-pkmn-engine +25 -9
  41. package/src/bin/pkmn-debug +1 -1
  42. package/src/lib/bindings/c.zig +200 -0
  43. package/src/lib/bindings/node.zig +117 -0
  44. package/src/lib/bindings/wasm.zig +50 -0
  45. package/src/lib/common/array.zig +5 -12
  46. package/src/lib/common/debug.zig +30 -9
  47. package/src/lib/common/js.zig +3 -9
  48. package/src/lib/common/optional.zig +11 -21
  49. package/src/lib/common/options.zig +4 -0
  50. package/src/lib/common/protocol.zig +180 -171
  51. package/src/lib/common/rational.zig +278 -285
  52. package/src/lib/common/rng.zig +1 -3
  53. package/src/lib/common/util.zig +14 -31
  54. package/src/lib/gen1/calc.zig +258 -106
  55. package/src/lib/gen1/chance.zig +57 -54
  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 +3 -4
  59. package/src/lib/gen1/data.zig +12 -16
  60. package/src/lib/gen1/helpers.zig +13 -28
  61. package/src/lib/gen1/mechanics.zig +131 -101
  62. package/src/lib/gen2/calc.zig +12 -23
  63. package/src/lib/gen2/chance.zig +12 -18
  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 +7 -5
  68. package/src/lib/gen2/data.zig +19 -22
  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 +50 -47
  72. package/src/lib/napi.h +2 -0
  73. package/src/lib/node.zig +4 -121
  74. package/src/lib/pkmn.zig +98 -19
  75. package/src/lib/wasm.zig +9 -9
  76. package/src/tools/display/dom.ts +93 -0
  77. package/src/tools/display/ui.css +354 -0
  78. package/build/test/display.js +0 -405
  79. package/build/test/display.js.map +0 -1
  80. package/src/test/display/pkmn.html.tmpl +0 -368
@@ -15,94 +15,89 @@ 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;
45
+ const display = __importStar(require("./display"));
46
+ const ROOT = path.resolve(__dirname, '..', '..');
47
+ const ZIG = path.dirname(parse((0, child_process_1.execFileSync)('zig', ['env'], { encoding: 'utf8' })).lib_dir);
48
+ function parse(s) {
49
+ try {
50
+ return JSON.parse(s);
41
51
  }
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 });
52
+ catch (e) {
53
+ if (!(e instanceof SyntaxError))
54
+ throw e;
55
+ const json = s
56
+ // "key": -> "key": (ensures keys are quoted)
57
+ .replace(/\.([a-zA-Z_][a-zA-Z0-9_]*)\s*=/g, '"$1":')
58
+ // .{ -> { (converts ZON struct to JSON object)
59
+ .replace(/\.\{/g, '{')
60
+ // Remove trailing commas, which are invalid in JSON
61
+ .replace(/,\s*([}\]])/g, '$1');
62
+ return JSON.parse(json);
55
63
  }
56
64
  }
57
- function display(gens, data, error, seed) {
58
- if (!data.length)
65
+ ;
66
+ function error(err) {
67
+ return (err
68
+ .replaceAll(ROOT + path.sep, '')
69
+ .replaceAll(ZIG, '$ZIG')
70
+ .split('\n').slice(0, -3).join('\n'));
71
+ }
72
+ function render(gens, buffer, err, seed) {
73
+ if (!buffer.length)
59
74
  throw new Error('Invalid input');
60
- const view = data_2.Data.view(data);
75
+ // Peek at the start of the data buffer just to figure out whether showdown is enabled, what
76
+ // generation it is, and the intial state of the Battle
77
+ const view = data.Data.view(buffer);
61
78
  let offset = 0;
62
79
  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;
80
+ const num = view.getUint8(offset++);
81
+ const gen = 'get' in gens ? gens.get(num) : gens;
82
+ if (gen.num !== num) {
83
+ throw new Error(`Require generation ${num} but was passed generation ${gen.num}`);
84
+ }
85
+ offset += 6;
86
+ const lookup = data.Lookup.get(gen);
87
+ const size = data.LAYOUT[gen.num - 1].sizes.Battle;
68
88
  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
89
  switch (gen.num) {
72
- case 1: return new gen1.Battle(lookup, data_2.Data.view(buf), { showdown });
90
+ case 1: return new gen1.Battle(lookup, data.Data.view(buf), { inert: true, showdown });
73
91
  default: throw new Error(`Unsupported gen: ${gen.num}`);
74
92
  }
75
93
  };
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);
94
+ const battle = deserialize(buffer.subarray(offset, offset += size));
95
+ return display.render(path.join(ROOT, 'build', 'tools', 'display', 'debug.jsx'), {
96
+ gen: display.prune(gen, battle),
97
+ buf: buffer.toString('base64'),
98
+ error: err && error(err),
99
+ seed: seed?.toString(),
100
+ }, { styles: [path.join(ROOT, 'src', 'tools', 'display', 'debug.css')] });
106
101
  }
107
102
  async function run(gens) {
108
103
  let input;
@@ -122,10 +117,9 @@ async function run(gens) {
122
117
  }
123
118
  input = Buffer.concat(result, length);
124
119
  }
125
- process.stdout.write(display(gens, input));
120
+ process.stdout.write(render(gens, input));
126
121
  }
127
122
  if (require.main === module) {
128
- // eslint-disable-next-line @typescript-eslint/no-var-requires
129
123
  run(new data_1.Generations(require('@pkmn/sim').Dex)).catch(err => {
130
124
  console.error(err.message);
131
125
  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":"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"}