@pkmn/engine 0.1.0-dev.cbdbb719 → 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.
Files changed (49) hide show
  1. package/build/pkg/addon/browser.d.ts +3 -0
  2. package/build/pkg/addon/browser.js +43 -0
  3. package/build/pkg/addon/browser.js.map +1 -0
  4. package/build/pkg/addon/node.d.ts +3 -0
  5. package/build/pkg/addon/node.js +96 -0
  6. package/build/pkg/addon/node.js.map +1 -0
  7. package/build/pkg/addon.d.ts +2 -0
  8. package/build/pkg/addon.js +29 -51
  9. package/build/pkg/addon.js.map +1 -1
  10. package/build/pkg/data.d.ts +23 -1
  11. package/build/pkg/data.js.map +1 -1
  12. package/build/pkg/gen1.js +1 -1
  13. package/build/pkg/gen1.js.map +1 -1
  14. package/build/pkg/index.d.ts +21 -8
  15. package/build/pkg/index.js +15 -10
  16. package/build/pkg/index.js.map +1 -1
  17. package/build/pkg/protocol.d.ts +20 -1
  18. package/build/pkg/protocol.js +105 -103
  19. package/build/pkg/protocol.js.map +1 -1
  20. package/build/tools/debug.js +34 -67
  21. package/build/tools/debug.js.map +1 -1
  22. package/build/tools/display/debug.jsx +128 -0
  23. package/build/tools/display/debug.jsx.map +1 -0
  24. package/build/tools/display/index.js +132 -0
  25. package/build/tools/display/index.js.map +1 -0
  26. package/build/tools/display/ui.jsx +349 -0
  27. package/build/tools/display/ui.jsx.map +1 -0
  28. package/build/tools/display/util.js +18 -0
  29. package/build/tools/display/util.js.map +1 -0
  30. package/build.zig +0 -2
  31. package/package.json +33 -23
  32. package/src/bin/install-pkmn-engine +4 -2
  33. package/src/bin/pkmn-debug +1 -1
  34. package/src/lib/common/debug.zig +9 -4
  35. package/src/lib/common/options.zig +2 -0
  36. package/src/lib/gen1/calc.zig +158 -14
  37. package/src/lib/gen1/chance.zig +3 -1
  38. package/src/lib/gen1/data.zig +2 -2
  39. package/src/lib/gen1/helpers.zig +0 -3
  40. package/src/lib/gen1/mechanics.zig +13 -6
  41. package/src/lib/gen2/calc.zig +1 -1
  42. package/src/lib/gen2/chance.zig +8 -13
  43. package/src/lib/gen2/helpers.zig +0 -4
  44. package/src/lib/gen2/mechanics.zig +3 -9
  45. package/src/tools/display/dom.ts +96 -0
  46. package/src/tools/display/ui.css +351 -0
  47. package/build/test/display.js +0 -405
  48. package/build/test/display.js.map +0 -1
  49. package/src/test/display/pkmn.html.tmpl +0 -368
@@ -23,86 +23,53 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.display = display;
26
+ exports.error = error;
27
+ exports.render = render;
27
28
  exports.run = run;
29
+ const child_process_1 = require("child_process");
28
30
  const fs = __importStar(require("fs"));
31
+ const path = __importStar(require("path"));
29
32
  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");
33
+ const data = __importStar(require("../pkg/data"));
33
34
  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
- }
35
+ const display = __importStar(require("./display"));
36
+ const ROOT = path.resolve(__dirname, '..', '..');
37
+ const ZIG = path.dirname(JSON.parse((0, child_process_1.execFileSync)('zig', ['env'], { encoding: 'utf8' })).lib_dir);
38
+ function error(err) {
39
+ return (err
40
+ .replaceAll(ROOT + path.sep, '')
41
+ .replaceAll(ZIG, '$ZIG')
42
+ .split('\n').slice(0, -3).join('\n'));
56
43
  }
