sc: preliminary starcraft 2 hots data
authorMischa POSLAWSKY <perl@shiar.org>
Wed, 10 Jun 2015 20:53:41 +0000 (22:53 +0200)
committerMischa POSLAWSKY <perl@shiar.org>
Wed, 10 Jun 2015 23:40:32 +0000 (01:40 +0200)
Set up alternate include (selectable by /2 path option) with equivalent game
data from Liquipedia <http://wiki.teamliquid.net/starcraft2/Unit_Statistics>.

sc.plp
sc2-units.inc.pl [new file with mode: 0644]

diff --git a/sc.plp b/sc.plp
index d6ccaf62e8f72e3c0f8797726aa75ad2e1099e53..26c8a97586244537ca02a52c248d0cf0141a4b83 100644 (file)
--- a/sc.plp
+++ b/sc.plp
@@ -1,5 +1,10 @@
 <(common.inc.plp)><:
 
 <(common.inc.plp)><:
 
+my $datafile = 'sc-units.inc.pl';
+if ($ENV{PATH_INFO} and $ENV{PATH_INFO} eq '/2') {
+       $datafile = 'sc2-units.inc.pl';
+}
+
 Html({
        title => 'starcraft unit cheat sheet',
        version => 'v1.0',
 Html({
        title => 'starcraft unit cheat sheet',
        version => 'v1.0',
@@ -13,6 +18,7 @@ Html({
                reference software attributes properties
        '],
        stylesheet => [qw'light'],
                reference software attributes properties
        '],
        stylesheet => [qw'light'],
+       data => [$datafile],
 });
 
 :>
 });
 
 :>
@@ -253,7 +259,7 @@ sub showrange {
                } @$specials;
        }
 
                } @$specials;
        }
 
