X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/53663289d87a1a07c0ff8789776029cd554fa293..f00c1e5c4de7325c9d5d851a61355fe8638cca95:/sc.plp diff --git a/sc.plp b/sc.plp index 7f40dd2..f1632ee 100644 --- a/sc.plp +++ b/sc.plp @@ -55,13 +55,14 @@ print "Also see the $_ table.\n" for join(', ', print "

\n\n"; sub addupgrade { - my ($ref, $increase) = @_; + my ($ref, $increase, $org) = @_; if (ref $increase eq 'HASH') { - addupgrade(\${$ref}->{$_}, $increase->{$_}) for keys %{$increase}; + addupgrade(\${$ref}->{$_}, $increase->{$_}, $org->{$_}) for keys %{$increase}; } elsif (ref $increase eq 'ARRAY') { - addupgrade(\${$ref}->[$_], $increase->[$_]) for 0 .. $#{$increase}; + addupgrade(\${$ref}->[$_], $increase->[$_], $org->[$_]) for 0 .. $#{$increase}; } + ${$ref} //= $org; ${$ref} += $increase if $increase =~ /^-?[0-9.]+/; } @@ -69,7 +70,15 @@ for my $unit (@{$units}) { for my $upgrade (@{ $unit->{upgrade} }) { while (my ($col, $increase) = each %{$upgrade}) { defined $unit->{$col} or next; - addupgrade(\( $unit->{upgraded}->{$col} //= $unit->{$col} ), $increase); + addupgrade(\$unit->{upgraded}->{$col}, $increase, $unit->{$col}); + } + } + for my $special (@{ $unit->{special} }) { + for my $upgrade (@{ $special->{upgrade} }) { + while (my ($col, $increase) = each %{$upgrade}) { + defined $special->{$col} or next; + addupgrade(\$special->{upgraded}->{$col}, $increase, $special->{$col}); + } } } } @@ -151,11 +160,14 @@ sub showrange { $out .= showrange($damage, $maxdamage); $out .= '' if $attack->{name}; $out .= sprintf('%s', - $attack->{splash} eq 'line' ? ('linear', '×') : ('splash', '+') + $attack->{splash} eq 'line' ? ('linear', '+') : ('splash', '⁜') ) if $attack->{splash}; $out .= ''; - if ($attack->{cooldown}) { + if ($attack->{dps}) { + $out .= showrange($attack->{dps}->[0], $attack->{dps}->[-1]); + } + elsif ($attack->{cooldown}) { if (my $type = $attack->{type}) { if ($type eq 'explosive') { $damage /= 2; @@ -283,6 +295,9 @@ sub showrange { !$_->{attack}->[1] ? () : ( '', showattack($_, 1), '' ), + !$_->{attack}->[2] ? () : ( + '', showattack($_, 2), '' + ), "\n" ); } @@ -403,8 +418,8 @@ if ($scver{major} > 1) {
damage given per single hit
dps indicates relative amount of damage done in 1 second of in-game time -
splash damage hits all objects nearby + - or in a straight line ×. +
splash damage hits all objects nearby ⁜ + or in a straight line +.
<: if ($scver{major} > 1) { :>does not include bonus damage