@pkmn/engine 0.1.0-dev.d4119c62 → 0.1.0-dev.d4bd80b1

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 (83) hide show
  1. package/LICENSE +1 -3
  2. package/README.md +46 -18
  3. package/build/pkg/addon/browser.d.ts +3 -0
  4. package/build/pkg/addon/browser.js +47 -0
  5. package/build/pkg/addon/browser.js.map +1 -0
  6. package/build/pkg/addon/node.d.ts +3 -0
  7. package/build/pkg/addon/node.js +110 -0
  8. package/build/pkg/addon/node.js.map +1 -0
  9. package/build/pkg/addon/wasm.d.ts +2 -0
  10. package/build/pkg/addon/wasm.js +53 -0
  11. package/build/pkg/addon/wasm.js.map +1 -0
  12. package/build/pkg/addon.d.ts +25 -3
  13. package/build/pkg/addon.js +39 -71
  14. package/build/pkg/addon.js.map +1 -1
  15. package/build/pkg/data/layout.json +15 -2
  16. package/build/pkg/data/protocol.json +23 -9
  17. package/build/pkg/data.d.ts +27 -5
  18. package/build/pkg/data.js.map +1 -1
  19. package/build/pkg/gen1.d.ts +15 -18
  20. package/build/pkg/gen1.js +28 -19
  21. package/build/pkg/gen1.js.map +1 -1
  22. package/build/pkg/index.d.ts +40 -90
  23. package/build/pkg/index.js +23 -70
  24. package/build/pkg/index.js.map +1 -1
  25. package/build/pkg/protocol.d.ts +20 -1
  26. package/build/pkg/protocol.js +109 -107
  27. package/build/pkg/protocol.js.map +1 -1
  28. package/build/tools/debug.js +53 -78
  29. package/build/tools/debug.js.map +1 -1
  30. package/build/tools/display/debug.jsx +152 -0
  31. package/build/tools/display/debug.jsx.map +1 -0
  32. package/build/tools/display/index.js +152 -0
  33. package/build/tools/display/index.js.map +1 -0
  34. package/build/tools/display/ui.jsx +359 -0
  35. package/build/tools/display/ui.jsx.map +1 -0
  36. package/build/tools/display/util.js +33 -0
  37. package/build/tools/display/util.js.map +1 -0
  38. package/build.zig +330 -104
  39. package/package.json +60 -134
  40. package/src/bin/install-pkmn-engine +32 -21
  41. package/src/bin/pkmn-debug +1 -1
  42. package/src/lib/bindings/c.zig +255 -0
  43. package/src/lib/{binding → bindings}/node.zig +8 -21
  44. package/src/lib/bindings/wasm.zig +59 -0
  45. package/src/lib/common/array.zig +77 -0
  46. package/src/lib/common/data.zig +4 -4
  47. package/src/lib/common/debug.zig +39 -8
  48. package/src/lib/common/js.zig +4 -2
  49. package/src/lib/common/optional.zig +14 -10
  50. package/src/lib/common/options.zig +6 -0
  51. package/src/lib/common/protocol.zig +63 -67
  52. package/src/lib/common/rational.zig +128 -32
  53. package/src/lib/common/rng.zig +7 -9
  54. package/src/lib/common/util.zig +50 -1
  55. package/src/lib/gen1/calc.zig +686 -159
  56. package/src/lib/gen1/chance.zig +405 -280
  57. package/src/lib/gen1/data/moves.zig +2 -4
  58. package/src/lib/gen1/data/species.zig +2 -4
  59. package/src/lib/gen1/data/types.zig +1 -2
  60. package/src/lib/gen1/data.zig +24 -27
  61. package/src/lib/gen1/helpers.zig +92 -548
  62. package/src/lib/gen1/mechanics.zig +379 -258
  63. package/src/lib/gen2/calc.zig +37 -27
  64. package/src/lib/gen2/chance.zig +84 -496
  65. package/src/lib/gen2/data/items.zig +1 -3
  66. package/src/lib/gen2/data/moves.zig +2 -4
  67. package/src/lib/gen2/data/species.zig +1 -3
  68. package/src/lib/gen2/data/types.zig +1 -2
  69. package/src/lib/gen2/data.zig +19 -22
  70. package/src/lib/gen2/generated.zig +19 -26
  71. package/src/lib/gen2/helpers.zig +46 -25
  72. package/src/lib/gen2/mechanics.zig +217 -163
  73. package/src/lib/node.zig +18 -0
  74. package/src/lib/pkmn.zig +37 -15
  75. package/src/lib/wasm.zig +17 -0
  76. package/src/tools/display/dom.ts +95 -0
  77. package/src/tools/display/ui.css +354 -0
  78. package/build/test/display.js +0 -400
  79. package/build/test/display.js.map +0 -1
  80. package/src/lib/binding/wasm.zig +0 -12
  81. package/src/lib/gen1/README.md +0 -894
  82. package/src/lib/gen2/README.md +0 -329
  83. package/src/test/display/pkmn.html.tmpl +0 -368
@@ -1,12 +1,10 @@
1
1
  //! Code generated by `tools/generate` - manual edits will be overwritten.
