X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/f8b9a7861ff42de0f09e6ed1b80b7f1783dddf45..1b57f59204dcd2185286dffc630a9f88bf1f55d9:/sc.plp diff --git a/sc.plp b/sc.plp index c367da0..d8e89de 100644 --- a/sc.plp +++ b/sc.plp @@ -114,24 +114,29 @@ sub coltoggle { sub showrange { my ($min, $max) = @_; return '' if not defined $min; - $_ &&= int($_ + .5) for $min, $max; # round halves up return $min || '-' if !$max or $min == $max; return "$min-$max"; } +sub showrangeint { + $_ &&= int($_ + .5) for @_; # round halves up + return showrange(@_); +} + sub showcost { my ($row, $unit) = @_; - my $minmult = 100 / $unit->{capacity}; # cost multiplier - my $maxmult = $unit->{upgraded}->{capacity} && - 100 / $unit->{upgraded}->{capacity}; - return join(' ', - sprintf('cost %s%%', - showrange($row->{cost} * $minmult, $row->{cost} * $maxmult), + sprintf('cost %s%%', join '-', + map { $_ && sprintf '%.0f', 100 * $row->{cost} / $_ } grep { defined $_ } + $unit->{energy}, + $unit->{upgraded}->{energy}, + $unit->{capacity}, + $unit->{upgraded}->{capacity}, ), - !defined $row->{maint} ? () : sprintf('+%.1f%s%%/s', - $row->{maint} * $minmult, - !!$maxmult && sprintf('-%.1f', $row->{maint} * $maxmult), + !defined $row->{maint} ? () : sprintf('+%s%%/s', join '-', + map { sprintf '%.1f', 100 * $row->{maint} / $_ } grep $_, + $unit->{capacity}, + $unit->{upgraded}->{capacity}, ), ); } @@ -150,7 +155,7 @@ sub showrange { $out .= sprintf '¤ ', showcost($attack, $row) if $attack->{cost}; $out .= sprintf('%s× ', - showrange($attack->{count}, $upattack->{count}), + showrangeint($attack->{count}, $upattack->{count}), ) if $attack->{count} > 1; $out .= '*' if $attack->{type} eq 'explosive'; @@ -168,7 +173,7 @@ sub showrange { } join '_', @bonus), join(', ', map {( sprintf('+%s vs %s', - showrange( + showrangeint( $attack->{bonus}->{$_}, $attack->{bonus}->{$_} + $attack->{bonus}->{"-$_"} * 3, ), @@ -181,7 +186,7 @@ sub showrange { if $attack->{type} eq 'projectile'; $out .= sprintf '', $attack->{name} if $attack->{name}; - $out .= showrange($damage, $maxdamage); + $out .= showrangeint($damage, $maxdamage); $out .= '' if $attack->{name}; $out .= sprintf('%s', $attack->{splash} eq 'line' ? ('linear', '+') : ('splash', '⁜') @@ -190,7 +195,7 @@ sub showrange { $out .= ''; if ($attack->{dps}) { # precalculated dps, do not touch - $out .= showrange($attack->{dps}->[0], + $out .= showrangeint($attack->{dps}->[0], $upattack->{dps}->[-1] // $attack->{dps}->[-1] ); } @@ -212,14 +217,14 @@ sub showrange { } $maxdamage *= ($upattack->{count} // $attack->{count} // 1) / ($upattack->{cooldown} // $attack->{cooldown}); - $out .= showrange($damage, $maxdamage); + $out .= showrangeint($damage, $maxdamage); } $out .= '' . '▽' x !!($attack->{anti} & 1); $out .= '' . '△' x !!($attack->{anti} & 2); $out .= '' . - showrange($attack->{range}, $upattack->{range}); + showrangeint($attack->{range}, $upattack->{range}); return $out; } @@ -302,14 +307,17 @@ sub showrange { 100 * $_->{shield} / $_->{hp} ) : '' . - showrange($_->{armor}, $_->{upgraded}->{armor}), + showrangeint($_->{armor}, $_->{upgraded}->{armor}), showattack($_, 0), '' . sprintf( $_->{detect} ? '%s' : '%s', - showrange($_->{sight}, $_->{upgraded}->{sight}) + showrangeint($_->{sight}, $_->{upgraded}->{sight}) ), '' . - showrange($_->{speed}, $_->{upgraded}->{speed}), + showrange( + map { $_ && sprintf '%.1f', $_ } + $_->{speed}, $_->{upgraded}->{speed} + ), $_->{attr}->{jump} && qq'↕', '' . showmagic($_), @@ -451,7 +459,7 @@ if ($scver{major} > 1) {
targets ▽ ground and/or △ air
range -
maximum range of weapon (note siege tank also has a minimum range) +
maximum range of weapon (note Sieged Tank also has a minimum range)
sight
range in which the unit detects other units
emphasis indicates ability to detect cloaked units @@ -462,7 +470,7 @@ if ($scver{major} > 1) {
passive abilities are always enabled
hover for description
range is maximum range required to activate -
cost is percentage of total energy lost +
cost is energy loss percentage on spawn and when fully charged