@pkmn/engine 0.1.0-dev.028ab165

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