57
- function display(gens, data, error, seed) {
58
- if (!data.length)
44
+ function render(gens, buffer, err, seed) {
45
+ if (!buffer.length)
59
46
  throw new Error('Invalid input');
60
- const view = data_2.Data.view(data);
47
+ // Peek at the start of the data buffer just to figure out whether showdown is enabled, what
48
+ // generation it is, and the intial state of the Battle
49
+ const view = data.Data.view(buffer);
61
50
  let offset = 0;
62
51
  const showdown = !!view.getUint8(offset++);
63
- const gen = gens.get(view.getUint8(offset++));
64
- const N = view.getUint16(offset, data_2.LE);
52
+ const num = view.getUint8(offset++);
53
+ const gen = 'get' in gens ? gens.get(num) : gens;
54
+ if (gen.num !== num) {
55
+ throw new Error(`Require generation ${num} but was passed generation ${gen.num}`);
56
+ }
65
57
  offset += 2;
66
- const lookup = data_2.Lookup.get(gen);
67
- const size = data_2.LAYOUT[gen.num - 1].sizes.Battle;
58
+ const lookup = data.Lookup.get(gen);
59
+ const size = data.LAYOUT[gen.num - 1].sizes.Battle;
68
60
  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
61
  switch (gen.num) {
72
- case 1: return new gen1.Battle(lookup, data_2.Data.view(buf), { showdown });
62
+ case 1: return new gen1.Battle(lookup, data.Data.view(buf), { inert: true, showdown });
73
63
  default: throw new Error(`Unsupported gen: ${gen.num}`);
74
64
  }
75
65
  };
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);
66
+ const battle = deserialize(buffer.subarray(offset, offset += size));
67
+ return display.render(path.join(ROOT, 'build', 'tools', 'display', 'debug.jsx'), {
68
+ gen: display.prune(gen, battle),
69
+ buf: buffer.toString('base64'),
70
+ error: err && error(err),
71
+ seed: seed?.toString(),
72
+ });
106
73
  }
107
74
  async function run(gens) {
108
75
  let input;
@@ -122,7 +89,7 @@ async function run(gens) {
122
89
  }
123
90
  input = Buffer.concat(result, length);
124
91
  }
125
- process.stdout.write(display(gens, input));
92
+ process.stdout.write(render(gens, input));
126
93
  }
