sc: generic list of named version includes
[sheet.git] / sc.plp
diff --git a/sc.plp b/sc.plp
index d0b269144c5df9db3712d882d69389465b1403d6..78eebc43bc8fa648c3f768ba8a4b818d6e16a895 100644 (file)
--- a/sc.plp
+++ b/sc.plp
@@ -1,24 +1,27 @@
 <(common.inc.plp)><:
 use List::Util qw(max sum);
 
-my %scver = (
-       id => 'bw',
-       name => 'Brood War',
-       title => 'starcraft',
-       game => 'StarCraft',
-       major => 1,
-);
-
-if ($Request and $Request eq '2') {
-       %scver = (
-               id => 'hots',
+my %scvers = (
+       bw => {
+               name => 'Brood War',
+               title => 'starcraft',
+               game => 'StarCraft',
+               major => 1,
+       },
+       hots => {
                name => 'Heart of the Swarm',
                title => 'starcraft2',
                game => 'StarCraft II',
                major => 2,
-       );
-}
-my $datafile = "sc-units-$scver{id}.inc.pl";
+       },
+);
+
+$Request ||= 'bw';
+$Request = 'hots' if $Request eq '2';
+my %scver = %{ $scvers{$Request} }
+       or Abort("Requested version $Request not available", '404 unknown');
+
+my $datafile = "sc-units-$Request.inc.pl";
 
 Html({
        title => "$scver{title} unit cheat sheet",
@@ -31,7 +34,7 @@ Html({
        keywords => [
                qw'
                starcraft game unit statistics stats comparison table sheet cheat
-               reference software attributes properties
+               reference software attributes properties patch attribute multiplayer
                ',
                $scver{major} < 2 ? qw' bw broodwar brood war ' : qw' starcraft2 hots ',
        ],
@@ -49,8 +52,8 @@ my $patch = shift @{$units}
 
 say "<p>Unit properties as seen or measured in $scver{name}\n$patch.";
 say "Also see the $_ table." for join(', ',
-       (showlink('StarCraft 2: HotS', '/sc/2'))    x ($scver{major} < 2),
-       (showlink('original SC: Brood War', '/sc')) x ($scver{major} > 1),
+       (showlink('StarCraft 2: HotS', '/sc/hots'))    x ($Request ne 'hots'),
+       (showlink('original SC: Brood War', '/sc/bw')) x ($Request ne 'bw'),
 );
 say "</p>\n";
 
@@ -255,9 +258,13 @@ sub showrangeint {
                return (
                        '<td class="val min">' . ($_->{min} // ''),
                        '<td class="val gas">' . ($_->{gas} || ''),
-                       !defined $_->{build} ? '<td>' : sprintf('<td class="val time">%s%.0f',
-                               !!$_->{base} && '<span class="unit-composed">+</span>',
-                               $_->{build} || '0',
+                       !defined $_->{build} ? '<td>' : sprintf('<td class="val time"%s>%s%.0f',
+                               defined $_->{warp} && qq(title="$_->{build} without warpgate"),
+                               !!$_->{base} && sprintf(
+                                       '<span class="unit-composed" title="%s">+</span>',
+                                       'from '.join('+', @{ $_->{base} }),
+                               ),
+                               $_->{warp} // $_->{build} || '0',
                        ),
                        sprintf('<td class="unit unit-%s" title="%4$s%3$s">%s',
                                $_->            {cargo} < 0 ? ('supply',           T => 'transport') :