@pkmn/engine 0.1.0-dev.5570b5c5 → 0.1.0-dev.587596a6
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 -1
- package/README.md +29 -17
- package/build/pkg/addon/browser.d.ts +3 -0
- package/build/pkg/addon/browser.js +47 -0
- package/build/pkg/addon/browser.js.map +1 -0
- package/build/pkg/addon/node.d.ts +3 -0
- package/build/pkg/addon/node.js +110 -0
- package/build/pkg/addon/node.js.map +1 -0
- package/build/pkg/addon/wasm.d.ts +2 -0
- package/build/pkg/addon/wasm.js +53 -0
- package/build/pkg/addon/wasm.js.map +1 -0
- package/build/pkg/addon.d.ts +26 -4
- package/build/pkg/addon.js +34 -65
- package/build/pkg/addon.js.map +1 -1
- package/build/pkg/data/layout.json +15 -2
- package/build/pkg/data/protocol.json +23 -9
- package/build/pkg/data.d.ts +23 -1
- package/build/pkg/data.js.map +1 -1
- package/build/pkg/gen1.d.ts +15 -18
- package/build/pkg/gen1.js +28 -19
- package/build/pkg/gen1.js.map +1 -1
- package/build/pkg/index.d.ts +40 -90
- package/build/pkg/index.js +23 -70
- package/build/pkg/index.js.map +1 -1
- package/build/pkg/protocol.d.ts +20 -1
- package/build/pkg/protocol.js +105 -103
- package/build/pkg/protocol.js.map +1 -1
- package/build/tools/debug.js +68 -74
- package/build/tools/debug.js.map +1 -1
- package/build/tools/display/debug.jsx +152 -0
- package/build/tools/display/debug.jsx.map +1 -0
- package/build/tools/display/index.js +152 -0
- package/build/tools/display/index.js.map +1 -0
- package/build/tools/display/ui.jsx +359 -0
- package/build/tools/display/ui.jsx.map +1 -0
- package/build/tools/display/util.js +33 -0
- package/build/tools/display/util.js.map +1 -0
- package/build.zig +237 -98
- package/package.json +59 -138
- package/src/bin/install-pkmn-engine +25 -7
- package/src/bin/pkmn-debug +1 -1
- package/src/lib/bindings/c.zig +200 -0
- package/src/lib/bindings/node.zig +117 -0
- package/src/lib/bindings/wasm.zig +50 -0
- package/src/lib/common/array.zig +70 -0
- package/src/lib/common/data.zig +8 -8
- package/src/lib/common/debug.zig +32 -11
- package/src/lib/common/js.zig +3 -7
- package/src/lib/common/optional.zig +11 -17
- package/src/lib/common/options.zig +6 -0
- package/src/lib/common/protocol.zig +148 -134
- package/src/lib/common/rational.zig +338 -255
- package/src/lib/common/rng.zig +5 -7
- package/src/lib/common/util.zig +33 -1
- package/src/lib/gen1/calc.zig +701 -171
- package/src/lib/gen1/chance.zig +407 -298
- package/src/lib/gen1/data/moves.zig +2 -4
- package/src/lib/gen1/data/species.zig +1 -3
- package/src/lib/gen1/data/types.zig +3 -4
- package/src/lib/gen1/data.zig +43 -46
- package/src/lib/gen1/helpers.zig +91 -549
- package/src/lib/gen1/mechanics.zig +355 -258
- package/src/lib/gen2/calc.zig +35 -28
- package/src/lib/gen2/chance.zig +91 -510
- package/src/lib/gen2/data/items.zig +1 -3
- package/src/lib/gen2/data/moves.zig +2 -4
- package/src/lib/gen2/data/species.zig +1 -3
- package/src/lib/gen2/data/types.zig +7 -5
- package/src/lib/gen2/data.zig +33 -35
- package/src/lib/gen2/generated.zig +18 -23
- package/src/lib/gen2/helpers.zig +45 -26
- package/src/lib/gen2/mechanics.zig +97 -124
- package/src/lib/napi.h +2 -0
- package/src/lib/node.zig +4 -121
- package/src/lib/pkmn.zig +106 -33
- package/src/lib/wasm.zig +9 -9
- package/src/tools/display/dom.ts +93 -0
- package/src/tools/display/ui.css +354 -0
- package/build/test/display.js +0 -400
- package/build/test/display.js.map +0 -1
- package/src/test/display/pkmn.html.tmpl +0 -368
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
const std = @import("std");
|
|
2
1
|
const builtin = @import("builtin");
|
|
3
|
-
|
|
4
|
-
const pkmn = @import("../pkmn.zig");
|
|
5
|
-
|
|
6
2
|
const data = @import("data.zig");
|
|
7
3
|
const options = @import("options.zig");
|
|
4
|
+
const pkmn = @import("../pkmn.zig");
|
|
5
|
+
const std = @import("std");
|
|
8
6
|
|
|
9
7
|
const assert = std.debug.assert;
|
|
10
|
-
const print = std.debug.print;
|
|
11
|
-
|
|
12
8
|
const enabled = options.log;
|
|
13
|
-
|
|
14
|
-
const Player = data.Player;
|
|
15
9
|
const ID = data.ID;
|
|
10
|
+
const Player = data.Player;
|
|
11
|
+
const print = std.debug.print;
|
|
16
12
|
|
|
17
13
|
const endian = builtin.cpu.arch.endian();
|
|
14
|
+
const Endian = std.builtin.Endian;
|
|
18
15
|
|
|
19
16
|
pub const ArgType = enum(u8) {
|
|
20
17
|
None,
|
|
@@ -312,19 +309,29 @@ pub const Weather = enum(u8) {
|
|
|
312
309
|
Upkeep,
|
|
313
310
|
};
|
|
314
311
|
|
|
315
|
-
///
|
|
316
|
-
|
|
317
|
-
/// entirely with `options.log`.
|
|
318
|
-
pub const NULL = Log(@TypeOf(std.io.null_writer)){ .writer = std.io.null_writer };
|
|
319
|
-
|
|
320
|
-
/// Logs protocol information to its `Writer` during a battle update when `options.log` is enabled.
|
|
321
|
-
pub fn Log(comptime Writer: type) type {
|
|
312
|
+
/// Logs protocol information to its `WriterT` during a battle update when `options.log` is enabled.
|
|
313
|
+
pub fn Log(comptime WriterT: type) type {
|
|
322
314
|
return struct {
|
|
323
315
|
const Self = @This();
|
|
324
316
|
|
|
325
|
-
writer:
|
|
317
|
+
writer: WriterT,
|
|
326
318
|
|
|
327
|
-
pub const Error =
|
|
319
|
+
pub const Error = err(WriterT);
|
|
320
|
+
|
|
321
|
+
fn err(comptime T: type) type {
|
|
322
|
+
const msg = "Invalid Writer type " ++ @typeName(T) ++ "'";
|
|
323
|
+
return switch (@typeInfo(T)) {
|
|
324
|
+
.pointer => |ptr_info| switch (ptr_info.size) {
|
|
325
|
+
.one => switch (@typeInfo(ptr_info.child)) {
|
|
326
|
+
.@"struct" => err(ptr_info.child),
|
|
327
|
+
else => @compileError(msg),
|
|
328
|
+
},
|
|
329
|
+
else => @compileError(msg),
|
|
330
|
+
},
|
|
331
|
+
.@"struct" => if (@hasDecl(T, "Error")) T.Error else @compileError(msg),
|
|
332
|
+
else => @compileError(msg),
|
|
333
|
+
};
|
|
334
|
+
}
|
|
328
335
|
|
|
329
336
|
// source: ID, move: <Move>, target: ID, from?: <Move>
|
|
330
337
|
pub fn move(self: Self, args: anytype) Error!void {
|
|
@@ -815,56 +822,68 @@ pub fn Log(comptime Writer: type) type {
|
|
|
815
822
|
};
|
|
816
823
|
}
|
|
817
824
|
|
|
818
|
-
/// `Log` type backed by the optimized `
|
|
819
|
-
pub const FixedLog = Log(
|
|
825
|
+
/// `Log` type backed by the optimized `Writer`.
|
|
826
|
+
pub const FixedLog = Log(*Writer);
|
|
820
827
|
|
|
821
|
-
///
|
|
822
|
-
///
|
|
823
|
-
///
|
|
824
|
-
pub const
|
|
828
|
+
/// Minimal logging helper optimized for efficiently writing the individual protocol bytes into a
|
|
829
|
+
/// fixed buffer. Note that this is **not** a `std.Io.Writer` and should not be used for general
|
|
830
|
+
/// purpose writing.
|
|
831
|
+
pub const Writer = struct {
|
|
825
832
|
buffer: []u8,
|
|
826
833
|
pos: usize = 0,
|
|
827
834
|
|
|
828
|
-
pub const
|
|
829
|
-
stream: *ByteStream,
|
|
835
|
+
pub const Error = error{NoSpaceLeft};
|
|
830
836
|
|
|
831
|
-
|
|
837
|
+
pub fn writeByte(self: *Writer, byte: u8) Error!void {
|
|
838
|
+
if (self.pos >= self.buffer.len) return error.NoSpaceLeft;
|
|
839
|
+
self.buffer[self.pos] = byte;
|
|
840
|
+
self.pos += 1;
|
|
841
|
+
}
|
|
832
842
|
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
843
|
+
pub fn writeAll(self: *Writer, bytes: []const u8) Error!void {
|
|
844
|
+
const npos = self.pos + bytes.len;
|
|
845
|
+
if (npos > self.buffer.len) return error.NoSpaceLeft;
|
|
846
|
+
@memcpy(self.buffer[self.pos..npos], bytes);
|
|
847
|
+
self.pos = npos;
|
|
848
|
+
}
|
|
836
849
|
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
850
|
+
pub fn writeInt(self: *Writer, comptime T: type, v: T, end: std.builtin.Endian) Error!void {
|
|
851
|
+
const bytes = @divExact(@typeInfo(T).int.bits, 8);
|
|
852
|
+
const npos = self.pos + bytes;
|
|
853
|
+
if (npos > self.buffer.len) return error.NoSpaceLeft;
|
|
854
|
+
std.mem.writeInt(T, self.buffer[self.pos..][0..bytes], v, end);
|
|
855
|
+
self.pos = npos;
|
|
856
|
+
}
|
|
840
857
|
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
858
|
+
pub fn reset(self: *Writer) void {
|
|
859
|
+
self.pos = 0;
|
|
860
|
+
}
|
|
861
|
+
};
|
|
862
|
+
|
|
863
|
+
/// Null object pattern implementation of `Log` backed by a null writer. Ignores anything sent to
|
|
864
|
+
/// it, though protocol logging should additionally be turned off entirely with `options.log`.
|
|
865
|
+
pub const NULL = Log(NullWriter){ .writer = .{} };
|
|
866
|
+
|
|
867
|
+
const NullWriter = struct {
|
|
868
|
+
pub const Error = error{};
|
|
848
869
|
|
|
849
|
-
pub fn
|
|
850
|
-
|
|
870
|
+
pub fn writeByte(self: NullWriter, byte: u8) Error!void {
|
|
871
|
+
_ = .{ self, byte };
|
|
851
872
|
}
|
|
852
873
|
|
|
853
|
-
pub fn
|
|
854
|
-
|
|
855
|
-
self.buffer[self.pos] = byte;
|
|
856
|
-
self.pos += 1;
|
|
874
|
+
pub fn writeAll(self: NullWriter, bytes: []const u8) Error!void {
|
|
875
|
+
_ = .{ self, bytes };
|
|
857
876
|
}
|
|
858
877
|
|
|
859
|
-
pub fn
|
|
860
|
-
|
|
878
|
+
pub fn writeInt(self: NullWriter, comptime T: type, v: T, end: std.builtin.Endian) Error!void {
|
|
879
|
+
_ = .{ self, T, v, end };
|
|
861
880
|
}
|
|
862
881
|
};
|
|
863
882
|
|
|
864
883
|
pub const Kind = enum { Move, Species, Type, Status, Item, Weather };
|
|
865
884
|
|
|
866
885
|
pub fn format(
|
|
867
|
-
|
|
886
|
+
gen: anytype,
|
|
868
887
|
a: []const u8,
|
|
869
888
|
b: ?[]const u8,
|
|
870
889
|
color: bool,
|
|
@@ -1207,12 +1226,8 @@ pub fn expectLog(
|
|
|
1207
1226
|
) !void {
|
|
1208
1227
|
if (!enabled) return;
|
|
1209
1228
|
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
else switch (std.io.tty.detectConfig(std.io.getStdErr())) {
|
|
1213
|
-
.escape_codes => true,
|
|
1214
|
-
else => false,
|
|
1215
|
-
};
|
|
1229
|
+
// TODO: ziglang/zig#30833 - read from environment
|
|
1230
|
+
const color = true;
|
|
1216
1231
|
|
|
1217
1232
|
expectEqualBytes(expected, actual, offset) catch |err| switch (err) {
|
|
1218
1233
|
error.TestExpectedEqual => {
|
|
@@ -1220,7 +1235,6 @@ pub fn expectLog(
|
|
|
1220
1235
|
format(gen, actual, expected, color);
|
|
1221
1236
|
return err;
|
|
1222
1237
|
},
|
|
1223
|
-
else => return err,
|
|
1224
1238
|
};
|
|
1225
1239
|
}
|
|
1226
1240
|
|
|
@@ -1228,7 +1242,7 @@ fn expectEqualBytes(expected: []const u8, actual: []const u8, offset: usize) !vo
|
|
|
1228
1242
|
for (offset..@min(expected.len, actual.len)) |i| {
|
|
1229
1243
|
if (expected[i] != actual[i]) {
|
|
1230
1244
|
print(
|
|
1231
|
-
"index {} incorrect. expected 0x{X:0>2}, found 0x{X:0>2}\n",
|
|
1245
|
+
"index {d} incorrect. expected 0x{X:0>2}, found 0x{X:0>2}\n",
|
|
1232
1246
|
.{ i, expected[i], actual[i] },
|
|
1233
1247
|
);
|
|
1234
1248
|
return error.TestExpectedEqual;
|
|
@@ -1251,8 +1265,8 @@ const p1 = Player.P1;
|
|
|
1251
1265
|
const p2 = Player.P2;
|
|
1252
1266
|
|
|
1253
1267
|
var buf: [pkmn.LOGS_SIZE]u8 = undefined;
|
|
1254
|
-
var
|
|
1255
|
-
var log: FixedLog = .{ .writer =
|
|
1268
|
+
var writer: Writer = .{ .buffer = &buf };
|
|
1269
|
+
var log: FixedLog = .{ .writer = &writer };
|
|
1256
1270
|
|
|
1257
1271
|
const gen1 = pkmn.gen1;
|
|
1258
1272
|
const gen2 = pkmn.gen2;
|
|
@@ -1296,14 +1310,14 @@ test "|move|" {
|
|
|
1296
1310
|
&.{ N(ArgType.Move), 0b1100, N(M1.Thunderbolt), 0b0101, N(Move.None) },
|
|
1297
1311
|
buf[0..5],
|
|
1298
1312
|
);
|
|
1299
|
-
|
|
1313
|
+
writer.reset();
|
|
1300
1314
|
|
|
1301
1315
|
try log.move(.{ p2.ident(4), M1.Pound, p1.ident(5), M1.Metronome });
|
|
1302
1316
|
try expectLog1(
|
|
1303
1317
|
&.{ N(ArgType.Move), 0b1100, N(M1.Pound), 0b0101, N(Move.From), N(M1.Metronome) },
|
|
1304
1318
|
buf[0..6],
|
|
1305
1319
|
);
|
|
1306
|
-
|
|
1320
|
+
writer.reset();
|
|
1307
1321
|
|
|
1308
1322
|
try log.move(.{ p2.ident(4), M1.SkullBash, ID{} });
|
|
1309
1323
|
try log.laststill(.{});
|
|
@@ -1318,7 +1332,7 @@ test "|move|" {
|
|
|
1318
1332
|
},
|
|
1319
1333
|
buf[0..6],
|
|
1320
1334
|
);
|
|
1321
|
-
|
|
1335
|
+
writer.reset();
|
|
1322
1336
|
|
|
1323
1337
|
try log.move(.{ p2.ident(4), M1.Tackle, p1.ident(5) });
|
|
1324
1338
|
try log.lastmiss(.{});
|
|
@@ -1333,7 +1347,7 @@ test "|move|" {
|
|
|
1333
1347
|
},
|
|
1334
1348
|
buf[0..6],
|
|
1335
1349
|
);
|
|
1336
|
-
|
|
1350
|
+
writer.reset();
|
|
1337
1351
|
}
|
|
1338
1352
|
|
|
1339
1353
|
test "|switch|" {
|
|
@@ -1349,7 +1363,7 @@ test "|switch|" {
|
|
|
1349
1363
|
.little => &.{ N(ArgType.Switch), 0b1011, N(S1.Snorlax), 91, 200, 0, 144, 1, par },
|
|
1350
1364
|
};
|
|
1351
1365
|
try expectLog1(expected, buf[0..9]);
|
|
1352
|
-
|
|
1366
|
+
writer.reset();
|
|
1353
1367
|
|
|
1354
1368
|
snorlax.level = 100;
|
|
1355
1369
|
snorlax.hp = 0;
|
|
@@ -1360,7 +1374,7 @@ test "|switch|" {
|
|
|
1360
1374
|
.little => &.{ N(ArgType.Switch), 0b1011, N(S1.Snorlax), 100, 0, 0, 144, 1, 0 },
|
|
1361
1375
|
};
|
|
1362
1376
|
try expectLog1(expected, buf[0..9]);
|
|
1363
|
-
|
|
1377
|
+
writer.reset();
|
|
1364
1378
|
|
|
1365
1379
|
snorlax.hp = 400;
|
|
1366
1380
|
try log.switched(.{ p2.ident(3), &snorlax });
|
|
@@ -1369,7 +1383,7 @@ test "|switch|" {
|
|
|
1369
1383
|
.little => &.{ N(ArgType.Switch), 0b1011, N(S1.Snorlax), 100, 144, 1, 144, 1, 0 },
|
|
1370
1384
|
};
|
|
1371
1385
|
try expectLog1(expected, buf[0..9]);
|
|
1372
|
-
|
|
1386
|
+
writer.reset();
|
|
1373
1387
|
|
|
1374
1388
|
var blissey = gen2.helpers.Pokemon.init(.{ .species = .Blissey, .moves = &.{.Splash} });
|
|
1375
1389
|
blissey.level = 91;
|
|
@@ -1388,27 +1402,27 @@ test "|switch|" {
|
|
|
1388
1402
|
.little => .{ 200, 0, 144, 1, par },
|
|
1389
1403
|
});
|
|
1390
1404
|
try expectLog2(expected, buf[0..10]);
|
|
1391
|
-
|
|
1405
|
+
writer.reset();
|
|
1392
1406
|
}
|
|
1393
1407
|
|
|
1394
1408
|
test "|cant|" {
|
|
1395
1409
|
try log.cant(.{ p2.ident(6), .Bound });
|
|
1396
1410
|
try expectLog1(&.{ N(ArgType.Cant), 0b1110, N(Cant.Bound) }, buf[0..3]);
|
|
1397
|
-
|
|
1411
|
+
writer.reset();
|
|
1398
1412
|
|
|
1399
1413
|
try log.cant(.{ p1.ident(2), .Disable, M1.Earthquake });
|
|
1400
1414
|
try expectLog1(&.{ N(ArgType.Cant), 2, N(Cant.Disable), N(M1.Earthquake) }, buf[0..4]);
|
|
1401
|
-
|
|
1415
|
+
writer.reset();
|
|
1402
1416
|
}
|
|
1403
1417
|
|
|
1404
1418
|
test "|faint|" {
|
|
1405
1419
|
try log.faint(.{ p2.ident(2), false });
|
|
1406
1420
|
try expectLog1(&.{ N(ArgType.Faint), 0b1010 }, buf[0..2]);
|
|
1407
|
-
|
|
1421
|
+
writer.reset();
|
|
1408
1422
|
|
|
1409
1423
|
try log.faint(.{ p2.ident(2), true });
|
|
1410
1424
|
try expectLog1(&.{ N(ArgType.Faint), 0b1010, N(ArgType.None) }, buf[0..3]);
|
|
1411
|
-
|
|
1425
|
+
writer.reset();
|
|
1412
1426
|
}
|
|
1413
1427
|
|
|
1414
1428
|
test "|turn|" {
|
|
@@ -1418,19 +1432,19 @@ test "|turn|" {
|
|
|
1418
1432
|
.little => &.{ N(ArgType.Turn), 42, 0, N(ArgType.None) },
|
|
1419
1433
|
};
|
|
1420
1434
|
try expectLog1(expected, buf[0..4]);
|
|
1421
|
-
|
|
1435
|
+
writer.reset();
|
|
1422
1436
|
}
|
|
1423
1437
|
|
|
1424
1438
|
test "|win|" {
|
|
1425
1439
|
try log.win(.{.P2});
|
|
1426
1440
|
try expectLog1(&.{ N(ArgType.Win), 1, N(ArgType.None) }, buf[0..3]);
|
|
1427
|
-
|
|
1441
|
+
writer.reset();
|
|
1428
1442
|
}
|
|
1429
1443
|
|
|
1430
1444
|
test "|tie|" {
|
|
1431
1445
|
try log.tie(.{});
|
|
1432
1446
|
try expectLog1(&.{ N(ArgType.Tie), N(ArgType.None) }, buf[0..2]);
|
|
1433
|
-
|
|
1447
|
+
writer.reset();
|
|
1434
1448
|
}
|
|
1435
1449
|
|
|
1436
1450
|
test "|-damage|" {
|
|
@@ -1443,7 +1457,7 @@ test "|-damage|" {
|
|
|
1443
1457
|
.little => &.{ N(ArgType.Damage), 0b1010, 100, 2, 191, 2, 1, N(Damage.None) },
|
|
1444
1458
|
};
|
|
1445
1459
|
try expectLog1(expected, buf[0..8]);
|
|
1446
|
-
|
|
1460
|
+
writer.reset();
|
|
1447
1461
|
|
|
1448
1462
|
chansey.hp = 100;
|
|
1449
1463
|
chansey.stats.hp = 256;
|
|
@@ -1454,7 +1468,7 @@ test "|-damage|" {
|
|
|
1454
1468
|
.little => &.{ N(ArgType.Damage), 0b1010, 100, 0, 0, 1, 0, N(Damage.Confusion) },
|
|
1455
1469
|
};
|
|
1456
1470
|
try expectLog1(expected, buf[0..8]);
|
|
1457
|
-
|
|
1471
|
+
writer.reset();
|
|
1458
1472
|
|
|
1459
1473
|
chansey.status = gen1.Status.init(.PSN);
|
|
1460
1474
|
try log.damage(.{ p2.ident(2), &chansey, .RecoilOf, p1.ident(1) });
|
|
@@ -1463,7 +1477,7 @@ test "|-damage|" {
|
|
|
1463
1477
|
.little => &.{ N(ArgType.Damage), 0b1010, 100, 0, 0, 1, 0b1000, N(Damage.RecoilOf), 1 },
|
|
1464
1478
|
};
|
|
1465
1479
|
try expectLog1(expected, buf[0..9]);
|
|
1466
|
-
|
|
1480
|
+
writer.reset();
|
|
1467
1481
|
}
|
|
1468
1482
|
|
|
1469
1483
|
test "|-heal|" {
|
|
@@ -1476,7 +1490,7 @@ test "|-heal|" {
|
|
|
1476
1490
|
.little => &.{ N(ArgType.Heal), 0b1010, 100, 2, 191, 2, 1, N(Heal.None) },
|
|
1477
1491
|
};
|
|
1478
1492
|
try expectLog1(expected, buf[0..8]);
|
|
1479
|
-
|
|
1493
|
+
writer.reset();
|
|
1480
1494
|
|
|
1481
1495
|
chansey.hp = 100;
|
|
1482
1496
|
chansey.stats.hp = 256;
|
|
@@ -1487,7 +1501,7 @@ test "|-heal|" {
|
|
|
1487
1501
|
.little => &.{ N(ArgType.Heal), 0b1010, 100, 0, 0, 1, 0, N(Heal.Silent) },
|
|
1488
1502
|
};
|
|
1489
1503
|
try expectLog1(expected, buf[0..8]);
|
|
1490
|
-
|
|
1504
|
+
writer.reset();
|
|
1491
1505
|
|
|
1492
1506
|
try log.heal(.{ p2.ident(2), &chansey, .Drain, p1.ident(1) });
|
|
1493
1507
|
expected = switch (endian) {
|
|
@@ -1495,30 +1509,30 @@ test "|-heal|" {
|
|
|
1495
1509
|
.little => &.{ N(ArgType.Heal), 0b1010, 100, 0, 0, 1, 0, N(Heal.Drain), 1 },
|
|
1496
1510
|
};
|
|
1497
1511
|
try expectLog1(expected, buf[0..9]);
|
|
1498
|
-
|
|
1512
|
+
writer.reset();
|
|
1499
1513
|
}
|
|
1500
1514
|
|
|
1501
1515
|
test "|-status|" {
|
|
1502
1516
|
try log.status(.{ p2.ident(6), gen1.Status.init(.BRN), .None });
|
|
1503
1517
|
try expectLog1(&.{ N(ArgType.Status), 0b1110, 0b10000, N(Status.None) }, buf[0..4]);
|
|
1504
|
-
|
|
1518
|
+
writer.reset();
|
|
1505
1519
|
|
|
1506
1520
|
try log.status(.{ p2.ident(2), gen1.Status.init(.PSN), .Silent });
|
|
1507
1521
|
try expectLog1(&.{ N(ArgType.Status), 0b1010, 0b1000, N(Status.Silent) }, buf[0..4]);
|
|
1508
|
-
|
|
1522
|
+
writer.reset();
|
|
1509
1523
|
|
|
1510
1524
|
try log.status(.{ p1.ident(1), gen1.Status.init(.PAR), .From, M1.BodySlam });
|
|
1511
1525
|
try expectLog1(
|
|
1512
1526
|
&.{ N(ArgType.Status), 0b0001, 0b1000000, N(Status.From), N(M1.BodySlam) },
|
|
1513
1527
|
buf[0..5],
|
|
1514
1528
|
);
|
|
1515
|
-
|
|
1529
|
+
writer.reset();
|
|
1516
1530
|
}
|
|
1517
1531
|
|
|
1518
1532
|
test "|-curestatus|" {
|
|
1519
1533
|
try log.curestatus(.{ p2.ident(6), gen1.Status.slp(7), .Message });
|
|
1520
1534
|
try expectLog1(&.{ N(ArgType.CureStatus), 0b1110, 0b111, N(CureStatus.Message) }, buf[0..4]);
|
|
1521
|
-
|
|
1535
|
+
writer.reset();
|
|
1522
1536
|
|
|
1523
1537
|
try log.curestatus(.{ p1.ident(2), gen1.Status.TOX, .Silent });
|
|
1524
1538
|
try expectLog1(&.{
|
|
@@ -1527,86 +1541,86 @@ test "|-curestatus|" {
|
|
|
1527
1541
|
0b10001000,
|
|
1528
1542
|
N(CureStatus.Silent),
|
|
1529
1543
|
}, buf[0..4]);
|
|
1530
|
-
|
|
1544
|
+
writer.reset();
|
|
1531
1545
|
}
|
|
1532
1546
|
|
|
1533
1547
|
test "|-boost|" {
|
|
1534
1548
|
try log.boost(.{ p2.ident(6), .Speed, 2 });
|
|
1535
1549
|
try expectLog1(&.{ N(ArgType.Boost), 0b1110, N(Boost.Speed), 8 }, buf[0..4]);
|
|
1536
|
-
|
|
1550
|
+
writer.reset();
|
|
1537
1551
|
|
|
1538
1552
|
try log.boost(.{ p1.ident(2), .Rage, 1 });
|
|
1539
1553
|
try expectLog1(&.{ N(ArgType.Boost), 0b0010, N(Boost.Rage), 7 }, buf[0..4]);
|
|
1540
|
-
|
|
1554
|
+
writer.reset();
|
|
1541
1555
|
|
|
1542
1556
|
try log.boost(.{ p2.ident(3), .Defense, -2 });
|
|
1543
1557
|
try expectLog1(&.{ N(ArgType.Boost), 0b1011, N(Boost.Defense), 4 }, buf[0..4]);
|
|
1544
|
-
|
|
1558
|
+
writer.reset();
|
|
1545
1559
|
}
|
|
1546
1560
|
|
|
1547
1561
|
test "|-clearallboost|" {
|
|
1548
1562
|
try log.clearallboost(.{});
|
|
1549
1563
|
try expectLog1(&.{N(ArgType.ClearAllBoost)}, buf[0..1]);
|
|
1550
|
-
|
|
1564
|
+
writer.reset();
|
|
1551
1565
|
}
|
|
1552
1566
|
|
|
1553
1567
|
test "|-fail|" {
|
|
1554
1568
|
try log.fail(.{ p2.ident(6), .None });
|
|
1555
1569
|
try expectLog1(&.{ N(ArgType.Fail), 0b1110, N(Fail.None) }, buf[0..3]);
|
|
1556
|
-
|
|
1570
|
+
writer.reset();
|
|
1557
1571
|
|
|
1558
1572
|
try log.fail(.{ p2.ident(6), .Sleep });
|
|
1559
1573
|
try expectLog1(&.{ N(ArgType.Fail), 0b1110, N(Fail.Sleep) }, buf[0..3]);
|
|
1560
|
-
|
|
1574
|
+
writer.reset();
|
|
1561
1575
|
|
|
1562
1576
|
try log.fail(.{ p2.ident(6), .Substitute });
|
|
1563
1577
|
try expectLog1(&.{ N(ArgType.Fail), 0b1110, N(Fail.Substitute) }, buf[0..3]);
|
|
1564
|
-
|
|
1578
|
+
writer.reset();
|
|
1565
1579
|
|
|
1566
1580
|
try log.fail(.{ p2.ident(6), .Weak });
|
|
1567
1581
|
try expectLog1(&.{ N(ArgType.Fail), 0b1110, N(Fail.Weak) }, buf[0..3]);
|
|
1568
|
-
|
|
1582
|
+
writer.reset();
|
|
1569
1583
|
}
|
|
1570
1584
|
|
|
1571
1585
|
test "|-miss|" {
|
|
1572
1586
|
try log.miss(.{p2.ident(4)});
|
|
1573
1587
|
try expectLog1(&.{ N(ArgType.Miss), 0b1100 }, buf[0..2]);
|
|
1574
|
-
|
|
1588
|
+
writer.reset();
|
|
1575
1589
|
}
|
|
1576
1590
|
test "|-hitcount|" {
|
|
1577
1591
|
try log.hitcount(.{ p2.ident(1), 5 });
|
|
1578
1592
|
try expectLog1(&.{ N(ArgType.HitCount), 0b1001, 5 }, buf[0..3]);
|
|
1579
|
-
|
|
1593
|
+
writer.reset();
|
|
1580
1594
|
}
|
|
1581
1595
|
|
|
1582
1596
|
test "|-prepare|" {
|
|
1583
1597
|
try log.prepare(.{ p2.ident(2), M1.Dig });
|
|
1584
1598
|
try expectLog1(&.{ N(ArgType.Prepare), 0b1010, N(M1.Dig) }, buf[0..3]);
|
|
1585
|
-
|
|
1599
|
+
writer.reset();
|
|
1586
1600
|
}
|
|
1587
1601
|
|
|
1588
1602
|
test "|-mustrecharge|" {
|
|
1589
1603
|
try log.mustrecharge(.{p1.ident(6)});
|
|
1590
1604
|
try expectLog1(&.{ N(ArgType.MustRecharge), 0b0110 }, buf[0..2]);
|
|
1591
|
-
|
|
1605
|
+
writer.reset();
|
|
1592
1606
|
}
|
|
1593
1607
|
|
|
1594
1608
|
test "|-activate|" {
|
|
1595
1609
|
try log.activate(.{ p1.ident(2), .Struggle });
|
|
1596
1610
|
try expectLog1(&.{ N(ArgType.Activate), 0b0010, N(Activate.Struggle) }, buf[0..3]);
|
|
1597
|
-
|
|
1611
|
+
writer.reset();
|
|
1598
1612
|
|
|
1599
1613
|
try log.activate(.{ p2.ident(4), .Mist });
|
|
1600
1614
|
try expectLog1(&.{ N(ArgType.Activate), 0b1100, N(Activate.Mist) }, buf[0..3]);
|
|
1601
|
-
|
|
1615
|
+
writer.reset();
|
|
1602
1616
|
|
|
1603
1617
|
try log.activate(.{ p2.ident(6), .Substitute });
|
|
1604
1618
|
try expectLog1(&.{ N(ArgType.Activate), 0b1110, N(Activate.Substitute) }, buf[0..3]);
|
|
1605
|
-
|
|
1619
|
+
writer.reset();
|
|
1606
1620
|
|
|
1607
1621
|
try log.activate(.{ p1.ident(2), .Splash });
|
|
1608
1622
|
try expectLog1(&.{ N(ArgType.Activate), 0b0010, N(Activate.Splash) }, buf[0..3]);
|
|
1609
|
-
|
|
1623
|
+
writer.reset();
|
|
1610
1624
|
|
|
1611
1625
|
try log.activate(.{ p1.ident(4), .SubstituteBlock, M2.Spite });
|
|
1612
1626
|
try expectLog1(&.{
|
|
@@ -1615,27 +1629,27 @@ test "|-activate|" {
|
|
|
1615
1629
|
N(Activate.SubstituteBlock),
|
|
1616
1630
|
N(M2.Spite),
|
|
1617
1631
|
}, buf[0..4]);
|
|
1618
|
-
|
|
1632
|
+
writer.reset();
|
|
1619
1633
|
|
|
1620
1634
|
try log.activate(.{ p1.ident(3), .Magnitude, 5 });
|
|
1621
1635
|
try expectLog1(&.{ N(ArgType.Activate), 0b0011, N(Activate.Magnitude), 5 }, buf[0..4]);
|
|
1622
|
-
|
|
1636
|
+
writer.reset();
|
|
1623
1637
|
}
|
|
1624
1638
|
|
|
1625
1639
|
test "|-fieldactivate|" {
|
|
1626
1640
|
try log.fieldactivate(.{});
|
|
1627
1641
|
try expectLog1(&.{N(ArgType.FieldActivate)}, buf[0..1]);
|
|
1628
|
-
|
|
1642
|
+
writer.reset();
|
|
1629
1643
|
}
|
|
1630
1644
|
|
|
1631
1645
|
test "|-start|" {
|
|
1632
1646
|
try log.start(.{ p2.ident(6), .Bide });
|
|
1633
1647
|
try expectLog1(&.{ N(ArgType.Start), 0b1110, N(Start.Bide) }, buf[0..3]);
|
|
1634
|
-
|
|
1648
|
+
writer.reset();
|
|
1635
1649
|
|
|
1636
1650
|
try log.start(.{ p1.ident(2), .ConfusionSilent });
|
|
1637
1651
|
try expectLog1(&.{ N(ArgType.Start), 0b0010, N(Start.ConfusionSilent) }, buf[0..3]);
|
|
1638
|
-
|
|
1652
|
+
writer.reset();
|
|
1639
1653
|
|
|
1640
1654
|
try log.start(.{
|
|
1641
1655
|
p2.ident(6),
|
|
@@ -1647,7 +1661,7 @@ test "|-start|" {
|
|
|
1647
1661
|
&.{ N(ArgType.Start), 0b1110, N(Start.TypeChange), 0b1000_1000, 0b1101 },
|
|
1648
1662
|
buf[0..5],
|
|
1649
1663
|
);
|
|
1650
|
-
|
|
1664
|
+
writer.reset();
|
|
1651
1665
|
|
|
1652
1666
|
try log.start(.{
|
|
1653
1667
|
p1.ident(2),
|
|
@@ -1659,65 +1673,65 @@ test "|-start|" {
|
|
|
1659
1673
|
&.{ N(ArgType.Start), 0b0010, N(Start.TypeChange), 0b0011_0110, 0b1100 },
|
|
1660
1674
|
buf[0..5],
|
|
1661
1675
|
);
|
|
1662
|
-
|
|
1676
|
+
writer.reset();
|
|
1663
1677
|
|
|
1664
1678
|
try log.start(.{ p1.ident(2), .Disable, M1.Surf });
|
|
1665
1679
|
try expectLog1(&.{ N(ArgType.Start), 0b0010, N(Start.Disable), N(M1.Surf) }, buf[0..4]);
|
|
1666
|
-
|
|
1680
|
+
writer.reset();
|
|
1667
1681
|
|
|
1668
1682
|
try log.start(.{ p1.ident(2), .Mimic, M1.Surf });
|
|
1669
1683
|
try expectLog1(&.{ N(ArgType.Start), 0b0010, N(Start.Mimic), N(M1.Surf) }, buf[0..4]);
|
|
1670
|
-
|
|
1684
|
+
writer.reset();
|
|
1671
1685
|
}
|
|
1672
1686
|
|
|
1673
1687
|
test "|-end|" {
|
|
1674
1688
|
try log.end(.{ p2.ident(6), .Bide });
|
|
1675
1689
|
try expectLog1(&.{ N(ArgType.End), 0b1110, N(End.Bide) }, buf[0..3]);
|
|
1676
|
-
|
|
1690
|
+
writer.reset();
|
|
1677
1691
|
|
|
1678
1692
|
try log.end(.{ p1.ident(2), .ConfusionSilent });
|
|
1679
1693
|
try expectLog1(&.{ N(ArgType.End), 0b0010, N(End.ConfusionSilent) }, buf[0..3]);
|
|
1680
|
-
|
|
1694
|
+
writer.reset();
|
|
1681
1695
|
}
|
|
1682
1696
|
|
|
1683
1697
|
test "|-ohko|" {
|
|
1684
1698
|
try log.ohko(.{});
|
|
1685
1699
|
try expectLog1(&.{N(ArgType.OHKO)}, buf[0..1]);
|
|
1686
|
-
|
|
1700
|
+
writer.reset();
|
|
1687
1701
|
}
|
|
1688
1702
|
|
|
1689
1703
|
test "|-crit|" {
|
|
1690
1704
|
try log.crit(.{p2.ident(5)});
|
|
1691
1705
|
try expectLog1(&.{ N(ArgType.Crit), 0b1101 }, buf[0..2]);
|
|
1692
|
-
|
|
1706
|
+
writer.reset();
|
|
1693
1707
|
}
|
|
1694
1708
|
|
|
1695
1709
|
test "|-supereffective|" {
|
|
1696
1710
|
try log.supereffective(.{p1.ident(1)});
|
|
1697
1711
|
try expectLog1(&.{ N(ArgType.SuperEffective), 0b0001 }, buf[0..2]);
|
|
1698
|
-
|
|
1712
|
+
writer.reset();
|
|
1699
1713
|
}
|
|
1700
1714
|
|
|
1701
1715
|
test "|-resisted|" {
|
|
1702
1716
|
try log.resisted(.{p2.ident(2)});
|
|
1703
1717
|
try expectLog1(&.{ N(ArgType.Resisted), 0b1010 }, buf[0..2]);
|
|
1704
|
-
|
|
1718
|
+
writer.reset();
|
|
1705
1719
|
}
|
|
1706
1720
|
|
|
1707
1721
|
test "|-immune|" {
|
|
1708
1722
|
try log.immune(.{ p1.ident(3), .None });
|
|
1709
1723
|
try expectLog1(&.{ N(ArgType.Immune), 0b0011, N(Immune.None) }, buf[0..3]);
|
|
1710
|
-
|
|
1724
|
+
writer.reset();
|
|
1711
1725
|
|
|
1712
1726
|
try log.immune(.{ p2.ident(2), .OHKO });
|
|
1713
1727
|
try expectLog1(&.{ N(ArgType.Immune), 0b1010, N(Immune.OHKO) }, buf[0..3]);
|
|
1714
|
-
|
|
1728
|
+
writer.reset();
|
|
1715
1729
|
}
|
|
1716
1730
|
|
|
1717
1731
|
test "|-transform|" {
|
|
1718
1732
|
try log.transform(.{ p2.ident(4), p1.ident(5) });
|
|
1719
1733
|
try expectLog1(&.{ N(ArgType.Transform), 0b1100, 0b0101 }, buf[0..3]);
|
|
1720
|
-
|
|
1734
|
+
writer.reset();
|
|
1721
1735
|
}
|
|
1722
1736
|
|
|
1723
1737
|
test "|drag|" {
|
|
@@ -1739,29 +1753,29 @@ test "|drag|" {
|
|
|
1739
1753
|
.little => .{ 200, 0, 144, 1, par },
|
|
1740
1754
|
});
|
|
1741
1755
|
try expectLog2(expected, buf[0..10]);
|
|
1742
|
-
|
|
1756
|
+
writer.reset();
|
|
1743
1757
|
}
|
|
1744
1758
|
|
|
1745
1759
|
test "|-item|" {
|
|
1746
1760
|
try log.item(.{ p2.ident(2), I2.GoldBerry, p1.ident(4) });
|
|
1747
1761
|
try expectLog2(&.{ N(ArgType.Item), 0b1010, N(I2.GoldBerry), 0b0100 }, buf[0..4]);
|
|
1748
|
-
|
|
1762
|
+
writer.reset();
|
|
1749
1763
|
}
|
|
1750
1764
|
|
|
1751
1765
|
test "|-enditem|" {
|
|
1752
1766
|
try log.enditem(.{ p1.ident(1), I2.BerserkGene, .None });
|
|
1753
1767
|
try expectLog2(&.{ N(ArgType.EndItem), 0b0001, N(I2.BerserkGene), N(EndItem.None) }, buf[0..4]);
|
|
1754
|
-
|
|
1768
|
+
writer.reset();
|
|
1755
1769
|
|
|
1756
1770
|
try log.enditem(.{ p2.ident(4), I2.PRZCureBerry, .Eat });
|
|
1757
1771
|
try expectLog2(&.{ N(ArgType.EndItem), 0b1100, N(I2.PRZCureBerry), N(EndItem.Eat) }, buf[0..4]);
|
|
1758
|
-
|
|
1772
|
+
writer.reset();
|
|
1759
1773
|
}
|
|
1760
1774
|
|
|
1761
1775
|
test "|-cureteam|" {
|
|
1762
1776
|
try log.cureteam(.{p2.ident(5)});
|
|
1763
1777
|
try expectLog2(&.{ N(ArgType.CureTeam), 0b1101 }, buf[0..2]);
|
|
1764
|
-
|
|
1778
|
+
writer.reset();
|
|
1765
1779
|
}
|
|
1766
1780
|
|
|
1767
1781
|
test "|-sethp|" {
|
|
@@ -1773,35 +1787,35 @@ test "|-sethp|" {
|
|
|
1773
1787
|
.little => &.{ N(ArgType.SetHP), 0b1010, 100, 2, 201, 2, 0, N(SetHP.Silent) },
|
|
1774
1788
|
};
|
|
1775
1789
|
try expectLog2(expected, buf[0..8]);
|
|
1776
|
-
|
|
1790
|
+
writer.reset();
|
|
1777
1791
|
}
|
|
1778
1792
|
|
|
1779
1793
|
test "|-setboost|" {
|
|
1780
1794
|
try log.setboost(.{ p2.ident(6), 6 });
|
|
1781
1795
|
try expectLog2(&.{ N(ArgType.SetBoost), 0b1110, 12 }, buf[0..3]);
|
|
1782
|
-
|
|
1796
|
+
writer.reset();
|
|
1783
1797
|
|
|
1784
1798
|
try log.setboost(.{ p2.ident(3), 2 });
|
|
1785
1799
|
try expectLog2(&.{ N(ArgType.SetBoost), 0b1011, 8 }, buf[0..3]);
|
|
1786
|
-
|
|
1800
|
+
writer.reset();
|
|
1787
1801
|
}
|
|
1788
1802
|
|
|
1789
1803
|
test "|-copyboost|" {
|
|
1790
1804
|
try log.copyboost(.{ p2.ident(3), p1.ident(6) });
|
|
1791
1805
|
try expectLog2(&.{ N(ArgType.CopyBoost), 0b1011, 0b0110 }, buf[0..3]);
|
|
1792
|
-
|
|
1806
|
+
writer.reset();
|
|
1793
1807
|
}
|
|
1794
1808
|
|
|
1795
1809
|
test "|-sidestart|" {
|
|
1796
1810
|
try log.sidestart(.{ .P2, .Reflect });
|
|
1797
1811
|
try expectLog2(&.{ N(ArgType.SideStart), 1, N(Side.Reflect) }, buf[0..3]);
|
|
1798
|
-
|
|
1812
|
+
writer.reset();
|
|
1799
1813
|
}
|
|
1800
1814
|
|
|
1801
1815
|
test "|-sideend|" {
|
|
1802
1816
|
try log.sideend(.{ .P2, .LightScreen });
|
|
1803
1817
|
try expectLog2(&.{ N(ArgType.SideEnd), 1, N(Side.LightScreen) }, buf[0..3]);
|
|
1804
|
-
|
|
1818
|
+
writer.reset();
|
|
1805
1819
|
|
|
1806
1820
|
try log.sideend(.{ .P1, .Spikes, p1.ident(3) });
|
|
1807
1821
|
try expectLog2(&.{
|
|
@@ -1810,27 +1824,27 @@ test "|-sideend|" {
|
|
|
1810
1824
|
N(Side.Spikes),
|
|
1811
1825
|
0b0011,
|
|
1812
1826
|
}, buf[0..4]);
|
|
1813
|
-
|
|
1827
|
+
writer.reset();
|
|
1814
1828
|
}
|
|
1815
1829
|
|
|
1816
1830
|
test "|-singlemove|" {
|
|
1817
1831
|
try log.singlemove(.{ p2.ident(2), M2.DestinyBond });
|
|
1818
1832
|
try expectLog2(&.{ N(ArgType.SingleMove), 0b1010, N(M2.DestinyBond) }, buf[0..3]);
|
|
1819
|
-
|
|
1833
|
+
writer.reset();
|
|
1820
1834
|
}
|
|
1821
1835
|
|
|
1822
1836
|
test "|-singleturn|" {
|
|
1823
1837
|
try log.singleturn(.{ p1.ident(3), M2.Protect });
|
|
1824
1838
|
try expectLog2(&.{ N(ArgType.SingleTurn), 0b0011, N(M2.Protect) }, buf[0..3]);
|
|
1825
|
-
|
|
1839
|
+
writer.reset();
|
|
1826
1840
|
}
|
|
1827
1841
|
|
|
1828
1842
|
test "|-weather|" {
|
|
1829
1843
|
try log.weather(.{ W2.Rain, .Upkeep });
|
|
1830
1844
|
try expectLog2(&.{ N(ArgType.Weather), N(W2.Rain), N(Weather.Upkeep) }, buf[0..3]);
|
|
1831
|
-
|
|
1845
|
+
writer.reset();
|
|
1832
1846
|
|
|
1833
1847
|
try log.weather(.{ W2.None, .None });
|
|
1834
1848
|
try expectLog2(&.{ N(ArgType.Weather), N(W2.None), N(Weather.None) }, buf[0..3]);
|
|
1835
|
-
|
|
1849
|
+
writer.reset();
|
|
1836
1850
|
}
|