127
94
  if (require.main === module) {
128
95
  // eslint-disable-next-line @typescript-eslint/no-var-requires
@@ -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,128 @@
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
+ const engine = __importStar(require("../../pkg"));
27
+ const data_1 = require("../../pkg/data");
28
+ const gen1 = __importStar(require("../../pkg/gen1"));
29
+ const ui_1 = require("./ui");
30
+ const util = __importStar(require("./util"));
31
+ class SpeciesNames {
32
+ gen;
33
+ battle;
34
+ constructor(gen, battle) {
35
+ this.gen = gen;
36
+ this.battle = battle;
37
+ }
38
+ get p1() {
39
+ const [p1] = Array.from(this.battle.sides);
40
+ const team = Array.from(p1.pokemon)
41
+ .sort((a, b) => a.position - b.position)
42
+ .map(p => ({ species: p.stored.species }));
43
+ return new engine.SideInfo(this.gen, { name: 'Player 1', team });
44
+ }
45
+ get p2() {
46
+ const [, p2] = Array.from(this.battle.sides);
47
+ const team = Array.from(p2.pokemon)
48
+ .sort((a, b) => a.position - b.position)
49
+ .map(p => ({ species: p.stored.species }));
50
+ return new engine.SideInfo(this.gen, { name: 'Player 2', team });
51
+ }
52
+ }
53
+ const App = ({ gen, data, error, seed }) => {
54
+ let offset = 0;
55
+ const showdown = !!data.getUint8(offset);
56
+ offset += 2;
57
+ const N = data.getUint16(offset, data_1.LE);
58
+ offset += 2;
59
+ const lookup = engine.Lookup.get(gen);
60
+ const size = data_1.LAYOUT[gen.num - 1].sizes.Battle;
61
+ const deserialize = (d) => {
62
+ switch (gen.num) {
63
+ case 1: return new gen1.Battle(lookup, d, { inert: true, showdown });
64
+ default: throw new Error(`Unsupported gen: ${gen.num}`);
65
+ }
66
+ };
67
+ const battle = deserialize(windowed(data, offset, offset += size));
68
+ const names = new SpeciesNames(gen, battle);
69
+ const log = new engine.Log(gen, lookup, names);
70
+ let partial = undefined;
71
+ let last = undefined;
72
+ const frames = [];
73
+ while (offset < data.byteLength) {
74
+ partial = { parsed: [] };
75
+ const it = log.parse(windowed(data, offset))[Symbol.iterator]();
76
+ let r = it.next();
77
+ while (!r.done) {
78
+ partial.parsed.push(r.value);
79
+ r = it.next();
80
+ }
81
+ offset += N || r.value;
82
+ if (offset >= data.byteLength)
83
+ break;
84
+ partial.battle = deserialize(windowed(data, offset, offset += size));
85
+ if (offset >= data.byteLength)
86
+ break;
87
+ partial.result = engine.Result.decode(data.getUint8(offset++));
88
+ if (offset >= data.byteLength)
89
+ break;
90
+ partial.c1 = engine.Choice.decode(data.getUint8(offset++));
91
+ if (offset >= data.byteLength)
92
+ break;
93
+ partial.c2 = engine.Choice.decode(data.getUint8(offset++));
94
+ frames.push(<Frame frame={partial} gen={gen} showdown={showdown} last={last}/>);
95
+ last = partial.battle;
96
+ partial = undefined;
97
+ }
98
+ frames.push(<Frame frame={partial || {}} gen={gen} showdown={showdown} last={last}/>);
99
+ return <>
100
+ {!!seed && <h1>0x{seed.toString(16).toUpperCase()}</h1>}
101
+ {frames}
102
+ {error && <pre className='error'><code>{error}</code></pre>}
103
+ </>;
104
+ };
105
+ const Frame = ({ frame, gen, showdown, last }) => <div className='frame'>
106
+ {frame.parsed && <div className='log'>
107
+ <pre><code>{util.toText(frame.parsed)}</code></pre>
108
+ </div>}
109
+ {frame.battle && <ui_1.Battle battle={frame.battle} gen={gen} showdown={showdown} last={last}/>}
110
+ {frame.result && <div className='sides' style={{ textAlign: 'center' }}>
111
+ <pre className='side'><code>{frame.result.p1} -&gt; {util.pretty(frame.c1)}</code></pre>
112
+ <pre className='side'><code>{frame.result.p2} -&gt; {util.pretty(frame.c2)}</code></pre>
113
+ </div>}
114
+ </div>;
115
+ function windowed(data, byteOffset, byteLength) {
116
+ const length = byteLength ? byteLength - byteOffset : undefined;
117
+ return new DataView(data.buffer, data.byteOffset + byteOffset, length);
118
+ }
119
+ // Data is inlined in the same script tag to save bytes - it would be more proper embed the data in
120
+ // a <script type="application/json" id="data">...</script>, however this would force us all of the
121
+ // keys to be quoted which wastes space (not to mention parsing the object would then add latency)
122
+ const json = window.DATA;
123
+ const GEN = (0, ui_1.adapt)(new ui_1.Gen(json.gen));
124
+ // NB: "The Unicode Problem" is not relevant here - we know this isn't Unicode text
125
+ // https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem
126
+ const buf = Uint8Array.from(atob(json.buf), c => c.charCodeAt(0));
127
+ 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)}/>);
128
+ //# sourceMappingURL=debug.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.jsx","sourceRoot":"","sources":["../../../src/tools/display/debug.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAoC;AACpC,yCAA0C;AAC1C,qDAAuC;AAEvC,6BAAoD;AACpD,6CAA+B;AAE/B,MAAM,YAAY;IAChB,GAAG,CAAa;IAChB,MAAM,CAAgB;IAEtB,YAAY,GAAe,EAAE,MAAqB;QAChD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,IAAI,EAAE;QACJ,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;aAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;aACvC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,EAAE;QACJ,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;aAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;aACvC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;IACjE,CAAC;CACF;AAED,MAAM,GAAG,GAAG,CAAC,EAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAKnC,EAAE,EAAE;IACH,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,CAAC,CAAC;IACZ,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAE,CAAC,CAAC;IACrC,MAAM,IAAI,CAAC,CAAC;IAEZ,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,aAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAC9C,MAAM,WAAW,GAAG,CAAC,CAAW,EAAiB,EAAE;QACjD,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC;YAChB,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAC,CAAC,CAAC;YACnE,OAAO,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAE/C,IAAI,OAAO,GAAoC,SAAS,CAAC;IACzD,IAAI,IAAI,GAA2C,SAAS,CAAC;IAC7D,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,OAAO,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,OAAO,GAAG,EAAC,MAAM,EAAE,EAAE,EAAC,CAAC;QACvB,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;QAChB,CAAC;QACD,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;QACvB,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU;YAAE,MAAM;QAErC,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC;QACrE,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU;YAAE,MAAM;QAErC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU;YAAE,MAAM;QAErC,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3D,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU;YAAE,MAAM;QAErC,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE3D,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAG,CAAC,CAAC;QACjF,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;QACtB,OAAO,GAAG,SAAS,CAAC;IACtB,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAG,CAAC,CAAC;IAEvF,OAAO,EACL;IAAA,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CACvD;IAAA,CAAC,MAAM,CACP;IAAA,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAC7D;EAAA,GAAG,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,CAAC,EAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAKzC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAC1B;EAAA,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CACnC;IAAA,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CACpD;EAAA,EAAE,GAAG,CAAC,CACN;EAAA,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,WAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAG,CAC3F;EAAA,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAC,SAAS,EAAE,QAAQ,EAAC,CAAC,CACnE;IAAA,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAE,OAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CACvF;IAAA,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAE,OAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CACzF;EAAA,EAAE,GAAG,CAAC,CACR;AAAA,EAAE,GAAG,CAAC,CAAC;AAEP,SAAS,QAAQ,CAAC,IAAc,EAAE,UAAkB,EAAE,UAAmB;IACvE,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC;AACzE,CAAC;AAED,mGAAmG;AACnG,mGAAmG;AACnG,kGAAkG;AAClG,MAAM,IAAI,GAAI,MAAc,CAAC,IAAI,CAAC;AAClC,MAAM,GAAG,GAAG,IAAA,UAAK,EAAC,IAAI,QAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACrC,mFAAmF;AACnF,+EAA+E;AAC/E,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAE,CAAC,WAAW,CAAC,CAAC,GAAG,CAClD,GAAG,CAAC,CAAC,GAAG,CAAC,CACT,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAC/D,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAClB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EACrC,CAAC,CAAC"}
@@ -0,0 +1,132 @@
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
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
26
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.render = render;
30
+ exports.prune = prune;
31
+ const fs = __importStar(require("fs"));
32
+ const path = __importStar(require("path"));
33
+ const esbuild = __importStar(require("esbuild"));
34
+ const html_minifier_1 = require("html-minifier");
35
+ __exportStar(require("./util"), exports);
36
+ const ROOT = path.resolve(__dirname, '..', '..', '..');
37
+ function render(entryPoint, json) {
38
+ const result = esbuild.buildSync({
39
+ jsx: 'transform',
40
+ jsxFactory: 'h',
41
+ jsxFragment: 'Fragment',
42
+ // NB: trying to include the .js built version of this doesn't work, it must be the .ts version
43
+ inject: [path.join(ROOT, 'src', 'tools', 'display', 'dom.ts')],
44
+ entryPoints: [entryPoint],
45
+ // esbuild is insanely annoying and refuses to look in NODE_MODULES to find globally installed
46
+ // packages unless we explicitly tell it to do so. require.resolve.paths will return the full
47
+ // lookup path Node uses... which is what a sane person would expect esbuild to do to begin with
48
+ nodePaths: require.resolve.paths('') ?? [],
49
+ bundle: true,
50
+ write: false,
51
+ });
52
+ return (0, html_minifier_1.minify)(`<!DOCTYPE html>
53
+ <html lang="en">
54
+ <head>
55
+ <meta charset="utf-8">
56
+ <meta name="viewport" content="width=device-width, initial-scale=1">
57
+ <link rel="icon" href="https://pkmn.cc/favicon.ico">
58
+ <title>@pkmn/engine</title>
59
+ <style>${fs.readFileSync(path.join(ROOT, 'src', 'tools', 'display', 'ui.css'), 'utf8')}</style>
60
+ </head>
61
+ <body>
62
+ <noscript>You need to enable JavaScript to run this app.</noscript>
63
+ <div id="content"></div>
64
+ <script>
65
+ window.DATA = ${JSON.stringify(json)};
66
+
67
+ ${result.outputFiles[0].text}
68
+
69
+ for (const details of document.getElementsByTagName('details')) {
70
+ details.addEventListener('toggle', e => {
71
+ for (const d of details.parentElement.parentElement.getElementsByTagName('details')) {
72
+ if (d.open !== details.open) d.open = details.open;
73
+ }
74
+ });
75
+ }
76
+ </script>
77
+ </body>
78
+ </html>`, { minifyCSS: true, minifyJS: true });
79
+ }
80
+ function prune(gen, battle) {
81
+ // In order to avoid requiring the full @pkmn/data Generation (more importantly, the @pkmn/dex Dex
82
+ // data backing it), we need to figure out the minimum amount of data actually required to render
83
+ // the battle. We only need data for the game objects that occur in the battle, though without
84
+ // reading through all of the frames here we can't know for sure what is required. We error on the
85
+ // side of overincluding information to save having to parse the entire buffer twice
86
+ const pruned = { num: gen.num, species: {}, moves: {} };
87
+ let metronome = false;
88
+ for (const side of battle.sides) {
89
+ for (const pokemon of side.pokemon) {
90
+ const s = gen.species.get(pokemon.species);
91
+ // Certain Pokémon can change formes in battle (eg. Shaymin-Sky -> Shaymin) so
92
+ // we just greedily include all formes of a species just to be safe
93
+ for (const forme of [s.id, ...(s.formes ?? [])]) {
94
+ const species = gen.species.get(forme);
95
+ pruned.species[species.id] = {
96
+ name: species.name,
97
+ num: species.num,
98
+ genderRatio: species.genderRatio,
99
+ gender: species.gender,
100
+ };
101
+ }
102
+ // Similarly - Metronome can proc pretty much any other move. If any Pokémon
103
+ // has Metronome we just give up and include the whole set of moves
104
+ if (!metronome) {
105
+ for (const ms of pokemon.moves) {
106
+ if (ms.id === 'metronome') {
107
+ metronome = true;
108
+ break;
109
+ }
110
+ const move = gen.moves.get(ms.id);
111
+ pruned.moves[move.id] = pruneMove(gen, move);
112
+ }
113
+ }
114
+ }
115
+ }
116
+ if (metronome) {
117
+ for (const move of gen.moves) {
118
+ pruned.moves[move.id] = pruneMove(gen, move);
119
+ }
120
+ }
121
+ return pruned;
122
+ }
123
+ function pruneMove(gen, move) {
124
+ return {
125
+ name: move.name,
126
+ num: move.num,
127
+ maxpp: Math.min(move.pp / 5 * 8, gen.num === 1 ? 61 : 64),
128
+ basePower: move.basePower,
129
+ type: move.type,
130
+ };
131
+ }
132
+ //# 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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"}