screp: fix apm (ignore first 1'20 correctly)
[perl/schtarr.git] / screp
diff --git a/screp b/screp
index 10a2554826707ef615ef04465ce76b808b43c8c2..0b35ac0d00c709010a07dc7017f1de7a7103df8a 100755 (executable)
--- a/screp
+++ b/screp
@@ -10,6 +10,8 @@ GetOptions(
        "verbose|v!" => \$SHOWWARN,
 );
 
+use constant { APM_FIRSTFRAME => 80 / .042 };
+
 {
 
 package Data::StarCraft::Replay;
@@ -475,8 +477,6 @@ if ($SHOWWARN) {
        }
 }
 
-printf "duration: %s\n", showtime($map->[-1][0]);
-
 my %cmdmacro = map {$_ => 1} (
        (map {$_, "cancel $_"}
                qw/train build hatch research upgrade arm/,
@@ -488,7 +488,7 @@ my %cmdmacro = map {$_ => 1} (
 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]}++;
@@ -498,13 +498,12 @@ for my $player (sort keys %stats) {
        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) {