-       my $units = do 'sc-units.inc.pl';
+       my $units = do $datafile;
        die "Cannot open unit data: $_\n" for $@ || $! || ();
        my $grouped = !exists $get{order};
        if (exists $get{order}) {
        die "Cannot open unit data: $_\n" for $@ || $! || ();
        my $grouped = !exists $get{order};
        if (exists $get{order}) {
diff --git a/sc2-units.inc.pl b/sc2-units.inc.pl
new file mode 100644 (file)
index 0000000..1187e89
--- /dev/null
@@ -0,0 +1,1885 @@
+[
+# http://wiki.teamliquid.net/starcraft2/Unit_Statistics
+# http://wiki.teamliquid.net/starcraft2/User:Roemy/Unit_Statistics_(detailed)
+# http://starcraft.wikia.com/wiki/List_of_StarCraft_II_units
+
+{
+       race => 'protoss',
+       cat => 'base',
+       name => 'Probe',
+       unit => 1,
+       min => 50,
+       gas => 0,
+       build => 17,
+       size => 0.75,
+       cargo => 1,
+       armor => 0,
+       hp => 20,
+       shield => 20,
+       suit => 1, # light
+       organic => 0, # mech
+       attack => {
+               ground => {
+                       damage => 5,
+                       dps => 3.3,
+                       cooldown => 1.5,
+               },
+               range => 0,
+       },
+       speed => 2.8125,
+       sight => 8,
+},
+
+{
+       race => 'protoss',
+       cat => 'gateway',
+       name => 'Zealot',
+       unit => 2,
+       min => 100,
+       gas => 0,
+       build => 38,
+       warp => 28,
+       size => 0.75,
+       cargo => 2,
+       armor => 1,
+       hp => 100,
+       shield => 50,
+       suit => 1, # light
+       organic => 1,
+       attack => {
+               ground => {
+                       damage => [8 .. 11], # x2
+                       dps => [13.3, 15.0, 16.7, 18.4],
+                       cooldown => 1.2,
+               },
+               range => 0,
+       },
+       speed => 2.25,
+       upgrade => [
+               {
+                       speed => .5,
+               },
+       ],
+       sight => 9,
+},
+
+{
+       race => 'protoss',
+       cat => 'gateway',
+       name => 'Sentry',
+       unit => 2,
+       min => 50,
+       gas => 100,
+       build => 37,
+       warp => 32,
+       size => 1.25,
+       cargo => 2,
+       armor => 1,
+       hp => 40,
+       shield => 40,
+       suit => 1, # light
+       organic => 0, # mech
+       psionic => 1,
+       attack => {
+               ground => {
+                       damage => [6 .. 9],
+                       dps => [6 .. 9],
+                       cooldown => 1.0,
+               },
+               air => 'ground',
+       },
+       speed => 2.25,
+       range => 5,
+       sight => 10,
+},
+
+{
+       race => 'protoss',
+       cat => 'gateway',
+       name => 'Stalker',
+       unit => 2,
+       min => 125,
+       gas => 50,
+       build => 42,
+       warp => 32,
+       size => 1.25,
+       cargo => 2,
+       armor => 1,
+       hp => 80,
+       shield => 80,
+       suit => 3, # armored
+       organic => 0, # mech
+       attack => {
+               ground => {
+                       damage => [10 .. 13],
+                       dps => [6.9, 7.6, 8.3, 9.0],
+                       #bonus => +4 A,
+                       type => 'projectile',
+                       cooldown => 1.44,
+               },
+               air => 'ground',
+               range => 6,
+       },
+       speed => 2.9531,
+       sight => 10,
+},
+
+{
+       race => 'protoss',
+       cat => 'gateway',
+       name => 'High Templar',
+       unit => 2,
+       min => 50,
+       gas => 150,
+       build => 55,
+       warp => 45,
+       size => 0.75,
+       cargo => 2,
+       armor => 0,
+       hp => 40,
+       shield => 40,
+       suit => 1, # light
+       organic => 1,
+       psionic => 1,
+       speed => 1.875,
+       sight => 10,
+},
+
+{
+       race => 'protoss',
+       cat => 'gateway',
+       name => 'Dark Templar',
+       unit => 2,
+       min => 125,
+       gas => 125,
+       build => 55,
+       warp => 45,
+       size => 0.75,
+       cargo => 2,
+       armor => 1,
+       hp => 40,
+       shield => 80,
+       suit => 1, # light
+       organic => 1,
+       psionic => 1,
+       attack => {
+               ground => {
+                       damage => [45, 50, 55, 60],
+                       dps => [26.6, 29.6, 32.6, 35.6],
+                       cooldown => 1.694,
+               },
+               range => 0,
+       },
+       speed => 2.8125,
+       sight => 8,
+},
+
+{
+       race => 'protoss',
+       cat => 'robotic',
+       name => 'Immortal',
+       unit => 4,
+       min => 250,
+       gas => 100,
+       build => 55,
+       size => 1.5,
+       cargo => 4,
+       armor => 1,
+       hp => 200,
+       shield => 100,
+       suit => 3, # armored
+       organic => 0, # mech
+       attack => {
+               ground => {
+                       damage => [20, 22, 24, 26],
+                       #bonus => +30 (+3) A,
+                       dps => [13.8, 15.2, 16.6, 18.0],
+                       cooldown => 1.45,
+               },
+               range => 6,
+       },
+       speed => 2.25,
+       sight => 9,
+},
+
+{
+       race => 'protoss',
+       cat => 'robotic',
+       name => 'Colossus',
+       unit => 6,
+       min => 300,
+       gas => 200,
+       build => 75,
+       size => 2,
+       cargo => 8,
+       armor => 1,
+       hp => 200,
+       shield => 150,
+       suit => 3, # armored
+       organic => 0, # mech
+       massive => 1,
+       attack => {
+               ground => {
+                       damage => [15, 17, 19, 21], # x2
+                       dps => [18.2, 20.6, 23.0, 25.4],
+                       splash => 'linear',
+                       cooldown => 1.65,
+               },
+               range => 6,
+       },
+       upgrade => [
+               {
+                       range => 3,
+               },
+       ],
+       speed => 2.25,
+       sight => 10,
+},
+
+{
+       race => 'protoss',
+       cat => 'psionic',
+       name => 'Archon',
+       unit => 4,
+       min => 0,
+       gas => 0,
+       build => 12,
+       size => 1.5,
+       cargo => 4,
+       armor => 0,
+       hp => 10,
+       shield => 350,
+       attr => P,
+       massive => 1,
+       attack => {
+               ground => {
+                       damage => [25, 28, 31, 34],
+                       dps => [14.3, 16.0, 17.7, 19.4],
+                       #bonus => +10 (+1) B,
+                       splash => 1,
+                       cooldown => 1.754,
+               },
+               air => 'ground',
+               range => 3,
+       },
+       speed => 2.8125,
+       sight => 9,
+},
+
+{
+       race => 'protoss',
+       cat => 'robotic',
+       name => 'Observer',
+       unit => 1,
+       min => 25,
+       gas => 75,
+       build => 30,
+       size => 1,
+       cargo => 0,
+       armor => 0,
+       hp => 40,
+       shield => 20,
+       suit => 1, # light
+       organic => 0, # mech
+       speed => 1.875,
+       upgrade => [
+               {
+                       speed => 0.9375,
+               },
+       ],
+       sight => 11,
+},
+
+{
+       race => 'protoss',
+       cat => 'robotic',
+       name => 'Warp Prism',
+       unit => 2,
+       min => 200,
+       gas => 0,
+       build => 50,
+       size => 1.75,
+       cargo => 0,
+       armor => 0,
+       hp => 100,
+       shield => 100,
+       suit => 3, # armored
+       organic => 0, # mech
+       psionic => 1,
+       speed => 2.9531,
+       upgrade => [
+               {
+                       speed => 0.422,
+               },
+       ],
+       sight => 10,
+},
+
+{
+       race => 'protoss',
+       cat => 'stargate',
+       name => 'Phoenix',
+       unit => 2,
+       min => 150,
+       gas => 100,
+       build => 35,
+       size => 1.5,
+       cargo => 0,
+       armor => 0,
+       hp => 120,
+       shield => 60,
+       suit => 1, # light
+       organic => 0, # mech
+       attack => {
+               air => {
+                       damage => [5 .. 8], # x2
+                       dps => [9, 10.8, 12.6, 14.4],
+                       #bonus => +5 L,
+                       type => 'projectile',
+                       cooldown => 1.11,
+               },
+               range => 5,
+       },
+       speed => 4.25,
+       sight => 10,
+       upgrade => [
+               {
+                       range => 2,
+               },
+       ],
+},
+
+{
+       race => 'protoss',
+       cat => 'base',
+       name => 'Mothership Core',
+       unit => 2,
+       min => 100,
+       gas => 100,
+       build => 30,
+       size => 2,
+       cargo => 0,
+       armor => 1,
+       hp => 130,
+       shield => 60,
+       suit => 3, # armored
+       organic => 0, # mech
+       psionic => 1,
+       attack => {
+               ground => {
+                       damage => [8 .. 11],
+                       dps => [9.4, 10.6, 11.8, 13.0],
+                       type => 'projectile',
+                       cooldown => 0.85,
+               },
+               range => 5,
+       },
+       speed => 1.875,
+       sight => 9,
+},
+
+{
+       race => 'protoss',
+       cat => 'stargate',
+       name => 'Void Ray',
+       unit => 4,
+       min => 250,
+       gas => 150,
+       build => 60,
+       size => 1.5,
+       cargo => 0,
+       armor => 0,
+       hp => 150,
+       shield => 100,
+       suit => 3, # armored
+       organic => 0, # mech
+       attack => {
+               ground => {
+                       damage => [6 .. 9],
+                       #bonus => +4 (+1), +10 (+1) A,
+                       dps => [12, 14, 16, 18],
+                       cooldown => 0.5,
+               },
+               air => 'ground',
+               range => 6,
+       },
+       speed => 2.25,
+       sight => 10,
+},
+
+{
+       race => 'protoss',
+       cat => 'stargate',
+       name => 'Oracle',
+       unit => 3,
+       min => 150,
+       gas => 150,
+       build => 50,
+       size => 1.5,
+       cargo => 0,
+       armor => 0,
+       hp => 100,
+       shield => 60,
+       suit => 1, # light
+       organic => 0, # mech
+       psionic => 1,
+       attack => {
+               ground => {
+                       name => 'Pulsar Beam',
+                       damage => 15,
+                       # costs energy
+                       #bonus => +10 L,
+                       dps => 17.4,
+                       cooldown => 0.86,
+               },
+               range => 5,
+       },
+       speed => 4,
+       sight => 10,
+},
+
+{
+       race => 'protoss',
+       cat => 'stargate',
+       name => 'Tempest',
+       unit => 4,
+       min => 300,
+       gas => 200,
+       build => 60,
+       size => 2.5,
+       cargo => 0,
+       armor => 2,
+       hp => 120,
+       shield => 60,
+       suit => 3, # armored
+       organic => 0, # mech
+       massive => 1,
+       attack => {
+               ground => {
+                       damage => [30, 33, 36, 39],
+                       #bonus => +50 (+2) Ma Air,
+                       dps => [9.1, 10.0, 10.9, 11.8],
+                       type => 'projectile',
+                       cooldown => 3.3,
+               },
+               air => 'ground',
+               range => 15,
+       },
+       speed => 1.875,
+       sight => 12,
+},
+
+{
+       race => 'protoss',
+       cat => 'stargate',
+       name => 'Carrier',
+       unit => 6,
+       min => 350,
+       gas => 250,
+       build => 120,
+       size => 2.5,
+       cargo => 0,
+       armor => 2,
+       hp => 300,
+       shield => 150,
+       suit => 3, # armored
+       organic => 0, # mech
+       massive => 1,
+       attack => {
+               range => 8,
+       },
+       speed => 1.875,
+       sight => 12,
+},
+
+{
+       race => 'protoss',
+       cat => 'stargate',
+       name => 'Interceptor',
+       unit => 0,
+       min => 25,
+       gas => 0,
+       build => 8,
+       size => 0.5,
+       cargo => 0,
+       armor => 0,
+       hp => 40,
+       shield => 40,
+       suit => 1, # light
+       organic => 0, # mech
+       attack => {
+               ground => {
+                       damage => [5 .. 8], # 2x
+#                      dps => 26.7 (+5.3),
+                       dps => [3.3, 4.0, 4.7, 5.4],
+#                      cooldown => 0.5 (0.125/ 0.25),
+                       cooldown => 3.0,
+               },
+               air => 'ground',
+               range => 2,
+       },
+       speed => 7.5,
+       sight => 7,
+},
+
+{
+       race => 'protoss',
+       cat => 'base',
+       name => 'Mothership',
+       unit => 8,
+       min => 300,
+       gas => 300,
+       build => 100,
+       size => 2.75,
+       armor => 2,
+       hp => 350,
+       shield => 350,
+       suit => 3, # armored
+       organic => 0, # mech
+       psionic => 1,
+       massive => 1,
+       attack => {
+               ground => {
+                       damage => [6 .. 9], x6,
+                       dps => [16.3, 19.0, 21.7, 24.4],
+                       cooldown => 2.21,
+               },
+               air => 'ground',
+               range => 7,
+       },
+       speed => 1.4062,
+       sight => 14,
+},
+
+{
+       race => 'protoss',
+       cat => 'base',
+       name => 'Photon Cannon',
+       unit => 0,
+       min => 150,
+       gas => 0,
+       build => 40,
+       size => 2x2,
+       armor => 1,
+       hp => 150,
+       shield => 150,
+       suit => 3, # armored
+       structure => 1,
+       attack => {
+               ground => {
+                       damage => 20,
+                       dps => 16,
+                       cooldown => 1.25,
+               },
+               air => 'ground',
+               range => 7,
+       },
+       speed => 0,
+       sight => 11,
+},
+
+{
+       race => 'protoss',
+       cat => 'base',
+       name => 'Nexus',
+       unit => 0,
+       min => 400,
+       gas => 0,
+       build => 100,
+       size => 5x5,
+       cargo => 0,
+       armor => 1,
+       hp => 1000,
+       shield => 1000,
+       suit => 3, # armored
+       structure => 1,
+       attack => {
+               ground => {
+                       damage => 20,
+                       dps => 16,
+                       cooldown => 1.25,
+               },
+               air => 'ground',
+               range => 13,
+       },
+       speed => 0,
+       sight => 11,
+},
+
+# terran
+
+{
+       race => 'terran',
+       cat => 'base',
+       name => 'SCV',
+       unit => 1,
+       min => 50,
+       gas => 0,
+       build => 17,
+       size => 0.75,
+       cargo => 1,
+       armor => 0,
+       hp => 45,
+       suit => 1, # light
+       organic => 1,
+       organic => 0, # mech
+       attack => {
+               ground => {
+                       damage => 5,
+                       dps => 3.3,
+                       cooldown => 1.5,
+               },
+               range => 0,
+       },
+       speed => 2.8125,
+       sight => 8,
+},
+
+{
+       race => 'terran',
+       cat => 'base',
+       name => 'Mule',
+       unit => 0,
+       min => 0,
+       build => 0,
+       size => 0.75,
+       armor => 0,
+       hp => 60,
+       suit => 1, # light
+       organic => 0, # mech
+       speed => 2.8,
+       sight => 8,
+},
+
+{
+       race => 'terran',
+       cat => 'barracks',
+       name => 'Marine',
+       unit => 1,
+       min => 50,
+       gas => 0,
+       build => 25,
+       size => 0.75,
+       cargo => 1,
+       armor => 0,
+       hp => 45,
+       suit => 1, # light
+       organic => 1,
+       attack => {
+               ground => {
+                       damage => [6 .. 9],
+                       dps => [7, 8.2, 9.4, 10.6],
+                       cooldown => 0.8608,
+               },
+               air => 'ground',
+               range => 5,
+       },
+       speed => 2.25,
+       upgrade => [
+               {
+                       hp => 10,
+               },
+       ],
+       special => [
+               {
+                       name => 'stim pack',
+                       abbr => 'sp',
+                       alt => 'Stimmed Marine',
+                       desc => 'increases attack and movement speed for a few seconds at the cost of 10 health',
+                       speed => 2.25 + 1.125,
+                       attack => {
+                               ground => {
+                                       dps => [10.5, 12.2, 13.9, 15.6],
+                                       cooldown => 0.5739,
+                               },
+                               air => 'ground',
+                       },
+                       duration => undef, #XXX
+               },
+       ],
+       sight => 9,
+},
+
+{
+       race => 'terran',
+       cat => 'barracks',
+       name => 'Marauder',
+       unit => 2,
+       min => 100,
+       gas => 25,
+       build => 30,
+       size => 1.125,
+       cargo => 2,
+       armor => 1,
+       hp => 125,
+       suit => 3, # armored
+       organic => 1,
+       attack => {
+               ground => {
+                       damage => [10 .. 13],
+                       #bonus => +10 (+1) A,
+                       dps => [6.7, 7.4, 8.1, 8.8],
+                       type => 'projectile',
+                       cooldown => 1.5,
+               },
+               range => 6,
+       },
+       special => [
+               {
+                       name => 'stim pack',
+                       abbr => 'sp',
+                       desc => 'increases attack and movement speed for a few seconds at the cost of 10 health',
+                       speed => 2.25 + 1.125,
+                       attack => {
+                               ground => {
+                                       dps => [10 .. 13],
+                                       cooldown => 1.0,
+                               },
+                       },
+                       duration => undef, #XXX
+               },
+       ],
+       speed => 2.25,
+       sight => 10,
+},
+
+{
+       race => 'terran',
+       cat => 'barracks',
+       name => 'Reaper',
+       unit => 1,
+       min => 50,
+       gas => 50,
+       build => 40,
+       size => 0.75,
+       cargo => 1,
+       armor => 0,
+       hp => 60,
+       suit => 1, # light
+       organic => 1,
+       attack => {
+               ground => {
+                       damage => [4 .. 7], # x2
+                       dps => [7.3, 9.1, 10.9, 12.7],
+                       cooldown => 1.1,
+               },
+               range => 4.5,
+       },
+       speed => 3.75,
+       sight => 9,
+},
+
+{
+       race => 'terran',
+       cat => 'barracks',
+       name => 'Ghost',
+       unit => 2,
+       min => 200,
+       gas => 100,
+       build => 40,
+       size => 0.75,
+       cargo => 2,
+       armor => 0,
+       hp => 100,
+       organic => 1,
+       psionic => 1,
+       attack => {
+               ground => {
+                       damage => [10 .. 13],
+                       #bonus => +10 (+1) L,
+                       dps => [6.7, 7.4, 8.1, 8.8],
+                       cooldown => 1.5,
+               },
+               air => 'ground',
+               range => 6,
+       },
+       speed => 2.25,
+       sight => 11,
+},
+
+{
+       race => 'terran',
+       cat => 'factory',
+       name => 'Hellion',
+       unit => 2,
+       min => 100,
+       gas => 0,
+       build => 30,
+       size => 1.25,
+       cargo => 2,
+       armor => 0,
+       hp => 90,
+       suit => 1, # light
+       organic => 0, # mech
+       attack => {
+               ground => {
+                       damage => [8 .. 11],
+                       dps => [3.2, 3.6, 4.0, 4.4],
+                       #bonus => +6 (+1), +11 (+1) L,
+                       splash => 'linear',
+                       cooldown => 2.5,
+               },
+               range => 5,
+       },
+       speed => 4.25,
+       sight => 10,
+},
+
+{
+       race => 'terran',
+       cat => 'factory',
+       name => 'Hellbat',
+       unit => 2,
+       min => 100,
+       gas => 0,
+       build => 30,
+       size => 1.25,
+       cargo => 4,
+       armor => 0,
+       hp => 135,
+       suit => 1, # light
+       organic => 1,
+       organic => 0, # mech
+       attack => {
+               ground => {
+                       damage => [18, 20, 22, 24],
+                       #bonus => +12 (+1) L,
+                       dps => [9 .. 12],
+                       splash => 1,
+                       cooldown => 2,
+               },
+               range => 2,
+       },
+       speed => 2.25,
+       sight => 10,
+},
+
+{
+       race => 'terran',
+       cat => 'factory',
+       name => 'Widow Mine',
+       unit => 2,
+       min => 75,
+       gas => 25,
+       build => 40,
+       size => 1,
+       cargo => 2,
+       armor => 0,
+       hp => 90,
+       suit => 1, # light
+       organic => 0, # mech
+       attack => {
+               ground => {
+                       damage => 125,
+                       #bonus => +35 Shield,
+                       splash => 1,
+                       cooldown => 40,
+               },
+               range => 5,
+       },
+       speed => 2.8125,
+       sight => 7,
+},
+
+{
+       race => 'terran',
+       cat => 'factory',
+       name => 'Siege Tank',
+       unit => 3,
+       min => 150,
+       gas => 125,
+       build => 45,
+       size => 1.75,
+       cargo => 4,
+       armor => 1,
+       hp => 160,
+       suit => 3, # armored
+       organic => 0, # mech
+       attack => {
+               ground => {
+                       damage => [15, 17, 19, 21],
+                       #bonus => +10 (+1)A,
+                       dps => [14.4, 16.3, 18.2, 20.1],
+                       cooldown => 1.04,
+               },
+               range => 7,
+       },
+       special => [
+               {
+                       cargo => 0,
+                       attack => {
+                               name => 'siege mode',
+                               abbr => 'sg',
+                               alt => 'Sieged Tank',
+                               ground => {
+                                       damage => [35, 38, 41, 44],
+                                       #bonus => 15 (+2)A,
+                                       dps => [11.7, 12.7, 13.7, 14.7],
+                                       splash => 1,
+                                       cooldown => 3,
+                               },
+                               range => 13,
+                       },
+                       speed => 0,
+               },
+       ],
+       speed => 2.25,
+       sight => 11,
+},
+
+{
+       race => 'terran',
+       cat => 'factory',
+       name => 'Thor',
+       unit => 6,
+       min => 300,
+       gas => 200,
+       build => 60,
+       size => 1.875,
+       cargo => 8,
+       armor => 1,
+       hp => 400,
+       suit => 3, # armored
+       organic => 0, # mech
+       massive => 1,
+       attack => {
+               ground => {
+                       damage => [30, 33, 36, 39], # x2,
+                       dps => [46.9, 51.6, 56.3, 61.0],
+                       cooldown => 1.28,
+                       range => 7,
+               },
+               air => {
+                       name => 'Explosive Payload',
+                       damage => [6 .. 9], # x4
+                       #bonus => +6 (+1) L Air,
+                       dps => [8, 9.3, 10.6, 11.9],
+                       splash => 1,
+                       type => 'projectile',
+                       cooldown => 3,
+                       range => 10,
+               },
+               air => {
+                       name => 'High Impact Payload',
+                       damage => [24, 26, 28, 30],
+                       dps => [12 .. 15],
+                       cooldown => 2,
+                       range => 10,
+               },
+       },
+       speed => 1.875,
+       sight => 11,
+},
+
+{
+       race => 'terran',
+       cat => 'starport',
+       name => 'Viking',
+       unit => 2,
+       min => 150,
+       gas => 75,
+       build => 42,
+       size => 1.5,
+       cargo => 0,
+       armor => 0,
+       hp => 125,
+       suit => 3, # armored
+       organic => 0, # mech
+       attack => {
+               air => {
+                       damage => [10 .. 13], # x2
+                       #bonus => +4A,
+                       dps => [10 .. 13],
+                       type => 'projectile',
+                       cooldown => 2,
+               },
+               range => 9,
+       },
+       special => [
+               {
+                       cargo => 2,
+                       attack => {
+                               name => 'Assault Mode',
+                               abbr => 'am',
+                               build => 3, # transformation time
+                               alt => 'Landed Viking',
+                               ground => {
+                                       damage => [12 .. 15],
+                                       dps => [12 .. 15],
+                                       cooldown => 1,
+                               },
+                               range => 6,
+                       },
+               },
+       ],
+       speed => 2.75,
+       sight => 10,
+},
+
+{
+       race => 'terran',
+       cat => 'starport',
+       name => 'Medivac',
+       unit => 2,
+       min => 100,
+       gas => 100,
+       build => 42,
+       size => 1.5,
+       cargo => 0,
+       armor => 1,
+       hp => 150,
+       suit => 3, # armored
+       organic => 0, # mech
+       speed => 2.5,
+       upgrade => [
+               {
+                       speed => 4.25,
+               },
+       ],
+       sight => 11,
+},
+
+{
+       race => 'terran',
+       cat => 'starport',
+       name => 'Banshee',
+       unit => 3,
+       min => 150,
+       gas => 100,
+       build => 60,
+       size => 1.5,
+       cargo => 0,
+       armor => 0,
+       hp => 140,
+       suit => 1, # light
+       organic => 0, # mech
+       attack => {
+               ground => {
+                       damage => [12 .. 15], # x2
+                       dps => [19.2, 20.8, 22.4, 24.0],
+                       type => 'projectile',
+                       cooldown => 1.25,
+               },
+               range => 6,
+       },
+       speed => 2.75,
+       sight => 10,
+},
+
+{
+       race => 'terran',
+       cat => 'starport',
+       name => 'Raven',
+       unit => 2,
+       min => 100,
+       gas => 200,
+       build => 60,
+       size => 1.25,
+       cargo => 0,
+       armor => 1,
+       hp => 140,
+       suit => 1, # light
+       organic => 0, # mech
+       speed => 2.25,
+       sight => 11,
+},
+
+{
+       race => 'terran',
+       cat => 'starport',
+       name => 'Battlecruiser',
+       unit => 6,
+       min => 400,
+       gas => 300,
+       build => 90,
+       size => 2.5,
+       cargo => 0,
+       armor => 3,
+       hp => 550,
+       suit => 3, # armored
+       organic => 0, # mech
+       massive => 1,
+       attack => {
+               ground => {
+                       damage => [8 .. 11],
+                       dps => [35.6, 40.0, 44.4, 48.8],
+                       cooldown => 0.225,
+               },
+               air => {
+                       damage => [6 .. 9],
+                       dps => [26.7, 31.1, 35.5, 39.9],
+                       cooldown => 0.225,
+               },
+               range => 6,
+       },
+       speed => 1.875,
+       sight => 12,
+},
+
+{
+       race => 'terran',
+       cat => 'base',
+       name => 'Planetary Fortress',
+       unit => 0,
+       min => 150,
+       gas => 150,
+       build => 50,
+       size => 5x5,
+       cargo => 0,
+       armor => 3,
+       hp => 1500,
+       suit => 3, # armored
+       organic => 0, # mech
+       structure => 1,
+       attack => {
+               ground => {
+                       damage => 40,
+                       dps => 20,
+                       splash => 1,
+                       cooldown => 2,
+               },
+               range => 6,
+       },
+       speed => 0,
+       sight => 11,
+       upgrade => [
+               {
+                       armor => 2,
+               },
+               {
+                       attack => {
+                               range => 1,
+                       },
+               },
+       ],
+},
+
+{
+       race => 'terran',
+       cat => 'base',
+       name => 'Missile Turret',
+       unit => 0,
+       min => 100,
+       gas => 0,
+       build => 25,
+       size => 2x2,
+       cargo => 0,
+       armor => 0,
+       hp => 250,
+       suit => 3, # armored
+       organic => 0, # mech
+       structure => 1,
+       attack => {
+               air => {
+                       damage => 12, # x2
+                       dps => 27.9,
+                       cooldown => 0.8608,
+               },
+               range => 7,
+       },
+       speed => 0,
+       sight => 11,
+       upgrade => [
+               {
+                       attack => {
+                               range => 1,
+                       },
+               },
+       ],
+},
+
+{
+       race => 'terran',
+       cat => 'base',
+       name => 'Auto-Turret',
+       unit => 0,
+       min => 0,
+       build => 0,
+       size => 2x2,
+       cargo => 0,
+       armor => 1,
+       hp => 150,
+       suit => 3, # armored
+       organic => 0, # mech
+       structure => 1,
+       attack => {
+               ground => {
+                       damage => 8,
+                       dps => 10,
+                       cooldown => 0.8,
+               },
+               air => 'ground',
+               range => 6,
+       },
+       speed => 0,
+       sight => 7,
+       upgrade => [
+               {
+                       attack => {
+                               range => 1,
+                       },
+               },
+       ],
+},
+
+{
+       race => 'terran',
+       cat => 'base',
+       name => 'Point Defense Drone',
+       unit => 0,
+       min => 0,
+       build => 0,
+       size => 1.2,
+       cargo => 0,
+       armor => 0,
+       hp => 50,
+       suit => 1, # light
+       organic => 0, # mech
+       structure => 1,
+       cooldown => 0,
+       attack => {
+               range => 8,
+       },
+       sight => 7,
+       upgrade => [
+               {
+                       attack => {
+                               range => 1,
+                       },
+               },
+       ],
+},
+
+# zerg
+
+{
+       race => 'zerg',
+       cat => 'creep',
+       name => 'Larva',
+       unit => 0,
+       min => 0,
+       build => 15,
+       size => 0.25,
+       cargo => 0,
+       armor => 10,
+       hp => 25,
+       suit => 1, # light
+       organic => 1,
+       speed => 0.5625,
+       creep => 1.0,
+       sight => 5,
+},
+
+{
+       race => 'zerg',
+       cat => 'base',
+       name => 'Drone',
+       unit => 1,
+       min => 50,
+       gas => 0,
+       build => 17,
+       size => 0.75,
+       cargo => 1,
+       armor => 0,
+       hp => 40,
+       suit => 1, # light
+       organic => 1,
+       attack => {
+               ground => {
+                       damage => 5,
+                       dps => 3.3,
+                       cooldown => 1.5,
+               },
+               range => 0,
+       },
+       speed => 2.8125,
+       creep => 1.0,
+       sight => 8,
+},
+
+{
+       race => 'zerg',
+       cat => 'base',
+       name => 'Queen',
+       unit => 2,
+       min => 150,
+       gas => 0,
+       build => 50,
+       size => 1.75,
+       cargo => 2,
+       armor => 1,
+       hp => 175,
+       organic => 1,
+       psionic => 1,
+       attack => {
+               ground => {
+                       damage => [4 .. 7], # x2
+                       dps => [8, 10, 12, 14],
+                       cooldown => 1.0,
+                       type => 'projectile',
+                       range => 5,
+               },
+               air => {
+                       damage => [9 .. 12],
+                       dps => [9 .. 12],
+                       cooldown => 1.0,
+                       type => 'projectile',
+                       range => 7,
+               },
+       },
+       speed => 0.9375,
+       creep => 2.7,
+       sight => 9,
+},
+
+{
+       race => 'zerg',
+       cat => 'base',
+       name => 'Zergling',
+       unit => 0.5,
+       min => 25,
+       gas => 0,
+       build => 24,
+       size => 0.75,
+       cargo => 1,
+       armor => 0,
+       hp => 35,
+       suit => 1, # light
+       organic => 1,
+       attack => {
+               ground => {
+                       damage => [5 .. 8],
+                       dps => [7.2, 8.6, 10.0, 11.4],
+                       cooldown => 0.696,
+               },
+       },
+       speed => 2.9531,
+       creep => 1.3,
+       range => 0,
+       sight => 8,
+       upgrade => [
+               {
+                       attack => {
+                               ground => {
+                                       dps => [8.5, 10.2, 11.9, 13.6],
+                                       cooldown => 0.587,
+                               },
+                       },
+               },
+               {
+                       speed => 1.746,
+               },
+       ],
+},
+
+{
+       race => 'zerg',
+       cat => 'base',
+       name => 'Baneling',
+       unit => 0.5,
+       min => 25,
+       gas => 25,
+       build => 20,
+       size => 0.75,
+       cargo => 2,
+       armor => 0,
+       hp => 30,
+       organic => 1,
+       attack => {
+               ground => {
+                       damage => [20, 22, 24, 26],
+                       #bonus => +15 (+2)L / +60 (+3)S,
+                       splash => 1,
+               },
+               range => 0,
+       },
+       speed => 2.5,
+       creep => 1.3,
+       sight => 8,
+       upgrade => [
+               {
+                       speed => 0.4531,
+               },
+       ],
+},
+
+{
+       race => 'zerg',
+       cat => 'hatchery',
+       name => 'Roach',
+       unit => 2,
+       min => 75,
+       gas => 25,
+       build => 27,
+       size => 1,
+       cargo => 2,
+       armor => 1,
+       hp => 145,
+       suit => 3, # armored
+       organic => 1,
+       attack => {
+               ground => {
+                       damage => [16, 18, 20, 22],
+                       dps => [8 .. 11],
+                       cooldown => 2.0,
+               },
+       },
+       speed => 2.25,
+       creep => 1.3,
+       range => 4,
+       sight => 9,
+       upgrade => [
+               {
+                       speed => 0.75,
+               },
+       ],
+},
+
+{
+       race => 'zerg',
+       cat => 'lair',
+       name => 'Hydralisk',
+       unit => 2,
+       min => 100,
+       gas => 50,
+       build => 33,
+       size => 1.25,
+       cargo => 2,
+       armor => 0,
+       hp => 80,
+       suit => 1, # light
+       organic => 1,
+       attack => {
+               ground => {
+                       damage => [12 .. 15],
+                       dps => [16, 17.3, 18.6, 19.9],
+                       type => 'projectile',
+                       cooldown => 0.75,
+               },
+               air => 'ground',
+               range => 5,
+       },
+       speed => 2.25,
+       creep => 1.5,
+       sight => 9,
+       upgrade => [
+               {
+                       speed => 0.5625,
+                       creep => -0.302,
+               },
+               {
+                       attack => {
+                               range => 1,
+                       },
+               },
+       ],
+},
+
+{
+       race => 'zerg',
+       cat => 'lair',
+       name => 'Infestor',
+       unit => 2,
+       min => 100,
+       gas => 150,
+       build => 50,
+       size => 1.5,
+       cargo => 2,
+       armor => 0,
+       hp => 90,
+       suit => 3, # armored
+       organic => 1,
+       psionic => 1,
+       speed => 2.25,
+       creep => 1.3,
+       sight => 10,
+},
+
+{
+       race => 'zerg',
+       cat => 'lair',
+       name => 'Infested Terran',
+       unit => 0,
+       min => 0,
+       build => 5,
+       size => 0.75,
+       cargo => 0,
+       armor => 0,
+       hp => 50,
+       suit => 1, # light
+       organic => 1,
+       attack => {
+               ground => {
+                       damage => 8,
+                       dps => 9.3,
+                       cooldown => 0.8608,
+               },
+               air => 'ground',
+               range => 5,
+       },
+       speed => 0.9375,
+       creep => 1.3,
+       sight => 9,
+},
+
+{
+       race => 'zerg',
+       cat => 'lair',
+       name => 'Swarm Host',
+       unit => 3,
+       min => 200,
+       gas => 100,
+       build => 40,
+       size => 1.625,
+       cargo => 4,
+       armor => 1,
+       hp => 160,
+       suit => 3, # armored
+       organic => 1,
+       attack => {
+               ground => {
+                       dps => [27.9, 30.2, 32.5, 34.8],
+                       type => 'projectile',
+                       cooldown => 0.86,
+               },
+       },
+       speed => 2.25,
+       creep => 1.3,
+       sight => 10,
+},
+
+{
+       race => 'zerg',
+       cat => 'lair',
+       name => 'Locust',
+       unit => 0,
+       min => 0,
+       build => 5,
+       size => 0.75,
+       cargo => 0,
+       armor => 0,
+       hp => 65,
+       suit => 1, # light
+       organic => 1,
+       attack => {
+               ground => {
+                       damage => [12 .. 15],
+                       dps => [14.0, 15.2, 16.4, 17.6],
+                       type => 'projectile',
+                       cooldown => 0.86,
+               },
+               range => 3,
+       },
+       speed => 1.875,
+       creep => 1.4,
+       sight => 6,
+},
+
+{
+       race => 'zerg',
+       cat => 'hive',
+       name => 'Ultralisk',
+       unit => 6,
+       min => 300,
+       gas => 200,
+       build => 55,
+       size => 2,
+       cargo => 8,
+       armor => 1,
+       hp => 500,
+       suit => 3, # armored
+       organic => 1,
+       massive => 1,
+       attack => {
+               ground => {
+                       damage => [35, 38, 41, 44],
+                       dps => [40.7, 44.2, 47.7, 51.2],
+                       splash => 1,
+                       cooldown => 0.861,
+               },
+               range => 1,
+       },
+       speed => 2.9531,
+       creep => 1.3,
+       sight => 9,
+       upgrade => [
+               {
+                       armor => 2,
+               },
+       ],
+},
+
+{
+       race => 'zerg',
+       cat => 'base',
+       name => 'Overlord',
+       unit => -9,
+       min => 100,
+       gas => 0,
+       build => 25,
+       size => 0,
+       cargo => -8,
+       armor => 0,
+       hp => 200,
+       suit => 3, # armored
+       organic => 1,
+       speed => 0.586,
+       creep => 0,
+       sight => 11,
+       upgrade => [
+               {
+                       speed => 1.294,
+               },
+       ],
+},
+
+{
+       race => 'zerg',
+       cat => 'base',
+       name => 'Overseer',
+       unit => -9,
+       min => 50,
+       gas => 50,
+       build => 17,
+       size => 0,
+       cargo => 0,
+       armor => 1,
+       hp => 200,
+       suit => 3, # armored
+       organic => 1,
+       speed => 1.875,
+       creep => 0,
+       sight => 11,
+       upgrade => [
+               {
+                       speed => 0.875,
+               },
+       ],
+},
+
+{
+       race => 'zerg',
+       cat => 'base',
+       name => 'Changeling',
+       unit => 0,
+       min => 0,
+       build => 1,
+       size => 0.75,
+       cargo => 0,
+       armor => 0,
+       hp => 5,
+       suit => 1, # light
+       organic => 1,
+       speed => 2.25,
+       creep => 1.0,
+       sight => 8,
+},
+
+{
+       race => 'zerg',
+       cat => 'lair',
+       name => 'Mutalisk',
+       unit => 2,
+       min => 100,
+       gas => 100,
+       build => 33,
+       size => 0,
+       cargo => 0,
+       armor => 0,
+       hp => 120,
+       suit => 1, # light
+       organic => 1,
+       attack => {
+               ground => {
+                       damage => [9 .. 12],
+                       dps => [5.9, 6.6, 7.3, 8.0],
+                       splash => 'bounce',
+                       psionic => 1,
+                       cooldown => 1.5246,
+               },
+               air => 'ground',
+               range => 3,
+       },
+       speed => 4,
+       sight => 11,
+},
+
+{
+       race => 'zerg',
+       cat => 'lair',
+       name => 'Corruptor',
+       unit => 2,
+       min => 150,
+       gas => 100,
+       build => 40,
+       size => 0,
+       cargo => 0,
+       armor => 2,
+       hp => 200,
+       suit => 3, # armored
+       organic => 1,
+       attack => {
+               air => {
+                       damage => [14 .. 17],
+                       #bonus => +6 (+1)Ma,
+                       dps => [7.4, 7.9, 8.4, 8.9],
+                       type => 'projectile',
+                       cooldown => 1.9,
+               },
+               range => 6,
+       },
+       speed => 2.9531,
+       sight => 10,
+},
+
+{
+       race => 'zerg',
+       cat => 'hive',
+       name => 'Viper',
+       unit => 3,
+       min => 100,
+       gas => 200,
+       build => 40,
+       size => 0,
+       cargo => 0,
+       armor => 1,
+       hp => 150,
+       suit => 3, # armored
+       organic => 1,
+       psionic => 1,
+       speed => 2.9531,
+       sight => 11,
+},
+
+{
+       race => 'zerg',
+       cat => 'hive',
+       name => 'Brood Lord',
+       unit => 4,
+       min => 150,
+       gas => 150,
+       build => 34,
+       size => 0,
+       cargo => 0,
+       armor => 1,
+       hp => 225,
+       suit => 3, # armored
+       organic => 1,
+       massive => 1,
+       attack => {
+               ground => {
+                       damage => [20, 22, 24, 26],
+                       dps => [8.0, 8.8, 9.6, 10.4],
+                       cooldown => 2.5,
+               },
+               range => 9.5,
+       },
+       speed => 1.4062,
+       sight => 12,
+},
+
+{
+       race => 'zerg',
+       cat => 'hive',
+       name => 'Broodling',
+       unit => 0,
+       min => 0,
+       build => 1,
+       size => 0.75,
+       cargo => 0,
+       armor => 0,
+       hp => 30,
+       suit => 1, # light
+       organic => 1,
+       attack => {
+               ground => {
+                       damage => [4 .. 7],
+                       dps => [6.2, 7.7, 9.2, 10.7],
+                       cooldown => 0.6455,
+               },
+               range => 0,
+       },
+       speed => 3.836,
+       creep => 1.0,
+       sight => 7,
+},
+
+{
+       race => 'zerg',
+       cat => 'creep',
+       name => 'Spine Crawler',
+       unit => 0,
+       min => 100,
+       gas => 0,
+       build => 50,
+       size => 2x2,
+       cargo => 0,
+       armor => 2,
+       hp => 300,
+       suit => 3, # armored
+       organic => 1,
+       structure => 1,
+       attack => {
+               ground => {
+                       damage => 25,
+                       #bonus => +5A,
+                       dps => 13.5,
+                       cooldown => 1.85,
+               },
+               range => 7,
+       },
+       speed => (1.0),
+       creep => 2.5,
+       sight => 11,
+},
+
+{
+       race => 'zerg',
+       cat => 'creep',
+       name => 'Spore Crawler',
+       unit => 0,
+       min => 75,
+       gas => 0,
+       build => 30,
+       size => 2x2,
+       cargo => 0,
+       armor => 1,
+       hp => 400,
+       suit => 3, # armored
+       organic => 1,
+       structure => 1,
+       attack => {
+               air => {
+                       damage => 15,
+                       #bonus => + 30 B,
+                       dps => 17.4,
+                       type => 'projectile',
+                       cooldown => 0.8608,
+               },
+               range => 7,
+       },
+       speed => (1.0),
+       creep => 2.5,
+       sight => 11,
+},
+
+{
+       race => 'zerg',
+       cat => 'lair',
+       name => 'Nydus Worm',
+       unit => 0,
+       min => 100,
+       gas => 100,
+       build => 20,
+       size => 3x3,
+       cargo => 0,
+       armor => 1,
+       hp => 200,
+       suit => 3, # armored
+       organic => 1,
+       structure => 1,
+       speed => 0,
+       sight => 10,
+},
+
+]