X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/ed44d7994978d129c903502a7508481dc024f7dd..e1d820a92fe13e0c1c4fe1716efdb5f713af75ae:/sc.plp diff --git a/sc.plp b/sc.plp index 8f51216..78eebc4 100644 --- a/sc.plp +++ b/sc.plp @@ -1,24 +1,27 @@ <(common.inc.plp)><: use List::Util qw(max sum); -my %scver = ( - id => 'bw', - name => 'Brood War', - title => 'starcraft', - game => 'StarCraft', - major => 1, -); - -if ($Request and $Request eq '2') { - %scver = ( - id => 'hots', +my %scvers = ( + bw => { + name => 'Brood War', + title => 'starcraft', + game => 'StarCraft', + major => 1, + }, + hots => { name => 'Heart of the Swarm', title => 'starcraft2', game => 'StarCraft II', major => 2, - ); -} -my $datafile = "sc-units-$scver{id}.inc.pl"; + }, +); + +$Request ||= 'bw'; +$Request = 'hots' if $Request eq '2'; +my %scver = %{ $scvers{$Request} } + or Abort("Requested version $Request not available", '404 unknown'); + +my $datafile = "sc-units-$Request.inc.pl"; Html({ title => "$scver{title} unit cheat sheet", @@ -31,7 +34,7 @@ Html({ keywords => [ qw' starcraft game unit statistics stats comparison table sheet cheat - reference software attributes properties + reference software attributes properties patch attribute multiplayer ', $scver{major} < 2 ? qw' bw broodwar brood war ' : qw' starcraft2 hots ', ], @@ -49,8 +52,8 @@ my $patch = shift @{$units} say "

Unit properties as seen or measured in $scver{name}\n$patch."; say "Also see the $_ table." for join(', ', - (showlink('StarCraft 2: HotS', '/sc/2')) x ($scver{major} < 2), - (showlink('original SC: Brood War', '/sc')) x ($scver{major} > 1), + (showlink('StarCraft 2: HotS', '/sc/hots')) x ($Request ne 'hots'), + (showlink('original SC: Brood War', '/sc/bw')) x ($Request ne 'bw'), ); say "

\n"; @@ -93,12 +96,12 @@ sub coltoggle { <:= coltoggle(exists $get{order} ? 'race' : 'source' => '') :> <:= coltoggle(name => 'name') :> - cost + <:= coltoggle(cost => 'cost') :> gas - <:= coltoggle(qw'build cost') :> + <:= coltoggle(build => 'build') :> <:= coltoggle(qw'size size') :> attr - HP + <:= coltoggle(HP => 'hp') :> shield ⛨ <:= coltoggle(attack => 'attack') :> @@ -255,9 +258,13 @@ sub showrangeint { return ( '' . ($_->{min} // ''), '' . ($_->{gas} || ''), - !defined $_->{build} ? '' : sprintf('%s%.0f', - !!$_->{base} && '+', - $_->{build} || '0', + !defined $_->{build} ? '' : sprintf('%s%.0f', + defined $_->{warp} && qq(title="$_->{build} without warpgate"), + !!$_->{base} && sprintf( + '+', + 'from '.join('+', @{ $_->{base} }), + ), + $_->{warp} // $_->{build} || '0', ), sprintf('%s', $_-> {cargo} < 0 ? ('supply', T => 'transport') : @@ -346,11 +353,25 @@ sub showrangeint { if ($get{order} eq 'name') { @rows = sort {$a->{name} cmp $b->{name}} @rows; } + elsif ($get{order} eq 'hp') { + $_->{order} = ( + $_->{hp}*1.01 + $_->{armor} + $_->{shield} + $_->{size}/1024, + ) for @rows; + } elsif ($get{order} eq 'cost') { $_->{order} = ( $_->{gas}*1.5 + $_->{min} + $_->{pop}/8 + $_->{build}/256/8 ) for @rows; } + elsif ($get{order} eq 'build') { + my %unittime = map { ($_->{name} => $_->{warp} // $_->{build}) } @rows; + $unittime{Templar} = $unittime{'High Templar'}; + $_->{order} = ( + ($_->{warp} // $_->{build}) + + ($_->{gas}*1.5 + $_->{min} + $_->{pop}/8)/1024 + + ($_->{base} ? ($unittime{$_->{base}->[0]} // 100) + 1 : 0) + ) for @rows; + } elsif ($get{order} eq 'size') { $_->{order} = ( $_->{pop}*16 + ($_->{size} // $_->{suit}) + $_->{cargo}/8