@pkmn/engine 0.1.0-dev.900756a9 → 0.1.0-dev.9257876b
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.
- package/LICENSE +1 -3
- package/README.md +39 -16
- package/build/pkg/addon.js.map +1 -1
- package/build/pkg/data.d.ts +3 -2
- package/build/pkg/data.js.map +1 -1
- package/build/pkg/gen1.js.map +1 -1
- package/build/pkg/index.d.ts +2 -1
- package/build/pkg/index.js.map +1 -1
- package/build/pkg/protocol.js +1 -1
- package/build/pkg/protocol.js.map +1 -1
- package/build/test/display.js.map +1 -1
- package/build/tools/debug.js.map +1 -1
- package/build.zig +72 -64
- package/package.json +31 -23
- package/src/bin/install-pkmn-engine +26 -18
- package/src/lib/common/data.zig +4 -4
- package/src/lib/common/optional.zig +1 -1
- package/src/lib/common/protocol.zig +381 -405
- package/src/lib/common/rational.zig +7 -3
- package/src/lib/common/rng.zig +11 -11
- package/src/lib/gen1/calc.zig +5 -5
- package/src/lib/gen1/chance.zig +27 -26
- package/src/lib/gen1/data/species.zig +1 -1
- package/src/lib/gen1/data.zig +18 -18
- package/src/lib/gen1/helpers.zig +7 -7
- package/src/lib/gen1/mechanics.zig +255 -229
- package/src/lib/gen2/chance.zig +38 -37
- package/src/lib/gen2/data.zig +9 -9
- package/src/lib/gen2/generated.zig +4 -6
- package/src/lib/gen2/mechanics.zig +398 -299
- package/src/lib/{binding/node.zig → node.zig} +9 -12
- package/src/lib/pkmn.zig +26 -3
- package/src/lib/{binding/wasm.zig → wasm.zig} +2 -1
- package/src/lib/gen1/README.md +0 -894
- package/src/lib/gen2/README.md +0 -329
package/build/tools/debug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/tools/debug.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AAEzB,qCAAmD;AAEnD,gCAAmE;AACnE,oDAAsC;AACtC,sCAAqD;AACrD,kDAAoC;AACpC,6CAA8C;AAE9C,MAAM,YAAY;IAChB,GAAG,CAAa;IAChB,MAAM,CAAS;IAEf,YAAY,GAAe,EAAE,MAAc;QACzC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,IAAI,EAAE;QACJ,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;aAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;aACvC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,cAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,EAAE;QACJ,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;aAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;aACvC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,cAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;IAC1D,CAAC;CACF;AAED,SAAgB,OAAO,CAAC,IAAiB,EAAE,IAAY,EAAE,KAAc,EAAE,IAAa;IACpF,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IAEnD,MAAM,IAAI,GAAG,WAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAE,CAAC,CAAC;IACrC,MAAM,IAAI,CAAC,CAAC;IAEZ,MAAM,MAAM,GAAG,aAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,aAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAC9C,MAAM,WAAW,GAAG,CAAC,GAAW,EAAU,EAAE;QAC1C,2FAA2F;QAC3F,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1B,QAAQ,GAAG,CAAC,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/tools/debug.ts"],"names":[],"mappings":"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"}
|
package/build.zig
CHANGED
|
@@ -16,8 +16,8 @@ pub fn module(b: *std.Build, options: Options) *std.Build.Module {
|
|
|
16
16
|
build_options.addOption(?bool, "chance", options.chance);
|
|
17
17
|
build_options.addOption(?bool, "calc", options.calc);
|
|
18
18
|
return b.createModule(.{
|
|
19
|
-
.
|
|
20
|
-
.
|
|
19
|
+
.root_source_file = .{ .cwd_relative = dirname ++ "/src/lib/pkmn.zig" },
|
|
20
|
+
.imports = &.{.{ .name = "build_options", .module = build_options.createModule() }},
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
|
|
@@ -32,8 +32,8 @@ pub fn build(b: *std.Build) !void {
|
|
|
32
32
|
const wasm_stack_size =
|
|
33
33
|
b.option(u64, "wasm-stack-size", "The size of WASM stack") orelse std.wasm.page_size;
|
|
34
34
|
const dynamic = b.option(bool, "dynamic", "Build a dynamic library") orelse false;
|
|
35
|
-
const strip = b.option(bool, "strip", "Strip debugging symbols from binary")
|
|
36
|
-
const pic = b.option(bool, "pic", "Force position independent code")
|
|
35
|
+
const strip = b.option(bool, "strip", "Strip debugging symbols from binary");
|
|
36
|
+
const pic = b.option(bool, "pic", "Force position independent code");
|
|
37
37
|
const emit_asm = b.option(bool, "emit-asm", "Output .s (assembly code)") orelse false;
|
|
38
38
|
const emit_ll = b.option(bool, "emit-ll", "Output .ll (LLVM IR)") orelse false;
|
|
39
39
|
|
|
@@ -44,7 +44,7 @@ pub fn build(b: *std.Build) !void {
|
|
|
44
44
|
defer parsed.deinit();
|
|
45
45
|
const version = parsed.value.object.get("version").?.string;
|
|
46
46
|
const description = parsed.value.object.get("description").?.string;
|
|
47
|
-
var repository = std.mem.
|
|
47
|
+
var repository = std.mem.splitSequence(u8, parsed.value.object.get("repository").?.string, ":");
|
|
48
48
|
std.debug.assert(std.mem.eql(u8, repository.first(), "github"));
|
|
49
49
|
|
|
50
50
|
const showdown =
|
|
@@ -66,25 +66,25 @@ pub fn build(b: *std.Build) !void {
|
|
|
66
66
|
const addon = b.fmt("{s}.node", .{name});
|
|
67
67
|
const lib = b.addSharedLibrary(.{
|
|
68
68
|
.name = addon,
|
|
69
|
-
.
|
|
70
|
-
.root_source_file = .{ .path = "src/lib/binding/node.zig" },
|
|
69
|
+
.root_source_file = b.path("src/lib/node.zig"),
|
|
71
70
|
.optimize = optimize,
|
|
72
71
|
.target = target,
|
|
72
|
+
.strip = strip,
|
|
73
|
+
.pic = pic,
|
|
73
74
|
});
|
|
74
|
-
lib.addOptions("build_options", options);
|
|
75
|
-
lib.addSystemIncludePath(.
|
|
75
|
+
lib.root_module.addOptions("build_options", options);
|
|
76
|
+
lib.addSystemIncludePath(b.path(headers));
|
|
76
77
|
lib.linkLibC();
|
|
77
78
|
if (node_import_lib) |il| {
|
|
78
|
-
lib.addObjectFile(.
|
|
79
|
-
} else if (
|
|
79
|
+
lib.addObjectFile(b.path(il));
|
|
80
|
+
} else if (target.result.os.tag == .windows) {
|
|
80
81
|
try std.io.getStdErr().writeAll("Must provide --node-import-library path on Windows\n");
|
|
81
82
|
std.process.exit(1);
|
|
82
83
|
}
|
|
83
84
|
lib.linker_allow_shlib_undefined = true;
|
|
84
85
|
maybeStrip(b, lib, b.getInstallStep(), strip, cmd);
|
|
85
|
-
if (pic) lib.force_pic = pic;
|
|
86
86
|
// Always emit to build/lib because this is where the driver code expects to find it
|
|
87
|
-
// TODO
|
|
87
|
+
// TODO: ziglang/zig#2231 - using the following used to work (though was hacky):
|
|
88
88
|
//
|
|
89
89
|
// lib.emit_bin = .{ .emit_to = b.fmt("build/lib/{s}", .{addon}) };
|
|
90
90
|
// b.getInstallStep().dependOn(&lib.step);
|
|
@@ -93,59 +93,69 @@ 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
|
|
96
|
+
const exe = b.addExecutable(.{
|
|
97
97
|
.name = name,
|
|
98
|
-
.
|
|
99
|
-
.root_source_file = .{ .path = "src/lib/binding/wasm.zig" },
|
|
98
|
+
.root_source_file = b.path("src/lib/wasm.zig"),
|
|
100
99
|
.optimize = switch (optimize) {
|
|
101
100
|
.ReleaseFast, .ReleaseSafe => .ReleaseSmall,
|
|
102
101
|
else => optimize,
|
|
103
102
|
},
|
|
104
|
-
.target = .{ .cpu_arch = .wasm32, .os_tag = .freestanding },
|
|
103
|
+
.target = b.resolveTargetQuery(.{ .cpu_arch = .wasm32, .os_tag = .freestanding }),
|
|
104
|
+
.strip = strip,
|
|
105
|
+
.pic = pic,
|
|
105
106
|
});
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
107
|
+
exe.root_module.addOptions("build_options", options);
|
|
108
|
+
exe.root_module.export_symbol_names = &[_][]const u8{
|
|
109
|
+
"SHOWDOWN",
|
|
110
|
+
"LOG",
|
|
111
|
+
"CHANCE",
|
|
112
|
+
"CALC",
|
|
113
|
+
"GEN1_CHOICES_SIZE",
|
|
114
|
+
"GEN1_LOGS_SIZE",
|
|
115
|
+
};
|
|
116
|
+
exe.entry = .disabled;
|
|
117
|
+
exe.stack_size = wasm_stack_size;
|
|
111
118
|
const opt = b.findProgram(&.{"wasm-opt"}, &.{"./node_modules/.bin"}) catch null;
|
|
112
119
|
if (optimize != .Debug and opt != null) {
|
|
113
120
|
const out = b.fmt("build/lib/{s}.wasm", .{name});
|
|
114
121
|
const sh = b.addSystemCommand(&.{ opt.?, "-O4" });
|
|
115
|
-
sh.addArtifactArg(
|
|
122
|
+
sh.addArtifactArg(exe);
|
|
116
123
|
sh.addArg("-o");
|
|
117
|
-
sh.
|
|
124
|
+
sh.addFileArg(b.path(out));
|
|
118
125
|
b.getInstallStep().dependOn(&sh.step);
|
|
126
|
+
} else {
|
|
127
|
+
b.getInstallStep().dependOn(&b.addInstallArtifact(exe, .{
|
|
128
|
+
.dest_dir = .{ .override = std.Build.InstallDir{ .lib = {} } },
|
|
129
|
+
}).step);
|
|
119
130
|
}
|
|
120
|
-
b.installArtifact(lib);
|
|
121
131
|
} else if (dynamic) {
|
|
122
132
|
const lib = b.addSharedLibrary(.{
|
|
123
133
|
.name = name,
|
|
124
|
-
.
|
|
125
|
-
.root_source_file = .{ .path = "src/lib/binding/c.zig" },
|
|
134
|
+
.root_source_file = b.path("src/lib/c.zig"),
|
|
126
135
|
.version = try std.SemanticVersion.parse(version),
|
|
127
136
|
.optimize = optimize,
|
|
128
137
|
.target = target,
|
|
138
|
+
.strip = strip,
|
|
139
|
+
.pic = pic,
|
|
129
140
|
});
|
|
130
|
-
lib.addOptions("build_options", options);
|
|
131
|
-
lib.addIncludePath(.
|
|
141
|
+
lib.root_module.addOptions("build_options", options);
|
|
142
|
+
lib.addIncludePath(b.path("src/include"));
|
|
132
143
|
maybeStrip(b, lib, b.getInstallStep(), strip, cmd);
|
|
133
|
-
if (pic) lib.force_pic = pic;
|
|
134
144
|
b.installArtifact(lib);
|
|
135
145
|
c = true;
|
|
136
146
|
} else {
|
|
137
147
|
const lib = b.addStaticLibrary(.{
|
|
138
148
|
.name = name,
|
|
139
|
-
.
|
|
140
|
-
.root_source_file = .{ .path = "src/lib/binding/c.zig" },
|
|
149
|
+
.root_source_file = b.path("src/lib/c.zig"),
|
|
141
150
|
.optimize = optimize,
|
|
142
151
|
.target = target,
|
|
152
|
+
.strip = strip,
|
|
153
|
+
.pic = pic,
|
|
143
154
|
});
|
|
144
|
-
lib.addOptions("build_options", options);
|
|
145
|
-
lib.addIncludePath(.
|
|
155
|
+
lib.root_module.addOptions("build_options", options);
|
|
156
|
+
lib.addIncludePath(b.path("src/include"));
|
|
146
157
|
lib.bundle_compiler_rt = true;
|
|
147
158
|
maybeStrip(b, lib, b.getInstallStep(), strip, cmd);
|
|
148
|
-
if (pic) lib.force_pic = pic;
|
|
149
159
|
if (emit_asm) {
|
|
150
160
|
b.getInstallStep().dependOn(&b.addInstallFileWithDir(
|
|
151
161
|
lib.getEmittedAsm(),
|
|
@@ -166,14 +176,18 @@ pub fn build(b: *std.Build) !void {
|
|
|
166
176
|
|
|
167
177
|
if (c) {
|
|
168
178
|
const header = b.addInstallFileWithDir(
|
|
169
|
-
.
|
|
179
|
+
b.path("src/include/pkmn.h"),
|
|
170
180
|
.header,
|
|
171
181
|
"pkmn.h",
|
|
172
182
|
);
|
|
173
183
|
b.getInstallStep().dependOn(&header.step);
|
|
174
184
|
|
|
175
185
|
const pc = b.fmt("lib{s}.pc", .{name});
|
|
176
|
-
const file = try
|
|
186
|
+
const file = try std.fs.path.relative(
|
|
187
|
+
b.allocator,
|
|
188
|
+
try std.process.getCwdAlloc(b.allocator),
|
|
189
|
+
try b.cache_root.join(b.allocator, &.{pc}),
|
|
190
|
+
);
|
|
177
191
|
const pkgconfig_file = try std.fs.cwd().createFile(file, .{});
|
|
178
192
|
|
|
179
193
|
const dirname = comptime std.fs.path.dirname(@src().file) orelse ".";
|
|
@@ -206,7 +220,7 @@ pub fn build(b: *std.Build) !void {
|
|
|
206
220
|
// TODO: tests can be run multiple times due to @imports
|
|
207
221
|
const tests = TestStep.create(b, options, config);
|
|
208
222
|
|
|
209
|
-
var exes = std.ArrayList(*std.Build.
|
|
223
|
+
var exes = std.ArrayList(*std.Build.Step.Compile).init(b.allocator);
|
|
210
224
|
const tools: ToolConfig = .{
|
|
211
225
|
.options = .{
|
|
212
226
|
.showdown = showdown,
|
|
@@ -254,13 +268,12 @@ pub fn build(b: *std.Build) !void {
|
|
|
254
268
|
|
|
255
269
|
fn maybeStrip(
|
|
256
270
|
b: *std.Build,
|
|
257
|
-
artifact: *std.Build.
|
|
271
|
+
artifact: *std.Build.Step.Compile,
|
|
258
272
|
step: *std.Build.Step,
|
|
259
|
-
strip: bool,
|
|
273
|
+
strip: ?bool,
|
|
260
274
|
cmd: ?[]const u8,
|
|
261
275
|
) void {
|
|
262
|
-
|
|
263
|
-
if (!strip or cmd == null) return;
|
|
276
|
+
if (!(strip orelse false) or cmd == null) return;
|
|
264
277
|
// Using `strip -r -u` for dynamic libraries is supposed to work on macOS but doesn't...
|
|
265
278
|
const mac = builtin.os.tag == .macos;
|
|
266
279
|
if (mac and artifact.isDynamicLibrary()) return;
|
|
@@ -272,10 +285,10 @@ fn maybeStrip(
|
|
|
272
285
|
}
|
|
273
286
|
|
|
274
287
|
const Config = struct {
|
|
275
|
-
target: std.
|
|
288
|
+
target: std.Build.ResolvedTarget,
|
|
276
289
|
optimize: std.builtin.OptimizeMode,
|
|
277
|
-
pic: bool,
|
|
278
|
-
strip: bool,
|
|
290
|
+
pic: ?bool,
|
|
291
|
+
strip: ?bool,
|
|
279
292
|
cmd: ?[]const u8,
|
|
280
293
|
};
|
|
281
294
|
|
|
@@ -283,9 +296,8 @@ const TestStep = struct {
|
|
|
283
296
|
step: std.Build.Step,
|
|
284
297
|
build: bool,
|
|
285
298
|
|
|
286
|
-
pub fn create(b: *std.Build, options: *std.Build.
|
|
299
|
+
pub fn create(b: *std.Build, options: *std.Build.Step.Options, config: Config) *TestStep {
|
|
287
300
|
const coverage = b.option([]const u8, "test-coverage", "Generate test coverage");
|
|
288
|
-
const test_file = b.option([]const u8, "test-file", "Input file for test");
|
|
289
301
|
const test_filter =
|
|
290
302
|
b.option([]const u8, "test-filter", "Skip tests that do not match filter");
|
|
291
303
|
|
|
@@ -293,22 +305,17 @@ const TestStep = struct {
|
|
|
293
305
|
const step = std.Build.Step.init(.{ .id = .custom, .name = "Run all tests", .owner = b });
|
|
294
306
|
self.* = .{ .step = step, .build = test_filter == null };
|
|
295
307
|
|
|
296
|
-
const path = test_file orelse "src/lib/test.zig";
|
|
297
308
|
const tests = b.addTest(.{
|
|
298
|
-
.
|
|
299
|
-
std.fs.path.basename(std.fs.path.dirname(path).?),
|
|
300
|
-
std.fs.path.stem(std.fs.path.basename(path)),
|
|
301
|
-
}),
|
|
302
|
-
.main_pkg_path = .{ .path = "." },
|
|
303
|
-
.root_source_file = .{ .path = path },
|
|
309
|
+
.root_source_file = b.path("src/lib/test.zig"),
|
|
304
310
|
.optimize = config.optimize,
|
|
305
311
|
.target = config.target,
|
|
306
312
|
.filter = test_filter,
|
|
313
|
+
.single_threaded = true,
|
|
314
|
+
.strip = config.strip,
|
|
315
|
+
.pic = config.pic,
|
|
307
316
|
});
|
|
308
|
-
tests.addOptions("build_options", options);
|
|
309
|
-
tests.single_threaded = true;
|
|
317
|
+
tests.root_module.addOptions("build_options", options);
|
|
310
318
|
maybeStrip(b, tests, &tests.step, config.strip, config.cmd);
|
|
311
|
-
if (config.pic) tests.force_pic = config.pic;
|
|
312
319
|
if (coverage) |c| {
|
|
313
320
|
tests.setExecCmd(&.{ "kcov", "--include-pattern=src/lib", c, null });
|
|
314
321
|
}
|
|
@@ -324,11 +331,11 @@ const ToolConfig = struct {
|
|
|
324
331
|
tool: struct {
|
|
325
332
|
tests: ?*TestStep,
|
|
326
333
|
name: ?[]const u8 = null,
|
|
327
|
-
exes: *std.ArrayList(*std.Build.
|
|
334
|
+
exes: *std.ArrayList(*std.Build.Step.Compile),
|
|
328
335
|
},
|
|
329
336
|
};
|
|
330
337
|
|
|
331
|
-
fn tool(b: *std.Build, path: []const u8, config: ToolConfig) !?*std.Build.
|
|
338
|
+
fn tool(b: *std.Build, path: []const u8, config: ToolConfig) !?*std.Build.Step.Run {
|
|
332
339
|
std.fs.cwd().access(path, .{}) catch |err| switch (err) {
|
|
333
340
|
error.FileNotFound => return null,
|
|
334
341
|
else => |e| return e,
|
|
@@ -340,14 +347,15 @@ fn tool(b: *std.Build, path: []const u8, config: ToolConfig) !?*std.Build.RunSte
|
|
|
340
347
|
|
|
341
348
|
const exe = b.addExecutable(.{
|
|
342
349
|
.name = name,
|
|
343
|
-
.root_source_file = .
|
|
350
|
+
.root_source_file = b.path(path),
|
|
344
351
|
.target = config.general.target,
|
|
345
352
|
.optimize = config.general.optimize,
|
|
353
|
+
.single_threaded = true,
|
|
354
|
+
.strip = config.general.strip,
|
|
355
|
+
.pic = config.general.pic,
|
|
346
356
|
});
|
|
347
|
-
exe.
|
|
357
|
+
exe.root_module.addImport("pkmn", module(b, config.options));
|
|
348
358
|
|
|
349
|
-
exe.single_threaded = true;
|
|
350
|
-
if (config.general.pic) exe.force_pic = config.general.pic;
|
|
351
359
|
if (config.tool.tests) |ts| ts.step.dependOn(&exe.step);
|
|
352
360
|
config.tool.exes.append(exe) catch @panic("OOM");
|
|
353
361
|
|
|
@@ -361,7 +369,7 @@ fn tool(b: *std.Build, path: []const u8, config: ToolConfig) !?*std.Build.RunSte
|
|
|
361
369
|
const ToolsStep = struct {
|
|
362
370
|
step: std.Build.Step,
|
|
363
371
|
|
|
364
|
-
pub fn create(b: *std.Build, exes: *std.ArrayList(*std.Build.
|
|
372
|
+
pub fn create(b: *std.Build, exes: *std.ArrayList(*std.Build.Step.Compile)) *ToolsStep {
|
|
365
373
|
const self = b.allocator.create(ToolsStep) catch @panic("OOM");
|
|
366
374
|
const step = std.Build.Step.init(.{ .id = .custom, .name = "Install tools", .owner = b });
|
|
367
375
|
self.* = .{ .step = step };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pkmn/engine",
|
|
3
|
-
"version": "0.1.0-dev.
|
|
3
|
+
"version": "0.1.0-dev.9257876b",
|
|
4
4
|
"description": "A minimal, complete, Pokémon battle simulation engine optimized for performance",
|
|
5
5
|
"repository": "github:pkmn/engine",
|
|
6
6
|
"license": "MIT",
|
|
@@ -31,9 +31,6 @@
|
|
|
31
31
|
"build/test/display.js",
|
|
32
32
|
"build/tools/debug.js.map",
|
|
33
33
|
"build/tools/debug.js",
|
|
34
|
-
"src/bin/install-pkmn-engine",
|
|
35
|
-
"src/lib/binding/node.zig",
|
|
36
|
-
"src/lib/binding/wasm.zig",
|
|
37
34
|
"src/lib/common/battle.zig",
|
|
38
35
|
"src/lib/common/data.zig",
|
|
39
36
|
"src/lib/common/debug.zig",
|
|
@@ -62,7 +59,9 @@
|
|
|
62
59
|
"src/lib/gen2/generated.zig",
|
|
63
60
|
"src/lib/gen2/helpers.zig",
|
|
64
61
|
"src/lib/gen2/mechanics.zig",
|
|
62
|
+
"src/lib/node.zig",
|
|
65
63
|
"src/lib/pkmn.zig",
|
|
64
|
+
"src/lib/wasm.zig",
|
|
66
65
|
"src/test/display/pkmn.html.tmpl"
|
|
67
66
|
],
|
|
68
67
|
"engines": {
|
|
@@ -76,30 +75,31 @@
|
|
|
76
75
|
"access": "public"
|
|
77
76
|
},
|
|
78
77
|
"dependencies": {
|
|
79
|
-
"@pkmn/data": "^0.7
|
|
80
|
-
"@pkmn/protocol": "^0.6.
|
|
78
|
+
"@pkmn/data": "^0.9.7",
|
|
79
|
+
"@pkmn/protocol": "^0.6.25"
|
|
81
80
|
},
|
|
82
81
|
"devDependencies": {
|
|
83
|
-
"@pkmn/eslint-config": "^
|
|
84
|
-
"@pkmn/img": "^0.2.
|
|
85
|
-
"@pkmn/sets": "^5.1.
|
|
86
|
-
"@pkmn/sim": "0.7
|
|
87
|
-
"@types/html-minifier": "^4.0.
|
|
88
|
-
"@types/jest": "^29.5.
|
|
89
|
-
"@types/minimist": "^1.2.
|
|
90
|
-
"@types/mustache": "^4.2.
|
|
91
|
-
"@types/node": "^20.
|
|
92
|
-
"@vitest/coverage-
|
|
93
|
-
"binaryen": "^
|
|
94
|
-
"eslint": "
|
|
82
|
+
"@pkmn/eslint-config": "^7.4.0",
|
|
83
|
+
"@pkmn/img": "^0.2.29",
|
|
84
|
+
"@pkmn/sets": "^5.1.2",
|
|
85
|
+
"@pkmn/sim": "0.9.7",
|
|
86
|
+
"@types/html-minifier": "^4.0.5",
|
|
87
|
+
"@types/jest": "^29.5.12",
|
|
88
|
+
"@types/minimist": "^1.2.5",
|
|
89
|
+
"@types/mustache": "^4.2.5",
|
|
90
|
+
"@types/node": "^20.14.5",
|
|
91
|
+
"@vitest/coverage-v8": "^1.6.0",
|
|
92
|
+
"binaryen": "^117.0.0",
|
|
93
|
+
"eslint": "<=8",
|
|
95
94
|
"html-minifier": "^4.0.0",
|
|
96
|
-
"json-stringify-pretty-compact": "
|
|
95
|
+
"json-stringify-pretty-compact": "4.0.0",
|
|
97
96
|
"minimist": "^1.2.8",
|
|
98
97
|
"mustache": "^4.2.0",
|
|
99
98
|
"source-map-support": "^0.5.21",
|
|
99
|
+
"table": "^6.8.2",
|
|
100
100
|
"trakr": "^0.2.0",
|
|
101
|
-
"typescript": "^5.
|
|
102
|
-
"vitest": "^
|
|
101
|
+
"typescript": "^5.4.5",
|
|
102
|
+
"vitest": "^1.6.0"
|
|
103
103
|
},
|
|
104
104
|
"scripts": {
|
|
105
105
|
"lint": "eslint --cache src --ext ts,js && eslint src/bin/*",
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
"ignorePatterns": [
|
|
122
122
|
"dist/",
|
|
123
123
|
"node_modules/",
|
|
124
|
-
"
|
|
124
|
+
"examples/zig",
|
|
125
125
|
"build/"
|
|
126
126
|
],
|
|
127
127
|
"env": {
|
|
@@ -137,10 +137,18 @@
|
|
|
137
137
|
"parserOptions": {
|
|
138
138
|
"project": [
|
|
139
139
|
"./tsconfig.json",
|
|
140
|
-
"./
|
|
140
|
+
"./examples/js/tsconfig.json"
|
|
141
141
|
]
|
|
142
142
|
}
|
|
143
143
|
},
|
|
144
|
+
{
|
|
145
|
+
"files": [
|
|
146
|
+
"src/test/display.ts"
|
|
147
|
+
],
|
|
148
|
+
"rules": {
|
|
149
|
+
"@typescript-eslint/no-unnecessary-type-assertion": "off"
|
|
150
|
+
}
|
|
151
|
+
},
|
|
144
152
|
{
|
|
145
153
|
"files": [
|
|
146
154
|
"src/pkg/index.ts",
|
|
@@ -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:
|
|
13
|
+
const ZIG_VERSION = {major: 0, minor: 13, patch: 0};
|
|
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
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
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) {
|
|
@@ -370,8 +370,10 @@ const downloadImportLib = async () => {
|
|
|
370
370
|
const args = ['build', '-p', 'build', ...opts];
|
|
371
371
|
if (!process.env.DEBUG_PKMN_ENGINE) args.push('-Doptimize=ReleaseFast', '-Dstrip');
|
|
372
372
|
if (config.type === 'node') {
|
|
373
|
-
args.push(`-Dnode-headers=${headers}`);
|
|
374
|
-
if (process.platform === 'win32')
|
|
373
|
+
args.push(`-Dnode-headers=${path.relative(ROOT, headers)}`);
|
|
374
|
+
if (process.platform === 'win32') {
|
|
375
|
+
args.push(`-Dnode-import-library=${path.relative(ROOT, lib)}`);
|
|
376
|
+
}
|
|
375
377
|
} else {
|
|
376
378
|
args.push('-Dwasm');
|
|
377
379
|
}
|
|
@@ -386,8 +388,14 @@ const downloadImportLib = async () => {
|
|
|
386
388
|
const prefix = process.platform === 'win32' ? '' : 'lib';
|
|
387
389
|
const ext = process.platform === 'darwin'
|
|
388
390
|
? 'dylib' : process.platform === 'win32' ? 'dll' : 'so';
|
|
389
|
-
|
|
390
|
-
|
|
391
|
+
try {
|
|
392
|
+
const actual = path.join('build', 'lib', `${prefix}pkmn${suffix}.node.${ext}`);
|
|
393
|
+
fs.renameSync(actual, artifact);
|
|
394
|
+
} catch (err) {
|
|
395
|
+
// ziglang/zig#19743 changed this path
|
|
396
|
+
const actual = path.join('build', 'bin', `${prefix}pkmn${suffix}.node.${ext}`);
|
|
397
|
+
fs.renameSync(actual, artifact);
|
|
398
|
+
}
|
|
391
399
|
}
|
|
392
400
|
}
|
|
393
401
|
})().catch(e => {
|
package/src/lib/common/data.zig
CHANGED
|
@@ -22,8 +22,8 @@ pub const Player = enum(u1) {
|
|
|
22
22
|
|
|
23
23
|
test Player {
|
|
24
24
|
try expectEqual(Player.P2, Player.P1.foe());
|
|
25
|
-
try expectEqual(
|
|
26
|
-
try expectEqual(
|
|
25
|
+
try expectEqual(0b0001, @as(u8, @bitCast(Player.P1.ident(1))));
|
|
26
|
+
try expectEqual(0b1101, @as(u8, @bitCast(Player.P2.ident(5))));
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
/// An identifier for a specific Pokémon in battle.
|
|
@@ -46,8 +46,8 @@ pub const ID = packed struct(u8) {
|
|
|
46
46
|
};
|
|
47
47
|
|
|
48
48
|
test ID {
|
|
49
|
-
try expectEqual(
|
|
50
|
-
try expectEqual(
|
|
49
|
+
try expectEqual(0b0001, @as(u8, @bitCast(ID{ .player = .P1, .id = 1 })));
|
|
50
|
+
try expectEqual(0b1101, @as(u8, @bitCast(ID{ .player = .P2, .id = 5 })));
|
|
51
51
|
const id: ID = .{ .player = .P2, .id = 4 };
|
|
52
52
|
try expectEqual(id, ID.from(id.int()));
|
|
53
53
|
}
|