X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/2645cbf6f7364951ad8dc72649361844181c2b20..v1.14-7-ge90c9ada43:/sc.plp?ds=sidebyside
diff --git a/sc.plp b/sc.plp
index 19149cf..e784cbd 100644
--- a/sc.plp
+++ b/sc.plp
@@ -20,18 +20,25 @@ my %scvers = (
game => 'StarCraft II LotV',
major => 2,
},
+ index => 'bw',
+ 1 => 'bw',
+ 2 => 'lotv',
);
-$Request ||= 'bw';
-$Request = 'lotv' if $Request eq '2';
-my %scver = %{ $scvers{$Request} // {} }
+my $requestver = $scvers{$Request ||= 'index'}
or Html(), Abort("Requested version $Request
not available", '404 request not found');
-my $datafile = "sc-units-$Request.inc.pl";
+if (ref $requestver ne 'HASH') {
+ $header{Location} = "/sc/$requestver";
+ Abort("Canonical URL for $Request is at $requestver", '302 subpage alias');
+}
+
+my %scver = %{$requestver};
+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}"
@@ -47,13 +54,12 @@ Html({
],
stylesheet => [qw( light dark )],
raw => '',
- data => [$datafile],
+ data => ["$datafile.inc.pl"],
});
say "
$scver{game} units
\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);
@@ -172,15 +178,16 @@ sub showrangeint {
if $attack->{type} eq 'implosive';
if (my @bonus = sort grep { !/^-/ } keys %{ $attack->{bonus} }) {
$out .= sprintf('≥',
- (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}->{$_},
@@ -189,8 +196,8 @@ sub showrangeint {
),
$_,
),
- )} @bonus),
- );
+ ),
+ ) for @bonus;
}
$out .= 'â¢'
if $attack->{type} eq 'projectile';
@@ -244,9 +251,12 @@ sub showrangeint {
my $specials = $row->{special} or return '';
return join ' ', map {
sprintf '%s',
- $_->{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
@@ -271,7 +281,7 @@ sub showrangeint {
$_->{transform},
) :
!defined $_->{build} ? '' : sprintf(' | %s%.0f',
- defined $_->{warp} && qq(title="$_->{build} without warpgate"),
+ defined $_->{warp} && sprintf(' title="%.0f without warpgate"', $_->{build}),
!!$_->{base} && sprintf(
'+',
'from '.join('+', @{ $_->{base} }),
@@ -349,12 +359,11 @@ sub showrangeint {
$_->{attr}->{jump}
&& qq'â',
' | ' . showmagic($_),
- !$_->{attack}->[1] ? () : (
- ' | | ', showattack($_, 1), ' | '
- ),
- !$_->{attack}->[2] ? () : (
- ' |
---|
| ', showattack($_, 2), ' | '
- ),
+ (map {(
+ ' |
---|
| | ',
+ showattack($row, $_),
+ ' | ',
+ )} 1 .. $#{ $_->{attack} }),
"\n"
);
}
@@ -393,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)
|
---|