| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Unit Name | First Attack | Ctd Attck | GndAttkInit | GndAttkRpt | Breaks | Min Stop | Stop Frames | Notes | Legend | ||||||||||||
| 2 | Terran SCV | 2 | 2 | 3 | 3 | 0 | 2 | First Attack | Attack animation frame duration of first attack from idle | |||||||||||||
| 3 | Terran Marine | 8 | 6 | 9 | 7 | 0 | 8 | Ctd Attack | Attack animation frame duration of each attack after first if auto-attacking | |||||||||||||
| 4 | Terran Firebat | 8 | 8 | 10 | 10 | 0 | 8 | Breaks | If 0, isAttackFrame() always true when attacking. Can't determine First/Ctd | |||||||||||||
| 5 | Terran Ghost | 4 | 2 | 4 | 2 | 0 | 3 | Min Stop | Issuing stop() command before this frame will not deal damage ie: dragoon closes | |||||||||||||
| 6 | Terran Vulture | 1 | 1 | 0 | 0 | 2 | Stop Frames | Attack frame duration if stop command issued at 'min stop' | ||||||||||||||
| 7 | Terran Goliath Air | 1 | 1 | 0 | 1 | Notes | Additional notes if behaviour is strange | |||||||||||||||
| 8 | Terran Goliath Ground | 1 | 1 | 0 | 1 | Min Stop = 0 means issue stop() on first frame where isAttackFrame() = true | ||||||||||||||||
| 9 | Terran Siege Tank | 1 | 1 | 0 | 1 | |||||||||||||||||
| 10 | Terran Siege Tank SM | 1 | 1 | 0 | 1 | Formula for determining frames: | ||||||||||||||||
| 11 | Terran Wraith Air | 0 | 0 | 2 | StartFrame = First frame where isAttackFrame() = true | |||||||||||||||||
| 12 | Terran Wraith Ground | 1 | 1 | 0 | 0 | 2 | EndFrame = First frame where isAttackFrame() turns false | |||||||||||||||
| 13 | Terran Battlecruiser Air | 0 | 0 | 2 | Frame Duration = StartFrame - EndFrame; | |||||||||||||||||
| 14 | Terran Battlecruiser Ground | 1 | 1 | 0 | 0 | 2 | ||||||||||||||||
| 15 | Terran Valkyrie | 1 | 1 | 0 | 0 | 40 | Code Review: http://pastebin.com/4b8cisMK | |||||||||||||||
| 16 | Protoss Probe | 1 | 1 | 0 | 0 | 2 | CancelFrame initial value is +infinity, manually changed to determine Min Stop | |||||||||||||||
| 17 | Protoss Zealot | 8 | 7 | 8 | 7 | 0 | 7 | |||||||||||||||
| 18 | Protoss Dragoon | 9 | 3 | 9 | 3 | 5 | 7 | Frames = X+2, where X = Stop | ||||||||||||||
| 19 | Protoss Dark Templar | 9 | 9 | 10 | 10 | 0 | 9 | Note: "Stop Frames" doesn't necessarily mean you can move right away | ||||||||||||||
| 20 | Protoss Archon | 18 | 18 | 0 | 0 | 15 | It just means that the attack animation stops after that many frames. | |||||||||||||||
| 21 | Protoss Reaver | 1 | 1 | 2 | 2 | 0 | 1 | Scarab Blows Up If stop() on 0! | Will add "move after" frame data after testing | |||||||||||||
| 22 | Protoss Scout Air | 0 | 0 | 2 | ||||||||||||||||||
| 23 | Protoss Scout Ground | 5 | 5 | 0 | 0 | 2 | Dragoon, Devourer only units that can have damage halted by stop() too early | |||||||||||||||
| 24 | Protoss Corsair | 8 | 8 | 9 | 9 | 0 | 8 | |||||||||||||||
| 25 | Protoss Arbiter | 5 | 5 | 5 | 5 | 0 | 4 | Note: This data does not include any 'attack lag', if it happens | ||||||||||||||
| 26 | Protoss Carrier | Meaning any extra frames between when attack() issued and isAttackFrame()=true | ||||||||||||||||||||
| 27 | Zerg Drone | 1 | 1 | 0 | 0 | 2 | ||||||||||||||||
| 28 | Zerg Zergling | 5 | 5 | 5 | 5 | 0 | 4 | |||||||||||||||
| 29 | Zerg Hydralisk | 3 | 2 | 7 | 3 | 0 | 3 | 3,2,3,2,3,2 - alternates | ATTACK ANIMATION FRAMES ARE NOT UNIT ATTACK COOLDOWNS! | |||||||||||||
| 30 | Zerg Lurker | 2 | 2 | 0 | 0 | 2 | ||||||||||||||||
| 31 | Zerg Ultralisk | 15 | 15 | 15 | 15 | 0 | 14 | Ctd Atk Varies Anim (1,13 repeat) | Why is this important? | |||||||||||||
| 32 | Zerg Mutalisk | 1 | 1 | 0 | 0 | 2 | It's probably optimal to issue stop() to any attacking unit in BWAPI at frame Min Stop | |||||||||||||||
| 33 | Zerg Devourer | 10 | 10 | 0 | 7 | 9 | Iff Stop Frames <= Ctd Attack. Or if stop frames < first attack (if kiting) | |||||||||||||||
| 34 | ||||||||||||||||||||||
| 35 | Issuing stop before isAttackFrame() = true is not tested here. | |||||||||||||||||||||
| 36 | For example, a marine facing away will turn before firing, stop() while turning means it won't shoot | |||||||||||||||||||||
| 37 | ||||||||||||||||||||||
| 38 | dave.churchill@gmail.com | |||||||||||||||||||||
| 39 | Please give feedback or test requests, want to build this accurately and extensively | |||||||||||||||||||||
| 40 | ||||||||||||||||||||||
| 41 | ||||||||||||||||||||||
| 42 | Marine | 9 | 7 | |||||||||||||||||||
| 43 | Ghost | 4 | 2 | |||||||||||||||||||
| 44 | Vulture | 1 | 1 | |||||||||||||||||||
| 45 | Goliath Turret | 5 | 5 | |||||||||||||||||||
| 46 | Siege Tank (Tank) Turret | 3 | 3 | |||||||||||||||||||
| 47 | SCV | 3 | 3 | |||||||||||||||||||
| 48 | Wraith | 1 | 1 | |||||||||||||||||||
| 49 | Battlecruiser | 1 | 1 | |||||||||||||||||||
| 50 | Firebat | 10 | 10 | |||||||||||||||||||
| 51 | Zergling | 5 | 5 | |||||||||||||||||||
| 52 | Hydralisk | 7 | 3 | |||||||||||||||||||
| 53 | Ultralisk | 15 | 15 | |||||||||||||||||||
| 54 | Drone | 1 | 1 | |||||||||||||||||||
| 55 | Mutalisk | 1 | 1 | |||||||||||||||||||
| 56 | Guardian | 0 | 0 | |||||||||||||||||||
| 57 | Queen | 5 | 5 | |||||||||||||||||||
| 58 | Defiler | 0 | 0 | |||||||||||||||||||
| 59 | Valkyrie | 1 | 1 | |||||||||||||||||||
| 60 | Corsair | 9 | 9 | |||||||||||||||||||
| 61 | Dark Templar (Unit) | 10 | 10 | |||||||||||||||||||
| 62 | Devourer | 10 | 10 | |||||||||||||||||||
| 63 | Dark Archon Energy | 14 | 14 | |||||||||||||||||||
| 64 | Probe | 1 | 1 | |||||||||||||||||||
| 65 | Zealot | 8 | 7 | |||||||||||||||||||
| 66 | Dragoon | 9 | 3 | |||||||||||||||||||
| 67 | High Templar | 5 | 5 | |||||||||||||||||||
| 68 | Archon Energy | 18 | 18 | |||||||||||||||||||
| 69 | Scout | 5 | 5 | |||||||||||||||||||
| 70 | Arbiter | 5 | 5 | |||||||||||||||||||
| 71 | Interceptor | 2 | 2 | |||||||||||||||||||
| 72 | Reaver | 2 | 2 | |||||||||||||||||||
| 73 | Lurker | 2 | 2 | |||||||||||||||||||
| 74 | Missile Turret (Base) | 125 | 125 | |||||||||||||||||||
| 75 | Sunken Colony | 25 | 25 | |||||||||||||||||||
| 76 | Photon Cannon | 7 | 1 | |||||||||||||||||||
| 77 | ||||||||||||||||||||||
| 78 | ||||||||||||||||||||||
| 79 | ||||||||||||||||||||||
| 80 | ||||||||||||||||||||||
| 81 | ||||||||||||||||||||||
| 82 | ||||||||||||||||||||||
| 83 | ||||||||||||||||||||||
| 84 | ||||||||||||||||||||||
| 85 | ||||||||||||||||||||||
| 86 | ||||||||||||||||||||||
| 87 | ||||||||||||||||||||||
| 88 | ||||||||||||||||||||||
| 89 | ||||||||||||||||||||||
| 90 | ||||||||||||||||||||||
| 91 | ||||||||||||||||||||||
| 92 | ||||||||||||||||||||||
| 93 | ||||||||||||||||||||||
| 94 | ||||||||||||||||||||||
| 95 | ||||||||||||||||||||||
| 96 | ||||||||||||||||||||||
| 97 | ||||||||||||||||||||||
| 98 | ||||||||||||||||||||||
| 99 | ||||||||||||||||||||||
| 100 | ||||||||||||||||||||||