5 my $RT = 1.4; # real-time speed factor to faster
7 my $hots = do 'sc-units-hots.inc.pl' or die $!;
9 for my $row (@{$hots}) {
10 ref $row eq 'HASH' or next;
11 for ($row, @{ $row->{special} }, @{ $row->{upgrade} }) {
12 $_ *= $RT for $_->{speed} // ();
13 $_ /= $RT for $_->{build} // (), $_->{transform} // (), $_->{warp} // (), $_->{cooldown} // ();
14 $_->{cooldown} and $_->{cooldown} /= $RT for @{ $_->{attack} // [] };
16 $unit{ lc $row->{name} =~ tr/ /_/r } = $row;
20 sprintf('patch %vd', $V),
29 %{ $unit{mothership} },
32 $unit{mothership}->{special}->[0], # cf
33 $unit{mothership}->{special}->[1], # mr
35 %{ $unit{mothership}->{special}->[2] }, # tw
36 desc => $V lt v4.11.0 ? 'create a temporal field which slows ground units by 50%'
37 : 'create a temporal field which slows ground and air units by 50%',
48 $unit{nexus}->{special}->[0], # chrono boost
50 name => $V lt v4.7.1 ? 'Mass Recall' : 'Strategic Recall',
52 desc => 'recalls units owned by the player in the target area to the Nexus',
54 cooldown => $V lt v4.7.1 || $V ge v4.10.1 ? 130 : 85,
55 radius => $V lt v4.7.1 ? 6.5 : 2.5,
56 duration => 3.6, # +.7 warp in
58 $V lt v4.12.0 ? () : {
59 name => 'Battery Overcharge',
62 'increase target Shield Battery restoration rate by %d%% and function without consuming energy for 14s',
63 $V ge v5.0.11 ? 50 : 100,
67 cooldown => 60, # shared by all nexuses
68 range => 8, # within any friendly nexus
79 desc => 'on attack, increases movement speed to 8.47 for 2.5s and deals 8 damage on hit',
80 min => 100, # changed in 3.14.0
92 speed => $V lt v4.11.0 ? .98 : 1.57,
99 build => $V ge v5.0.11 ? 22.9 : 26.4,
100 speed => $V ge v5.0.11 ? 3.5 : 3.15,
102 $unit{sentry}->{special}->[0], # ff
104 %{ $unit{sentry}->{special}->[1] }, # gs
105 radius => $V lt v4.7.1 ? 4 : 4.5,
108 %{ $unit{sentry}->{special}->[2] }, # hl
109 cost => $V lt v4.7.1 ? 100 : 75,
118 %{ $unit{stalker}->{attack}->[0] }, # particle disruptors
136 build => $V lt v4.8.2 ? 27 : 30,
157 type => 'projectile', #XXX: assumption
166 name => 'Psionic Transfer',
168 desc => 'project shade, teleport after 7s',
176 attack => [], #TODO: indicate diff from parent
177 speed => 5, #XXX: faster than 3.5
178 range => 7, #XXX: calculate from speed
184 name => 'Resonating Glaives',
190 cooldown => $V lt v4.11.0 || $V ge v4.11.3 ? -.5 : -.6, # +45%/60%
198 %{ $unit{high_templar} },
199 speed => $V ge v5.0.11 ? 2.82 : 2.63,
212 $unit{high_templar}->{special}->[0], # fb
213 range => $V lt v4.12.0 ? 9 : 10,
215 $unit{high_templar}->{special}->[1], # ps
220 %{ $unit{dark_templar} },
222 $unit{dark_templar}->{special}->[0], # cl
224 name => 'Shadow Stride',
226 desc => sprintf('teleport to visible location, %.2fs attack delay afterwards', $V ge v5.0.11 ? .71 : .75),
229 build => $V lt v4.7.1 ? 121 : 100,
231 cooldown => $V lt v4.7.1 ? 21 : 14,
239 %{ $unit{observer} },
240 speed => $V ge v5.0.11 ? 2.82 : $V lt v4.8.2 || $V ge v4.11.0 ? 2.63 : 3.01,
241 size => $V ge v5.0.11 ? 1.1 : 1,
243 $unit{observer}->{special}->[0], # cloak
245 name => 'Surveillance Mode',
247 desc => 'gain 25% vision while immobilized',
249 sight => 2.75, # +25%
256 %{ $unit{warp_prism} },
258 min => $V lt v4.10.1 ? 200 : 250,
259 range => $V lt v4.10.1 ? 6 : 5, # pickup
262 %{ $unit{warp_prism}->{special}->[0] }, # gravitic drive
271 %{ $unit{colossus} },
274 %{ $unit{colossus}->{attack}->[0] }, # thermal lances
281 # cooldown => 1.18, #XXX
306 name => 'Purification Nova',
311 type => 'trans', #TODO: indicate
312 splash => $V ge v5.0.11 ? 1.375 : 1.5,
324 %{ $unit{void_ray} },
325 min => $V lt v5.0.9 && $V ge v5.0.2 ? 200 : 250,
326 speed => $V lt v5.0.2 ? 3.5 : 3.85,
327 build => $V lt v5.0.9 && $V ge v5.0.2 ? 37 : 43,
330 name => 'Flux Vanes',
334 speed => $V lt v5.0.2 ? 1.15 : .798,
343 $V lt v4.8.2 ? 'light' : 'armored' => 1,
350 %{ $unit{oracle}->{attack}->[0] }, # pulsar beam
358 name => 'Revelation',
360 desc => 'hit enemy units and buildings are revealed for ½ minute',
361 cost => $V lt v4.12.0 ? 50 : 25,
363 cooldown => $V lt v4.12.0 ? 2 : 10,
364 duration => $V lt v4.12.0 ? 30 : $V lt v5.0.2 ? 15 : 20,
368 name => 'Stasis Ward',
370 desc => 'places ward for 170s',
375 alt => 'Stasis Ward',
387 name => 'Permanent Cloak',
389 desc => 'cloaked at all times',
393 name => 'Stasis Trap',
395 desc => 'triggered by nearby ground units, trapping them for 21½s',
404 hp => $V lt v4.7.1 ? 300 : $V lt v4.11.0 ? 150 : 200,
405 shield => $V lt v4.7.1 ? 150 : $V lt v4.11.0 ? 125 : 100,
406 min => $V lt v4.7.1 ? 300 : 250,
407 gas => $V lt v4.7.1 ? 200 : 175,
408 pop => $V lt v4.7.1 ? 6 : 5,
409 speed => $V lt v4.7.1 ? 2.63 : $V lt v4.8.2 ? 3.5 : 3.15,
412 %{ $unit{tempest}->{attack}->[0] }, # kinetic overload
417 range => $V lt v4.11.0 ? 15 : 14,
420 %{ $unit{tempest}->{attack}->[1] }, # resonance coil
429 $V lt v5.0.2 ? () : {
430 name => 'Tectonic Destabilizers',
448 hp => $V lt v4.7.1 ? 250 : 300,
449 build => $V lt v4.7.1 ? 86 : 64,
452 %{ $unit{carrier}->{special}->[0] }, # interceptor
454 build => $V lt v4.7.1 ? 6 : $V lt v4.10.1 ? 11 : 9,
457 $V lt v4.7.1 ? () : (upgrade => []), # remove Graviton Catapult
464 $unit{missile_turret},
465 $unit{planetary_fortress},
470 %{ $unit{marauder} },
473 %{ $unit{marauder}->{attack}->[0] }, # punisher grenades
474 count => $V lt v4.3.0 ? 2 : 1,
475 damage => $V lt v4.3.0 ? 5 : 10,
478 armored => $V lt v4.3.0 ? 5 : 10,
479 -armored => $V lt v4.3.0 ? 0 : 1,
497 # replaces Sniper Round
498 name => 'Steady Targeting',
500 desc => '170 damage ignoring armor to a biological unit after 1.43s without damage',
502 range => 10, # kept until 14
506 %{ $unit{ghost}->{special}->[1] }, # emp round
507 radius => $V ge v5.0.11 ? 1.75 : $V lt v4.10.1 ? 1.5 : 2,
509 $unit{ghost}->{special}->[2], # cloak
510 $unit{ghost}->{special}->[3], # tac nuke strike
513 $V ge v5.0.11 || $V lt v4.10.1 ? () : {
514 name => 'Enhanced Shockwaves',
520 { radius => .5 }, # emp
532 %{ $unit{hellion}->{attack}->[0] }, # infernal flamethrower
545 $unit{hellbat}->{special}->[0], # Hellion Mode
547 name => 'Smart Servos',
551 transform => -1.43, # halve #TODO: alter special duration?
557 %{ $unit{widow_mine} },
561 %{ $unit{widow_mine}->{attack}->[0] }, # Sentinel Missiles
565 transform => $V lt v5.0.9 ? .71 : 1.07,
571 %{ $unit{siege_tank} },
575 %{ $unit{siege_tank}->{special}->[0] }, # siege mode
578 %{ $unit{siege_tank}->{special}->[0]->{attack}->[0] }, # shock cannon
603 hp => $V lt v4.7.1 ? 180 : 120,
611 name => $V lt v4.7.1 ? 'Tornado Blaster' : 'Typhoon Missile Pod',
612 damage => $V lt v4.7.1 ? 3 : 18,
613 upgrade => $V lt v4.7.1 ? 1 : 2,
614 bonus => $V ge v4.7.1 ? {} : {
618 cooldown => $V lt v4.7.1 ? .1 : .71,
619 range => $V lt v4.7.1 ? 6 : 5,
622 speed => $V lt v4.7.1 ? 4.13 : 4.73,
629 $V ge v5.0.11 ? 'deal 400 damage (600 after upgrade) over 14 seconds' :
630 $V ge v4.7.1 ? 'deal 400 damage (double to armored after upgrade) over 14 seconds' :
631 'target air for 160 damage ignoring armor while visible and within 15 range'
637 $V ge v4.7.1 ? () : {
638 name => 'Rapid Fire Launchers',
640 desc => 'rapid first 12 Lock On shots',
647 $V lt v4.7.1 ? () : {
648 name => 'Mag-Field Accelerator',
651 build => $V lt v4.8.2 ? 79 : 100,
652 desc => 'increases lock-on damage by '.($V ge v5.0.11 ? '50%' : '100% vs armored'),
659 armor => $V ge v3.14.0 && $V lt v4.7.1 ? 2 : 1,
661 $unit{thor}->{attack}->[0], # thor's hammer
662 $unit{thor}->{attack}->[1], # javelin missiles
664 %{ $unit{thor}->{attack}->[2] }, # punisher cannons
665 name => 'High Impact Payload',
666 damage => $V lt v4.7.1 ? 35 : $V lt v4.11.0 ? 40 : 25,
669 $V lt v4.7.1 ? 'armored' : 'massive' => $V lt v4.11.0 ? 15 : 10,
670 $V lt v4.7.1 ? '-armored' : '-massive' => 2,
672 cooldown => $V lt v4.7.1 ? 2.14 : $V lt v4.11.0 ? 1.71 : .9,
673 range => $V lt v4.8.2 ? 10 : 11,
681 hp => $V lt v4.3.0 ? 125 : 135,
687 $unit{medivac}->{special}->[0], # heal
689 %{ $unit{medivac}->{special}->[1] }, # ignite afterburners
690 desc => 'boost speed and accelleration to 4.25 for 8s',
692 duration => $V lt v4.7.1 ? 6.43 : 4.29,
693 cooldown => $V lt v4.11.0 ? 20 : 14,
699 name => 'Rapid Reignition System',
715 gas => $V ge v5.0.11 ? 125 : 150,
728 name => 'Lexington Rockets',
731 type => 'projectile',
739 name => 'Defender Mode',
741 transform => 2.88, # 1.46s to revert
742 alt => 'Defender Liberator',
746 name => 'Concord Cannon',
747 desc => 'within 5 diameter circle',
755 sight => 15, # only targeted area
758 name => 'Advanced Ballistics',
781 name => 'Hyperflight Rotors',
783 min => $V ge v5.0.11 ? 125 : $V ge v4.7.1 ? 150 : 200,
784 gas => $V ge v5.0.11 ? 125 : $V ge v4.7.1 ? 150 : 200,
785 build => $V ge v5.0.11 ? 100 : 121.4,
792 gas => $V ge v5.0.11 ? 150 : 200,
793 build => $V ge v5.0.11 ? 34.3 : 42.9,
794 speed => $V lt v4.11.0 ? 3.85 : 4.13,
795 upgrade => $V ge v5.0.11 ? [] : $unit{raven}->{upgrade}, # corvid reactor
798 %{ $unit{raven}->{special}->[0] }, # auto-turret
802 name => '12 mm Gauss Cannon',
808 hp => $V ge v5.0.11 ? 100 : 150,
809 armor => $V ge v5.0.11 ? 0 : 1,
810 range => $V lt v4.3.0 ? 1 : 2,
811 duration => $V ge v5.0.11 ? 7.9 : 10,
813 $unit{raven}->{special}->[0]->{upgrade}->[0], # hi-sec auto tracking
814 $unit{raven}->{special}->[0]->{upgrade}->[1], # structure armor
815 # no more durable materials
819 name => 'Interference Matrix',
821 desc => 'disable target mech or psionic unit rendering it unable to attack or cast',
822 cost => $V lt v4.11.0 ? 50 : 75,
824 duration => $V lt v4.11.0 ? 7.9 : 11,
827 name => 'Anti-Armor Missile',
829 desc => sprintf('launches missile %s reduce armor by %d',
830 $V lt v4.7.1 ? 'to do splash damage and' : 'to',
831 $V ge v5.0.11 ? 2 : 3,
837 damage => $V lt v4.3.0 ? 30 : $V lt v4.7.1 ? 15 : 0,
848 %{ $unit{battlecruiser} },
850 $unit{battlecruiser}->{attack}->[0], # ats laser
852 %{ $unit{battlecruiser}->{attack}->[1] }, # ata laser
853 damage => $V lt v4.7.1 ? 6 : 5,
858 name => 'Tactical Jump',
860 desc => 'warps to the target location after 5s (invulnerable after 1s)',
865 %{ $unit{battlecruiser}->{special}->[0] }, # yc
866 desc => '240 damage to a single target',
886 $unit{queen}->{attack}->[0], # claws
888 %{ $unit{queen}->{attack}->[1] }, # acid spines
889 range => $V lt v4.12.0 ? 8 : 7,
896 %{ $unit{overlord} },
897 speed => .902, # changed in 4.0.0
900 %{ $unit{overlord}->{upgrade}->[0] }, # carapace
903 $unit{overlord}->{upgrade}->[1], # sacs
908 %{ $unit{overseer} },
911 name => 'Oversight Mode',
913 desc => 'gain 25% vision while immobilized',
918 @{ $unit{overseer}->{special} }, # changeling, contaminate
923 $unit{spine_crawler},
926 %{ $unit{spore_crawler} },
929 %{ $unit{spore_crawler}->{attack}->[0] }, # seeker spores
942 %{ $unit{baneling} },
946 %{ $unit{baneling}->{attack}->[0] }, # volatile burst
947 damage => $V lt v4.12.0 ? 20 : $V lt v5.0.2 ? 18 : 15,
949 light => $V lt v4.12.0 ? 15 : $V lt v5.0.2 ? 17 : 20,
960 %{ $unit{baneling}->{upgrade}->[0] }, # centrifugal hooks
970 %{ $unit{roach}->{special}->[0] }, # rapid regeneration
971 desc => 'regenerates health at 7 HP/s while burrowed',
974 %{ $unit{roach}->{special}->[1] }, # tunneling claws
975 min => $V lt v4.7.1 ? 150 : 100,
976 gas => $V lt v4.7.1 ? 150 : 100,
978 desc => 'move while burrowed at speed of 2.8',
991 build => $V ge v5.0.11 ? 12.14 : 8.57+.36, # added max random
1005 type => 'projectile',
1016 %{ $unit{hydralisk} },
1020 %{ $unit{hydralisk}->{upgrade}->[0] }, # grooved spines
1027 $unit{hydralisk}->{upgrade}->[1], # muscular augments
1035 base => ['Hydralisk'],
1055 range => $V lt v4.11.0 ? 9 : 8,
1064 $V lt v4.11.0 ? () : {
1065 name => 'Seismic Spines',
1077 name => 'Adaptive Talons',
1078 desc => 'halves burrow time and increases movement speed',
1080 transform => $V lt v5.0.9 ? .71 : 1.07,
1089 %{ $unit{infestor} },
1092 %{ $unit{infestor}->{special}->[0] }, # neural parasite
1093 range => $V lt v4.11.0 ? 9 : 8,
1095 $unit{infestor}->{special}->[1], # fungal growth
1097 name => 'Microbial Shroud',
1099 desc => 'reduce damage from air by 50% to ground units in target area',
1100 cost => $V lt v4.11.3 ? 100 : 75,
1101 min => $V lt v4.11.3 ? 150 : undef,
1102 gas => $V lt v4.11.3 ? 150 : undef,
1103 build => $V lt v4.11.3 ? 79 : undef,
1104 req => $V lt v4.11.3 ? 'Hive' : undef,
1107 radius => $V lt v4.11.3 ? 3 : 3.5,
1109 $V ge v4.11.0 ? () : {
1110 %{ $unit{infestor}->{special}->[2] }, # infested terran
1113 %{ $unit{infestor}->{special}->[2]->{attack}->[0] }, # rockets
1114 cooldown => $V lt v4.10.1 ? .95 : 1.14,
1122 % {$unit{nydus_worm} },
1123 min => $V lt v4.7.1 ? 100 : $V lt v4.11.0 ? 50 : 75, # Nydus Network costs 150/150
1124 gas => $V lt v4.7.1 ? 100 : $V lt v4.11.0 ? 50 : 75,
1125 cooldown => $V lt v4.11.0 ? 0 : 14, # Summon Nydus Worm
1129 %{ $unit{swarm_host} },
1133 %{ $unit{swarm_host}->{special}->[0] }, # locust
1135 upgrade => [], # no flying
1145 %{ $unit{brood_lord} },
1146 speed => $V ge v5.0.11 ? 2.24 : 1.97,
1152 %{ $unit{ultralisk} },
1154 size => $V ge v5.0.11 ? 1.75 : 2,
1156 $unit{ultralisk}->{upgrade}->[0], # chitinous plating
1158 name => 'Anabolic Synthesis',
1162 speed => $V lt v4.8.2 ? .41 : .82,
1163 creep => -.215, # reverse speed increase