X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/80a615f8414664e34d48d6ffc1263943ae6fbf73..0b686d7436dbdb50f0bf8547f845af6bc334a9e4:/sc.plp?ds=sidebyside diff --git a/sc.plp b/sc.plp index 44940e5..d6ccaf6 100644 --- a/sc.plp +++ b/sc.plp @@ -192,16 +192,18 @@ sub showrange { } } - if ($elements[0] eq 'attack' and $elements[1] ne 'range' and $elements[2] eq 'cmp') {{ - my $type = $row->{$elements[0]}->{$elements[1]}->{type} or next; + if ($elements[0] eq 'attack' and $elements[1] ne 'range' and $elements[2] eq 'dps') {{ + my $attack = $row->{ $elements[0] }->{ $elements[1] }; + ref $attack or $attack = $row->{ $elements[0] }->{$attack}; # follow + my $type = $attack->{type} or next; if ($type eq 'explosive') { $min /= 2; } elsif ($type eq 'implosive') { $min /= 4; } - $min = int($min + .5); # round halves up }} + $_ = int($_ + .5) for $min, $max; # round halves up return $min == $max ? $min : "$min-$max"; } @@ -209,6 +211,11 @@ sub showrange { sub showattack { my ($row, $area) = @_; local $_ = $row->{attack}->{$area}; + if (not ref $_) { + # reference to another area + $area = $_; + $_ = $row->{attack}->{$area}; + } return '' unless $_; @@ -225,7 +232,7 @@ sub showrange { my $out = showrange($row, 'attack', $area, 'damage'); $out .= '+' if $_->{splash}; - $out .= '' . showrange($row, 'attack', $area, 'cmp'); + $out .= '' . showrange($row, 'attack', $area, 'dps'); return $tagbase . $out; } @@ -252,7 +259,7 @@ sub showrange { if (exists $get{order}) { $get{order} ||= ''; if ($get{order} eq 'size') { - $_->{order} = $_->{unit}*8 + $_->{size} + $_->{hp}/512 + $_->{min}/8192 for @$units; + $_->{order} = $_->{unit}*8 + $_->{suit} + $_->{hp}/512 + $_->{min}/8192 for @$units; } elsif ($get{order} eq 'cost') { $_->{order} = $_->{gas}*1.5 + $_->{min} + $_->{unit}/8 + $_->{build}/256/8 for @$units; @@ -269,7 +276,8 @@ sub showrange { printf '

%s

'."\n", $race, ucfirst $race if $grouped and $race ne $_->{race}; $_->{cat} = $_->{race} if not $grouped; - my $sizechar = [qw/? s m l/]->[$_->{size}]; + $_->{hp} += $_->{shield}; + my $suitchar = [qw/? s m l/]->[$_->{suit}]; print( '', sprintf('%s', $cat ne $_->{cat} ? ('h', $cat = $_->{cat}) : ('d', ' ')), @@ -280,7 +288,7 @@ sub showrange { !!$_->{base} && '+', $_->{build} || '0', ), - sprintf('%s', $sizechar, ucfirst $sizechar), + sprintf('%s', $suitchar, ucfirst $suitchar), '' . join('', $_->{unit} ? $_->{unit} == .5 ? '½' : $_->{unit} : ' ', defined $_->{organic} && sprintf( @@ -291,7 +299,9 @@ sub showrange { ), ), '' . $_->{hp}, - '' . ($_->{shield} ? $_->{shield}.'%' : ' '), + '' . ( + $_->{shield} ? sprintf('%.0f%%', 100 * $_->{shield} / $_->{hp}) : ' ' + ), '' . showrange($_, 'armor'), showattack($_, 'ground'), showattack($_, 'air'),