@pkmn/engine 0.1.0-dev.00879b8b

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 (60) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +368 -0
  3. package/build/pkg/addon.d.ts +7 -0
  4. package/build/pkg/addon.js +111 -0
  5. package/build/pkg/addon.js.map +1 -0
  6. package/build/pkg/data/ids.json +240 -0
  7. package/build/pkg/data/layout.json +108 -0
  8. package/build/pkg/data/protocol.json +230 -0
  9. package/build/pkg/data.d.ts +91 -0
  10. package/build/pkg/data.js +150 -0
  11. package/build/pkg/data.js.map +1 -0
  12. package/build/pkg/gen1.d.ts +110 -0
  13. package/build/pkg/gen1.js +684 -0
  14. package/build/pkg/gen1.js.map +1 -0
  15. package/build/pkg/index.d.ts +387 -0
  16. package/build/pkg/index.js +122 -0
  17. package/build/pkg/index.js.map +1 -0
  18. package/build/pkg/protocol.d.ts +73 -0
  19. package/build/pkg/protocol.js +473 -0
  20. package/build/pkg/protocol.js.map +1 -0
  21. package/build/test/display.js +400 -0
  22. package/build/test/display.js.map +1 -0
  23. package/build/tools/debug.js +134 -0
  24. package/build/tools/debug.js.map +1 -0
  25. package/build.zig +363 -0
  26. package/package.json +232 -0
  27. package/src/bin/install-pkmn-engine +404 -0
  28. package/src/bin/pkmn-debug +62 -0
  29. package/src/lib/common/battle.zig +17 -0
  30. package/src/lib/common/data.zig +117 -0
  31. package/src/lib/common/debug.zig +74 -0
  32. package/src/lib/common/js.zig +118 -0
  33. package/src/lib/common/optional.zig +67 -0
  34. package/src/lib/common/options.zig +51 -0
  35. package/src/lib/common/protocol.zig +1836 -0
  36. package/src/lib/common/rational.zig +357 -0
  37. package/src/lib/common/rng.zig +243 -0
  38. package/src/lib/common/util.zig +12 -0
  39. package/src/lib/gen1/calc.zig +507 -0
  40. package/src/lib/gen1/chance.zig +1063 -0
  41. package/src/lib/gen1/data/moves.zig +1866 -0
  42. package/src/lib/gen1/data/species.zig +1105 -0
  43. package/src/lib/gen1/data/types.zig +131 -0
  44. package/src/lib/gen1/data.zig +634 -0
  45. package/src/lib/gen1/helpers.zig +866 -0
  46. package/src/lib/gen1/mechanics.zig +3156 -0
  47. package/src/lib/gen2/calc.zig +143 -0
  48. package/src/lib/gen2/chance.zig +1315 -0
  49. package/src/lib/gen2/data/items.zig +230 -0
  50. package/src/lib/gen2/data/moves.zig +2878 -0
  51. package/src/lib/gen2/data/species.zig +1798 -0
  52. package/src/lib/gen2/data/types.zig +226 -0
  53. package/src/lib/gen2/data.zig +463 -0
  54. package/src/lib/gen2/generated.zig +806 -0
  55. package/src/lib/gen2/helpers.zig +249 -0
  56. package/src/lib/gen2/mechanics.zig +3632 -0
  57. package/src/lib/node.zig +131 -0
  58. package/src/lib/pkmn.zig +128 -0
  59. package/src/lib/wasm.zig +13 -0
  60. package/src/test/display/pkmn.html.tmpl +368 -0
