@pkmn/engine 0.1.0-dev.207fa86a → 0.1.0-dev.2c13d3ec

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 (48) hide show
  1. package/README.md +62 -31
  2. package/build/pkg/addon.d.ts +7 -0
  3. package/build/pkg/addon.js +112 -0
  4. package/build/pkg/addon.js.map +1 -0
  5. package/build/pkg/data/layout.json +25 -3
  6. package/build/pkg/data.d.ts +1 -2
  7. package/build/pkg/data.js +3 -5
  8. package/build/pkg/data.js.map +1 -1
  9. package/build/pkg/gen1.d.ts +5 -4
  10. package/build/pkg/gen1.js +47 -31
  11. package/build/pkg/gen1.js.map +1 -1
  12. package/build/pkg/index.d.ts +16 -13
  13. package/build/pkg/index.js +1 -1
  14. package/build/pkg/index.js.map +1 -1
  15. package/build/pkg/protocol.d.ts +4 -2
  16. package/build/pkg/protocol.js +5 -3
  17. package/build/pkg/protocol.js.map +1 -1
  18. package/build/test/display.js +400 -0
  19. package/build/test/display.js.map +1 -0
  20. package/build/tools/debug.js +133 -0
  21. package/build/tools/debug.js.map +1 -0
  22. package/build.zig +56 -51
  23. package/package.json +47 -35
  24. package/src/bin/install-pkmn-engine +68 -36
  25. package/src/bin/pkmn-debug +62 -0
  26. package/src/lib/binding/node.zig +46 -141
  27. package/src/lib/binding/wasm.zig +6 -4
  28. package/src/lib/common/data.zig +11 -11
  29. package/src/lib/common/debug.zig +74 -0
  30. package/src/lib/common/options.zig +12 -3
  31. package/src/lib/common/protocol.zig +239 -178
  32. package/src/lib/common/rng.zig +10 -10
  33. package/src/lib/gen1/README.md +131 -94
  34. package/src/lib/gen1/data/moves.zig +10 -10
  35. package/src/lib/gen1/data/species.zig +2 -2
  36. package/src/lib/gen1/data/types.zig +3 -3
  37. package/src/lib/gen1/data.zig +65 -44
  38. package/src/lib/gen1/helpers.zig +439 -36
  39. package/src/lib/gen1/mechanics.zig +1085 -628
  40. package/src/lib/gen2/data/items.zig +3 -3
  41. package/src/lib/gen2/data/moves.zig +1 -1
  42. package/src/lib/gen2/data/species.zig +1 -1
  43. package/src/lib/gen2/data/types.zig +3 -3
  44. package/src/lib/gen2/data.zig +37 -26
  45. package/src/lib/gen2/helpers.zig +9 -11
  46. package/src/lib/gen2/mechanics.zig +5 -4
  47. package/src/lib/pkmn.zig +68 -9
  48. package/src/test/display/pkmn.html.tmpl +368 -0
@@ -0,0 +1,74 @@
1
+ const std = @import("std");
2
+
3
+ const debug = std.debug;
4
+ const io = std.io;
5
+
6
+ pub fn print(value: anytype) void {
7
+ debug.getStderrMutex().lock();
8
+ defer debug.getStderrMutex().unlock();
9
+ const stderr = io.getStdErr().writer();
10
+
11
+ nosuspend {
12
+ stderr.writeAll("\x1b[41m") catch return;
13
+ if (@TypeOf(@src()) == @TypeOf(value)) {
14
+ stderr.print("{s} ({s}:{d}:{d})", .{
15
+ value.fn_name,
16
+ value.file,
17
+ value.line,
18
+ value.column,
19
+ }) catch return;
20
+ } else {
21
+ switch (@typeInfo(@TypeOf(value))) {
22
+ .Struct => |info| {
23
+ if (info.is_tuple) {
24
+ inline for (info.fields, 0..) |f, i| {
25
+ inspect(@field(value, f.name));
26
+ if (i < info.fields.len - 1) stderr.writeAll(" ") catch return;
27
+ }
28
+ } else {
29
+ inspect(value);
30
+ }
31
+ },
32
+ else => inspect(value),
33
+ }
34
+ }
35
+ stderr.writeAll("\x1b[K\x1b[0m\n") catch return;
36
+ }
37
+ }
38
+
39
+ fn inspect(value: anytype) void {
40
+ const stderr = io.getStdErr().writer();
41
+
42
+ nosuspend {
43
+ const err = "Unable to format type '" ++ @typeName(@TypeOf(value)) ++ "'";
44
+ switch (@typeInfo(@TypeOf(value))) {
45
+ .Array => |info| {
46
+ if (info.child == u8) return stderr.print("{s}", .{value}) catch return;
47
+ @compileError(err);
48
+ },
49
+ .Pointer => |ptr_info| switch (ptr_info.size) {
50
+ .One => switch (@typeInfo(ptr_info.child)) {
51
+ .Array => |info| {
52
+ if (info.child == u8) return stderr.print("{s}", .{value}) catch return;
53
+ @compileError(err);
54
+ },
55
+ .Enum, .Union, .Struct => return inspect(value.*),
56
+ else => @compileError(err),
57
+ },
58
+ .Many, .C => {
59
+ if (ptr_info.sentinel) |_| return inspect(std.mem.span(value));
60
+ if (ptr_info.child == u8) {
61
+ return stderr.print("{s}", .{std.mem.span(value)}) catch return;
62
+ }
63
+ @compileError(err);
64
+ },
65
+ .Slice => {
66
+ if (ptr_info.child == u8) return stderr.print("{s}", .{value}) catch return;
67
+ @compileError(err);
68
+ },
69
+ },
70
+ .Optional => stderr.print("{?}", .{value}) catch return,
71
+ else => stderr.print("{}", .{value}) catch return,
72
+ }
73
+ }
74
+ }
@@ -1,21 +1,30 @@
1
1
  const build_options = @import("build_options");
2
2
  const root = @import("root");
3
3
 
4
+ /// Configures the behavior of the pkmn package.
4
5
  pub const Options = struct {
5
6
  showdown: ?bool = null,
6
- trace: ?bool = null,
7
+ log: ?bool = null,
8
+ chance: ?bool = null,
9
+ calc: ?bool = null,
7
10
  advance: ?bool = null,
8
11
  ebc: ?bool = null,
12
+ key: ?bool = null,
9
13
  internal: ?bool = null,
10
14
  };
11
15
 
12
16
  /// Whether or not Pokémon Showdown compatibility mode is enabled.
13
17
  pub const showdown = get("showdown", false);
14
- /// Whether or not protocol trace logging is enabled.
15
- pub const trace = get("trace", false);
18
+ /// Whether or not protocol message logging is enabled.
19
+ pub const log = get("log", false);
20
+ /// Whether or not update probability tracking is enabled.
21
+ pub const chance = get("chance", false);
22
+ /// Whether or not damage calculator support is enabled.
23
+ pub const calc = get("calc", false);
16
24
 
17
25
  pub const advance = get("advance", true);
18
26
  pub const ebc = get("ebc", true);
27
+ pub const key = get("key", false);
19
28
  pub const internal = get("internal", false);
20
29
 
21
30
  fn get(comptime name: []const u8, default: bool) bool {