index: release v1.18 with only altgr index linked
[sheet.git] / sc.plp
diff --git a/sc.plp b/sc.plp
index b3c27fc6c8705c02786aa3bba48350b380af8e5f..e784cbdd6dbe6a67886bf98e5beb85c92f3c6463 100644 (file)
--- a/sc.plp
+++ b/sc.plp
@@ -29,16 +29,16 @@ my $requestver = $scvers{$Request ||= 'index'}
        or Html(), Abort("Requested version <q>$Request</q> not available", '404 request not found');
 
 if (ref $requestver ne 'HASH') {
-       $header{Location} = $requestver;
+       $header{Location} = "/sc/$requestver";
        Abort("Canonical URL for $Request is at $requestver", '302 subpage alias');
 }
 
 my %scver = %{$requestver};
-my $datafile = "sc-units-$Request.inc.pl";
+my $datafile = "sc-units-$Request";
 
 Html({
        title => "$scver{title} unit cheat sheet",
-       version => '1.2',
+       version => '1.4',
        description => [
                "Reference of $scver{game} unit properties,"
                . " comparing various statistics of all the units in $scver{name}"
@@ -54,13 +54,12 @@ Html({
        ],
        stylesheet => [qw( light dark )],
        raw => '<link rel="stylesheet" type="text/css" media="all" href="/sc.css?1.2">',
-       data => [$datafile],
+       data => ["$datafile.inc.pl"],
 });
 
 say "<h1>$scver{game} units</h1>\n";
 
-my $units = do $datafile;
-Abort("Cannot open unit data", 501, $_) for $@ || $! || ();
+my $units = Data($datafile);
 my $patch = shift @{$units}
        or Abort("Cannot open unit data: metadata not found", 501);
 
@@ -179,15 +178,16 @@ sub showrangeint {
                        if $attack->{type} eq 'implosive';
        if (my @bonus = sort grep { !/^-/ } keys %{ $attack->{bonus} }) {
                $out .= sprintf('<span class="%s" title="%s">&ge;</span>',
-                       (map {
+                       (
                                $_ eq 'light' ? 'unit-s' :
                                $_ eq 'armored' ? 'unit-l' :
                                $_ eq 'organic' ? 'unit-o' :
                                $_ eq 'massive' ? 'unit-h' :
                                $_ eq 'shields' ? 'unit-shield' :
+                               $_ eq 'structure' ? 'unit-x' :
                                '',
-                       } join '_', @bonus),
-                       join(', ', map {(
+                       ),
+                       (
                                sprintf('+%s vs %s',
                                        showrangeint(
                                                $attack->{bonus}->{$_},
@@ -196,8 +196,8 @@ sub showrangeint {
                                        ),
                                        $_,
                                ),
-                       )} @bonus),
-               );
+                       ),
+               ) for @bonus;
        }
                $out .= '<span class="unit-pdd" title="projectile">•</span>'
                        if $attack->{type} eq 'projectile';
@@ -251,9 +251,12 @@ sub showrangeint {
                my $specials = $row->{special} or return '';
                return join ' ', map {
                        sprintf '<span%s title="%s">%s</span>',
-                               $_->{duration} < 0 && ' class="magic-perma"',
                                join('',
-                                       $_->{name},
+                                       $_->{duration} < 0 && ' class="magic-perma"',
+                                       $_->{detect} && ' class="unit-detect"',
+                               ),
+                               join('',
+                                       $_->{name} // $_->{alt},
                                        $_->{desc} ? ": $_->{desc}" : '',
                                        (map { $_ && " ($_)" } join ', ',
                                                #TODO: apply upgrades
@@ -278,7 +281,7 @@ sub showrangeint {
                                $_->{transform},
                        ) :
                        !defined $_->{build} ? '<td>' : sprintf('<td class="val time"%s>%s%.0f',
-                               defined $_->{warp} && qq(title="$_->{build} without warpgate"),
+                               defined $_->{warp} && sprintf(' title="%.0f without warpgate"', $_->{build}),
                                !!$_->{base} && sprintf(
                                        '<span class="unit-composed" title="%s">+</span>',
                                        'from '.join('+', @{ $_->{base} }),
@@ -356,12 +359,11 @@ sub showrangeint {
                        $_->{attr}->{jump}
                                && qq'<span class="unit unit-jump" title="$_->{attr}->{jump}">↕</span>',
                        '<td class="unit-magic">' . showmagic($_),
-                       !$_->{attack}->[1] ? () : (
-                               '<tr><th class="cat" colspan="2"><td colspan=10>', showattack($_, 1), '<td colspan=3>'
-                       ),
-                       !$_->{attack}->[2] ? () : (
-                               '<tr><th class="cat" colspan="2"><td colspan=10>', showattack($_, 2), '<td colspan=3>'
-                       ),
+                       (map {(
+                               '<tr class="sub"><th class="cat"><td><td colspan=10>',
+                               showattack($row, $_),
+                               '<td colspan=3>',
+                       )} 1 .. $#{ $_->{attack} }),
                        "\n"
                );
        }
@@ -400,7 +402,7 @@ sub showrangeint {
                        ) for @rows;
                }
                elsif ($get{order} eq 'attack') {
-                       $_->{order} = $_->{hp} / 1024 + $_->{shield} / 1008 + max(
+                       $_->{order} = $_->{hp} / 16384 + max(
                                map {
                                        ($_->{dps} ? $_->{dps}->[-1] :
                                                ($_->{damage} + $_->{upgrade} * 3)