@pkmn/engine 0.1.0-dev.a324c50f → 0.1.0-dev.a93847b2

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 (41) hide show
  1. package/README.md +45 -37
  2. package/build/pkg/data/ids.json +12 -12
  3. package/build/pkg/data/layout.json +2 -2
  4. package/build/pkg/data/protocol.json +69 -12
  5. package/build/pkg/data.d.ts +2 -2
  6. package/build/pkg/gen1.js +2 -2
  7. package/build/pkg/gen1.js.map +1 -1
  8. package/build/pkg/protocol.js +56 -37
  9. package/build/pkg/protocol.js.map +1 -1
  10. package/build.zig +53 -44
  11. package/package.json +40 -19
  12. package/src/bin/install-pkmn-engine +2 -2
  13. package/src/lib/binding/node.zig +1 -1
  14. package/src/lib/common/battle.zig +17 -0
  15. package/src/lib/common/data.zig +4 -16
  16. package/src/lib/common/js.zig +118 -0
  17. package/src/lib/common/optional.zig +67 -0
  18. package/src/lib/common/protocol.zig +561 -80
  19. package/src/lib/common/rational.zig +353 -0
  20. package/src/lib/common/rng.zig +6 -6
  21. package/src/lib/common/util.zig +12 -0
  22. package/src/lib/gen1/README.md +273 -193
  23. package/src/lib/gen1/calc.zig +426 -0
  24. package/src/lib/gen1/chance.zig +1060 -0
  25. package/src/lib/gen1/data/moves.zig +183 -171
  26. package/src/lib/gen1/data/species.zig +1 -1
  27. package/src/lib/gen1/data/types.zig +3 -3
  28. package/src/lib/gen1/data.zig +31 -38
  29. package/src/lib/gen1/helpers.zig +241 -103
  30. package/src/lib/gen1/mechanics.zig +111 -166
  31. package/src/lib/gen2/README.md +106 -85
  32. package/src/lib/gen2/calc.zig +143 -0
  33. package/src/lib/gen2/chance.zig +1314 -0
  34. package/src/lib/gen2/data/items.zig +11 -17
  35. package/src/lib/gen2/data/moves.zig +662 -568
  36. package/src/lib/gen2/data/species.zig +1 -1
  37. package/src/lib/gen2/data/types.zig +129 -26
  38. package/src/lib/gen2/data.zig +89 -64
  39. package/src/lib/gen2/generated.zig +857 -0
  40. package/src/lib/gen2/helpers.zig +8 -12
  41. package/src/lib/gen2/mechanics.zig +2994 -9
@@ -48,7 +48,7 @@ pub const Battle = struct {
48
48
  comptime rolls: anytype,
49
49
  p1: []const Pokemon,
50
50
  p2: []const Pokemon,
51
- ) data.Battle(rng.FixedRNG(1, rolls.len)) {
51
+ ) data.Battle(rng.FixedRNG(2, rolls.len)) {
52
52
  return .{
53
53
  .rng = .{ .rolls = rolls },
54
54
  .sides = .{ Side.init(p1), Side.init(p2) },
@@ -87,7 +87,7 @@ pub const Side = struct {
87
87
 
88
88
  for (0..ps.len) |i| {
89
89
  side.pokemon[i] = Pokemon.init(ps[i]);
90
- // FIXME side.order[i] = i + 1;
90
+ side.pokemon[i].position = @as(u4, @intCast(i)) + 1;
91
91
  }
92
92
  return side;
93
93
  }
@@ -98,7 +98,7 @@ pub const Side = struct {
98
98
 
99
99
  for (0..n) |i| {
100
100
  side.pokemon[i] = Pokemon.random(rand, opt);
101
- side.pokemon[i].position = i + 1;
101
+ side.pokemon[i].position = @as(u4, @intCast(i)) + 1;
102
102
  }
103
103
 
104
104
  return side;
@@ -135,12 +135,9 @@ pub const Pokemon = struct {
135
135
  }
136
136
  assert(p.moves.len > 0 and p.moves.len <= 4);
137
137
  for (p.moves, 0..) |m, j| {
138
- pokemon.moves[j] = .{
139
- .id = m,
140
- .pp_ups = 3,
141
- // NB: PP can be at most 61 legally (though can overflow to 63)
142
- .pp = @intCast(@min(Move.pp(m) / 5 * 8, 61)),
143
- };
138
+ pokemon.moves[j].id = m;
139
+ // NB: PP can be at most 61 legally (though can overflow to 63)
140
+ pokemon.moves[j].pp = @intCast(@min(Move.pp(m) / 5 * 8, 61));
144
141
  }
145
142
  pokemon.item = p.item;
146
143
  if (p.hp) |hp| {
@@ -151,7 +148,7 @@ pub const Pokemon = struct {
151
148
  pokemon.status = p.status;
152
149
  pokemon.types = species.types;
153
150
  pokemon.level = p.level;
154
- pokemon.dvs = DVs.from(p.dvs);
151
+ pokemon.dvs = DVs.from(p.species, p.dvs);
155
152
  return pokemon;
156
153
  }
157
154
 
@@ -192,14 +189,13 @@ pub const Pokemon = struct {
192
189
  const max_pp: u8 = @intCast(Move.pp(m) + pp_ups * @min(Move.pp(m) / 5, 7));
193
190
  ms[i] = .{
194
191
  .id = m,
195
- .pp_ups = pp_ups,
196
192
  .pp = if (opt.cleric) max_pp else rand.range(u8, 0, max_pp + 1),
197
193
  };
198
194
  }
199
195
  return .{
200
196
  .species = s,
201
197
  .types = species.types,
202
- .dvs = DVs.from(dvs),
198
+ .dvs = DVs.from(s, dvs),
203
199
  .level = lvl,
204
200
  .stats = stats,
205
201
  .hp = if (opt.cleric) stats.hp else rand.range(u16, 0, stats.hp + 1),