4 my $RT = 1.4; # real-time speed factor to faster
6 my $hots = do 'sc-units-hots.inc.pl' or die $!;
8 for my $row (@{$hots}) {
9 ref $row eq 'HASH' or next;
10 for ($row, @{ $row->{special} }, @{ $row->{upgrade} }) {
11 $_ *= $RT for $_->{speed} // ();
12 $_ /= $RT for $_->{build} // (), $_->{transform} // (), $_->{warp} // (), $_->{cooldown} // ();
13 $_->{cooldown} and $_->{cooldown} /= $RT for @{ $_->{attack} // [] };
15 $unit{ lc $row->{name} =~ tr/ /_/r } = $row;
28 %{ $unit{mothership} },
40 desc => 'on attack, increases movement speed to 8.47 for 2.5s and deals 8 damage on hit',
41 min => 100, # changed in 3.14.0
64 %{ $unit{stalker}->{attack}->[0] }, # particle disruptors
103 type => 'projectile', #XXX: assumption
112 name => 'Psionic Transfer',
114 desc => 'project shade, teleport after 7s',
122 attack => [], #TODO: indicate diff from parent
123 speed => 5, #XXX: faster than 3.5
124 range => 7, #XXX: calculate from speed
130 name => 'Resonating Glaives',
136 cooldown => -.5, # +45%
144 %{ $unit{high_templar} },
162 %{ $unit{warp_prism} },
166 %{ $unit{warp_prism}->{special}->[0] }, # gravitic drive
175 %{ $unit{colossus} },
178 %{ $unit{colossus}->{attack}->[0] }, # thermal lances
185 # cooldown => 1.18, #XXX
210 name => 'Purification Nova',
215 type => 'trans', #TODO: indicate
228 %{ $unit{void_ray} },
237 %{ $unit{oracle}->{attack}->[0] }, # pulsar beam
245 name => 'Revelation',
247 desc => 'hit enemy units and buildings are revealed for ½ minute',
255 name => 'Stasis Ward',
257 desc => 'places ward for 170s',
262 alt => 'Stasis Ward',
274 name => 'Permanent Cloak',
276 desc => 'cloaked at all times',
280 name => 'Stasis Trap',
282 desc => 'triggered by nearby ground units, trapping them for 21½s',
295 %{ $unit{tempest}->{attack}->[0] }, # kinetic overload
302 %{ $unit{tempest}->{attack}->[1] }, # resonance coil
314 %{ $unit{carrier}->{special}->[0] }, # interceptor
324 $unit{missile_turret},
325 $unit{planetary_fortress},
330 %{ $unit{marauder} },
333 %{ $unit{marauder}->{attack}->[0] }, # punisher grenades
357 # replaces Sniper Round
358 name => 'Steady Targeting',
360 desc => '170 damage ignoring armor to a biological unit after 1.43s without damage',
365 $unit{ghost}->{special}->[1], # emp round
366 $unit{ghost}->{special}->[2], # cloak
367 $unit{ghost}->{special}->[3], # tac nuke strike
375 %{ $unit{hellion}->{attack}->[0] }, # infernal flamethrower
388 $unit{hellbat}->{special}->[0], # Hellion Mode
390 name => 'Smart Servos',
394 transform => -1.43, # halve #TODO: alter special duration?
400 %{ $unit{widow_mine} },
404 %{ $unit{widow_mine}->{attack}->[0] }, # Sentinel Missiles
413 %{ $unit{siege_tank} },
417 %{ $unit{siege_tank}->{special}->[0] }, # siege mode
420 %{ $unit{siege_tank}->{special}->[0]->{attack}->[0] }, # shock cannon
453 name => 'Typhoon Blaster',
470 desc => 'target air for 160 damage ignoring armor while visible and within 15 range',
476 name => 'Rapid Fire Launchers',
478 desc => 'rapid first 12 Lock On shots',
490 $unit{thor}->{attack}->[0],
491 $unit{thor}->{attack}->[1],
493 %{ $unit{thor}->{attack}->[2] }, # high impact
529 name => 'Lexington Rockets',
532 type => 'projectile',
540 name => 'Defender Mode',
542 transform => 2.88, # 1.46s to revert
543 alt => 'Defender Liberator',
547 name => 'Concord Cannon',
548 desc => 'within 5 diameter circle',
556 sight => 15, # only targeted area
559 name => 'Advanced Ballistics',
584 %{ $unit{raven}->{special}->[0] }, # auto-turret
588 name => '12 mm Gauss Cannon',
597 $unit{raven}->{special}->[0]->{upgrade}->[0], # hi-sec auto tracking
598 $unit{raven}->{special}->[0]->{upgrade}->[1], # structure armor
599 # no more durable materials
603 name => 'Interference Matrix',
605 desc => 'disable target mech or psionic unit rendering it unable to attack or cast',
611 name => 'Anti-Armor Missile',
613 desc => 'launches missile to do 30 splash damage and reduces armor by 3',
628 $unit{battlecruiser},
637 $unit{queen}->{attack}->[0], # claws
639 %{ $unit{queen}->{attack}->[1] }, # acid spines
647 %{ $unit{overlord} },
648 speed => .902, # changed in 4.0.0
651 %{ $unit{overlord}->{upgrade}->[0] }, # carapace
654 $unit{overlord}->{upgrade}->[1], # sacs
661 $unit{spine_crawler},
664 %{ $unit{spore_crawler} },
667 %{ $unit{spore_crawler}->{attack}->[0] }, # seeker spores
680 %{ $unit{baneling} },
684 %{ $unit{baneling}->{upgrade}->[0] }, # centrifugal hooks
714 type => 'projectile',
725 %{ $unit{hydralisk} },
729 %{ $unit{hydralisk}->{upgrade}->[0] }, # grooved spines
736 $unit{hydralisk}->{upgrade}->[1], # muscular augments
744 base => ['Hydralisk'],
780 %{ $unit{swarm_host} },
784 %{ $unit{swarm_host}->{special}->[0] }, # locust
786 upgrade => [], # no flying
798 %{ $unit{ultralisk} },