@pkmn/engine 0.1.0-dev.c42deb42 → 0.1.0-dev.c4f94762

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 +37 -14
  2. package/build/pkg/addon.js.map +1 -1
  3. package/build/pkg/data/layout.json +2 -2
  4. package/build/pkg/data.d.ts +3 -2
  5. package/build/pkg/data.js.map +1 -1
  6. package/build/pkg/gen1.js +2 -2
  7. package/build/pkg/gen1.js.map +1 -1
  8. package/build/pkg/index.d.ts +2 -1
  9. package/build/pkg/index.js.map +1 -1
  10. package/build/pkg/protocol.js +1 -1
  11. package/build/pkg/protocol.js.map +1 -1
  12. package/build/test/display.js.map +1 -1
  13. package/build/tools/debug.js +3 -1
  14. package/build/tools/debug.js.map +1 -1
  15. package/build.zig +38 -21
  16. package/package.json +23 -19
  17. package/src/bin/install-pkmn-engine +14 -14
  18. package/src/lib/binding/node.zig +6 -10
  19. package/src/lib/common/data.zig +4 -4
  20. package/src/lib/common/protocol.zig +388 -364
  21. package/src/lib/common/rational.zig +11 -7
  22. package/src/lib/common/rng.zig +9 -0
  23. package/src/lib/gen1/README.md +28 -28
  24. package/src/lib/gen1/calc.zig +7 -7
  25. package/src/lib/gen1/chance.zig +4 -4
  26. package/src/lib/gen1/data/moves.zig +10 -10
  27. package/src/lib/gen1/data/species.zig +2 -2
  28. package/src/lib/gen1/data/types.zig +5 -5
  29. package/src/lib/gen1/data.zig +20 -20
  30. package/src/lib/gen1/helpers.zig +13 -13
  31. package/src/lib/gen1/mechanics.zig +267 -281
  32. package/src/lib/gen2/README.md +1 -2
  33. package/src/lib/gen2/calc.zig +143 -0
  34. package/src/lib/gen2/chance.zig +1314 -0
  35. package/src/lib/gen2/data/items.zig +3 -3
  36. package/src/lib/gen2/data/moves.zig +5 -5
  37. package/src/lib/gen2/data/species.zig +1 -1
  38. package/src/lib/gen2/data/types.zig +12 -11
  39. package/src/lib/gen2/data.zig +21 -31
  40. package/src/lib/gen2/generated.zig +806 -0
  41. package/src/lib/gen2/mechanics.zig +1755 -844
