X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/72b206b172f32b65161b0377ea01fb4e7afa4df3..1de61e5745ecf3dd1a41e1e932bae2f7568353a4:/sc.plp diff --git a/sc.plp b/sc.plp index 8a63e8c..55dbd09 100644 --- a/sc.plp +++ b/sc.plp @@ -1,9 +1,10 @@ <(common.inc.plp)><: -my $datafile = 'sc-units.inc.pl'; +my $scver = 'bw'; if ($ENV{PATH_INFO} and $ENV{PATH_INFO} eq '/2') { - $datafile = 'sc2-units.inc.pl'; + my $scver = 'hots'; } +my $datafile = "sc-units-$scver.inc.pl"; Html({ title => 'starcraft unit cheat sheet', @@ -18,6 +19,7 @@ Html({ reference software attributes properties '], stylesheet => [qw'light'], + raw => '', data => [$datafile], }); @@ -29,126 +31,6 @@ Unit properties as seen or measured in Brood War version≥1.08.

- - <: sub coltoggle { my ($name, $id) = @_; @@ -178,6 +60,12 @@ sub coltoggle { <: sub showrange { + my ($min, $max) = @_; + $_ = int($_ + .5) for $min, $max; # round halves up + return $min == $max ? $min : "$min-$max"; +} + +sub showval { my ($row, @elements) = @_; my ($min, $max); @@ -212,9 +100,7 @@ sub showrange { $min /= 4; } }} - $_ = int($_ + .5) for $min, $max; # round halves up - - return $min == $max ? $min : "$min-$max"; + return showrange($min, $max); } sub showattack { @@ -239,7 +125,7 @@ sub showrange { } $tagbase .= '">'; - my $out = showrange($row, 'attack', $area, 'damage'); + my $out = showval($row, 'attack', $area, 'damage'); $out .= '+' if $attack->{splash}; $attack->{dps} = $attack->{cooldown} && [ map { 24 * $_ / $attack->{cooldown} * ($attack->{count} // 1) } @@ -247,7 +133,7 @@ sub showrange { $attack->{damage} #TODO: upgrade (zergling) ]; - $out .= '' . showrange($row, 'attack', $area, 'dps'); + $out .= '' . showval($row, 'attack', $area, 'dps'); return $tagbase . $out; } @@ -301,15 +187,15 @@ sub showrange { '' . ( $_->{shield} ? sprintf('%.0f%%', 100 * $_->{shield} / $_->{hp}) : ' ' ), - '' . showrange($_, 'armor'), + '' . showval($_, 'armor'), showattack($_, 'ground'), showattack($_, 'air'), - '' . showrange($_, 'attack', 'range'), + '' . showval($_, 'attack', 'range'), '' . sprintf( $_->{detect} ? '%s' : '%s', - showrange($_, 'sight') + showval($_, 'sight') ), - '' . showrange($_, 'speed'), + '' . showval($_, 'speed'), '' . showmagic($_), "\n" ); @@ -317,8 +203,9 @@ sub showrange { my $units = do $datafile; die "Cannot open unit data: $_\n" for $@ || $! || (); - my $grouped = !exists $get{order}; + my $grouped = 1; # race headers if (exists $get{order}) { + $grouped = 0; $get{order} ||= ''; if ($get{order} eq 'size') { $_->{order} = $_->{unit}*8 + $_->{suit} + $_->{hp}/512 + $_->{min}/8192 for @$units; @@ -330,25 +217,32 @@ sub showrange { $units->[$_]->{order} = $_ for 0 .. $#$units; } } - my @rows = $grouped ? @$units : sort {$a->{order} <=> $b->{order}} @$units; + my @rows = @{$units}; + @rows = sort {$a->{order} <=> $b->{order}} @rows unless $grouped; my ($race, $cat) = ('', ''); for (@rows) { - $race = $_->{race}, - printf '

%s

'."\n", $race, ucfirst $race - if $grouped and $race ne $_->{race}; - $_->{cat} = $_->{race} if not $grouped; + if ($grouped) { + printf '

%s

'."\n", + $race = $_->{race}, ucfirst $race + unless $race eq $_->{race}; + } + else { + $_->{cat} = $_->{race}; + } + print( '', - sprintf('%s', $cat ne $_->{cat} ? ('h', $cat = $_->{cat}) : ('d', ' ')), - '' . $_->{name}, + '', $cat ne $_->{cat} && ($cat = $_->{cat}), + '', $_->{name}, showunitcols($_), ); - for my $alt (grep { $_->{alt} } @{ $_->{special} }) { + for my $subrow (@{ $_->{special} }) { + $subrow->{alt} or next; print( - '' . $alt->{alt}, - showunitcols($alt), + '', $subrow->{alt}, + showunitcols($subrow), ); } }