2
2
 
3
- const std = @import("std");
4
-
5
- const rng = @import("../../common/rng.zig");
6
3
  const gen1 = @import("../../gen1/data.zig");
4
+ const rng = @import("../../common/rng.zig");
5
+ const std = @import("std");
7
6
 
8
7
  const assert = std.debug.assert;
9
-
10
8
  const percent = rng.Gen12.percent;
11
9
  const Type = gen1.Type;
12
10
 
@@ -1,11 +1,9 @@
1
1
  //! Code generated by `tools/generate` - manual edits will be overwritten.
2
2
 
3
- const std = @import("std");
4
-
5
3
  const gen1 = @import("../../gen1/data.zig");
4
+ const std = @import("std");
6
5
 
7
6
  const assert = std.debug.assert;
8
-
9
7
  const Stats = gen1.Stats;
10
8
  const Types = gen1.Types;
11
9
 
@@ -1091,7 +1089,7 @@ pub const Species = enum(u8) {
1091
1089
  /// The number of Pokémon species in this generation.
1092
1090
  pub const size = 151;
1093
1091
 
1094
- /// The Pokémon's critical hit rate=io out of 256.
1092
+ /// The Pokémon's critical hit ratio out of 256.
1095
1093
  pub fn chance(id: Species) u8 {
1096
1094
  assert(id != .None);
1097
1095
  return CHANCES[@intFromEnum(id) - 1];
@@ -1,8 +1,7 @@
1
1
  //! Code generated by `tools/generate` - manual edits will be overwritten.
2
2
 
3
- const std = @import("std");
4
-
5
3
  const gen1 = @import("../../gen1/data.zig");
4
+ const std = @import("std");
6
5
 
7
6
  const assert = std.debug.assert;
8
7
  const Effectiveness = gen1.Effectiveness;
@@ -1,20 +1,16 @@
1
- const std = @import("std");
2
1
  const builtin = @import("builtin");
3
-
4
- const pkmn = @import("../pkmn.zig");
5
-
2
+ const calc = @import("calc.zig");
3
+ const chance = @import("chance.zig");
6
4
  const data = @import("../common/data.zig");
5
+ const mechanics = @import("mechanics.zig");
6
+ const moves = @import("data/moves.zig");
7
+ const pkmn = @import("../pkmn.zig");
7
8
  const protocol = @import("../common/protocol.zig");
8
9
  const rng = @import("../common/rng.zig");
9
- const util = @import("../common/util.zig");
10
-
11
- const moves = @import("data/moves.zig");
12
10
  const species = @import("data/species.zig");
11
+ const std = @import("std");
13
12
  const types = @import("data/types.zig");
14
-
15
- const calc = @import("calc.zig");
16
- const chance = @import("chance.zig");
17
- const mechanics = @import("mechanics.zig");
13
+ const util = @import("../common/util.zig");
18
14
 
19
15
  const assert = std.debug.assert;
20
16
  const expectEqual = std.testing.expectEqual;
@@ -22,11 +18,11 @@ const expect = std.testing.expect;
22
18
 
23
19
  /// The minimum size in bytes required to hold all Generation I choice options.
24
20
  pub const MAX_CHOICES: usize = 9; // move 1..4, switch 2..6
25
- /// The optimal size in bytes required to hold all Generation I choice options.
26
- /// At least as large as MAX_CHOICES.
21
+ /// The maximum number of bytes possibly logged by a single Generation I update.
27
22
  pub const MAX_LOGS: usize = 180;
28
23
 
29
- /// The maximum number of bytes possibly logged by a single Generation I update.
24
+ /// The optimal size in bytes required to hold all Generation I choice options.
25
+ /// At least as large as MAX_CHOICES.
30
26
  pub const CHOICES_SIZE = if (builtin.mode == .ReleaseSmall)
31
27
  MAX_CHOICES
32
28
  else
@@ -47,6 +43,7 @@ const Player = data.Player;
47
43
  const Result = data.Result;
48
44
 
49
45
  const PointerType = util.PointerType;
46
+ const isPointerTo = util.isPointerTo;
50
47
 
51
48
  const showdown = pkmn.options.showdown;
52
49
 
@@ -71,13 +68,13 @@ pub fn Battle(comptime RNG: anytype) type {
71
68
 
72
69
  /// Returns the `Side` for the given `player`.
73
70
  pub fn side(self: anytype, player: Player) PointerType(@TypeOf(self), Side) {
74
- assert(@typeInfo(@TypeOf(self)).Pointer.child == Self);
71
+ assert(isPointerTo(self, Self));
75
72
  return &self.sides[@intFromEnum(player)];
76
73
  }
77
74
 
78
75
  /// Returns the `Side` of the opponent for the given `player`
79
76
  pub fn foe(self: anytype, player: Player) PointerType(@TypeOf(self), Side) {
80
- assert(@typeInfo(@TypeOf(self)).Pointer.child == Self);
77
+ assert(isPointerTo(self, Self));
81
78
  return &self.sides[@intFromEnum(player.foe())];
82
79
  }
83
80
 
@@ -91,7 +88,7 @@ pub fn Battle(comptime RNG: anytype) type {
91
88
  self: anytype,
92
89
  player: Player,
93
90
  ) PointerType(@TypeOf(self), MoveDetails) {
94
- assert(@typeInfo(@TypeOf(self)).Pointer.child == Self);
91
+ assert(isPointerTo(self, Self));
95
92
  return &self.last_moves[@intFromEnum(player)];
96
93
  }
97
94
 
@@ -112,7 +109,7 @@ pub fn Battle(comptime RNG: anytype) type {
112
109
  /// make (i.e. on the cartridge a soft-lock occurs).
113
110
  ///
114
111
  /// This function will always return choices > 0 if `pkmn.options.showdown` is true.
115
- pub fn choices(self: *Self, player: Player, request: Choice.Type, out: []Choice) u8 {
112
+ pub fn choices(self: *const Self, player: Player, request: Choice.Type, out: []Choice) u8 {
116
113
  return mechanics.choices(self, player, request, out);
117
114
  }
118
115
  };
@@ -142,7 +139,7 @@ pub const Side = extern struct {
142
139
 
143
140
  /// Returns the stored `Pokemon` corresponding to the one-indexed party `slot`.
144
141
  pub fn get(self: anytype, slot: u8) PointerType(@TypeOf(self), Pokemon) {
145
- assert(@typeInfo(@TypeOf(self)).Pointer.child == Side);
142
+ assert(isPointerTo(self, Side));
146
143
  assert(slot > 0 and slot <= 6);
147
144
  const id = self.order[slot - 1];
148
145
  assert(id > 0 and id <= 6);
@@ -151,7 +148,7 @@ pub const Side = extern struct {
151
148
 
152
149
  /// Returns the stored `Pokemon` corresponding to the `active` Pokémon (slot 1).
153
150
  pub fn stored(self: anytype) PointerType(@TypeOf(self), Pokemon) {
154
- assert(@typeInfo(@TypeOf(self)).Pointer.child == Side);
151
+ assert(isPointerTo(self, Side));
155
152
  return self.get(1);
156
153
  }
157
154
  };
@@ -177,7 +174,7 @@ pub const ActivePokemon = extern struct {
177
174
 
178
175
  /// Returns the active Pokémon's current move slot located at the one-indexed `mslot`.
179
176
  pub fn move(self: anytype, mslot: u8) PointerType(@TypeOf(self), MoveSlot) {
180
- assert(@typeInfo(@TypeOf(self)).Pointer.child == ActivePokemon);
177
+ assert(isPointerTo(self, ActivePokemon));
181
178
  assert(mslot > 0 and mslot <= 4);
182
179
  assert(self.moves[mslot - 1].id != .None);
183
180
  return &self.moves[mslot - 1];
@@ -207,7 +204,7 @@ pub const Pokemon = extern struct {
207
204
 
208
205
  /// Returns the Pokémon's original move slot located at the one-indexed `mslot`.
209
206
  pub fn move(self: anytype, mslot: u8) PointerType(@TypeOf(self), MoveSlot) {
210
- assert(@typeInfo(@TypeOf(self)).Pointer.child == Pokemon);
207
+ assert(isPointerTo(self, Pokemon));
211
208
  assert(mslot > 0 and mslot <= 4);
212
209
  assert(self.moves[mslot - 1].id != .None);
213
210
  return &self.moves[mslot - 1];
@@ -255,7 +252,7 @@ pub const Status = enum(u8) {
255
252
 
256
253
  pub const TOX = 0b10001000;
257
254
 
258
- const SLP = 0b111;
255
+ const SLEEP = 0b111;
259
256
 
260
257
  /// Whether or not the status `num` is the same as `status`.
261
258
  pub fn is(num: u8, status: Status) bool {
@@ -283,7 +280,7 @@ pub const Status = enum(u8) {
283
280
 
284
281
  /// Returns the duration of a sleep status.
285
282
  pub fn duration(num: u8) u3 {
286
- return @intCast(num & SLP);
283
+ return @intCast(num & SLEEP);
287
284
  }
288
285
 
289
286
  /// Returns whether `num` reflects any status.
@@ -409,12 +406,12 @@ test Volatiles {
409
406
  try expectEqual(@as(u8, 42), volatiles.substitute);
410
407
  try expectEqual(@as(u4, 2), volatiles.disable_move);
411
408
  try expectEqual(@as(u4, 4), volatiles.disable_duration);
412
- try expectEqual(@as(u4, 2), volatiles.confusion);
409
+ try expectEqual(@as(u3, 2), volatiles.confusion);
413
410
  try expectEqual(@as(u5, 4), volatiles.toxic);
414
- try expectEqual(@as(u4, 3), volatiles.attacks);
411
+ try expectEqual(@as(u3, 3), volatiles.attacks);
415
412
  }
416
413
 
417
- /// Representaiton of a Pokémon's stats in Generation I.
414
+ /// Representation of a Pokémon's stats in Generation I.
418
415
  pub fn Stats(comptime T: type) type {
419
416
  return extern struct {
420
417
  hp: T = 0,