' . showmagic($_),
+ "\n"
+ );
}
- my $units = do 'sc-units.inc.pl';
- 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 + $_->{size} + $_->{hp}/512 + $_->{min}/8192 for @$units;
+ $_->{order} = $_->{unit}*8 + $_->{suit} + $_->{hp}/512 + $_->{min}/8192 for @$units;
}
elsif ($get{order} eq 'cost') {
$_->{order} = $_->{gas}*1.5 + $_->{min} + $_->{unit}/8 + $_->{build}/256/8 for @$units;
@@ -235,80 +231,55 @@ 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 '
%1$s
'."\n", $race
- if $grouped and $race ne $_->{race};
- $_->{cat} = $_->{race} if not $grouped;
- my $sizechar = [qw/? s m l/]->[$_->{size}];
+ if ($grouped) {
+ printf '
includes total expenses if based on existing units
build
relative time needed to create at least one unit
+
excludes construction of dependencies such as buildings
+ and +parent units
size
-
Small,
+
affected by Small,
Medium,
or Large unit damage
number of command points taken per unit
-
organic/mechanic unit
+
organic/mechanic unit
HP
total number of hitpoints (including shields)
shield
@@ -319,12 +290,11 @@ sub showrange {
base unit armor
can be increased by upto 3 at various facilities
each point decreases damage per hit by one, upto a minimum of ½
-
reduction applies to initial damage, before size penalties (so a large plasma hit of 12 to 4 armor deals 2 damage, not ½)
+
reduction applies to initial damage, before size penalties (so a plasma hit of 12 to 4 armor large deals 2 damage, not ½)
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
@@ -338,8 +308,8 @@ sub showrange {
speed
relative speed of movement (when in full motion, startup speed ignored)
specials
-
special abilities
-
parentheses () indicated that it needs to be researched first
+
special abilities are usually casted manually, but some are always active
+
parentheses () indicate that it needs to be researched first
hover for description
range is maximum range required to activate
cost is percentage of total energy lost
@@ -350,28 +320,5 @@ When two values are given (1-2), second value indicates attribute after all
possible upgrades.
-<: exit :>
-
Magic
-
-
<:
-for (@$units) {
- print '
', $_->{name};
- print ' ';
-# my $units = {qw/protoss W zerg B terran R/}->{$_->{race}} x int($_->{unit} + .5);
-# my $cost = int(($_->{min} + $_->{gas}) / 50 - $_->{unit}) || '';
- my $units = {qw/protoss W zerg B terran R/}->{$_->{race}} x int($_->{gas} / 50) || '';
- my $cost = int($_->{min} / 50) || 0;
- my @desc;
- push @desc, "Flying" if $_->{flying};
- push @desc, "Cloaking" if $_->{cloak};
- push @desc, "First Strike" if $_->{range} and $_->{range} >= 4;
- my $att = $_->{attack}->{ground};
- push @desc, "Trample" if $att and $att->{splash};
- $att = $att->{damage} if $att;
- $att = $att->[0] if ref $att eq "ARRAY";
- $att = int($att / 5);
- my $def = int($_->{hp} / 45);
- printf "%s %s %s/%s", $cost . $units, join(",", @desc), $att, $def;
-}
-:>