use utf8;
use strict;
-# time in fastest game seconds
-my $FPS = 24; # frames per second
-# toss shield += .65 per second
-# zerg regen += .37 per second
+my $PPT = 32; # tile size in pixels
+my $FPS = 1000 / 56; # frames per second on fast
+# energy += 8HP/frame ≈ .74 per second
+# toss shield += 7HP/frame ≈ .65/s
+# zerg regen += 4HP/frame ≈ .37/s
+my $SM = $FPS / $PPT; # pixels per frame to tiles per second multiplication
[
'<span title="no known changes as of v1.16.1">version≥1.08</span>',
gas => 0,
build => 20,
suit => 1,
+size => 23 / $PPT,
pop => 1,
cargo => 1,
race => 'protoss',
name => "Particle Beam",
damage => 5,
cooldown => 22 / $FPS,
- range => 0,
+ range => 1,
},
],
sight => 8,
-speed => 14,
+speed => 4.92 * $SM,
counter => ['vulture', 'dark templar'],
},
gas => 0,
build => 50,
suit => 3,
+size => 2, # 41x33
race => 'protoss',
attr => {
structure => 1,
attack => [
{
anti => 3,
+ name => 'STS/A Photon Cannon',
damage => 20,
cooldown => 22 / $FPS,
range => 7,
gas => 0,
build => 40,
suit => 1,
+size => 23 / $PPT, # x19
pop => 2,
cargo => 2,
race => 'protoss',
{
anti => 1,
name => "Psi Blades",
- damage => 16,
- upgrade => 2,
+ damage => 8,
+ count => 2,
+ upgrade => 1,
cooldown => 22 / $FPS,
- range => 0,
+ range => 15 / $PPT,
},
],
sight => 7,
-speed => 11,
+speed => 4 * $SM,
upgrade => [
{
name => 'Leg Enhancements',
- speed => 16 - 11,
+ speed => (6 - 4) * $SM,
min => 150,
gas => 150,
build => 133,
gas => 50,
build => 50,
suit => 3,
+size => 32 / $PPT,
pop => 2,
cargo => 4,
race => 'protoss',
},
],
sight => 8,
-speed => 15,
+speed => 5 * $SM,
upgrade => [
{
name => 'Singularity Charge',
gas => 150,
build => 50,
suit => 1,
+size => 24 / $PPT,
pop => 2,
cargo => 2,
race => 'protoss',
shield => 40,
armor => 0,
sight => 7,
-speed => 9,
+speed => 3.2 * $SM,
energy => 50,
capacity => 200,
upgrade => [
gas => 100,
build => 50,
suit => 1,
+size => 25 / $PPT, # 24x26
pop => 2,
cargo => 2,
race => 'protoss',
damage => 40,
upgrade => 3,
cooldown => 30 / $FPS,
- range => 0,
+ range => 15 / $PPT,
},
],
sight => 7,
-speed => 15,
+speed => 4.92 * $SM,
special => [
{
name => 'Cloaked',
build => 20,
base => ['templar', 'templar'],
suit => 3,
+size => 32 / $PPT,
pop => 4,
cargo => 4,
race => 'protoss',
},
],
sight => 8,
-speed => 14,
+speed => 4.92 * $SM,
},
{
build => 20,
base => ['dark templar', 'dark templar'],
suit => 3,
+size => 32 / $PPT,
pop => 4,
cargo => 4,
race => 'protoss',
shield => 200,
armor => 1,
sight => 10,
-speed => 14,
+speed => 4.92 * $SM,
energy => 50,
capacity => 200,
upgrade => [
gas => 125,
build => 80,
suit => 3,
+size => 36 / $PPT, # x32
pop => 3,
race => 'protoss',
attr => {
attack => [
{
anti => 1,
+ name => 'Dual Photon Blasters',
damage => 8,
upgrade => 1,
cooldown => 30 / $FPS,
},
{
anti => 2,
- damage => 28,
- upgrade => 2,
+ name => 'Anti-Matter Missiles',
+ damage => 14,
+ count => 2,
+ upgrade => 1,
type => 'explosive',
cooldown => 22 / $FPS,
range => 4,
},
],
sight => 8,
-speed => 13,
+speed => 5 * $SM,
upgrade => [
{
name => 'Apial Sensors',
min => 200,
gas => 200,
build => 166,
- speed => 18 - 13,
+ speed => (6.67 - 5) * $SM,
},
],
},
gas => 100,
build => 40,
suit => 2,
+size => 36 / $PPT, # x32
pop => 2,
race => 'protoss',
attr => {
attack => [
{
anti => 2,
+ name => 'Neutron Flare',
damage => 5,
upgrade => 1,
cooldown => 8 / $FPS,
},
],
sight => 9,
-speed => 17,
+speed => 6.67 * $SM,
energy => 50,
capacity => 200,
upgrade => [
gas => 250,
build => 140,
suit => 3,
+size => 64 / $PPT,
pop => 6,
race => 'protoss',
attr => {
},
],
sight => 11,
-speed => 10,
+speed => 3.33 * $SM,
special => [
{
name => 'Build Interceptor',
min => 25,
build => 20,
suit => 1,
+ size => 16 / $PPT,
pop => 0,
race => 'protoss',
attr => {
attack => [
{
anti => 3,
+ name => 'Pulse Cannon',
damage => 6,
upgrade => 1,
cooldown => 43 / $FPS, # approximately 37 according to liquipedia
build => 20,
- range => 0,
+ range => 4,
},
],
- sight => 0,
- range => 0,
+ sight => 6,
+ speed => 13.33 * $SM,
},
],
upgrade => [
gas => 350,
build => 160,
suit => 3,
+size => 44 / $PPT,
pop => 4,
race => 'protoss',
attr => {
attack => [
{
anti => 3,
+ name => 'Phase Disruptor Cannon',
damage => 10,
upgrade => 1,
cooldown => 45 / $FPS,
},
],
sight => 9,
-speed => 12,
+speed => 5 * $SM,
energy => 50,
capacity => 200,
upgrade => [
gas => 100,
build => 70,
suit => 3,
+size => 32 / $PPT,
pop => 4,
cargo => 4,
race => 'protoss',
{
anti => 1,
damage => 100,
- cooldown => 60 / $FPS,
+ cooldown => 60 / $FPS, # 30 after drop
splash => 1,
min => 15,
build => 7,
},
],
sight => 10,
-speed => 5,
+speed => 1.78 * $SM,
upgrade => [
{
name => 'Scarab Damage',
gas => 75,
build => 40,
suit => 1,
+size => 32 / $PPT,
pop => 1,
race => 'protoss',
attr => {
armor => 0,
sight => 9,
detect => 1,
-speed => 9,
+speed => 3.33 * $SM,
upgrade => [
{
name => "Sensor Array",
min => 150,
gas => 150,
build => 166,
- speed => 13 - 9,
+ speed => (5 - 3.33) * $SM,
},
],
special => [
gas => 0,
build => 60,
suit => 3,
+size => 40 / $PPT, # x32
pop => 2,
cargo => -8,
race => 'protoss',
shield => 60,
armor => 1,
sight => 8,
-speed => 13,
+speed => 4.43 * $SM,
transport => 1,
upgrade => [
{
min => 200,
gas => 200,
build => 166,
- speed => 19 - 13,
+ speed => (6.67 - 4.43) * $SM,
}
],
},
gas => 0,
build => 20,
suit => 1,
+size => 23 / $PPT,
pop => 1,
cargo => 1,
race => 'terran',
attack => [
{
anti => 1,
+ name => 'Fusion Cutter',
damage => 5,
cooldown => 15 / $FPS,
- range => 0,
+ range => 10 / $PPT,
},
],
sight => 7,
-speed => 15,
+speed => 4.92 * $SM,
},
{
gas => 0,
build => 30,
suit => 3,
+size => 2, # 33x49
race => 'terran',
attr => {
structure => 1,
attack => [
{
anti => 2,
+ name => 'Longbolt Missile',
damage => 20,
cooldown => 15 / $FPS,
type => 'explosive',
gas => 0,
build => 24,
suit => 1,
+size => 17 / $PPT, # x20
pop => 1,
cargo => 1,
race => 'terran',
attack => [
{
anti => 3,
+ name => 'Gauss Rifle',
damage => 6,
upgrade => 1,
cooldown => 15 / $FPS,
},
],
sight => 7,
-speed => 11,
+speed => 4 * $SM,
upgrade => [
{
name => 'U-238 Shells',
gas => 100,
build => 80,
desc => 'doubles attack speed and faster movement for a few seconds at the cost of 10 health',
- speed => 17,
+ speed => (6 - 4) * $SM,
attack => [
{
anti => 3,
gas => 25,
build => 24,
suit => 1,
+size => 23 / $PPT, # x22
pop => 1,
cargo => 1,
race => 'terran',
attack => [
{
anti => 1,
+ name => 'Flame Thrower',
damage => 16,
upgrade => 2,
cooldown => 22 / $FPS,
splash => 1,
type => 'implosive',
- range => 2,
+ range => 1,
},
],
sight => 7,
-speed => 11,
+speed => 4 * $SM,
upgrade => [
],
special => [
gas => 100,
build => 80,
desc => 'doubles attack speed and faster movement for a few seconds at the cost of 10 health',
- speed => 17,
+ speed => (6 - 4) * $SM,
attack => [
{
anti => 1,
gas => 75,
build => 50,
suit => 1,
+size => 15 / $PPT, # x22
pop => 1,
cargo => 1,
race => 'terran',
attack => [
{
anti => 3,
+ name => 'C-10 Canister Rifle',
damage => 10,
upgrade => 1,
cooldown => 22 / $FPS,
},
],
sight => 9,
-speed => 11,
+speed => 4 * $SM,
energy => 50,
capacity => 200,
upgrade => [
gas => 25,
build => 30,
suit => 1,
+size => 17 / $PPT, # x20
pop => 1,
cargo => 1,
race => 'terran',
hp => 60,
armor => 1,
sight => 9,
-speed => 11,
+speed => 4 * $SM,
energy => 50,
capacity => 200,
upgrade => [
gas => 0,
build => 30,
suit => 2,
+size => 32 / $PPT,
pop => 2,
cargo => 2,
race => 'terran',
attack => [
{
anti => 1,
+ name => 'Fragmentation Grenade',
damage => 20,
upgrade => 2,
cooldown => 30 / $FPS,
},
],
sight => 8,
-speed => 20,
+speed => 6.4 * $SM,
upgrade => [
{
name => 'Ion Thrusters',
min => 100,
gas => 100,
build => 100,
- speed => 28 - 20,
+ speed => (10 - 6.4) * $SM,
},
],
special => [
},
hp => 20,
suit => 1,
+ size => 15 / $PPT,
armor => 0,
attack => [
{
damage => 125,
splash => 1,
type => 'explosive',
- range => 3,
+ range => 3, # to walk, melee to explode
},
],
sight => 3,
- speed => 25,
+ speed => 16 * $SM,
},
],
},
gas => 100,
build => 50,
suit => 3,
+size => 32 / $PPT,
pop => 2,
cargo => 4,
race => 'terran',
attack => [
{
anti => 1,
+ name => 'Arclite Cannon',
damage => 30,
upgrade => 3,
- cooldown => 37 / $FPS,
+ cooldown => 37 / $FPS, # 15 after drop
type => 'explosive',
range => 7,
},
],
sight => 10,
-speed => 12,
+speed => 4 * $SM,
special => [
{
name => 'Siege Mode',
attack => [
{
anti => 1,
+ name => 'Arclite Shock Cannon',
damage => 70,
upgrade => 5,
cooldown => 75 / $FPS,
splash => 1,
type => 'explosive',
- range => 12,
+ range => 12, # minimum 2
},
],
speed => 0,
gas => 50,
build => 40,
suit => 3,
+size => 32 / $PPT,
pop => 2,
cargo => 2,
race => 'terran',
attack => [
{
anti => 1,
+ name => 'Twin Autocannons',
damage => 12,
upgrade => 1,
- cooldown => 22 / $FPS,
- range => 5,
+ cooldown => 22 / $FPS, # 15 after drop
+ range => 6,
},
{
anti => 2,
- damage => 20,
- upgrade => 4,
+ name => 'Hellfire Missile Pack',
+ damage => 10,
+ count => 2,
+ upgrade => 2,
type => 'explosive',
cooldown => 22 / $FPS,
range => 5,
},
],
sight => 8,
-speed => 13,
+speed => 4.57 * $SM,
upgrade => [
{
name => 'Charon Boosters',
gas => 100,
build => 60,
suit => 3,
+size => 38 / $PPT, # x30
pop => 2,
race => 'terran',
attr => {
attack => [
{
anti => 1,
+ name => 'Burst Lasers',
damage => 8,
upgrade => 1,
cooldown => 30 / $FPS,
},
{
anti => 2,
+ name => 'Gemini Missiles',
damage => 20,
upgrade => 2,
cooldown => 22 / $FPS,
},
],
sight => 7,
-speed => 17,
+speed => 6.67 * $SM,
energy => 50,
capacity => 200,
special => [
gas => 300,
build => 133,
suit => 3,
+size => 75 / $PPT, # x59
pop => 6,
race => 'terran',
attr => {
attack => [
{
anti => 3,
+ name => 'ATS/A Laser Battery',
damage => 25,
upgrade => 3,
cooldown => 30 / $FPS,
},
],
sight => 11,
-speed => 7,
+speed => 2.5 * $SM,
energy => 50,
capacity => 200,
special => [
min => 100,
gas => 100,
build => 120,
- desc => 'blast doing 260 damage to a target',
+ desc => 'blast doing 260 explosive damage to a target',
attack => [
{
anti => 3,
damage => 260,
+ type => 'explosive',
range => 10,
},
],
gas => 225,
build => 80,
suit => 3,
+size => 65 / $PPT, # x50
pop => 2,
race => 'terran',
attr => {
armor => 1,
sight => 10,
detect => 1,
-speed => 15,
+speed => 5 * $SM,
energy => 50,
capacity => 200,
special => [
gas => 125,
build => 50,
suit => 3,
+size => 49 / $PPT, # x37
pop => 3,
race => 'terran',
attr => {
attack => [
{
anti => 2,
+ name => 'Halo Rockets',
damage => 6,
upgrade => 1,
cooldown => 64 / $FPS,
},
],
sight => 8,
-speed => 19,
+speed => 6.6 * $SM,
},
{
gas => 100,
build => 50,
suit => 3,
+size => 49 / $PPT, # x37
pop => 2,
cargo => -8,
race => 'terran',
hp => 150,
armor => 1,
sight => 8,
-speed => 15,
+speed => 5.47 * $SM,
transport => 1,
},
gas => 0,
build => 20,
suit => 1,
+size => 23 / $PPT,
pop => 1,
cargo => 1,
race => 'zerg',
attack => [
{
anti => 1,
+ name => 'Spines',
damage => 5,
cooldown => 22 / $FPS,
- range => 0,
+ range => 1,
},
],
sight => 7,
-speed => 14,
+speed => 4.92 * $SM,
},
{
gas => 0,
build => 40,
suit => 3,
+size => 50 / $PPT,
pop => -9,
cargo => 0,
race => 'zerg',
cargo => 0,
sight => 9,
detect => 1,
-speed => 2,
+speed => .83 * $SM,
transport => 1,
upgrade => [
{
min => 150,
gas => 150,
build => 133,
- speed => 10 - 2,
+ speed => (3.33 - .83) * $SM,
},
],
},
},
build => 20,
suit => 1,
+size => 16 / $PPT,
pop => 0,
race => 'zerg',
attr => {
gas => 0,
build => 20,
suit => 3,
+size => 2, # 48x48
race => 'zerg',
attr => {
structure => 1,
attack => [
{
anti => 1,
+ name => 'Subterranean Tentacle',
damage => 40,
cooldown => 32 / $FPS,
type => 'explosive',
gas => 0,
build => 20,
suit => 3,
+size => 2, # 48x48
race => 'zerg',
attr => {
structure => 1,
attack => [
{
anti => 2,
+ name => 'Seeker Spores',
damage => 15,
cooldown => 15 / $FPS,
range => 7,
gas => 0,
build => 28, # for 2
suit => 1,
+size => 16 / $PPT,
pop => 0.5,
cargo => 1,
race => 'zerg',
attack => [
{
anti => 1,
+ name => 'Claws',
damage => 5,
upgrade => 1,
cooldown => 8 / $FPS,
- range => 0,
+ range => 15 / $PPT,
},
],
sight => 5,
-speed => 14,
+speed => 5.49 * $SM,
upgrade => [
{
name => 'Metabolic Boost',
min => 100,
gas => 100,
build => 80,
- speed => 22 - 14,
+ speed => (8.36 - 5.49) * $SM,
},
{
name => 'Adrenal Glands',
gas => 25,
build => 28,
suit => 2,
+size => 21 / $PPT, # x23
pop => 1,
cargo => 2,
race => 'zerg',
attack => [
{
anti => 3,
+ name => 'Needle Spines',
damage => 10,
upgrade => 1,
cooldown => 15 / $FPS,
},
],
sight => 6,
-speed => 11,
+speed => 3.66 * $SM,
upgrade => [
{
name => 'Grooved Spines',
min => 150,
gas => 150,
build => 100,
- speed => 16 - 11,
+ speed => (5.57 - 3.66) * $SM,
},
{
name => 'Lurker Aspect',
name => 'Lurker',
min => 125,
gas => 125,
-base => 'hydralisk',
+base => ['hydralisk'],
build => 40,
suit => 2,
+size => 32 / $PPT,
pop => 2,
cargo => 4,
race => 'zerg',
attack => [
{
anti => 1,
+ name => 'Subterranean Spines',
damage => 20,
upgrade => 2,
cooldown => 37 / $FPS,
},
],
sight => 8,
-speed => 17,
+speed => 5.82 * $SM,
},
{
gas => 100,
build => 50,
suit => 2,
+size => 48 / $PPT,
pop => 2,
race => 'zerg',
attr => {
hp => 120,
armor => 0,
sight => 10,
-speed => 18,
+speed => 6.67 * $SM,
energy => 50,
capacity => 200,
special => [
count => 2,
alt => 'Broodling',
suit => 1,
+ size => 19 / $PPT,
pop => 0,
attr => {
organic => 1,
attack => [
{
anti => 1,
+ name => 'Toxic Spores',
damage => 4,
upgrade => 1,
cooldown => 15 / $FPS,
- range => 0,
+ range => 2 / $PPT,
},
],
sight => 5,
- speed => 19,
+ speed => 6 * $SM,
},
],
},
gas => 50,
build => 40,
suit => 1,
+size => 17 / $PPT, # x20
pop => 1,
race => 'zerg',
attr => {
attack => [
{
anti => 1,
+ name => 'Suicide',
damage => 500,
splash => 1,
type => 'explosive',
- range => 0,
+ range => 3 / $PPT,
},
],
sight => 5,
-speed => 17,
+speed => 5.82 * $SM,
},
{
gas => 38,
build => 30, # for 2
suit => 1,
+size => 24 / $PPT,
pop => 0.5,
race => 'zerg',
attr => {
attack => [
{
anti => 2,
+ name => 'Suicide',
damage => 110,
- range => 0,
+ range => 3 / $PPT,
},
],
sight => 5,
-speed => 18,
+speed => 6.67 * $SM,
counter => ['cannon', 'goliath', 'hydralisk'],
},
gas => 100,
build => 40,
suit => 1,
+size => 44 / $PPT,
pop => 2,
race => 'zerg',
attr => {
attack => [
{
anti => 3,
+ name => 'Glave Wurm',
damage => 9,
upgrade => 1,
cooldown => 30 / $FPS,
},
],
sight => 7,
-speed => 18,
+speed => 6.67 * $SM,
special => [
{
alt => 'Cocoon',
suit => 3,
+ size => 32 / $PPT,
attr => {
organic => 1,
flying => 1,
min => 150,
gas => 200,
build => 40,
-base => 'mutalisk',
+base => ['mutalisk'],
suit => 3,
+size => 44 / $PPT,
pop => 2,
race => 'zerg',
attr => {
attack => [
{
anti => 1,
+ name => 'Acid Spore',
damage => 20,
upgrade => 2,
cooldown => 30 / $FPS,
},
],
sight => 11,
-speed => 7,
+speed => 2.5 * $SM,
},
{
min => 250,
gas => 150,
build => 40,
-base => 'mutalisk',
+base => ['mutalisk'],
suit => 3,
+size => 44 / $PPT,
pop => 2,
race => 'zerg',
attr => {
attack => [
{
anti => 2,
+ name => 'Corrosive Acid',
damage => 25,
upgrade => 2,
cooldown => 100 / $FPS,
},
],
sight => 10,
-speed => 15,
+speed => 5 * $SM,
counter => ['goliath', 'dragoon', 'scourge'],
},
gas => 150,
build => 50,
suit => 2,
+size => 27 / $PPT, # x25
pop => 2,
cargo => 2,
race => 'zerg',
hp => 80,
armor => 1,
sight => 10,
-speed => 12,
+speed => 4 * $SM,
energy => 50,
capacity => 200,
special => [
gas => 200,
build => 60,
suit => 3,
+size => 38 / $PPT, # x32
pop => 4,
cargo => 4,
race => 'zerg',
attack => [
{
anti => 1,
+ name => 'Kaiser Blades',
damage => 20,
upgrade => 3,
cooldown => 15 / $FPS,
- range => 0,
+ range => 25 / $PPT,
},
],
sight => 7,
-speed => 16,
+speed => 5.12 * $SM,
upgrade => [
{
name => 'Chitinous Plating',
min => 200,
gas => 200,
build => 133,
- speed => 21 - 16,
+ speed => (8.1 - 5.12) * $SM,
},
],
},