@@ -60,6 +60,8 @@ function display(gens, data, error, seed) {
60
60
  let offset = 0;
61
61
  const showdown = !!view.getUint8(offset++);
62
62
  const gen = gens.get(view.getUint8(offset++));
63
+ const N = view.getUint16(offset, data_2.LE);
64
+ offset += 2;
63
65
  const lookup = data_2.Lookup.get(gen);
64
66
  const size = data_2.LAYOUT[gen.num - 1].sizes.Battle;
65
67
  const deserialize = (buf) => {
@@ -83,7 +85,7 @@ function display(gens, data, error, seed) {
83
85
  partial.parsed.push(r.value);
84
86
  r = it.next();
85
87
  }
86
- offset += r.value;
88
+ offset += N || r.value;
87
89
  if (offset >= view.byteLength)
88
90
  break;
89
91
  partial.battle = deserialize(data.subarray(offset, offset += size));
@@ -1 +1 @@
1
- {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/tools/debug.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/tools/debug.ts"],"names":[],"mappings":"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"}
package/build.zig CHANGED
@@ -93,7 +93,7 @@ pub fn build(b: *std.Build) !void {
93
93
  // rename the file ourself in install-pkmn-engine
94
94
  b.installArtifact(lib);
95
95
  } else if (wasm) {
96
- const lib = b.addSharedLibrary(.{
96
+ const exe = b.addExecutable(.{
97
97
  .name = name,
98
98
  .main_pkg_path = .{ .path = "." },
99
99
  .root_source_file = .{ .path = "src/lib/binding/wasm.zig" },
@@ -103,21 +103,32 @@ pub fn build(b: *std.Build) !void {
103
103
  },
104
104
  .target = .{ .cpu_arch = .wasm32, .os_tag = .freestanding },
105
105
  });
106
- lib.addOptions("build_options", options);
107
- lib.stack_size = wasm_stack_size;
108
- lib.rdynamic = true;
109
- lib.strip = strip;
110
- if (pic) lib.force_pic = pic;
106
+ exe.addOptions("build_options", options);
107
+ exe.export_symbol_names = &[_][]const u8{
108
+ "SHOWDOWN",
109
+ "LOG",
110
+ "CHANCE",
111
+ "CALC",
112
+ "GEN1_CHOICES_SIZE",
113
+ "GEN1_LOGS_SIZE",
114
+ };
115
+ exe.entry = .disabled;
116
+ exe.stack_size = wasm_stack_size;
117
+ exe.strip = strip;
118
+ if (pic) exe.force_pic = pic;
111
119
  const opt = b.findProgram(&.{"wasm-opt"}, &.{"./node_modules/.bin"}) catch null;
112
120
  if (optimize != .Debug and opt != null) {
113
121
  const out = b.fmt("build/lib/{s}.wasm", .{name});
114
122
  const sh = b.addSystemCommand(&.{ opt.?, "-O4" });
115
- sh.addArtifactArg(lib);
123
+ sh.addArtifactArg(exe);
116
124
  sh.addArg("-o");
117
125
  sh.addFileSourceArg(.{ .path = out });
118
126
  b.getInstallStep().dependOn(&sh.step);
127
+ } else {
128
+ b.getInstallStep().dependOn(&b.addInstallArtifact(exe, .{
129
+ .dest_dir = .{ .override = std.Build.InstallDir{ .lib = {} } },
130
+ }).step);
119
131
  }
120
- b.installArtifact(lib);
121
132
  } else if (dynamic) {
122
133
  const lib = b.addSharedLibrary(.{
123
134
  .name = name,
@@ -224,30 +235,32 @@ pub fn build(b: *std.Build) !void {
224
235
  var benchmark_config = tools;
225
236
  benchmark_config.general.optimize = .ReleaseFast;
226
237
  benchmark_config.general.strip = true;
227
- const benchmark = tool(b, "src/test/benchmark.zig", benchmark_config);
238
+ const benchmark = try tool(b, "src/test/benchmark.zig", benchmark_config);
228
239
 
229
240
  var fuzz_config = tools;
230
241
  fuzz_config.general.strip = false;
231
242
  fuzz_config.tool.name = "fuzz";
232
- const fuzz = tool(b, "src/test/fuzz.zig", fuzz_config);
243
+ const fuzz = try tool(b, "src/test/fuzz.zig", fuzz_config);
233
244
 
234
- const analyze = tool(b, "src/tools/analyze.zig", tools);
235
- const dump = tool(b, "src/tools/dump.zig", tools);
236
- const transitions = tool(b, "src/tools/transitions.zig", tools);
245
+ const analyze = try tool(b, "src/tools/analyze.zig", tools);
246
+ const dump = try tool(b, "src/tools/dump.zig", tools);
247
+ const transitions = try tool(b, "src/tools/transitions.zig", tools);
237
248
 
238
249
  // FIXME: serde randomly fails to build in some release configurations
239
250
  var hack = tools;
240
251
  if (optimize != .Debug) hack.tool.tests = null;
241
- const serde = tool(b, "src/tools/serde.zig", hack);
252
+ const serde = try tool(b, "src/tools/serde.zig", hack);
242
253
 
243
- b.step("analyze", "Run LLVM analysis tool").dependOn(&analyze.step);
244
- b.step("benchmark", "Run benchmark code").dependOn(&benchmark.step);
245
- b.step("dump", "Run protocol dump tool").dependOn(&dump.step);
246
- b.step("fuzz", "Run fuzz tester").dependOn(&fuzz.step);
247
- b.step("serde", "Run serialization/deserialization tool").dependOn(&serde.step);
254
+ if (analyze) |t| b.step("analyze", "Run LLVM analysis tool").dependOn(&t.step);
255
+ if (benchmark) |t| b.step("benchmark", "Run benchmark code").dependOn(&t.step);
256
+ if (dump) |t| b.step("dump", "Run protocol dump tool").dependOn(&t.step);
257
+ if (fuzz) |t| b.step("fuzz", "Run fuzz tester").dependOn(&t.step);
258
+ if (serde) |t| b.step("serde", "Run serialization/deserialization tool").dependOn(&t.step);
248
259
  b.step("test", "Run all tests").dependOn(&tests.step);
249
260
  b.step("tools", "Install tools").dependOn(&ToolsStep.create(b, &exes).step);
250
- b.step("transitions", "Visualize transitions algorithm search").dependOn(&transitions.step);
261
+ if (transitions) |t| {
262
+ b.step("transitions", "Visualize transitions algorithm search").dependOn(&t.step);
263
+ }
251
264
  }
252
265
 
253
266
  fn maybeStrip(
@@ -326,7 +339,11 @@ const ToolConfig = struct {
326
339
  },
327
340
  };
328
341
 
329
- fn tool(b: *std.Build, path: []const u8, config: ToolConfig) *std.Build.RunStep {
342
+ fn tool(b: *std.Build, path: []const u8, config: ToolConfig) !?*std.Build.RunStep {
343
+ std.fs.cwd().access(path, .{}) catch |err| switch (err) {
344
+ error.FileNotFound => return null,
345
+ else => |e| return e,
346
+ };
330
347
  var name = config.tool.name orelse std.fs.path.basename(path);
331
348
  const index = std.mem.lastIndexOfScalar(u8, name, '.');
332
349
  if (index) |i| name = name[0..i];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pkmn/engine",
3
- "version": "0.1.0-dev.c42deb42",
3
+ "version": "0.1.0-dev.c4f94762",
4
4
  "description": "A minimal, complete, Pokémon battle simulation engine optimized for performance",
5
5
  "repository": "github:pkmn/engine",
6
6
  "license": "MIT",
@@ -52,11 +52,14 @@
52
52
  "src/lib/gen1/data/types.zig",
53
53
  "src/lib/gen1/helpers.zig",
54
54
  "src/lib/gen1/mechanics.zig",
55
+ "src/lib/gen2/calc.zig",
56
+ "src/lib/gen2/chance.zig",
55
57
  "src/lib/gen2/data.zig",
56
58
  "src/lib/gen2/data/items.zig",
57
59
  "src/lib/gen2/data/moves.zig",
58
60
  "src/lib/gen2/data/species.zig",
59
61
  "src/lib/gen2/data/types.zig",
62
+ "src/lib/gen2/generated.zig",
60
63
  "src/lib/gen2/helpers.zig",
61
64
  "src/lib/gen2/mechanics.zig",
62
65
  "src/lib/pkmn.zig",
@@ -73,30 +76,31 @@
73
76
  "access": "public"
74
77
  },
75
78
  "dependencies": {
76
- "@pkmn/data": "^0.7.50",
77
- "@pkmn/protocol": "^0.6.13"
79
+ "@pkmn/data": "^0.8.1",
80
+ "@pkmn/protocol": "^0.6.17"
78
81
  },
79
82
  "devDependencies": {
80
- "@pkmn/eslint-config": "^5.2.0",
81
- "@pkmn/img": "^0.2.15",
82
- "@pkmn/sets": "^5.0.4",
83
- "@pkmn/sim": "0.7.50",
84
- "@types/html-minifier": "^4.0.2",
85
- "@types/jest": "^29.5.4",
86
- "@types/minimist": "^1.2.2",
87
- "@types/mustache": "^4.2.2",
88
- "@types/node": "^20.5.9",
89
- "@vitest/coverage-c8": "^0.33.0",
90
- "binaryen": "^114.0.0",
91
- "eslint": "^8.48.0",
83
+ "@pkmn/eslint-config": "^6.4.0",
84
+ "@pkmn/img": "^0.2.20",
85
+ "@pkmn/sets": "^5.1.0",
86
+ "@pkmn/sim": "0.8.1",
87
+ "@types/html-minifier": "^4.0.5",
88
+ "@types/jest": "^29.5.11",
89
+ "@types/minimist": "^1.2.5",
90
+ "@types/mustache": "^4.2.5",
91
+ "@types/node": "^20.10.5",
92
+ "@vitest/coverage-v8": "^1.0.4",
93
+ "binaryen": "^116.0.0",
94
+ "eslint": "^8.56.0",
92
95
  "html-minifier": "^4.0.0",
93
96
  "json-stringify-pretty-compact": "3.0.0",
94
97
  "minimist": "^1.2.8",
95
98
  "mustache": "^4.2.0",
96
99
  "source-map-support": "^0.5.21",
100
+ "table": "^6.8.1",
97
101
  "trakr": "^0.2.0",
98
- "typescript": "^5.2.2",
99
- "vitest": "^0.34.4"
102
+ "typescript": "^5.3.3",
103
+ "vitest": "^1.0.4"
100
104
  },
101
105
  "scripts": {
102
106
  "lint": "eslint --cache src --ext ts,js && eslint src/bin/*",
@@ -118,7 +122,7 @@
118
122
  "ignorePatterns": [
119
123
  "dist/",
120
124
  "node_modules/",
121
- "src/examples/zig",
125
+ "examples/zig",
122
126
  "build/"
123
127
  ],
124
128
  "env": {
@@ -134,7 +138,7 @@
134
138
  "parserOptions": {
135
139
  "project": [
136
140
  "./tsconfig.json",
137
- "./src/examples/js/tsconfig.json"
141
+ "./examples/js/tsconfig.json"
138
142
  ]
139
143
  }
140
144
  },
@@ -10,7 +10,7 @@ const path = require('path');
10
10
  const {pipeline} = require('stream/promises');
11
11
  const tty = require('tty');
12
12
 
13
- const ZIG_VERSION = {major: 0, minor: 11, patch: 0};
13
+ const ZIG_VERSION = {major: 0, minor: 12, patch: 0, dev: 1396};
14
14
  const DEV = ZIG_VERSION.dev ? `-dev.${ZIG_VERSION.dev}` : '';
15
15
  const VERSION = `${ZIG_VERSION.major}.${ZIG_VERSION.minor}.${ZIG_VERSION.patch}${DEV}`;
16
16
  const INDEX = 'https://ziglang.org/download/index.json';
@@ -283,19 +283,19 @@ const downloadImportLib = async () => {
283
283
  let error = false;
284
284
  for (let i = 2; i < process.argv.length; i++) {
285
285
  switch (process.argv[i]) {
286
- case "--silent": {
287
- SILENT = true;
288
- break;
289
- }
290
- case "--zig": {
291
- if (options || only) error = true;
292
- only = true;
293
- break;
294
- }
295
- default: {
296
- if (options || only || !process.argv[i].startsWith('--options=')) error = true;
297
- options = process.argv[i].slice(10).split(' ');
298
- }
286
+ case "--silent": {
287
+ SILENT = true;
288
+ break;
289
+ }
290
+ case "--zig": {
291
+ if (options || only) error = true;
292
+ only = true;
293
+ break;
294
+ }
295
+ default: {
296
+ if (options || only || !process.argv[i].startsWith('--options=')) error = true;
297
+ options = process.argv[i].slice(10).split(' ');
298
+ }
299
299
  }
300
300
  }
301
301
  if (error) {
@@ -19,7 +19,7 @@ export fn napi_register_module_v1(env: c.napi_env, exports: c.napi_value) c.napi
19
19
  }
20
20
 
21
21
  pub fn register(env: c.napi_env) c.napi_value {
22
- var object = js.Object.init(env);
22
+ const object = js.Object.init(env);
23
23
  const properties = [_]c.napi_property_descriptor{
24
24
  js.Property.init("options", .{ .value = options(env) }),
25
25
  js.Property.init("bindings", .{ .value = bindings(env) }),
@@ -29,7 +29,7 @@ pub fn register(env: c.napi_env) c.napi_value {
29
29
  }
30
30
 
31
31
  fn options(env: c.napi_env) c.napi_value {
32
- var object = js.Object.init(env);
32
+ const object = js.Object.init(env);
33
33
  const properties = [_]c.napi_property_descriptor{
34
34
  js.Property.init("showdown", .{ .value = js.Boolean.init(env, pkmn.options.showdown) }),
35
35
  js.Property.init("log", .{ .value = js.Boolean.init(env, pkmn.options.log) }),
@@ -41,7 +41,7 @@ fn options(env: c.napi_env) c.napi_value {
41
41
  }
42
42
 
43
43
  fn bindings(env: c.napi_env) c.napi_value {
44
- var array = js.Array.init(env, .{ .length = 1 });
44
+ const array = js.Array.init(env, .{ .length = 1 });
45
45
  js.Array.set(env, array, 0, bind(env, pkmn.gen1));
46
46
  return array;
47
47
  }
@@ -49,7 +49,7 @@ fn bindings(env: c.napi_env) c.napi_value {
49
49
  fn bind(env: c.napi_env, gen: anytype) c.napi_value {
50
50
  const choices_size: u32 = @intCast(gen.CHOICES_SIZE);
51
51
  const logs_size: u32 = @intCast(gen.LOGS_SIZE);
52
- var object = js.Object.init(env);
52
+ const object = js.Object.init(env);
53
53
  const properties = [_]c.napi_property_descriptor{
54
54
  js.Property.init("CHOICES_SIZE", .{ .value = js.Number.init(env, choices_size) }),
55
55
  js.Property.init("LOGS_SIZE", .{ .value = js.Number.init(env, logs_size) }),
@@ -72,7 +72,6 @@ fn update(gen: anytype) c.napi_callback {
72
72
  var len: usize = 0;
73
73
  assert(c.napi_get_arraybuffer_info(env, argv[0], &data, &len) == c.napi_ok);
74
74
  assert(len == @sizeOf(gen.Battle(gen.PRNG)));
75
- assert(data != null);
76
75
 
77
76
  var battle: *gen.Battle(gen.PRNG) = @alignCast(@ptrCast(data.?));
78
77
  const c1: pkmn.Choice = @bitCast(js.Number.get(env, argv[1], u8));
@@ -85,9 +84,8 @@ fn update(gen: anytype) c.napi_callback {
85
84
  else => result: {
86
85
  assert(c.napi_get_arraybuffer_info(env, argv[3], &data, &len) == c.napi_ok);
87
86
  assert(len == gen.LOGS_SIZE);
88
- assert(data != null);
89
87
 
90
- var buf = @as([*]u8, @ptrCast(data.?))[0..gen.LOGS_SIZE];
88
+ const buf = @as([*]u8, @ptrCast(data.?))[0..gen.LOGS_SIZE];
91
89
  var stream: pkmn.protocol.ByteStream = .{ .buffer = buf };
92
90
  // TODO: extract out
93
91
  var opts = pkmn.battle.options(
@@ -116,7 +114,6 @@ fn choices(gen: anytype) c.napi_callback {
116
114
  var len: usize = 0;
117
115
  assert(c.napi_get_arraybuffer_info(env, argv[0], &data, &len) == c.napi_ok);
118
116
  assert(len == @sizeOf(gen.Battle(gen.PRNG)));
119
- assert(data != null);
120
117
 
121
118
  var battle: *gen.Battle(gen.PRNG) = @alignCast(@ptrCast(data.?));
122
119
  const player: pkmn.Player = @enumFromInt(js.Number.get(env, argv[1], u8));
@@ -124,9 +121,8 @@ fn choices(gen: anytype) c.napi_callback {
124
121
 
125
122
  assert(c.napi_get_arraybuffer_info(env, argv[3], &data, &len) == c.napi_ok);
126
123
  assert(len == gen.CHOICES_SIZE);
127
- assert(data != null);
128
124
 
129
- var out = @as([*]pkmn.Choice, @ptrCast(data.?))[0..gen.CHOICES_SIZE];
125
+ const out = @as([*]pkmn.Choice, @ptrCast(data.?))[0..gen.CHOICES_SIZE];
130
126
  const n = battle.choices(player, request, out);
131
127
  return js.Number.init(env, @as(u8, @bitCast(n)));
132
128
  }
@@ -9,12 +9,12 @@ pub const Player = enum(u1) {
9
9
  P2,
10
10
 
11
11
  /// Returns a player's opponent.
12
- pub inline fn foe(self: Player) Player {
12
+ pub fn foe(self: Player) Player {
13
13
  return @enumFromInt(~@intFromEnum(self));
14
14
  }
15
15
 
16
16
  /// Return's an identifier for the player's Pokémon at the one-indexed `id`.
17
- pub inline fn ident(self: Player, id: u3) ID {
17
+ pub fn ident(self: Player, id: u3) ID {
18
18
  assert(id > 0 and id <= 6);
19
19
  return .{ .id = id, .player = self };
20
20
  }
@@ -35,12 +35,12 @@ pub const ID = packed struct(u8) {
35
35
  _: u4 = 0,
36
36
 
37
37
  /// Converts the identifier into a number.
38
- pub inline fn int(self: ID) u4 {
38
+ pub fn int(self: ID) u4 {
39
39
  return @intCast(@as(u8, @bitCast(self)));
40
40
  }
41
41
 
42
42
  /// Decodes the identifier from a number.
43
- pub inline fn from(id: u4) ID {
43
+ pub fn from(id: u4) ID {
44
44
  return @bitCast(@as(u8, id));
45
45
  }
46
46
  };