X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/7daf512d5b78e196e4b3ada31ae8c5c9705456d7..ffc7dd1d5f9a1b703991994df40620408a9c9ccd:/sc.plp diff --git a/sc.plp b/sc.plp index 2b8112d..a857884 100644 --- a/sc.plp +++ b/sc.plp @@ -93,9 +93,9 @@ sub coltoggle { HP shield ⛨ - attack + attack <:= coltoggle(qw'dps attack 1') :> - range + range sight speed specials @@ -112,12 +112,7 @@ sub showrange { sub showattack { my ($row, $area) = @_; my $attack = $row->{attack}->[$area] - or return ''; - - my $out = ''; - $out .= '' . '▽' x !!($attack->{anti} & 1); - $out .= '' . '△' x !!($attack->{anti} & 2); - $out .= ''; + or return ''; my $upattack = $row->{upgraded}->{attack}->[$area]; my $damage = $attack->{damage}; @@ -125,6 +120,7 @@ sub showrange { $damage = $damage->[0] if ref $damage; $maxdamage = $maxdamage->[-1] if ref $maxdamage; + my $out = ''; $out .= "$attack->{count}× " if $attack->{count} > 1; $out .= '*' if $attack->{type} eq 'explosive'; @@ -148,7 +144,12 @@ sub showrange { ), )} keys %{ $attack->{bonus} }), ) if $attack->{bonus}; + $out .= '•' + if $attack->{type} eq 'projectile'; + + $out .= sprintf '', $attack->{name} if $attack->{name}; $out .= showrange($damage, $maxdamage); + $out .= '' if $attack->{name}; $out .= sprintf('%s', $attack->{splash} eq 'line' ? ('linear', '×') : ('splash', '+') ) if $attack->{splash}; @@ -174,6 +175,12 @@ sub showrange { $out .= showrange($damage, $maxdamage); } + $out .= '' . '▽' x !!($attack->{anti} & 1); + $out .= '' . '△' x !!($attack->{anti} & 2); + + $out .= '' . + showrange($attack->{range}, $upattack->{range}); + return $out; } @@ -186,15 +193,17 @@ sub showrange { join('', $_->{name}, $_->{desc} ? ": $_->{desc}" : '', - $_->{range} || $_->{cost} ? sprintf(' (%s)', join ', ', + (map { $_ && " ($_)" } join ', ', + #TODO: apply upgrades $_->{range} ? "range $_->{range}" : (), $_->{cost} ? sprintf('cost %.0f%%%s', 100 * $_->{cost} / $row->{energy}, defined $_->{maint} && sprintf('+%.1f%%/s', 100 * $_->{maint} / $row->{energy}, ), - ) : (), - ) : '', + ) : + $_->{cooldown} ? "cooldown $_->{cooldown}s" : (), + ), ), sprintf($_->{build} ? '(%s)' : '%s', $_->{abbr}), } grep { defined $_->{abbr} } @{$specials}; @@ -260,8 +269,6 @@ sub showrange { ' class="val unit-armor">' . showrange($_->{armor}, $_->{upgraded}->{armor}), showattack($_, 0), - '' . - showrange(map { $_->{attack}->[0]->{range} } $_, $_->{upgraded}), '' . sprintf( $_->{detect} ? '%s' : '%s', showrange($_->{sight}, $_->{upgraded}->{sight}) @@ -274,7 +281,10 @@ sub showrange { && qq'↑', '' . showmagic($_), !$_->{attack}->[1] ? () : ( - '', showattack($_, 1), '' + '', showattack($_, 1), '' + ), + !$_->{attack}->[2] ? () : ( + '', showattack($_, 2), '' ), "\n" ); @@ -393,8 +403,6 @@ if ($scver{major} > 1) {
reduction applies to initial damage, before size penalties (so a plasma hit of 12 to 4 armor large deals 2 damage, not ½)
attack -
targets ▽ ground - and/or △ air
damage given per single hit
dps indicates relative amount of damage done in 1 second of in-game time @@ -403,23 +411,27 @@ if ($scver{major} > 1) {
<: if ($scver{major} > 1) { :>does not include bonus damage - dealt to susceptible unit types<: + dealt to susceptible unit types +
•projectile shots are negated by + Point Defense Drones<: } else { :>*explosive damage does only 50% damage to small units, 75% to medium, 100% to large
~concussive/plasma damage does 25% to large, 50% medium, 100% to small units<: } :> +
targets ▽ ground + and/or △ air +
range +
maximum range of weapon (note siege tank also has a minimum range)
sight
range in which the unit detects other units
emphasis indicates ability to detect cloaked units -
range -
maximum range of weapon (note siege tank also has a minimum range)
speed
relative speed of movement (when in full motion, startup speed ignored)
specials -
special abilities are usually casted manually, but some are always active
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