X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/1cb822295129412ecabcac689b469a35d619724a..85cf1cbebe994484740a5471565f5859c49106c2:/sc.plp diff --git a/sc.plp b/sc.plp index 0426b6e..5607a9a 100644 --- a/sc.plp +++ b/sc.plp @@ -44,12 +44,12 @@ Unit properties as seen or measured in Brood War } tr.alt td { font-size: 70%; - border-top-style: dashed; + padding-left: 0.5em; } .units tr th:first-child { padding-left: 0; } - .units tr:hover:not(.race) { + .units tbody tr:hover:not(.race) { background: #EEE; } @@ -65,18 +65,10 @@ Unit properties as seen or measured in Brood War .unit-o {color: #C08} /* organic */ .unit-u {color: #44C} /* mechanic */ - img.unit-o, img.unit-u { - margin-left: 0.2em; - vertical-align: middle; - } .unit-composed { color: #C88; font-size: 70%; } - .unit { - text-align: center; - white-space: nowrap; - } .unit.unit-s {color: #770} .unit.unit-m {color: #C70} .unit.unit-l {color: #D22} @@ -113,6 +105,7 @@ Unit properties as seen or measured in Brood War } .units .val { + white-space: nowrap; text-align: right; } @@ -128,14 +121,10 @@ Unit properties as seen or measured in Brood War .legend dd { text-indent: -1em; margin-left: 1em; - break-before: avoid; - -webkit-column-break-before: avoid; } - .units, .legend { - display: table-cell; - } .legend { + display: table-cell; min-width: 20em; text-align: left; } @@ -144,9 +133,6 @@ Unit properties as seen or measured in Brood War padding-bottom: 1em; margin-right: 2em; } - .footer { - clear: left; - } <: @@ -178,6 +164,12 @@ sub coltoggle { <: sub showrange { + my ($min, $max) = @_; + $_ = int($_ + .5) for $min, $max; # round halves up + return $min == $max ? $min : "$min-$max"; +} + +sub showval { my ($row, @elements) = @_; my ($min, $max); @@ -212,36 +204,40 @@ sub showrange { $min /= 4; } }} - $_ = int($_ + .5) for $min, $max; # round halves up - - return $min == $max ? $min : "$min-$max"; + return showrange($min, $max); } sub showattack { my ($row, $area) = @_; - local $_ = $row->{attack}->{$area}; - if (not ref $_) { + my $attack = $row->{attack}->{$area}; + if (not ref $attack) { # reference to another area - $area = $_; - $_ = $row->{attack}->{$area}; + $area = $attack; + $attack = $row->{attack}->{$area}; } - return '' unless $_; + return '' unless $attack; my $tagbase = ''; - my $out = showrange($row, 'attack', $area, 'damage'); - $out .= '+' if $_->{splash}; - $out .= '' . showrange($row, 'attack', $area, 'dps'); + my $out = showval($row, 'attack', $area, 'damage'); + $out .= '+' if $attack->{splash}; + $attack->{dps} = $attack->{cooldown} && [ + map { 24 * $_ / $attack->{cooldown} * ($attack->{count} // 1) } + map { ref $_ ? @{$_} : $_ } + $attack->{damage} + #TODO: upgrade (zergling) + ]; + $out .= '' . showval($row, 'attack', $area, 'dps'); return $tagbase . $out; } @@ -295,15 +291,15 @@ sub showrange { '' . ( $_->{shield} ? sprintf('%.0f%%', 100 * $_->{shield} / $_->{hp}) : ' ' ), - '' . showrange($_, 'armor'), + '' . showval($_, 'armor'), showattack($_, 'ground'), showattack($_, 'air'), - '' . showrange($_, 'attack', 'range'), + '' . showval($_, 'attack', 'range'), '' . sprintf( $_->{detect} ? '%s' : '%s', - showrange($_, 'sight') + showval($_, 'sight') ), - '' . showrange($_, 'speed'), + '' . showval($_, 'speed'), '' . showmagic($_), "\n" ); @@ -311,8 +307,9 @@ sub showrange { my $units = do $datafile; die "Cannot open unit data: $_\n" for $@ || $! || (); - my $grouped = !exists $get{order}; + my $grouped = 1; # race headers if (exists $get{order}) { + $grouped = 0; $get{order} ||= ''; if ($get{order} eq 'size') { $_->{order} = $_->{unit}*8 + $_->{suit} + $_->{hp}/512 + $_->{min}/8192 for @$units; @@ -324,25 +321,34 @@ sub showrange { $units->[$_]->{order} = $_ for 0 .. $#$units; } } - my @rows = $grouped ? @$units : sort {$a->{order} <=> $b->{order}} @$units; + my @rows = @{$units}; + @rows = sort {$a->{order} <=> $b->{order}} @rows unless $grouped; my ($race, $cat) = ('', ''); for (@rows) { - $race = $_->{race}, - printf '

%s

'."\n", $race, ucfirst $race - if $grouped and $race ne $_->{race}; - $_->{cat} = $_->{race} if not $grouped; + if ($grouped) { + printf '

%s

'."\n", + $race = $_->{race}, ucfirst $race + unless $race eq $_->{race}; + } + else { + $_->{cat} = $_->{race}; + } + print( '', - sprintf('%s', $cat ne $_->{cat} ? ('h', $cat = $_->{cat}) : ('d', ' ')), + sprintf('%s', + $cat ne $_->{cat} ? ('h', $cat = $_->{cat}) : ('d', ' ') + ), '' . $_->{name}, showunitcols($_), ); - for my $alt (grep { $_->{alt} } @{ $_->{special} }) { + for my $subrow (@{ $_->{special} }) { + $subrow->{alt} or next; print( - '' . $alt->{alt}, - showunitcols($alt), + '' . $subrow->{alt}, + showunitcols($subrow), ); } } @@ -380,8 +386,7 @@ sub showrange {
ground/air
damage done per single attack against ground/air units
2nd column indicates relative amount of damage done in - a certain - amount of time + 1 second of fastest game time
splash damage+ hits nearby objects as well
explosive damage does only 50% damage to small units, 75% to medium, 100% to large