@pkmn/engine 0.1.0-dev.f3aaee39 → 0.1.0-dev.f6545544
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -3
- package/README.md +51 -23
- package/build/pkg/addon/browser.d.ts +3 -0
- package/build/pkg/addon/browser.js +47 -0
- package/build/pkg/addon/browser.js.map +1 -0
- package/build/pkg/addon/node.d.ts +3 -0
- package/build/pkg/addon/node.js +110 -0
- package/build/pkg/addon/node.js.map +1 -0
- 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 +25 -3
- package/build/pkg/addon.js +39 -71
- package/build/pkg/addon.js.map +1 -1
- package/build/pkg/data/ids.json +12 -12
- package/build/pkg/data/layout.json +17 -4
- package/build/pkg/data/protocol.json +84 -13
- package/build/pkg/data.d.ts +27 -5
- package/build/pkg/data.js.map +1 -1
- package/build/pkg/gen1.d.ts +15 -18
- package/build/pkg/gen1.js +30 -21
- package/build/pkg/gen1.js.map +1 -1
- package/build/pkg/index.d.ts +42 -91
- package/build/pkg/index.js +23 -70
- package/build/pkg/index.js.map +1 -1
- package/build/pkg/protocol.d.ts +20 -1
- package/build/pkg/protocol.js +123 -102
- package/build/pkg/protocol.js.map +1 -1
- package/build/tools/debug.js +53 -76
- package/build/tools/debug.js.map +1 -1
- package/build/tools/display/debug.jsx +152 -0
- package/build/tools/display/debug.jsx.map +1 -0
- package/build/tools/display/index.js +152 -0
- package/build/tools/display/index.js.map +1 -0
- package/build/tools/display/ui.jsx +359 -0
- package/build/tools/display/ui.jsx.map +1 -0
- package/build/tools/display/util.js +33 -0
- package/build/tools/display/util.js.map +1 -0
- package/build.zig +347 -104
- package/package.json +62 -123
- package/src/bin/install-pkmn-engine +31 -20
- package/src/bin/pkmn-debug +1 -1
- package/src/lib/bindings/c.zig +255 -0
- package/src/lib/{binding → bindings}/node.zig +9 -22
- package/src/lib/bindings/wasm.zig +59 -0
- package/src/lib/common/array.zig +77 -0
- package/src/lib/common/data.zig +12 -24
- package/src/lib/common/debug.zig +39 -8
- package/src/lib/common/js.zig +4 -2
- package/src/lib/common/optional.zig +21 -10
- package/src/lib/common/options.zig +6 -0
- package/src/lib/common/protocol.zig +808 -332
- package/src/lib/common/rational.zig +132 -36
- package/src/lib/common/rng.zig +22 -15
- package/src/lib/common/util.zig +50 -1
- package/src/lib/gen1/calc.zig +688 -162
- package/src/lib/gen1/chance.zig +436 -295
- package/src/lib/gen1/data/moves.zig +193 -183
- package/src/lib/gen1/data/species.zig +4 -6
- package/src/lib/gen1/data/types.zig +8 -9
- package/src/lib/gen1/data.zig +55 -70
- package/src/lib/gen1/helpers.zig +91 -562
- package/src/lib/gen1/mechanics.zig +659 -579
- package/src/lib/gen2/calc.zig +153 -0
- package/src/lib/gen2/chance.zig +902 -0
- package/src/lib/gen2/data/items.zig +13 -21
- package/src/lib/gen2/data/moves.zig +664 -572
- package/src/lib/gen2/data/species.zig +2 -4
- package/src/lib/gen2/data/types.zig +135 -33
- package/src/lib/gen2/data.zig +115 -91
- package/src/lib/gen2/generated.zig +801 -0
- package/src/lib/gen2/helpers.zig +54 -37
- package/src/lib/gen2/mechanics.zig +3580 -29
- package/src/lib/node.zig +18 -0
- package/src/lib/pkmn.zig +37 -15
- package/src/lib/wasm.zig +17 -0
- package/src/tools/display/dom.ts +95 -0
- package/src/tools/display/ui.css +354 -0
- package/build/test/display.js +0 -400
- package/build/test/display.js.map +0 -1
- package/src/lib/binding/wasm.zig +0 -12
- package/src/lib/gen1/README.md +0 -892
- package/src/lib/gen2/README.md +0 -308
- package/src/test/display/pkmn.html.tmpl +0 -368
package/build/tools/debug.js
CHANGED
|
@@ -15,93 +15,72 @@ 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
|
-
exports.
|
|
36
|
+
exports.error = error;
|
|
37
|
+
exports.render = render;
|
|
38
|
+
exports.run = run;
|
|
39
|
+
const child_process_1 = require("child_process");
|
|
27
40
|
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
28
42
|
const data_1 = require("@pkmn/data");
|
|
29
|
-
const
|
|
30
|
-
const addon = __importStar(require("../pkg/addon"));
|
|
31
|
-
const data_2 = require("../pkg/data");
|
|
43
|
+
const data = __importStar(require("../pkg/data"));
|
|
32
44
|
const gen1 = __importStar(require("../pkg/gen1"));
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
get p1() {
|
|
42
|
-
const [p1] = Array.from(this.battle.sides);
|
|
43
|
-
const team = Array.from(p1.pokemon)
|
|
44
|
-
.sort((a, b) => a.position - b.position)
|
|
45
|
-
.map(p => ({ species: p.stored.species }));
|
|
46
|
-
return new pkg_1.SideInfo(this.gen, { name: 'Player 1', team });
|
|
47
|
-
}
|
|
48
|
-
get p2() {
|
|
49
|
-
const [, p2] = Array.from(this.battle.sides);
|
|
50
|
-
const team = Array.from(p2.pokemon)
|
|
51
|
-
.sort((a, b) => a.position - b.position)
|
|
52
|
-
.map(p => ({ species: p.stored.species }));
|
|
53
|
-
return new pkg_1.SideInfo(this.gen, { name: 'Player 2', team });
|
|
54
|
-
}
|
|
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'));
|
|
55
53
|
}
|
|
56
|
-
function
|
|
57
|
-
if (!
|
|
54
|
+
function render(gens, buffer, err, seed) {
|
|
55
|
+
if (!buffer.length)
|
|
58
56
|
throw new Error('Invalid input');
|
|
59
|
-
|
|
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);
|
|
60
60
|
let offset = 0;
|
|
61
61
|
const showdown = !!view.getUint8(offset++);
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
|
|
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;
|
|
65
70
|
const deserialize = (buf) => {
|
|
66
|
-
// We don't care about the native addon, we just need to load it so other checks don't fail
|
|
67
|
-
void addon.supports(true);
|
|
68
71
|
switch (gen.num) {
|
|
69
|
-
case 1: return new gen1.Battle(lookup,
|
|
72
|
+
case 1: return new gen1.Battle(lookup, data.Data.view(buf), { inert: true, showdown });
|
|
70
73
|
default: throw new Error(`Unsupported gen: ${gen.num}`);
|
|
71
74
|
}
|
|
72
75
|
};
|
|
73
|
-
const battle = deserialize(
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const it = log.parse(data_2.Data.view(data.subarray(offset)))[Symbol.iterator]();
|
|
81
|
-
let r = it.next();
|
|
82
|
-
while (!r.done) {
|
|
83
|
-
partial.parsed.push(r.value);
|
|
84
|
-
r = it.next();
|
|
85
|
-
}
|
|
86
|
-
offset += r.value;
|
|
87
|
-
if (offset >= view.byteLength)
|
|
88
|
-
break;
|
|
89
|
-
partial.battle = deserialize(data.subarray(offset, offset += size));
|
|
90
|
-
if (offset >= view.byteLength)
|
|
91
|
-
break;
|
|
92
|
-
partial.result = pkg_1.Result.decode(data[offset++]);
|
|
93
|
-
if (offset >= view.byteLength)
|
|
94
|
-
break;
|
|
95
|
-
partial.c1 = pkg_1.Choice.decode(data[offset++]);
|
|
96
|
-
if (offset >= view.byteLength)
|
|
97
|
-
break;
|
|
98
|
-
partial.c2 = pkg_1.Choice.decode(data[offset++]);
|
|
99
|
-
frames.push(partial);
|
|
100
|
-
partial = undefined;
|
|
101
|
-
}
|
|
102
|
-
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')] });
|
|
103
83
|
}
|
|
104
|
-
exports.display = display;
|
|
105
84
|
async function run(gens) {
|
|
106
85
|
let input;
|
|
107
86
|
if (process.argv.length > 2) {
|
|
@@ -120,11 +99,9 @@ async function run(gens) {
|
|
|
120
99
|
}
|
|
121
100
|
input = Buffer.concat(result, length);
|
|
122
101
|
}
|
|
123
|
-
process.stdout.write(
|
|
102
|
+
process.stdout.write(render(gens, input));
|
|
124
103
|
}
|
|
125
|
-
exports.run = run;
|
|
126
104
|
if (require.main === module) {
|
|
127
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
128
105
|
run(new data_1.Generations(require('@pkmn/sim').Dex)).catch(err => {
|
|
129
106
|
console.error(err.message);
|
|
130
107
|
process.exit(1);
|
package/build/tools/debug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/tools/debug.ts"],"names":[],"mappings":"
|
|
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} -> {util.pretty(frame.c1)}</code></pre>
|
|
136
|
+
<pre className='side'><code>{frame.result.p2} -> {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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAoC;AACpC,yCAA0C;AAC1C,qDAAuC;AAEvC,+BAA+B;AAC/B,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,QAAQ,CAAC,MAAM,EAAE,SAAE,CAAC,CAAC;IACpC,MAAM,IAAI,CAAC,CAAC;IACZ,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAE,CAAC,CAAC;IACpC,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,GAA+B,MAAM,CAAC;IAC9C,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,OAAO,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,OAAO,GAAG,EAAC,MAAM,EAAE,EAAE,EAAC,CAAC;QAEvB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACZ,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;YAChB,CAAC;YACD,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC9B,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU;gBAAE,MAAM;QACvC,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,OAAO,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;QACD,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,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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"}
|