X-Git-Url: http://git.shiar.net/sheet.git/blobdiff_plain/ce2e637541f303d2967f7d424c3ea8240e579172..e0cedf658d40795d202f5d0ca54938ee2312a4ac:/sc.plp?ds=sidebyside
diff --git a/sc.plp b/sc.plp
index d1c6fc8..723a633 100644
--- a/sc.plp
+++ b/sc.plp
@@ -114,17 +114,30 @@ sub coltoggle {
sub showrange {
my ($min, $max) = @_;
return '' if not defined $min;
- $_ &&= int($_ + .5) for $min, $max; # round halves up
- return $min || '-' if not defined $max or $min == $max;
+ 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) = @_;
return join(' ',
- sprintf('cost %.0f%%', 100 * $row->{cost} / $unit->{energy}),
- !defined $row->{maint} ? () :
- sprintf('+%.1f%%/s', 100 * $row->{maint} / $unit->{energy}),
+ 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('+%s%%/s', join '-',
+ map { sprintf '%.1f', 100 * $row->{maint} / $_ } grep $_,
+ $unit->{capacity},
+ $unit->{upgraded}->{capacity},
+ ),
);
}
@@ -142,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';
@@ -160,7 +173,7 @@ sub showrange {
} join '_', @bonus),
join(', ', map {(
sprintf('+%s vs %s',
- showrange(
+ showrangeint(
$attack->{bonus}->{$_},
$attack->{bonus}->{$_} + $attack->{bonus}->{"-$_"} * 3,
),
@@ -173,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', 'â')
@@ -182,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]
);
}
@@ -204,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;
}
@@ -294,14 +307,26 @@ 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})
+ ),
+ sprintf(' | %s',
+ showrange(
+ map { $_ && sprintf '%.1f', $_ }
+ $_->{speed}, $_->{upgraded}->{speed}
+ ),
+ defined $_->{creep} && sprintf(' title="%s on creep"',
+ $_->{creep} == 1 ? 'same' : showrange(
+ map { $_ && sprintf '%.1f', $_ }
+ $_->{speed} * $_->{creep},
+ $_->{upgraded}->{speed} && $_->{upgraded}->{speed} *
+ ($_->{upgraded}->{creep} // $_->{creep}),
+ ),
+ ),
),
- ' | ' .
- showrange($_->{speed}, $_->{upgraded}->{speed}),
$_->{attr}->{jump}
&& qq'â',
' | ' . showmagic($_),
@@ -424,8 +449,10 @@ if ($scver{major} > 1) {
(so a plasma hit of 12 to 4 armor large deals 2 damage, not ½)
attack
damage given per single hit
+ some weapons fire multiple à times, multiplying armor penalties
dps indicates relative amount of damage
- done in 1 second of in-game time
+ done in 1 second of <:= $scver{major} > 1 ? 'Normal in-game time' :
+ 'time on Fast game speed' :>
splash damage hits all objects nearby â
or in a straight line +.
<:
@@ -443,18 +470,19 @@ 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
speed
- relative speed of movement (when in full motion, startup speed ignored)
+ top movement speed in hex per second
+ acceleration and deceleration ignored
specials
parentheses () indicate that it needs to be researched first
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
|