@@ -0,0 +1,473 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Log = exports.SideInfo = exports.Info = void 0;
4
+ exports.decodeIdentRaw = decodeIdentRaw;
5
+ exports.decodeStatus = decodeStatus;
6
+ exports.decodeTypes = decodeTypes;
7
+ const data_1 = require("./data");
8
+ const ArgType = data_1.PROTOCOL.ArgType;
9
+ /**
10
+ * Information related to battle required to parse the engine's binary protocol
11
+ * into Pokémon Showdown's text protocol (e.g. Pokémon nicknames).
12
+ */
13
+ class Info {
14
+ /** Information for Player 1's side. */
15
+ p1;
16
+ /** Information for Player 2's side. */
17
+ p2;
18
+ constructor(gen, sides) {
19
+ this.p1 = new SideInfo(gen, sides.p1);
20
+ this.p2 = new SideInfo(gen, sides.p2);
21
+ }
22
+ }
23
+ exports.Info = Info;
24
+ /**
25
+ * Information used to parse a given side's team into Pokémon Showdown's text
26
+ * protocol from the engine's binary protocol.
27
+ */
28
+ class SideInfo {
29
+ /** The side's player's name. */
30
+ name;
31
+ /** Information for the side's Pokémon. */
32
+ team;
33
+ constructor(gen, player) {
34
+ this.name = player.name;
35
+ this.team = player.team.map(p => {
36
+ const species = gen.species.get(p.species);
37
+ const name = p.name ?? species.name;
38
+ const fallback = gen.num === 1 ? undefined
39
+ : gen.num === 2 ? gen.stats.toDV(p.ivs?.atk ?? 31) >= species.genderRatio.F * 16 ? 'M' : 'F'
40
+ : 'M';
41
+ const gender = (p.gender ?? species.gender ?? fallback);
42
+ return { species: species.name, name, gender, shiny: p.shiny };
43
+ });
44
+ }
45
+ }
46
+ exports.SideInfo = SideInfo;
47
+ /**
48
+ * Parses the engine's binary protocol into Pokémon Showdown's text protocol.
49
+ */
50
+ class Log {
51
+ /** The generation this Log is able to parse. */
52
+ gen;
53
+ /** The lookup table used by the Log. */
54
+ lookup;
55
+ /** The battle information required to parse the engine's binary protocol. */
56
+ info;
57
+ constructor(gen, lookup, info) {
58
+ this.gen = gen;
59
+ this.lookup = lookup;
60
+ this.info = info;
61
+ }
62
+ /**
63
+ * Decode engine's binary protocol `data` and convert it to lines of Pokémon
64
+ * Showdown's text protocol.
65
+ */
66
+ *parse(data) {
67
+ let lines = [];
68
+ let i = 0;
69
+ for (; i < data.byteLength;) {
70
+ const byte = data.getUint8(i++);
71
+ if (!byte) {
72
+ for (const line of lines)
73
+ yield line;
74
+ return i;
75
+ }
76
+ if (byte === ArgType.LastMiss) {
77
+ lines[0].kwArgs.miss = true;
78
+ }
79
+ else if (byte === ArgType.LastStill) {
80
+ lines[0].kwArgs.still = true;
81
+ }
82
+ else {
83
+ const decoded = DECODERS[byte]?.apply(this, [i, data]);
84
+ if (!decoded)
85
+ throw new Error(`Expected arg at offset ${i} but found ${byte}`);
86
+ i = decoded.offset;
87
+ if (byte === ArgType.Move) {
88
+ for (const line of lines)
89
+ yield line;
90
+ lines = [];
91
+ }
92
+ else if (!lines.length) {
93
+ yield decoded.line;
94
+ continue;
95
+ }
96
+ lines.push(decoded.line);
97
+ }
98
+ }
99
+ for (const line of lines)
100
+ yield line;
101
+ return i;
102
+ }
103
+ }
104
+ exports.Log = Log;
105
+ const GENDERS = ['M', 'F', 'N'];
106
+ const CANT = new Array(data_1.PROTOCOL.Cant.length);
107
+ CANT[data_1.PROTOCOL.Cant.Sleep] = 'slp';
108
+ CANT[data_1.PROTOCOL.Cant.Freeze] = 'frz';
109
+ CANT[data_1.PROTOCOL.Cant.Paralysis] = 'par';
110
+ CANT[data_1.PROTOCOL.Cant.Bound] = 'partiallytrapped';
111
+ CANT[data_1.PROTOCOL.Cant.Flinch] = 'flinch';
112
+ CANT[data_1.PROTOCOL.Cant.Recharge] = 'recharge';
113
+ CANT[data_1.PROTOCOL.Cant.PP] = 'nopp';
114
+ const DAMAGE = new Array(data_1.PROTOCOL.Damage.length);
115
+ DAMAGE[data_1.PROTOCOL.Damage.Poison] = 'psn';
116
+ DAMAGE[data_1.PROTOCOL.Damage.Burn] = 'brn';
117
+ DAMAGE[data_1.PROTOCOL.Damage.Confusion] = 'confusion';
118
+ DAMAGE[data_1.PROTOCOL.Damage.LeechSeed] = 'Leech Seed';
119
+ DAMAGE[data_1.PROTOCOL.Damage.RecoilOf] = 'Recoil';
120
+ const BOOSTS = new Array(data_1.PROTOCOL.Boost.length);
121
+ BOOSTS[data_1.PROTOCOL.Boost.Rage] = 'atk';
122
+ BOOSTS[data_1.PROTOCOL.Boost.Attack] = 'atk';
123
+ BOOSTS[data_1.PROTOCOL.Boost.Defense] = 'def';
124
+ BOOSTS[data_1.PROTOCOL.Boost.Speed] = 'spe';
125
+ BOOSTS[data_1.PROTOCOL.Boost.SpecialAttack] = 'spa';
126
+ BOOSTS[data_1.PROTOCOL.Boost.SpecialDefense] = 'spd';
127
+ BOOSTS[data_1.PROTOCOL.Boost.Accuracy] = 'accuracy';
128
+ BOOSTS[data_1.PROTOCOL.Boost.Evasion] = 'evasion';
129
+ const FAIL = new Array(data_1.PROTOCOL.Fail.length);
130
+ FAIL[data_1.PROTOCOL.Fail.Sleep] = 'slp';
131
+ FAIL[data_1.PROTOCOL.Fail.Poison] = 'psn';
132
+ FAIL[data_1.PROTOCOL.Fail.Burn] = 'brn';
133
+ FAIL[data_1.PROTOCOL.Fail.Freeze] = 'frz';
134
+ FAIL[data_1.PROTOCOL.Fail.Paralysis] = 'par';
135
+ FAIL[data_1.PROTOCOL.Fail.Toxic] = 'tox';
136
+ const ACTIVATE = [new Array(data_1.PROTOCOL.Activate.length)];
137
+ ACTIVATE[0][data_1.PROTOCOL.Activate.Bide] = 'Bide';
138
+ ACTIVATE[0][data_1.PROTOCOL.Activate.Confusion] = 'confusion';
139
+ ACTIVATE[0][data_1.PROTOCOL.Activate.Haze] = 'move: Haze';
140
+ ACTIVATE[0][data_1.PROTOCOL.Activate.Mist] = 'move: Mist';
141
+ ACTIVATE[0][data_1.PROTOCOL.Activate.Struggle] = 'move: Struggle';
142
+ ACTIVATE[0][data_1.PROTOCOL.Activate.Substitute] = 'Substitute';
143
+ ACTIVATE[0][data_1.PROTOCOL.Activate.Splash] = 'move: Splash';
144
+ ACTIVATE[1] = ACTIVATE[0].slice(0);
145
+ ACTIVATE[1][data_1.PROTOCOL.Activate.Bide] = 'move: Bide';
146
+ const START = [new Array(data_1.PROTOCOL.Start.length)];
147
+ START[0][data_1.PROTOCOL.Start.Bide] = 'Bide';
148
+ START[0][data_1.PROTOCOL.Start.Confusion] = 'confusion';
149
+ START[0][data_1.PROTOCOL.Start.ConfusionSilent] = 'confusion';
150
+ START[0][data_1.PROTOCOL.Start.FocusEnergy] = 'move: Focus Energy';
151
+ START[0][data_1.PROTOCOL.Start.LeechSeed] = 'move: Leech Seed';
152
+ START[0][data_1.PROTOCOL.Start.LightScreen] = 'Light Screen';
153
+ START[0][data_1.PROTOCOL.Start.Mist] = 'Mist';
154
+ START[0][data_1.PROTOCOL.Start.Reflect] = 'Reflect';
155
+ START[0][data_1.PROTOCOL.Start.Substitute] = 'Substitute';
156
+ START[1] = START[0].slice(0);
157
+ START[1][data_1.PROTOCOL.Start.Bide] = 'move: Bide';
158
+ const END = [new Array(data_1.PROTOCOL.End.length)];
159
+ END[0][data_1.PROTOCOL.End.Disable] = 'Disable';
160
+ END[0][data_1.PROTOCOL.End.Confusion] = 'confusion';
161
+ END[0][data_1.PROTOCOL.End.Bide] = 'Bide';
162
+ END[0][data_1.PROTOCOL.End.Substitute] = 'Substitute';
163
+ END[0][data_1.PROTOCOL.End.DisableSilent] = 'Disable';
164
+ END[0][data_1.PROTOCOL.End.ConfusionSilent] = 'confusion';
165
+ END[0][data_1.PROTOCOL.End.MistSilent] = 'Mist';
166
+ END[0][data_1.PROTOCOL.End.FocusEnergySilent] = 'move: Focus Energy';
167
+ END[0][data_1.PROTOCOL.End.LeechSeedSilent] = 'move: Leech Seed';
168
+ END[0][data_1.PROTOCOL.End.ToxicSilent] = 'Toxic counter';
169
+ END[0][data_1.PROTOCOL.End.LightScreenSilent] = 'Light Screen';
170
+ END[0][data_1.PROTOCOL.End.ReflectSilent] = 'Reflect';
171
+ END[0][data_1.PROTOCOL.End.BideSilent] = 'move: Bide';
172
+ END[1] = END[0].slice(0);
173
+ END[1][data_1.PROTOCOL.End.Disable] = 'move: Disable';
174
+ END[1][data_1.PROTOCOL.End.Bide] = 'move: Bide';
175
+ END[1][data_1.PROTOCOL.End.LeechSeed] = 'Leech Seed';
176
+ const SIDE = new Array(data_1.PROTOCOL.Side.length);
177
+ SIDE[data_1.PROTOCOL.Side.Safeguard] = 'Safeguard';
178
+ SIDE[data_1.PROTOCOL.Side.Reflect] = 'Reflect';
179
+ SIDE[data_1.PROTOCOL.Side.LightScreen] = 'move: Light Screen';
180
+ SIDE[data_1.PROTOCOL.Side.Spikes] = 'Spikes';
181
+ const DECODERS = new Array(ArgType.length);
182
+ DECODERS[ArgType.Move] = function (offset, data) {
183
+ const source = decodeIdent(this.info, data.getUint8(offset++));
184
+ const m = data.getUint8(offset++);
185
+ const { player, id } = decodeIdentRaw(data.getUint8(offset++));
186
+ const set = this.info[player].team[id - 1];
187
+ const target = id === 0
188
+ ? '' : `${player}a: ${(set.name || set.species)}`;
189
+ const reason = data.getUint8(offset++);
190
+ const move = reason === data_1.PROTOCOL.Move.Recharge
191
+ ? 'recharge' : this.gen.moves.get(this.lookup.moveByNum(m)).name;
192
+ const args = ['move', source, move, target];
193
+ const kwArgs = reason === data_1.PROTOCOL.Move.From
194
+ ? { from: this.gen.moves.get(this.lookup.moveByNum(data.getUint8(offset++))).name } : {};
195
+ return { offset, line: { args, kwArgs } };
196
+ };
197
+ DECODERS[ArgType.Switch] = function (offset, data) {
198
+ const ident = decodeIdent(this.info, data.getUint8(offset++));
199
+ const details = decodeDetails(offset, data, this.gen, this.lookup);
200
+ offset += this.gen.num > 1 ? 3 : 2;
201
+ const hpStatus = decodeHPStatus(offset, data);
202
+ offset += 5;
203
+ const args = ['switch', ident, details, hpStatus];
204
+ return { offset, line: { args, kwArgs: {} } };
205
+ };
206
+ DECODERS[ArgType.Cant] = function (offset, data) {
207
+ const ident = decodeIdent(this.info, data.getUint8(offset++));
208
+ const reason = data.getUint8(offset++);
209
+ let args;
210
+ if (reason === data_1.PROTOCOL.Cant.Disable) {
211
+ const move = this.gen.moves.get(this.lookup.moveByNum(data.getUint8(offset++))).name;
212
+ args = ['cant', ident, 'Disable', move];
213
+ }
214
+ else {
215
+ args = ['cant', ident, CANT[reason]];
216
+ }
217
+ return { offset, line: { args, kwArgs: {} } };
218
+ };
219
+ DECODERS[ArgType.Faint] = function (offset, data) {
220
+ return decodeProtocol('faint', offset, data, this.info);
221
+ };
222
+ DECODERS[ArgType.Turn] = function (offset, data) {
223
+ const turn = data.getUint16(offset, data_1.LE).toString();
224
+ offset += 2;
225
+ return { offset, line: { args: ['turn', turn], kwArgs: {} } };
226
+ };
227
+ DECODERS[ArgType.Win] = function (offset, data) {
228
+ const player = data.getUint8(offset++) ? 'p2' : 'p1';
229
+ const args = ['win', this.info[player].name];
230
+ return { offset, line: { args, kwArgs: {} } };
231
+ };
232
+ DECODERS[ArgType.Tie] = function (offset) {
233
+ const line = { args: ['tie'], kwArgs: {} };
234
+ return { offset, line };
235
+ };
236
+ DECODERS[ArgType.Damage] = function (offset, data) {
237
+ const ident = decodeIdent(this.info, data.getUint8(offset++));
238
+ const hpStatus = decodeHPStatus(offset, data);
239
+ offset += 5;
240
+ const reason = data.getUint8(offset++);
241
+ const kwArgs = {};
242
+ if (reason > data_1.PROTOCOL.Damage.None)
243
+ kwArgs.from = DAMAGE[reason];
244
+ if (reason === data_1.PROTOCOL.Damage.RecoilOf) {
245
+ kwArgs.of = decodeIdent(this.info, data.getUint8(offset++));
246
+ }
247
+ const args = ['-damage', ident, hpStatus];
248
+ return { offset, line: { args, kwArgs } };
249
+ };
250
+ DECODERS[ArgType.Heal] = function (offset, data) {
251
+ const ident = decodeIdent(this.info, data.getUint8(offset++));
252
+ const hpStatus = decodeHPStatus(offset, data);
253
+ offset += 5;
254
+ const reason = data.getUint8(offset++);
255
+ const kwArgs = {};
256
+ if (reason === data_1.PROTOCOL.Heal.Drain) {
257
+ kwArgs.from = 'drain';
258
+ kwArgs.of = decodeIdent(this.info, data.getUint8(offset++));
259
+ }
260
+ else if (reason === data_1.PROTOCOL.Heal.Silent) {
261
+ kwArgs.silent = true;
262
+ }
263
+ const args = ['-heal', ident, hpStatus];
264
+ return { offset, line: { args, kwArgs } };
265
+ };
266
+ DECODERS[ArgType.Status] = function (offset, data) {
267
+ const ident = decodeIdent(this.info, data.getUint8(offset++));
268
+ const status = decodeStatus(data.getUint8(offset++));
269
+ const reason = data.getUint8(offset++);
270
+ const kwArgs = {};
271
+ if (reason === data_1.PROTOCOL.Status.Silent) {
272
+ kwArgs.silent = true;
273
+ }
274
+ else if (reason === data_1.PROTOCOL.Status.From) {
275
+ const move = this.gen.moves.get(this.lookup.moveByNum(data.getUint8(offset++))).name;
276
+ kwArgs.from = `move: ${move}`;
277
+ }
278
+ const args = ['-status', ident, status];
279
+ return { offset, line: { args, kwArgs } };
280
+ };
281
+ DECODERS[ArgType.CureStatus] = function (offset, data) {
282
+ const ident = decodeIdent(this.info, data.getUint8(offset++));
283
+ const status = decodeStatus(data.getUint8(offset++));
284
+ const reason = data.getUint8(offset++);
285
+ const kwArgs = {};
286
+ if (reason === data_1.PROTOCOL.CureStatus.Message) {
287
+ kwArgs.msg = true;
288
+ }
289
+ else if (reason === data_1.PROTOCOL.CureStatus.Silent) {
290
+ kwArgs.silent = true;
291
+ }
292
+ const args = ['-curestatus', ident, status];
293
+ return { offset, line: { args, kwArgs } };
294
+ };
295
+ DECODERS[ArgType.Boost] = function (offset, data) {
296
+ const ident = decodeIdent(this.info, data.getUint8(offset++));
297
+ const reason = data.getUint8(offset++);
298
+ const boost = BOOSTS[reason];
299
+ const kwArgs = {};
300
+ if (reason === data_1.PROTOCOL.Boost.Rage) {
301
+ kwArgs.from = 'Rage';
302
+ }
303
+ const n = data.getUint8(offset++) - 6;
304
+ const type = n > 0 ? '-boost' : '-unboost';
305
+ const num = Math.abs(n).toString();
306
+ const args = [type, ident, boost, num];
307
+ return { offset, line: { args, kwArgs } };
308
+ };
309
+ DECODERS[ArgType.ClearAllBoost] = function (offset) {
310
+ const args = ['-clearallboost'];
311
+ const kwArgs = this.gen.num === 1 ? { silent: true } : {};
312
+ return { offset, line: { args, kwArgs } };
313
+ };
314
+ DECODERS[ArgType.Fail] = function (offset, data) {
315
+ const ident = decodeIdent(this.info, data.getUint8(offset++));
316
+ const reason = data.getUint8(offset++);
317
+ let args;
318
+ const kwArgs = {};
319
+ const weak = reason === data_1.PROTOCOL.Fail.Weak;
320
+ if (weak || reason === data_1.PROTOCOL.Fail.Substitute) {
321
+ args = ['-fail', ident, 'move: Substitute'];
322
+ if (weak)
323
+ kwArgs.weak = true;
324
+ }
325
+ else if (reason !== data_1.PROTOCOL.Fail.None) {
326
+ args = ['-fail', ident, FAIL[reason]];
327
+ }
328
+ else {
329
+ args = ['-fail', ident];
330
+ }
331
+ return { offset, line: { args, kwArgs } };
332
+ };
333
+ DECODERS[ArgType.Miss] = function (offset, data) {
334
+ return decodeProtocol('-miss', offset, data, this.info);
335
+ };
336
+ DECODERS[ArgType.HitCount] = function (offset, data) {
337
+ const ident = decodeIdent(this.info, data.getUint8(offset++));
338
+ const num = data.getUint8(offset++).toString();
339
+ const args = ['-hitcount', ident, num];
340
+ return { offset, line: { args, kwArgs: {} } };
341
+ };
342
+ DECODERS[ArgType.Prepare] = function (offset, data) {
343
+ const source = decodeIdent(this.info, data.getUint8(offset++));
344
+ const move = this.gen.moves.get(this.lookup.moveByNum(data.getUint8(offset++))).name;
345
+ const args = ['-prepare', source, move];
346
+ return { offset, line: { args, kwArgs: {} } };
347
+ };
348
+ DECODERS[ArgType.MustRecharge] = function (offset, data) {
349
+ return decodeProtocol('-mustrecharge', offset, data, this.info);
350
+ };
351
+ DECODERS[ArgType.Activate] = function (offset, data) {
352
+ const ident = decodeIdent(this.info, data.getUint8(offset++));
353
+ const reason = data.getUint8(offset++);
354
+ const type = reason === data_1.PROTOCOL.Activate.Mist ? '-block' : '-activate';
355
+ const activate = ACTIVATE[this.gen.num - 1];
356
+ const args = reason === data_1.PROTOCOL.Activate.Splash
357
+ ? [type, '', activate[reason]]
358
+ : [type, ident, activate[reason], ''];
359
+ const kwArgs = reason === data_1.PROTOCOL.Activate.Substitute ? { damage: true } : {};
360
+ return { offset, line: { args, kwArgs } };
361
+ };
362
+ DECODERS[ArgType.FieldActivate] = function (offset) {
363
+ const effect = 'move: Pay Day';
364
+ const args = ['-fieldactivate', effect];
365
+ return { offset, line: { args, kwArgs: {} } };
366
+ };
367
+ DECODERS[ArgType.Start] = function (offset, data) {
368
+ const ident = decodeIdent(this.info, data.getUint8(offset++));
369
+ const reason = data.getUint8(offset++);
370
+ let args;
371
+ const kwArgs = {};
372
+ if (reason < data_1.PROTOCOL.Start.TypeChange) {
373
+ args = ['-start', ident, START[this.gen.num - 1][reason]];
374
+ if (reason === data_1.PROTOCOL.Start.ConfusionSilent)
375
+ kwArgs.silent = true;
376
+ }
377
+ else if (reason === data_1.PROTOCOL.Start.TypeChange) {
378
+ const types = decodeTypes(this.lookup, data.getUint8(offset++));
379
+ const t = types[0] === types[1] ? types[0] : types.join('/');
380
+ args = ['-start', ident, 'typechange', t];
381
+ kwArgs.from = 'move: Conversion';
382
+ kwArgs.of = decodeIdent(this.info, data.getUint8(offset++));
383
+ }
384
+ else {
385
+ const move = this.gen.moves.get(this.lookup.moveByNum(data.getUint8(offset++))).name;
386
+ const effect = reason === data_1.PROTOCOL.Start.Disable ? 'Disable' : 'Mimic';
387
+ args = ['-start', ident, effect, move];
388
+ }
389
+ return { offset, line: { args, kwArgs } };
390
+ };
391
+ DECODERS[ArgType.End] = function (offset, data) {
392
+ const ident = decodeIdent(this.info, data.getUint8(offset++));
393
+ const reason = data.getUint8(offset++);
394
+ const args = ['-end', ident, END[this.gen.num - 1][reason]];
395
+ const kwArgs = reason >= data_1.PROTOCOL.End.DisableSilent ? { silent: true } : {};
396
+ return { offset, line: { args, kwArgs } };
397
+ };
398
+ DECODERS[ArgType.OHKO] = function (offset) {
399
+ return { offset, line: { args: ['-ohko'], kwArgs: {} } };
400
+ };
401
+ DECODERS[ArgType.Crit] = function (offset, data) {
402
+ return decodeProtocol('-crit', offset, data, this.info);
403
+ };
404
+ DECODERS[ArgType.SuperEffective] = function (offset, data) {
405
+ return decodeProtocol('-supereffective', offset, data, this.info);
406
+ };
407
+ DECODERS[ArgType.Resisted] = function (offset, data) {
408
+ return decodeProtocol('-resisted', offset, data, this.info);
409
+ };
410
+ DECODERS[ArgType.Immune] = function (offset, data) {
411
+ const ident = decodeIdent(this.info, data.getUint8(offset++));
412
+ const reason = data.getUint8(offset++);
413
+ const kwArgs = reason === data_1.PROTOCOL.Immune.OHKO ? { ohko: true } : {};
414
+ return { offset, line: { args: ['-immune', ident], kwArgs } };
415
+ };
416
+ DECODERS[ArgType.Transform] = function (offset, data) {
417
+ const source = decodeIdent(this.info, data.getUint8(offset++));
418
+ const target = decodeIdent(this.info, data.getUint8(offset++));
419
+ const args = ['-transform', source, target];
420
+ return { offset, line: { args, kwArgs: {} } };
421
+ };
422
+ function decodeProtocol(type, offset, data, info) {
423
+ const ident = decodeIdent(info, data.getUint8(offset++));
424
+ return { offset, line: { args: [type, ident], kwArgs: {} } };
425
+ }
426
+ function decodeIdent(info, byte) {
427
+ const { player, id } = decodeIdentRaw(byte);
428
+ const set = info[player].team[id - 1];
429
+ return `${player}a: ${(set.name || set.species)}`;
430
+ }
431
+ function decodeDetails(offset, data, gen, lookup) {
432
+ const species = gen.species.get(lookup.speciesByNum(data.getUint8(offset++))).name;
433
+ const gender = gen.num > 1 ? GENDERS[data.getUint8(offset++)] : 'N';
434
+ const level = data.getUint8(offset);
435
+ const mf = gender === 'N' ? '' : `, ${gender}`;
436
+ const lvl = level === 100 ? '' : `, L${level}`;
437
+ return `${species}${mf}${lvl}`;
438
+ }
439
+ function decodeHPStatus(offset, data) {
440
+ const hp = data.getUint16(offset, data_1.LE);
441
+ offset += 2;
442
+ const maxhp = data.getUint16(offset, data_1.LE);
443
+ offset += 2;
444
+ if (hp === 0)
445
+ return '0 fnt';
446
+ const status = decodeStatus(data.getUint8(offset));
447
+ return (status ? `${hp}/${maxhp} ${status}` : `${hp}/${maxhp}`);
448
+ }
449
+ function decodeIdentRaw(byte) {
450
+ return {
451
+ player: (byte >> 3) === 0 ? 'p1' : 'p2',
452
+ id: byte & 0b111,
453
+ };
454
+ }
455
+ function decodeStatus(val) {
456
+ if (val & 0b111)
457
+ return 'slp';
458
+ if ((val >> 7) & 1)
459
+ return 'tox';
460
+ if ((val >> 6) & 1)
461
+ return 'par';
462
+ if ((val >> 5) & 1)
463
+ return 'frz';
464
+ if ((val >> 4) & 1)
465
+ return 'brn';
466
+ if ((val >> 3) & 1)
467
+ return 'psn';
468
+ return undefined;
469
+ }
470
+ function decodeTypes(lookup, val) {
471
+ return [lookup.typeByNum(val & 0x0F), lookup.typeByNum(val >> 4)];
472
+ }
473
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/pkg/protocol.ts"],"names":[],"mappings":"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"}