"verbose|v!" => \$SHOWWARN,
);
+use constant { APM_FIRSTFRAME => 80 / .042 };
+
{
package Data::StarCraft::Replay;
0x18 => ["cancel"],
0x19 => ["cancel hatch"],
0x1A => ["stop", 1],
+# 0x1B => ["move-thing??"], # tim: after hotkey (unit, reaver??) select; soon after reselected and moved
0x1E => ["return cargo", 1],
0x1F => ["train", 2, \%unit],
0x20 => ["cancel train", 2], # == 254
}
}
-printf "duration: %s\n", showtime($map->[-1][0]);
-
my %cmdmacro = map {$_ => 1} (
(map {$_, "cancel $_"}
qw/train build hatch research upgrade arm/,
my %stats; # player => count
for (@$map) {
$stats{$_->[1]}{actions}++;
- $stats{$_->[1]}{gameactions}++ if $_->[0] > 80 / .042;
+ $stats{$_->[1]}{gameactions}++ if $_->[0] >= APM_FIRSTFRAME;
$stats{$_->[1]}{last} = $_->[0] if $_->[2] eq "part";
$stats{$_->[1]}{$cmdmacro{$_->[2]} ? "macro" : "micro"}++;
$stats{$_->[1]}{count}{$_->[2]}++;
my $row = $stats{$player};
$row->{last} ||= $map->[-1][0];
# printf("%d:%6d actions (%3d micro,%4d macro);%4d APM\n",
- printf("%d:%6d actions;%4d APM\n",
- $player,
- $row->{actions},
+ printf("%d:%6d actions in%7d frames (%s) = %d APM\n",
+ $player, $row->{actions}, $row->{last},
+ showtime($row->{last}),
# $row->{micro} / $row->{last} * 60 / .042 * 1.05,
# $row->{macro} / $row->{last} * 60 / .042 * 1.05,
- $row->{gameactions} / $row->{last} * 60 / .042 * 1.042,
- # $row->{gameactions} / $map->[-1][0] * 60 / .042,
+ $row->{gameactions} / ($row->{last} - APM_FIRSTFRAME) * 60 / .042,
);
if (0) {